angular-three 2.14.0 → 3.1.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.
Files changed (60) hide show
  1. package/fesm2022/angular-three-nativescript.mjs +3 -3
  2. package/fesm2022/angular-three-nativescript.mjs.map +1 -1
  3. package/fesm2022/angular-three-testing.mjs +12 -14
  4. package/fesm2022/angular-three-testing.mjs.map +1 -1
  5. package/fesm2022/angular-three.mjs +116 -100
  6. package/fesm2022/angular-three.mjs.map +1 -1
  7. package/lib/canvas.d.ts +31 -31
  8. package/lib/html.d.ts +3 -3
  9. package/lib/portal.d.ts +2 -2
  10. package/lib/routed-scene.d.ts +8 -2
  11. package/lib/utils/object-events.d.ts +0 -19
  12. package/nativescript/lib/canvas.d.ts +3 -3
  13. package/package.json +3 -9
  14. package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +0 -1
  15. package/plugin/src/generators/init/schema.json +8 -8
  16. package/plugin/src/generators/version.d.ts +7 -7
  17. package/plugin/src/generators/version.js +7 -7
  18. package/esm2022/angular-three.mjs +0 -5
  19. package/esm2022/index.mjs +0 -25
  20. package/esm2022/lib/canvas.mjs +0 -188
  21. package/esm2022/lib/directives/args.mjs +0 -53
  22. package/esm2022/lib/directives/selection.mjs +0 -69
  23. package/esm2022/lib/dom/events.mjs +0 -73
  24. package/esm2022/lib/events.mjs +0 -361
  25. package/esm2022/lib/html.mjs +0 -44
  26. package/esm2022/lib/instance.mjs +0 -83
  27. package/esm2022/lib/loader.mjs +0 -93
  28. package/esm2022/lib/loop.mjs +0 -141
  29. package/esm2022/lib/pipes/hexify.mjs +0 -86
  30. package/esm2022/lib/portal.mjs +0 -220
  31. package/esm2022/lib/renderer/catalogue.mjs +0 -7
  32. package/esm2022/lib/renderer/constants.mjs +0 -23
  33. package/esm2022/lib/renderer/index.mjs +0 -544
  34. package/esm2022/lib/renderer/state.mjs +0 -54
  35. package/esm2022/lib/renderer/utils.mjs +0 -223
  36. package/esm2022/lib/roots.mjs +0 -274
  37. package/esm2022/lib/routed-scene.mjs +0 -33
  38. package/esm2022/lib/store.mjs +0 -179
  39. package/esm2022/lib/three-types.mjs +0 -2
  40. package/esm2022/lib/types.mjs +0 -2
  41. package/esm2022/lib/utils/apply-props.mjs +0 -130
  42. package/esm2022/lib/utils/attach.mjs +0 -46
  43. package/esm2022/lib/utils/before-render.mjs +0 -41
  44. package/esm2022/lib/utils/is.mjs +0 -52
  45. package/esm2022/lib/utils/make.mjs +0 -52
  46. package/esm2022/lib/utils/object-events.mjs +0 -137
  47. package/esm2022/lib/utils/output-ref.mjs +0 -9
  48. package/esm2022/lib/utils/parameters.mjs +0 -70
  49. package/esm2022/lib/utils/resolve-ref.mjs +0 -8
  50. package/esm2022/lib/utils/signal-store.mjs +0 -90
  51. package/esm2022/lib/utils/update.mjs +0 -37
  52. package/esm2022/nativescript/angular-three-nativescript.mjs +0 -5
  53. package/esm2022/nativescript/index.mjs +0 -2
  54. package/esm2022/nativescript/lib/canvas.mjs +0 -127
  55. package/esm2022/testing/angular-three-testing.mjs +0 -5
  56. package/esm2022/testing/index.mjs +0 -3
  57. package/esm2022/testing/lib/test-bed.mjs +0 -130
  58. package/esm2022/testing/lib/test-canvas.mjs +0 -45
  59. package/esm2022/testing/lib/utils/mock-canvas.mjs +0 -37
  60. package/esm2022/testing/lib/utils/web-gl-rendering-context.mjs +0 -752
