angular-three 2.0.0-beta.286 → 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.
package/esm2022/index.mjs CHANGED
@@ -1,9 +1,11 @@
1
1
  export * from './lib/canvas';
2
2
  export * from './lib/directives/args';
3
+ export * from './lib/directives/selection';
3
4
  export * from './lib/html';
4
5
  export * from './lib/instance';
5
6
  export * from './lib/loader';
6
7
  export * from './lib/loop';
8
+ export * from './lib/pipes/hexify';
7
9
  export * from './lib/portal';
8
10
  export * from './lib/renderer';
9
11
  export * from './lib/roots';
@@ -19,4 +21,4 @@ export * from './lib/utils/parameters';
19
21
  export * from './lib/utils/resolve-ref';
20
22
  export * from './lib/utils/signal-store';
21
23
  export * from './lib/utils/update';
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NhbnZhcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2FyZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaHRtbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnN0YW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9vcCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wb3J0YWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVuZGVyZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcm9vdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcm91dGVkLXNjZW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2FwcGx5LXByb3BzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2F0dGFjaCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9iZWZvcmUtcmVuZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2lzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL21ha2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvb2JqZWN0LWV2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9wYXJhbWV0ZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3Jlc29sdmUtcmVmJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy91cGRhdGUnO1xuXG5leHBvcnQgdHlwZSAqIGZyb20gJy4vbGliL3RocmVlLXR5cGVzJztcbmV4cG9ydCB0eXBlICogZnJvbSAnLi9saWIvdHlwZXMnO1xuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jYW52YXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9hcmdzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvc2VsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2h0bWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5zdGFuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvb3AnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvaGV4aWZ5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BvcnRhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZW5kZXJlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb290cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZWQtc2NlbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYXBwbHktcHJvcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYXR0YWNoJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2JlZm9yZS1yZW5kZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvaXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvbWFrZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9vYmplY3QtZXZlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3BhcmFtZXRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvcmVzb2x2ZS1yZWYnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvc2lnbmFsLXN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3VwZGF0ZSc7XG5cbmV4cG9ydCB0eXBlICogZnJvbSAnLi9saWIvdGhyZWUtdHlwZXMnO1xuZXhwb3J0IHR5cGUgKiBmcm9tICcuL2xpYi90eXBlcyc7XG4iXX0=
@@ -0,0 +1,70 @@
1
+ import { afterNextRender, booleanAttribute, Directive, ElementRef, inject, input, signal, untracked, } from '@angular/core';
2
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
3
+ import { getLocalState } from '../instance';
4
+ import * as i0 from "@angular/core";
5
+ export class NgtSelection {
6
+ constructor() {
7
+ this.enabled = input(true, { alias: 'ngtSelection', transform: booleanAttribute });
8
+ this.selection = signal([]);
9
+ this.collection = this.selection.asReadonly();
10
+ }
11
+ select(...objects) {
12
+ this.selection.update((prev) => [...prev, ...objects]);
13
+ }
14
+ unselect(...objects) {
15
+ this.selection.update((prev) => prev.filter((selected) => !objects.includes(selected)));
16
+ }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
18
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.3", type: NgtSelection, isStandalone: true, selector: "[ngtSelection]", inputs: { enabled: { classPropertyName: "enabled", publicName: "ngtSelection", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelection, decorators: [{
21
+ type: Directive,
22
+ args: [{ standalone: true, selector: '[ngtSelection]' }]
23
+ }] });
24
+ export class NgtSelect {
25
+ constructor() {
26
+ this.enabled = input(false, { transform: booleanAttribute, alias: 'ngtSelect' });
27
+ this.host = inject(ElementRef);
28
+ const selection = inject(NgtSelection);
29
+ const autoEffect = injectAutoEffect();
30
+ afterNextRender(() => {
31
+ autoEffect(() => {
32
+ const host = this.host.nativeElement;
33
+ if (!host)
34
+ return;
35
+ const localState = getLocalState(host);
36
+ if (!localState)
37
+ return;
38
+ const enabled = this.enabled();
39
+ if (!enabled)
40
+ return;
41
+ // ngt-mesh[ngtSelect]
42
+ if (host.type === 'Mesh') {
43
+ selection.select(host);
44
+ return () => selection.unselect(host);
45
+ }
46
+ const [collection] = [untracked(selection.collection), 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.select(...current);
57
+ return () => {
58
+ selection.unselect(...current);
59
+ };
60
+ }, { allowSignalWrites: true });
61
+ });
62
+ }
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 }); }
65
+ }
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelect, decorators: [{
67
+ type: Directive,
68
+ args: [{ standalone: true, selector: 'ngt-group[ngtSelect], ngt-mesh[ngtSelect]' }]
69
+ }], ctorParameters: () => [] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFHNUMsTUFBTSxPQUFPLFlBQVk7SUFEekI7UUFFQyxZQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUV0RSxjQUFTLEdBQUcsTUFBTSxDQUF5QyxFQUFFLENBQUMsQ0FBQztRQUN2RSxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQVN6QztJQVBBLE1BQU0sQ0FBQyxHQUFHLE9BQStDO1FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQUcsT0FBK0M7UUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQzs4R0FaVyxZQUFZO2tHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBRHhCLFNBQVM7bUJBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRTs7QUFpQjNELE1BQU0sT0FBTyxTQUFTO0lBS3JCO1FBSkEsWUFBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFNUUsU0FBSSxHQUFHLE1BQU0sQ0FBMkIsVUFBVSxDQUFDLENBQUM7UUFHbkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFFdEMsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixVQUFVLENBQ1QsR0FBRyxFQUFFO2dCQUNKLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPO2dCQUVsQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxVQUFVO29CQUFFLE9BQU87Z0JBRXhCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTztnQkFFckIsc0JBQXNCO2dCQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzFCLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZCLE9BQU8sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE1BQU0sT0FBTyxHQUFlLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN2QixLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM3QyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUFFLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBRXJCLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxHQUFHLEVBQUU7b0JBQ1gsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUM7WUFDSCxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDM0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0E3Q1csU0FBUztrR0FBVCxTQUFTOzsyRkFBVCxTQUFTO2tCQURyQixTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsMkNBQTJDLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRhZnRlck5leHRSZW5kZXIsXG5cdGJvb2xlYW5BdHRyaWJ1dGUsXG5cdERpcmVjdGl2ZSxcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgR3JvdXAsIE1lc2gsIE9iamVjdDNEIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSB9IGZyb20gJy4uL2luc3RhbmNlJztcblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUsIHNlbGVjdG9yOiAnW25ndFNlbGVjdGlvbl0nIH0pXG5leHBvcnQgY2xhc3MgTmd0U2VsZWN0aW9uIHtcblx0ZW5hYmxlZCA9IGlucHV0KHRydWUsIHsgYWxpYXM6ICduZ3RTZWxlY3Rpb24nLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cblx0cHJpdmF0ZSBzZWxlY3Rpb24gPSBzaWduYWw8QXJyYXk8RWxlbWVudFJlZjxPYmplY3QzRD4gfCBPYmplY3QzRD4+KFtdKTtcblx0Y29sbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmFzUmVhZG9ubHkoKTtcblxuXHRzZWxlY3QoLi4ub2JqZWN0czogQXJyYXk8RWxlbWVudFJlZjxPYmplY3QzRD4gfCBPYmplY3QzRD4pIHtcblx0XHR0aGlzLnNlbGVjdGlvbi51cGRhdGUoKHByZXYpID0+IFsuLi5wcmV2LCAuLi5vYmplY3RzXSk7XG5cdH1cblxuXHR1bnNlbGVjdCguLi5vYmplY3RzOiBBcnJheTxFbGVtZW50UmVmPE9iamVjdDNEPiB8IE9iamVjdDNEPikge1xuXHRcdHRoaXMuc2VsZWN0aW9uLnVwZGF0ZSgocHJldikgPT4gcHJldi5maWx0ZXIoKHNlbGVjdGVkKSA9PiAhb2JqZWN0cy5pbmNsdWRlcyhzZWxlY3RlZCkpKTtcblx0fVxufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICduZ3QtZ3JvdXBbbmd0U2VsZWN0XSwgbmd0LW1lc2hbbmd0U2VsZWN0XScgfSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3Qge1xuXHRlbmFibGVkID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ25ndFNlbGVjdCcgfSk7XG5cblx0aG9zdCA9IGluamVjdDxFbGVtZW50UmVmPEdyb3VwIHwgTWVzaD4+KEVsZW1lbnRSZWYpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IHNlbGVjdGlvbiA9IGluamVjdChOZ3RTZWxlY3Rpb24pO1xuXHRcdGNvbnN0IGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdChcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvc3QgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0XHRpZiAoIWhvc3QpIHJldHVybjtcblxuXHRcdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGhvc3QpO1xuXHRcdFx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0Y29uc3QgZW5hYmxlZCA9IHRoaXMuZW5hYmxlZCgpO1xuXHRcdFx0XHRcdGlmICghZW5hYmxlZCkgcmV0dXJuO1xuXG5cdFx0XHRcdFx0Ly8gbmd0LW1lc2hbbmd0U2VsZWN0XVxuXHRcdFx0XHRcdGlmIChob3N0LnR5cGUgPT09ICdNZXNoJykge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uLnNlbGVjdChob3N0KTtcblx0XHRcdFx0XHRcdHJldHVybiAoKSA9PiBzZWxlY3Rpb24udW5zZWxlY3QoaG9zdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgW2NvbGxlY3Rpb25dID0gW3VudHJhY2tlZChzZWxlY3Rpb24uY29sbGVjdGlvbiksIGxvY2FsU3RhdGUub2JqZWN0cygpXTtcblx0XHRcdFx0XHRsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnQ6IE9iamVjdDNEW10gPSBbXTtcblx0XHRcdFx0XHRob3N0LnRyYXZlcnNlKChjaGlsZCkgPT4ge1xuXHRcdFx0XHRcdFx0Y2hpbGQudHlwZSA9PT0gJ01lc2gnICYmIGN1cnJlbnQucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbi5pbmRleE9mKGNoaWxkKSA9PT0gLTEpIGNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKCFjaGFuZ2VkKSByZXR1cm47XG5cblx0XHRcdFx0XHRzZWxlY3Rpb24uc2VsZWN0KC4uLmN1cnJlbnQpO1xuXHRcdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24udW5zZWxlY3QoLi4uY3VycmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -0,0 +1,67 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { inject, Pipe } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtHexify {
5
+ constructor() {
6
+ this.document = inject(DOCUMENT, { optional: true });
7
+ }
8
+ /**
9
+ * transforms a:
10
+ * - hex string to a hex number
11
+ * - rgb string to a hex number
12
+ * - rgba string to a hex number
13
+ * - css color string to a hex number
14
+ *
15
+ * always default to black if failed
16
+ * @param value
17
+ */
18
+ transform(value) {
19
+ if (value == null)
20
+ return 0x000000;
21
+ if (value.startsWith('#')) {
22
+ return this.hexStringToNumber(value);
23
+ }
24
+ if (!this.ctx) {
25
+ this.ctx = this.document?.createElement('canvas').getContext('2d');
26
+ }
27
+ if (!this.ctx)
28
+ return 0x000000;
29
+ this.ctx.fillStyle = value;
30
+ const computedValue = this.ctx.fillStyle;
31
+ if (computedValue.startsWith('#')) {
32
+ return this.hexStringToNumber(computedValue);
33
+ }
34
+ if (!computedValue.startsWith('rgba'))
35
+ return 0x000000;
36
+ const regex = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/;
37
+ const match = computedValue.match(regex);
38
+ if (!match)
39
+ return 0x000000;
40
+ const r = parseInt(match[1], 10);
41
+ const g = parseInt(match[2], 10);
42
+ const b = parseInt(match[3], 10);
43
+ const a = match[4] ? parseFloat(match[4]) : 1.0;
44
+ // Convert the components to hex strings
45
+ const hexR = this.componentToHex(r);
46
+ const hexG = this.componentToHex(g);
47
+ const hexB = this.componentToHex(b);
48
+ const hexA = this.componentToHex(Math.round(a * 255));
49
+ // Combine the hex components into a single hex string
50
+ const hex = `#${hexR}${hexG}${hexB}${hexA}`;
51
+ return this.hexStringToNumber(hex);
52
+ }
53
+ hexStringToNumber(hexString) {
54
+ return parseInt(hexString.replace('#', ''), 16);
55
+ }
56
+ componentToHex(component) {
57
+ const hex = component.toString(16);
58
+ return hex.length === 1 ? '0' + hex : hex;
59
+ }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
61
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, isStandalone: true, name: "hexify" }); }
62
+ }
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, decorators: [{
64
+ type: Pipe,
65
+ args: [{ name: 'hexify', pure: true, standalone: true }]
66
+ }] });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV4aWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGlwZXMvaGV4aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHN0MsTUFBTSxPQUFPLFNBQVM7SUFEdEI7UUFFUyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBK0R4RDtJQTVEQTs7Ozs7Ozs7O09BU0c7SUFDSCxTQUFTLENBQUMsS0FBYTtRQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFbkMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBRXpDLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUV2RCxNQUFNLEtBQUssR0FBRyxtREFBbUQsQ0FBQztRQUNsRSxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFNUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVoRCx3Q0FBd0M7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXRELHNEQUFzRDtRQUN0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFpQjtRQUMxQyxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQWlCO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzNDLENBQUM7OEdBL0RXLFNBQVM7NEdBQVQsU0FBUzs7MkZBQVQsU0FBUztrQkFEckIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHsgbmFtZTogJ2hleGlmeScsIHB1cmU6IHRydWUsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RIZXhpZnkge1xuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5ULCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXHRwcml2YXRlIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGw7XG5cblx0LyoqXG5cdCAqIHRyYW5zZm9ybXMgYTpcblx0ICogLSBoZXggc3RyaW5nIHRvIGEgaGV4IG51bWJlclxuXHQgKiAtIHJnYiBzdHJpbmcgdG8gYSBoZXggbnVtYmVyXG5cdCAqIC0gcmdiYSBzdHJpbmcgdG8gYSBoZXggbnVtYmVyXG5cdCAqIC0gY3NzIGNvbG9yIHN0cmluZyB0byBhIGhleCBudW1iZXJcblx0ICpcblx0ICogYWx3YXlzIGRlZmF1bHQgdG8gYmxhY2sgaWYgZmFpbGVkXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKi9cblx0dHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gMHgwMDAwMDA7XG5cblx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnIycpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZXhTdHJpbmdUb051bWJlcih2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmN0eCkge1xuXHRcdFx0dGhpcy5jdHggPSB0aGlzLmRvY3VtZW50Py5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jdHgpIHJldHVybiAweDAwMDAwMDtcblxuXHRcdHRoaXMuY3R4LmZpbGxTdHlsZSA9IHZhbHVlO1xuXHRcdGNvbnN0IGNvbXB1dGVkVmFsdWUgPSB0aGlzLmN0eC5maWxsU3R5bGU7XG5cblx0XHRpZiAoY29tcHV0ZWRWYWx1ZS5zdGFydHNXaXRoKCcjJykpIHtcblx0XHRcdHJldHVybiB0aGlzLmhleFN0cmluZ1RvTnVtYmVyKGNvbXB1dGVkVmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmICghY29tcHV0ZWRWYWx1ZS5zdGFydHNXaXRoKCdyZ2JhJykpIHJldHVybiAweDAwMDAwMDtcblxuXHRcdGNvbnN0IHJlZ2V4ID0gL3JnYmE/XFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKSw/XFxzKihcXGQqXFwuP1xcZCspP1xcKS87XG5cdFx0Y29uc3QgbWF0Y2ggPSBjb21wdXRlZFZhbHVlLm1hdGNoKHJlZ2V4KTtcblx0XHRpZiAoIW1hdGNoKSByZXR1cm4gMHgwMDAwMDA7XG5cblx0XHRjb25zdCByID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcblx0XHRjb25zdCBnID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcblx0XHRjb25zdCBiID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKTtcblx0XHRjb25zdCBhID0gbWF0Y2hbNF0gPyBwYXJzZUZsb2F0KG1hdGNoWzRdKSA6IDEuMDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGNvbXBvbmVudHMgdG8gaGV4IHN0cmluZ3Ncblx0XHRjb25zdCBoZXhSID0gdGhpcy5jb21wb25lbnRUb0hleChyKTtcblx0XHRjb25zdCBoZXhHID0gdGhpcy5jb21wb25lbnRUb0hleChnKTtcblx0XHRjb25zdCBoZXhCID0gdGhpcy5jb21wb25lbnRUb0hleChiKTtcblx0XHRjb25zdCBoZXhBID0gdGhpcy5jb21wb25lbnRUb0hleChNYXRoLnJvdW5kKGEgKiAyNTUpKTtcblxuXHRcdC8vIENvbWJpbmUgdGhlIGhleCBjb21wb25lbnRzIGludG8gYSBzaW5nbGUgaGV4IHN0cmluZ1xuXHRcdGNvbnN0IGhleCA9IGAjJHtoZXhSfSR7aGV4R30ke2hleEJ9JHtoZXhBfWA7XG5cdFx0cmV0dXJuIHRoaXMuaGV4U3RyaW5nVG9OdW1iZXIoaGV4KTtcblx0fVxuXG5cdHByaXZhdGUgaGV4U3RyaW5nVG9OdW1iZXIoaGV4U3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiBwYXJzZUludChoZXhTdHJpbmcucmVwbGFjZSgnIycsICcnKSwgMTYpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb21wb25lbnRUb0hleChjb21wb25lbnQ6IG51bWJlcik6IHN0cmluZyB7XG5cdFx0Y29uc3QgaGV4ID0gY29tcG9uZW50LnRvU3RyaW5nKDE2KTtcblx0XHRyZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcblx0fVxufVxuIl19
@@ -1,7 +1,70 @@
1
- import { afterNextRender, DestroyRef, inject, Renderer2 } from '@angular/core';
1
+ import { afterNextRender, DestroyRef, Directive, inject, Injector, model, output, Renderer2, } from '@angular/core';
2
2
  import { assertInjector } from 'ngxtension/assert-injector';
