angular-three 2.0.0-beta.287 → 2.0.0-beta.288

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.
@@ -1,11 +1,7 @@
1
- import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, Directive, inject, input, signal, untracked, viewChild, } from '@angular/core';
1
+ import { afterNextRender, booleanAttribute, Directive, ElementRef, inject, input, signal, untracked, } from '@angular/core';
2
2
  import { injectAutoEffect } from 'ngxtension/auto-effect';
3
- import { Group } from 'three';
4
3
  import { getLocalState } from '../instance';
5
- import { extend } from '../renderer';
6
- import { NgtObjectEvents, NgtObjectEventsHostDirective } from '../utils/object-events';
7
4
  import * as i0 from "@angular/core";
8
- import * as i1 from "../utils/object-events";
9
5
  export class NgtSelection {
10
6
  constructor() {
11
7
  this.enabled = input(true, { alias: 'ngtSelection', transform: booleanAttribute });
@@ -27,27 +23,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
27
23
  }] });
28
24
  export class NgtSelect {
29
25
  constructor() {
30
- this.enabled = input(false, { transform: booleanAttribute });
31
- this.options = input({});
32
- this.groupRef = viewChild.required('group');
33
- extend({ Group });
34
- const objectEvents = inject(NgtObjectEvents, { host: true });
26
+ this.enabled = input(false, { transform: booleanAttribute, alias: 'ngtSelect' });
27
+ this.host = inject(ElementRef);
35
28
  const selection = inject(NgtSelection);
36
29
  const autoEffect = injectAutoEffect();
37
30
  afterNextRender(() => {
38
- objectEvents.ngtObjectEvents.set(this.groupRef());
39
31
  autoEffect(() => {
40
- const group = this.groupRef().nativeElement;
41
- const localState = getLocalState(group);
32
+ const host = this.host.nativeElement;
33
+ if (!host)
34
+ return;
35
+ const localState = getLocalState(host);
42
36
  if (!localState)
43
37
  return;
44
38
  const enabled = this.enabled();
45
39
  if (!enabled)
46
40
  return;
41
+ // ngt-mesh[ngtSelect]
42
+ if (host.type === 'Mesh') {
43
+ selection.select(host);
44
+ return () => selection.unselect(host);
45
+ }
47
46
  const [collection] = [untracked(selection.collection), localState.objects()];
48
47
  let changed = false;
49
48
  const current = [];
50
- group.traverse((child) => {
49
+ host.traverse((child) => {
51
50
  child.type === 'Mesh' && current.push(child);
52
51
  if (collection.indexOf(child) === -1)
53
52
  changed = true;
@@ -61,26 +60,11 @@ export class NgtSelect {
61
60
  }, { allowSignalWrites: true });
62
61
  });
63
62
  }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelect, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.3", type: NgtSelect, isStandalone: true, selector: "ngt-select", inputs: { enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.NgtObjectEvents, inputs: ["ngtObjectEvents", "ngtObjectEvents"], outputs: ["click", "click", "dblclick", "dblclick", "contextmenu", "contextmenu", "pointerup", "pointerup", "pointerdown", "pointerdown", "pointerover", "pointerover", "pointerout", "pointerout", "pointerenter", "pointerenter", "pointerleave", "pointerleave", "pointermove", "pointermove", "pointermissed", "pointermissed", "pointercancel", "pointercancel", "wheel", "wheel"] }], ngImport: i0, template: `
66
- <ngt-group #group [parameters]="options()">
67
- <ng-content />
68
- </ngt-group>
69
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
64
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.3", 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 }); }
70
65
  }
71
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelect, decorators: [{
72
- type: Component,
73
- args: [{
74
- selector: 'ngt-select',
75
- standalone: true,
76
- template: `
77
- <ngt-group #group [parameters]="options()">
78
- <ng-content />
79
- </ngt-group>
80
- `,
81
- hostDirectives: [NgtObjectEventsHostDirective],
82
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
83
- changeDetection: ChangeDetectionStrategy.OnPush,
84
- }]
67
+ type: Directive,
68
+ args: [{ standalone: true, selector: 'ngt-group[ngtSelect], ngt-mesh[ngtSelect]' }]
85
69
  }], ctorParameters: () => [] });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBWSxNQUFNLE9BQU8sQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLGVBQWUsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFHdkYsTUFBTSxPQUFPLFlBQVk7SUFEekI7UUFFQyxZQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUV0RSxjQUFTLEdBQUcsTUFBTSxDQUF5QyxFQUFFLENBQUMsQ0FBQztRQUN2RSxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQVN6QztJQVBBLE1BQU0sQ0FBQyxHQUFHLE9BQStDO1FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdB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QkFBNEIsQ0FBQztvQkFDOUMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IEdyb3VwLCBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi9yZW5kZXJlcic7XG5pbXBvcnQgeyBOZ3RHcm91cCB9IGZyb20gJy4uL3RocmVlLXR5cGVzJztcbmltcG9ydCB7IE5ndE9iamVjdEV2ZW50cywgTmd0T2JqZWN0RXZlbnRzSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4uL3V0aWxzL29iamVjdC1ldmVudHMnO1xuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICdbbmd0U2VsZWN0aW9uXScgfSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3Rpb24ge1xuXHRlbmFibGVkID0gaW5wdXQodHJ1ZSwgeyBhbGlhczogJ25ndFNlbGVjdGlvbicsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuXHRwcml2YXRlIHNlbGVjdGlvbiA9IHNpZ25hbDxBcnJheTxFbGVtZW50UmVmPE9iamVjdDNEPiB8IE9iamVjdDNEPj4oW10pO1xuXHRjb2xsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uYXNSZWFkb25seSgpO1xuXG5cdHNlbGVjdCguLi5vYmplY3RzOiBBcnJheTxFbGVtZW50UmVmPE9iamVjdDNEPiB8IE9iamVjdDNEPikge1xuXHRcdHRoaXMuc2VsZWN0aW9uLnVwZGF0ZSgocHJldikgPT4gWy4uLnByZXYsIC4uLm9iamVjdHNdKTtcblx0fVxuXG5cdHVuc2VsZWN0KC4uLm9iamVjdHM6IEFycmF5PEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0Q+KSB7XG5cdFx0dGhpcy5zZWxlY3Rpb24udXBkYXRlKChwcmV2KSA9PiBwcmV2LmZpbHRlcigoc2VsZWN0ZWQpID0+ICFvYmplY3RzLmluY2x1ZGVzKHNlbGVjdGVkKSkpO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1zZWxlY3QnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgI2dyb3VwIFtwYXJhbWV0ZXJzXT1cIm9wdGlvbnMoKVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0aG9zdERpcmVjdGl2ZXM6IFtOZ3RPYmplY3RFdmVudHNIb3N0RGlyZWN0aXZlXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0U2VsZWN0IHtcblx0ZW5hYmxlZCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIFBhcnRpYWw8Tmd0R3JvdXA+KTtcblxuXHRncm91cFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2dyb3VwJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAgfSk7XG5cblx0XHRjb25zdCBvYmplY3RFdmVudHMgPSBpbmplY3QoTmd0T2JqZWN0RXZlbnRzLCB7IGhvc3Q6IHRydWUgfSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uID0gaW5qZWN0KE5ndFNlbGVjdGlvbik7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRvYmplY3RFdmVudHMubmd0T2JqZWN0RXZlbnRzLnNldCh0aGlzLmdyb3VwUmVmKCkpO1xuXG5cdFx0XHRhdXRvRWZmZWN0KFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShncm91cCk7XG5cdFx0XHRcdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRcdFx0XHRjb25zdCBlbmFibGVkID0gdGhpcy5lbmFibGVkKCk7XG5cdFx0XHRcdFx0aWYgKCFlbmFibGVkKSByZXR1cm47XG5cblx0XHRcdFx0XHRjb25zdCBbY29sbGVjdGlvbl0gPSBbdW50cmFja2VkKHNlbGVjdGlvbi5jb2xsZWN0aW9uKSwgbG9jYWxTdGF0ZS5vYmplY3RzKCldO1xuXHRcdFx0XHRcdGxldCBjaGFuZ2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudDogT2JqZWN0M0RbXSA9IFtdO1xuXHRcdFx0XHRcdGdyb3VwLnRyYXZlcnNlKChjaGlsZCkgPT4ge1xuXHRcdFx0XHRcdFx0Y2hpbGQudHlwZSA9PT0gJ01lc2gnICYmIGN1cnJlbnQucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbi5pbmRleE9mKGNoaWxkKSA9PT0gLTEpIGNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKCFjaGFuZ2VkKSByZXR1cm47XG5cblx0XHRcdFx0XHRzZWxlY3Rpb24uc2VsZWN0KC4uLmN1cnJlbnQpO1xuXHRcdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24udW5zZWxlY3QoLi4uY3VycmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFHNUMsTUFBTSxPQUFPLFlBQVk7SUFEekI7UUFFQyxZQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUV0RSxjQUFTLEdBQUcsTUFBTSxDQUF5QyxFQUFFLENBQUMsQ0FBQztRQUN2RSxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQVN6QztJQVBBLE1BQU0sQ0FBQyxHQUFHLE9BQStDO1FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQUcsT0FBK0M7UUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQzs4R0FaVyxZQUFZO2tHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBRHhCLFNBQVM7bUJBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRTs7QUFpQjNELE1BQU0sT0FBTyxTQUFTO0lBS3JCO1FBSkEsWUFBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFNUUsU0FBSSxHQUFHLE1BQU0sQ0FBMkIsVUFBVSxDQUFDLENBQUM7UUFHbkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFFdEMsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixVQUFVLENBQ1QsR0FBRyxFQUFFO2dCQUNKLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPO2dCQUVsQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxVQUFVO29CQUFFLE9BQU87Z0JBRXhCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTztnQkFFckIsc0JBQXNCO2dCQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzFCLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZCLE9BQU8sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE1BQU0sT0FBTyxHQUFlLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN2QixLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM3QyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUFFLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBRXJCLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxHQUFHLEVBQUU7b0JBQ1gsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUM7WUFDSCxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDM0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0E3Q1csU0FBUztrR0FBVCxTQUFTOzsyRkFBVCxTQUFTO2tCQURyQixTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsMkNBQTJDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRhZnRlck5leHRSZW5kZXIsXG5cdGJvb2xlYW5BdHRyaWJ1dGUsXG5cdERpcmVjdGl2ZSxcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgR3JvdXAsIE1lc2gsIE9iamVjdDNEIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSB9IGZyb20gJy4uL2luc3RhbmNlJztcblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUsIHNlbGVjdG9yOiAnW25ndFNlbGVjdGlvbl0nIH0pXG5leHBvcnQgY2xhc3MgTmd0U2VsZWN0aW9uIHtcblx0ZW5hYmxlZCA9IGlucHV0KHRydWUsIHsgYWxpYXM6ICduZ3RTZWxlY3Rpb24nLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cblx0cHJpdmF0ZSBzZWxlY3Rpb24gPSBzaWduYWw8QXJyYXk8RWxlbWVudFJlZjxPYmplY3QzRD4gfCBPYmplY3QzRD4+KFtdKTtcblx0Y29sbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmFzUmVhZG9ubHkoKTtcblxuXHRzZWxlY3QoLi4ub2JqZWN0czogQXJyYXk8RWxlbWVudFJlZjxPYmplY3QzRD4gfCBPYmplY3QzRD4pIHtcblx0XHR0aGlzLnNlbGVjdGlvbi51cGRhdGUoKHByZXYpID0+IFsuLi5wcmV2LCAuLi5vYmplY3RzXSk7XG5cdH1cblxuXHR1bnNlbGVjdCguLi5vYmplY3RzOiBBcnJheTxFbGVtZW50UmVmPE9iamVjdDNEPiB8IE9iamVjdDNEPikge1xuXHRcdHRoaXMuc2VsZWN0aW9uLnVwZGF0ZSgocHJldikgPT4gcHJldi5maWx0ZXIoKHNlbGVjdGVkKSA9PiAhb2JqZWN0cy5pbmNsdWRlcyhzZWxlY3RlZCkpKTtcblx0fVxufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICduZ3QtZ3JvdXBbbmd0U2VsZWN0XSwgbmd0LW1lc2hbbmd0U2VsZWN0XScgfSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3Qge1xuXHRlbmFibGVkID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ25ndFNlbGVjdCcgfSk7XG5cblx0aG9zdCA9IGluamVjdDxFbGVtZW50UmVmPEdyb3VwIHwgTWVzaD4+KEVsZW1lbnRSZWYpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IGluamVjdChOZ3RTZWxlY3Rpb24pO1xuXHRcdGNvbnN0IGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdChcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvc3QgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0XHRpZiAoIWhvc3QpIHJldHVybjtcblxuXHRcdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGhvc3QpO1xuXHRcdFx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0Y29uc3QgZW5hYmxlZCA9IHRoaXMuZW5hYmxlZCgpO1xuXHRcdFx0XHRcdGlmICghZW5hYmxlZCkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0Ly8gbmd0LW1lc2hbbmd0U2VsZWN0XVxuXHRcdFx0XHRcdGlmIChob3N0LnR5cGUgPT09ICdNZXNoJykge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uLnNlbGVjdChob3N0KTtcblx0XHRcdFx0XHRcdHJldHVybiAoKSA9PiBzZWxlY3Rpb24udW5zZWxlY3QoaG9zdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgW2NvbGxlY3Rpb25dID0gW3VudHJhY2tlZChzZWxlY3Rpb24uY29sbGVjdGlvbiksIGxvY2FsU3RhdGUub2JqZWN0cygpXTtcblx0XHRcdFx0XHRsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnQ6IE9iamVjdDNEW10gPSBbXTtcblx0XHRcdFx0XHRob3N0LnRyYXZlcnNlKChjaGlsZCkgPT4ge1xuXHRcdFx0XHRcdFx0Y2hpbGQudHlwZSA9PT0gJ01lc2gnICYmIGN1cnJlbnQucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbi5pbmRleE9mKGNoaWxkKSA9PT0gLTEpIGNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKCFjaGFuZ2VkKSByZXR1cm47XG5cblx0XHRcdFx0XHRzZWxlY3Rpb24uc2VsZWN0KC4uLmN1cnJlbnQpO1xuXHRcdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24udW5zZWxlY3QoLi4uY3VycmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { untracked, computed, signal, ElementRef, input, inject, ViewContainerRef, NgZone, TemplateRef, afterNextRender, DestroyRef, Directive, effect, InjectionToken, getDebugNode, RendererFactory2, Injectable, makeEnvironmentProviders, Component, EnvironmentInjector, Injector, booleanAttribute, output, viewChild, createEnvironmentInjector, ChangeDetectionStrategy, model, Renderer2, CUSTOM_ELEMENTS_SCHEMA, Pipe, contentChild } from '@angular/core';
2
+ import { untracked, computed, signal, ElementRef, input, inject, ViewContainerRef, NgZone, TemplateRef, afterNextRender, DestroyRef, Directive, effect, InjectionToken, getDebugNode, RendererFactory2, Injectable, makeEnvironmentProviders, Component, EnvironmentInjector, Injector, booleanAttribute, output, viewChild, createEnvironmentInjector, ChangeDetectionStrategy, Pipe, CUSTOM_ELEMENTS_SCHEMA, contentChild, model, Renderer2 } from '@angular/core';
3
3
  import { takeUntilDestroyed, outputFromObservable } from '@angular/core/rxjs-interop';
4
4
  import { injectAutoEffect } from 'ngxtension/auto-effect';
5
5
  import { provideResizeOptions, NgxResize } from 'ngxtension/resize';
6
- import { MathUtils, WebGLRenderer, OrthographicCamera, PerspectiveCamera, Vector3, Vector2, Clock, Layers, Color, ColorManagement, Texture, RGBAFormat, UnsignedByteType, Raycaster, Scene, PCFSoftShadowMap, BasicShadowMap, PCFShadowMap, VSMShadowMap, NoToneMapping, ACESFilmicToneMapping, Group, Vector4 } from 'three';
6
+ import { MathUtils, WebGLRenderer, OrthographicCamera, PerspectiveCamera, Vector3, Vector2, Clock, Layers, Color, ColorManagement, Texture, RGBAFormat, UnsignedByteType, Raycaster, Scene, PCFSoftShadowMap, BasicShadowMap, PCFShadowMap, VSMShadowMap, NoToneMapping, ACESFilmicToneMapping, Vector4 } from 'three';
7
7
  import { DOCUMENT } from '@angular/common';
8
8
  import { Subject, filter } from 'rxjs';
9
9
  import { createInjectionToken } from 'ngxtension/create-injection-token';
@@ -2515,100 +2515,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
2515
2515
  }]
2516
2516
  }], ctorParameters: () => [] });
