angular-three 2.0.0-beta.286 → 2.0.0-beta.287
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 +3 -1
- package/esm2022/lib/directives/selection.mjs +86 -0
- package/esm2022/lib/pipes/hexify.mjs +67 -0
- package/esm2022/lib/utils/object-events.mjs +65 -2
- package/fesm2022/angular-three.mjs +239 -35
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/lib/directives/selection.d.ts +109 -0
- package/lib/pipes/hexify.d.ts +20 -0
- package/lib/utils/object-events.d.ts +25 -0
- package/package.json +1 -1
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,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jYW52YXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9hcmdzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvc2VsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2h0bWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5zdGFuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvb3AnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvaGV4aWZ5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BvcnRhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZW5kZXJlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb290cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZWQtc2NlbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYXBwbHktcHJvcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYXR0YWNoJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2JlZm9yZS1yZW5kZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvaXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvbWFrZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9vYmplY3QtZXZlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3BhcmFtZXRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvcmVzb2x2ZS1yZWYnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvc2lnbmFsLXN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3VwZGF0ZSc7XG5cbmV4cG9ydCB0eXBlICogZnJvbSAnLi9saWIvdGhyZWUtdHlwZXMnO1xuZXhwb3J0IHR5cGUgKiBmcm9tICcuL2xpYi90eXBlcyc7XG4iXX0=
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, Directive, inject, input, signal, untracked, viewChild, } from '@angular/core';
|
|
2
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
3
|
+
import { Group } from 'three';
|
|
4
|
+
import { getLocalState } from '../instance';
|
|
5
|
+
import { extend } from '../renderer';
|
|
6
|
+
import { NgtObjectEvents, NgtObjectEventsHostDirective } from '../utils/object-events';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../utils/object-events";
|
|
9
|
+
export class NgtSelection {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.enabled = input(true, { alias: 'ngtSelection', transform: booleanAttribute });
|
|
12
|
+
this.selection = signal([]);
|
|
13
|
+
this.collection = this.selection.asReadonly();
|
|
14
|
+
}
|
|
15
|
+
select(...objects) {
|
|
16
|
+
this.selection.update((prev) => [...prev, ...objects]);
|
|
17
|
+
}
|
|
18
|
+
unselect(...objects) {
|
|
19
|
+
this.selection.update((prev) => prev.filter((selected) => !objects.includes(selected)));
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
22
|
+
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 }); }
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelection, decorators: [{
|
|
25
|
+
type: Directive,
|
|
26
|
+
args: [{ standalone: true, selector: '[ngtSelection]' }]
|
|
27
|
+
}] });
|
|
28
|
+
export class NgtSelect {
|
|
29
|
+
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 });
|
|
35
|
+
const selection = inject(NgtSelection);
|
|
36
|
+
const autoEffect = injectAutoEffect();
|
|
37
|
+
afterNextRender(() => {
|
|
38
|
+
objectEvents.ngtObjectEvents.set(this.groupRef());
|
|
39
|
+
autoEffect(() => {
|
|
40
|
+
const group = this.groupRef().nativeElement;
|
|
41
|
+
const localState = getLocalState(group);
|
|
42
|
+
if (!localState)
|
|
43
|
+
return;
|
|
44
|
+
const enabled = this.enabled();
|
|
45
|
+
if (!enabled)
|
|
46
|
+
return;
|
|
47
|
+
const [collection] = [untracked(selection.collection), localState.objects()];
|
|
48
|
+
let changed = false;
|
|
49
|
+
const current = [];
|
|
50
|
+
group.traverse((child) => {
|
|
51
|
+
child.type === 'Mesh' && current.push(child);
|
|
52
|
+
if (collection.indexOf(child) === -1)
|
|
53
|
+
changed = true;
|
|
54
|
+
});
|
|
55
|
+
if (!changed)
|
|
56
|
+
return;
|
|
57
|
+
selection.select(...current);
|
|
58
|
+
return () => {
|
|
59
|
+
selection.unselect(...current);
|
|
60
|
+
};
|
|
61
|
+
}, { allowSignalWrites: true });
|
|
62
|
+
});
|
|
63
|
+
}
|
|
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 }); }
|
|
70
|
+
}
|
|
71
|
+
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
|
+
}]
|
|
85
|
+
}], ctorParameters: () => [] });
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBWSxNQUFNLE9BQU8sQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckMsT0FBTyxFQUFFLGVBQWUsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFHdkYsTUFBTSxPQUFPLFlBQVk7SUFEekI7UUFFQyxZQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUV0RSxjQUFTLEdBQUcsTUFBTSxDQUF5QyxFQUFFLENBQUMsQ0FBQztRQUN2RSxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQVN6QztJQVBBLE1BQU0sQ0FBQyxHQUFHLE9BQStDO1FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsUUFBUSxDQUFDLEdB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QkFBNEIsQ0FBQztvQkFDOUMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IEdyb3VwLCBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi9yZW5kZXJlcic7XG5pbXBvcnQgeyBOZ3RHcm91cCB9IGZyb20gJy4uL3RocmVlLXR5cGVzJztcbmltcG9ydCB7IE5ndE9iamVjdEV2ZW50cywgTmd0T2JqZWN0RXZlbnRzSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4uL3V0aWxzL29iamVjdC1ldmVudHMnO1xuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICdbbmd0U2VsZWN0aW9uXScgfSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3Rpb24ge1xuXHRlbmFibGVkID0gaW5wdXQodHJ1ZSwgeyBhbGlhczogJ25ndFNlbGVjdGlvbicsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuXHRwcml2YXRlIHNlbGVjdGlvbiA9IHNpZ25hbDxBcnJheTxFbGVtZW50UmVmPE9iamVjdDNEPiB8IE9iamVjdDNEPj4oW10pO1xuXHRjb2xsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uYXNSZWFkb25seSgpO1xuXG5cdHNlbGVjdCguLi5vYmplY3RzOiBBcnJheTxFbGVtZW50UmVmPE9iamVjdDNEPiB8IE9iamVjdDNEPikge1xuXHRcdHRoaXMuc2VsZWN0aW9uLnVwZGF0ZSgocHJldikgPT4gWy4uLnByZXYsIC4uLm9iamVjdHNdKTtcblx0fVxuXG5cdHVuc2VsZWN0KC4uLm9iamVjdHM6IEFycmF5PEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0Q+KSB7XG5cdFx0dGhpcy5zZWxlY3Rpb24udXBkYXRlKChwcmV2KSA9PiBwcmV2LmZpbHRlcigoc2VsZWN0ZWQpID0+ICFvYmplY3RzLmluY2x1ZGVzKHNlbGVjdGVkKSkpO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1zZWxlY3QnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgI2dyb3VwIFtwYXJhbWV0ZXJzXT1cIm9wdGlvbnMoKVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0aG9zdERpcmVjdGl2ZXM6IFtOZ3RPYmplY3RFdmVudHNIb3N0RGlyZWN0aXZlXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0U2VsZWN0IHtcblx0ZW5hYmxlZCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIFBhcnRpYWw8Tmd0R3JvdXA+KTtcblxuXHRncm91cFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2dyb3VwJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAgfSk7XG5cblx0XHRjb25zdCBvYmplY3RFdmVudHMgPSBpbmplY3QoTmd0T2JqZWN0RXZlbnRzLCB7IGhvc3Q6IHRydWUgfSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uID0gaW5qZWN0KE5ndFNlbGVjdGlvbik7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRvYmplY3RFdmVudHMubmd0T2JqZWN0RXZlbnRzLnNldCh0aGlzLmdyb3VwUmVmKCkpO1xuXG5cdFx0XHRhdXRvRWZmZWN0KFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwUmVmKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShncm91cCk7XG5cdFx0XHRcdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRcdFx0XHRjb25zdCBlbmFibGVkID0gdGhpcy5lbmFibGVkKCk7XG5cdFx0XHRcdFx0aWYgKCFlbmFibGVkKSByZXR1cm47XG5cblx0XHRcdFx0XHRjb25zdCBbY29sbGVjdGlvbl0gPSBbdW50cmFja2VkKHNlbGVjdGlvbi5jb2xsZWN0aW9uKSwgbG9jYWxTdGF0ZS5vYmplY3RzKCldO1xuXHRcdFx0XHRcdGxldCBjaGFuZ2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudDogT2JqZWN0M0RbXSA9IFtdO1xuXHRcdFx0XHRcdGdyb3VwLnRyYXZlcnNlKChjaGlsZCkgPT4ge1xuXHRcdFx0XHRcdFx0Y2hpbGQudHlwZSA9PT0gJ01lc2gnICYmIGN1cnJlbnQucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbi5pbmRleE9mKGNoaWxkKSA9PT0gLTEpIGNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKCFjaGFuZ2VkKSByZXR1cm47XG5cblx0XHRcdFx0XHRzZWxlY3Rpb24uc2VsZWN0KC4uLmN1cnJlbnQpO1xuXHRcdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24udW5zZWxlY3QoLi4uY3VycmVudCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl19
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL29iamVjdC1ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUVULE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxlQUFlO0lBa0IzQjtRQWpCQSxVQUFLLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQzVDLGFBQVEsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDL0MsZ0JBQVcsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDbEQsY0FBUyxHQUFHLE1BQU0sRUFBK0IsQ0FBQztRQUNsRCxnQkFBVyxHQUFHLE1BQU0sRUFBK0IsQ0FBQztRQUNwRCxnQkFBVyxHQUFHLE1BQU0sRUFBK0IsQ0FBQztRQUNwRCxlQUFVLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ25ELGlCQUFZLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ3JELGlCQUFZLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ3JELGdCQUFXLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ3BELGtCQUFhLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQ3BELGtCQUFhLEdBQUcsTUFBTSxFQUErQixDQUFDO1FBQ3RELFVBQUssR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFFNUMsZ0ZBQWdGO1FBQ2hGLG9CQUFlLEdBQUcsS0FBSyxFQUFzRCxDQUFDO1FBRzdFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVsQyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ3BCLGtCQUFrQixDQUNqQixJQUFJLENBQUMsZUFBZSxFQUNwQjtnQkFDQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDeEMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQzlDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNwRCxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQW9DLENBQUM7Z0JBQy9FLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBb0MsQ0FBQztnQkFDbkYsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFvQyxDQUFDO2dCQUNuRixVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQW9DLENBQUM7Z0JBQ2pGLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBb0MsQ0FBQztnQkFDckYsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFvQyxDQUFDO2dCQUNyRixXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQW9DLENBQUM7Z0JBQ25GLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN4RCxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQW9DLENBQUM7Z0JBQ3ZGLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBa0MsQ0FBQzthQUNyRSxFQUNELEVBQUUsUUFBUSxFQUFFLENBQ1osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0ExQ1csZUFBZTtrR0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQUQzQixTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUU7O0FBOEM5RCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMzQyxTQUFTLEVBQUUsZUFBZTtJQUMxQixNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUMzQixPQUFPLEVBQUU7UUFDUixPQUFPO1FBQ1AsVUFBVTtRQUNWLGFBQWE7UUFDYixXQUFXO1FBQ1gsYUFBYTtRQUNiLGFBQWE7UUFDYixZQUFZO1FBQ1osY0FBYztRQUNkLGNBQWM7UUFDZCxhQUFhO1FBQ2IsZUFBZTtRQUNmLGVBQWU7UUFDZixPQUFPO0tBQ1A7Q0FDRCxDQUFDO0FBRUYsTUFBTSxVQUFVLGtCQUFrQixDQUNqQyxNQUFnRSxFQUNoRSxNQUVDLEVBQ0QsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFMUMsT0FBTyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUN4RCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVuQyxNQUFNLFFBQVEsR0FBc0IsRUFBRSxDQUFDO1FBRXZDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFNBQVM7b0JBQUUsT0FBTztnQkFFdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFO29CQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLEdBQUcsRUFBRTtvQkFDWCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0RGVzdHJveVJlZixcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHRtb2RlbCxcblx0b3V0cHV0LFxuXHRSZW5kZXJlcjIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IHN1cHBvcnRlZEV2ZW50cyB9IGZyb20gJy4uL2RvbS9ldmVudHMnO1xuaW1wb3J0IHsgTmd0RG9tRXZlbnQsIE5ndFRocmVlRXZlbnQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyByZXNvbHZlUmVmIH0gZnJvbSAnLi9yZXNvbHZlLXJlZic7XG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlLCBzZWxlY3RvcjogJ1tuZ3RPYmplY3RFdmVudHNdJyB9KVxuZXhwb3J0IGNsYXNzIE5ndE9iamVjdEV2ZW50cyB7XG5cdGNsaWNrID0gb3V0cHV0PE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+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,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, CUSTOM_ELEMENTS_SCHEMA,
|
|
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';
|
|
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, 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, Group, 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,6 +2515,178 @@ 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
|
+
class NgtSelection {
|
|
2613
|
+
constructor() {
|
|
2614
|
+
this.enabled = input(true, { alias: 'ngtSelection', transform: booleanAttribute });
|
|
2615
|
+
this.selection = signal([]);
|
|
2616
|
+
this.collection = this.selection.asReadonly();
|
|
2617
|
+
}
|
|
2618
|
+
select(...objects) {
|
|
2619
|
+
this.selection.update((prev) => [...prev, ...objects]);
|
|
2620
|
+
}
|
|
2621
|
+
unselect(...objects) {
|
|
2622
|
+
this.selection.update((prev) => prev.filter((selected) => !objects.includes(selected)));
|
|
2623
|
+
}
|
|
2624
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2625
|
+
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 }); }
|
|
2626
|
+
}
|
|
2627
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtSelection, decorators: [{
|
|
2628
|
+
type: Directive,
|
|
2629
|
+
args: [{ standalone: true, selector: '[ngtSelection]' }]
|
|
2630
|
+
}] });
|
|
2631
|
+
class NgtSelect {
|
|
2632
|
+
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 });
|
|
2638
|
+
const selection = inject(NgtSelection);
|
|
2639
|
+
const autoEffect = injectAutoEffect();
|
|
2640
|
+
afterNextRender(() => {
|
|
2641
|
+
objectEvents.ngtObjectEvents.set(this.groupRef());
|
|
2642
|
+
autoEffect(() => {
|
|
2643
|
+
const group = this.groupRef().nativeElement;
|
|
2644
|
+
const localState = getLocalState(group);
|
|
2645
|
+
if (!localState)
|
|
2646
|
+
return;
|
|
2647
|
+
const enabled = this.enabled();
|
|
2648
|
+
if (!enabled)
|
|
2649
|
+
return;
|
|
2650
|
+
const [collection] = [untracked(selection.collection), localState.objects()];
|
|
2651
|
+
let changed = false;
|
|
2652
|
+
const current = [];
|
|
2653
|
+
group.traverse((child) => {
|
|
2654
|
+
child.type === 'Mesh' && current.push(child);
|
|
2655
|
+
if (collection.indexOf(child) === -1)
|
|
2656
|
+
changed = true;
|
|
2657
|
+
});
|
|
2658
|
+
if (!changed)
|
|
2659
|
+
return;
|
|
2660
|
+
selection.select(...current);
|
|
2661
|
+
return () => {
|
|
2662
|
+
selection.unselect(...current);
|
|
2663
|
+
};
|
|
2664
|
+
}, { allowSignalWrites: true });
|
|
2665
|
+
});
|
|
2666
|
+
}
|
|
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 }); }
|
|
2673
|
+
}
|
|
2674
|
+
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
|
+
}]
|
|
2688
|
+
}], ctorParameters: () => [] });
|
|
2689
|
+
|
|
2518
2690
|
var _a;
|
|
2519
2691
|
const NGT_HTML_DOM_ELEMENT = new InjectionToken('NGT_HTML_DOM_ELEMENT');
|
|
2520
2692
|
function provideHTMLDomElement(...args) {
|
|
@@ -2640,6 +2812,70 @@ _injectLoader.clear = (urls) => {
|
|
|
2640
2812
|
};
|
|
2641
2813
|
const injectLoader = _injectLoader;
|
|
2642
2814
|
|
|
2815
|
+
class NgtHexify {
|
|
2816
|
+
constructor() {
|
|
2817
|
+
this.document = inject(DOCUMENT, { optional: true });
|
|
2818
|
+
}
|
|
2819
|
+
/**
|
|
2820
|
+
* transforms a:
|
|
2821
|
+
* - hex string to a hex number
|
|
2822
|
+
* - rgb string to a hex number
|
|
2823
|
+
* - rgba string to a hex number
|
|
2824
|
+
* - css color string to a hex number
|
|
2825
|
+
*
|
|
2826
|
+
* always default to black if failed
|
|
2827
|
+
* @param value
|
|
2828
|
+
*/
|
|
2829
|
+
transform(value) {
|
|
2830
|
+
if (value == null)
|
|
2831
|
+
return 0x000000;
|
|
2832
|
+
if (value.startsWith('#')) {
|
|
2833
|
+
return this.hexStringToNumber(value);
|
|
2834
|
+
}
|
|
2835
|
+
if (!this.ctx) {
|
|
2836
|
+
this.ctx = this.document?.createElement('canvas').getContext('2d');
|
|
2837
|
+
}
|
|
2838
|
+
if (!this.ctx)
|
|
2839
|
+
return 0x000000;
|
|
2840
|
+
this.ctx.fillStyle = value;
|
|
2841
|
+
const computedValue = this.ctx.fillStyle;
|
|
2842
|
+
if (computedValue.startsWith('#')) {
|
|
2843
|
+
return this.hexStringToNumber(computedValue);
|
|
2844
|
+
}
|
|
2845
|
+
if (!computedValue.startsWith('rgba'))
|
|
2846
|
+
return 0x000000;
|
|
2847
|
+
const regex = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/;
|
|
2848
|
+
const match = computedValue.match(regex);
|
|
2849
|
+
if (!match)
|
|
2850
|
+
return 0x000000;
|
|
2851
|
+
const r = parseInt(match[1], 10);
|
|
2852
|
+
const g = parseInt(match[2], 10);
|
|
2853
|
+
const b = parseInt(match[3], 10);
|
|
2854
|
+
const a = match[4] ? parseFloat(match[4]) : 1.0;
|
|
2855
|
+
// Convert the components to hex strings
|
|
2856
|
+
const hexR = this.componentToHex(r);
|
|
2857
|
+
const hexG = this.componentToHex(g);
|
|
2858
|
+
const hexB = this.componentToHex(b);
|
|
2859
|
+
const hexA = this.componentToHex(Math.round(a * 255));
|
|
2860
|
+
// Combine the hex components into a single hex string
|
|
2861
|
+
const hex = `#${hexR}${hexG}${hexB}${hexA}`;
|
|
2862
|
+
return this.hexStringToNumber(hex);
|
|
2863
|
+
}
|
|
2864
|
+
hexStringToNumber(hexString) {
|
|
2865
|
+
return parseInt(hexString.replace('#', ''), 16);
|
|
2866
|
+
}
|
|
2867
|
+
componentToHex(component) {
|
|
2868
|
+
const hex = component.toString(16);
|
|
2869
|
+
return hex.length === 1 ? '0' + hex : hex;
|
|
2870
|
+
}
|
|
2871
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2872
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, isStandalone: true, name: "hexify" }); }
|
|
2873
|
+
}
|
|
2874
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: NgtHexify, decorators: [{
|
|
2875
|
+
type: Pipe,
|
|
2876
|
+
args: [{ name: 'hexify', pure: true, standalone: true }]
|
|
2877
|
+
}] });
|
|
2878
|
+
|
|
2643
2879
|
function injectBeforeRender(cb, { priority = 0, injector } = {}) {
|
|
2644
2880
|
return assertInjector(injectBeforeRender, injector, () => {
|
|
2645
2881
|
const store = injectStore();
|
|
@@ -2860,38 +3096,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImpor
|
|
|
2860
3096
|
}]
|
|
2861
3097
|
}], ctorParameters: () => [] });
|
|
2862
3098
|
|
|
2863
|
-
function resolveRef(ref) {
|
|
2864
|
-
if (is.ref(ref)) {
|
|
2865
|
-
return ref.nativeElement;
|
|
2866
|
-
}
|
|
2867
|
-
return ref;
|
|
2868
|
-
}
|
|
2869
|
-
|
|
2870
|
-
function injectObjectEvents(target, events, { injector } = {}) {
|
|
2871
|
-
return assertInjector(injectObjectEvents, injector, () => {
|
|
2872
|
-
const autoEffect = injectAutoEffect();
|
|
2873
|
-
const renderer = inject(Renderer2);
|
|
2874
|
-
const cleanUps = [];
|
|
2875
|
-
afterNextRender(() => {
|
|
2876
|
-
autoEffect(() => {
|
|
2877
|
-
const targetRef = resolveRef(target());
|
|
2878
|
-
if (!targetRef)
|
|
2879
|
-
return;
|
|
2880
|
-
Object.entries(events).forEach(([eventName, eventHandler]) => {
|
|
2881
|
-
cleanUps.push(renderer.listen(targetRef, eventName, eventHandler));
|
|
2882
|
-
});
|
|
2883
|
-
return () => {
|
|
2884
|
-
cleanUps.forEach((cleanUp) => cleanUp());
|
|
2885
|
-
};
|
|
2886
|
-
});
|
|
2887
|
-
});
|
|
2888
|
-
inject(DestroyRef).onDestroy(() => {
|
|
2889
|
-
cleanUps.forEach((cleanUp) => cleanUp());
|
|
2890
|
-
});
|
|
2891
|
-
return cleanUps;
|
|
2892
|
-
});
|
|
2893
|
-
}
|
|
2894
|
-
|
|
2895
3099
|
function omit(objFn, keysToOmit) {
|
|
2896
3100
|
return computed(() => {
|
|
2897
3101
|
const obj = objFn();
|
|
@@ -2964,5 +3168,5 @@ const vector4 = createVectorComputed(Vector4);
|
|
|
2964
3168
|
* Generated bundle index. Do not edit.
|
|
2965
3169
|
*/
|
|
2966
3170
|
|
|
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 };
|
|
3171
|
+
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
3172
|
//# sourceMappingURL=angular-three.mjs.map
|