angular-three 2.14.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/angular-three-nativescript.mjs +3 -3
- package/fesm2022/angular-three-nativescript.mjs.map +1 -1
- package/fesm2022/angular-three-testing.mjs +12 -14
- package/fesm2022/angular-three-testing.mjs.map +1 -1
- package/fesm2022/angular-three.mjs +116 -100
- package/fesm2022/angular-three.mjs.map +1 -1
- package/lib/canvas.d.ts +31 -31
- package/lib/html.d.ts +3 -3
- package/lib/portal.d.ts +2 -2
- package/lib/routed-scene.d.ts +8 -2
- package/lib/utils/object-events.d.ts +0 -19
- package/nativescript/lib/canvas.d.ts +3 -3
- package/package.json +3 -9
- package/plugin/src/generators/init/schema.json +8 -8
- package/esm2022/angular-three.mjs +0 -5
- package/esm2022/index.mjs +0 -25
- package/esm2022/lib/canvas.mjs +0 -188
- package/esm2022/lib/directives/args.mjs +0 -53
- package/esm2022/lib/directives/selection.mjs +0 -69
- package/esm2022/lib/dom/events.mjs +0 -73
- package/esm2022/lib/events.mjs +0 -361
- package/esm2022/lib/html.mjs +0 -44
- package/esm2022/lib/instance.mjs +0 -83
- package/esm2022/lib/loader.mjs +0 -93
- package/esm2022/lib/loop.mjs +0 -141
- package/esm2022/lib/pipes/hexify.mjs +0 -86
- package/esm2022/lib/portal.mjs +0 -220
- package/esm2022/lib/renderer/catalogue.mjs +0 -7
- package/esm2022/lib/renderer/constants.mjs +0 -23
- package/esm2022/lib/renderer/index.mjs +0 -544
- package/esm2022/lib/renderer/state.mjs +0 -54
- package/esm2022/lib/renderer/utils.mjs +0 -223
- package/esm2022/lib/roots.mjs +0 -274
- package/esm2022/lib/routed-scene.mjs +0 -33
- package/esm2022/lib/store.mjs +0 -179
- package/esm2022/lib/three-types.mjs +0 -2
- package/esm2022/lib/types.mjs +0 -2
- package/esm2022/lib/utils/apply-props.mjs +0 -130
- package/esm2022/lib/utils/attach.mjs +0 -46
- package/esm2022/lib/utils/before-render.mjs +0 -41
- package/esm2022/lib/utils/is.mjs +0 -52
- package/esm2022/lib/utils/make.mjs +0 -52
- package/esm2022/lib/utils/object-events.mjs +0 -137
- package/esm2022/lib/utils/output-ref.mjs +0 -9
- package/esm2022/lib/utils/parameters.mjs +0 -70
- package/esm2022/lib/utils/resolve-ref.mjs +0 -8
- package/esm2022/lib/utils/signal-store.mjs +0 -90
- package/esm2022/lib/utils/update.mjs +0 -37
- package/esm2022/nativescript/angular-three-nativescript.mjs +0 -5
- package/esm2022/nativescript/index.mjs +0 -2
- package/esm2022/nativescript/lib/canvas.mjs +0 -127
- package/esm2022/testing/angular-three-testing.mjs +0 -5
- package/esm2022/testing/index.mjs +0 -3
- package/esm2022/testing/lib/test-bed.mjs +0 -130
- package/esm2022/testing/lib/test-canvas.mjs +0 -45
- package/esm2022/testing/lib/utils/mock-canvas.mjs +0 -37
- package/esm2022/testing/lib/utils/web-gl-rendering-context.mjs +0 -752
package/esm2022/lib/portal.mjs
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { afterNextRender, ChangeDetectionStrategy, Component, computed, contentChild, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, Directive, effect, inject, Injector, input, signal, TemplateRef, untracked, viewChild, ViewContainerRef, } from '@angular/core';
|
|
2
|
-
import { Raycaster, Vector2, Vector3 } from 'three';
|
|
3
|
-
import { getLocalState, prepare } from './instance';
|
|
4
|
-
import { SPECIAL_INTERNAL_ADD_COMMENT } from './renderer/constants';
|
|
5
|
-
import { injectStore, provideStore } from './store';
|
|
6
|
-
import { is } from './utils/is';
|
|
7
|
-
import { signalStore } from './utils/signal-store';
|
|
8
|
-
import { updateCamera } from './utils/update';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
export class NgtPortalBeforeRender {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.portalStore = injectStore();
|
|
13
|
-
this.renderPriority = input(1);
|
|
14
|
-
this.parentScene = input.required();
|
|
15
|
-
this.parentCamera = input.required();
|
|
16
|
-
effect((onCleanup) => {
|
|
17
|
-
// track state
|
|
18
|
-
const [renderPriority, { internal }] = [this.renderPriority(), this.portalStore.state()];
|
|
19
|
-
let oldClean;
|
|
20
|
-
const cleanup = internal.subscribe(({ gl, scene, camera }) => {
|
|
21
|
-
const [parentScene, parentCamera] = [untracked(this.parentScene), untracked(this.parentCamera)];
|
|
22
|
-
oldClean = gl.autoClear;
|
|
23
|
-
if (renderPriority === 1) {
|
|
24
|
-
// clear scene and render with default
|
|
25
|
-
gl.autoClear = true;
|
|
26
|
-
gl.render(parentScene, parentCamera);
|
|
27
|
-
}
|
|
28
|
-
// disable cleaning
|
|
29
|
-
gl.autoClear = false;
|
|
30
|
-
gl.clearDepth();
|
|
31
|
-
gl.render(scene, camera);
|
|
32
|
-
// restore
|
|
33
|
-
gl.autoClear = oldClean;
|
|
34
|
-
}, renderPriority, this.portalStore);
|
|
35
|
-
onCleanup(() => cleanup());
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
onPointerOver() {
|
|
39
|
-
/* noop */
|
|
40
|
-
}
|
|
41
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtPortalBeforeRender, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.11", type: NgtPortalBeforeRender, isStandalone: true, selector: "ngt-portal-before-render", inputs: { renderPriority: { classPropertyName: "renderPriority", publicName: "renderPriority", isSignal: true, isRequired: false, transformFunction: null }, parentScene: { classPropertyName: "parentScene", publicName: "parentScene", isSignal: true, isRequired: true, transformFunction: null }, parentCamera: { classPropertyName: "parentCamera", publicName: "parentCamera", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
43
|
-
<!-- Without an element that receives pointer events state.pointer will always be 0/0 -->
|
|
44
|
-
<ngt-group (pointerover)="onPointerOver()" attach="none" />
|
|
45
|
-
`, isInline: true }); }
|
|
46
|
-
}
|
|
47
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtPortalBeforeRender, decorators: [{
|
|
48
|
-
type: Component,
|
|
49
|
-
args: [{
|
|
50
|
-
selector: 'ngt-portal-before-render',
|
|
51
|
-
standalone: true,
|
|
52
|
-
template: `
|
|
53
|
-
<!-- Without an element that receives pointer events state.pointer will always be 0/0 -->
|
|
54
|
-
<ngt-group (pointerover)="onPointerOver()" attach="none" />
|
|
55
|
-
`,
|
|
56
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
57
|
-
}]
|
|
58
|
-
}], ctorParameters: () => [] });
|
|
59
|
-
export class NgtPortalContent {
|
|
60
|
-
constructor() {
|
|
61
|
-
const { element: comment } = inject(ViewContainerRef);
|
|
62
|
-
const { element: parentComment } = inject(ViewContainerRef, { skipSelf: true });
|
|
63
|
-
const commentNode = comment.nativeElement;
|
|
64
|
-
if (commentNode[SPECIAL_INTERNAL_ADD_COMMENT]) {
|
|
65
|
-
commentNode[SPECIAL_INTERNAL_ADD_COMMENT](parentComment.nativeElement);
|
|
66
|
-
delete commentNode[SPECIAL_INTERNAL_ADD_COMMENT];
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
static ngTemplateContextGuard(_, ctx) {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtPortalContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
73
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: NgtPortalContent, isStandalone: true, selector: "ng-template[portalContent]", ngImport: i0 }); }
|
|
74
|
-
}
|
|
75
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtPortalContent, decorators: [{
|
|
76
|
-
type: Directive,
|
|
77
|
-
args: [{ selector: 'ng-template[portalContent]', standalone: true }]
|
|
78
|
-
}], ctorParameters: () => [] });
|
|
79
|
-
// Keys that shouldn't be copied between stores
|
|
80
|
-
export const privateKeys = [
|
|
81
|
-
'setSize',
|
|
82
|
-
'setFrameloop',
|
|
83
|
-
'setDpr',
|
|
84
|
-
'events',
|
|
85
|
-
'setEvents',
|
|
86
|
-
'invalidate',
|
|
87
|
-
'advance',
|
|
88
|
-
'size',
|
|
89
|
-
'viewport',
|
|
90
|
-
];
|
|
91
|
-
export class NgtPortal {
|
|
92
|
-
constructor() {
|
|
93
|
-
this.container = input.required();
|
|
94
|
-
this.state = input({});
|
|
95
|
-
/**
|
|
96
|
-
* @decsription turn this on to enable "HUD" like rendering
|
|
97
|
-
*/
|
|
98
|
-
this.autoRender = input(false);
|
|
99
|
-
this.autoRenderPriority = input(1);
|
|
100
|
-
this.portalContent = contentChild.required(NgtPortalContent, { read: TemplateRef });
|
|
101
|
-
this.portalAnchor = viewChild.required('anchor', { read: ViewContainerRef });
|
|
102
|
-
this.injector = inject(Injector);
|
|
103
|
-
this.portalStore = injectStore({ self: true });
|
|
104
|
-
this.parentStore = injectStore({ skipSelf: true });
|
|
105
|
-
this.parentScene = this.parentStore.select('scene');
|
|
106
|
-
this.parentCamera = this.parentStore.select('camera');
|
|
107
|
-
this.raycaster = new Raycaster();
|
|
108
|
-
this.pointer = new Vector2();
|
|
109
|
-
this.portalRendered = signal(false);
|
|
110
|
-
this.shouldAutoRender = computed(() => this.portalRendered() && this.autoRender());
|
|
111
|
-
const parentState = this.parentStore.select();
|
|
112
|
-
// NOTE: we run this in afterNextRender for inputs to resolve
|
|
113
|
-
afterNextRender(() => {
|
|
114
|
-
const previousState = this.parentStore.snapshot;
|
|
115
|
-
const { events = {}, size = {}, ...rest } = this.state();
|
|
116
|
-
let container = this.container();
|
|
117
|
-
if (!is.instance(container)) {
|
|
118
|
-
container = prepare(container, { store: this.portalStore });
|
|
119
|
-
}
|
|
120
|
-
const localState = getLocalState(container);
|
|
121
|
-
if (localState && !localState.store) {
|
|
122
|
-
localState.store = this.portalStore;
|
|
123
|
-
}
|
|
124
|
-
this.portalStore.update({
|
|
125
|
-
...previousState,
|
|
126
|
-
scene: container,
|
|
127
|
-
raycaster: this.raycaster,
|
|
128
|
-
pointer: this.pointer,
|
|
129
|
-
events: { ...previousState.events, ...events },
|
|
130
|
-
size: { ...previousState.size, ...size },
|
|
131
|
-
previousRoot: this.parentStore,
|
|
132
|
-
...rest,
|
|
133
|
-
setEvents: (events) => this.portalStore.update((state) => ({ ...state, events: { ...state.events, ...events } })),
|
|
134
|
-
});
|
|
135
|
-
effect(() => {
|
|
136
|
-
const state = this.state();
|
|
137
|
-
const _parentState = parentState();
|
|
138
|
-
this.portalStore.update((prev) => this.inject(_parentState, prev, state, untracked(this.container)));
|
|
139
|
-
untracked(() => {
|
|
140
|
-
if (this.portalView) {
|
|
141
|
-
this.portalView.detectChanges();
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
this.portalView = this.portalAnchor().createEmbeddedView(this.portalContent(), { container: this.container(), injector: this.injector }, { injector: this.injector });
|
|
145
|
-
this.portalView.detectChanges();
|
|
146
|
-
this.portalRendered.set(true);
|
|
147
|
-
});
|
|
148
|
-
}, { injector: this.injector });
|
|
149
|
-
});
|
|
150
|
-
inject(DestroyRef).onDestroy(() => {
|
|
151
|
-
this.portalView?.destroy();
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
inject(parentState, portalState, injectedState, container) {
|
|
155
|
-
const { events = {}, size, ...rest } = injectedState;
|
|
156
|
-
const intersect = { ...parentState }; // all prev state props
|
|
157
|
-
Object.keys(parentState).forEach((key) => {
|
|
158
|
-
if (privateKeys.includes(key) ||
|
|
159
|
-
(parentState[key] !== portalState[key] &&
|
|
160
|
-
portalState[key])) {
|
|
161
|
-
delete intersect[key];
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
let viewport = undefined;
|
|
165
|
-
if (portalState && size) {
|
|
166
|
-
const camera = portalState.camera;
|
|
167
|
-
// Calculate the override viewport, if present
|
|
168
|
-
viewport = parentState.viewport.getCurrentViewport(camera, new Vector3(), size);
|
|
169
|
-
// Update the portal camera, if it differs from the previous layer
|
|
170
|
-
if (camera !== parentState.camera) {
|
|
171
|
-
updateCamera(camera, size);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
return {
|
|
175
|
-
...intersect,
|
|
176
|
-
scene: container,
|
|
177
|
-
raycaster: this.raycaster,
|
|
178
|
-
pointer: this.pointer,
|
|
179
|
-
events: { ...parentState.events, ...(portalState.events || {}), ...(events || {}) },
|
|
180
|
-
size: { ...parentState.size, ...(size || {}) },
|
|
181
|
-
viewport: { ...parentState.viewport, ...(viewport || {}) },
|
|
182
|
-
...rest,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtPortal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
186
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NgtPortal, isStandalone: true, selector: "ngt-portal", inputs: { container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: true, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, autoRender: { classPropertyName: "autoRender", publicName: "autoRender", isSignal: true, isRequired: false, transformFunction: null }, autoRenderPriority: { classPropertyName: "autoRenderPriority", publicName: "autoRenderPriority", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideStore(() => signalStore({}))], queries: [{ propertyName: "portalContent", first: true, predicate: NgtPortalContent, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "portalAnchor", first: true, predicate: ["anchor"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
|
|
187
|
-
<ng-container #anchor />
|
|
188
|
-
|
|
189
|
-
@if (shouldAutoRender()) {
|
|
190
|
-
<ngt-portal-before-render
|
|
191
|
-
[renderPriority]="autoRenderPriority()"
|
|
192
|
-
[parentScene]="parentScene()"
|
|
193
|
-
[parentCamera]="parentCamera()"
|
|
194
|
-
/>
|
|
195
|
-
}
|
|
196
|
-
`, isInline: true, dependencies: [{ kind: "component", type: NgtPortalBeforeRender, selector: "ngt-portal-before-render", inputs: ["renderPriority", "parentScene", "parentCamera"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
197
|
-
}
|
|
198
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtPortal, decorators: [{
|
|
199
|
-
type: Component,
|
|
200
|
-
args: [{
|
|
201
|
-
selector: 'ngt-portal',
|
|
202
|
-
standalone: true,
|
|
203
|
-
template: `
|
|
204
|
-
<ng-container #anchor />
|
|
205
|
-
|
|
206
|
-
@if (shouldAutoRender()) {
|
|
207
|
-
<ngt-portal-before-render
|
|
208
|
-
[renderPriority]="autoRenderPriority()"
|
|
209
|
-
[parentScene]="parentScene()"
|
|
210
|
-
[parentCamera]="parentCamera()"
|
|
211
|
-
/>
|
|
212
|
-
}
|
|
213
|
-
`,
|
|
214
|
-
imports: [NgtPortalBeforeRender],
|
|
215
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
216
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
217
|
-
providers: [provideStore(() => signalStore({}))],
|
|
218
|
-
}]
|
|
219
|
-
}], ctorParameters: () => [] });
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcG9ydGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFFTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBb0IsU0FBUyxFQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFcEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVc5QyxNQUFNLE9BQU8scUJBQXFCO0lBT2pDO1FBTlEsZ0JBQVcsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUVwQyxtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixnQkFBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVMsQ0FBQztRQUN0QyxpQkFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUd2QyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNw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b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Y29udGVudENoaWxkLFxuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHREZXN0cm95UmVmLFxuXHREaXJlY3RpdmUsXG5cdGVmZmVjdCxcblx0RW1iZWRkZWRWaWV3UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG5cdFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FtZXJhLCBPYmplY3QzRCwgUmF5Y2FzdGVyLCBTY2VuZSwgVmVjdG9yMiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuL2luc3RhbmNlJztcbmltcG9ydCB7IFNQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlQgfSBmcm9tICcuL3JlbmRlcmVyL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpbmplY3RTdG9yZSwgcHJvdmlkZVN0b3JlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgeyBOZ3RDb21wdXRlRnVuY3Rpb24sIE5ndFNpemUsIE5ndFN0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgc2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyB1cGRhdGVDYW1lcmEgfSBmcm9tICcuL3V0aWxzL3VwZGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1wb3J0YWwtYmVmb3JlLXJlbmRlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PCEtLSBXaXRob3V0IGFuIGVsZW1lbnQgdGhhdCByZWNlaXZlcyBwb2ludGVyIGV2ZW50cyBzdGF0ZS5wb2ludGVyIHdpbGwgYWx3YXlzIGJlIDAvMCAtLT5cblx0XHQ8bmd0LWdyb3VwIChwb2ludGVyb3Zlcik9XCJvblBvaW50ZXJPdmVyKClcIiBhdHRhY2g9XCJub25lXCIgLz5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RQb3J0YWxCZWZvcmVSZW5kZXIge1xuXHRwcml2YXRlIHBvcnRhbFN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblxuXHRyZW5kZXJQcmlvcml0eSA9IGlucHV0KDEpO1xuXHRwYXJlbnRTY2VuZSA9IGlucHV0LnJlcXVpcmVkPFNjZW5lPigpO1xuXHRwYXJlbnRDYW1lcmEgPSBpbnB1dC5yZXF1aXJlZDxDYW1lcmE+KCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdC8vIHRyYWNrIHN0YXRlXG5cdFx0XHRjb25zdCBbcmVuZGVyUHJpb3JpdHksIHsgaW50ZXJuYWwgfV0gPSBbdGhpcy5yZW5kZXJQcmlvcml0eSgpLCB0aGlzLnBvcnRhbFN0b3JlLnN0YXRlKCldO1xuXG5cdFx0XHRsZXQgb2xkQ2xlYW46IGJvb2xlYW47XG5cblx0XHRcdGNvbnN0IGNsZWFudXAgPSBpbnRlcm5hbC5zdWJzY3JpYmUoXG5cdFx0XHRcdCh7IGdsLCBzY2VuZSwgY2FtZXJhIH0pID0+IHtcblx0XHRcdFx0XHRjb25zdCBbcGFyZW50U2NlbmUsIHBhcmVudENhbWVyYV0gPSBbdW50cmFja2VkKHRoaXMucGFyZW50U2NlbmUpLCB1bnRyYWNrZWQodGhpcy5wYXJlbnRDYW1lcmEpXTtcblx0XHRcdFx0XHRvbGRDbGVhbiA9IGdsLmF1dG9DbGVhcjtcblx0XHRcdFx0XHRpZiAocmVuZGVyUHJpb3JpdHkgPT09IDEpIHtcblx0XHRcdFx0XHRcdC8vIGNsZWFyIHNjZW5lIGFuZCByZW5kZXIgd2l0aCBkZWZhdWx0XG5cdFx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSB0cnVlO1xuXHRcdFx0XHRcdFx0Z2wucmVuZGVyKHBhcmVudFNjZW5lLCBwYXJlbnRDYW1lcmEpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIGRpc2FibGUgY2xlYW5pbmdcblx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBmYWxzZTtcblx0XHRcdFx0XHRnbC5jbGVhckRlcHRoKCk7XG5cdFx0XHRcdFx0Z2wucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuXHRcdFx0XHRcdC8vIHJlc3RvcmVcblx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBvbGRDbGVhbjtcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVuZGVyUHJpb3JpdHksXG5cdFx0XHRcdHRoaXMucG9ydGFsU3RvcmUsXG5cdFx0XHQpO1xuXG5cdFx0XHRvbkNsZWFudXAoKCkgPT4gY2xlYW51cCgpKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uUG9pbnRlck92ZXIoKSB7XG5cdFx0Lyogbm9vcCAqL1xuXHR9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW3BvcnRhbENvbnRlbnRdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndFBvcnRhbENvbnRlbnQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCB7IGVsZW1lbnQ6IGNvbW1lbnQgfSA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblx0XHRjb25zdCB7IGVsZW1lbnQ6IHBhcmVudENvbW1lbnQgfSA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmLCB7IHNraXBTZWxmOiB0cnVlIH0pO1xuXG5cdFx0Y29uc3QgY29tbWVudE5vZGUgPSBjb21tZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKGNvbW1lbnROb2RlW1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdKSB7XG5cdFx0XHRjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXShwYXJlbnRDb21tZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXHRcdFx0ZGVsZXRlIGNvbW1lbnROb2RlW1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF86IE5ndFBvcnRhbENvbnRlbnQsIGN0eDogdW5rbm93bik6IGN0eCBpcyB7IGNvbnRhaW5lcjogT2JqZWN0M0Q7IGluamVjdG9yOiBJbmplY3RvciB9IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuLy8gS2V5cyB0aGF0IHNob3VsZG4ndCBiZSBjb3BpZWQgYmV0d2VlbiBzdG9yZXNcbmV4cG9ydCBjb25zdCBwcml2YXRlS2V5cyA9IFtcblx0J3NldFNpemUnLFxuXHQnc2V0RnJhbWVsb29wJyxcblx0J3NldERwcicsXG5cdCdldmVudHMnLFxuXHQnc2V0RXZlbnRzJyxcblx0J2ludmFsaWRhdGUnLFxuXHQnYWR2YW5jZScsXG5cdCdzaXplJyxcblx0J3ZpZXdwb3J0Jyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIE5ndFBvcnRhbFByaXZhdGVLZXlzID0gKHR5cGVvZiBwcml2YXRlS2V5cylbbnVtYmVyXTtcblxuZXhwb3J0IHR5cGUgTmd0UG9ydGFsSW5qZWN0YWJsZVN0YXRlID0gUGFydGlhbDxcblx0T21pdDxOZ3RTdGF0ZSwgTmd0UG9ydGFsUHJpdmF0ZUtleXM+ICYge1xuXHRcdGV2ZW50cz86IHtcblx0XHRcdGVuYWJsZWQ/OiBib29sZWFuO1xuXHRcdFx0cHJpb3JpdHk/OiBudW1iZXI7XG5cdFx0XHRjb21wdXRlPzogTmd0Q29tcHV0ZUZ1bmN0aW9uO1xuXHRcdFx0Y29ubmVjdGVkPzogYW55O1xuXHRcdH07XG5cdFx0c2l6ZT86IE5ndFNpemU7XG5cdH1cbj47XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1wb3J0YWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZy1jb250YWluZXIgI2FuY2hvciAvPlxuXG5cdFx0QGlmIChzaG91bGRBdXRvUmVuZGVyKCkpIHtcblx0XHRcdDxuZ3QtcG9ydGFsLWJlZm9yZS1yZW5kZXJcblx0XHRcdFx0W3JlbmRlclByaW9yaXR5XT1cImF1dG9SZW5kZXJQcmlvcml0eSgpXCJcblx0XHRcdFx0W3BhcmVudFNjZW5lXT1cInBhcmVudFNjZW5lKClcIlxuXHRcdFx0XHRbcGFyZW50Q2FtZXJhXT1cInBhcmVudENhbWVyYSgpXCJcblx0XHRcdC8+XG5cdFx0fVxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0UG9ydGFsQmVmb3JlUmVuZGVyXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0cHJvdmlkZXJzOiBbcHJvdmlkZVN0b3JlKCgpID0+IHNpZ25hbFN0b3JlKHt9KSldLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RQb3J0YWwge1xuXHRjb250YWluZXIgPSBpbnB1dC5yZXF1aXJlZDxPYmplY3QzRD4oKTtcblx0c3RhdGUgPSBpbnB1dDxOZ3RQb3J0YWxJbmplY3RhYmxlU3RhdGU+KHt9KTtcblxuXHQvKipcblx0ICogQGRlY3NyaXB0aW9uIHR1cm4gdGhpcyBvbiB0byBlbmFibGUgXCJIVURcIiBsaWtlIHJlbmRlcmluZ1xuXHQgKi9cblx0YXV0b1JlbmRlciA9IGlucHV0KGZhbHNlKTtcblx0YXV0b1JlbmRlclByaW9yaXR5ID0gaW5wdXQoMSk7XG5cblx0cHJpdmF0ZSBwb3J0YWxDb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKE5ndFBvcnRhbENvbnRlbnQsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSk7XG5cdHByaXZhdGUgcG9ydGFsQW5jaG9yID0gdmlld0NoaWxkLnJlcXVpcmVkKCdhbmNob3InLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSk7XG5cblx0cHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdHByaXZhdGUgcG9ydGFsU3RvcmUgPSBpbmplY3RTdG9yZSh7IHNlbGY6IHRydWUgfSk7XG5cdHByaXZhdGUgcGFyZW50U3RvcmUgPSBpbmplY3RTdG9yZSh7IHNraXBTZWxmOiB0cnVlIH0pO1xuXHRwcm90ZWN0ZWQgcGFyZW50U2NlbmUgPSB0aGlzLnBhcmVudFN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblx0cHJvdGVjdGVkIHBhcmVudENhbWVyYSA9IHRoaXMucGFyZW50U3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblxuXHRwcml2YXRlIHJheWNhc3RlciA9IG5ldyBSYXljYXN0ZXIoKTtcblx0cHJpdmF0ZSBwb2ludGVyID0gbmV3IFZlY3RvcjIoKTtcblx0cHJpdmF0ZSBwb3J0YWxSZW5kZXJlZCA9IHNpZ25hbChmYWxzZSk7XG5cblx0cHJvdGVjdGVkIHNob3VsZEF1dG9SZW5kZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBvcnRhbFJlbmRlcmVkKCkgJiYgdGhpcy5hdXRvUmVuZGVyKCkpO1xuXG5cdHByaXZhdGUgcG9ydGFsVmlldz86IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBwYXJlbnRTdGF0ZSA9IHRoaXMucGFyZW50U3RvcmUuc2VsZWN0KCk7XG5cblx0XHQvLyBOT1RFOiB3ZSBydW4gdGhpcyBpbiBhZnRlck5leHRSZW5kZXIgZm9yIGlucHV0cyB0byByZXNvbHZlXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IHByZXZpb3VzU3RhdGUgPSB0aGlzLnBhcmVudFN0b3JlLnNuYXBzaG90O1xuXG5cdFx0XHRjb25zdCB7IGV2ZW50cyA9IHt9LCBzaXplID0ge30sIC4uLnJlc3QgfSA9IHRoaXMuc3RhdGUoKTtcblx0XHRcdGxldCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcigpO1xuXG5cdFx0XHRpZiAoIWlzLmluc3RhbmNlKGNvbnRhaW5lcikpIHtcblx0XHRcdFx0Y29udGFpbmVyID0gcHJlcGFyZShjb250YWluZXIsIHsgc3RvcmU6IHRoaXMucG9ydGFsU3RvcmUgfSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGNvbnRhaW5lcik7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZSAmJiAhbG9jYWxTdGF0ZS5zdG9yZSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLnN0b3JlID0gdGhpcy5wb3J0YWxTdG9yZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5wb3J0YWxTdG9yZS51cGRhdGUoe1xuXHRcdFx0XHQuLi5wcmV2aW91c1N0YXRlLFxuXHRcdFx0XHRzY2VuZTogY29udGFpbmVyIGFzIFNjZW5lLFxuXHRcdFx0XHRyYXljYXN0ZXI6IHRoaXMucmF5Y2FzdGVyLFxuXHRcdFx0XHRwb2ludGVyOiB0aGlzLnBvaW50ZXIsXG5cdFx0XHRcdGV2ZW50czogeyAuLi5wcmV2aW91c1N0YXRlLmV2ZW50cywgLi4uZXZlbnRzIH0sXG5cdFx0XHRcdHNpemU6IHsgLi4ucHJldmlvdXNTdGF0ZS5zaXplLCAuLi5zaXplIH0sXG5cdFx0XHRcdHByZXZpb3VzUm9vdDogdGhpcy5wYXJlbnRTdG9yZSxcblx0XHRcdFx0Li4ucmVzdCxcblx0XHRcdFx0c2V0RXZlbnRzOiAoZXZlbnRzKSA9PlxuXHRcdFx0XHRcdHRoaXMucG9ydGFsU3RvcmUudXBkYXRlKChzdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGV2ZW50czogeyAuLi5zdGF0ZS5ldmVudHMsIC4uLmV2ZW50cyB9IH0pKSxcblx0XHRcdH0pO1xuXG5cdFx0XHRlZmZlY3QoXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcblx0XHRcdFx0XHRjb25zdCBfcGFyZW50U3RhdGUgPSBwYXJlbnRTdGF0ZSgpO1xuXHRcdFx0XHRcdHRoaXMucG9ydGFsU3RvcmUudXBkYXRlKChwcmV2KSA9PiB0aGlzLmluamVjdChfcGFyZW50U3RhdGUsIHByZXYsIHN0YXRlLCB1bnRyYWNrZWQodGhpcy5jb250YWluZXIpKSk7XG5cdFx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnBvcnRhbFZpZXcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wb3J0YWxWaWV3LmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLnBvcnRhbFZpZXcgPSB0aGlzLnBvcnRhbEFuY2hvcigpLmNyZWF0ZUVtYmVkZGVkVmlldyhcblx0XHRcdFx0XHRcdFx0dGhpcy5wb3J0YWxDb250ZW50KCksXG5cdFx0XHRcdFx0XHRcdHsgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcigpLCBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuXHRcdFx0XHRcdFx0XHR7IGluamVjdG9yOiB0aGlzLmluamVjdG9yIH0sXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dGhpcy5wb3J0YWxWaWV3LmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdHRoaXMucG9ydGFsUmVuZGVyZWQuc2V0KHRydWUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IGluamVjdG9yOiB0aGlzLmluamVjdG9yIH0sXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLnBvcnRhbFZpZXc/LmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgaW5qZWN0KFxuXHRcdHBhcmVudFN0YXRlOiBOZ3RTdGF0ZSxcblx0XHRwb3J0YWxTdGF0ZTogTmd0U3RhdGUsXG5cdFx0aW5qZWN0ZWRTdGF0ZTogTmd0UG9ydGFsSW5qZWN0YWJsZVN0YXRlLFxuXHRcdGNvbnRhaW5lcjogT2JqZWN0M0QsXG5cdCkge1xuXHRcdGNvbnN0IHsgZXZlbnRzID0ge30sIHNpemUsIC4uLnJlc3QgfSA9IGluamVjdGVkU3RhdGU7XG5cdFx0Y29uc3QgaW50ZXJzZWN0OiBQYXJ0aWFsPE5ndFN0YXRlPiA9IHsgLi4ucGFyZW50U3RhdGUgfTsgLy8gYWxsIHByZXYgc3RhdGUgcHJvcHNcblxuXHRcdE9iamVjdC5rZXlzKHBhcmVudFN0YXRlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJpdmF0ZUtleXMuaW5jbHVkZXMoa2V5IGFzIE5ndFBvcnRhbFByaXZhdGVLZXlzKSB8fFxuXHRcdFx0XHQocGFyZW50U3RhdGVba2V5IGFzIGtleW9mIE5ndFN0YXRlXSAhPT0gcG9ydGFsU3RhdGVba2V5IGFzIGtleW9mIE5ndFN0YXRlXSAmJlxuXHRcdFx0XHRcdHBvcnRhbFN0YXRlW2tleSBhcyBrZXlvZiBOZ3RTdGF0ZV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0ZGVsZXRlIGludGVyc2VjdFtrZXkgYXMga2V5b2YgTmd0U3RhdGVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0bGV0IHZpZXdwb3J0ID0gdW5kZWZpbmVkO1xuXHRcdGlmIChwb3J0YWxTdGF0ZSAmJiBzaXplKSB7XG5cdFx0XHRjb25zdCBjYW1lcmEgPSBwb3J0YWxTdGF0ZS5jYW1lcmE7XG5cdFx0XHQvLyBDYWxjdWxhdGUgdGhlIG92ZXJyaWRlIHZpZXdwb3J0LCBpZiBwcmVzZW50XG5cdFx0XHR2aWV3cG9ydCA9IHBhcmVudFN0YXRlLnZpZXdwb3J0LmdldEN1cnJlbnRWaWV3cG9ydChjYW1lcmEsIG5ldyBWZWN0b3IzKCksIHNpemUpO1xuXHRcdFx0Ly8gVXBkYXRlIHRoZSBwb3J0YWwgY2FtZXJhLCBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHByZXZpb3VzIGxheWVyXG5cdFx0XHRpZiAoY2FtZXJhICE9PSBwYXJlbnRTdGF0ZS5jYW1lcmEpIHtcblx0XHRcdFx0dXBkYXRlQ2FtZXJhKGNhbWVyYSwgc2l6ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmludGVyc2VjdCxcblx0XHRcdHNjZW5lOiBjb250YWluZXIgYXMgU2NlbmUsXG5cdFx0XHRyYXljYXN0ZXI6IHRoaXMucmF5Y2FzdGVyLFxuXHRcdFx0cG9pbnRlcjogdGhpcy5wb2ludGVyLFxuXHRcdFx0ZXZlbnRzOiB7IC4uLnBhcmVudFN0YXRlLmV2ZW50cywgLi4uKHBvcnRhbFN0YXRlLmV2ZW50cyB8fCB7fSksIC4uLihldmVudHMgfHwge30pIH0sXG5cdFx0XHRzaXplOiB7IC4uLnBhcmVudFN0YXRlLnNpemUsIC4uLihzaXplIHx8IHt9KSB9LFxuXHRcdFx0dmlld3BvcnQ6IHsgLi4ucGFyZW50U3RhdGUudmlld3BvcnQsIC4uLih2aWV3cG9ydCB8fCB7fSkgfSxcblx0XHRcdC4uLnJlc3QsXG5cdFx0fTtcblx0fVxufVxuIl19
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { createInjectionToken } from 'ngxtension/create-injection-token';
|
|
2
|
-
const catalogue = {};
|
|
3
|
-
export function extend(objects) {
|
|
4
|
-
Object.assign(catalogue, objects);
|
|
5
|
-
}
|
|
6
|
-
export const [injectCatalogue] = createInjectionToken(() => catalogue);
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZ3VlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcmVuZGVyZXIvY2F0YWxvZ3VlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBSXpFLE1BQU0sU0FBUyxHQUFzQyxFQUFFLENBQUM7QUFFeEQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxPQUFlO0lBQ3JDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSW5qZWN0aW9uVG9rZW4gfSBmcm9tICduZ3h0ZW5zaW9uL2NyZWF0ZS1pbmplY3Rpb24tdG9rZW4nO1xuXG5leHBvcnQgdHlwZSBOZ3RBbnlDb25zdHJ1Y3RvciA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueTtcblxuY29uc3QgY2F0YWxvZ3VlOiBSZWNvcmQ8c3RyaW5nLCBOZ3RBbnlDb25zdHJ1Y3Rvcj4gPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChvYmplY3RzOiBvYmplY3QpOiB2b2lkIHtcblx0T2JqZWN0LmFzc2lnbihjYXRhbG9ndWUsIG9iamVjdHMpO1xufVxuXG5leHBvcnQgY29uc3QgW2luamVjdENhdGFsb2d1ZV0gPSBjcmVhdGVJbmplY3Rpb25Ub2tlbigoKSA9PiBjYXRhbG9ndWUpO1xuIl19
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export const ROUTED_SCENE = '__ngt_renderer_is_routed_scene__';
|
|
2
|
-
export const HTML = '__ngt_renderer_is_html';
|
|
3
|
-
export const NON_ROOT = '__ngt_renderer_is_non_root__';
|
|
4
|
-
export const SPECIAL_INTERNAL_ADD_COMMENT = '__ngt_renderer_add_comment__';
|
|
5
|
-
export const DOM_PARENT = '__ngt_dom_parent__';
|
|
6
|
-
export const SPECIAL_DOM_TAG = {
|
|
7
|
-
NGT_PORTAL: 'ngt-portal',
|
|
8
|
-
NGT_PRIMITIVE: 'ngt-primitive',
|
|
9
|
-
NGT_VALUE: 'ngt-value',
|
|
10
|
-
};
|
|
11
|
-
export const SPECIAL_PROPERTIES = {
|
|
12
|
-
RENDER_PRIORITY: 'priority',
|
|
13
|
-
ATTACH: 'attach',
|
|
14
|
-
RAW_VALUE: 'rawValue',
|
|
15
|
-
PARAMETERS: 'parameters',
|
|
16
|
-
};
|
|
17
|
-
export const SPECIAL_EVENTS = {
|
|
18
|
-
BEFORE_RENDER: 'beforeRender',
|
|
19
|
-
UPDATED: 'updated',
|
|
20
|
-
ATTACHED: 'attached',
|
|
21
|
-
};
|
|
22
|
-
export const THREE_NATIVE_EVENTS = ['added', 'removed', 'childadded', 'childremoved', 'disposed'];
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcmVuZGVyZXIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxrQ0FBa0MsQ0FBQztBQUMvRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsd0JBQXdCLENBQUM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLDhCQUE4QixDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLDhCQUE4QixDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDOUIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsYUFBYSxFQUFFLGVBQWU7SUFDOUIsU0FBUyxFQUFFLFdBQVc7Q0FDYixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDakMsZUFBZSxFQUFFLFVBQVU7SUFDM0IsTUFBTSxFQUFFLFFBQVE7SUFDaEIsU0FBUyxFQUFFLFVBQVU7SUFDckIsVUFBVSxFQUFFLFlBQVk7Q0FDZixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHO0lBQzdCLGFBQWEsRUFBRSxjQUFjO0lBQzdCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFFBQVEsRUFBRSxVQUFVO0NBQ1gsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFJPVVRFRF9TQ0VORSA9ICdfX25ndF9yZW5kZXJlcl9pc19yb3V0ZWRfc2NlbmVfXyc7XG5leHBvcnQgY29uc3QgSFRNTCA9ICdfX25ndF9yZW5kZXJlcl9pc19odG1sJztcbmV4cG9ydCBjb25zdCBOT05fUk9PVCA9ICdfX25ndF9yZW5kZXJlcl9pc19ub25fcm9vdF9fJztcbmV4cG9ydCBjb25zdCBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UID0gJ19fbmd0X3JlbmRlcmVyX2FkZF9jb21tZW50X18nO1xuZXhwb3J0IGNvbnN0IERPTV9QQVJFTlQgPSAnX19uZ3RfZG9tX3BhcmVudF9fJztcblxuZXhwb3J0IGNvbnN0IFNQRUNJQUxfRE9NX1RBRyA9IHtcblx0TkdUX1BPUlRBTDogJ25ndC1wb3J0YWwnLFxuXHROR1RfUFJJTUlUSVZFOiAnbmd0LXByaW1pdGl2ZScsXG5cdE5HVF9WQUxVRTogJ25ndC12YWx1ZScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgU1BFQ0lBTF9QUk9QRVJUSUVTID0ge1xuXHRSRU5ERVJfUFJJT1JJVFk6ICdwcmlvcml0eScsXG5cdEFUVEFDSDogJ2F0dGFjaCcsXG5cdFJBV19WQUxVRTogJ3Jhd1ZhbHVlJyxcblx0UEFSQU1FVEVSUzogJ3BhcmFtZXRlcnMnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFNQRUNJQUxfRVZFTlRTID0ge1xuXHRCRUZPUkVfUkVOREVSOiAnYmVmb3JlUmVuZGVyJyxcblx0VVBEQVRFRDogJ3VwZGF0ZWQnLFxuXHRBVFRBQ0hFRDogJ2F0dGFjaGVkJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBUSFJFRV9OQVRJVkVfRVZFTlRTID0gWydhZGRlZCcsICdyZW1vdmVkJywgJ2NoaWxkYWRkZWQnLCAnY2hpbGRyZW1vdmVkJywgJ2Rpc3Bvc2VkJ107XG4iXX0=
|