3
3
  import { injectAutoEffect } from 'ngxtension/auto-effect';
4
4
  import { resolveRef } from './resolve-ref';
5
+ import * as i0 from "@angular/core";
6
+ export class NgtObjectEvents {
7
+ constructor() {
8
+ this.click = output();
9
+ this.dblclick = output();
10
+ this.contextmenu = output();
11
+ this.pointerup = output();
12
+ this.pointerdown = output();
13
+ this.pointerover = output();
14
+ this.pointerout = output();
15
+ this.pointerenter = output();
16
+ this.pointerleave = output();
17
+ this.pointermove = output();
18
+ this.pointermissed = output();
19
+ this.pointercancel = output();
20
+ this.wheel = output();
21
+ // NOTE: we use model here to allow for the hostDirective host to set this value
22
+ this.ngtObjectEvents = model();
23
+ const injector = inject(Injector);
24
+ afterNextRender(() => {
25
+ injectObjectEvents(this.ngtObjectEvents, {
26
+ click: (event) => this.click.emit(event),
27
+ dblclick: (event) => this.dblclick.emit(event),
28
+ contextmenu: (event) => this.contextmenu.emit(event),
29
+ pointerup: (event) => this.pointerup.emit(event),
30
+ pointerdown: (event) => this.pointerdown.emit(event),
31
+ pointerover: (event) => this.pointerover.emit(event),
32
+ pointerout: (event) => this.pointerout.emit(event),
33
+ pointerenter: (event) => this.pointerenter.emit(event),
34
+ pointerleave: (event) => this.pointerleave.emit(event),
35
+ pointermove: (event) => this.pointermove.emit(event),
36
+ pointermissed: (event) => this.pointermissed.emit(event),
37
+ pointercancel: (event) => this.pointercancel.emit(event),
38
+ wheel: (event) => this.wheel.emit(event),
39
+ }, { injector });
40
+ });
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtObjectEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
43
+ 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 }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtObjectEvents, decorators: [{
46
+ type: Directive,
47
+ args: [{ standalone: true, selector: '[ngtObjectEvents]' }]
48
+ }], ctorParameters: () => [] });
49
+ export const NgtObjectEventsHostDirective = {
50
+ directive: NgtObjectEvents,
51
+ inputs: ['ngtObjectEvents'],
52
+ outputs: [
53
+ 'click',
54
+ 'dblclick',
55
+ 'contextmenu',
56
+ 'pointerup',
57
+ 'pointerdown',
58
+ 'pointerover',
59
+ 'pointerout',
60
+ 'pointerenter',
61
+ 'pointerleave',
62
+ 'pointermove',
63
+ 'pointermissed',
64
+ 'pointercancel',
65
+ 'wheel',
66
+ ],
67
+ };
5
68
  export function injectObjectEvents(target, events, { injector } = {}) {
6
69
  return assertInjector(injectObjectEvents, injector, () => {
7
70
  const autoEffect = injectAutoEffect();
@@ -26,4 +89,4 @@ export function injectObjectEvents(target, events, { injector } = {}) {
26
89
  return cleanUps;
27
90
  });
28
91
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL29iamVjdC1ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQWMsTUFBTSxFQUFZLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxNQUFNLFVBQVUsa0JBQWtCLENBQ2pDLE1BQWdFLEVBQ2hFLE1BRUMsRUFDRCxFQUFFLFFBQVEsS0FBOEIsRUFBRTtJQUUxQyxPQUFPLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3hELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sUUFBUSxHQUFzQixFQUFFLENBQUM7UUFFdkMsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNmLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsU0FBUztvQkFBRSxPQUFPO2dCQUV2QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7b0JBQzVELFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sR0FBRyxFQUFFO29CQUNYLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJOZXh0UmVuZGVyLCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdG9yLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgT2JqZWN0M0QgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBzdXBwb3J0ZWRFdmVudHMgfSBmcm9tICcuLi9kb20vZXZlbnRzJztcbmltcG9ydCB7IE5ndERvbUV2ZW50LCBOZ3RUaHJlZUV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVJlZiB9IGZyb20gJy4vcmVzb2x2ZS1yZWYnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0T2JqZWN0RXZlbnRzKFxuXHR0YXJnZXQ6ICgpID0+IEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0QgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRldmVudHM6IHtcblx0XHRbSyBpbiAodHlwZW9mIHN1cHBvcnRlZEV2ZW50cylbbnVtYmVyXV0/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSA9PiB2b2lkO1xuXHR9LFxuXHR7IGluamVjdG9yIH06IHsgaW5qZWN0b3I/OiBJbmplY3RvciB9ID0ge30sXG4pIHtcblx0cmV0dXJuIGFzc2VydEluamVjdG9yKGluamVjdE9iamVjdEV2ZW50cywgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRcdGNvbnN0IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cblx0XHRjb25zdCBjbGVhblVwczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UmVmID0gcmVzb2x2ZVJlZih0YXJnZXQoKSk7XG5cdFx0XHRcdGlmICghdGFyZ2V0UmVmKSByZXR1cm47XG5cblx0XHRcdFx0T2JqZWN0LmVudHJpZXMoZXZlbnRzKS5mb3JFYWNoKChbZXZlbnROYW1lLCBldmVudEhhbmRsZXJdKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYW5VcHMucHVzaChyZW5kZXJlci5saXN0ZW4odGFyZ2V0UmVmLCBldmVudE5hbWUsIGV2ZW50SGFuZGxlcikpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRcdGNsZWFuVXBzLmZvckVhY2goKGNsZWFuVXApID0+IGNsZWFuVXAoKSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdFx0Y2xlYW5VcHMuZm9yRWFjaCgoY2xlYW5VcCkgPT4gY2xlYW5VcCgpKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBjbGVhblVwcztcblx0fSk7XG59XG4iXX0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL29iamVjdC1ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUVULE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxlQUFlO0lBa0IzQjtRQWpCQSxVQUFLLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQzVDLGFBQVEsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDL0MsZ0JBQVcsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDbEQsY0FBUyxHQUFHLE1BQU0sRUFBK0IsQ0FBQztRQUNsRCxnQkFBVyxHQUFHLE1BQU0sRUFBK0IsQ0FBQztRQUNwRCxnQkFBVyxHQUFHLE1BQU0sRUFBK0IsQ0FBQztRQUNwRCxlQUFVLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ25ELGlCQUFZLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ3JELGlCQUFZLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ3JELGdCQUFXLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ3BELGtCQUFhLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQ3BELGtCQUFhLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ3RELFVBQUssR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFFNUMsZ0ZBQWdGO1FBQ2hGLG9CQUFlLEdBQUcsS0FBSyxFQUFzRCxDQUFDO1FBRzdFLE1BQU0s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QUVuQyxNQUFNLFFBQVEsR0FBc0IsRUFBRSxDQUFDO1FBRXZDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFNBQVM7b0JBQUUsT0FBTztnQkFFdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLEdBQUcsRUFBRTtvQkFDWCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0RGVzdHJveVJlZixcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHRtb2RlbCxcblx0b3V0cHV0LFxuXHRSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IHN1cHBvcnRlZEV2ZW50cyB9IGZyb20gJy4uL2RvbS9ldmVudHMnO1xuaW1wb3J0IHsgTmd0RG9tRXZlbnQsIE5ndFRocmVlRXZlbnQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyByZXNvbHZlUmVmIH0gZnJvbSAnLi9yZXNvbHZlLXJlZic7XG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlLCBzZWxlY3RvcjogJ1tuZ3RPYmplY3RFdmVudHNdJyB9KVxuZXhwb3J0IGNsYXNzIE5ndE9iamVjdEV2ZW50cyB7XG5cdGNsaWNrID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG5cdGRibGNsaWNrID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG5cdGNvbnRleHRtZW51ID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG5cdHBvaW50ZXJ1cCA9IG91dHB1dDxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG5cdHBvaW50ZXJkb3duID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcblx0cG9pbnRlcm92ZXIgPSBvdXRwdXQ8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuXHRwb2ludGVyb3V0ID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcblx0cG9pbnRlcmVudGVyID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcblx0cG9pbnRlcmxlYXZlID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcblx0cG9pbnRlcm1vdmUgPSBvdXRwdXQ8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuXHRwb2ludGVybWlzc2VkID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG5cdHBvaW50ZXJjYW5jZWwgPSBvdXRwdXQ8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuXHR3aGVlbCA9IG91dHB1dDxOZ3RUaHJlZUV2ZW50PFdoZWVsRXZlbnQ+PigpO1xuXG5cdC8vIE5PVEU6IHdlIHVzZSBtb2RlbCBoZXJlIHRvIGFsbG93IGZvciB0aGUgaG9zdERpcmVjdGl2ZSBob3N0IHRvIHNldCB0aGlzIHZhbHVlXG5cdG5ndE9iamVjdEV2ZW50cyA9IG1vZGVsPEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0QgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRpbmplY3RPYmplY3RFdmVudHMoXG5cdFx0XHRcdHRoaXMubmd0T2JqZWN0RXZlbnRzLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2xpY2s6IChldmVudCkgPT4gdGhpcy5jbGljay5lbWl0KGV2ZW50KSxcblx0XHRcdFx0XHRkYmxjbGljazogKGV2ZW50KSA9PiB0aGlzLmRibGNsaWNrLmVtaXQoZXZlbnQpLFxuXHRcdFx0XHRcdGNvbnRleHRtZW51OiAoZXZlbnQpID0+IHRoaXMuY29udGV4dG1lbnUuZW1pdChldmVudCksXG5cdFx0XHRcdFx0cG9pbnRlcnVwOiAoZXZlbnQpID0+IHRoaXMucG9pbnRlcnVwLmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSxcblx0XHRcdFx0XHRwb2ludGVyZG93bjogKGV2ZW50KSA9PiB0aGlzLnBvaW50ZXJkb3duLmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSxcblx0XHRcdFx0XHRwb2ludGVyb3ZlcjogKGV2ZW50KSA9PiB0aGlzLnBvaW50ZXJvdmVyLmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSxcblx0XHRcdFx0XHRwb2ludGVyb3V0OiAoZXZlbnQpID0+IHRoaXMucG9pbnRlcm91dC5lbWl0KGV2ZW50IGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PiksXG5cdFx0XHRcdFx0cG9pbnRlcmVudGVyOiAoZXZlbnQpID0+IHRoaXMucG9pbnRlcmVudGVyLmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSxcblx0XHRcdFx0XHRwb2ludGVybGVhdmU6IChldmVudCkgPT4gdGhpcy5wb2ludGVybGVhdmUuZW1pdChldmVudCBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pLFxuXHRcdFx0XHRcdHBvaW50ZXJtb3ZlOiAoZXZlbnQpID0+IHRoaXMucG9pbnRlcm1vdmUuZW1pdChldmVudCBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pLFxuXHRcdFx0XHRcdHBvaW50ZXJtaXNzZWQ6IChldmVudCkgPT4gdGhpcy5wb2ludGVybWlzc2VkLmVtaXQoZXZlbnQpLFxuXHRcdFx0XHRcdHBvaW50ZXJjYW5jZWw6IChldmVudCkgPT4gdGhpcy5wb2ludGVyY2FuY2VsLmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSxcblx0XHRcdFx0XHR3aGVlbDogKGV2ZW50KSA9PiB0aGlzLndoZWVsLmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxXaGVlbEV2ZW50PiksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHsgaW5qZWN0b3IgfSxcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IE5ndE9iamVjdEV2ZW50c0hvc3REaXJlY3RpdmUgPSB7XG5cdGRpcmVjdGl2ZTogTmd0T2JqZWN0RXZlbnRzLFxuXHRpbnB1dHM6IFsnbmd0T2JqZWN0RXZlbnRzJ10sXG5cdG91dHB1dHM6IFtcblx0XHQnY2xpY2snLFxuXHRcdCdkYmxjbGljaycsXG5cdFx0J2NvbnRleHRtZW51Jyxcblx0XHQncG9pbnRlcnVwJyxcblx0XHQncG9pbnRlcmRvd24nLFxuXHRcdCdwb2ludGVyb3ZlcicsXG5cdFx0J3BvaW50ZXJvdXQnLFxuXHRcdCdwb2ludGVyZW50ZXInLFxuXHRcdCdwb2ludGVybGVhdmUnLFxuXHRcdCdwb2ludGVybW92ZScsXG5cdFx0J3BvaW50ZXJtaXNzZWQnLFxuXHRcdCdwb2ludGVyY2FuY2VsJyxcblx0XHQnd2hlZWwnLFxuXHRdLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE9iamVjdEV2ZW50cyhcblx0dGFyZ2V0OiAoKSA9PiBFbGVtZW50UmVmPE9iamVjdDNEPiB8IE9iamVjdDNEIHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0ZXZlbnRzOiB7XG5cdFx0W0sgaW4gKHR5cGVvZiBzdXBwb3J0ZWRFdmVudHMpW251bWJlcl1dPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50PikgPT4gdm9pZDtcblx0fSxcblx0eyBpbmplY3RvciB9OiB7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RPYmplY3RFdmVudHMsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG5cdFx0Y29uc3QgY2xlYW5VcHM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFJlZiA9IHJlc29sdmVSZWYodGFyZ2V0KCkpO1xuXHRcdFx0XHRpZiAoIXRhcmdldFJlZikgcmV0dXJuO1xuXG5cdFx0XHRcdE9iamVjdC5lbnRyaWVzKGV2ZW50cykuZm9yRWFjaCgoW2V2ZW50TmFtZSwgZXZlbnRIYW5kbGVyXSkgPT4ge1xuXHRcdFx0XHRcdGNsZWFuVXBzLnB1c2gocmVuZGVyZXIubGlzdGVuKHRhcmdldFJlZiwgZXZlbnROYW1lLCBldmVudEhhbmRsZXIpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRjbGVhblVwcy5mb3JFYWNoKChjbGVhblVwKSA9PiBjbGVhblVwKCkpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdGNsZWFuVXBzLmZvckVhY2goKGNsZWFuVXApID0+IGNsZWFuVXAoKSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gY2xlYW5VcHM7XG5cdH0pO1xufVxuIl19
@@ -1,5 +1,5 @@
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, CUSTOM_ELEMENTS_SCHEMA, contentChild, Renderer2 } 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';
@@ -2515,6 +2515,72 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
2515
2515
  }]