2517
2517
 
2518
- function resolveRef(ref) {
2519
- if (is.ref(ref)) {
2520
- return ref.nativeElement;
2521
- }
2522
- return ref;
2523
- }
2524
-
2525
- class NgtObjectEvents {
2526
- constructor() {
2527
- this.click = output();
2528
- this.dblclick = output();
2529
- this.contextmenu = output();
2530
- this.pointerup = output();
2531
- this.pointerdown = output();
2532
- this.pointerover = output();
2533
- this.pointerout = output();
2534
- this.pointerenter = output();
2535
- this.pointerleave = output();
2536
- this.pointermove = output();
2537
- this.pointermissed = output();
2538
- this.pointercancel = output();
2539
- this.wheel = output();
2540
- // NOTE: we use model here to allow for the hostDirective host to set this value
2541
- this.ngtObjectEvents = model();
2542
- const injector = inject(Injector);
2543
- afterNextRender(() => {
2544
- injectObjectEvents(this.ngtObjectEvents, {
2545
- click: (event) => this.click.emit(event),
2546
- dblclick: (event) => this.dblclick.emit(event),
2547
- contextmenu: (event) => this.contextmenu.emit(event),
2548
- pointerup: (event) => this.pointerup.emit(event),
2549
- pointerdown: (event) => this.pointerdown.emit(event),
2550
- pointerover: (event) => this.pointerover.emit(event),
2551
- pointerout: (event) => this.pointerout.emit(event),
2552
- pointerenter: (event) => this.pointerenter.emit(event),
2553
- pointerleave: (event) => this.pointerleave.emit(event),
2554
- pointermove: (event) => this.pointermove.emit(event),
2555
- pointermissed: (event) => this.pointermissed.emit(event),
2556
- pointercancel: (event) => this.pointercancel.emit(event),
2557
- wheel: (event) => this.wheel.emit(event),
2558
- }, { injector });
2559
- });
2560
- }
2561
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtObjectEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2562
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.3", type: NgtObjectEvents, isStandalone: true, selector: "[ngtObjectEvents]", inputs: { ngtObjectEvents: { classPropertyName: "ngtObjectEvents", publicName: "ngtObjectEvents", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click", dblclick: "dblclick", contextmenu: "contextmenu", pointerup: "pointerup", pointerdown: "pointerdown", pointerover: "pointerover", pointerout: "pointerout", pointerenter: "pointerenter", pointerleave: "pointerleave", pointermove: "pointermove", pointermissed: "pointermissed", pointercancel: "pointercancel", wheel: "wheel", ngtObjectEvents: "ngtObjectEventsChange" }, ngImport: i0 }); }
2563
- }
2564
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtObjectEvents, decorators: [{
2565
- type: Directive,
2566
- args: [{ standalone: true, selector: '[ngtObjectEvents]' }]
2567
- }], ctorParameters: () => [] });
2568
- const NgtObjectEventsHostDirective = {
2569
- directive: NgtObjectEvents,
2570
- inputs: ['ngtObjectEvents'],
2571
- outputs: [
2572
- 'click',
2573
- 'dblclick',
2574
- 'contextmenu',
2575
- 'pointerup',
2576
- 'pointerdown',
2577
- 'pointerover',
2578
- 'pointerout',
2579
- 'pointerenter',
2580
- 'pointerleave',
2581
- 'pointermove',
2582
- 'pointermissed',
2583
- 'pointercancel',
2584
- 'wheel',
2585
- ],
2586
- };
2587
- function injectObjectEvents(target, events, { injector } = {}) {
2588
- return assertInjector(injectObjectEvents, injector, () => {
2589
- const autoEffect = injectAutoEffect();
2590
- const renderer = inject(Renderer2);
2591
- const cleanUps = [];
2592
- afterNextRender(() => {
2593
- autoEffect(() => {
2594
- const targetRef = resolveRef(target());
2595
- if (!targetRef)
2596
- return;
2597
- Object.entries(events).forEach(([eventName, eventHandler]) => {
2598
- cleanUps.push(renderer.listen(targetRef, eventName, eventHandler));
2599
- });
2600
- return () => {
2601
- cleanUps.forEach((cleanUp) => cleanUp());
2602
- };
2603
- });
2604
- });
2605
- inject(DestroyRef).onDestroy(() => {
2606
- cleanUps.forEach((cleanUp) => cleanUp());
2607
- });
2608
- return cleanUps;
2609
- });
2610
- }
2611
-
2612
2518
  class NgtSelection {
2613
2519
  constructor() {
2614
2520
  this.enabled = input(true, { alias: 'ngtSelection', transform: booleanAttribute });
@@ -2630,27 +2536,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
2630
2536
  }] });
