ngx-vflow 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ChangeDetectionStrategy, Component, computed, input, viewChild, } from '@angular/core';
|
|
3
|
-
import { Microtask } from '../../decorators/microtask.decorator';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, NgZone, computed, inject, input, viewChild, } from '@angular/core';
|
|
4
2
|
import { NgTemplateOutlet } from '@angular/common';
|
|
3
|
+
import { resizable } from '../../utils/resizable';
|
|
4
|
+
import { startWith, tap } from 'rxjs';
|
|
5
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export class EdgeLabelComponent {
|
|
7
8
|
constructor() {
|
|
9
|
+
this.zone = inject(NgZone);
|
|
10
|
+
this.destroyRef = inject(DestroyRef);
|
|
8
11
|
// TODO: too many inputs
|
|
9
12
|
this.model = input.required();
|
|
10
13
|
this.edgeModel = input.required();
|
|
@@ -29,9 +32,13 @@ export class EdgeLabelComponent {
|
|
|
29
32
|
// this is a fix for visual artifact in chrome that for some reason adresses only for edge label.
|
|
30
33
|
// the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject
|
|
31
34
|
const MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME = 2;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
resizable([this.edgeLabelWrapperRef().nativeElement], this.zone)
|
|
36
|
+
.pipe(startWith(null), tap(() => {
|
|
37
|
+
const width = this.edgeLabelWrapperRef().nativeElement.clientWidth + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME;
|
|
38
|
+
const height = this.edgeLabelWrapperRef().nativeElement.clientHeight + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME;
|
|
39
|
+
this.model().size.set({ width, height });
|
|
40
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
41
|
+
.subscribe();
|
|
35
42
|
}
|
|
36
43
|
getLabelContext() {
|
|
37
44
|
return {
|
|
@@ -44,11 +51,8 @@ export class EdgeLabelComponent {
|
|
|
44
51
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EdgeLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45
52
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: EdgeLabelComponent, isStandalone: true, selector: "g[edgeLabel]", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, edgeModel: { classPropertyName: "edgeModel", publicName: "edgeModel", isSignal: true, isRequired: true, transformFunction: null }, point: { classPropertyName: "point", publicName: "point", isSignal: true, isRequired: false, transformFunction: null }, htmlTemplate: { classPropertyName: "htmlTemplate", publicName: "htmlTemplate", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "edgeLabelWrapperRef", first: true, predicate: ["edgeLabelWrapper"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (model().edgeLabel.type === 'html-template' && htmlTemplate()) {\n @if (htmlTemplate(); as htmlTemplate) {\n <svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model().size().width\"\n [attr.height]=\"model().size().height\">\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\" />\n </div>\n </svg:foreignObject>\n }\n}\n", styles: [".edge-label-wrapper{width:max-content;margin-top:1px;margin-left:1px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
46
53
|
}
|
|
47
|
-
__decorate([
|
|
48
|
-
Microtask
|
|
49
|
-
], EdgeLabelComponent.prototype, "ngAfterViewInit", null);
|
|
50
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EdgeLabelComponent, decorators: [{
|
|
51
55
|
type: Component,
|
|
52
56
|
args: [{ standalone: true, selector: 'g[edgeLabel]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], template: "@if (model().edgeLabel.type === 'html-template' && htmlTemplate()) {\n @if (htmlTemplate(); as htmlTemplate) {\n <svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model().size().width\"\n [attr.height]=\"model().size().height\">\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\" />\n </div>\n </svg:foreignObject>\n }\n}\n", styles: [".edge-label-wrapper{width:max-content;margin-top:1px;margin-left:1px}\n"] }]
|
|
53
|
-
}]
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
}] });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1sYWJlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9lZGdlLWxhYmVsL2VkZ2UtbGFiZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvZWRnZS1sYWJlbC9lZGdlLWxhYmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUF1QmhFLE1BQU0sT0FBTyxrQkFBa0I7SUFyQi9CO1FBc0JVLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4Qyx3QkFBd0I7UUFDakIsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWtCLENBQUM7UUFFekMsY0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWEsQ0FBQztRQUV4QyxVQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5QixpQkFBWSxHQUFHLEtBQUssRUFBb0IsQ0FBQztRQUV6Qyx3QkFBbUIsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QixrQkFBa0IsQ0FBQyxDQUFDO1FBRWhHOzs7O1dBSUc7UUFDTyxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTNCLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTlDLE9BQU87Z0JBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUM7Z0JBQ3RCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDO2FBQ3hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztLQTZCSjtJQTNCUSxlQUFlO1FBQ3BCLGlHQUFpRztRQUNqRyxnR0FBZ0c7UUFDaEcsTUFBTSxtQ0FBbUMsR0FBRyxDQUFDLENBQUM7UUFFOUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQzthQUM3RCxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNmLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLG1DQUFtQyxDQUFDO1lBQ3pHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsbUNBQW1DLENBQUM7WUFFM0csSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3BDO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVTLGVBQWU7UUFDdkIsT0FBTztZQUNMLFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUk7Z0JBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUzthQUM5QjtTQUNGLENBQUM7SUFDSixDQUFDOytHQXpEVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiw0dEJDekMvQiwyZkFhQSxpSUQwQlksZ0JBQWdCOzs0RkFFZixrQkFBa0I7a0JBckI5QixTQUFTO2lDQUNJLElBQUksWUFDTixjQUFjLG1CQWdCUCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLFxuICBFbGVtZW50UmVmLFxuICBOZ1pvbmUsXG4gIFRlbXBsYXRlUmVmLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVkZ2VMYWJlbE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkZ2UtbGFiZWwubW9kZWwnO1xuaW1wb3J0IHsgRWRnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkZ2UubW9kZWwnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyByZXNpemFibGUgfSBmcm9tICcuLi8uLi91dGlscy9yZXNpemFibGUnO1xuaW1wb3J0IHsgc3RhcnRXaXRoLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnZ1tlZGdlTGFiZWxdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkZ2UtbGFiZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuZWRnZS1sYWJlbC13cmFwcGVyIHtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuXG4gICAgICAgIC8qXG4gICAgICAgIHRoaXMgaXMgYSBmaXggZm9yIGJ1ZyBpbiBjaHJvbWUsIGZvciBzb21lIHJlYXNvbiBpZiB0aGUgZGl2IGZ1bGx5IG1hdGNoZXMgdGhlIHNpemVcbiAgICAgICAgb2YgZm9yZWlnbk9iamVjdCB0aGVyZSBhcmUgb2NjdXJzIHNvbWUgdmlzdWFsIGFydGlmYWN0cyBhcm91bmQgdGhpcyBkaXZcbiAgICAgICAqL1xuICAgICAgICBtYXJnaW4tdG9wOiAxcHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgRWRnZUxhYmVsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLy8gVE9ETzogdG9vIG1hbnkgaW5wdXRzXG4gIHB1YmxpYyBtb2RlbCA9IGlucHV0LnJlcXVpcmVkPEVkZ2VMYWJlbE1vZGVsPigpO1xuXG4gIHB1YmxpYyBlZGdlTW9kZWwgPSBpbnB1dC5yZXF1aXJlZDxFZGdlTW9kZWw+KCk7XG5cbiAgcHVibGljIHBvaW50ID0gaW5wdXQoeyB4OiAwLCB5OiAwIH0pO1xuXG4gIHB1YmxpYyBodG1sVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuXG4gIHB1YmxpYyBlZGdlTGFiZWxXcmFwcGVyUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignZWRnZUxhYmVsV3JhcHBlcicpO1xuXG4gIC8qKlxuICAgKiBDZW50ZXJlZCBwb2ludCBvZiBsYWJlbFxuICAgKlxuICAgKiBUT0RPOiBtYXliZSBwdXQgaXQgaW50byBFZGdlTGFiZWxNb2RlbFxuICAgKi9cbiAgcHJvdGVjdGVkIGVkZ2VMYWJlbFBvaW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5wb2ludCgpO1xuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLm1vZGVsKCkuc2l6ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHBvaW50LnggLSB3aWR0aCAvIDIsXG4gICAgICB5OiBwb2ludC55IC0gaGVpZ2h0IC8gMixcbiAgICB9O1xuICB9KTtcblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIHRoaXMgaXMgYSBmaXggZm9yIHZpc3VhbCBhcnRpZmFjdCBpbiBjaHJvbWUgdGhhdCBmb3Igc29tZSByZWFzb24gYWRyZXNzZXMgb25seSBmb3IgZWRnZSBsYWJlbC5cbiAgICAvLyB0aGUgYnVnIHJlcHJvZHVjZXMgaWYgZWRnZUxhYmVsV3JhcHBlclJlZiBzaXplIGZ1bGx5IG1hdGNoZWQgdGhlIHNpemUgb2YgcGFyZW50IGZvcmVpZ25PYmplY3RcbiAgICBjb25zdCBNQUdJQ19WQUxVRV9UT19GSVhfR0xJVENIX0lOX0NIUk9NRSA9IDI7XG5cbiAgICByZXNpemFibGUoW3RoaXMuZWRnZUxhYmVsV3JhcHBlclJlZigpLm5hdGl2ZUVsZW1lbnRdLCB0aGlzLnpvbmUpXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5lZGdlTGFiZWxXcmFwcGVyUmVmKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCArIE1BR0lDX1ZBTFVFX1RPX0ZJWF9HTElUQ0hfSU5fQ0hST01FO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZWRnZUxhYmVsV3JhcHBlclJlZigpLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgTUFHSUNfVkFMVUVfVE9fRklYX0dMSVRDSF9JTl9DSFJPTUU7XG5cbiAgICAgICAgICB0aGlzLm1vZGVsKCkuc2l6ZS5zZXQoeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGFiZWxDb250ZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgZWRnZTogdGhpcy5lZGdlTW9kZWwoKS5lZGdlLFxuICAgICAgICBsYWJlbDogdGhpcy5tb2RlbCgpLmVkZ2VMYWJlbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIiwiQGlmIChtb2RlbCgpLmVkZ2VMYWJlbC50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgJiYgaHRtbFRlbXBsYXRlKCkpIHtcbiAgQGlmIChodG1sVGVtcGxhdGUoKTsgYXMgaHRtbFRlbXBsYXRlKSB7XG4gICAgPHN2Zzpmb3JlaWduT2JqZWN0XG4gICAgICBbYXR0ci54XT1cImVkZ2VMYWJlbFBvaW50KCkueFwiXG4gICAgICBbYXR0ci55XT1cImVkZ2VMYWJlbFBvaW50KCkueVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJtb2RlbCgpLnNpemUoKS53aWR0aFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwoKS5zaXplKCkuaGVpZ2h0XCI+XG4gICAgICA8ZGl2ICNlZGdlTGFiZWxXcmFwcGVyIGNsYXNzPVwiZWRnZS1sYWJlbC13cmFwcGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJodG1sVGVtcGxhdGU7IGNvbnRleHQ6IGdldExhYmVsQ29udGV4dCgpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG4gIH1cbn1cbiJdfQ==
|
package/fesm2022/ngx-vflow.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, computed, Injectable, inject, ElementRef, Directive, effect, untracked, TemplateRef, DestroyRef, EventEmitter, OutputEmitterRef, input, viewChild, Component, ChangeDetectionStrategy, Injector, output, HostListener, runInInjectionContext,
|
|
2
|
+
import { signal, computed, Injectable, inject, ElementRef, Directive, effect, untracked, TemplateRef, DestroyRef, EventEmitter, OutputEmitterRef, input, NgZone, viewChild, Component, ChangeDetectionStrategy, Injector, output, HostListener, runInInjectionContext, contentChild, Input, forwardRef } from '@angular/core';
|
|
3
3
|
import { select } from 'd3-selection';
|
|
4
4
|
import { zoomIdentity, zoom } from 'd3-zoom';
|
|
5
5
|
import { switchMap, merge, fromEvent, tap, Subject, Observable, skip, map, pairwise, filter, distinctUntilChanged, observeOn, asyncScheduler, zip, animationFrameScheduler, share, startWith, of } from 'rxjs';
|
|
@@ -1738,8 +1738,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1738
1738
|
type: Injectable
|
|
1739
1739
|
}], propDecorators: { addToolbar: [], removeToolbar: [] } });
|
|
1740
1740
|
|
|
1741
|
+
function resizable(elems, zone) {
|
|
1742
|
+
return new Observable((subscriber) => {
|
|
1743
|
+
const ro = new ResizeObserver((entries) => {
|
|
1744
|
+
zone.run(() => subscriber.next(entries));
|
|
1745
|
+
});
|
|
1746
|
+
elems.forEach((e) => ro.observe(e));
|
|
1747
|
+
return () => ro.disconnect();
|
|
1748
|
+
});
|
|
1749
|
+
}
|
|
1750
|
+
|
|
1741
1751
|
class EdgeLabelComponent {
|
|
1742
1752
|
constructor() {
|
|
1753
|
+
this.zone = inject(NgZone);
|
|
1754
|
+
this.destroyRef = inject(DestroyRef);
|
|
1743
1755
|
// TODO: too many inputs
|
|
1744
1756
|
this.model = input.required();
|
|
1745
1757
|
this.edgeModel = input.required();
|
|
@@ -1764,9 +1776,13 @@ class EdgeLabelComponent {
|
|
|
1764
1776
|
// this is a fix for visual artifact in chrome that for some reason adresses only for edge label.
|
|
1765
1777
|
// the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject
|
|
1766
1778
|
const MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME = 2;
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1779
|
+
resizable([this.edgeLabelWrapperRef().nativeElement], this.zone)
|
|
1780
|
+
.pipe(startWith(null), tap(() => {
|
|
1781
|
+
const width = this.edgeLabelWrapperRef().nativeElement.clientWidth + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME;
|
|
1782
|
+
const height = this.edgeLabelWrapperRef().nativeElement.clientHeight + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME;
|
|
1783
|
+
this.model().size.set({ width, height });
|
|
1784
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
1785
|
+
.subscribe();
|
|
1770
1786
|
}
|
|
1771
1787
|
getLabelContext() {
|
|
1772
1788
|
return {
|
|
@@ -1779,13 +1795,10 @@ class EdgeLabelComponent {
|
|
|
1779
1795
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EdgeLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1780
1796
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: EdgeLabelComponent, isStandalone: true, selector: "g[edgeLabel]", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, edgeModel: { classPropertyName: "edgeModel", publicName: "edgeModel", isSignal: true, isRequired: true, transformFunction: null }, point: { classPropertyName: "point", publicName: "point", isSignal: true, isRequired: false, transformFunction: null }, htmlTemplate: { classPropertyName: "htmlTemplate", publicName: "htmlTemplate", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "edgeLabelWrapperRef", first: true, predicate: ["edgeLabelWrapper"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (model().edgeLabel.type === 'html-template' && htmlTemplate()) {\n @if (htmlTemplate(); as htmlTemplate) {\n <svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model().size().width\"\n [attr.height]=\"model().size().height\">\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\" />\n </div>\n </svg:foreignObject>\n }\n}\n", styles: [".edge-label-wrapper{width:max-content;margin-top:1px;margin-left:1px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1781
1797
|
}
|
|
1782
|
-
__decorate([
|
|
1783
|
-
Microtask
|
|
1784
|
-
], EdgeLabelComponent.prototype, "ngAfterViewInit", null);
|
|
1785
1798
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EdgeLabelComponent, decorators: [{
|
|
1786
1799
|
type: Component,
|
|
1787
1800
|
args: [{ standalone: true, selector: 'g[edgeLabel]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], template: "@if (model().edgeLabel.type === 'html-template' && htmlTemplate()) {\n @if (htmlTemplate(); as htmlTemplate) {\n <svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model().size().width\"\n [attr.height]=\"model().size().height\">\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\" />\n </div>\n </svg:foreignObject>\n }\n}\n", styles: [".edge-label-wrapper{width:max-content;margin-top:1px;margin-left:1px}\n"] }]
|
|
1788
|
-
}]
|
|
1801
|
+
}] });
|
|
1789
1802
|
|
|
1790
1803
|
class EdgeComponent {
|
|
1791
1804
|
constructor() {
|
|
@@ -2491,16 +2504,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2491
2504
|
args: [{ standalone: true, selector: 'handle', changeDetection: ChangeDetectionStrategy.OnPush, template: "" }]
|
|
2492
2505
|
}], propDecorators: { ngOnInit: [] } });
|
|
2493
2506
|
|
|
2494
|
-
function resizable(elems, zone) {
|
|
2495
|
-
return new Observable((subscriber) => {
|
|
2496
|
-
const ro = new ResizeObserver((entries) => {
|
|
2497
|
-
zone.run(() => subscriber.next(entries));
|
|
2498
|
-
});
|
|
2499
|
-
elems.forEach((e) => ro.observe(e));
|
|
2500
|
-
return () => ro.disconnect();
|
|
2501
|
-
});
|
|
2502
|
-
}
|
|
2503
|
-
|
|
2504
2507
|
class NodeHandlesControllerDirective {
|
|
2505
2508
|
constructor() {
|
|
2506
2509
|
this.nodeAccessor = inject(NodeAccessorService);
|