2516
2516
  }], ctorParameters: () => [] });
2517
2517
 
2518
+ class NgtSelection {
2519
+ constructor() {
2520
+ this.enabled = input(true, { alias: 'ngtSelection', transform: booleanAttribute });
2521
+ this.selection = signal([]);
2522
+ this.collection = this.selection.asReadonly();
2523
+ }
2524
+ select(...objects) {
2525
+ this.selection.update((prev) => [...prev, ...objects]);
2526
+ }
2527
+ unselect(...objects) {
2528
+ this.selection.update((prev) => prev.filter((selected) => !objects.includes(selected)));
2529
+ }
2530
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2531
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.3", type: NgtSelection, isStandalone: true, selector: "[ngtSelection]", inputs: { enabled: { classPropertyName: "enabled", publicName: "ngtSelection", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
2532
+ }
2533
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelection, decorators: [{
2534
+ type: Directive,
2535
+ args: [{ standalone: true, selector: '[ngtSelection]' }]
2536
+ }] });
2537
+ class NgtSelect {
2538
+ constructor() {
2539
+ this.enabled = input(false, { transform: booleanAttribute, alias: 'ngtSelect' });
2540
+ this.host = inject(ElementRef);
2541
+ const selection = inject(NgtSelection);
2542
+ const autoEffect = injectAutoEffect();
2543
+ afterNextRender(() => {
2544
+ autoEffect(() => {
2545
+ const host = this.host.nativeElement;
2546
+ if (!host)
2547
+ return;
2548
+ const localState = getLocalState(host);
2549
+ if (!localState)
2550
+ return;
2551
+ const enabled = this.enabled();
2552
+ if (!enabled)
2553
+ return;
2554
+ // ngt-mesh[ngtSelect]
2555
+ if (host.type === 'Mesh') {
2556
+ selection.select(host);
2557
+ return () => selection.unselect(host);
2558
+ }
2559
+ const [collection] = [untracked(selection.collection), localState.objects()];
2560
+ let changed = false;
2561
+ const current = [];
2562
+ host.traverse((child) => {
2563
+ child.type === 'Mesh' && current.push(child);
2564
+ if (collection.indexOf(child) === -1)
2565
+ changed = true;
2566
+ });
2567
+ if (!changed)
2568
+ return;
2569
+ selection.select(...current);
2570
+ return () => {
2571
+ selection.unselect(...current);
2572
+ };
2573
+ }, { allowSignalWrites: true });
2574
+ });
2575
+ }
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 }); }
2578
+ }
2579
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelect, decorators: [{
2580
+ type: Directive,
2581
+ args: [{ standalone: true, selector: 'ngt-group[ngtSelect], ngt-mesh[ngtSelect]' }]
2582
+ }], ctorParameters: () => [] });
2583
+
2518
2584
  var _a;
