@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: "14.0.0", version: "18.2.13", type: DbxUIRouterSegueAnchorComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, 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", 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"] }] });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9yb3V0ZXIvcHJvdmlkZXIvdWlyb3V0ZXIvYW5jaG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC13ZWIvc3JjL2xpYi9yb3V0ZXIvcHJvdmlkZXIvdWlyb3V0ZXIvYW5jaG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdGLE9BQU8sRUFBdUMsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFFdEQ7O0dBRUc7QUFNSCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsK0JBQStCO0lBQ2pFLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRXpGLFlBQVksR0FBRyxRQUFRLENBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFnQixDQUFDLENBQUM7SUFDbkcsY0FBYyxHQUFHLFFBQVEsQ0FBa0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEYsZUFBZSxHQUFHLFFBQVEsQ0FBb0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsVUFBVSxJQUFLLEVBQXdCLENBQUMsQ0FBQzt3R0FMdkgsK0JBQStCOzRGQUEvQiwrQkFBK0IsK0ZDZDVDLHVVQUdBLDJDRFFZLGNBQWMsNFdBQUUscUJBQXFCOzs0RkFHcEMsK0JBQStCO2tCQUwzQyxTQUFTOzhCQUVDLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDLGNBQ3BDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdERieFNlZ3VlQW5jaG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vbGF5b3V0L2FuY2hvci9hbmNob3Iuc2VndWUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9iaiwgU3RhdGVPck5hbWUsIFRyYW5zaXRpb25PcHRpb25zLCBVSVJvdXRlck1vZHVsZSB9IGZyb20gJ0B1aXJvdXRlci9hbmd1bGFyJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vKipcbiAqIFNlZ3VlQW5jaG9yIGltcGxlbWVudGF0aW9uIGZvciBVSVJvdXRlci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9hbmNob3IuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbVUlSb3V0ZXJNb2R1bGUsIERieEluamVjdGlvbkNvbXBvbmVudF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4VUlSb3V0ZXJTZWd1ZUFuY2hvckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RGJ4U2VndWVBbmNob3JEaXJlY3RpdmUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRBbmNob3JTaWduYWwgPSB0b1NpZ25hbCh0aGlzLnBhcmVudC5hbmNob3IkLCB7IGluaXRpYWxWYWx1ZTogdW5kZWZpbmVkIH0pO1xuXG4gIHJlYWRvbmx5IHVpU3JlZlNpZ25hbCA9IGNvbXB1dGVkPFN0YXRlT3JOYW1lPigoKSA9PiAodGhpcy5fcGFyZW50QW5jaG9yU2lnbmFsKCk/LnJlZiA/PyAnJykgYXMgU3RhdGVPck5hbWUpO1xuICByZWFkb25seSB1aVBhcmFtc1NpZ25hbCA9IGNvbXB1dGVkPE9iaiB8IHVuZGVmaW5lZD4oKCkgPT4gdGhpcy5fcGFyZW50QW5jaG9yU2lnbmFsKCk/LnJlZlBhcmFtcyk7XG4gIHJlYWRvbmx5IHVpT3B0aW9uc1NpZ25hbCA9IGNvbXB1dGVkPFRyYW5zaXRpb25PcHRpb25zPigoKSA9PiB0aGlzLl9wYXJlbnRBbmNob3JTaWduYWwoKT8ucmVmT3B0aW9ucyA/PyAoe30gYXMgVHJhbnNpdGlvbk9wdGlvbnMpKTtcbn1cbiIsIjxhIGNsYXNzPVwiZGJ4LWFuY2hvci1hIGRieC1hbmNob3Itc3JlZlwiIFthdHRyLnRhcmdldF09XCJ0YXJnZXRTaWduYWwoKVwiIFt1aVNyZWZdPVwidWlTcmVmU2lnbmFsKClcIiBbdWlQYXJhbXNdPVwidWlQYXJhbXNTaWduYWwoKVwiIFt1aU9wdGlvbnNdPVwidWlPcHRpb25zU2lnbmFsKClcIiB1aVNyZWZBY3RpdmU9XCJkYngtYW5jaG9yLWFjdGl2ZVwiIHVpU3JlZkFjdGl2ZUVxPVwiZGJ4LWFuY2hvci1hY3RpdmUtZXFcIj5cbiAgPGRieC1pbmplY3Rpb24gW3RlbXBsYXRlXT1cInRlbXBsYXRlQ29uZmlnU2lnbmFsKClcIj48L2RieC1pbmplY3Rpb24+XG48L2E+XG4iXX0=
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: "14.0.0", version: "18.2.13", type: DbxUIRouterSegueAnchorComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, 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", 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"] }] });
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
  /**