@dereekb/dbx-web 12.6.17 → 12.6.18
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,4 +1,4 @@
|
|
|
1
|
-
import { Component, computed } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, viewChild } from '@angular/core';
|
|
2
2
|
import { AbstractDbxSegueAnchorDirective } from '../../layout/anchor/anchor.segue.directive';
|
|
3
3
|
import { UIRouterModule } from '@uirouter/angular';
|
|
4
4
|
import { DbxInjectionComponent } from '@dereekb/dbx-core';
|
|
@@ -9,15 +9,68 @@ import * as i1 from "@uirouter/angular";
|
|
|
9
9
|
* SegueAnchor implementation for UIRouter.
|
|
10
10
|
*/
|
|
11
11
|
export class DbxUIRouterSegueAnchorComponent extends AbstractDbxSegueAnchorDirective {
|
|
12
|
+
_cleanupClickOverride = null;
|
|
12
13
|
_parentAnchorSignal = toSignal(this.parent.anchor$, { initialValue: undefined });
|
|
14
|
+
anchorElement = viewChild.required('anchor', { read: ElementRef });
|
|
15
|
+
injectionElement = viewChild.required('injection', { read: ElementRef });
|
|
16
|
+
anchorDisabledSignal = computed(() => this.anchorSignal()?.disabled ?? false);
|
|
17
|
+
/**
|
|
18
|
+
* This effect exists to solve the issue of an injected element that utilizes event.stopPropogation() and doesn't also call event.preventDefault().
|
|
19
|
+
*
|
|
20
|
+
* We didn't want to use css's pointer-events: none as that would disable the Angular Material button effects.
|
|
21
|
+
*
|
|
22
|
+
* For example, dbx-button would call event.stopPropagation() on click, which would prevent the uiSref from being triggered, but the default behavior
|
|
23
|
+
* of the anchor element would still be triggered, causing the browser to load/reload the page at the given href instead of navigating to the new state using uiSref.
|
|
24
|
+
*
|
|
25
|
+
* NOTE: Those nested event listeners are still ultimately triggered.
|
|
26
|
+
*/
|
|
27
|
+
_overrideClickElementEffect = effect(() => {
|
|
28
|
+
const anchorElement = this.anchorElement();
|
|
29
|
+
const injectionElement = this.injectionElement();
|
|
30
|
+
const anchorDisabled = this.anchorDisabledSignal();
|
|
31
|
+
if (injectionElement) {
|
|
32
|
+
// cleanup/remove the previous/existing click function
|
|
33
|
+
if (this._cleanupClickOverride) {
|
|
34
|
+
this._cleanupClickOverride();
|
|
35
|
+
}
|
|
36
|
+
if (!anchorDisabled) {
|
|
37
|
+
const clickOverride = (event) => {
|
|
38
|
+
// Allow ctrl+click, cmd+click, shift+click, and middle-click for new tab/window
|
|
39
|
+
// Don't preventDefault or stopPropagation - let browser handle it naturally
|
|
40
|
+
if (event.ctrlKey || event.metaKey || event.shiftKey || event.button === 1) {
|
|
41
|
+
return; // Browser will open in new tab/window
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// otherwise, also trigger a click on the uiSref anchor element
|
|
45
|
+
anchorElement?.nativeElement.click();
|
|
46
|
+
// Prevents the default behavior of the anchor element's href from being triggered
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
event.stopPropagation();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
this._cleanupClickOverride = () => {
|
|
52
|
+
injectionElement.nativeElement.removeEventListener('click', clickOverride);
|
|
53
|
+
delete this._cleanupClickOverride;
|
|
54
|
+
};
|
|
55
|
+
injectionElement.nativeElement.addEventListener('click', clickOverride, {
|
|
56
|
+
capture: true // Use capture to ensure this event listener is called before any nested child's event listeners
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
13
61
|
uiSrefSignal = computed(() => (this._parentAnchorSignal()?.ref ?? ''));
|
|
14
62
|
uiParamsSignal = computed(() => this._parentAnchorSignal()?.refParams);
|
|
15
63
|
uiOptionsSignal = computed(() => this._parentAnchorSignal()?.refOptions ?? {});
|
|
64
|
+
ngOnDestroy() {
|
|
65
|
+
if (this._cleanupClickOverride) {
|
|
66
|
+
this._cleanupClickOverride();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
16
69
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxUIRouterSegueAnchorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
17
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
70
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: DbxUIRouterSegueAnchorComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "anchorElement", first: true, predicate: ["anchor"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "injectionElement", first: true, predicate: ["injection"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<a class=\"dbx-anchor-a dbx-anchor-sref\" #anchor [attr.target]=\"targetSignal()\" [uiSref]=\"uiSrefSignal()\" [uiParams]=\"uiParamsSignal()\" [uiOptions]=\"uiOptionsSignal()\" uiSrefActive=\"dbx-anchor-active\" uiSrefActiveEq=\"dbx-anchor-active-eq\">\n <dbx-injection #injection [template]=\"templateConfigSignal()\"></dbx-injection>\n</a>\n", dependencies: [{ kind: "ngmodule", type: UIRouterModule }, { kind: "directive", type: i1.UISref, selector: "[uiSref]", inputs: ["uiSref", "uiParams", "uiOptions"], exportAs: ["uiSref"] }, { kind: "directive", type: i1.AnchorUISref, selector: "a[uiSref]" }, { kind: "directive", type: i1.UISrefActive, selector: "[uiSrefActive],[uiSrefActiveEq]", inputs: ["uiSrefActive", "uiSrefActiveEq"] }, { kind: "component", type: DbxInjectionComponent, selector: "dbx-injection, [dbxInjection], [dbx-injection]", inputs: ["config", "template"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
18
71
|
}
|
|
19
72
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxUIRouterSegueAnchorComponent, decorators: [{
|
|
20
73
|
type: Component,
|
|
21
|
-
args: [{ imports: [UIRouterModule, DbxInjectionComponent], standalone: true, template: "<a class=\"dbx-anchor-a dbx-anchor-sref\" [attr.target]=\"targetSignal()\" [uiSref]=\"uiSrefSignal()\" [uiParams]=\"uiParamsSignal()\" [uiOptions]=\"uiOptionsSignal()\" uiSrefActive=\"dbx-anchor-active\" uiSrefActiveEq=\"dbx-anchor-active-eq\">\n <dbx-injection [template]=\"templateConfigSignal()\"></dbx-injection>\n</a>\n" }]
|
|
74
|
+
args: [{ imports: [UIRouterModule, DbxInjectionComponent], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<a class=\"dbx-anchor-a dbx-anchor-sref\" #anchor [attr.target]=\"targetSignal()\" [uiSref]=\"uiSrefSignal()\" [uiParams]=\"uiParamsSignal()\" [uiOptions]=\"uiOptionsSignal()\" uiSrefActive=\"dbx-anchor-active\" uiSrefActiveEq=\"dbx-anchor-active-eq\">\n <dbx-injection #injection [template]=\"templateConfigSignal()\"></dbx-injection>\n</a>\n" }]
|
|
22
75
|
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9yb3V0ZXIvcHJvdmlkZXIvdWlyb3V0ZXIvYW5jaG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9yb3V0ZXIvcHJvdmlkZXIvdWlyb3V0ZXIvYW5jaG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdGLE9BQU8sRUFBdUMsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFHdEQ7O0dBRUc7QUFPSCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsK0JBQStCO0lBQzFFLHFCQUFxQixHQUFzQixJQUFJLENBQUM7SUFFdkMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFekYsYUFBYSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWtDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQWtDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzFHLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBRXZGOzs7Ozs7Ozs7T0FTRztJQUNnQiwyQkFBMkIsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQzNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2pELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRW5ELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixzREFBc0Q7WUFDdEQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsQ0FBQztZQUVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7b0JBQzFDLGdGQUFnRjtvQkFDaEYsNEVBQTRFO29CQUM1RSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQzNFLE9BQU8sQ0FBQyxzQ0FBc0M7b0JBQ2hELENBQUM7eUJBQU0sQ0FBQzt3QkFDTiwrREFBK0Q7d0JBQy9ELGFBQWEsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ3JDLGtGQUFrRjt3QkFDbEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO2dCQUVGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7b0JBQ2hDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQzNFLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO2dCQUNwQyxDQUFDLENBQUM7Z0JBRUYsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUU7b0JBQ3RFLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0dBQWdHO2lCQUMvRyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRU0sWUFBWSxHQUFHLFFBQVEsQ0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQWdCLENBQUMsQ0FBQztJQUNuRyxjQUFjLEdBQUcsUUFBUSxDQUFrQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RixlQUFlLEdBQUcsUUFBUSxDQUFvQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxVQUFVLElBQUssRUFBd0IsQ0FBQyxDQUFDO0lBRWxJLFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO3dHQWpFVSwrQkFBK0I7NEZBQS9CLCtCQUErQiw0SkFLcUQsVUFBVSx3SEFDSixVQUFVLG9FQ3RCakgsMFZBR0EsMkNEU1ksY0FBYyw0V0FBRSxxQkFBcUI7OzRGQUlwQywrQkFBK0I7a0JBTjNDLFNBQVM7OEJBRUMsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsbUJBQy9CLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdERieFNlZ3VlQW5jaG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vbGF5b3V0L2FuY2hvci9hbmNob3Iuc2VndWUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9iaiwgU3RhdGVPck5hbWUsIFRyYW5zaXRpb25PcHRpb25zLCBVSVJvdXRlck1vZHVsZSB9IGZyb20gJ0B1aXJvdXRlci9hbmd1bGFyJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcblxuLyoqXG4gKiBTZWd1ZUFuY2hvciBpbXBsZW1lbnRhdGlvbiBmb3IgVUlSb3V0ZXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vYW5jaG9yLmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogW1VJUm91dGVyTW9kdWxlLCBEYnhJbmplY3Rpb25Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhVSVJvdXRlclNlZ3VlQW5jaG9yQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3REYnhTZWd1ZUFuY2hvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2NsZWFudXBDbGlja092ZXJyaWRlOiBNYXliZTwoKSA9PiB2b2lkPiA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50QW5jaG9yU2lnbmFsID0gdG9TaWduYWwodGhpcy5wYXJlbnQuYW5jaG9yJCwgeyBpbml0aWFsVmFsdWU6IHVuZGVmaW5lZCB9KTtcblxuICByZWFkb25seSBhbmNob3JFbGVtZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPHN0cmluZywgRWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdhbmNob3InLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSk7XG4gIHJlYWRvbmx5IGluamVjdGlvbkVsZW1lbnQgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8c3RyaW5nLCBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2luamVjdGlvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcbiAgcmVhZG9ubHkgYW5jaG9yRGlzYWJsZWRTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFuY2hvclNpZ25hbCgpPy5kaXNhYmxlZCA/PyBmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFRoaXMgZWZmZWN0IGV4aXN0cyB0byBzb2x2ZSB0aGUgaXNzdWUgb2YgYW4gaW5qZWN0ZWQgZWxlbWVudCB0aGF0IHV0aWxpemVzIGV2ZW50LnN0b3BQcm9wb2dhdGlvbigpIGFuZCBkb2Vzbid0IGFsc28gY2FsbCBldmVudC5wcmV2ZW50RGVmYXVsdCgpLlxuICAgKlxuICAgKiBXZSBkaWRuJ3Qgd2FudCB0byB1c2UgY3NzJ3MgcG9pbnRlci1ldmVudHM6IG5vbmUgYXMgdGhhdCB3b3VsZCBkaXNhYmxlIHRoZSBBbmd1bGFyIE1hdGVyaWFsIGJ1dHRvbiBlZmZlY3RzLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgZGJ4LWJ1dHRvbiB3b3VsZCBjYWxsIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIG9uIGNsaWNrLCB3aGljaCB3b3VsZCBwcmV2ZW50IHRoZSB1aVNyZWYgZnJvbSBiZWluZyB0cmlnZ2VyZWQsIGJ1dCB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgKiBvZiB0aGUgYW5jaG9yIGVsZW1lbnQgd291bGQgc3RpbGwgYmUgdHJpZ2dlcmVkLCBjYXVzaW5nIHRoZSBicm93c2VyIHRvIGxvYWQvcmVsb2FkIHRoZSBwYWdlIGF0IHRoZSBnaXZlbiBocmVmIGluc3RlYWQgb2YgbmF2aWdhdGluZyB0byB0aGUgbmV3IHN0YXRlIHVzaW5nIHVpU3JlZi5cbiAgICpcbiAgICogTk9URTogVGhvc2UgbmVzdGVkIGV2ZW50IGxpc3RlbmVycyBhcmUgc3RpbGwgdWx0aW1hdGVseSB0cmlnZ2VyZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX292ZXJyaWRlQ2xpY2tFbGVtZW50RWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhbmNob3JFbGVtZW50ID0gdGhpcy5hbmNob3JFbGVtZW50KCk7XG4gICAgY29uc3QgaW5qZWN0aW9uRWxlbWVudCA9IHRoaXMuaW5qZWN0aW9uRWxlbWVudCgpO1xuICAgIGNvbnN0IGFuY2hvckRpc2FibGVkID0gdGhpcy5hbmNob3JEaXNhYmxlZFNpZ25hbCgpO1xuXG4gICAgaWYgKGluamVjdGlvbkVsZW1lbnQpIHtcbiAgICAgIC8vIGNsZWFudXAvcmVtb3ZlIHRoZSBwcmV2aW91cy9leGlzdGluZyBjbGljayBmdW5jdGlvblxuICAgICAgaWYgKHRoaXMuX2NsZWFudXBDbGlja092ZXJyaWRlKSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXBDbGlja092ZXJyaWRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYW5jaG9yRGlzYWJsZWQpIHtcbiAgICAgICAgY29uc3QgY2xpY2tPdmVycmlkZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIC8vIEFsbG93IGN0cmwrY2xpY2ssIGNtZCtjbGljaywgc2hpZnQrY2xpY2ssIGFuZCBtaWRkbGUtY2xpY2sgZm9yIG5ldyB0YWIvd2luZG93XG4gICAgICAgICAgLy8gRG9uJ3QgcHJldmVudERlZmF1bHQgb3Igc3RvcFByb3BhZ2F0aW9uIC0gbGV0IGJyb3dzZXIgaGFuZGxlIGl0IG5hdHVyYWxseVxuICAgICAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYnV0dG9uID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIEJyb3dzZXIgd2lsbCBvcGVuIGluIG5ldyB0YWIvd2luZG93XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgYWxzbyB0cmlnZ2VyIGEgY2xpY2sgb24gdGhlIHVpU3JlZiBhbmNob3IgZWxlbWVudFxuICAgICAgICAgICAgYW5jaG9yRWxlbWVudD8ubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgLy8gUHJldmVudHMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGFuY2hvciBlbGVtZW50J3MgaHJlZiBmcm9tIGJlaW5nIHRyaWdnZXJlZFxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9jbGVhbnVwQ2xpY2tPdmVycmlkZSA9ICgpID0+IHtcbiAgICAgICAgICBpbmplY3Rpb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbGlja092ZXJyaWRlKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5fY2xlYW51cENsaWNrT3ZlcnJpZGU7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW5qZWN0aW9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xpY2tPdmVycmlkZSwge1xuICAgICAgICAgIGNhcHR1cmU6IHRydWUgLy8gVXNlIGNhcHR1cmUgdG8gZW5zdXJlIHRoaXMgZXZlbnQgbGlzdGVuZXIgaXMgY2FsbGVkIGJlZm9yZSBhbnkgbmVzdGVkIGNoaWxkJ3MgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmVhZG9ubHkgdWlTcmVmU2lnbmFsID0gY29tcHV0ZWQ8U3RhdGVPck5hbWU+KCgpID0+ICh0aGlzLl9wYXJlbnRBbmNob3JTaWduYWwoKT8ucmVmID8/ICcnKSBhcyBTdGF0ZU9yTmFtZSk7XG4gIHJlYWRvbmx5IHVpUGFyYW1zU2lnbmFsID0gY29tcHV0ZWQ8T2JqIHwgdW5kZWZpbmVkPigoKSA9PiB0aGlzLl9wYXJlbnRBbmNob3JTaWduYWwoKT8ucmVmUGFyYW1zKTtcbiAgcmVhZG9ubHkgdWlPcHRpb25zU2lnbmFsID0gY29tcHV0ZWQ8VHJhbnNpdGlvbk9wdGlvbnM+KCgpID0+IHRoaXMuX3BhcmVudEFuY2hvclNpZ25hbCgpPy5yZWZPcHRpb25zID8/ICh7fSBhcyBUcmFuc2l0aW9uT3B0aW9ucykpO1xuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jbGVhbnVwQ2xpY2tPdmVycmlkZSkge1xuICAgICAgdGhpcy5fY2xlYW51cENsaWNrT3ZlcnJpZGUoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxhIGNsYXNzPVwiZGJ4LWFuY2hvci1hIGRieC1hbmNob3Itc3JlZlwiICNhbmNob3IgW2F0dHIudGFyZ2V0XT1cInRhcmdldFNpZ25hbCgpXCIgW3VpU3JlZl09XCJ1aVNyZWZTaWduYWwoKVwiIFt1aVBhcmFtc109XCJ1aVBhcmFtc1NpZ25hbCgpXCIgW3VpT3B0aW9uc109XCJ1aU9wdGlvbnNTaWduYWwoKVwiIHVpU3JlZkFjdGl2ZT1cImRieC1hbmNob3ItYWN0aXZlXCIgdWlTcmVmQWN0aXZlRXE9XCJkYngtYW5jaG9yLWFjdGl2ZS1lcVwiPlxuICA8ZGJ4LWluamVjdGlvbiAjaW5qZWN0aW9uIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZUNvbmZpZ1NpZ25hbCgpXCI+PC9kYngtaW5qZWN0aW9uPlxuPC9hPlxuIl19
|
|
@@ -8284,16 +8284,69 @@ function provideDbxRouterWebAngularRouterProviderConfig() {
|
|
|
8284
8284
|
* SegueAnchor implementation for UIRouter.
|
|
8285
8285
|
*/
|
|
8286
8286
|
class DbxUIRouterSegueAnchorComponent extends AbstractDbxSegueAnchorDirective {
|
|
8287
|
+
_cleanupClickOverride = null;
|
|
8287
8288
|
_parentAnchorSignal = toSignal(this.parent.anchor$, { initialValue: undefined });
|
|
8289
|
+
anchorElement = viewChild.required('anchor', { read: ElementRef });
|
|
8290
|
+
injectionElement = viewChild.required('injection', { read: ElementRef });
|
|
8291
|
+
anchorDisabledSignal = computed(() => this.anchorSignal()?.disabled ?? false);
|
|
8292
|
+
/**
|
|
8293
|
+
* This effect exists to solve the issue of an injected element that utilizes event.stopPropogation() and doesn't also call event.preventDefault().
|
|
8294
|
+
*
|
|
8295
|
+
* We didn't want to use css's pointer-events: none as that would disable the Angular Material button effects.
|
|
8296
|
+
*
|
|
8297
|
+
* For example, dbx-button would call event.stopPropagation() on click, which would prevent the uiSref from being triggered, but the default behavior
|
|
8298
|
+
* of the anchor element would still be triggered, causing the browser to load/reload the page at the given href instead of navigating to the new state using uiSref.
|
|
8299
|
+
*
|
|
8300
|
+
* NOTE: Those nested event listeners are still ultimately triggered.
|
|
8301
|
+
*/
|
|
8302
|
+
_overrideClickElementEffect = effect(() => {
|
|
8303
|
+
const anchorElement = this.anchorElement();
|
|
8304
|
+
const injectionElement = this.injectionElement();
|
|
8305
|
+
const anchorDisabled = this.anchorDisabledSignal();
|
|
8306
|
+
if (injectionElement) {
|
|
8307
|
+
// cleanup/remove the previous/existing click function
|
|
8308
|
+
if (this._cleanupClickOverride) {
|
|
8309
|
+
this._cleanupClickOverride();
|
|
8310
|
+
}
|
|
8311
|
+
if (!anchorDisabled) {
|
|
8312
|
+
const clickOverride = (event) => {
|
|
8313
|
+
// Allow ctrl+click, cmd+click, shift+click, and middle-click for new tab/window
|
|
8314
|
+
// Don't preventDefault or stopPropagation - let browser handle it naturally
|
|
8315
|
+
if (event.ctrlKey || event.metaKey || event.shiftKey || event.button === 1) {
|
|
8316
|
+
return; // Browser will open in new tab/window
|
|
8317
|
+
}
|
|
8318
|
+
else {
|
|
8319
|
+
// otherwise, also trigger a click on the uiSref anchor element
|
|
8320
|
+
anchorElement?.nativeElement.click();
|
|
8321
|
+
// Prevents the default behavior of the anchor element's href from being triggered
|
|
8322
|
+
event.preventDefault();
|
|
8323
|
+
event.stopPropagation();
|
|
8324
|
+
}
|
|
8325
|
+
};
|
|
8326
|
+
this._cleanupClickOverride = () => {
|
|
8327
|
+
injectionElement.nativeElement.removeEventListener('click', clickOverride);
|
|
8328
|
+
delete this._cleanupClickOverride;
|
|
8329
|
+
};
|
|
8330
|
+
injectionElement.nativeElement.addEventListener('click', clickOverride, {
|
|
8331
|
+
capture: true // Use capture to ensure this event listener is called before any nested child's event listeners
|
|
8332
|
+
});
|
|
8333
|
+
}
|
|
8334
|
+
}
|
|
8335
|
+
});
|
|
8288
8336
|
uiSrefSignal = computed(() => (this._parentAnchorSignal()?.ref ?? ''));
|
|
8289
8337
|
uiParamsSignal = computed(() => this._parentAnchorSignal()?.refParams);
|
|
8290
8338
|
uiOptionsSignal = computed(() => this._parentAnchorSignal()?.refOptions ?? {});
|
|
8339
|
+
ngOnDestroy() {
|
|
8340
|
+
if (this._cleanupClickOverride) {
|
|
8341
|
+
this._cleanupClickOverride();
|
|
8342
|
+
}
|
|
8343
|
+
}
|
|
8291
8344
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxUIRouterSegueAnchorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
8292
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
8345
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: DbxUIRouterSegueAnchorComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "anchorElement", first: true, predicate: ["anchor"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "injectionElement", first: true, predicate: ["injection"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<a class=\"dbx-anchor-a dbx-anchor-sref\" #anchor [attr.target]=\"targetSignal()\" [uiSref]=\"uiSrefSignal()\" [uiParams]=\"uiParamsSignal()\" [uiOptions]=\"uiOptionsSignal()\" uiSrefActive=\"dbx-anchor-active\" uiSrefActiveEq=\"dbx-anchor-active-eq\">\n <dbx-injection #injection [template]=\"templateConfigSignal()\"></dbx-injection>\n</a>\n", dependencies: [{ kind: "ngmodule", type: UIRouterModule }, { kind: "directive", type: i1$5.UISref, selector: "[uiSref]", inputs: ["uiSref", "uiParams", "uiOptions"], exportAs: ["uiSref"] }, { kind: "directive", type: i1$5.AnchorUISref, selector: "a[uiSref]" }, { kind: "directive", type: i1$5.UISrefActive, selector: "[uiSrefActive],[uiSrefActiveEq]", inputs: ["uiSrefActive", "uiSrefActiveEq"] }, { kind: "component", type: DbxInjectionComponent, selector: "dbx-injection, [dbxInjection], [dbx-injection]", inputs: ["config", "template"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8293
8346
|
}
|
|
8294
8347
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxUIRouterSegueAnchorComponent, decorators: [{
|
|
8295
8348
|
type: Component,
|
|
8296
|
-
args: [{ imports: [UIRouterModule, DbxInjectionComponent], standalone: true, template: "<a class=\"dbx-anchor-a dbx-anchor-sref\" [attr.target]=\"targetSignal()\" [uiSref]=\"uiSrefSignal()\" [uiParams]=\"uiParamsSignal()\" [uiOptions]=\"uiOptionsSignal()\" uiSrefActive=\"dbx-anchor-active\" uiSrefActiveEq=\"dbx-anchor-active-eq\">\n <dbx-injection [template]=\"templateConfigSignal()\"></dbx-injection>\n</a>\n" }]
|
|
8349
|
+
args: [{ imports: [UIRouterModule, DbxInjectionComponent], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<a class=\"dbx-anchor-a dbx-anchor-sref\" #anchor [attr.target]=\"targetSignal()\" [uiSref]=\"uiSrefSignal()\" [uiParams]=\"uiParamsSignal()\" [uiOptions]=\"uiOptionsSignal()\" uiSrefActive=\"dbx-anchor-active\" uiSrefActiveEq=\"dbx-anchor-active-eq\">\n <dbx-injection #injection [template]=\"templateConfigSignal()\"></dbx-injection>\n</a>\n" }]
|
|
8297
8350
|
}] });
|
|
8298
8351
|
|
|
8299
8352
|
/**
|