2519
2585
  const NGT_HTML_DOM_ELEMENT = new InjectionToken('NGT_HTML_DOM_ELEMENT');
2520
2586
  function provideHTMLDomElement(...args) {
@@ -2640,6 +2706,70 @@ _injectLoader.clear = (urls) => {
2640
2706
  };
2641
2707
  const injectLoader = _injectLoader;
2642
2708
 
2709
+ class NgtHexify {
2710
+ constructor() {
2711
+ this.document = inject(DOCUMENT, { optional: true });
2712
+ }
2713
+ /**
2714
+ * transforms a:
2715
+ * - hex string to a hex number
2716
+ * - rgb string to a hex number
2717
+ * - rgba string to a hex number
2718
+ * - css color string to a hex number
2719
+ *
2720
+ * always default to black if failed
2721
+ * @param value
2722
+ */
2723
+ transform(value) {
2724
+ if (value == null)
2725
+ return 0x000000;
2726
+ if (value.startsWith('#')) {
2727
+ return this.hexStringToNumber(value);
2728
+ }
2729
+ if (!this.ctx) {
2730
+ this.ctx = this.document?.createElement('canvas').getContext('2d');
2731
+ }
2732
+ if (!this.ctx)
2733
+ return 0x000000;
2734
+ this.ctx.fillStyle = value;
2735
+ const computedValue = this.ctx.fillStyle;
2736
+ if (computedValue.startsWith('#')) {
2737
+ return this.hexStringToNumber(computedValue);
2738
+ }
2739
+ if (!computedValue.startsWith('rgba'))
2740
+ return 0x000000;
2741
+ const regex = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/;
2742
+ const match = computedValue.match(regex);
2743
+ if (!match)
2744
+ return 0x000000;
2745
+ const r = parseInt(match[1], 10);
2746
+ const g = parseInt(match[2], 10);
2747
+ const b = parseInt(match[3], 10);
2748
+ const a = match[4] ? parseFloat(match[4]) : 1.0;
2749
+ // Convert the components to hex strings
2750
+ const hexR = this.componentToHex(r);
2751
+ const hexG = this.componentToHex(g);
2752
+ const hexB = this.componentToHex(b);
2753
+ const hexA = this.componentToHex(Math.round(a * 255));
2754
+ // Combine the hex components into a single hex string
2755
+ const hex = `#${hexR}${hexG}${hexB}${hexA}`;
2756
+ return this.hexStringToNumber(hex);
2757
+ }
2758
+ hexStringToNumber(hexString) {
2759
+ return parseInt(hexString.replace('#', ''), 16);
2760
+ }
2761
+ componentToHex(component) {
2762
+ const hex = component.toString(16);
2763
+ return hex.length === 1 ? '0' + hex : hex;
2764
+ }
2765
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2766
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, isStandalone: true, name: "hexify" }); }
2767
+ }
2768
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, decorators: [{
2769
+ type: Pipe,
2770
+ args: [{ name: 'hexify', pure: true, standalone: true }]
2771
+ }] });
2772
+
2643
2773
  function injectBeforeRender(cb, { priority = 0, injector } = {}) {
2644
2774
  return assertInjector(injectBeforeRender, injector, () => {
2645
2775
  const store = injectStore();
@@ -2867,6 +2997,68 @@ function resolveRef(ref) {
2867
2997
  return ref;
2868
2998
  }
2869
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
+ };
2870
3062
  function injectObjectEvents(target, events, { injector } = {}) {
2871
3063
  return assertInjector(injectObjectEvents, injector, () => {
2872
3064
  const autoEffect = injectAutoEffect();
@@ -2964,5 +3156,5 @@ const vector4 = createVectorComputed(Vector4);
2964
3156
  * Generated bundle index. Do not edit.
2965
3157
  */
2966
3158
 
2967
- export { HTML, NGT_STORE, NgtArgs, NgtCanvas, NgtHTML, NgtPortal, NgtPortalBeforeRender, NgtPortalContent, NgtRenderer, NgtRendererFactory, NgtRoutedScene, ROUTED_SCENE, addAfterEffect, addEffect, addTail, applyProps, attach, checkNeedsUpdate, checkUpdate, createAttachFunction, detach, dispose, extend, flushGlobalEffects, getLocalState, injectBeforeRender, injectCanvasRootInitializer, injectLoader, injectLoop, injectObjectEvents, injectStore, invalidateInstance, is, makeCameraInstance, makeDpr, makeId, makeObjectGraph, makeRendererInstance, merge, omit, pick, prepare, privateKeys, provideHTMLDomElement, provideNgtRenderer, provideStore, resolveRef, roots, signalStore, updateCamera, vector2, vector3, vector4 };
3159
+ export { HTML, NGT_STORE, NgtArgs, NgtCanvas, NgtHTML, NgtHexify, NgtObjectEvents, NgtObjectEventsHostDirective, NgtPortal, NgtPortalBeforeRender, NgtPortalContent, NgtRenderer, NgtRendererFactory, NgtRoutedScene, NgtSelect, NgtSelection, ROUTED_SCENE, addAfterEffect, addEffect, addTail, applyProps, attach, checkNeedsUpdate, checkUpdate, createAttachFunction, detach, dispose, extend, flushGlobalEffects, getLocalState, injectBeforeRender, injectCanvasRootInitializer, injectLoader, injectLoop, injectObjectEvents, injectStore, invalidateInstance, is, makeCameraInstance, makeDpr, makeId, makeObjectGraph, makeRendererInstance, merge, omit, pick, prepare, privateKeys, provideHTMLDomElement, provideNgtRenderer, provideStore, resolveRef, roots, signalStore, updateCamera, vector2, vector3, vector4 };
2968
3160
  //# sourceMappingURL=angular-three.mjs.map