@odx/angular 12.17.0 → 12.17.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.
- package/CHANGELOG.md +7 -0
- package/components/anchor-navigation/anchor-navigation.component.d.ts +1 -1
- package/components/anchor-navigation/anchor-navigation.service.d.ts +2 -2
- package/esm2022/components/anchor-navigation/anchor-navigation.service.mjs +19 -16
- package/fesm2022/odx-angular-components-anchor-navigation.mjs +19 -16
- package/fesm2022/odx-angular-components-anchor-navigation.mjs.map +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @odx/angular
|
|
2
2
|
|
|
3
|
+
## 12.17.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 98f9bf2: anchor navigation component: border styling fixed, active item logic improved
|
|
8
|
+
auth component: hide the institution name when hideInstitution is false
|
|
9
|
+
|
|
3
10
|
## 12.17.0
|
|
4
11
|
|
|
5
12
|
### Minor Changes
|
|
@@ -25,7 +25,7 @@ export declare class AnchorNavigationComponent {
|
|
|
25
25
|
* `document` of the current window.
|
|
26
26
|
*/
|
|
27
27
|
scrollableContainer: import("@angular/core").InputSignal<HTMLElement | Document | undefined>;
|
|
28
|
-
readonly activeAnchorLink: import("@angular/core").
|
|
28
|
+
readonly activeAnchorLink: import("@angular/core").Signal<AnchorNavigationItemComponent | null>;
|
|
29
29
|
constructor();
|
|
30
30
|
/**
|
|
31
31
|
* Scrolls the view to the section associated with the given `AnchorLinkDirective`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OnDestroy, WritableSignal } from '@angular/core';
|
|
1
|
+
import { OnDestroy, Signal, WritableSignal } from '@angular/core';
|
|
2
2
|
import { AnchorNavigationItemComponent } from './components/anchor-navigation-item.component';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class AnchorNavigationService implements OnDestroy {
|
|
@@ -29,7 +29,7 @@ export declare class AnchorNavigationService implements OnDestroy {
|
|
|
29
29
|
* A readonly Signal indicating the currently active AnchorLinkDirective.
|
|
30
30
|
* This is updated by the service based on scroll position and intersection.
|
|
31
31
|
*/
|
|
32
|
-
readonly activeAnchorLink:
|
|
32
|
+
readonly activeAnchorLink: Signal<AnchorNavigationItemComponent | null>;
|
|
33
33
|
constructor();
|
|
34
34
|
ngOnDestroy(): void;
|
|
35
35
|
/**
|
|
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export class AnchorNavigationService {
|
|
5
5
|
constructor() {
|
|
6
6
|
this.windowRef = inject(WindowRef);
|
|
7
|
-
this.intersectionStates =
|
|
7
|
+
this.intersectionStates = signal({});
|
|
8
8
|
this.targetScrollSections = computed(() => this.findTargetScrollSections());
|
|
9
9
|
/**
|
|
10
10
|
* @internal
|
|
@@ -29,7 +29,13 @@ export class AnchorNavigationService {
|
|
|
29
29
|
* A readonly Signal indicating the currently active AnchorLinkDirective.
|
|
30
30
|
* This is updated by the service based on scroll position and intersection.
|
|
31
31
|
*/
|
|
32
|
-
this.activeAnchorLink =
|
|
32
|
+
this.activeAnchorLink = computed(() => {
|
|
33
|
+
const states = this.intersectionStates();
|
|
34
|
+
const sections = this.targetScrollSections();
|
|
35
|
+
const projectedLinks = this.projectedAnchorLinks();
|
|
36
|
+
const activeSection = sections.find((section) => states[section.id]);
|
|
37
|
+
return activeSection ? projectedLinks.find((link) => link.href() === activeSection.id) || null : null;
|
|
38
|
+
});
|
|
33
39
|
effect((onCleanup) => {
|
|
34
40
|
const currentRoot = this.scrollableContainer();
|
|
35
41
|
const currentLinks = this.projectedAnchorLinks();
|
|
@@ -43,7 +49,7 @@ export class AnchorNavigationService {
|
|
|
43
49
|
onCleanup(() => {
|
|
44
50
|
this.disconnectObserver();
|
|
45
51
|
});
|
|
46
|
-
});
|
|
52
|
+
}, { allowSignalWrites: true });
|
|
47
53
|
}
|
|
48
54
|
ngOnDestroy() {
|
|
49
55
|
this.disconnectObserver();
|
|
@@ -81,27 +87,24 @@ export class AnchorNavigationService {
|
|
|
81
87
|
if (!this.intersectionObserver)
|
|
82
88
|
return;
|
|
83
89
|
this.intersectionObserver.disconnect();
|
|
84
|
-
this.intersectionStates.clear();
|
|
85
90
|
const sections = this.targetScrollSections();
|
|
91
|
+
const initialStates = {};
|
|
86
92
|
sections.forEach((section) => {
|
|
87
93
|
if (section) {
|
|
88
|
-
|
|
94
|
+
initialStates[section.id] = false;
|
|
89
95
|
this.intersectionObserver.observe(section);
|
|
90
96
|
}
|
|
91
97
|
});
|
|
98
|
+
this.intersectionStates.set(initialStates);
|
|
92
99
|
}
|
|
93
100
|
onIntersectionUpdate(entries) {
|
|
94
|
-
entries.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
for (const section of currentSections) {
|
|
98
|
-
if (this.intersectionStates.get(section) === true) {
|
|
99
|
-
newActiveCandidate = this.projectedAnchorLinks().find((link) => link.href() === section.id) || null;
|
|
100
|
-
break;
|
|
101
|
+
const newStates = entries.reduce((states, { target, isIntersecting }) => {
|
|
102
|
+
if (target.id) {
|
|
103
|
+
states[target.id] = isIntersecting;
|
|
101
104
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
return states;
|
|
106
|
+
}, { ...this.intersectionStates() });
|
|
107
|
+
this.intersectionStates.set(newStates);
|
|
105
108
|
}
|
|
106
109
|
findTargetScrollSections() {
|
|
107
110
|
const currentLinks = this.projectedAnchorLinks();
|
|
@@ -124,4 +127,4 @@ export class AnchorNavigationService {
|
|
|
124
127
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AnchorNavigationService, decorators: [{
|
|
125
128
|
type: Injectable
|
|
126
129
|
}], ctorParameters: () => [] });
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLW5hdmlnYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2FuY2hvci1uYXZpZ2F0aW9uL3NyYy9hbmNob3ItbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUl6QyxNQUFNLE9BQU8sdUJBQXVCO0lBbUNsQztRQWxDaUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5Qix1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUVqRCx5QkFBb0IsR0FBRyxRQUFRLENBQWdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFFdkc7Ozs7O1dBS0c7UUFDYSxjQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhDOzs7O1dBSUc7UUFDSSx3QkFBbUIsR0FBMkMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckc7Ozs7V0FJRztRQUNJLHlCQUFvQixHQUE2RCxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkc7OztXQUdHO1FBQ2EscUJBQWdCLEdBQUcsTUFBTSxDQUF1QyxJQUFJLENBQUMsQ0FBQztRQUdwRixNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFNBQVMs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Q0FBYyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUcsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztJQUN4QyxDQUFDOytHQXhJVSx1QkFBdUI7bUhBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQW5jaG9yTmF2aWdhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYW5jaG9yLW5hdmlnYXRpb24taXRlbS5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQW5jaG9yTmF2aWdhdGlvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuICBwcml2YXRlIGludGVyc2VjdGlvbk9ic2VydmVyPzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJzZWN0aW9uU3RhdGVzID0gbmV3IE1hcDxFbGVtZW50LCBib29sZWFuPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0U2Nyb2xsU2VjdGlvbnMgPSBjb21wdXRlZDxIVE1MRWxlbWVudFtdPigoKSA9PiB0aGlzLmZpbmRUYXJnZXRTY3JvbGxTZWN0aW9ucygpKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEEgV3JpdGFibGVTaWduYWwgaG9sZGluZyB0aGUgdGhyZXNob2xkIGZvciB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuXG4gICAqIFRoaXMgZGV0ZXJtaW5lcyBob3cgbXVjaCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSBpdCBpcyBjb25zaWRlcmVkIGludGVyc2VjdGluZy5cbiAgICogRGVmYXVsdHMgdG8gMC41ICg1MCUgdmlzaWJpbGl0eSkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGhyZXNob2xkID0gc2lnbmFsKDAuNSk7XG5cbiAgLyoqXG4gICAqIEEgV3JpdGFibGVTaWduYWwgaG9sZGluZyB0aGUgc2Nyb2xsYWJsZSBjb250YWluZXIgZWxlbWVudCBvciBkb2N1bWVudC5cbiAgICogVGhpcyBpcyBzZXQgYnkgdGhlIEFuY2hvck5hdmlnYXRpb25Db21wb25lbnQuXG4gICAqIERlZmF1bHRzIHRvIHRoZSB3aW5kb3cncyBkb2N1bWVudC5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxhYmxlQ29udGFpbmVyOiBXcml0YWJsZVNpZ25hbDxIVE1MRWxlbWVudCB8IERvY3VtZW50PiA9IHNpZ25hbCh0aGlzLndpbmRvd1JlZi5kb2N1bWVudCk7XG5cbiAgLyoqXG4gICAqIEEgV3JpdGFibGVTaWduYWwgaG9sZGluZyBhbiBhcnJheSBvZiBgQW5jaG9yTGlua0RpcmVjdGl2ZWAgaW5zdGFuY2VzLlxuICAgKiBUaGVzZSBhcmUgdGhlIGxpbmtzIG1hbmFnZWQgYnkgdGhlIHNlcnZpY2UsIHR5cGljYWxseSBzZXQgYnkgdGhlIGBBbmNob3JOYXZpZ2F0aW9uQ29tcG9uZW50YFxuICAgKiBiYXNlZCBvbiBpdHMgcHJvamVjdGVkIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgcHJvamVjdGVkQW5jaG9yTGlua3M6IFdyaXRhYmxlU2lnbmFsPHJlYWRvbmx5IEFuY2hvck5hdmlnYXRpb25JdGVtQ29tcG9uZW50W10+ID0gc2lnbmFsKFtdKTtcblxuICAvKipcbiAgICogQSByZWFkb25seSBTaWduYWwgaW5kaWNhdGluZyB0aGUgY3VycmVudGx5IGFjdGl2ZSBBbmNob3JMaW5rRGlyZWN0aXZlLlxuICAgKiBUaGlzIGlzIHVwZGF0ZWQgYnkgdGhlIHNlcnZpY2UgYmFzZWQgb24gc2Nyb2xsIHBvc2l0aW9uIGFuZCBpbnRlcnNlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlQW5jaG9yTGluayA9IHNpZ25hbDxBbmNob3JOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50Um9vdCA9IHRoaXMuc2Nyb2xsYWJsZUNvbnRhaW5lcigpO1xuICAgICAgY29uc3QgY3VycmVudExpbmtzID0gdGhpcy5wcm9qZWN0ZWRBbmNob3JMaW5rcygpO1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy50aHJlc2hvbGQoKTtcblxuICAgICAgaWYgKCFjdXJyZW50TGlua3MubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdE9ic2VydmVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY3VycmVudFJvb3QsIHRocmVzaG9sZCk7XG4gICAgICB0aGlzLnVwZGF0ZU9ic2VydmVkRWxlbWVudHMoKTtcblxuICAgICAgb25DbGVhbnVwKCgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0T2JzZXJ2ZXIoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzY29ubmVjdE9ic2VydmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyB0aGUgdmlldyB0byB0aGUgc2VjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGBBbmNob3JMaW5rRGlyZWN0aXZlYFxuICAgKiBhbmQgc2V0cyBpdCBhcyB0aGUgYWN0aXZlIGxpbmsuXG4gICAqXG4gICAqIEBwYXJhbSBhbmNob3IgVGhlIGBBbmNob3JMaW5rRGlyZWN0aXZlYCBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBhbmNob3Ivc2VjdGlvbi5cbiAgICogICAgICAgICAgICAgICBJZiBudWxsIG9yIGlmIHRoZSBhbmNob3IncyBJRCBpcyBub3QgZm91bmQsIGEgd2FybmluZyBpcyBsb2dnZWQgYW5kIHRoZSBtZXRob2QgcmV0dXJucy5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb0FuY2hvcihhbmNob3I6IEFuY2hvck5hdmlnYXRpb25JdGVtQ29tcG9uZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGFuY2hvcklkID0gYW5jaG9yPy5ocmVmKCk7XG4gICAgaWYgKCFhbmNob3JJZCkge1xuICAgICAgY29uc29sZS53YXJuKGBbQW5jaG9yTmF2aWdhdGlvblNlcnZpY2VdIEF0dGVtcHRlZCB0byBzY3JvbGwgdG8gYW4gYW5jaG9yIHdpdGhvdXQgYW4gSUQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFuY2hvckVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGVDb250YWluZXIoKS5xdWVyeVNlbGVjdG9yKGAjJHtDU1MuZXNjYXBlKGFuY2hvcklkKX1gKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoIWFuY2hvckVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW0FuY2hvck5hdmlnYXRpb25TZXJ2aWNlXSBBbmNob3Igd2l0aCBJRCBcIiR7YW5jaG9ySWR9XCIgbm90IGZvdW5kIGluIHRoZSByb290IGNvbnRhaW5lci5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhbmNob3JFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKHJvb3Q6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsIHRocmVzaG9sZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10pID0+IHRoaXMub25JbnRlcnNlY3Rpb25VcGRhdGUoZW50cmllcyksIHtcbiAgICAgIHJvb3Q6IHJvb3QgPT09IHRoaXMud2luZG93UmVmLmRvY3VtZW50ID8gbnVsbCA6IHJvb3QsXG4gICAgICB0aHJlc2hvbGQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU9ic2VydmVkRWxlbWVudHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSByZXR1cm47XG4gICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5pbnRlcnNlY3Rpb25TdGF0ZXMuY2xlYXIoKTtcblxuICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy50YXJnZXRTY3JvbGxTZWN0aW9ucygpO1xuICAgIHNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uU3RhdGVzLnNldChzZWN0aW9uLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIhLm9ic2VydmUoc2VjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uSW50ZXJzZWN0aW9uVXBkYXRlKGVudHJpZXM6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXSk6IHZvaWQge1xuICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHRoaXMuaW50ZXJzZWN0aW9uU3RhdGVzLnNldChlbnRyeS50YXJnZXQsIGVudHJ5LmlzSW50ZXJzZWN0aW5nKSk7XG5cbiAgICBsZXQgbmV3QWN0aXZlQ2FuZGlkYXRlOiBBbmNob3JOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9ucyA9IHRoaXMudGFyZ2V0U2Nyb2xsU2VjdGlvbnMoKTtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgY3VycmVudFNlY3Rpb25zKSB7XG4gICAgICBpZiAodGhpcy5pbnRlcnNlY3Rpb25TdGF0ZXMuZ2V0KHNlY3Rpb24pID09PSB0cnVlKSB7XG4gICAgICAgIG5ld0FjdGl2ZUNhbmRpZGF0ZSA9IHRoaXMucHJvamVjdGVkQW5jaG9yTGlua3MoKS5maW5kKChsaW5rKSA9PiBsaW5rLmhyZWYoKSA9PT0gc2VjdGlvbi5pZCkgfHwgbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlQW5jaG9yTGluaygpICE9PSBuZXdBY3RpdmVDYW5kaWRhdGUpIHRoaXMuYWN0aXZlQW5jaG9yTGluay5zZXQobmV3QWN0aXZlQ2FuZGlkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFRhcmdldFNjcm9sbFNlY3Rpb25zKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIGNvbnN0IGN1cnJlbnRMaW5rcyA9IHRoaXMucHJvamVjdGVkQW5jaG9yTGlua3MoKTtcbiAgICBpZiAoIWN1cnJlbnRMaW5rcy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHNlbGVjdG9ycyA9IGN1cnJlbnRMaW5rc1xuICAgICAgLm1hcCgobGluaykgPT4gbGluay5ocmVmKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChpZCkgPT4gYCMke0NTUy5lc2NhcGUoaWQpfWApXG4gICAgICAuam9pbignLCcpO1xuICAgIHJldHVybiBzZWxlY3RvcnMgPyBBcnJheS5mcm9tKHRoaXMuc2Nyb2xsYWJsZUNvbnRhaW5lcigpLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KHNlbGVjdG9ycykpIDogW107XG4gIH1cblxuICBwcml2YXRlIGRpc2Nvbm5lY3RPYnNlcnZlcigpOiB2b2lkIHtcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLW5hdmlnYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2FuY2hvci1uYXZpZ2F0aW9uL3NyYy9hbmNob3ItbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXFCLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFJekMsTUFBTSxPQUFPLHVCQUF1QjtJQTBDbEM7UUF6Q2lCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUIsdUJBQWtCLEdBQUcsTUFBTSxDQUEwQixFQUFFLENBQUMsQ0FBQztRQUV6RCx5QkFBb0IsR0FBRyxRQUFRLENBQWdCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFFdkc7Ozs7O1dBS0c7UUFDYSxjQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhDOzs7O1dBSUc7UUFDSSx3QkFBbUIsR0FBMkMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckc7Ozs7V0FJRztRQUNJLHlCQUFvQixHQUE2RCxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkc7OztXQUdHO1FBQ2EscUJBQWdCLEdBQWlELFFBQVEsQ0FBdUMsR0FBRyxFQUFFO1lBQ25JLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lB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LENBQUMsT0FBTyxDQUFDO2FBQ2YsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBYyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUcsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztJQUN4QyxDQUFDOytHQWpKVSx1QkFBdUI7bUhBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBTaWduYWwsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBBbmNob3JOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbmNob3ItbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBbmNob3JOYXZpZ2F0aW9uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgd2luZG93UmVmID0gaW5qZWN0KFdpbmRvd1JlZik7XG4gIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcnNlY3Rpb25TdGF0ZXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldFNjcm9sbFNlY3Rpb25zID0gY29tcHV0ZWQ8SFRNTEVsZW1lbnRbXT4oKCkgPT4gdGhpcy5maW5kVGFyZ2V0U2Nyb2xsU2VjdGlvbnMoKSk7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBBIFdyaXRhYmxlU2lnbmFsIGhvbGRpbmcgdGhlIHRocmVzaG9sZCBmb3IgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLlxuICAgKiBUaGlzIGRldGVybWluZXMgaG93IG11Y2ggb2YgdGhlIHRhcmdldCBlbGVtZW50IG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgaXQgaXMgY29uc2lkZXJlZCBpbnRlcnNlY3RpbmcuXG4gICAqIERlZmF1bHRzIHRvIDAuNSAoNTAlIHZpc2liaWxpdHkpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRocmVzaG9sZCA9IHNpZ25hbCgwLjUpO1xuXG4gIC8qKlxuICAgKiBBIFdyaXRhYmxlU2lnbmFsIGhvbGRpbmcgdGhlIHNjcm9sbGFibGUgY29udGFpbmVyIGVsZW1lbnQgb3IgZG9jdW1lbnQuXG4gICAqIFRoaXMgaXMgc2V0IGJ5IHRoZSBBbmNob3JOYXZpZ2F0aW9uQ29tcG9uZW50LlxuICAgKiBEZWZhdWx0cyB0byB0aGUgd2luZG93J3MgZG9jdW1lbnQuXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsYWJsZUNvbnRhaW5lcjogV3JpdGFibGVTaWduYWw8SFRNTEVsZW1lbnQgfCBEb2N1bWVudD4gPSBzaWduYWwodGhpcy53aW5kb3dSZWYuZG9jdW1lbnQpO1xuXG4gIC8qKlxuICAgKiBBIFdyaXRhYmxlU2lnbmFsIGhvbGRpbmcgYW4gYXJyYXkgb2YgYEFuY2hvckxpbmtEaXJlY3RpdmVgIGluc3RhbmNlcy5cbiAgICogVGhlc2UgYXJlIHRoZSBsaW5rcyBtYW5hZ2VkIGJ5IHRoZSBzZXJ2aWNlLCB0eXBpY2FsbHkgc2V0IGJ5IHRoZSBgQW5jaG9yTmF2aWdhdGlvbkNvbXBvbmVudGBcbiAgICogYmFzZWQgb24gaXRzIHByb2plY3RlZCBjb250ZW50LlxuICAgKi9cbiAgcHVibGljIHByb2plY3RlZEFuY2hvckxpbmtzOiBXcml0YWJsZVNpZ25hbDxyZWFkb25seSBBbmNob3JOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdPiA9IHNpZ25hbChbXSk7XG5cbiAgLyoqXG4gICAqIEEgcmVhZG9ubHkgU2lnbmFsIGluZGljYXRpbmcgdGhlIGN1cnJlbnRseSBhY3RpdmUgQW5jaG9yTGlua0RpcmVjdGl2ZS5cbiAgICogVGhpcyBpcyB1cGRhdGVkIGJ5IHRoZSBzZXJ2aWNlIGJhc2VkIG9uIHNjcm9sbCBwb3NpdGlvbiBhbmQgaW50ZXJzZWN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjdGl2ZUFuY2hvckxpbms6IFNpZ25hbDxBbmNob3JOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB8IG51bGw+ID0gY29tcHV0ZWQ8QW5jaG9yTmF2aWdhdGlvbkl0ZW1Db21wb25lbnQgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVzID0gdGhpcy5pbnRlcnNlY3Rpb25TdGF0ZXMoKTtcbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMudGFyZ2V0U2Nyb2xsU2VjdGlvbnMoKTtcbiAgICBjb25zdCBwcm9qZWN0ZWRMaW5rcyA9IHRoaXMucHJvamVjdGVkQW5jaG9yTGlua3MoKTtcblxuICAgIGNvbnN0IGFjdGl2ZVNlY3Rpb24gPSBzZWN0aW9ucy5maW5kKChzZWN0aW9uKSA9PiBzdGF0ZXNbc2VjdGlvbi5pZF0pO1xuICAgIHJldHVybiBhY3RpdmVTZWN0aW9uID8gcHJvamVjdGVkTGlua3MuZmluZCgobGluaykgPT4gbGluay5ocmVmKCkgPT09IGFjdGl2ZVNlY3Rpb24uaWQpIHx8IG51bGwgOiBudWxsO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAob25DbGVhbnVwKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb290ID0gdGhpcy5zY3JvbGxhYmxlQ29udGFpbmVyKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5rcyA9IHRoaXMucHJvamVjdGVkQW5jaG9yTGlua3MoKTtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy50aHJlc2hvbGQoKTtcblxuICAgICAgICBpZiAoIWN1cnJlbnRMaW5rcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RPYnNlcnZlcigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKGN1cnJlbnRSb290LCB0aHJlc2hvbGQpO1xuICAgICAgICB0aGlzLnVwZGF0ZU9ic2VydmVkRWxlbWVudHMoKTtcblxuICAgICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlzY29ubmVjdE9ic2VydmVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzY29ubmVjdE9ic2VydmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyB0aGUgdmlldyB0byB0aGUgc2VjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGBBbmNob3JMaW5rRGlyZWN0aXZlYFxuICAgKiBhbmQgc2V0cyBpdCBhcyB0aGUgYWN0aXZlIGxpbmsuXG4gICAqXG4gICAqIEBwYXJhbSBhbmNob3IgVGhlIGBBbmNob3JMaW5rRGlyZWN0aXZlYCBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBhbmNob3Ivc2VjdGlvbi5cbiAgICogICAgICAgICAgICAgICBJZiBudWxsIG9yIGlmIHRoZSBhbmNob3IncyBJRCBpcyBub3QgZm91bmQsIGEgd2FybmluZyBpcyBsb2dnZWQgYW5kIHRoZSBtZXRob2QgcmV0dXJucy5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb0FuY2hvcihhbmNob3I6IEFuY2hvck5hdmlnYXRpb25JdGVtQ29tcG9uZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGFuY2hvcklkID0gYW5jaG9yPy5ocmVmKCk7XG4gICAgaWYgKCFhbmNob3JJZCkge1xuICAgICAgY29uc29sZS53YXJuKGBbQW5jaG9yTmF2aWdhdGlvblNlcnZpY2VdIEF0dGVtcHRlZCB0byBzY3JvbGwgdG8gYW4gYW5jaG9yIHdpdGhvdXQgYW4gSUQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFuY2hvckVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGVDb250YWluZXIoKS5xdWVyeVNlbGVjdG9yKGAjJHtDU1MuZXNjYXBlKGFuY2hvcklkKX1gKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoIWFuY2hvckVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW0FuY2hvck5hdmlnYXRpb25TZXJ2aWNlXSBBbmNob3Igd2l0aCBJRCBcIiR7YW5jaG9ySWR9XCIgbm90IGZvdW5kIGluIHRoZSByb290IGNvbnRhaW5lci5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhbmNob3JFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKHJvb3Q6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsIHRocmVzaG9sZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10pID0+IHRoaXMub25JbnRlcnNlY3Rpb25VcGRhdGUoZW50cmllcyksIHtcbiAgICAgIHJvb3Q6IHJvb3QgPT09IHRoaXMud2luZG93UmVmLmRvY3VtZW50ID8gbnVsbCA6IHJvb3QsXG4gICAgICB0aHJlc2hvbGQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU9ic2VydmVkRWxlbWVudHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSByZXR1cm47XG4gICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMudGFyZ2V0U2Nyb2xsU2VjdGlvbnMoKTtcbiAgICBjb25zdCBpbml0aWFsU3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICAgIHNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZXNbc2VjdGlvbi5pZF0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciEub2JzZXJ2ZShzZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmludGVyc2VjdGlvblN0YXRlcy5zZXQoaW5pdGlhbFN0YXRlcyk7XG4gIH1cblxuICBwcml2YXRlIG9uSW50ZXJzZWN0aW9uVXBkYXRlKGVudHJpZXM6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1N0YXRlcyA9IGVudHJpZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PihcbiAgICAgIChzdGF0ZXMsIHsgdGFyZ2V0LCBpc0ludGVyc2VjdGluZyB9KSA9PiB7XG4gICAgICAgIGlmICh0YXJnZXQuaWQpIHtcbiAgICAgICAgICBzdGF0ZXNbdGFyZ2V0LmlkXSA9IGlzSW50ZXJzZWN0aW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZXM7XG4gICAgICB9LFxuICAgICAgeyAuLi50aGlzLmludGVyc2VjdGlvblN0YXRlcygpIH0sXG4gICAgKTtcbiAgICB0aGlzLmludGVyc2VjdGlvblN0YXRlcy5zZXQobmV3U3RhdGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFRhcmdldFNjcm9sbFNlY3Rpb25zKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIGNvbnN0IGN1cnJlbnRMaW5rcyA9IHRoaXMucHJvamVjdGVkQW5jaG9yTGlua3MoKTtcbiAgICBpZiAoIWN1cnJlbnRMaW5rcy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHNlbGVjdG9ycyA9IGN1cnJlbnRMaW5rc1xuICAgICAgLm1hcCgobGluaykgPT4gbGluay5ocmVmKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChpZCkgPT4gYCMke0NTUy5lc2NhcGUoaWQpfWApXG4gICAgICAuam9pbignLCcpO1xuICAgIHJldHVybiBzZWxlY3RvcnMgPyBBcnJheS5mcm9tKHRoaXMuc2Nyb2xsYWJsZUNvbnRhaW5lcigpLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KHNlbGVjdG9ycykpIDogW107XG4gIH1cblxuICBwcml2YXRlIGRpc2Nvbm5lY3RPYnNlcnZlcigpOiB2b2lkIHtcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from 'tslib';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject,
|
|
3
|
+
import { inject, signal, computed, effect, Injectable, input, Component, ViewEncapsulation, ChangeDetectionStrategy, contentChildren, booleanAttribute, NgModule } from '@angular/core';
|
|
4
4
|
import { CSSComponent } from '@odx/angular/internal';
|
|
5
5
|
import { injectElement } from '@odx/angular/utils';
|
|
6
6
|
import { WindowRef } from '@odx/angular';
|
|
@@ -9,7 +9,7 @@ import { LinkDirective } from '@odx/angular/components/link';
|
|
|
9
9
|
class AnchorNavigationService {
|
|
10
10
|
constructor() {
|
|
11
11
|
this.windowRef = inject(WindowRef);
|
|
12
|
-
this.intersectionStates =
|
|
12
|
+
this.intersectionStates = signal({});
|
|
13
13
|
this.targetScrollSections = computed(() => this.findTargetScrollSections());
|
|
14
14
|
/**
|
|
15
15
|
* @internal
|
|
@@ -34,7 +34,13 @@ class AnchorNavigationService {
|
|
|
34
34
|
* A readonly Signal indicating the currently active AnchorLinkDirective.
|
|
35
35
|
* This is updated by the service based on scroll position and intersection.
|
|
36
36
|
*/
|
|
37
|
-
this.activeAnchorLink =
|
|
37
|
+
this.activeAnchorLink = computed(() => {
|
|
38
|
+
const states = this.intersectionStates();
|
|
39
|
+
const sections = this.targetScrollSections();
|
|
40
|
+
const projectedLinks = this.projectedAnchorLinks();
|
|
41
|
+
const activeSection = sections.find((section) => states[section.id]);
|
|
42
|
+
return activeSection ? projectedLinks.find((link) => link.href() === activeSection.id) || null : null;
|
|
43
|
+
});
|
|
38
44
|
effect((onCleanup) => {
|
|
39
45
|
const currentRoot = this.scrollableContainer();
|
|
40
46
|
const currentLinks = this.projectedAnchorLinks();
|
|
@@ -48,7 +54,7 @@ class AnchorNavigationService {
|
|
|
48
54
|
onCleanup(() => {
|
|
49
55
|
this.disconnectObserver();
|
|
50
56
|
});
|
|
51
|
-
});
|
|
57
|
+
}, { allowSignalWrites: true });
|
|
52
58
|
}
|
|
53
59
|
ngOnDestroy() {
|
|
54
60
|
this.disconnectObserver();
|
|
@@ -86,27 +92,24 @@ class AnchorNavigationService {
|
|
|
86
92
|
if (!this.intersectionObserver)
|
|
87
93
|
return;
|
|
88
94
|
this.intersectionObserver.disconnect();
|
|
89
|
-
this.intersectionStates.clear();
|
|
90
95
|
const sections = this.targetScrollSections();
|
|
96
|
+
const initialStates = {};
|
|
91
97
|
sections.forEach((section) => {
|
|
92
98
|
if (section) {
|
|
93
|
-
|
|
99
|
+
initialStates[section.id] = false;
|
|
94
100
|
this.intersectionObserver.observe(section);
|
|
95
101
|
}
|
|
96
102
|
});
|
|
103
|
+
this.intersectionStates.set(initialStates);
|
|
97
104
|
}
|
|
98
105
|
onIntersectionUpdate(entries) {
|
|
99
|
-
entries.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
for (const section of currentSections) {
|
|
103
|
-
if (this.intersectionStates.get(section) === true) {
|
|
104
|
-
newActiveCandidate = this.projectedAnchorLinks().find((link) => link.href() === section.id) || null;
|
|
105
|
-
break;
|
|
106
|
+
const newStates = entries.reduce((states, { target, isIntersecting }) => {
|
|
107
|
+
if (target.id) {
|
|
108
|
+
states[target.id] = isIntersecting;
|
|
106
109
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
+
return states;
|
|
111
|
+
}, { ...this.intersectionStates() });
|
|
112
|
+
this.intersectionStates.set(newStates);
|
|
110
113
|
}
|
|
111
114
|
findTargetScrollSections() {
|
|
112
115
|
const currentLinks = this.projectedAnchorLinks();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-anchor-navigation.mjs","sources":["../../../../libs/angular/components/anchor-navigation/src/anchor-navigation.service.ts","../../../../libs/angular/components/anchor-navigation/src/components/anchor-navigation-item.component.ts","../../../../libs/angular/components/anchor-navigation/src/components/anchor-navigation-item.component.html","../../../../libs/angular/components/anchor-navigation/src/anchor-navigation.component.ts","../../../../libs/angular/components/anchor-navigation/src/anchor-navigation.component.html","../../../../libs/angular/components/anchor-navigation/src/anchor-navigation.module.ts","../../../../libs/angular/components/anchor-navigation/src/odx-angular-components-anchor-navigation.ts"],"sourcesContent":["import { computed, effect, inject, Injectable, OnDestroy, signal, WritableSignal } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { AnchorNavigationItemComponent } from './components/anchor-navigation-item.component';\n\n@Injectable()\nexport class AnchorNavigationService implements OnDestroy {\n private readonly windowRef = inject(WindowRef);\n private intersectionObserver?: IntersectionObserver;\n private readonly intersectionStates = new Map<Element, boolean>();\n\n private readonly targetScrollSections = computed<HTMLElement[]>(() => this.findTargetScrollSections());\n\n /**\n * @internal\n * A WritableSignal holding the threshold for the IntersectionObserver.\n * This determines how much of the target element must be visible before it is considered intersecting.\n * Defaults to 0.5 (50% visibility).\n */\n public readonly threshold = signal(0.5);\n\n /**\n * A WritableSignal holding the scrollable container element or document.\n * This is set by the AnchorNavigationComponent.\n * Defaults to the window's document.\n */\n public scrollableContainer: WritableSignal<HTMLElement | Document> = signal(this.windowRef.document);\n\n /**\n * A WritableSignal holding an array of `AnchorLinkDirective` instances.\n * These are the links managed by the service, typically set by the `AnchorNavigationComponent`\n * based on its projected content.\n */\n public projectedAnchorLinks: WritableSignal<readonly AnchorNavigationItemComponent[]> = signal([]);\n\n /**\n * A readonly Signal indicating the currently active AnchorLinkDirective.\n * This is updated by the service based on scroll position and intersection.\n */\n public readonly activeAnchorLink = signal<AnchorNavigationItemComponent | null>(null);\n\n constructor() {\n effect((onCleanup) => {\n const currentRoot = this.scrollableContainer();\n const currentLinks = this.projectedAnchorLinks();\n const threshold = this.threshold();\n\n if (!currentLinks.length) {\n this.disconnectObserver();\n return;\n }\n\n this.initIntersectionObserver(currentRoot, threshold);\n this.updateObservedElements();\n\n onCleanup(() => {\n this.disconnectObserver();\n });\n });\n }\n\n public ngOnDestroy(): void {\n this.disconnectObserver();\n }\n\n /**\n * Scrolls the view to the section associated with the given `AnchorLinkDirective`\n * and sets it as the active link.\n *\n * @param anchor The `AnchorLinkDirective` instance representing the target anchor/section.\n * If null or if the anchor's ID is not found, a warning is logged and the method returns.\n */\n public scrollToAnchor(anchor: AnchorNavigationItemComponent | null): void {\n const anchorId = anchor?.href();\n if (!anchorId) {\n console.warn(`[AnchorNavigationService] Attempted to scroll to an anchor without an ID.`);\n return;\n }\n const anchorElement = this.scrollableContainer().querySelector(`#${CSS.escape(anchorId)}`) as HTMLElement | null;\n\n if (!anchorElement) {\n console.warn(`[AnchorNavigationService] Anchor with ID \"${anchorId}\" not found in the root container.`);\n return;\n }\n\n anchorElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n private initIntersectionObserver(root: HTMLElement | Document, threshold: number): void {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n }\n this.intersectionObserver = new IntersectionObserver((entries: IntersectionObserverEntry[]) => this.onIntersectionUpdate(entries), {\n root: root === this.windowRef.document ? null : root,\n threshold,\n });\n }\n\n private updateObservedElements(): void {\n if (!this.intersectionObserver) return;\n this.intersectionObserver.disconnect();\n this.intersectionStates.clear();\n\n const sections = this.targetScrollSections();\n sections.forEach((section) => {\n if (section) {\n this.intersectionStates.set(section, false);\n this.intersectionObserver!.observe(section);\n }\n });\n }\n\n private onIntersectionUpdate(entries: IntersectionObserverEntry[]): void {\n entries.forEach((entry) => this.intersectionStates.set(entry.target, entry.isIntersecting));\n\n let newActiveCandidate: AnchorNavigationItemComponent | null = null;\n const currentSections = this.targetScrollSections();\n for (const section of currentSections) {\n if (this.intersectionStates.get(section) === true) {\n newActiveCandidate = this.projectedAnchorLinks().find((link) => link.href() === section.id) || null;\n break;\n }\n }\n\n if (this.activeAnchorLink() !== newActiveCandidate) this.activeAnchorLink.set(newActiveCandidate);\n }\n\n private findTargetScrollSections(): HTMLElement[] {\n const currentLinks = this.projectedAnchorLinks();\n if (!currentLinks.length) return [];\n\n const selectors = currentLinks\n .map((link) => link.href())\n .filter(Boolean)\n .map((id) => `#${CSS.escape(id)}`)\n .join(',');\n return selectors ? Array.from(this.scrollableContainer().querySelectorAll<HTMLElement>(selectors)) : [];\n }\n\n private disconnectObserver(): void {\n this.intersectionObserver?.disconnect();\n this.intersectionObserver = undefined;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { LinkDirective } from '@odx/angular/components/link';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { AnchorNavigationService } from '../anchor-navigation.service';\n\n@CSSComponent('anchor-navigation-item')\n@Component({\n selector: 'odx-anchor-navigation-item',\n templateUrl: './anchor-navigation-item.component.html',\n standalone: true,\n imports: [LinkDirective],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.is-active]': 'isActive()',\n },\n})\nexport class AnchorNavigationItemComponent {\n private readonly navigationService = inject(AnchorNavigationService);\n public readonly element = injectElement();\n\n public href = input.required<string>();\n public isActive = computed(() => this.navigationService.activeAnchorLink() === this);\n\n protected handleClick(e: Event): void {\n e.preventDefault();\n this.navigationService.scrollToAnchor(this);\n }\n}\n","<a odxLink [href]=\"'#' + href()\" (click)=\"handleClick($event)\" (keydown.space)=\"handleClick($event)\" [attr.aria-current]=\"isActive() ? 'page' : null\">\n <ng-content />\n</a>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, contentChildren, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { AnchorNavigationService } from './anchor-navigation.service';\nimport { AnchorNavigationItemComponent } from './components';\n\n@CSSComponent('anchor-navigation')\n@Component({\n selector: 'odx-anchor-navigation',\n templateUrl: './anchor-navigation.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n providers: [AnchorNavigationService],\n host: {\n '[class.odx-anchor-navigation--vertical]': 'vertical()',\n '[attr.role]': '\"navigation\"',\n },\n})\nexport class AnchorNavigationComponent {\n private readonly service = inject(AnchorNavigationService);\n public readonly element = injectElement();\n\n /**\n * A Signal with list of `AnchorLinkDirective` instances projected into this component.\n * These are the anchor links that this navigation component will manage.\n */\n public readonly projectedAnchorLinks = contentChildren(AnchorNavigationItemComponent);\n\n /**\n * Input to determine if the anchor navigation should be displayed vertically.\n * Defaults to `false` (horizontal).\n */\n public vertical = input<boolean, boolean>(false, { transform: booleanAttribute });\n\n /**\n * Input to specify the threshold for the IntersectionObserver.\n * This determines how much of the target element must be visible before it is considered intersecting.\n * Defaults to `0.5` (50% visibility).\n */\n public threshold = input<number, number>(0.5, {\n transform: (value: number) => Math.max(0, Math.min(value, 1)),\n });\n\n /**\n * Input to specify the scrollable container element or document whose scroll position\n * is used to determine the active anchor link. If not provided, defaults to the\n * `document` of the current window.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n public scrollableContainer = input<HTMLElement | Document | undefined>(undefined, { alias: 'root' });\n\n public readonly activeAnchorLink = this.service.activeAnchorLink;\n\n constructor() {\n effect(\n () => {\n this.service.projectedAnchorLinks.set(this.projectedAnchorLinks());\n this.service.threshold.set(this.threshold());\n const rcInput = this.scrollableContainer();\n\n if (rcInput !== undefined) {\n this.service.scrollableContainer.set(rcInput);\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n /**\n * Scrolls the view to the section associated with the given `AnchorLinkDirective`.\n * @param anchor The `AnchorLinkDirective` instance representing the target anchor/section.\n */\n public scrollToAnchor(anchor: AnchorNavigationItemComponent): void {\n this.service.scrollToAnchor(anchor);\n }\n}\n","<ng-content select=\"odx-anchor-navigation-item\" />\n","import { NgModule } from '@angular/core';\nimport { AnchorNavigationComponent } from './anchor-navigation.component';\nimport { AnchorNavigationItemComponent } from './components';\n\nconst modules = [AnchorNavigationComponent, AnchorNavigationItemComponent];\n\n@NgModule({\n imports: modules,\n exports: modules,\n})\nexport class AnchorNavigationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-anchor-navigation.mjs","sources":["../../../../libs/angular/components/anchor-navigation/src/anchor-navigation.service.ts","../../../../libs/angular/components/anchor-navigation/src/components/anchor-navigation-item.component.ts","../../../../libs/angular/components/anchor-navigation/src/components/anchor-navigation-item.component.html","../../../../libs/angular/components/anchor-navigation/src/anchor-navigation.component.ts","../../../../libs/angular/components/anchor-navigation/src/anchor-navigation.component.html","../../../../libs/angular/components/anchor-navigation/src/anchor-navigation.module.ts","../../../../libs/angular/components/anchor-navigation/src/odx-angular-components-anchor-navigation.ts"],"sourcesContent":["import { computed, effect, inject, Injectable, OnDestroy, Signal, signal, WritableSignal } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { AnchorNavigationItemComponent } from './components/anchor-navigation-item.component';\n\n@Injectable()\nexport class AnchorNavigationService implements OnDestroy {\n private readonly windowRef = inject(WindowRef);\n private intersectionObserver?: IntersectionObserver;\n private readonly intersectionStates = signal<Record<string, boolean>>({});\n\n private readonly targetScrollSections = computed<HTMLElement[]>(() => this.findTargetScrollSections());\n\n /**\n * @internal\n * A WritableSignal holding the threshold for the IntersectionObserver.\n * This determines how much of the target element must be visible before it is considered intersecting.\n * Defaults to 0.5 (50% visibility).\n */\n public readonly threshold = signal(0.5);\n\n /**\n * A WritableSignal holding the scrollable container element or document.\n * This is set by the AnchorNavigationComponent.\n * Defaults to the window's document.\n */\n public scrollableContainer: WritableSignal<HTMLElement | Document> = signal(this.windowRef.document);\n\n /**\n * A WritableSignal holding an array of `AnchorLinkDirective` instances.\n * These are the links managed by the service, typically set by the `AnchorNavigationComponent`\n * based on its projected content.\n */\n public projectedAnchorLinks: WritableSignal<readonly AnchorNavigationItemComponent[]> = signal([]);\n\n /**\n * A readonly Signal indicating the currently active AnchorLinkDirective.\n * This is updated by the service based on scroll position and intersection.\n */\n public readonly activeAnchorLink: Signal<AnchorNavigationItemComponent | null> = computed<AnchorNavigationItemComponent | null>(() => {\n const states = this.intersectionStates();\n const sections = this.targetScrollSections();\n const projectedLinks = this.projectedAnchorLinks();\n\n const activeSection = sections.find((section) => states[section.id]);\n return activeSection ? projectedLinks.find((link) => link.href() === activeSection.id) || null : null;\n });\n\n constructor() {\n effect(\n (onCleanup) => {\n const currentRoot = this.scrollableContainer();\n const currentLinks = this.projectedAnchorLinks();\n const threshold = this.threshold();\n\n if (!currentLinks.length) {\n this.disconnectObserver();\n return;\n }\n\n this.initIntersectionObserver(currentRoot, threshold);\n this.updateObservedElements();\n\n onCleanup(() => {\n this.disconnectObserver();\n });\n },\n { allowSignalWrites: true },\n );\n }\n\n public ngOnDestroy(): void {\n this.disconnectObserver();\n }\n\n /**\n * Scrolls the view to the section associated with the given `AnchorLinkDirective`\n * and sets it as the active link.\n *\n * @param anchor The `AnchorLinkDirective` instance representing the target anchor/section.\n * If null or if the anchor's ID is not found, a warning is logged and the method returns.\n */\n public scrollToAnchor(anchor: AnchorNavigationItemComponent | null): void {\n const anchorId = anchor?.href();\n if (!anchorId) {\n console.warn(`[AnchorNavigationService] Attempted to scroll to an anchor without an ID.`);\n return;\n }\n const anchorElement = this.scrollableContainer().querySelector(`#${CSS.escape(anchorId)}`) as HTMLElement | null;\n\n if (!anchorElement) {\n console.warn(`[AnchorNavigationService] Anchor with ID \"${anchorId}\" not found in the root container.`);\n return;\n }\n\n anchorElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n\n private initIntersectionObserver(root: HTMLElement | Document, threshold: number): void {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n }\n this.intersectionObserver = new IntersectionObserver((entries: IntersectionObserverEntry[]) => this.onIntersectionUpdate(entries), {\n root: root === this.windowRef.document ? null : root,\n threshold,\n });\n }\n\n private updateObservedElements(): void {\n if (!this.intersectionObserver) return;\n this.intersectionObserver.disconnect();\n\n const sections = this.targetScrollSections();\n const initialStates: Record<string, boolean> = {};\n sections.forEach((section) => {\n if (section) {\n initialStates[section.id] = false;\n this.intersectionObserver!.observe(section);\n }\n });\n this.intersectionStates.set(initialStates);\n }\n\n private onIntersectionUpdate(entries: IntersectionObserverEntry[]): void {\n const newStates = entries.reduce<Record<string, boolean>>(\n (states, { target, isIntersecting }) => {\n if (target.id) {\n states[target.id] = isIntersecting;\n }\n return states;\n },\n { ...this.intersectionStates() },\n );\n this.intersectionStates.set(newStates);\n }\n\n private findTargetScrollSections(): HTMLElement[] {\n const currentLinks = this.projectedAnchorLinks();\n if (!currentLinks.length) return [];\n\n const selectors = currentLinks\n .map((link) => link.href())\n .filter(Boolean)\n .map((id) => `#${CSS.escape(id)}`)\n .join(',');\n return selectors ? Array.from(this.scrollableContainer().querySelectorAll<HTMLElement>(selectors)) : [];\n }\n\n private disconnectObserver(): void {\n this.intersectionObserver?.disconnect();\n this.intersectionObserver = undefined;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { LinkDirective } from '@odx/angular/components/link';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { AnchorNavigationService } from '../anchor-navigation.service';\n\n@CSSComponent('anchor-navigation-item')\n@Component({\n selector: 'odx-anchor-navigation-item',\n templateUrl: './anchor-navigation-item.component.html',\n standalone: true,\n imports: [LinkDirective],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.is-active]': 'isActive()',\n },\n})\nexport class AnchorNavigationItemComponent {\n private readonly navigationService = inject(AnchorNavigationService);\n public readonly element = injectElement();\n\n public href = input.required<string>();\n public isActive = computed(() => this.navigationService.activeAnchorLink() === this);\n\n protected handleClick(e: Event): void {\n e.preventDefault();\n this.navigationService.scrollToAnchor(this);\n }\n}\n","<a odxLink [href]=\"'#' + href()\" (click)=\"handleClick($event)\" (keydown.space)=\"handleClick($event)\" [attr.aria-current]=\"isActive() ? 'page' : null\">\n <ng-content />\n</a>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, contentChildren, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\nimport { AnchorNavigationService } from './anchor-navigation.service';\nimport { AnchorNavigationItemComponent } from './components';\n\n@CSSComponent('anchor-navigation')\n@Component({\n selector: 'odx-anchor-navigation',\n templateUrl: './anchor-navigation.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n providers: [AnchorNavigationService],\n host: {\n '[class.odx-anchor-navigation--vertical]': 'vertical()',\n '[attr.role]': '\"navigation\"',\n },\n})\nexport class AnchorNavigationComponent {\n private readonly service = inject(AnchorNavigationService);\n public readonly element = injectElement();\n\n /**\n * A Signal with list of `AnchorLinkDirective` instances projected into this component.\n * These are the anchor links that this navigation component will manage.\n */\n public readonly projectedAnchorLinks = contentChildren(AnchorNavigationItemComponent);\n\n /**\n * Input to determine if the anchor navigation should be displayed vertically.\n * Defaults to `false` (horizontal).\n */\n public vertical = input<boolean, boolean>(false, { transform: booleanAttribute });\n\n /**\n * Input to specify the threshold for the IntersectionObserver.\n * This determines how much of the target element must be visible before it is considered intersecting.\n * Defaults to `0.5` (50% visibility).\n */\n public threshold = input<number, number>(0.5, {\n transform: (value: number) => Math.max(0, Math.min(value, 1)),\n });\n\n /**\n * Input to specify the scrollable container element or document whose scroll position\n * is used to determine the active anchor link. If not provided, defaults to the\n * `document` of the current window.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n public scrollableContainer = input<HTMLElement | Document | undefined>(undefined, { alias: 'root' });\n\n public readonly activeAnchorLink = this.service.activeAnchorLink;\n\n constructor() {\n effect(\n () => {\n this.service.projectedAnchorLinks.set(this.projectedAnchorLinks());\n this.service.threshold.set(this.threshold());\n const rcInput = this.scrollableContainer();\n\n if (rcInput !== undefined) {\n this.service.scrollableContainer.set(rcInput);\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n /**\n * Scrolls the view to the section associated with the given `AnchorLinkDirective`.\n * @param anchor The `AnchorLinkDirective` instance representing the target anchor/section.\n */\n public scrollToAnchor(anchor: AnchorNavigationItemComponent): void {\n this.service.scrollToAnchor(anchor);\n }\n}\n","<ng-content select=\"odx-anchor-navigation-item\" />\n","import { NgModule } from '@angular/core';\nimport { AnchorNavigationComponent } from './anchor-navigation.component';\nimport { AnchorNavigationItemComponent } from './components';\n\nconst modules = [AnchorNavigationComponent, AnchorNavigationItemComponent];\n\n@NgModule({\n imports: modules,\n exports: modules,\n})\nexport class AnchorNavigationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odx/angular",
|
|
3
|
-
"version": "12.17.
|
|
3
|
+
"version": "12.17.1",
|
|
4
4
|
"author": "Drägerwerk AG & Co.KGaA",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"peerDependencies": {
|
|
@@ -412,18 +412,18 @@
|
|
|
412
412
|
"esm": "./esm2022/components/rich-list/odx-angular-components-rich-list.mjs",
|
|
413
413
|
"default": "./fesm2022/odx-angular-components-rich-list.mjs"
|
|
414
414
|
},
|
|
415
|
-
"./components/select": {
|
|
416
|
-
"types": "./components/select/index.d.ts",
|
|
417
|
-
"esm2022": "./esm2022/components/select/odx-angular-components-select.mjs",
|
|
418
|
-
"esm": "./esm2022/components/select/odx-angular-components-select.mjs",
|
|
419
|
-
"default": "./fesm2022/odx-angular-components-select.mjs"
|
|
420
|
-
},
|
|
421
415
|
"./components/search-bar": {
|
|
422
416
|
"types": "./components/search-bar/index.d.ts",
|
|
423
417
|
"esm2022": "./esm2022/components/search-bar/odx-angular-components-search-bar.mjs",
|
|
424
418
|
"esm": "./esm2022/components/search-bar/odx-angular-components-search-bar.mjs",
|
|
425
419
|
"default": "./fesm2022/odx-angular-components-search-bar.mjs"
|
|
426
420
|
},
|
|
421
|
+
"./components/select": {
|
|
422
|
+
"types": "./components/select/index.d.ts",
|
|
423
|
+
"esm2022": "./esm2022/components/select/odx-angular-components-select.mjs",
|
|
424
|
+
"esm": "./esm2022/components/select/odx-angular-components-select.mjs",
|
|
425
|
+
"default": "./fesm2022/odx-angular-components-select.mjs"
|
|
426
|
+
},
|
|
427
427
|
"./components/slider": {
|
|
428
428
|
"types": "./components/slider/index.d.ts",
|
|
429
429
|
"esm2022": "./esm2022/components/slider/odx-angular-components-slider.mjs",
|