@@ -1,188 +0,0 @@
1
- import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, Component, computed, createEnvironmentInjector, DestroyRef, effect, ElementRef, EnvironmentInjector, inject, Injector, input, NgZone, output, signal, untracked, viewChild, ViewContainerRef, } from '@angular/core';
2
- import { outputFromObservable } from '@angular/core/rxjs-interop';
3
- import { NgxResize, provideResizeOptions } from 'ngxtension/resize';
4
- import { createPointerEvents } from './dom/events';
5
- import { provideNgtRenderer } from './renderer';
6
- import { injectCanvasRootInitializer } from './roots';
7
- import { NgtRoutedScene } from './routed-scene';
8
- import { injectStore, provideStore } from './store';
9
- import { is } from './utils/is';
10
- import * as i0 from "@angular/core";
11
- export class NgtCanvas {
12
- constructor() {
13
- this.store = injectStore();
14
- this.initRoot = injectCanvasRootInitializer();
15
- this.host = inject(ElementRef);
16
- this.zone = inject(NgZone);
17
- this.environmentInjector = inject(EnvironmentInjector);
18
- this.injector = inject(Injector);
19
- this.sceneGraph = input.required({
20
- transform: (value) => {
21
- if (value === 'routed') {
22
- console.warn(`[NGT] 'routed' sceneGraph is not working properly.`);
23
- return NgtRoutedScene;
24
- }
25
- return value;
26
- },
27
- });
28
- this.gl = input();
29
- this.size = input();
30
- this.shadows = input(false, {
31
- transform: (value) => {
32
- if (value === '')
33
- return booleanAttribute(value);
34
- return value;
35
- },
36
- });
37
- this.legacy = input(false, { transform: booleanAttribute });
38
- this.linear = input(false, { transform: booleanAttribute });
39
- this.flat = input(false, { transform: booleanAttribute });
40
- this.orthographic = input(false, { transform: booleanAttribute });
41
- this.frameloop = input('always');
42
- this.performance = input();
43
- this.dpr = input([1, 2]);
44
- this.raycaster = input();
45
- this.scene = input();
46
- this.camera = input();
47
- this.events = input(createPointerEvents);
48
- this.eventSource = input();
49
- this.eventPrefix = input('offset');
50
- this.lookAt = input();
51
- this.created = output();
52
- this.pointerMissed = outputFromObservable(this.store.get('pointerMissed$'));
53
- this.glCanvas = viewChild.required('glCanvas');
54
- this.glCanvasViewContainerRef = viewChild.required('glCanvas', { read: ViewContainerRef });
55
- this.hbPointerEvents = computed(() => (this.eventSource() ? 'none' : 'auto'));
56
- // NOTE: this signal is updated outside of Zone
57
- this.resizeResult = signal({}, { equal: Object.is });
58
- this.configurator = signal(null);
59
- // NOTE: this means that everything in NgtCanvas will be in afterNextRender.
60
- // this allows the content of NgtCanvas to use effect instead of afterNextRender
61
- afterNextRender(() => {
62
- const canvasElement = this.glCanvas().nativeElement;
63
- this.zone.runOutsideAngular(() => {
64
- this.configurator.set(this.initRoot(canvasElement));
65
- });
66
- effect(() => {
67
- const resizeResult = this.resizeResult();
68
- if (!resizeResult.width || resizeResult.width <= 0 || !resizeResult.height || resizeResult.height <= 0)
69
- return;
70
- const configurator = this.configurator();
71
- if (!configurator)
72
- return;
73
- const canvasOptions = {
74
- gl: this.gl(),
75
- shadows: this.shadows(),
76
- legacy: this.legacy(),
77
- linear: this.linear(),
78
- flat: this.flat(),
79
- orthographic: this.orthographic(),
80
- frameloop: this.frameloop(),
81
- performance: this.performance(),
82
- dpr: this.dpr(),
83
- raycaster: this.raycaster(),
84
- scene: this.scene(),
85
- camera: this.camera(),
86
- events: this.events(),
87
- eventSource: this.eventSource(),
88
- eventPrefix: this.eventPrefix(),
89
- lookAt: this.lookAt(),
90
- size: resizeResult,
91
- };
92
- this.zone.runOutsideAngular(() => {
93
- configurator.configure(canvasOptions);
94
- untracked(() => {
95
- if (this.glRef) {
96
- this.glRef.changeDetectorRef.detectChanges();
97
- }
98
- else {
99
- this.noZoneRender();
100
- }
101
- });
102
- });
103
- }, { injector: this.injector });
104
- });
105
- inject(DestroyRef).onDestroy(() => {
106
- this.glRef?.destroy();
107
- this.glEnvironmentInjector?.destroy();
108
- this.configurator()?.destroy();
109
- });
110
- }
111
- noZoneRender() {
112
- // NOTE: destroy previous instances if existed
113
- this.glEnvironmentInjector?.destroy();
114
- this.glRef?.destroy();
115
- // NOTE: Flag the canvas active, rendering will now begin
116
- this.store.update((state) => ({ internal: { ...state.internal, active: true } }));
117
- const [state, eventSource, eventPrefix] = [
118
- this.store.snapshot,
119
- untracked(this.eventSource),
120
- untracked(this.eventPrefix),
121
- ];
122
- // connect to event source
123
- state.events.connect?.(eventSource ? (is.ref(eventSource) ? eventSource.nativeElement : eventSource) : this.host.nativeElement);
124
- // setup compute for eventPrefix
125
- if (eventPrefix) {
126
- state.setEvents({
127
- compute: (event, store) => {
128
- const { pointer, raycaster, camera, size } = store.snapshot;
129
- const x = event[(eventPrefix + 'X')];
130
- const y = event[(eventPrefix + 'Y')];
131
- pointer.set((x / size.width) * 2 - 1, -(y / size.height) * 2 + 1);
132
- raycaster.setFromCamera(pointer, camera);
133
- },
134
- });
135
- }
136
- // emit created event if observed
137
- this.created.emit(this.store.snapshot);
138
- if (!this.store.get('events', 'connected')) {
139
- this.store.get('events').connect?.(untracked(this.glCanvas).nativeElement);
140
- }
141
- this.glEnvironmentInjector = createEnvironmentInjector([provideNgtRenderer(this.store)], this.environmentInjector);
142
- this.glRef = untracked(this.glCanvasViewContainerRef).createComponent(untracked(this.sceneGraph), {
143
- environmentInjector: this.glEnvironmentInjector,
144
- injector: this.injector,
145
- });
146
- this.glRef.changeDetectorRef.detectChanges();
147
- }
148
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
149
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtCanvas, isStandalone: true, selector: "ngt-canvas", inputs: { sceneGraph: { classPropertyName: "sceneGraph", publicName: "sceneGraph", isSignal: true, isRequired: true, 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: [
150
- provideResizeOptions({
151
- emitInZone: false,
152
- emitInitialResult: true,
153
- debounce: { scroll: 50, resize: 0 },
154
- }),
155
- provideStore(),
156
- ], 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: `
157
- <div (ngxResize)="resizeResult.set($event)" style="height: 100%; width: 100%;">
158
- <canvas #glCanvas style="display: block;"></canvas>
159
- </div>
160
- `, isInline: true, dependencies: [{ kind: "directive", type: NgxResize, selector: "[ngxResize]", inputs: ["ngxResizeOptions"], outputs: ["ngxResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
161
- }
162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtCanvas, decorators: [{
163
- type: Component,
164
- args: [{
165
- selector: 'ngt-canvas',
166
- standalone: true,
167
- template: `
168
- <div (ngxResize)="resizeResult.set($event)" style="height: 100%; width: 100%;">
169
- <canvas #glCanvas style="display: block;"></canvas>
170
- </div>
171
- `,
172
- imports: [NgxResize],
173
- providers: [
174
- provideResizeOptions({
175
- emitInZone: false,
176
- emitInitialResult: true,
177
- debounce: { scroll: 50, resize: 0 },
178
- }),
179
- provideStore(),
180
- ],
181
- host: {
182
- style: 'display: block;position: relative;width: 100%;height: 100%;overflow: hidden;',
183
- '[style.pointerEvents]': 'hbPointerEvents()',
184
- },
185
- changeDetection: ChangeDetectionStrategy.OnPush,
186
- }]
187
- }], ctorParameters: () => [] });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FudmFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsUUFBUSxFQUNSLHlCQUF5QixFQUN6QixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxFQUNULFNBQVMsRUFDVCxnQkFBZ0IsR0FDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBK0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBRSwyQkFBMkIsRUFBeUIsTUFBTSxTQUFTLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXBELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBeUJoQyxNQUFNLE9BQU8sU0FBUztJQXVEckI7UUF0RFEsVUFBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLGFBQVEsR0FBRywyQkFBMkIsRUFBRSxDQUFDO1FBRXpDLFNBQUksR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFD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LEVBQUUsQ0FBQztJQUM5QyxDQUFDOytHQWxLVyxTQUFTO21HQUFULFNBQVMsNmdGQWRWO1lBQ1Ysb0JBQW9CLENBQUM7Z0JBQ3BCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7YUFDbEIsQ0FBQztZQUNuQixZQUFZLEVBQUU7U0FDZCxrT0FtRHlFLGdCQUFnQiw2Q0FoRWhGOzs7O0VBSVQsNERBQ1MsU0FBUzs7NEZBZVAsU0FBUztrQkF2QnJCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ3BCLFNBQVMsRUFBRTt3QkFDVixvQkFBb0IsQ0FBQzs0QkFDcEIsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLGlCQUFpQixFQUFFLElBQUk7NEJBQ3ZCLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTt5QkFDbEIsQ0FBQzt3QkFDbkIsWUFBWSxFQUFFO3FCQUNkO29CQUNELElBQUksRUFBRTt3QkFDTCxLQUFLLEVBQUUsOEVBQThFO3dCQUNyRix1QkFBdUIsRUFBRSxtQkFBbUI7cUJBQzVDO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q29tcG9uZW50UmVmLFxuXHRjb21wdXRlZCxcblx0Y3JlYXRlRW52aXJvbm1lbnRJbmplY3Rvcixcblx0RGVzdHJveVJlZixcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRFbnZpcm9ubWVudEluamVjdG9yLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHRpbnB1dCxcblx0Tmdab25lLFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcblx0VHlwZSxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG5cdFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3V0cHV0RnJvbU9ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBOZ3hSZXNpemUsIHByb3ZpZGVSZXNpemVPcHRpb25zLCBSZXNpemVPcHRpb25zLCBSZXNpemVSZXN1bHQgfSBmcm9tICduZ3h0ZW5zaW9uL3Jlc2l6ZSc7XG5pbXBvcnQgeyBSYXljYXN0ZXIsIFNjZW5lLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgY3JlYXRlUG9pbnRlckV2ZW50cyB9IGZyb20gJy4vZG9tL2V2ZW50cyc7XG5pbXBvcnQgeyBwcm92aWRlTmd0UmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyJztcbmltcG9ydCB7IGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplciwgTmd0Q2FudmFzQ29uZmlndXJhdG9yIH0gZnJvbSAnLi9yb290cyc7XG5pbXBvcnQgeyBOZ3RSb3V0ZWRTY2VuZSB9IGZyb20gJy4vcm91dGVkLXNjZW5lJztcbmltcG9ydCB7IGluamVjdFN0b3JlLCBwcm92aWRlU3RvcmUgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB7IE5ndENhbnZhc09wdGlvbnMsIE5ndERvbUV2ZW50LCBOZ3REcHIsIE5ndEdMT3B0aW9ucywgTmd0UGVyZm9ybWFuY2UsIE5ndFNpemUsIE5ndFN0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vdXRpbHMvaXMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3QtY2FudmFzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8ZGl2IChuZ3hSZXNpemUpPVwicmVzaXplUmVzdWx0LnNldCgkZXZlbnQpXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlO1wiPlxuXHRcdFx0PGNhbnZhcyAjZ2xDYW52YXMgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj48L2NhbnZhcz5cblx0XHQ8L2Rpdj5cblx0YCxcblx0aW1wb3J0czogW05neFJlc2l6ZV0sXG5cdHByb3ZpZGVyczogW1xuXHRcdHByb3ZpZGVSZXNpemVPcHRpb25zKHtcblx0XHRcdGVtaXRJblpvbmU6IGZhbHNlLFxuXHRcdFx0ZW1pdEluaXRpYWxSZXN1bHQ6IHRydWUsXG5cdFx0XHRkZWJvdW5jZTogeyBzY3JvbGw6IDUwLCByZXNpemU6IDAgfSxcblx0XHR9IGFzIFJlc2l6ZU9wdGlvbnMpLFxuXHRcdHByb3ZpZGVTdG9yZSgpLFxuXHRdLFxuXHRob3N0OiB7XG5cdFx0c3R5bGU6ICdkaXNwbGF5OiBibG9jaztwb3NpdGlvbjogcmVsYXRpdmU7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO292ZXJmbG93OiBoaWRkZW47Jyxcblx0XHQnW3N0eWxlLnBvaW50ZXJFdmVudHNdJzogJ2hiUG9pbnRlckV2ZW50cygpJyxcblx0fSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndENhbnZhcyB7XG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGluaXRSb290ID0gaW5qZWN0Q2FudmFzUm9vdEluaXRpYWxpemVyKCk7XG5cblx0cHJpdmF0ZSBob3N0ID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblx0cHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcblx0cHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0c2NlbmVHcmFwaCA9IGlucHV0LnJlcXVpcmVkPFR5cGU8YW55PiwgVHlwZTxhbnk+IHwgJ3JvdXRlZCc+KHtcblx0XHR0cmFuc2Zvcm06ICh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlID09PSAncm91dGVkJykge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oYFtOR1RdICdyb3V0ZWQnIHNjZW5lR3JhcGggaXMgbm90IHdvcmtpbmcgcHJvcGVybHkuYCk7XG5cdFx0XHRcdHJldHVybiBOZ3RSb3V0ZWRTY2VuZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHR9KTtcblx0Z2wgPSBpbnB1dDxOZ3RHTE9wdGlvbnM+KCk7XG5cdHNpemUgPSBpbnB1dDxOZ3RTaXplPigpO1xuXHRzaGFkb3dzID0gaW5wdXQoZmFsc2UsIHtcblx0XHR0cmFuc2Zvcm06ICh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlID09PSAnJykgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlIGFzIE5vbk51bGxhYmxlPE5ndENhbnZhc09wdGlvbnNbJ3NoYWRvd3MnXT47XG5cdFx0fSxcblx0fSk7XG5cdGxlZ2FjeSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0bGluZWFyID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXHRmbGF0ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXHRvcnRob2dyYXBoaWMgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cdGZyYW1lbG9vcCA9IGlucHV0PE5vbk51bGxhYmxlPE5ndENhbnZhc09wdGlvbnNbJ2ZyYW1lbG9vcCddPj4oJ2Fsd2F5cycpO1xuXHRwZXJmb3JtYW5jZSA9IGlucHV0PFBhcnRpYWw8T21pdDxOZ3RQZXJmb3JtYW5jZSwgJ3JlZ3Jlc3MnPj4+KCk7XG5cdGRwciA9IGlucHV0PE5ndERwcj4oWzEsIDJdKTtcblx0cmF5Y2FzdGVyID0gaW5wdXQ8UGFydGlhbDxSYXljYXN0ZXI+PigpO1xuXHRzY2VuZSA9IGlucHV0PFNjZW5lIHwgUGFydGlhbDxTY2VuZT4+KCk7XG5cdGNhbWVyYSA9IGlucHV0PE5vbk51bGxhYmxlPE5ndENhbnZhc09wdGlvbnNbJ2NhbWVyYSddPj4oKTtcblx0ZXZlbnRzID0gaW5wdXQoY3JlYXRlUG9pbnRlckV2ZW50cyk7XG5cdGV2ZW50U291cmNlID0gaW5wdXQ8SFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oKTtcblx0ZXZlbnRQcmVmaXggPSBpbnB1dDxOb25OdWxsYWJsZTxOZ3RDYW52YXNPcHRpb25zWydldmVudFByZWZpeCddPj4oJ29mZnNldCcpO1xuXHRsb29rQXQgPSBpbnB1dDxWZWN0b3IzIHwgUGFyYW1ldGVyczxWZWN0b3IzWydzZXQnXT4+KCk7XG5cdGNyZWF0ZWQgPSBvdXRwdXQ8Tmd0U3RhdGU+KCk7XG5cdHBvaW50ZXJNaXNzZWQgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZSh0aGlzLnN0b3JlLmdldCgncG9pbnRlck1pc3NlZCQnKSk7XG5cblx0cHJpdmF0ZSBnbENhbnZhcyA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50Pj4oJ2dsQ2FudmFzJyk7XG5cdHByaXZhdGUgZ2xDYW52YXNWaWV3Q29udGFpbmVyUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkKCdnbENhbnZhcycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KTtcblxuXHRwcm90ZWN0ZWQgaGJQb2ludGVyRXZlbnRzID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuZXZlbnRTb3VyY2UoKSA/ICdub25lJyA6ICdhdXRvJykpO1xuXG5cdC8vIE5PVEU6IHRoaXMgc2lnbmFsIGlzIHVwZGF0ZWQgb3V0c2lkZSBvZiBab25lXG5cdHByb3RlY3RlZCByZXNpemVSZXN1bHQgPSBzaWduYWw8UmVzaXplUmVzdWx0Pih7fSBhcyBSZXNpemVSZXN1bHQsIHsgZXF1YWw6IE9iamVjdC5pcyB9KTtcblx0cHJpdmF0ZSBjb25maWd1cmF0b3IgPSBzaWduYWw8Tmd0Q2FudmFzQ29uZmlndXJhdG9yIHwgbnVsbD4obnVsbCk7XG5cblx0cHJpdmF0ZSBnbEVudmlyb25tZW50SW5qZWN0b3I/OiBFbnZpcm9ubWVudEluamVjdG9yO1xuXHRwcml2YXRlIGdsUmVmPzogQ29tcG9uZW50UmVmPHVua25vd24+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdC8vIE5PVEU6IHRoaXMgbWVhbnMgdGhhdCBldmVyeXRoaW5nIGluIE5ndENhbnZhcyB3aWxsIGJlIGluIGFmdGVyTmV4dFJlbmRlci5cblx0XHQvLyB0aGlzIGFsbG93cyB0aGUgY29udGVudCBvZiBOZ3RDYW52YXMgdG8gdXNlIGVmZmVjdCBpbnN0ZWFkIG9mIGFmdGVyTmV4dFJlbmRlclxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBjYW52YXNFbGVtZW50ID0gdGhpcy5nbENhbnZhcygpLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbmZpZ3VyYXRvci5zZXQodGhpcy5pbml0Um9vdChjYW52YXNFbGVtZW50KSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0ZWZmZWN0KFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzaXplUmVzdWx0ID0gdGhpcy5yZXNpemVSZXN1bHQoKTtcblx0XHRcdFx0XHRpZiAoIXJlc2l6ZVJlc3VsdC53aWR0aCB8fCByZXNpemVSZXN1bHQud2lkdGggPD0gMCB8fCAhcmVzaXplUmVzdWx0LmhlaWdodCB8fCByZXNpemVSZXN1bHQuaGVpZ2h0IDw9IDApXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0XHRjb25zdCBjb25maWd1cmF0b3IgPSB0aGlzLmNvbmZpZ3VyYXRvcigpO1xuXHRcdFx0XHRcdGlmICghY29uZmlndXJhdG9yKSByZXR1cm47XG5cblx0XHRcdFx0XHRjb25zdCBjYW52YXNPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0Z2w6IHRoaXMuZ2woKSxcblx0XHRcdFx0XHRcdHNoYWRvd3M6IHRoaXMuc2hhZG93cygpLFxuXHRcdFx0XHRcdFx0bGVnYWN5OiB0aGlzLmxlZ2FjeSgpLFxuXHRcdFx0XHRcdFx0bGluZWFyOiB0aGlzLmxpbmVhcigpLFxuXHRcdFx0XHRcdFx0ZmxhdDogdGhpcy5mbGF0KCksXG5cdFx0XHRcdFx0XHRvcnRob2dyYXBoaWM6IHRoaXMub3J0aG9ncmFwaGljKCksXG5cdFx0XHRcdFx0XHRmcmFtZWxvb3A6IHRoaXMuZnJhbWVsb29wKCksXG5cdFx0XHRcdFx0XHRwZXJmb3JtYW5jZTogdGhpcy5wZXJmb3JtYW5jZSgpLFxuXHRcdFx0XHRcdFx0ZHByOiB0aGlzLmRwcigpLFxuXHRcdFx0XHRcdFx0cmF5Y2FzdGVyOiB0aGlzLnJheWNhc3RlcigpLFxuXHRcdFx0XHRcdFx0c2NlbmU6IHRoaXMuc2NlbmUoKSxcblx0XHRcdFx0XHRcdGNhbWVyYTogdGhpcy5jYW1lcmEoKSxcblx0XHRcdFx0XHRcdGV2ZW50czogdGhpcy5ldmVudHMoKSxcblx0XHRcdFx0XHRcdGV2ZW50U291cmNlOiB0aGlzLmV2ZW50U291cmNlKCksXG5cdFx0XHRcdFx0XHRldmVudFByZWZpeDogdGhpcy5ldmVudFByZWZpeCgpLFxuXHRcdFx0XHRcdFx0bG9va0F0OiB0aGlzLmxvb2tBdCgpLFxuXHRcdFx0XHRcdFx0c2l6ZTogcmVzaXplUmVzdWx0LFxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhdG9yLmNvbmZpZ3VyZShjYW52YXNPcHRpb25zKTtcblxuXHRcdFx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2xSZWYpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdsUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm5vWm9uZVJlbmRlcigpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdFx0dGhpcy5nbFJlZj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3I/LmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuY29uZmlndXJhdG9yKCk/LmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgbm9ab25lUmVuZGVyKCkge1xuXHRcdC8vIE5PVEU6IGRlc3Ryb3kgcHJldmlvdXMgaW5zdGFuY2VzIGlmIGV4aXN0ZWRcblx0XHR0aGlzLmdsRW52aXJvbm1lbnRJbmplY3Rvcj8uZGVzdHJveSgpO1xuXHRcdHRoaXMuZ2xSZWY/LmRlc3Ryb3koKTtcblxuXHRcdC8vIE5PVEU6IEZsYWcgdGhlIGNhbnZhcyBhY3RpdmUsIHJlbmRlcmluZyB3aWxsIG5vdyBiZWdpblxuXHRcdHRoaXMuc3RvcmUudXBkYXRlKChzdGF0ZSkgPT4gKHsgaW50ZXJuYWw6IHsgLi4uc3RhdGUuaW50ZXJuYWwsIGFjdGl2ZTogdHJ1ZSB9IH0pKTtcblxuXHRcdGNvbnN0IFtzdGF0ZSwgZXZlbnRTb3VyY2UsIGV2ZW50UHJlZml4XSA9IFtcblx0XHRcdHRoaXMuc3RvcmUuc25hcHNob3QsXG5cdFx0XHR1bnRyYWNrZWQodGhpcy5ldmVudFNvdXJjZSksXG5cdFx0XHR1bnRyYWNrZWQodGhpcy5ldmVudFByZWZpeCksXG5cdFx0XTtcblxuXHRcdC8vIGNvbm5lY3QgdG8gZXZlbnQgc291cmNlXG5cdFx0c3RhdGUuZXZlbnRzLmNvbm5lY3Q/Lihcblx0XHRcdGV2ZW50U291cmNlID8gKGlzLnJlZihldmVudFNvdXJjZSkgPyBldmVudFNvdXJjZS5uYXRpdmVFbGVtZW50IDogZXZlbnRTb3VyY2UpIDogdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0KTtcblxuXHRcdC8vIHNldHVwIGNvbXB1dGUgZm9yIGV2ZW50UHJlZml4XG5cdFx0aWYgKGV2ZW50UHJlZml4KSB7XG5cdFx0XHRzdGF0ZS5zZXRFdmVudHMoe1xuXHRcdFx0XHRjb21wdXRlOiAoZXZlbnQsIHN0b3JlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgeyBwb2ludGVyLCByYXljYXN0ZXIsIGNhbWVyYSwgc2l6ZSB9ID0gc3RvcmUuc25hcHNob3Q7XG5cdFx0XHRcdFx0Y29uc3QgeCA9IGV2ZW50WyhldmVudFByZWZpeCArICdYJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcblx0XHRcdFx0XHRjb25zdCB5ID0gZXZlbnRbKGV2ZW50UHJlZml4ICsgJ1knKSBhcyBrZXlvZiBOZ3REb21FdmVudF0gYXMgbnVtYmVyO1xuXHRcdFx0XHRcdHBvaW50ZXIuc2V0KCh4IC8gc2l6ZS53aWR0aCkgKiAyIC0gMSwgLSh5IC8gc2l6ZS5oZWlnaHQpICogMiArIDEpO1xuXHRcdFx0XHRcdHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHBvaW50ZXIsIGNhbWVyYSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBlbWl0IGNyZWF0ZWQgZXZlbnQgaWYgb2JzZXJ2ZWRcblx0XHR0aGlzLmNyZWF0ZWQuZW1pdCh0aGlzLnN0b3JlLnNuYXBzaG90KTtcblxuXHRcdGlmICghdGhpcy5zdG9yZS5nZXQoJ2V2ZW50cycsICdjb25uZWN0ZWQnKSkge1xuXHRcdFx0dGhpcy5zdG9yZS5nZXQoJ2V2ZW50cycpLmNvbm5lY3Q/Lih1bnRyYWNrZWQodGhpcy5nbENhbnZhcykubmF0aXZlRWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3IgPSBjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yKFtwcm92aWRlTmd0UmVuZGVyZXIodGhpcy5zdG9yZSldLCB0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpO1xuXHRcdHRoaXMuZ2xSZWYgPSB1bnRyYWNrZWQodGhpcy5nbENhbnZhc1ZpZXdDb250YWluZXJSZWYpLmNyZWF0ZUNvbXBvbmVudCh1bnRyYWNrZWQodGhpcy5zY2VuZUdyYXBoKSwge1xuXHRcdFx0ZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3IsXG5cdFx0XHRpbmplY3RvcjogdGhpcy5pbmplY3Rvcixcblx0XHR9KTtcblxuXHRcdHRoaXMuZ2xSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG59XG4iXX0=
@@ -1,53 +0,0 @@
1
- import { DestroyRef, Directive, effect, inject, input, TemplateRef, untracked, ViewContainerRef, } from '@angular/core';
2
- import { SPECIAL_INTERNAL_ADD_COMMENT } from '../renderer/constants';
3
- import * as i0 from "@angular/core";
4
- export class NgtArgs {
5
- constructor() {
6
- this.args = input.required();
7
- this.vcr = inject(ViewContainerRef);
8
- this.template = inject(TemplateRef);
9
- this.injected = false;
10
- this.injectedArgs = null;
11
- const commentNode = this.vcr.element.nativeElement;
12
- if (commentNode[SPECIAL_INTERNAL_ADD_COMMENT]) {
13
- commentNode[SPECIAL_INTERNAL_ADD_COMMENT]('args');
14
- delete commentNode[SPECIAL_INTERNAL_ADD_COMMENT];
15
- }
16
- effect(() => {
17
- const value = this.args();
18
- if (value == null || !Array.isArray(value) || (value.length === 1 && value[0] === null))
19
- return;
20
- this.injected = false;
21
- this.injectedArgs = value;
22
- untracked(() => {
23
- this.createView();
24
- });
25
- });
26
- inject(DestroyRef).onDestroy(() => {
27
- this.view?.destroy();
28
- });
29
- }
30
- get value() {
31
- if (this.validate()) {
32
- this.injected = true;
33
- return this.injectedArgs;
34
- }
35
- return null;
36
- }
37
- validate() {
38
- return !this.injected && !!this.injectedArgs?.length;
39
- }
40
- createView() {
41
- if (this.view && !this.view.destroyed)
42
- this.view.destroy();
43
- this.view = this.vcr.createEmbeddedView(this.template);
44
- this.view.detectChanges();
45
- }
46
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtArgs, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
47
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: NgtArgs, isStandalone: true, selector: "ng-template[args]", inputs: { args: { classPropertyName: "args", publicName: "args", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
48
- }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtArgs, decorators: [{
50
- type: Directive,
51
- args: [{ selector: 'ng-template[args]', standalone: true }]
52
- }], ctorParameters: () => [] });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBRU4sTUFBTSxFQUNOLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHckUsTUFBTSxPQUFPLE9BQU87SUFVbkI7UUFUQSxTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBZ0IsQ0FBQztRQUU5QixRQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0IsYUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGlCQUFZLEdBQWlCLElBQUksQ0FBQztRQUkzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbkQsSUFBSSxXQUFXLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO1lBQy9DLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xELE9BQU8sV0FBVyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUM7Z0JBQUUsT0FBTztZQUNoRyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsUUFBUTtRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztJQUN0RCxDQUFDO0lBRU8sVUFBVTtRQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQWhEVyxPQUFPO21HQUFQLE9BQU87OzRGQUFQLE9BQU87a0JBRG5CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERlc3Ryb3lSZWYsXG5cdERpcmVjdGl2ZSxcblx0ZWZmZWN0LFxuXHRFbWJlZGRlZFZpZXdSZWYsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdFRlbXBsYXRlUmVmLFxuXHR1bnRyYWNrZWQsXG5cdFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVCB9IGZyb20gJy4uL3JlbmRlcmVyL2NvbnN0YW50cyc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2FyZ3NdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndEFyZ3Mge1xuXHRhcmdzID0gaW5wdXQucmVxdWlyZWQ8YW55W10gfCBudWxsPigpO1xuXG5cdHByaXZhdGUgdmNyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXHRwcml2YXRlIHRlbXBsYXRlID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcblxuXHRwcm90ZWN0ZWQgaW5qZWN0ZWQgPSBmYWxzZTtcblx0cHJvdGVjdGVkIGluamVjdGVkQXJnczogYW55W10gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSB2aWV3PzogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IGNvbW1lbnROb2RlID0gdGhpcy52Y3IuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXHRcdGlmIChjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSkge1xuXHRcdFx0Y29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF0oJ2FyZ3MnKTtcblx0XHRcdGRlbGV0ZSBjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcblx0XHR9XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmFyZ3MoKTtcblx0XHRcdGlmICh2YWx1ZSA9PSBudWxsIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCAodmFsdWUubGVuZ3RoID09PSAxICYmIHZhbHVlWzBdID09PSBudWxsKSkgcmV0dXJuO1xuXHRcdFx0dGhpcy5pbmplY3RlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5pbmplY3RlZEFyZ3MgPSB2YWx1ZTtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuY3JlYXRlVmlldygpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdHRoaXMudmlldz8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0IHZhbHVlKCkge1xuXHRcdGlmICh0aGlzLnZhbGlkYXRlKCkpIHtcblx0XHRcdHRoaXMuaW5qZWN0ZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5qZWN0ZWRBcmdzO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhbGlkYXRlKCkge1xuXHRcdHJldHVybiAhdGhpcy5pbmplY3RlZCAmJiAhIXRoaXMuaW5qZWN0ZWRBcmdzPy5sZW5ndGg7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVZpZXcoKSB7XG5cdFx0aWYgKHRoaXMudmlldyAmJiAhdGhpcy52aWV3LmRlc3Ryb3llZCkgdGhpcy52aWV3LmRlc3Ryb3koKTtcblx0XHR0aGlzLnZpZXcgPSB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7XG5cdFx0dGhpcy52aWV3LmRldGVjdENoYW5nZXMoKTtcblx0fVxufVxuIl19
@@ -1,69 +0,0 @@
1
- import { booleanAttribute, Directive, effect, ElementRef, inject, input, signal, untracked } from '@angular/core';
2
- import { getLocalState } from '../instance';
3
- import * as i0 from "@angular/core";
4
- export class NgtSelection {
5
- constructor() {
6
- this.enabled = input(true, { alias: 'ngtSelection', transform: booleanAttribute });
7
- this.source = signal([]);
8
- this.selected = this.source.asReadonly();
9
- }
10
- update(...args) {
11
- if (!this.enabled())
12
- return;
13
- this.source.update(...args);
14
- }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
16
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: NgtSelection, isStandalone: true, selector: "[ngtSelection]", inputs: { enabled: { classPropertyName: "enabled", publicName: "ngtSelection", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtSelection, decorators: [{
19
- type: Directive,
20
- args: [{ standalone: true, selector: '[ngtSelection]' }]
21
- }] });
22
- export class NgtSelect {
23
- constructor() {
24
- this.enabled = input(false, { transform: booleanAttribute, alias: 'ngtSelect' });
25
- const elementRef = inject(ElementRef);
26
- const selection = inject(NgtSelection);
27
- effect((onCleanup) => {
28
- const selectionEnabled = selection.enabled();
29
- if (!selectionEnabled)
30
- return;
31
- const enabled = this.enabled();
32
- if (!enabled)
33
- return;
34
- const host = elementRef.nativeElement;
35
- if (!host)
36
- return;
37
- const localState = getLocalState(host);
38
- if (!localState)
39
- return;
40
- // ngt-mesh[ngtSelect]
41
- if (host.type === 'Mesh') {
42
- selection.update((prev) => [...prev, host]);
43
- onCleanup(() => selection.update((prev) => prev.filter((el) => el !== host)));
44
- return;
45
- }
46
- const [collection] = [untracked(selection.selected), localState.objects()];
47
- let changed = false;
48
- const current = [];
49
- host.traverse((child) => {
50
- child.type === 'Mesh' && current.push(child);
51
- if (collection.indexOf(child) === -1)
52
- changed = true;
53
- });
54
- if (!changed)
55
- return;
56
- selection.update((prev) => [...prev, ...current]);
57
- onCleanup(() => {
58
- selection.update((prev) => prev.filter((el) => !current.includes(el)));
59
- });
60
- }, { allowSignalWrites: true });
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
63
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: NgtSelect, isStandalone: true, selector: "ngt-group[ngtSelect], ngt-mesh[ngtSelect]", inputs: { enabled: { classPropertyName: "enabled", publicName: "ngtSelect", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtSelect, decorators: [{
66
- type: Directive,
67
- args: [{ standalone: true, selector: 'ngt-group[ngtSelect], ngt-mesh[ngtSelect]' }]
68
- }], ctorParameters: () => [] });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUc1QyxNQUFNLE9BQU8sWUFBWTtJQUR6QjtRQUVDLFlBQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRXRFLFdBQU0sR0FBRyxNQUFNLENBQXlDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLGFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0tBTXBDO0lBSkEsTUFBTSxDQUFDLEdBQUcsSUFBMkM7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFBRSxPQUFPO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0FUVyxZQUFZO21HQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFNBQVM7bUJBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRTs7QUFjM0QsTUFBTSxPQUFPLFNBQVM7SUFHckI7UUFGQSxZQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUczRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQTJCLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV2QyxNQUFNLENBQ0wsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNiLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQUUsT0FBTztZQUU5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUVyQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFFbEIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVO2dCQUFFLE9BQU87WUFFeEIsc0JBQXNCO1lBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUUsT0FBTztZQUNSLENBQUM7WUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixNQUFNLE9BQU8sR0FBZSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN2QixLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUFFLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDdEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPO1lBRXJCLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2xELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUMzQixDQUFDO0lBQ0gsQ0FBQzsrR0E3Q1csU0FBUzttR0FBVCxTQUFTOzs0RkFBVCxTQUFTO2tCQURyQixTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsMkNBQTJDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyb3VwLCBNZXNoLCBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlLCBzZWxlY3RvcjogJ1tuZ3RTZWxlY3Rpb25dJyB9KVxuZXhwb3J0IGNsYXNzIE5ndFNlbGVjdGlvbiB7XG5cdGVuYWJsZWQgPSBpbnB1dCh0cnVlLCB7IGFsaWFzOiAnbmd0U2VsZWN0aW9uJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG5cdHByaXZhdGUgc291cmNlID0gc2lnbmFsPEFycmF5PEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0Q+PihbXSk7XG5cdHNlbGVjdGVkID0gdGhpcy5zb3VyY2UuYXNSZWFkb25seSgpO1xuXG5cdHVwZGF0ZSguLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiB0aGlzLnNvdXJjZS51cGRhdGU+KSB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQoKSkgcmV0dXJuO1xuXHRcdHRoaXMuc291cmNlLnVwZGF0ZSguLi5hcmdzKTtcblx0fVxufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICduZ3QtZ3JvdXBbbmd0U2VsZWN0XSwgbmd0LW1lc2hbbmd0U2VsZWN0XScgfSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3Qge1xuXHRlbmFibGVkID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ25ndFNlbGVjdCcgfSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEdyb3VwIHwgTWVzaD4+KEVsZW1lbnRSZWYpO1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IGluamVjdChOZ3RTZWxlY3Rpb24pO1xuXG5cdFx0ZWZmZWN0KFxuXHRcdFx0KG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0XHRjb25zdCBzZWxlY3Rpb25FbmFibGVkID0gc2VsZWN0aW9uLmVuYWJsZWQoKTtcblx0XHRcdFx0aWYgKCFzZWxlY3Rpb25FbmFibGVkKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgZW5hYmxlZCA9IHRoaXMuZW5hYmxlZCgpO1xuXHRcdFx0XHRpZiAoIWVuYWJsZWQpIHJldHVybjtcblxuXHRcdFx0XHRjb25zdCBob3N0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0XHRpZiAoIWhvc3QpIHJldHVybjtcblxuXHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShob3N0KTtcblx0XHRcdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRcdFx0Ly8gbmd0LW1lc2hbbmd0U2VsZWN0XVxuXHRcdFx0XHRpZiAoaG9zdC50eXBlID09PSAnTWVzaCcpIHtcblx0XHRcdFx0XHRzZWxlY3Rpb24udXBkYXRlKChwcmV2KSA9PiBbLi4ucHJldiwgaG9zdF0pO1xuXHRcdFx0XHRcdG9uQ2xlYW51cCgoKSA9PiBzZWxlY3Rpb24udXBkYXRlKChwcmV2KSA9PiBwcmV2LmZpbHRlcigoZWwpID0+IGVsICE9PSBob3N0KSkpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IFtjb2xsZWN0aW9uXSA9IFt1bnRyYWNrZWQoc2VsZWN0aW9uLnNlbGVjdGVkKSwgbG9jYWxTdGF0ZS5vYmplY3RzKCldO1xuXHRcdFx0XHRsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50OiBPYmplY3QzRFtdID0gW107XG5cdFx0XHRcdGhvc3QudHJhdmVyc2UoKGNoaWxkKSA9PiB7XG5cdFx0XHRcdFx0Y2hpbGQudHlwZSA9PT0gJ01lc2gnICYmIGN1cnJlbnQucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0aWYgKGNvbGxlY3Rpb24uaW5kZXhPZihjaGlsZCkgPT09IC0xKSBjaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKCFjaGFuZ2VkKSByZXR1cm47XG5cblx0XHRcdFx0c2VsZWN0aW9uLnVwZGF0ZSgocHJldikgPT4gWy4uLnByZXYsIC4uLmN1cnJlbnRdKTtcblx0XHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0XHRzZWxlY3Rpb24udXBkYXRlKChwcmV2KSA9PiBwcmV2LmZpbHRlcigoZWwpID0+ICFjdXJyZW50LmluY2x1ZGVzKGVsIGFzIE9iamVjdDNEKSkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0fVxufVxuIl19
@@ -1,73 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZG9tL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXpDLE1BQU0sVUFBVSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxLQUFLO0lBQ1osV0FBVyxFQUFFLEtBQUs7SUFDbEIsUUFBUSxFQUFFLEtBQUs7SUFDZixLQUFLLEVBQUUsS0FBSyxFQUFFLDBDQUEwQztJQUN4RCxXQUFXLEVBQUUsSUFBSTtJQUNqQixTQUFTLEVBQUUsSUFBSTtJQUNmLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGtCQUFrQixFQUFFLElBQUk7Q0FDZixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzlCLE9BQU87SUFDUCxhQUFhO0lBQ2IsVUFBVTtJQUNWLFdBQVc7SUFDWCxhQUFhO0lBQ2IsYUFBYTtJQUNiLFlBQVk7SUFDWixjQUFjO0lBQ2QsY0FBYztJQUNkLGFBQWE7SUFDYixlQUFlO0lBQ2YsZUFBZTtJQUNmLE9BQU87Q0FDRSxDQUFDO0FBRVgsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQStCO0lBQ2xFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsT0FBTztRQUNOLFFBQVEsRUFBRSxDQUFDO1FBQ1gsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUUsQ0FBQyxLQUFrQixFQUFFLElBQThCLEVBQUUsRUFBRTtZQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsdURBQXVEO1lBQ3ZELDRGQUE0RjtZQUM1RixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVHLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxTQUFTLEVBQUUsU0FBUztRQUNwQixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFzQixFQUFFLGtCQUFrQixFQUFFLEVBQUU7WUFDdkYsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDakUsT0FBTyxRQUFRLENBQUM7UUFDakIsQ0FBQyxFQUFFLEVBQUUsQ0FBYztRQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1osTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekMsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLGFBQWEsSUFBSSxNQUFNLENBQUMsUUFBUTtnQkFDdkQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsTUFBbUIsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFFNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUEwQixFQUFFLEVBQUU7Z0JBQzFHLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxTQUFvQyxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7UUFDRCxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ2hCLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFDLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUEwQixFQUFFLEVBQUU7b0JBQ3BHLElBQUksTUFBTSxDQUFDLFNBQVMsWUFBWSxXQUFXLEVBQUUsQ0FBQzt3QkFDN0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7b0JBQy9ELENBQUM7Z0JBQ0YsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNGLENBQUM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUV2ZW50cyB9IGZyb20gJy4uL2V2ZW50cyc7XG5pbXBvcnQgeyBOZ3RBbnlSZWNvcmQsIE5ndERvbUV2ZW50LCBOZ3RFdmVudE1hbmFnZXIsIE5ndEV2ZW50cywgTmd0U3RhdGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4uL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5cbmNvbnN0IERPTV9FVkVOVFMgPSB7XG5cdGNsaWNrOiBmYWxzZSxcblx0Y29udGV4dG1lbnU6IGZhbHNlLFxuXHRkYmxjbGljazogZmFsc2UsXG5cdHdoZWVsOiBmYWxzZSwgLy8gcGFzc2l2ZSB3aGVlbCBlcnJvcnMgd2l0aCBPcmJpdENvbnRyb2xzXG5cdHBvaW50ZXJkb3duOiB0cnVlLFxuXHRwb2ludGVydXA6IHRydWUsXG5cdHBvaW50ZXJsZWF2ZTogdHJ1ZSxcblx0cG9pbnRlcm1vdmU6IHRydWUsXG5cdHBvaW50ZXJjYW5jZWw6IHRydWUsXG5cdGxvc3Rwb2ludGVyY2FwdHVyZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRFdmVudHMgPSBbXG5cdCdjbGljaycsXG5cdCdjb250ZXh0bWVudScsXG5cdCdkYmxjbGljaycsXG5cdCdwb2ludGVydXAnLFxuXHQncG9pbnRlcmRvd24nLFxuXHQncG9pbnRlcm92ZXInLFxuXHQncG9pbnRlcm91dCcsXG5cdCdwb2ludGVyZW50ZXInLFxuXHQncG9pbnRlcmxlYXZlJyxcblx0J3BvaW50ZXJtb3ZlJyxcblx0J3BvaW50ZXJtaXNzZWQnLFxuXHQncG9pbnRlcmNhbmNlbCcsXG5cdCd3aGVlbCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9pbnRlckV2ZW50cyhzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KTogTmd0RXZlbnRNYW5hZ2VyPEhUTUxFbGVtZW50PiB7XG5cdGNvbnN0IHsgaGFuZGxlUG9pbnRlciB9ID0gY3JlYXRlRXZlbnRzKHN0b3JlKTtcblxuXHRyZXR1cm4ge1xuXHRcdHByaW9yaXR5OiAxLFxuXHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0Y29tcHV0ZTogKGV2ZW50OiBOZ3REb21FdmVudCwgcm9vdDogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KSA9PiB7XG5cdFx0XHRjb25zdCBzdGF0ZSA9IHJvb3QuZ2V0KCk7XG5cdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vcG1uZHJzL3JlYWN0LXRocmVlLWZpYmVyL3B1bGwvNzgyXG5cdFx0XHQvLyBFdmVudHMgdHJpZ2dlciBvdXRzaWRlIG9mIGNhbnZhcyB3aGVuIG1vdmVkLCB1c2Ugb2Zmc2V0WC9ZIGJ5IGRlZmF1bHQgYW5kIGFsbG93IG92ZXJyaWRlc1xuXHRcdFx0c3RhdGUucG9pbnRlci5zZXQoKGV2ZW50Lm9mZnNldFggLyBzdGF0ZS5zaXplLndpZHRoKSAqIDIgLSAxLCAtKGV2ZW50Lm9mZnNldFkgLyBzdGF0ZS5zaXplLmhlaWdodCkgKiAyICsgMSk7XG5cdFx0XHRzdGF0ZS5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShzdGF0ZS5wb2ludGVyLCBzdGF0ZS5jYW1lcmEpO1xuXHRcdH0sXG5cdFx0Y29ubmVjdGVkOiB1bmRlZmluZWQsXG5cdFx0aGFuZGxlcnM6IE9iamVjdC5rZXlzKERPTV9FVkVOVFMpLnJlZHVjZSgoaGFuZGxlcnM6IE5ndEFueVJlY29yZCwgc3VwcG9ydGVkRXZlbnROYW1lKSA9PiB7XG5cdFx0XHRoYW5kbGVyc1tzdXBwb3J0ZWRFdmVudE5hbWVdID0gaGFuZGxlUG9pbnRlcihzdXBwb3J0ZWRFdmVudE5hbWUpO1xuXHRcdFx0cmV0dXJuIGhhbmRsZXJzO1xuXHRcdH0sIHt9KSBhcyBOZ3RFdmVudHMsXG5cdFx0dXBkYXRlOiAoKSA9PiB7XG5cdFx0XHRjb25zdCB7IGV2ZW50cywgaW50ZXJuYWwgfSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0aWYgKGludGVybmFsLmxhc3RFdmVudD8ubmF0aXZlRWxlbWVudCAmJiBldmVudHMuaGFuZGxlcnMpXG5cdFx0XHRcdGV2ZW50cy5oYW5kbGVycy5wb2ludGVybW92ZShpbnRlcm5hbC5sYXN0RXZlbnQubmF0aXZlRWxlbWVudCk7XG5cdFx0fSxcblx0XHRjb25uZWN0OiAodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZS5nZXQoKTtcblx0XHRcdHN0YXRlLmV2ZW50cy5kaXNjb25uZWN0Py4oKTtcblxuXHRcdFx0c3RhdGUuc2V0RXZlbnRzKHsgY29ubmVjdGVkOiB0YXJnZXQgfSk7XG5cblx0XHRcdE9iamVjdC5lbnRyaWVzKHN0YXRlLmV2ZW50cy5oYW5kbGVycyA/PyB7fSkuZm9yRWFjaCgoW2V2ZW50TmFtZSwgZXZlbnRIYW5kbGVyXTogW3N0cmluZywgRXZlbnRMaXN0ZW5lcl0pID0+IHtcblx0XHRcdFx0Y29uc3QgcGFzc2l2ZSA9IERPTV9FVkVOVFNbZXZlbnROYW1lIGFzIGtleW9mIHR5cGVvZiBET01fRVZFTlRTXTtcblx0XHRcdFx0dGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXIsIHsgcGFzc2l2ZSB9KTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0ZGlzY29ubmVjdDogKCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBldmVudHMsIHNldEV2ZW50cyB9ID0gc3RvcmUuZ2V0KCk7XG5cdFx0XHRpZiAoZXZlbnRzLmNvbm5lY3RlZCkge1xuXHRcdFx0XHRPYmplY3QuZW50cmllcyhldmVudHMuaGFuZGxlcnMgPz8ge30pLmZvckVhY2goKFtldmVudE5hbWUsIGV2ZW50SGFuZGxlcl06IFtzdHJpbmcsIEV2ZW50TGlzdGVuZXJdKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50cy5jb25uZWN0ZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0ZXZlbnRzLmNvbm5lY3RlZC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHNldEV2ZW50cyh7IGNvbm5lY3RlZDogdW5kZWZpbmVkIH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdH07XG59XG4iXX0=