2631
2537
  class NgtSelect {
2632
2538
  constructor() {
2633
- this.enabled = input(false, { transform: booleanAttribute });
2634
- this.options = input({});
2635
- this.groupRef = viewChild.required('group');
2636
- extend({ Group });
2637
- const objectEvents = inject(NgtObjectEvents, { host: true });
2539
+ this.enabled = input(false, { transform: booleanAttribute, alias: 'ngtSelect' });
2540
+ this.host = inject(ElementRef);
2638
2541
  const selection = inject(NgtSelection);
2639
2542
  const autoEffect = injectAutoEffect();
2640
2543
  afterNextRender(() => {
2641
- objectEvents.ngtObjectEvents.set(this.groupRef());
2642
2544
  autoEffect(() => {
2643
- const group = this.groupRef().nativeElement;
2644
- const localState = getLocalState(group);
2545
+ const host = this.host.nativeElement;
2546
+ if (!host)
2547
+ return;
2548
+ const localState = getLocalState(host);
2645
2549
  if (!localState)
2646
2550
  return;
2647
2551
  const enabled = this.enabled();
2648
2552
  if (!enabled)
2649
2553
  return;
2554
+ // ngt-mesh[ngtSelect]
2555
+ if (host.type === 'Mesh') {
2556
+ selection.select(host);
2557
+ return () => selection.unselect(host);
2558
+ }
2650
2559
  const [collection] = [untracked(selection.collection), localState.objects()];
2651
2560
  let changed = false;
2652
2561
  const current = [];
2653
- group.traverse((child) => {
2562
+ host.traverse((child) => {
2654
2563
  child.type === 'Mesh' && current.push(child);
2655
2564
  if (collection.indexOf(child) === -1)
2656
2565
  changed = true;
@@ -2664,27 +2573,12 @@ class NgtSelect {
2664
2573
  }, { allowSignalWrites: true });
2665
2574
  });
2666
2575
  }
2667
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelect, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2668
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.3", type: NgtSelect, isStandalone: true, selector: "ngt-select", inputs: { enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }], hostDirectives: [{ directive: NgtObjectEvents, inputs: ["ngtObjectEvents", "ngtObjectEvents"], outputs: ["click", "click", "dblclick", "dblclick", "contextmenu", "contextmenu", "pointerup", "pointerup", "pointerdown", "pointerdown", "pointerover", "pointerover", "pointerout", "pointerout", "pointerenter", "pointerenter", "pointerleave", "pointerleave", "pointermove", "pointermove", "pointermissed", "pointermissed", "pointercancel", "pointercancel", "wheel", "wheel"] }], ngImport: i0, template: `
2669
- <ngt-group #group [parameters]="options()">
2670
- <ng-content />
2671
- </ngt-group>
2672
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2576
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2577
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.3", 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 }); }
2673
2578
  }
2674
2579
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelect, decorators: [{
2675
- type: Component,
2676
- args: [{
2677
- selector: 'ngt-select',
2678
- standalone: true,
2679
- template: `
2680
- <ngt-group #group [parameters]="options()">
2681
- <ng-content />
2682
- </ngt-group>
2683
- `,
2684
- hostDirectives: [NgtObjectEventsHostDirective],
2685
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
2686
- changeDetection: ChangeDetectionStrategy.OnPush,
2687
- }]
2580
+ type: Directive,
2581
+ args: [{ standalone: true, selector: 'ngt-group[ngtSelect], ngt-mesh[ngtSelect]' }]
2688
2582
  }], ctorParameters: () => [] });
2689
2583
 
2690
2584
  var _a;
@@ -3096,6 +2990,100 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
3096
2990
  }]
3097
2991
  }], ctorParameters: () => [] });
3098
2992
 
2993
+ function resolveRef(ref) {
2994
+ if (is.ref(ref)) {
2995
+ return ref.nativeElement;
2996
+ }
2997
+ return ref;
2998
+ }
2999
+
3000
+ class NgtObjectEvents {
3001
+ constructor() {
3002
+ this.click = output();
3003
+ this.dblclick = output();
3004
+ this.contextmenu = output();
3005
+ this.pointerup = output();
3006
+ this.pointerdown = output();
3007
+ this.pointerover = output();
3008
+ this.pointerout = output();
3009
+ this.pointerenter = output();
3010
+ this.pointerleave = output();
3011
+ this.pointermove = output();
3012
+ this.pointermissed = output();
3013
+ this.pointercancel = output();
3014
+ this.wheel = output();
3015
+ // NOTE: we use model here to allow for the hostDirective host to set this value
3016
+ this.ngtObjectEvents = model();
3017
+ const injector = inject(Injector);
3018
+ afterNextRender(() => {
3019
+ injectObjectEvents(this.ngtObjectEvents, {
3020
+ click: (event) => this.click.emit(event),
3021
+ dblclick: (event) => this.dblclick.emit(event),
3022
+ contextmenu: (event) => this.contextmenu.emit(event),
3023
+ pointerup: (event) => this.pointerup.emit(event),
3024
+ pointerdown: (event) => this.pointerdown.emit(event),
3025
+ pointerover: (event) => this.pointerover.emit(event),
3026
+ pointerout: (event) => this.pointerout.emit(event),
3027
+ pointerenter: (event) => this.pointerenter.emit(event),
3028
+ pointerleave: (event) => this.pointerleave.emit(event),
3029
+ pointermove: (event) => this.pointermove.emit(event),
3030
+ pointermissed: (event) => this.pointermissed.emit(event),
3031
+ pointercancel: (event) => this.pointercancel.emit(event),
3032
+ wheel: (event) => this.wheel.emit(event),
3033
+ }, { injector });
3034
+ });
3035
+ }
3036
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtObjectEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
3037
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.3", type: NgtObjectEvents, isStandalone: true, selector: "[ngtObjectEvents]", inputs: { ngtObjectEvents: { classPropertyName: "ngtObjectEvents", publicName: "ngtObjectEvents", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { click: "click", dblclick: "dblclick", contextmenu: "contextmenu", pointerup: "pointerup", pointerdown: "pointerdown", pointerover: "pointerover", pointerout: "pointerout", pointerenter: "pointerenter", pointerleave: "pointerleave", pointermove: "pointermove", pointermissed: "pointermissed", pointercancel: "pointercancel", wheel: "wheel", ngtObjectEvents: "ngtObjectEventsChange" }, ngImport: i0 }); }
3038
+ }
3039
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtObjectEvents, decorators: [{
3040
+ type: Directive,
3041
+ args: [{ standalone: true, selector: '[ngtObjectEvents]' }]
3042
+ }], ctorParameters: () => [] });
3043
+ const NgtObjectEventsHostDirective = {
3044
+ directive: NgtObjectEvents,
3045
+ inputs: ['ngtObjectEvents'],
3046
+ outputs: [
3047
+ 'click',
3048
+ 'dblclick',
3049
+ 'contextmenu',
3050
+ 'pointerup',
3051
+ 'pointerdown',
3052
+ 'pointerover',
3053
+ 'pointerout',
3054
+ 'pointerenter',
3055
+ 'pointerleave',
3056
+ 'pointermove',
3057
+ 'pointermissed',
3058
+ 'pointercancel',
3059
+ 'wheel',
3060
+ ],
3061
+ };
3062
+ function injectObjectEvents(target, events, { injector } = {}) {
3063
+ return assertInjector(injectObjectEvents, injector, () => {
3064
+ const autoEffect = injectAutoEffect();
3065
+ const renderer = inject(Renderer2);
3066
+ const cleanUps = [];
3067
+ afterNextRender(() => {
3068
+ autoEffect(() => {
3069
+ const targetRef = resolveRef(target());
3070
+ if (!targetRef)
3071
+ return;
3072
+ Object.entries(events).forEach(([eventName, eventHandler]) => {
3073
+ cleanUps.push(renderer.listen(targetRef, eventName, eventHandler));
3074
+ });
3075
+ return () => {
3076
+ cleanUps.forEach((cleanUp) => cleanUp());
3077
+ };
3078
+ });
3079
+ });
3080
+ inject(DestroyRef).onDestroy(() => {
3081
+ cleanUps.forEach((cleanUp) => cleanUp());
3082
+ });
3083
+ return cleanUps;
3084
+ });
3085
+ }
3086
+
3099
3087
  function omit(objFn, keysToOmit) {
3100
3088
  return computed(() => {
3101
3089
  const obj = objFn();