@mmstack/router-core 20.4.1 → 21.0.0

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.
@@ -144,10 +144,10 @@ function leafRoutes() {
144
144
  }
145
145
  class RouteLeafStore {
146
146
  leaves = leafRoutes();
147
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RouteLeafStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
148
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RouteLeafStore, providedIn: 'root' });
147
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: RouteLeafStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
148
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: RouteLeafStore, providedIn: 'root' });
149
149
  }
150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: RouteLeafStore, decorators: [{
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: RouteLeafStore, decorators: [{
151
151
  type: Injectable,
152
152
  args: [{
153
153
  providedIn: 'root',
@@ -283,10 +283,10 @@ class BreadcrumbStore {
283
283
  register(breadcrumb) {
284
284
  this.map.inline((m) => m.set(breadcrumb.id, breadcrumb));
285
285
  }
286
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: BreadcrumbStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
287
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: BreadcrumbStore, providedIn: 'root' });
286
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BreadcrumbStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
287
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BreadcrumbStore, providedIn: 'root' });
288
288
  }
289
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: BreadcrumbStore, decorators: [{
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: BreadcrumbStore, decorators: [{
290
290
  type: Injectable,
291
291
  args: [{
292
292
  providedIn: 'root',
@@ -577,10 +577,10 @@ class PreloadRequester {
577
577
  startPreload(routePath) {
578
578
  this.preloadOnDemand$.next(routePath);
579
579
  }
580
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PreloadRequester, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
581
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PreloadRequester, providedIn: 'root' });
580
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PreloadRequester, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
581
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PreloadRequester, providedIn: 'root' });
582
582
  }
583
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PreloadRequester, decorators: [{
583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PreloadRequester, decorators: [{
584
584
  type: Injectable,
585
585
  args: [{ providedIn: 'root' }]
586
586
  }] });
@@ -620,10 +620,10 @@ class PreloadStrategy {
620
620
  const predicate = createRoutePredicate(fp);
621
621
  return this.req.preloadRequested$.pipe(filter$1((path) => path === fp || predicate(path)), take(1), switchMap(() => load()), finalize(() => this.loading.delete(fp)));
622
622
  }
623
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PreloadStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
624
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PreloadStrategy, providedIn: 'root' });
623
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PreloadStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
624
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PreloadStrategy, providedIn: 'root' });
625
625
  }
626
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: PreloadStrategy, decorators: [{
626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PreloadStrategy, decorators: [{
627
627
  type: Injectable,
628
628
  args: [{
629
629
  providedIn: 'root',
@@ -745,10 +745,10 @@ class Link {
745
745
  untracked(this.beforeNavigate)?.();
746
746
  return this.routerLink?.onClick(button, ctrlKey, shiftKey, altKey, metaKey);
747
747
  }
748
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: Link, deps: [], target: i0.ɵɵFactoryTarget.Directive });
749
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: Link, isStandalone: true, selector: "[mmLink]", inputs: { target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: "queryParams", publicName: "queryParams", isSignal: true, isRequired: false, transformFunction: null }, fragment: { classPropertyName: "fragment", publicName: "fragment", isSignal: true, isRequired: false, transformFunction: null }, queryParamsHandling: { classPropertyName: "queryParamsHandling", publicName: "queryParamsHandling", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, info: { classPropertyName: "info", publicName: "info", isSignal: true, isRequired: false, transformFunction: null }, relativeTo: { classPropertyName: "relativeTo", publicName: "relativeTo", isSignal: true, isRequired: false, transformFunction: null }, skipLocationChange: { classPropertyName: "skipLocationChange", publicName: "skipLocationChange", isSignal: true, isRequired: false, transformFunction: null }, replaceUrl: { classPropertyName: "replaceUrl", publicName: "replaceUrl", isSignal: true, isRequired: false, transformFunction: null }, mmLink: { classPropertyName: "mmLink", publicName: "mmLink", isSignal: true, isRequired: false, transformFunction: null }, preloadOn: { classPropertyName: "preloadOn", publicName: "preloadOn", isSignal: true, isRequired: false, transformFunction: null }, useMouseDown: { classPropertyName: "useMouseDown", publicName: "useMouseDown", isSignal: true, isRequired: false, transformFunction: null }, beforeNavigate: { classPropertyName: "beforeNavigate", publicName: "beforeNavigate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { preloading: "preloading" }, host: { listeners: { "mouseenter": "onHover()", "mousedown": "onMouseDown($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)", "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" } }, exportAs: ["mmLink"], hostDirectives: [{ directive: i1.RouterLink, inputs: ["routerLink", "mmLink", "target", "target", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "relativeTo", "relativeTo", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl"] }], ngImport: i0 });
748
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: Link, deps: [], target: i0.ɵɵFactoryTarget.Directive });
749
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.0", type: Link, isStandalone: true, selector: "[mmLink]", inputs: { target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: "queryParams", publicName: "queryParams", isSignal: true, isRequired: false, transformFunction: null }, fragment: { classPropertyName: "fragment", publicName: "fragment", isSignal: true, isRequired: false, transformFunction: null }, queryParamsHandling: { classPropertyName: "queryParamsHandling", publicName: "queryParamsHandling", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, info: { classPropertyName: "info", publicName: "info", isSignal: true, isRequired: false, transformFunction: null }, relativeTo: { classPropertyName: "relativeTo", publicName: "relativeTo", isSignal: true, isRequired: false, transformFunction: null }, skipLocationChange: { classPropertyName: "skipLocationChange", publicName: "skipLocationChange", isSignal: true, isRequired: false, transformFunction: null }, replaceUrl: { classPropertyName: "replaceUrl", publicName: "replaceUrl", isSignal: true, isRequired: false, transformFunction: null }, mmLink: { classPropertyName: "mmLink", publicName: "mmLink", isSignal: true, isRequired: false, transformFunction: null }, preloadOn: { classPropertyName: "preloadOn", publicName: "preloadOn", isSignal: true, isRequired: false, transformFunction: null }, useMouseDown: { classPropertyName: "useMouseDown", publicName: "useMouseDown", isSignal: true, isRequired: false, transformFunction: null }, beforeNavigate: { classPropertyName: "beforeNavigate", publicName: "beforeNavigate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { preloading: "preloading" }, host: { listeners: { "mouseenter": "onHover()", "mousedown": "onMouseDown($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)", "click": "onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)" } }, exportAs: ["mmLink"], hostDirectives: [{ directive: i1.RouterLink, inputs: ["routerLink", "mmLink", "target", "target", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "relativeTo", "relativeTo", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl"] }], ngImport: i0 });
750
750
  }
751
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: Link, decorators: [{
751
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: Link, decorators: [{
752
752
  type: Directive,
753
753
  args: [{
754
754
  selector: '[mmLink]',
@@ -773,7 +773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
773
773
  },
774
774
  ],
775
775
  }]
776
- }], ctorParameters: () => [], propDecorators: { onMouseDown: [{
776
+ }], ctorParameters: () => [], propDecorators: { target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], queryParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "queryParams", required: false }] }], fragment: [{ type: i0.Input, args: [{ isSignal: true, alias: "fragment", required: false }] }], queryParamsHandling: [{ type: i0.Input, args: [{ isSignal: true, alias: "queryParamsHandling", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], info: [{ type: i0.Input, args: [{ isSignal: true, alias: "info", required: false }] }], relativeTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "relativeTo", required: false }] }], skipLocationChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "skipLocationChange", required: false }] }], replaceUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "replaceUrl", required: false }] }], mmLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "mmLink", required: false }] }], preloadOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "preloadOn", required: false }] }], useMouseDown: [{ type: i0.Input, args: [{ isSignal: true, alias: "useMouseDown", required: false }] }], beforeNavigate: [{ type: i0.Input, args: [{ isSignal: true, alias: "beforeNavigate", required: false }] }], preloading: [{ type: i0.Output, args: ["preloading"] }], onMouseDown: [{
777
777
  type: HostListener,
778
778
  args: ['mousedown', [
779
779
  '$event.button',
@@ -955,10 +955,10 @@ class TitleStore {
955
955
  register(id, titleFn) {
956
956
  this.map.inline((m) => m.set(id, titleFn));
957
957
  }
958
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: TitleStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
959
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: TitleStore, providedIn: 'root' });
958
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TitleStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
959
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TitleStore, providedIn: 'root' });
960
960
  }
961
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: TitleStore, decorators: [{
961
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TitleStore, decorators: [{
962
962
  type: Injectable,
963
963
  args: [{
964
964
  providedIn: 'root',
@@ -1 +1 @@
1
- {"version":3,"file":"mmstack-router-core.mjs","sources":["../tmp-esm2022/lib/breadcrumb/breadcrumb-config.js","../tmp-esm2022/lib/url.js","../tmp-esm2022/lib/util/leaf.store.js","../tmp-esm2022/lib/breadcrumb/breadcrumb.js","../tmp-esm2022/lib/breadcrumb/breadcrumb-store.js","../tmp-esm2022/lib/util/create-route-predicate.js","../tmp-esm2022/lib/util/find-path.js","../tmp-esm2022/lib/util/snapshot-path.js","../tmp-esm2022/lib/breadcrumb/breadcrumb-resolver.js","../tmp-esm2022/lib/preloading/preload-requester.js","../tmp-esm2022/lib/preloading/preload-strategy.js","../tmp-esm2022/lib/link.js","../tmp-esm2022/lib/query-param.js","../tmp-esm2022/lib/title/title-config.js","../tmp-esm2022/lib/title/title-store.js","../tmp-esm2022/mmstack-router-core.js"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n/**\n * @internal\n */\nconst token = new InjectionToken('MMSTACK_BREADCRUMB_CONFIG');\n/**\n * Provides configuration for the breadcrumb system.\n * @param config - A partial `BreadcrumbConfig` object with the desired settings. *\n * @see BreadcrumbConfig\n * @example\n * ```typescript\n * // In your app.module.ts or a standalone component's providers:\n * // import { provideBreadcrumbConfig } from './breadcrumb.config'; // Adjust path\n * // import { ResolvedLeafRoute } from './breadcrumb.type'; // Adjust path\n *\n * // const customLabelStrategy: GenerateBreadcrumbFn = () => {\n * // return (leaf: ResolvedLeafRoute): string => {\n * // // Example: Prioritize a 'navTitle' data property\n * // if (leaf.route.data?.['navTitle']) {\n * // return leaf.route.data['navTitle'];\n * // }\n * // // Fallback to a default mechanism\n * // return leaf.route.title || leaf.segment.resolved || 'Unnamed';\n * // };\n * // };\n *\n * export const appConfig = [\n * // ...rest\n * provideBreadcrumbConfig({\n * generation: customLabelStrategy, // or 'manual' to disable auto-generation\n * }),\n * ]\n * ```\n */\nexport function provideBreadcrumbConfig(config) {\n return {\n provide: token,\n useValue: {\n ...config,\n },\n };\n}\n/**\n * @internal\n */\nexport function injectBreadcrumbConfig() {\n return (inject(token, {\n optional: true,\n }) ?? {});\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFxQ3ZEOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQW1CLDJCQUEyQixDQUFDLENBQUM7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBaUM7SUFDdkUsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFO1lBQ1IsR0FBRyxNQUFNO1NBQ1Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPLENBQ0wsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxJQUFJLEVBQUUsQ0FDVCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVzb2x2ZWRMZWFmUm91dGUgfSBmcm9tICcuLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGN1c3RvbSBsYWJlbCBnZW5lcmF0aW9uIGZ1bmN0aW9uLlxyXG4gKiBUaGUgb3V0ZXIgZnVuY3Rpb24gaXMgY2FsbGVkIGluIGEgcm9vdCBpbmplY3Rpb24gY29udGV4dFxyXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gdGFrZXMgYSBgUmVzb2x2ZWRMZWFmUm91dGVgIGFuZCBwcm9kdWNlcyBhIHN0cmluZyBsYWJlbCBmb3IgdGhlIGJyZWFkY3J1bWIuXHJcbiAqIEFzIHRoZSBpbm5lciBmdW5jdGlvbiBpcyB3cmFwcGVkIGluIGEgY29tcHV0ZWQsIGNoYW5nZXMgdG8gc2lnbmFscyBjYWxsZWQgd2l0aGluIGl0IHdpbGwgdXBkYXRlIHRoZSBicmVhZGNydW1iIGxhYmVsIHJlYWN0aXZlbHkuXHJcbiAqL1xyXG50eXBlIEdlbmVyYXRlQnJlYWRjcnVtYkZuID0gKCkgPT4gKGxlYWY6IFJlc29sdmVkTGVhZlJvdXRlKSA9PiBzdHJpbmc7XHJcblxyXG4vKipcclxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYnJlYWRjcnVtYiBzeXN0ZW0uXHJcbiAqIFVzZSBgcHJvdmlkZUJyZWFkY3J1bWJDb25maWdgIHRvIHN1cHBseSB0aGVzZSBvcHRpb25zIHRvIHlvdXIgYXBwbGljYXRpb24uXHJcbiAqL1xyXG5cclxuZXhwb3J0IHR5cGUgQnJlYWRjcnVtYkNvbmZpZyA9IHtcclxuICAvKipcclxuICAgKiBEZWZpbmVzIGhvdyBicmVhZGNydW1iIGxhYmVscyBhcmUgZ2VuZXJhdGVkLlxyXG4gICAqIC0gSWYgc2V0IHRvIGAnbWFudWFsJ2AsIGJyZWFkY3J1bWJzIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgaWYgbWFudWFsbHkgcmVnaXN0ZXJlZFxyXG4gICAqIHZpYSBgY3JlYXRlQnJlYWRjcnVtYmAuIEF1dG9tYXRpYyBnZW5lcmF0aW9uIGJhc2VkIG9uIHJvdXRlcyBpcyBkaXNhYmxlZC5cclxuICAgKiAtIEFsdGVybmF0aXZlbHkgcHJvdmlkZSBhIGN1c3RvbSBsYWJlbCBnZW5lcmF0aW9uIGZ1bmN0aW9uXHJcbiAgICogSWYgbGVmdCB1bmRlZmluZWQsIHRoZSBzeXN0ZW0gd2lsbCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGxhYmVscyBiYXNlZCBvbiB0aGUgcm91dGUncyB0aXRsZSwgZGF0YSwgb3IgcGF0aC5cclxuICAgKiBAc2VlIEdlbmVyYXRlQnJlYWRjcnVtYkZuXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICogLy8gRm9yIGN1c3RvbSBsYWJlbCBnZW5lcmF0aW9uOlxyXG4gICAqIC8vIGNvbnN0IG15Q3VzdG9tTGFiZWxHZW5lcmF0b3IgPSAoKSA9PiAobGVhZjogUmVzb2x2ZWRMZWFmUm91dGUpID0+IHtcclxuICAgKiAvLyAgIHJldHVybiBsZWFmLnJvdXRlLmRhdGE/LlsnY3VzdG9tVGl0bGUnXSB8fCBsZWFmLnJvdXRlLnJvdXRlQ29uZmlnPy5wYXRoIHx8ICdEZWZhdWx0JztcclxuICAgKiAvLyB9O1xyXG4gICAqIC8vXHJcbiAgICogLy8gY29uZmlnOiB7IGdlbmVyYXRpb246IG15Q3VzdG9tTGFiZWxHZW5lcmF0b3IgfVxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIGdlbmVyYXRpb24/OiAnbWFudWFsJyB8IEdlbmVyYXRlQnJlYWRjcnVtYkZuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuY29uc3QgdG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48QnJlYWRjcnVtYkNvbmZpZz4oJ01NU1RBQ0tfQlJFQURDUlVNQl9DT05GSUcnKTtcclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciB0aGUgYnJlYWRjcnVtYiBzeXN0ZW0uXHJcbiAqIEBwYXJhbSBjb25maWcgLSBBIHBhcnRpYWwgYEJyZWFkY3J1bWJDb25maWdgIG9iamVjdCB3aXRoIHRoZSBkZXNpcmVkIHNldHRpbmdzLiAqXHJcbiAqIEBzZWUgQnJlYWRjcnVtYkNvbmZpZ1xyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIC8vIEluIHlvdXIgYXBwLm1vZHVsZS50cyBvciBhIHN0YW5kYWxvbmUgY29tcG9uZW50J3MgcHJvdmlkZXJzOlxyXG4gKiAvLyBpbXBvcnQgeyBwcm92aWRlQnJlYWRjcnVtYkNvbmZpZyB9IGZyb20gJy4vYnJlYWRjcnVtYi5jb25maWcnOyAvLyBBZGp1c3QgcGF0aFxyXG4gKiAvLyBpbXBvcnQgeyBSZXNvbHZlZExlYWZSb3V0ZSB9IGZyb20gJy4vYnJlYWRjcnVtYi50eXBlJzsgLy8gQWRqdXN0IHBhdGhcclxuICpcclxuICogLy8gY29uc3QgY3VzdG9tTGFiZWxTdHJhdGVneTogR2VuZXJhdGVCcmVhZGNydW1iRm4gPSAoKSA9PiB7XHJcbiAqIC8vICAgcmV0dXJuIChsZWFmOiBSZXNvbHZlZExlYWZSb3V0ZSk6IHN0cmluZyA9PiB7XHJcbiAqIC8vICAgICAvLyBFeGFtcGxlOiBQcmlvcml0aXplIGEgJ25hdlRpdGxlJyBkYXRhIHByb3BlcnR5XHJcbiAqIC8vICAgICBpZiAobGVhZi5yb3V0ZS5kYXRhPy5bJ25hdlRpdGxlJ10pIHtcclxuICogLy8gICAgICAgcmV0dXJuIGxlYWYucm91dGUuZGF0YVsnbmF2VGl0bGUnXTtcclxuICogLy8gICAgIH1cclxuICogLy8gICAgIC8vIEZhbGxiYWNrIHRvIGEgZGVmYXVsdCBtZWNoYW5pc21cclxuICogLy8gICAgIHJldHVybiBsZWFmLnJvdXRlLnRpdGxlIHx8IGxlYWYuc2VnbWVudC5yZXNvbHZlZCB8fCAnVW5uYW1lZCc7XHJcbiAqIC8vICAgfTtcclxuICogLy8gfTtcclxuICpcclxuICogZXhwb3J0IGNvbnN0IGFwcENvbmZpZyA9IFtcclxuICogIC8vIC4uLnJlc3RcclxuICogIHByb3ZpZGVCcmVhZGNydW1iQ29uZmlnKHtcclxuICogICBnZW5lcmF0aW9uOiBjdXN0b21MYWJlbFN0cmF0ZWd5LCAvLyBvciAnbWFudWFsJyB0byBkaXNhYmxlIGF1dG8tZ2VuZXJhdGlvblxyXG4gKiAgfSksXHJcbiAqIF1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUJyZWFkY3J1bWJDb25maWcoY29uZmlnOiBQYXJ0aWFsPEJyZWFkY3J1bWJDb25maWc+KSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHByb3ZpZGU6IHRva2VuLFxyXG4gICAgdXNlVmFsdWU6IHtcclxuICAgICAgLi4uY29uZmlnLFxyXG4gICAgfSxcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0QnJlYWRjcnVtYkNvbmZpZygpOiBCcmVhZGNydW1iQ29uZmlnIHtcclxuICByZXR1cm4gKFxyXG4gICAgaW5qZWN0KHRva2VuLCB7XHJcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gICAgfSkgPz8ge31cclxuICApO1xyXG59XHJcbiJdfQ==","import { inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { EventType, Router, } from '@angular/router';\nimport { filter, map } from 'rxjs/operators';\n/**\n * Type guard to check if a Router Event is a NavigationEnd event.\n * @internal\n */\nfunction isNavigationEnd(e) {\n return 'type' in e && e.type === EventType.NavigationEnd;\n}\n/**\n * Creates a Signal that tracks the current router URL.\n *\n * The signal emits the URL string reflecting the router state *after* redirects\n * have completed for each successful navigation. It initializes with the router's\n * current URL state.\n *\n * @returns {Signal<string>} A Signal emitting the `urlAfterRedirects` upon successful navigation.\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { url } from '@mmstack/router-core'; // Adjust import path\n *\n * @Component({\n * selector: 'app-root',\n * template: `Current URL: {{ currentUrl() }}`\n * })\n * export class AppComponent {\n * currentUrl = url();\n *\n * constructor() {\n * effect(() => {\n * console.log('Navigation ended. New URL:', this.currentUrl());\n * // e.g., track page view with analytics\n * });\n * }\n * }\n * ```\n */\nexport function url() {\n const router = inject(Router);\n return toSignal(router.events.pipe(filter(isNavigationEnd), map((e) => e.urlAfterRedirects)), {\n initialValue: router.url,\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi91cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEdBQ1AsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLENBQVE7SUFDL0IsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLGFBQWEsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBTSxVQUFVLEdBQUc7SUFDakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlCLE9BQU8sUUFBUSxDQUNiLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZUFBZSxDQUFDLEVBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQ2hDLEVBQ0Q7UUFDRSxZQUFZLEVBQUUsTUFBTSxDQUFDLEdBQUc7S0FDekIsQ0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgdHlwZSBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7XHJcbiAgdHlwZSBFdmVudCxcclxuICBFdmVudFR5cGUsXHJcbiAgdHlwZSBOYXZpZ2F0aW9uRW5kLFxyXG4gIFJvdXRlcixcclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKlxyXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgUm91dGVyIEV2ZW50IGlzIGEgTmF2aWdhdGlvbkVuZCBldmVudC5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5mdW5jdGlvbiBpc05hdmlnYXRpb25FbmQoZTogRXZlbnQpOiBlIGlzIE5hdmlnYXRpb25FbmQge1xyXG4gIHJldHVybiAndHlwZScgaW4gZSAmJiBlLnR5cGUgPT09IEV2ZW50VHlwZS5OYXZpZ2F0aW9uRW5kO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIFNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgY3VycmVudCByb3V0ZXIgVVJMLlxyXG4gKlxyXG4gKiBUaGUgc2lnbmFsIGVtaXRzIHRoZSBVUkwgc3RyaW5nIHJlZmxlY3RpbmcgdGhlIHJvdXRlciBzdGF0ZSAqYWZ0ZXIqIHJlZGlyZWN0c1xyXG4gKiBoYXZlIGNvbXBsZXRlZCBmb3IgZWFjaCBzdWNjZXNzZnVsIG5hdmlnYXRpb24uIEl0IGluaXRpYWxpemVzIHdpdGggdGhlIHJvdXRlcidzXHJcbiAqIGN1cnJlbnQgVVJMIHN0YXRlLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7U2lnbmFsPHN0cmluZz59IEEgU2lnbmFsIGVtaXR0aW5nIHRoZSBgdXJsQWZ0ZXJSZWRpcmVjdHNgIHVwb24gc3VjY2Vzc2Z1bCBuYXZpZ2F0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKiBpbXBvcnQgeyB1cmwgfSBmcm9tICdAbW1zdGFjay9yb3V0ZXItY29yZSc7IC8vIEFkanVzdCBpbXBvcnQgcGF0aFxyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtcm9vdCcsXHJcbiAqIHRlbXBsYXRlOiBgQ3VycmVudCBVUkw6IHt7IGN1cnJlbnRVcmwoKSB9fWBcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XHJcbiAqIGN1cnJlbnRVcmwgPSB1cmwoKTtcclxuICpcclxuICogY29uc3RydWN0b3IoKSB7XHJcbiAqIGVmZmVjdCgoKSA9PiB7XHJcbiAqIGNvbnNvbGUubG9nKCdOYXZpZ2F0aW9uIGVuZGVkLiBOZXcgVVJMOicsIHRoaXMuY3VycmVudFVybCgpKTtcclxuICogLy8gZS5nLiwgdHJhY2sgcGFnZSB2aWV3IHdpdGggYW5hbHl0aWNzXHJcbiAqIH0pO1xyXG4gKiB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXJsKCk6IFNpZ25hbDxzdHJpbmc+IHtcclxuICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHJcbiAgcmV0dXJuIHRvU2lnbmFsKFxyXG4gICAgcm91dGVyLmV2ZW50cy5waXBlKFxyXG4gICAgICBmaWx0ZXIoaXNOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgbWFwKChlKSA9PiBlLnVybEFmdGVyUmVkaXJlY3RzKSxcclxuICAgICksXHJcbiAgICB7XHJcbiAgICAgIGluaXRpYWxWYWx1ZTogcm91dGVyLnVybCxcclxuICAgIH0sXHJcbiAgKTtcclxufVxyXG4iXX0=","import { computed, inject, Injectable } from '@angular/core';\nimport { Router, } from '@angular/router';\nimport { url } from '../url';\nimport * as i0 from \"@angular/core\";\nfunction leafRoutes() {\n const router = inject(Router);\n const getLeafRoutes = (snapshot) => {\n const routes = [];\n let route = snapshot.root;\n const processed = new Set();\n while (route) {\n const allSegments = route.pathFromRoot.flatMap((snap) => snap.routeConfig?.path ?? []);\n const segments = allSegments.filter(Boolean);\n const path = router.serializeUrl(router.parseUrl(segments.join('/')));\n if (processed.has(path)) {\n route = route.firstChild;\n continue;\n }\n processed.add(path);\n const parts = route.pathFromRoot\n .flatMap((snap) => snap.url ?? [])\n .map((u) => u.path)\n .filter(Boolean);\n const link = router.serializeUrl(router.parseUrl(parts.join('/')));\n routes.push({\n route,\n segment: {\n path: segments.at(-1) ?? '',\n resolved: parts.at(-1) ?? '',\n },\n path,\n link,\n });\n route = route.firstChild;\n }\n return routes;\n };\n const currentUrl = url();\n const leafRoutes = computed(() => {\n currentUrl();\n return getLeafRoutes(router.routerState.snapshot);\n }, ...(ngDevMode ? [{ debugName: \"leafRoutes\" }] : []));\n return leafRoutes;\n}\nexport class RouteLeafStore {\n leaves = leafRoutes();\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: RouteLeafStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: RouteLeafStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: RouteLeafStore, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\nexport function injectLeafRoutes() {\n const store = inject(RouteLeafStore);\n return store.leaves;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZi5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvdXRpbC9sZWFmLnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBRUwsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFlN0IsU0FBUyxVQUFVO0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixNQUFNLGFBQWEsR0FBRyxDQUNwQixRQUE2QixFQUNSLEVBQUU7UUFDdkIsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBa0MsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRXBDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDNUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FDdkMsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRFLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDekIsU0FBUztZQUNYLENBQUM7WUFDRCxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZO2lCQUM3QixPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO2lCQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ2xCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVuQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkUsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixLQUFLO2dCQUNMLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtpQkFDN0I7Z0JBQ0QsSUFBSTtnQkFDSixJQUFJO2FBQ0wsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBRXpCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDL0IsVUFBVSxFQUFFLENBQUM7UUFDYixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUMsc0RBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFLRCxNQUFNLE9BQU8sY0FBYztJQUNoQixNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7dUdBRHBCLGNBQWM7MkdBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQUtELE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0YWJsZSwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyB1cmwgfSBmcm9tICcuLi91cmwnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRMZWFmUm91dGUgPSB7XHJcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XHJcbiAgc2VnbWVudDoge1xyXG4gICAgcGF0aDogc3RyaW5nO1xyXG4gICAgcmVzb2x2ZWQ6IHN0cmluZztcclxuICB9O1xyXG4gIHBhdGg6IHN0cmluZztcclxuICBsaW5rOiBzdHJpbmc7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBsZWFmUm91dGVzKCk6IFNpZ25hbDxSZXNvbHZlZExlYWZSb3V0ZVtdPiB7XHJcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIGNvbnN0IGdldExlYWZSb3V0ZXMgPSAoXHJcbiAgICBzbmFwc2hvdDogUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICApOiBSZXNvbHZlZExlYWZSb3V0ZVtdID0+IHtcclxuICAgIGNvbnN0IHJvdXRlczogUmVzb2x2ZWRMZWFmUm91dGVbXSA9IFtdO1xyXG4gICAgbGV0IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCA9IHNuYXBzaG90LnJvb3Q7XHJcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgICB3aGlsZSAocm91dGUpIHtcclxuICAgICAgY29uc3QgYWxsU2VnbWVudHMgPSByb3V0ZS5wYXRoRnJvbVJvb3QuZmxhdE1hcChcclxuICAgICAgICAoc25hcCkgPT4gc25hcC5yb3V0ZUNvbmZpZz8ucGF0aCA/PyBbXSxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYWxsU2VnbWVudHMuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgY29uc3QgcGF0aCA9IHJvdXRlci5zZXJpYWxpemVVcmwocm91dGVyLnBhcnNlVXJsKHNlZ21lbnRzLmpvaW4oJy8nKSkpO1xyXG5cclxuICAgICAgaWYgKHByb2Nlc3NlZC5oYXMocGF0aCkpIHtcclxuICAgICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgcHJvY2Vzc2VkLmFkZChwYXRoKTtcclxuXHJcbiAgICAgIGNvbnN0IHBhcnRzID0gcm91dGUucGF0aEZyb21Sb290XHJcbiAgICAgICAgLmZsYXRNYXAoKHNuYXApID0+IHNuYXAudXJsID8/IFtdKVxyXG4gICAgICAgIC5tYXAoKHUpID0+IHUucGF0aClcclxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgY29uc3QgbGluayA9IHJvdXRlci5zZXJpYWxpemVVcmwocm91dGVyLnBhcnNlVXJsKHBhcnRzLmpvaW4oJy8nKSkpO1xyXG5cclxuICAgICAgcm91dGVzLnB1c2goe1xyXG4gICAgICAgIHJvdXRlLFxyXG4gICAgICAgIHNlZ21lbnQ6IHtcclxuICAgICAgICAgIHBhdGg6IHNlZ21lbnRzLmF0KC0xKSA/PyAnJyxcclxuICAgICAgICAgIHJlc29sdmVkOiBwYXJ0cy5hdCgtMSkgPz8gJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXRoLFxyXG4gICAgICAgIGxpbmssXHJcbiAgICAgIH0pO1xyXG4gICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJvdXRlcztcclxuICB9O1xyXG5cclxuICBjb25zdCBjdXJyZW50VXJsID0gdXJsKCk7XHJcblxyXG4gIGNvbnN0IGxlYWZSb3V0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjdXJyZW50VXJsKCk7XHJcbiAgICByZXR1cm4gZ2V0TGVhZlJvdXRlcyhyb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QpO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gbGVhZlJvdXRlcztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvdXRlTGVhZlN0b3JlIHtcclxuICByZWFkb25seSBsZWF2ZXMgPSBsZWFmUm91dGVzKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RMZWFmUm91dGVzKCkge1xyXG4gIGNvbnN0IHN0b3JlID0gaW5qZWN0KFJvdXRlTGVhZlN0b3JlKTtcclxuICByZXR1cm4gc3RvcmUubGVhdmVzO1xyXG59XHJcbiJdfQ==","/**\n * @internal\n */\nconst INTERNAL_BREADCRUMB_SYMBOL = Symbol.for('MMSTACK_INTERNAL_BREADCRUMB');\n/**\n * @internal\n */\nexport function getBreadcrumbInternals(breadcrumb) {\n return breadcrumb[INTERNAL_BREADCRUMB_SYMBOL];\n}\n/**\n * @internal\n */\nexport function createInternalBreadcrumb(bc, active, registered = true) {\n return {\n ...bc,\n [INTERNAL_BREADCRUMB_SYMBOL]: {\n active,\n registered,\n },\n };\n}\n/**\n * @internal\n */\nexport function isInternalBreadcrumb(breadcrumb) {\n return !!breadcrumb[INTERNAL_BREADCRUMB_SYMBOL];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQThCQTs7R0FFRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBWTdFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFVBQThCO0lBQ25FLE9BQVEsVUFBaUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsRUFBYyxFQUNkLE1BQXVCLEVBQ3ZCLFVBQVUsR0FBRyxJQUFJO0lBRWpCLE9BQU87UUFDTCxHQUFHLEVBQUU7UUFDTCxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDNUIsTUFBTTtZQUNOLFVBQVU7U0FDWDtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFVBQTJDO0lBRTNDLE9BQU8sQ0FBQyxDQUFFLFVBQWlDLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUMxRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGJyZWFkY3J1bWIgaXRlbSB3aXRoaW4gdGhlIG5hdmlnYXRpb24gcGF0aC5cclxuICogQWxsIGR5bmFtaWMgcHJvcGVydGllcyBhcmUgcmVwcmVzZW50ZWQgYXMgQW5ndWxhciBTaWduYWxzIHRvIGVuYWJsZSByZWFjdGl2aXR5LlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQnJlYWRjcnVtYiA9IHtcclxuICAvKipcclxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYnJlYWRjcnVtYiBpdGVtLiBHZW5lcmFsbHkgdGhlIHVucmVzb2x2ZWQgcGF0aCBmb3IgZXhhbXBsZSBgL3Bvc3RzLzppZGAuXHJcbiAgICogVXNlZnVsIGZvciBgQGZvcmAgdHJhY2tpbmcgaW4gdGVtcGxhdGVzLlxyXG4gICAqL1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVGhlIHZpc2libGUgdGV4dCBmb3IgdGhlIGJyZWFkY3J1bWIgaXRlbS5cclxuICAgKiBVcGRhdGVkIHJlYWN0aXZlbHkgYXMgdGhlIHVybC9saW5rIGJhc2VkIG9uXHJcbiAgICogZWl0aGVyIGEgcHJvdmlkZWQgZGVmaW5pdGlvbiwgb3IgdGhlIGN1cnJlbnQgcm91dGUuXHJcbiAgICovXHJcbiAgbGFiZWw6IFNpZ25hbDxzdHJpbmc+O1xyXG4gIC8qKlxyXG4gICAqIEFuIGFjY2Vzc2libGUgbGFiZWwgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0uXHJcbiAgICogRGVmYXVsdHMgdG8gdGhlIHNhbWUgdmFsdWUgYXMgYGxhYmVsYCBpZiBub3QgcHJvdmlkZWQuXHJcbiAgICovXHJcbiAgYXJpYUxhYmVsOiBTaWduYWw8c3RyaW5nPjtcclxuICAvKipcclxuICAgKiBUaGUgVVJMIGxpbmsgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0uXHJcbiAgICogVXBkYXRlcyBhcyB0aGUgcm91dGUgY2hhbmdlcy5cclxuICAgKi9cclxuICBsaW5rOiBTaWduYWw8c3RyaW5nPjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNvbnN0IElOVEVSTkFMX0JSRUFEQ1JVTUJfU1lNQk9MID0gU3ltYm9sLmZvcignTU1TVEFDS19JTlRFUk5BTF9CUkVBRENSVU1CJyk7XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJbnRlcm5hbEJyZWFkY3J1bWIgPSBCcmVhZGNydW1iICYge1xyXG4gIFtJTlRFUk5BTF9CUkVBRENSVU1CX1NZTUJPTF06IHtcclxuICAgIGFjdGl2ZTogU2lnbmFsPGJvb2xlYW4+O1xyXG4gICAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcclxuICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFkY3J1bWJJbnRlcm5hbHMoYnJlYWRjcnVtYjogSW50ZXJuYWxCcmVhZGNydW1iKSB7XHJcbiAgcmV0dXJuIChicmVhZGNydW1iIGFzIEludGVybmFsQnJlYWRjcnVtYilbSU5URVJOQUxfQlJFQURDUlVNQl9TWU1CT0xdO1xyXG59XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW50ZXJuYWxCcmVhZGNydW1iKFxyXG4gIGJjOiBCcmVhZGNydW1iLFxyXG4gIGFjdGl2ZTogU2lnbmFsPGJvb2xlYW4+LFxyXG4gIHJlZ2lzdGVyZWQgPSB0cnVlLFxyXG4pOiBJbnRlcm5hbEJyZWFkY3J1bWIge1xyXG4gIHJldHVybiB7XHJcbiAgICAuLi5iYyxcclxuICAgIFtJTlRFUk5BTF9CUkVBRENSVU1CX1NZTUJPTF06IHtcclxuICAgICAgYWN0aXZlLFxyXG4gICAgICByZWdpc3RlcmVkLFxyXG4gICAgfSxcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcm5hbEJyZWFkY3J1bWIoXHJcbiAgYnJlYWRjcnVtYjogQnJlYWRjcnVtYiB8IEludGVybmFsQnJlYWRjcnVtYixcclxuKTogYnJlYWRjcnVtYiBpcyBJbnRlcm5hbEJyZWFkY3J1bWIge1xyXG4gIHJldHVybiAhIShicmVhZGNydW1iIGFzIEludGVybmFsQnJlYWRjcnVtYilbSU5URVJOQUxfQlJFQURDUlVNQl9TWU1CT0xdO1xyXG59XHJcbiJdfQ==","import { computed, inject, Injectable } from '@angular/core';\nimport { mapArray, mutable } from '@mmstack/primitives';\nimport { injectLeafRoutes } from '../util/leaf.store';\nimport { createInternalBreadcrumb, getBreadcrumbInternals, isInternalBreadcrumb, } from './breadcrumb';\nimport { injectBreadcrumbConfig } from './breadcrumb-config';\nimport * as i0 from \"@angular/core\";\nfunction uppercaseFirst(str) {\n const lcs = str.toLowerCase();\n return lcs.charAt(0).toUpperCase() + lcs.slice(1);\n}\nfunction removeMatrixAndQueryParams(path) {\n const [cleanPath] = path.split(';');\n return cleanPath.split('?')[0];\n}\nfunction parsePathSegment(pathSegment) {\n return pathSegment\n .split('/')\n .flatMap((part) => part.split('.'))\n .flatMap((part) => part.split('-'))\n .map((part) => uppercaseFirst(removeMatrixAndQueryParams(part)))\n .join(' ');\n}\nfunction generateLabel(leaf) {\n const title = leaf.route.title ?? leaf.route.data?.['title'];\n if (title && typeof title === 'string')\n return title;\n if (leaf.segment.path.includes(':'))\n return leaf.segment.resolved;\n return parsePathSegment(leaf.segment.path);\n}\nfunction autoGenerateBreadcrumb(id, leaf, autoGenerateFn) {\n const label = computed(() => autoGenerateFn()(leaf()), ...(ngDevMode ? [{ debugName: \"label\" }] : []));\n return createInternalBreadcrumb({\n id,\n label,\n ariaLabel: label,\n link: computed(() => leaf().link),\n }, computed(() => leaf().route.data?.['skipBreadcrumb'] !== true &&\n id !== '' &&\n id !== '/' &&\n leaf().segment.path !== '' &&\n leaf().segment.path !== '/' &&\n !leaf().segment.path.endsWith('/') &&\n !!label()));\n}\nfunction injectGenerateLabelFn() {\n const { generation } = injectBreadcrumbConfig();\n if (typeof generation !== 'function')\n return computed(() => generateLabel);\n const provided = generation();\n return computed(() => provided);\n}\nfunction injectIsManual() {\n return injectBreadcrumbConfig().generation === 'manual';\n}\nfunction exposeActiveSignal(crumbSignal, manual) {\n const active = manual\n ? computed(() => {\n const crumb = crumbSignal();\n return (isInternalBreadcrumb(crumb) &&\n getBreadcrumbInternals(crumb).registered &&\n getBreadcrumbInternals(crumb).active());\n })\n : computed(() => {\n const crumb = crumbSignal();\n if (!isInternalBreadcrumb(crumb))\n return true;\n return getBreadcrumbInternals(crumb).active();\n });\n const sig = crumbSignal;\n sig.active = active;\n return sig;\n}\nexport class BreadcrumbStore {\n map = mutable(new Map());\n isManual = injectIsManual();\n autoGenerateLabelFn = injectGenerateLabelFn();\n leafRoutes = injectLeafRoutes();\n all = mapArray(this.leafRoutes, (leaf) => {\n const stableId = computed(() => leaf().path, ...(ngDevMode ? [{ debugName: \"stableId\" }] : []));\n return exposeActiveSignal(computed(() => {\n const id = stableId();\n const found = this.map().get(id);\n if (!found)\n return autoGenerateBreadcrumb(id, leaf, this.autoGenerateLabelFn);\n if (!id.includes(':'))\n return found;\n return {\n ...found,\n link: computed(() => leaf().link),\n };\n }, {\n equal: (a, b) => a.id === b.id,\n }), this.isManual);\n }, {\n equal: (a, b) => a.link === b.link,\n });\n crumbs = computed(() => this.all().filter((c) => c.active()), ...(ngDevMode ? [{ debugName: \"crumbs\" }] : []));\n unwrapped = computed(() => this.crumbs().map((c) => c()), ...(ngDevMode ? [{ debugName: \"unwrapped\" }] : []));\n register(breadcrumb) {\n this.map.inline((m) => m.set(breadcrumb.id, breadcrumb));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: BreadcrumbStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: BreadcrumbStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: BreadcrumbStore, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n/**\n * Injects and provides access to a reactive list of breadcrumbs.\n *\n * The breadcrumbs are ordered and reflect the current active navigation path.\n * @see Breadcrumb\n * @returns `Signal<Breadcrumb[]>`\n *\n * @example\n * ```typescript\n * @Component({\n * selector: 'app-breadcrumbs',\n * template: `\n * <nav aria-label=\"breadcrumb\">\n * <ol>\n * @for (crumb of breadcrumbs(); track crumb.id) {\n * <li>\n * <a [href]=\"crumb.link()\" [attr.aria-label]=\"crumb.ariaLabel()\">{{ crumb.label() }}</a>\n * </li>\n * }\n * </ol>\n * </nav>\n * `\n * })\n * export class MyBreadcrumbsComponent {\n * breadcrumbs = injectBreadcrumbs();\n * }\n * ```\n */\nexport function injectBreadcrumbs() {\n const store = inject(BreadcrumbStore);\n return store.unwrapped;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RSxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUV0QixvQkFBb0IsR0FDckIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBRTdELFNBQVMsY0FBYyxDQUFDLEdBQVc7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLElBQVk7SUFDOUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFdBQW1CO0lBQzNDLE9BQU8sV0FBVztTQUNmLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxD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Q25COztBQW9ERDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgaW5qZWN0LCBJbmplY3RhYmxlLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbWFwQXJyYXksIG11dGFibGUgfSBmcm9tICdAbW1zdGFjay9wcmltaXRpdmVzJztcclxuaW1wb3J0IHsgaW5qZWN0TGVhZlJvdXRlcywgUmVzb2x2ZWRMZWFmUm91dGUgfSBmcm9tICcuLi91dGlsL2xlYWYuc3RvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEJyZWFkY3J1bWIsXHJcbiAgY3JlYXRlSW50ZXJuYWxCcmVhZGNydW1iLFxyXG4gIGdldEJyZWFkY3J1bWJJbnRlcm5hbHMsXHJcbiAgSW50ZXJuYWxCcmVhZGNydW1iLFxyXG4gIGlzSW50ZXJuYWxCcmVhZGNydW1iLFxyXG59IGZyb20gJy4vYnJlYWRjcnVtYic7XHJcbmltcG9ydCB7IGluamVjdEJyZWFkY3J1bWJDb25maWcgfSBmcm9tICcuL2JyZWFkY3J1bWItY29uZmlnJztcclxuXHJcbmZ1bmN0aW9uIHVwcGVyY2FzZUZpcnN0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBsY3MgPSBzdHIudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gbGNzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbGNzLnNsaWNlKDEpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVNYXRyaXhBbmRRdWVyeVBhcmFtcyhwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGNvbnN0IFtjbGVhblBhdGhdID0gcGF0aC5zcGxpdCgnOycpO1xyXG4gIHJldHVybiBjbGVhblBhdGguc3BsaXQoJz8nKVswXTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VQYXRoU2VnbWVudChwYXRoU2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gcGF0aFNlZ21lbnRcclxuICAgIC5zcGxpdCgnLycpXHJcbiAgICAuZmxhdE1hcCgocGFydCkgPT4gcGFydC5zcGxpdCgnLicpKVxyXG4gICAgLmZsYXRNYXAoKHBhcnQpID0+IHBhcnQuc3BsaXQoJy0nKSlcclxuICAgIC5tYXAoKHBhcnQpID0+IHVwcGVyY2FzZUZpcnN0KHJlbW92ZU1hdHJpeEFuZFF1ZXJ5UGFyYW1zKHBhcnQpKSlcclxuICAgIC5qb2luKCcgJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdlbmVyYXRlTGFiZWwobGVhZjogUmVzb2x2ZWRMZWFmUm91dGUpOiBzdHJpbmcge1xyXG4gIGNvbnN0IHRpdGxlID0gbGVhZi5yb3V0ZS50aXRsZSA/PyBsZWFmLnJvdXRlLmRhdGE/LlsndGl0bGUnXTtcclxuXHJcbiAgaWYgKHRpdGxlICYmIHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZycpIHJldHVybiB0aXRsZTtcclxuICBpZiAobGVhZi5zZWdtZW50LnBhdGguaW5jbHVkZXMoJzonKSkgcmV0dXJuIGxlYWYuc2VnbWVudC5yZXNvbHZlZDtcclxuXHJcbiAgcmV0dXJuIHBhcnNlUGF0aFNlZ21lbnQobGVhZi5zZWdtZW50LnBhdGgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhdXRvR2VuZXJhdGVCcmVhZGNydW1iKFxyXG4gIGlkOiBzdHJpbmcsXHJcbiAgbGVhZjogU2lnbmFsPFJlc29sdmVkTGVhZlJvdXRlPixcclxuICBhdXRvR2VuZXJhdGVGbjogU2lnbmFsPChsZWFmOiBSZXNvbHZlZExlYWZSb3V0ZSkgPT4gc3RyaW5nPixcclxuKTogQnJlYWRjcnVtYiB7XHJcbiAgY29uc3QgbGFiZWwgPSBjb21wdXRlZCgoKSA9PiBhdXRvR2VuZXJhdGVGbigpKGxlYWYoKSkpO1xyXG5cclxuICByZXR1cm4gY3JlYXRlSW50ZXJuYWxCcmVhZGNydW1iKFxyXG4gICAge1xyXG4gICAgICBpZCxcclxuICAgICAgbGFiZWwsXHJcbiAgICAgIGFyaWFMYWJlbDogbGFiZWwsXHJcbiAgICAgIGxpbms6IGNvbXB1dGVkKCgpID0+IGxlYWYoKS5saW5rKSxcclxuICAgIH0sXHJcbiAgICBjb21wdXRlZChcclxuICAgICAgKCkgPT5cclxuICAgICAgICBsZWFmKCkucm91dGUuZGF0YT8uWydza2lwQnJlYWRjcnVtYiddICE9PSB0cnVlICYmXHJcbiAgICAgICAgaWQgIT09ICcnICYmXHJcbiAgICAgICAgaWQgIT09ICcvJyAmJlxyXG4gICAgICAgIGxlYWYoKS5zZWdtZW50LnBhdGggIT09ICcnICYmXHJcbiAgICAgICAgbGVhZigpLnNlZ21lbnQucGF0aCAhPT0gJy8nICYmXHJcbiAgICAgICAgIWxlYWYoKS5zZWdtZW50LnBhdGguZW5kc1dpdGgoJy8nKSAmJlxyXG4gICAgICAgICEhbGFiZWwoKSxcclxuICAgICksXHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5qZWN0R2VuZXJhdGVMYWJlbEZuKCkge1xyXG4gIGNvbnN0IHsgZ2VuZXJhdGlvbiB9ID0gaW5qZWN0QnJlYWRjcnVtYkNvbmZpZygpO1xyXG5cclxuICBpZiAodHlwZW9mIGdlbmVyYXRpb24gIT09ICdmdW5jdGlvbicpIHJldHVybiBjb21wdXRlZCgoKSA9PiBnZW5lcmF0ZUxhYmVsKTtcclxuXHJcbiAgY29uc3QgcHJvdmlkZWQgPSBnZW5lcmF0aW9uKCk7XHJcbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHByb3ZpZGVkKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5qZWN0SXNNYW51YWwoKSB7XHJcbiAgcmV0dXJuIGluamVjdEJyZWFkY3J1bWJDb25maWcoKS5nZW5lcmF0aW9uID09PSAnbWFudWFsJztcclxufVxyXG5cclxuZnVuY3Rpb24gZXhwb3NlQWN0aXZlU2lnbmFsKFxyXG4gIGNydW1iU2lnbmFsOiBTaWduYWw8QnJlYWRjcnVtYj4sXHJcbiAgbWFudWFsOiBib29sZWFuLFxyXG4pOiBTaWduYWw8QnJlYWRjcnVtYj4gJiB7XHJcbiAgYWN0aXZlOiBTaWduYWw8Ym9vbGVhbj47XHJcbn0ge1xyXG4gIGNvbnN0IGFjdGl2ZSA9IG1hbnVhbFxyXG4gICAgPyBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3J1bWIgPSBjcnVtYlNpZ25hbCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgaXNJbnRlcm5hbEJyZWFkY3J1bWIoY3J1bWIpICYmXHJcbiAgICAgICAgICBnZXRCcmVhZGNydW1iSW50ZXJuYWxzKGNydW1iKS5yZWdpc3RlcmVkICYmXHJcbiAgICAgICAgICBnZXRCcmVhZGNydW1iSW50ZXJuYWxzKGNydW1iKS5hY3RpdmUoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICA6IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgICBjb25zdCBjcnVtYiA9IGNydW1iU2lnbmFsKCk7XHJcbiAgICAgICAgaWYgKCFpc0ludGVybmFsQnJlYWRjcnVtYihjcnVtYikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBnZXRCcmVhZGNydW1iSW50ZXJuYWxzKGNydW1iKS5hY3RpdmUoKTtcclxuICAgICAgfSk7XHJcblxyXG4gIGNvbnN0IHNpZyA9IGNydW1iU2lnbmFsIGFzIFNpZ25hbDxCcmVhZGNydW1iPiAmIHtcclxuICAgIGFjdGl2ZTogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIH07XHJcblxyXG4gIHNpZy5hY3RpdmUgPSBhY3RpdmU7XHJcblxyXG4gIHJldHVybiBzaWc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1iU3RvcmUge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwID0gbXV0YWJsZTxNYXA8c3RyaW5nLCBJbnRlcm5hbEJyZWFkY3J1bWI+PihuZXcgTWFwKCkpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNNYW51YWwgPSBpbmplY3RJc01hbnVhbCgpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b0dlbmVyYXRlTGFiZWxGbiA9IGluamVjdEdlbmVyYXRlTGFiZWxGbigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGVhZlJvdXRlcyA9IGluamVjdExlYWZSb3V0ZXMoKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBhbGwgPSBtYXBBcnJheShcclxuICAgIHRoaXMubGVhZlJvdXRlcyxcclxuICAgIChsZWFmKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0YWJsZUlkID0gY29tcHV0ZWQoKCkgPT4gbGVhZigpLnBhdGgpO1xyXG5cclxuICAgICAgcmV0dXJuIGV4cG9zZUFjdGl2ZVNpZ25hbChcclxuICAgICAgICBjb21wdXRlZChcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBzdGFibGVJZCgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLm1hcCgpLmdldChpZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWZvdW5kKVxyXG4gICAgICAgICAgICAgIHJldHVybiBhdXRvR2VuZXJhdGVCcmVhZGNydW1iKGlkLCBsZWFmLCB0aGlzLmF1dG9HZW5lcmF0ZUxhYmVsRm4pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpZC5pbmNsdWRlcygnOicpKSByZXR1cm4gZm91bmQ7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLmZvdW5kLFxyXG4gICAgICAgICAgICAgIGxpbms6IGNvbXB1dGVkKCgpID0+IGxlYWYoKS5saW5rKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGVxdWFsOiAoYSwgYikgPT4gYS5pZCA9PT0gYi5pZCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0aGlzLmlzTWFudWFsLFxyXG4gICAgICApO1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgZXF1YWw6IChhLCBiKSA9PiBhLmxpbmsgPT09IGIubGluayxcclxuICAgIH0sXHJcbiAgKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjcnVtYnMgPSBjb21wdXRlZCgoKTogU2lnbmFsPEJyZWFkY3J1bWI+W10gPT5cclxuICAgIHRoaXMuYWxsKCkuZmlsdGVyKChjKSA9PiBjLmFjdGl2ZSgpKSxcclxuICApO1xyXG5cclxuICByZWFkb25seSB1bndyYXBwZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNydW1icygpLm1hcCgoYykgPT4gYygpKSk7XHJcblxyXG4gIHJlZ2lzdGVyKGJyZWFkY3J1bWI6IEludGVybmFsQnJlYWRjcnVtYikge1xyXG4gICAgdGhpcy5tYXAuaW5saW5lKChtKSA9PiBtLnNldChicmVhZGNydW1iLmlkLCBicmVhZGNydW1iKSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogSW5qZWN0cyBhbmQgcHJvdmlkZXMgYWNjZXNzIHRvIGEgcmVhY3RpdmUgbGlzdCBvZiBicmVhZGNydW1icy5cclxuICpcclxuICogVGhlIGJyZWFkY3J1bWJzIGFyZSBvcmRlcmVkIGFuZCByZWZsZWN0IHRoZSBjdXJyZW50IGFjdGl2ZSBuYXZpZ2F0aW9uIHBhdGguXHJcbiAqIEBzZWUgQnJlYWRjcnVtYlxyXG4gKiBAcmV0dXJucyBgU2lnbmFsPEJyZWFkY3J1bWJbXT5gXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogQENvbXBvbmVudCh7XHJcbiAqIHNlbGVjdG9yOiAnYXBwLWJyZWFkY3J1bWJzJyxcclxuICogdGVtcGxhdGU6IGBcclxuICogIDxuYXYgYXJpYS1sYWJlbD1cImJyZWFkY3J1bWJcIj5cclxuICogICAgPG9sPlxyXG4gKiAgICAgIEBmb3IgKGNydW1iIG9mIGJyZWFkY3J1bWJzKCk7IHRyYWNrIGNydW1iLmlkKSB7XHJcbiAqICAgICAgICA8bGk+XHJcbiAqICAgICAgICAgIDxhIFtocmVmXT1cImNydW1iLmxpbmsoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiY3J1bWIuYXJpYUxhYmVsKClcIj57eyBjcnVtYi5sYWJlbCgpIH19PC9hPlxyXG4gKiAgICAgICAgPC9saT5cclxuICogICAgICB9XHJcbiAqICAgIDwvb2w+XHJcbiAqICA8L25hdj5cclxuICogYFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgTXlCcmVhZGNydW1ic0NvbXBvbmVudCB7XHJcbiAqICBicmVhZGNydW1icyA9IGluamVjdEJyZWFkY3J1bWJzKCk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0QnJlYWRjcnVtYnMoKSB7XHJcbiAgY29uc3Qgc3RvcmUgPSBpbmplY3QoQnJlYWRjcnVtYlN0b3JlKTtcclxuICByZXR1cm4gc3RvcmUudW53cmFwcGVkO1xyXG59XHJcbiJdfQ==","function parsePathSegment(segmentString) {\n const parts = segmentString.split(';');\n const pathPart = parts[0];\n const matrixParams = {};\n for (let i = 1; i < parts.length; i++) {\n const [key, value = 'true'] = parts[i].split('=');\n if (key) {\n matrixParams[key] = value;\n }\n }\n return { pathPart, matrixParams };\n}\nfunction createBasePredicate(path) {\n const partPredicates = path\n .split('/')\n .filter((part) => !!part.trim())\n .map((configSegmentString) => {\n const { pathPart: configPathPart, matrixParams: configMatrixParams } = parsePathSegment(configSegmentString);\n let singlePathPartPredicate;\n if (configPathPart.startsWith(':')) {\n singlePathPartPredicate = () => true;\n }\n else {\n singlePathPartPredicate = (linkSegmentPathPart) => linkSegmentPathPart === configPathPart;\n }\n const configSegmentHasMatrixParams = Object.keys(configMatrixParams).length > 0;\n return (linkSegmentString) => {\n const { pathPart: linkPathPart, matrixParams: linkMatrixParams } = parsePathSegment(linkSegmentString);\n if (!singlePathPartPredicate(linkPathPart)) {\n return false;\n }\n if (!configSegmentHasMatrixParams) {\n return true;\n }\n return Object.entries(configMatrixParams).every(([key, value]) => Object.prototype.hasOwnProperty.call(linkMatrixParams, key) &&\n linkMatrixParams[key] === value);\n };\n });\n return (path) => {\n const linkPathOnly = path.split(/[?#]/).at(0) ?? '';\n if (!linkPathOnly && partPredicates.length > 0)\n return false;\n if (!linkPathOnly && partPredicates.length === 0)\n return true;\n const parts = linkPathOnly.split('/').filter((part) => !!part.trim());\n if (parts.length < partPredicates.length)\n return false;\n return parts.every((seg, idx) => {\n const pred = partPredicates.at(idx);\n if (!pred)\n return true;\n return pred(seg);\n });\n };\n}\nfunction singleSegmentMatches(configSegment, linkSegment) {\n if (configSegment.pathPart === ':') {\n return true;\n }\n else if (configSegment.pathPart !== linkSegment.pathPart) {\n return false;\n }\n const configMatrix = configSegment.matrixParams;\n const linkMatrix = linkSegment.matrixParams;\n for (const key in configMatrix) {\n if (!Object.prototype.hasOwnProperty.call(linkMatrix, key) ||\n linkMatrix[key] !== configMatrix[key]) {\n return false;\n }\n }\n return true;\n}\nfunction matchSegmentsRecursive(configSegments, linkSegments, configIdx, linkIdx) {\n if (configIdx === configSegments.length) {\n return linkIdx === linkSegments.length;\n }\n if (linkIdx === linkSegments.length) {\n for (let i = configIdx; i < configSegments.length; i++) {\n if (configSegments[i].pathPart !== '**') {\n return false;\n }\n }\n return true;\n }\n const currentConfigSegment = configSegments[configIdx];\n if (currentConfigSegment.pathPart === '**') {\n if (matchSegmentsRecursive(configSegments, linkSegments, configIdx + 1, linkIdx)) {\n return true;\n }\n if (linkIdx < linkSegments.length) {\n if (matchSegmentsRecursive(configSegments, linkSegments, configIdx, linkIdx + 1)) {\n return true;\n }\n }\n return false;\n }\n else {\n if (linkIdx < linkSegments.length &&\n singleSegmentMatches(currentConfigSegment, linkSegments[linkIdx])) {\n return matchSegmentsRecursive(configSegments, linkSegments, configIdx + 1, linkIdx + 1);\n }\n return false;\n }\n}\nfunction createWildcardPredicate(path) {\n const configSegments = path\n .split('/')\n .filter((p) => !!p.trim())\n .map((segment) => parsePathSegment(segment));\n return (linkPath) => {\n const linkPathOnly = linkPath.split(/[?#]/).at(0) ?? '';\n const linkSegments = linkPathOnly\n .split('/')\n .filter((p) => !!p.trim())\n .map((segment) => parsePathSegment(segment));\n return matchSegmentsRecursive(configSegments, linkSegments, 0, 0);\n };\n}\nexport function createRoutePredicate(path) {\n return path.includes('**')\n ? createWildcardPredicate(path)\n : createBasePredicate(path);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJvdXRlLXByZWRpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvdXRpbC9jcmVhdGUtcm91dGUtcHJlZGljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsZ0JBQWdCLENBQUMsYUFBcUI7SUFJN0MsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxZQUFZLEdBQTJCLEVBQUUsQ0FBQztJQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLElBQVk7SUFDdkMsTUFBTSxjQUFjLEdBQUcsSUFBSTtTQUN4QixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQy9CLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLEVBQUU7UUFDM0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFB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Q0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN6QixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFL0MsT0FBTyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxJQUFZO0lBRVosT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcGFyc2VQYXRoU2VnbWVudChzZWdtZW50U3RyaW5nOiBzdHJpbmcpOiB7XHJcbiAgcGF0aFBhcnQ6IHN0cmluZztcclxuICBtYXRyaXhQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbn0ge1xyXG4gIGNvbnN0IHBhcnRzID0gc2VnbWVudFN0cmluZy5zcGxpdCgnOycpO1xyXG4gIGNvbnN0IHBhdGhQYXJ0ID0gcGFydHNbMF07XHJcbiAgY29uc3QgbWF0cml4UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgW2tleSwgdmFsdWUgPSAndHJ1ZSddID0gcGFydHNbaV0uc3BsaXQoJz0nKTtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgbWF0cml4UGFyYW1zW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHsgcGF0aFBhcnQsIG1hdHJpeFBhcmFtcyB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVCYXNlUHJlZGljYXRlKHBhdGg6IHN0cmluZyk6IChwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW4ge1xyXG4gIGNvbnN0IHBhcnRQcmVkaWNhdGVzID0gcGF0aFxyXG4gICAgLnNwbGl0KCcvJylcclxuICAgIC5maWx0ZXIoKHBhcnQpID0+ICEhcGFydC50cmltKCkpXHJcbiAgICAubWFwKChjb25maWdTZWdtZW50U3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgcGF0aFBhcnQ6IGNvbmZpZ1BhdGhQYXJ0LCBtYXRyaXhQYXJhbXM6IGNvbmZpZ01hdHJpeFBhcmFtcyB9ID1cclxuICAgICAgICBwYXJzZVBhdGhTZWdtZW50KGNvbmZpZ1NlZ21lbnRTdHJpbmcpO1xyXG5cclxuICAgICAgbGV0IHNpbmdsZVBhdGhQYXJ0UHJlZGljYXRlOiAobGlua1NlZ21lbnRQYXRoUGFydDogc3RyaW5nKSA9PiBib29sZWFuO1xyXG4gICAgICBpZiAoY29uZmlnUGF0aFBhcnQuc3RhcnRzV2l0aCgnOicpKSB7XHJcbiAgICAgICAgc2luZ2xlUGF0aFBhcnRQcmVkaWNhdGUgPSAoKSA9PiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNpbmdsZVBhdGhQYXJ0UHJlZGljYXRlID0gKGxpbmtTZWdtZW50UGF0aFBhcnQ6IHN0cmluZykgPT5cclxuICAgICAgICAgIGxpbmtTZWdtZW50UGF0aFBhcnQgPT09IGNvbmZpZ1BhdGhQYXJ0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb25maWdTZWdtZW50SGFzTWF0cml4UGFyYW1zID1cclxuICAgICAgICBPYmplY3Qua2V5cyhjb25maWdNYXRyaXhQYXJhbXMpLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICByZXR1cm4gKGxpbmtTZWdtZW50U3RyaW5nOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjb25zdCB7IHBhdGhQYXJ0OiBsaW5rUGF0aFBhcnQsIG1hdHJpeFBhcmFtczogbGlua01hdHJpeFBhcmFtcyB9ID1cclxuICAgICAgICAgIHBhcnNlUGF0aFNlZ21lbnQobGlua1NlZ21lbnRTdHJpbmcpO1xyXG5cclxuICAgICAgICBpZiAoIXNpbmdsZVBhdGhQYXJ0UHJlZGljYXRlKGxpbmtQYXRoUGFydCkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnU2VnbWVudEhhc01hdHJpeFBhcmFtcykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29uZmlnTWF0cml4UGFyYW1zKS5ldmVyeShcclxuICAgICAgICAgIChba2V5LCB2YWx1ZV0pID0+XHJcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsaW5rTWF0cml4UGFyYW1zLCBrZXkpICYmXHJcbiAgICAgICAgICAgIGxpbmtNYXRyaXhQYXJhbXNba2V5XSA9PT0gdmFsdWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4gKHBhdGg6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgbGlua1BhdGhPbmx5ID0gcGF0aC5zcGxpdCgvWz8jXS8pLmF0KDApID8/ICcnO1xyXG4gICAgaWYgKCFsaW5rUGF0aE9ubHkgJiYgcGFydFByZWRpY2F0ZXMubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCFsaW5rUGF0aE9ubHkgJiYgcGFydFByZWRpY2F0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBwYXJ0cyA9IGxpbmtQYXRoT25seS5zcGxpdCgnLycpLmZpbHRlcigocGFydCkgPT4gISFwYXJ0LnRyaW0oKSk7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgcGFydFByZWRpY2F0ZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHBhcnRzLmV2ZXJ5KChzZWcsIGlkeCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmVkID0gcGFydFByZWRpY2F0ZXMuYXQoaWR4KTtcclxuICAgICAgaWYgKCFwcmVkKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHByZWQoc2VnKTtcclxuICAgIH0pO1xyXG4gIH07XHJcbn1cclxuXHJcbnR5cGUgUGFyc2VkU2VnbWVudCA9IHtcclxuICBwYXRoUGFydDogc3RyaW5nO1xyXG4gIG1hdHJpeFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHNpbmdsZVNlZ21lbnRNYXRjaGVzKFxyXG4gIGNvbmZpZ1NlZ21lbnQ6IFBhcnNlZFNlZ21lbnQsXHJcbiAgbGlua1NlZ21lbnQ6IFBhcnNlZFNlZ21lbnQsXHJcbik6IGJvb2xlYW4ge1xyXG4gIGlmIChjb25maWdTZWdtZW50LnBhdGhQYXJ0ID09PSAnOicpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0gZWxzZSBpZiAoY29uZmlnU2VnbWVudC5wYXRoUGFydCAhPT0gbGlua1NlZ21lbnQucGF0aFBhcnQpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbmZpZ01hdHJpeCA9IGNvbmZpZ1NlZ21lbnQubWF0cml4UGFyYW1zO1xyXG4gIGNvbnN0IGxpbmtNYXRyaXggPSBsaW5rU2VnbWVudC5tYXRyaXhQYXJhbXM7XHJcbiAgZm9yIChjb25zdCBrZXkgaW4gY29uZmlnTWF0cml4KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGlua01hdHJpeCwga2V5KSB8fFxyXG4gICAgICBsaW5rTWF0cml4W2tleV0gIT09IGNvbmZpZ01hdHJpeFtrZXldXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShcclxuICBjb25maWdTZWdtZW50czogUGFyc2VkU2VnbWVudFtdLFxyXG4gIGxpbmtTZWdtZW50czogUGFyc2VkU2VnbWVudFtdLFxyXG4gIGNvbmZpZ0lkeDogbnVtYmVyLFxyXG4gIGxpbmtJZHg6IG51bWJlcixcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKGNvbmZpZ0lkeCA9PT0gY29uZmlnU2VnbWVudHMubGVuZ3RoKSB7XHJcbiAgICByZXR1cm4gbGlua0lkeCA9PT0gbGlua1NlZ21lbnRzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGlmIChsaW5rSWR4ID09PSBsaW5rU2VnbWVudHMubGVuZ3RoKSB7XHJcbiAgICBmb3IgKGxldCBpID0gY29uZmlnSWR4OyBpIDwgY29uZmlnU2VnbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGNvbmZpZ1NlZ21lbnRzW2ldLnBhdGhQYXJ0ICE9PSAnKionKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGN1cnJlbnRDb25maWdTZWdtZW50ID0gY29uZmlnU2VnbWVudHNbY29uZmlnSWR4XTtcclxuXHJcbiAgaWYgKGN1cnJlbnRDb25maWdTZWdtZW50LnBhdGhQYXJ0ID09PSAnKionKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIG1hdGNoU2VnbWVudHNSZWN1cnNpdmUoXHJcbiAgICAgICAgY29uZmlnU2VnbWVudHMsXHJcbiAgICAgICAgbGlua1NlZ21lbnRzLFxyXG4gICAgICAgIGNvbmZpZ0lkeCArIDEsXHJcbiAgICAgICAgbGlua0lkeCxcclxuICAgICAgKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsaW5rSWR4IDwgbGlua1NlZ21lbnRzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShcclxuICAgICAgICAgIGNvbmZpZ1NlZ21lbnRzLFxyXG4gICAgICAgICAgbGlua1NlZ21lbnRzLFxyXG4gICAgICAgICAgY29uZmlnSWR4LFxyXG4gICAgICAgICAgbGlua0lkeCArIDEsXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKFxyXG4gICAgICBsaW5rSWR4IDwgbGlua1NlZ21lbnRzLmxlbmd0aCAmJlxyXG4gICAgICBzaW5nbGVTZWdtZW50TWF0Y2hlcyhjdXJyZW50Q29uZmlnU2VnbWVudCwgbGlua1NlZ21lbnRzW2xpbmtJZHhdKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBtYXRjaFNlZ21lbnRzUmVjdXJzaXZlKFxyXG4gICAgICAgIGNvbmZpZ1NlZ21lbnRzLFxyXG4gICAgICAgIGxpbmtTZWdtZW50cyxcclxuICAgICAgICBjb25maWdJZHggKyAxLFxyXG4gICAgICAgIGxpbmtJZHggKyAxLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVdpbGRjYXJkUHJlZGljYXRlKHBhdGg6IHN0cmluZyk6IChsaW5rUGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcclxuICBjb25zdCBjb25maWdTZWdtZW50cyA9IHBhdGhcclxuICAgIC5zcGxpdCgnLycpXHJcbiAgICAuZmlsdGVyKChwKSA9PiAhIXAudHJpbSgpKVxyXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gcGFyc2VQYXRoU2VnbWVudChzZWdtZW50KSk7XHJcblxyXG4gIHJldHVybiAobGlua1BhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgbGlua1BhdGhPbmx5ID0gbGlua1BhdGguc3BsaXQoL1s/I10vKS5hdCgwKSA/PyAnJztcclxuICAgIGNvbnN0IGxpbmtTZWdtZW50cyA9IGxpbmtQYXRoT25seVxyXG4gICAgICAuc3BsaXQoJy8nKVxyXG4gICAgICAuZmlsdGVyKChwKSA9PiAhIXAudHJpbSgpKVxyXG4gICAgICAubWFwKChzZWdtZW50KSA9PiBwYXJzZVBhdGhTZWdtZW50KHNlZ21lbnQpKTtcclxuXHJcbiAgICByZXR1cm4gbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShjb25maWdTZWdtZW50cywgbGlua1NlZ21lbnRzLCAwLCAwKTtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVQcmVkaWNhdGUoXHJcbiAgcGF0aDogc3RyaW5nLFxyXG4pOiAobGlua1BhdGg6IHN0cmluZykgPT4gYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHBhdGguaW5jbHVkZXMoJyoqJylcclxuICAgID8gY3JlYXRlV2lsZGNhcmRQcmVkaWNhdGUocGF0aClcclxuICAgIDogY3JlYXRlQmFzZVByZWRpY2F0ZShwYXRoKTtcclxufVxyXG4iXX0=","// The following functions are adapted from ngx-quicklink,\n// (https://github.com/mgechev/ngx-quicklink)\n// Copyright (c) Minko Gechev and contributors, licensed under the MIT License.\nimport { PRIMARY_OUTLET } from '@angular/router';\nfunction isPrimaryRoute(route) {\n return route.outlet === PRIMARY_OUTLET || !route.outlet;\n}\nexport const findPath = (config, route) => {\n const configQueue = config.slice();\n const parent = new Map();\n const visited = new Set();\n while (configQueue.length) {\n const el = configQueue.shift();\n if (!el) {\n continue;\n }\n visited.add(el);\n if (el === route) {\n break;\n }\n (el.children || []).forEach((childRoute) => {\n if (!visited.has(childRoute)) {\n parent.set(childRoute, el);\n configQueue.push(childRoute);\n }\n });\n const lazyRoutes = el._loadedRoutes || [];\n if (Array.isArray(lazyRoutes)) {\n lazyRoutes.forEach((lazyRoute) => {\n if (lazyRoute && !visited.has(lazyRoute)) {\n parent.set(lazyRoute, el);\n configQueue.push(lazyRoute);\n }\n });\n }\n }\n let path = '';\n let currentRoute = route;\n while (currentRoute) {\n const currentPath = currentRoute.path || '';\n if (isPrimaryRoute(currentRoute)) {\n path = `/${currentPath}${path}`;\n }\n else {\n path = `/(${currentRoute.outlet}:${currentPath})${path}`;\n }\n currentRoute = parent.get(currentRoute);\n }\n let normalizedPath = path.replaceAll(/\\/+/g, '/');\n if (normalizedPath !== '/' && normalizedPath.endsWith('/')) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n return normalizedPath;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi91dGlsL2ZpbmQtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsNkNBQTZDO0FBQzdDLCtFQUErRTtBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsU0FBUyxjQUFjLENBQUMsS0FBWTtJQUNsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBZSxFQUFFLEtBQVksRUFBVSxFQUFFO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztJQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBUyxDQUFDO0lBRWpDLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixTQUFTO1FBQ1gsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFaEIsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakIsTUFBTTtRQUNSLENBQUM7UUFFRCxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBaUIsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFJLEVBQVUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFnQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN6QyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDMUIsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxJQUFJLFlBQVksR0FBc0IsS0FBSyxDQUFDO0lBRTVDLE9BQU8sWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEdBQUcsSUFBSSxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLEdBQUcsS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRWxELElBQUksY0FBYyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0QsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBhZGFwdGVkIGZyb20gbmd4LXF1aWNrbGluayxcclxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9tZ2VjaGV2L25neC1xdWlja2xpbmspXHJcbi8vIENvcHlyaWdodCAoYykgTWlua28gR2VjaGV2IGFuZCBjb250cmlidXRvcnMsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cclxuXHJcbmltcG9ydCB7IFBSSU1BUllfT1VUTEVULCBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5mdW5jdGlvbiBpc1ByaW1hcnlSb3V0ZShyb3V0ZTogUm91dGUpOiBib29sZWFuIHtcclxuICByZXR1cm4gcm91dGUub3V0bGV0ID09PSBQUklNQVJZX09VVExFVCB8fCAhcm91dGUub3V0bGV0O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZmluZFBhdGggPSAoY29uZmlnOiBSb3V0ZVtdLCByb3V0ZTogUm91dGUpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IGNvbmZpZ1F1ZXVlID0gY29uZmlnLnNsaWNlKCk7XHJcbiAgY29uc3QgcGFyZW50ID0gbmV3IE1hcDxSb3V0ZSwgUm91dGU+KCk7XHJcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8Um91dGU+KCk7XHJcblxyXG4gIHdoaWxlIChjb25maWdRdWV1ZS5sZW5ndGgpIHtcclxuICAgIGNvbnN0IGVsID0gY29uZmlnUXVldWUuc2hpZnQoKTtcclxuICAgIGlmICghZWwpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRlZC5hZGQoZWwpO1xyXG5cclxuICAgIGlmIChlbCA9PT0gcm91dGUpIHtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgKGVsLmNoaWxkcmVuIHx8IFtdKS5mb3JFYWNoKChjaGlsZFJvdXRlOiBSb3V0ZSkgPT4ge1xyXG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGNoaWxkUm91dGUpKSB7XHJcbiAgICAgICAgcGFyZW50LnNldChjaGlsZFJvdXRlLCBlbCk7XHJcbiAgICAgICAgY29uZmlnUXVldWUucHVzaChjaGlsZFJvdXRlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbGF6eVJvdXRlcyA9IChlbCBhcyBhbnkpLl9sb2FkZWRSb3V0ZXMgfHwgW107XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsYXp5Um91dGVzKSkge1xyXG4gICAgICBsYXp5Um91dGVzLmZvckVhY2goKGxhenlSb3V0ZTogUm91dGUpID0+IHtcclxuICAgICAgICBpZiAobGF6eVJvdXRlICYmICF2aXNpdGVkLmhhcyhsYXp5Um91dGUpKSB7XHJcbiAgICAgICAgICBwYXJlbnQuc2V0KGxhenlSb3V0ZSwgZWwpO1xyXG4gICAgICAgICAgY29uZmlnUXVldWUucHVzaChsYXp5Um91dGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgcGF0aCA9ICcnO1xyXG4gIGxldCBjdXJyZW50Um91dGU6IFJvdXRlIHwgdW5kZWZpbmVkID0gcm91dGU7XHJcblxyXG4gIHdoaWxlIChjdXJyZW50Um91dGUpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gY3VycmVudFJvdXRlLnBhdGggfHwgJyc7XHJcbiAgICBpZiAoaXNQcmltYXJ5Um91dGUoY3VycmVudFJvdXRlKSkge1xyXG4gICAgICBwYXRoID0gYC8ke2N1cnJlbnRQYXRofSR7cGF0aH1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGF0aCA9IGAvKCR7Y3VycmVudFJvdXRlLm91dGxldH06JHtjdXJyZW50UGF0aH0pJHtwYXRofWA7XHJcbiAgICB9XHJcbiAgICBjdXJyZW50Um91dGUgPSBwYXJlbnQuZ2V0KGN1cnJlbnRSb3V0ZSk7XHJcbiAgfVxyXG5cclxuICBsZXQgbm9ybWFsaXplZFBhdGggPSBwYXRoLnJlcGxhY2VBbGwoL1xcLysvZywgJy8nKTtcclxuXHJcbiAgaWYgKG5vcm1hbGl6ZWRQYXRoICE9PSAnLycgJiYgbm9ybWFsaXplZFBhdGguZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5zbGljZSgwLCAtMSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbm9ybWFsaXplZFBhdGg7XHJcbn07XHJcbiJdfQ==","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nexport function injectSnapshotPathResolver() {\n const router = inject(Router);\n return (route) => {\n const segments = route.pathFromRoot.flatMap((snap) => snap.routeConfig?.path ?? []);\n const joinedSegments = segments.filter(Boolean).join('/');\n return router.serializeUrl(router.parseUrl(joinedSegments));\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvdXRpbC9zbmFwc2hvdC1wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUEwQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRSxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixPQUFPLENBQUMsS0FBNkIsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUN2QyxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIoKSB7XHJcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIHJldHVybiAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpID0+IHtcclxuICAgIGNvbnN0IHNlZ21lbnRzID0gcm91dGUucGF0aEZyb21Sb290LmZsYXRNYXAoXHJcbiAgICAgIChzbmFwKSA9PiBzbmFwLnJvdXRlQ29uZmlnPy5wYXRoID8/IFtdLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBqb2luZWRTZWdtZW50cyA9IHNlZ21lbnRzLmZpbHRlcihCb29sZWFuKS5qb2luKCcvJyk7XHJcblxyXG4gICAgcmV0dXJuIHJvdXRlci5zZXJpYWxpemVVcmwocm91dGVyLnBhcnNlVXJsKGpvaW5lZFNlZ21lbnRzKSk7XHJcbiAgfTtcclxufVxyXG4iXX0=","import { computed, inject } from '@angular/core';\nimport { createUrlTreeFromSnapshot, Router, } from '@angular/router';\nimport { BreadcrumbStore } from './breadcrumb-store';\nimport { until } from '@mmstack/primitives';\nimport { injectSnapshotPathResolver } from '../util';\nimport { createInternalBreadcrumb } from './breadcrumb';\n/**\n * Creates and registers a breadcrumb for a specific route.\n * This function is designed to be used as an Angular Route `ResolveFn`.\n * It handles the registration of the breadcrumb with the `BreadcrumbStore`\n * and ensures automatic deregistration when the route is destroyed.\n *\n * @param factory A function that returns a `CreateBreadcrumbOptions` object.\n * @see CreateBreadcrumbOptions\n *\n * @example\n * ```typescript\n * export const appRoutes: Routes = [\n * {\n * path: 'home',\n * component: HomeComponent,\n * resolve: {\n * breadcrumb: createBreadcrumb(() => ({\n * label: 'Home',\n * });\n * },\n * path: 'users/:userId',\n * component: UserProfileComponent,\n * resolve: {\n * breadcrumb: createBreadcrumb(() => {\n * const userStore = inject(UserStore);\n * return {\n * label: () => userStore.user().name ?? 'Loading...\n * };\n * })\n * },\n * }\n * ];\n * ```\n */\nexport function createBreadcrumb(factory) {\n return async (route) => {\n const router = inject(Router);\n const store = inject(BreadcrumbStore);\n const resolver = injectSnapshotPathResolver();\n const fp = resolver(route);\n const tree = createUrlTreeFromSnapshot(route, [], route.queryParams, route.fragment);\n const provided = factory();\n const link = computed(() => router.serializeUrl(tree), ...(ngDevMode ? [{ debugName: \"link\" }] : []));\n const { label, ariaLabel = label } = provided;\n const bc = {\n id: fp,\n ariaLabel: typeof ariaLabel === 'string'\n ? computed(() => ariaLabel)\n : computed(ariaLabel),\n label: typeof label === 'string' ? computed(() => label) : computed(label),\n link,\n };\n store.register(createInternalBreadcrumb(bc, computed(() => route.data?.['skipBreadcrumb'] !== true)));\n if (provided.awaitValue)\n await until(bc.label, (v) => !!v);\n return Promise.resolve();\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLXJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBd0JyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JELE9BQU8sRUFBYyx3QkFBd0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUFzQztJQUV0QyxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNyQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLDBCQUEwQixFQUFFLENBQUM7UUFFOUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLE1BQU0sSUFBSSxHQUFHLHlCQUF5QixDQUNwQyxLQUFLLEVBQ0wsRUFBRSxFQUNGLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQ2YsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBRTNCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnREFBQyxDQUFDO1FBRXZELE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUU5QyxNQUFNLEVBQUUsR0FBZTtZQUNyQixFQUFFLEVBQUUsRUFBRTtZQUNOLFNBQVMsRUFDUCxPQUFPLFNBQVMsS0FBSyxRQUFRO2dCQUMzQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDekIsS0FBSyxFQUNILE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ3JFLElBQUk7U0FDTCxDQUFDO1FBRUYsS0FBSyxDQUFDLFFBQVEsQ0FDWix3QkFBd0IsQ0FDdEIsRUFBRSxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FDeEQsQ0FDRixDQUFDO1FBRUYsSUFBSSxRQUFRLENBQUMsVUFBVTtZQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZVVybFRyZWVGcm9tU25hcHNob3QsXHJcbiAgUm91dGVyLFxyXG4gIHR5cGUgUmVzb2x2ZUZuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJyZWFkY3J1bWJTdG9yZSB9IGZyb20gJy4vYnJlYWRjcnVtYi1zdG9yZSc7XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgZGVmaW5pbmcgYSBicmVhZGNydW1iLlxyXG4gKlxyXG4gKi9cclxudHlwZSBDcmVhdGVCcmVhZGNydW1iT3B0aW9ucyA9IHtcclxuICAvKipcclxuICAgKiBUaGUgdmlzaWJsZSB0ZXh0IGZvciB0aGUgYnJlYWRjcnVtYi5cclxuICAgKiBDYW4gYmUgYSBzdGF0aWMgc3RyaW5nIG9yIGEgZnVuY3Rpb24gZm9yIGR5bmFtaWMgbGFiZWxzLlxyXG4gICAqL1xyXG4gIGxhYmVsOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKTtcclxuICAvKipcclxuICAgKiBBbiBhY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgYnJlYWRjcnVtYiBpdGVtLlxyXG4gICAqIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgbGFiZWxgIGlmIG5vdCBwcm92aWRlZC5cclxuICAgKiBDYW4gYmUgYSBzdGF0aWMgc3RyaW5nIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nIGZvciBkeW5hbWljIEFSSUEgbGFiZWxzLlxyXG4gICAqL1xyXG4gIGFyaWFMYWJlbD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xyXG4gIC8qKlxyXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvdXRlIHJlc29sdmVyIHdpbGwgd2FpdCB1bnRpbCB0aGUgYGxhYmVsYCBzaWduYWwgaGFzIGEgdmFsdWUgYmVmb3JlIGByZXNvbHZpbmdgXHJcbiAgICovXHJcbiAgYXdhaXRWYWx1ZT86IGJvb2xlYW47XHJcbn07XHJcblxyXG5pbXBvcnQgeyB1bnRpbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQgeyBpbmplY3RTbmFwc2hvdFBhdGhSZXNvbHZlciB9IGZyb20gJy4uL3V0aWwnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iLCBjcmVhdGVJbnRlcm5hbEJyZWFkY3J1bWIgfSBmcm9tICcuL2JyZWFkY3J1bWInO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIGJyZWFkY3J1bWIgZm9yIGEgc3BlY2lmaWMgcm91dGUuXHJcbiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhbiBBbmd1bGFyIFJvdXRlIGBSZXNvbHZlRm5gLlxyXG4gKiBJdCBoYW5kbGVzIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIGJyZWFkY3J1bWIgd2l0aCB0aGUgYEJyZWFkY3J1bWJTdG9yZWBcclxuICogYW5kIGVuc3VyZXMgYXV0b21hdGljIGRlcmVnaXN0cmF0aW9uIHdoZW4gdGhlIHJvdXRlIGlzIGRlc3Ryb3llZC5cclxuICpcclxuICogQHBhcmFtIGZhY3RvcnkgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBgQ3JlYXRlQnJlYWRjcnVtYk9wdGlvbnNgIG9iamVjdC5cclxuICogQHNlZSBDcmVhdGVCcmVhZGNydW1iT3B0aW9uc1xyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGV4cG9ydCBjb25zdCBhcHBSb3V0ZXM6IFJvdXRlcyA9IFtcclxuICogICB7XHJcbiAqICAgICBwYXRoOiAnaG9tZScsXHJcbiAqICAgICBjb21wb25lbnQ6IEhvbWVDb21wb25lbnQsXHJcbiAqICAgICByZXNvbHZlOiB7XHJcbiAqICAgICAgIGJyZWFkY3J1bWI6IGNyZWF0ZUJyZWFkY3J1bWIoKCkgPT4gKHtcclxuICogICAgICAgICBsYWJlbDogJ0hvbWUnLFxyXG4gKiAgICAgICB9KTtcclxuICogICAgIH0sXHJcbiAqICAgICBwYXRoOiAndXNlcnMvOnVzZXJJZCcsXHJcbiAqICAgICBjb21wb25lbnQ6IFVzZXJQcm9maWxlQ29tcG9uZW50LFxyXG4gKiAgICAgcmVzb2x2ZToge1xyXG4gKiAgICAgICBicmVhZGNydW1iOiBjcmVhdGVCcmVhZGNydW1iKCgpID0+IHtcclxuICogICAgICAgICBjb25zdCB1c2VyU3RvcmUgPSBpbmplY3QoVXNlclN0b3JlKTtcclxuICogICAgICAgICByZXR1cm4ge1xyXG4gKiAgICAgICAgICAgIGxhYmVsOiAoKSA9PiB1c2VyU3RvcmUudXNlcigpLm5hbWUgPz8gJ0xvYWRpbmcuLi5cclxuICogICAgICAgIH07XHJcbiAqICAgICAgfSlcclxuICogICAgIH0sXHJcbiAqICAgfVxyXG4gKiBdO1xyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCcmVhZGNydW1iKFxyXG4gIGZhY3Rvcnk6ICgpID0+IENyZWF0ZUJyZWFkY3J1bWJPcHRpb25zLFxyXG4pOiBSZXNvbHZlRm48dm9pZD4ge1xyXG4gIHJldHVybiBhc3luYyAocm91dGUpID0+IHtcclxuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoQnJlYWRjcnVtYlN0b3JlKTtcclxuICAgIGNvbnN0IHJlc29sdmVyID0gaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIoKTtcclxuXHJcbiAgICBjb25zdCBmcCA9IHJlc29sdmVyKHJvdXRlKTtcclxuXHJcbiAgICBjb25zdCB0cmVlID0gY3JlYXRlVXJsVHJlZUZyb21TbmFwc2hvdChcclxuICAgICAgcm91dGUsXHJcbiAgICAgIFtdLFxyXG4gICAgICByb3V0ZS5xdWVyeVBhcmFtcyxcclxuICAgICAgcm91dGUuZnJhZ21lbnQsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHByb3ZpZGVkID0gZmFjdG9yeSgpO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBjb21wdXRlZCgoKSA9PiByb3V0ZXIuc2VyaWFsaXplVXJsKHRyZWUpKTtcclxuXHJcbiAgICBjb25zdCB7IGxhYmVsLCBhcmlhTGFiZWwgPSBsYWJlbCB9ID0gcHJvdmlkZWQ7XHJcblxyXG4gICAgY29uc3QgYmM6IEJyZWFkY3J1bWIgPSB7XHJcbiAgICAgIGlkOiBmcCxcclxuICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgIHR5cGVvZiBhcmlhTGFiZWwgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICA/IGNvbXB1dGVkKCgpID0+IGFyaWFMYWJlbClcclxuICAgICAgICAgIDogY29tcHV0ZWQoYXJpYUxhYmVsKSxcclxuICAgICAgbGFiZWw6XHJcbiAgICAgICAgdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IGNvbXB1dGVkKCgpID0+IGxhYmVsKSA6IGNvbXB1dGVkKGxhYmVsKSxcclxuICAgICAgbGluayxcclxuICAgIH07XHJcblxyXG4gICAgc3RvcmUucmVnaXN0ZXIoXHJcbiAgICAgIGNyZWF0ZUludGVybmFsQnJlYWRjcnVtYihcclxuICAgICAgICBiYyxcclxuICAgICAgICBjb21wdXRlZCgoKSA9PiByb3V0ZS5kYXRhPy5bJ3NraXBCcmVhZGNydW1iJ10gIT09IHRydWUpLFxyXG4gICAgICApLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAocHJvdmlkZWQuYXdhaXRWYWx1ZSkgYXdhaXQgdW50aWwoYmMubGFiZWwsICh2KSA9PiAhIXYpO1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICB9O1xyXG59XHJcbiJdfQ==","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class PreloadRequester {\n preloadOnDemand$ = new Subject();\n preloadRequested$ = this.preloadOnDemand$.asObservable();\n startPreload(routePath) {\n this.preloadOnDemand$.next(routePath);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: PreloadRequester, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: PreloadRequester, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: PreloadRequester, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC1yZXF1ZXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL3ByZWxvYWRpbmcvcHJlbG9hZC1yZXF1ZXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUcvQixNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUNqRCxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbEUsWUFBWSxDQUFDLFNBQWlCO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQzt1R0FOVSxnQkFBZ0I7MkdBQWhCLGdCQUFnQixjQURILE1BQU07OzJGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUHJlbG9hZFJlcXVlc3RlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVsb2FkT25EZW1hbmQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHJlYWRvbmx5IHByZWxvYWRSZXF1ZXN0ZWQkID0gdGhpcy5wcmVsb2FkT25EZW1hbmQkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBzdGFydFByZWxvYWQocm91dGVQYXRoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucHJlbG9hZE9uRGVtYW5kJC5uZXh0KHJvdXRlUGF0aCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { EMPTY, filter, finalize, switchMap, take } from 'rxjs';\nimport { createRoutePredicate, findPath } from '../util';\nimport { PreloadRequester } from './preload-requester';\nimport * as i0 from \"@angular/core\";\nfunction hasSlowConnection() {\n if (globalThis.window &&\n 'navigator' in globalThis.window &&\n 'connection' in globalThis.window.navigator &&\n typeof globalThis.window.navigator.connection === 'object' &&\n !!globalThis.window.navigator.connection) {\n const is2g = 'effectiveType' in globalThis.window.navigator.connection &&\n typeof globalThis.window.navigator.connection.effectiveType ===\n 'string' &&\n globalThis.window.navigator.connection.effectiveType.endsWith('2g');\n if (is2g)\n return true;\n if ('saveData' in globalThis.window.navigator.connection &&\n typeof globalThis.window.navigator.connection.saveData === 'boolean' &&\n globalThis.window.navigator.connection.saveData)\n return true;\n }\n return false;\n}\nfunction noPreload(route) {\n return route.data && route.data['preload'] === false;\n}\nexport class PreloadStrategy {\n loading = new Set();\n router = inject(Router);\n req = inject(PreloadRequester);\n preload(route, load) {\n if (noPreload(route) || hasSlowConnection())\n return EMPTY;\n const fp = findPath(this.router.config, route);\n if (this.loading.has(fp))\n return EMPTY;\n const predicate = createRoutePredicate(fp);\n return this.req.preloadRequested$.pipe(filter((path) => path === fp || predicate(path)), take(1), switchMap(() => load()), finalize(() => this.loading.delete(fp)));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: PreloadStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: PreloadStrategy, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: PreloadStrategy, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvcHJlbG9hZGluZy9wcmVsb2FkLXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBa0MsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFjLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFdkQsU0FBUyxpQkFBaUI7SUFDeEIsSUFDRSxVQUFVLENBQUMsTUFBTTtRQUNqQixXQUFXLElBQUksVUFBVSxDQUFDLE1BQU07UUFDaEMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUztRQUMzQyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsS0FBSyxRQUFRO1FBQzFELENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQ3hDLENBQUM7UUFDRCxNQUFNLElBQUksR0FDUixlQUFlLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVTtZQUN6RCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhO2dCQUN6RCxRQUFRO1lBQ1YsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsSUFDRSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVTtZQUNwRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssU0FBUztZQUNwRSxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUUvQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBWTtJQUM3QixPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDdkQsQ0FBQztBQUtELE1BQU0sT0FBTyxlQUFlO0lBQ1QsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDNUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixHQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFaEQsT0FBTyxDQUFDLEtBQVksRUFBRSxJQUEyQjtRQUMvQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxpQkFBaUIsRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTFELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXZDLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3BDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUN2QixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDeEMsQ0FBQztJQUNKLENBQUM7dUdBbkJVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByZWxvYWRpbmdTdHJhdGVneSwgdHlwZSBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRU1QVFksIGZpbHRlciwgZmluYWxpemUsIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZVByZWRpY2F0ZSwgZmluZFBhdGggfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHsgUHJlbG9hZFJlcXVlc3RlciB9IGZyb20gJy4vcHJlbG9hZC1yZXF1ZXN0ZXInO1xyXG5cclxuZnVuY3Rpb24gaGFzU2xvd0Nvbm5lY3Rpb24oKSB7XHJcbiAgaWYgKFxyXG4gICAgZ2xvYmFsVGhpcy53aW5kb3cgJiZcclxuICAgICduYXZpZ2F0b3InIGluIGdsb2JhbFRoaXMud2luZG93ICYmXHJcbiAgICAnY29ubmVjdGlvbicgaW4gZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yICYmXHJcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yLmNvbm5lY3Rpb24gPT09ICdvYmplY3QnICYmXHJcbiAgICAhIWdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uXHJcbiAgKSB7XHJcbiAgICBjb25zdCBpczJnID1cclxuICAgICAgJ2VmZmVjdGl2ZVR5cGUnIGluIGdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uICYmXHJcbiAgICAgIHR5cGVvZiBnbG9iYWxUaGlzLndpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlID09PVxyXG4gICAgICAgICdzdHJpbmcnICYmXHJcbiAgICAgIGdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUuZW5kc1dpdGgoJzJnJyk7XHJcbiAgICBpZiAoaXMyZykgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAoXHJcbiAgICAgICdzYXZlRGF0YScgaW4gZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yLmNvbm5lY3Rpb24gJiZcclxuICAgICAgdHlwZW9mIGdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uLnNhdmVEYXRhID09PSAnYm9vbGVhbicgJiZcclxuICAgICAgZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yLmNvbm5lY3Rpb24uc2F2ZURhdGFcclxuICAgIClcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vUHJlbG9hZChyb3V0ZTogUm91dGUpIHtcclxuICByZXR1cm4gcm91dGUuZGF0YSAmJiByb3V0ZS5kYXRhWydwcmVsb2FkJ10gPT09IGZhbHNlO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJlbG9hZFN0cmF0ZWd5IGltcGxlbWVudHMgUHJlbG9hZGluZ1N0cmF0ZWd5IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxID0gaW5qZWN0KFByZWxvYWRSZXF1ZXN0ZXIpO1xyXG5cclxuICBwcmVsb2FkKHJvdXRlOiBSb3V0ZSwgbG9hZDogKCkgPT4gT2JzZXJ2YWJsZTxhbnk+KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChub1ByZWxvYWQocm91dGUpIHx8IGhhc1Nsb3dDb25uZWN0aW9uKCkpIHJldHVybiBFTVBUWTtcclxuXHJcbiAgICBjb25zdCBmcCA9IGZpbmRQYXRoKHRoaXMucm91dGVyLmNvbmZpZywgcm91dGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRpbmcuaGFzKGZwKSkgcmV0dXJuIEVNUFRZO1xyXG5cclxuICAgIGNvbnN0IHByZWRpY2F0ZSA9IGNyZWF0ZVJvdXRlUHJlZGljYXRlKGZwKTtcclxuICAgIHJldHVybiB0aGlzLnJlcS5wcmVsb2FkUmVxdWVzdGVkJC5waXBlKFxyXG4gICAgICBmaWx0ZXIoKHBhdGgpID0+IHBhdGggPT09IGZwIHx8IHByZWRpY2F0ZShwYXRoKSksXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiBsb2FkKCkpLFxyXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcuZGVsZXRlKGZwKSksXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=","import { booleanAttribute, computed, Directive, effect, HostListener, inject, InjectionToken, input, output, untracked, } from '@angular/core';\nimport { Router, RouterLink, RouterLinkWithHref, UrlTree, } from '@angular/router';\nimport { elementVisibility } from '@mmstack/primitives';\nimport { PreloadRequester } from './preloading';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/router\";\nfunction inputToUrlTree(router, link, relativeTo, queryParams, fragment, queryParamsHandling, routerLinkUrlTree) {\n if (!link)\n return null;\n if (routerLinkUrlTree)\n return routerLinkUrlTree;\n if (link instanceof UrlTree)\n return link;\n const arr = Array.isArray(link) ? link : [link];\n return router.createUrlTree(arr, {\n relativeTo,\n queryParams,\n fragment,\n queryParamsHandling,\n });\n}\nfunction treeToSerializedUrl(router, urlTree) {\n if (!urlTree)\n return null;\n return router.serializeUrl(urlTree);\n}\nexport function injectTriggerPreload() {\n const req = inject(PreloadRequester);\n const router = inject(Router);\n return (link, relativeTo, queryParams, fragment, queryParamsHandling) => {\n const urlTree = inputToUrlTree(router, link, relativeTo, queryParams, fragment, queryParamsHandling);\n const fullPath = treeToSerializedUrl(router, urlTree);\n if (!fullPath)\n return;\n req.startPreload(fullPath);\n };\n}\nconst configToken = new InjectionToken('MMSTACK_LINK_CONFIG');\nexport function provideMMLinkDefaultConfig(config) {\n const cfg = {\n preloadOn: 'hover',\n useMouseDown: false,\n ...config,\n };\n return {\n provide: configToken,\n useValue: cfg,\n };\n}\nfunction injectConfig() {\n const cfg = inject(configToken, { optional: true });\n return {\n preloadOn: 'hover',\n useMouseDown: false,\n ...cfg,\n };\n}\nexport class Link {\n routerLink = inject(RouterLink, {\n self: true,\n optional: true,\n }) ?? inject(RouterLinkWithHref, { self: true, optional: true });\n req = inject(PreloadRequester);\n router = inject(Router);\n target = input(...(ngDevMode ? [undefined, { debugName: \"target\" }] : []));\n queryParams = input(...(ngDevMode ? [undefined, { debugName: \"queryParams\" }] : []));\n fragment = input(...(ngDevMode ? [undefined, { debugName: \"fragment\" }] : []));\n queryParamsHandling = input(...(ngDevMode ? [undefined, { debugName: \"queryParamsHandling\" }] : []));\n state = input(...(ngDevMode ? [undefined, { debugName: \"state\" }] : []));\n info = input(...(ngDevMode ? [undefined, { debugName: \"info\" }] : []));\n relativeTo = input(...(ngDevMode ? [undefined, { debugName: \"relativeTo\" }] : []));\n skipLocationChange = input(false, ...(ngDevMode ? [{ debugName: \"skipLocationChange\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n replaceUrl = input(false, ...(ngDevMode ? [{ debugName: \"replaceUrl\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n mmLink = input(null, ...(ngDevMode ? [{ debugName: \"mmLink\" }] : []));\n preloadOn = input(injectConfig().preloadOn, ...(ngDevMode ? [{ debugName: \"preloadOn\" }] : []));\n useMouseDown = input(injectConfig().useMouseDown, ...(ngDevMode ? [{ debugName: \"useMouseDown\", transform: booleanAttribute }] : [{\n transform: booleanAttribute,\n }]));\n beforeNavigate = input(...(ngDevMode ? [undefined, { debugName: \"beforeNavigate\" }] : []));\n preloading = output();\n urlTree = computed(() => {\n return inputToUrlTree(this.router, this.mmLink(), this.relativeTo(), this.queryParams(), this.fragment(), this.queryParamsHandling(), this.routerLink?.urlTree);\n }, ...(ngDevMode ? [{ debugName: \"urlTree\" }] : []));\n fullPath = computed(() => {\n return treeToSerializedUrl(this.router, this.urlTree());\n }, ...(ngDevMode ? [{ debugName: \"fullPath\" }] : []));\n onHover() {\n if (untracked(this.preloadOn) !== 'hover')\n return;\n this.requestPreload();\n }\n onMouseDown(button, ctrlKey, shiftKey, altKey, metaKey) {\n if (!untracked(this.useMouseDown))\n return;\n return this.trigger(button, ctrlKey, shiftKey, altKey, metaKey);\n }\n onClick(button, ctrlKey, shiftKey, altKey, metaKey) {\n if (untracked(this.useMouseDown))\n return;\n return this.trigger(button, ctrlKey, shiftKey, altKey, metaKey);\n }\n constructor() {\n const intersection = elementVisibility();\n effect(() => {\n if (this.preloadOn() !== 'visible')\n return;\n if (intersection.visible())\n this.requestPreload();\n });\n }\n requestPreload() {\n const fp = untracked(this.fullPath);\n if (!this.routerLink || !fp)\n return;\n this.req.startPreload(fp);\n this.preloading.emit();\n }\n trigger(button, ctrlKey, shiftKey, altKey, metaKey) {\n untracked(this.beforeNavigate)?.();\n return this.routerLink?.onClick(button, ctrlKey, shiftKey, altKey, metaKey);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: Link, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.3.1\", type: Link, isStandalone: true, selector: \"[mmLink]\", inputs: { target: { classPropertyName: \"target\", publicName: \"target\", isSignal: true, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: \"queryParams\", publicName: \"queryParams\", isSignal: true, isRequired: false, transformFunction: null }, fragment: { classPropertyName: \"fragment\", publicName: \"fragment\", isSignal: true, isRequired: false, transformFunction: null }, queryParamsHandling: { classPropertyName: \"queryParamsHandling\", publicName: \"queryParamsHandling\", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: \"state\", publicName: \"state\", isSignal: true, isRequired: false, transformFunction: null }, info: { classPropertyName: \"info\", publicName: \"info\", isSignal: true, isRequired: false, transformFunction: null }, relativeTo: { classPropertyName: \"relativeTo\", publicName: \"relativeTo\", isSignal: true, isRequired: false, transformFunction: null }, skipLocationChange: { classPropertyName: \"skipLocationChange\", publicName: \"skipLocationChange\", isSignal: true, isRequired: false, transformFunction: null }, replaceUrl: { classPropertyName: \"replaceUrl\", publicName: \"replaceUrl\", isSignal: true, isRequired: false, transformFunction: null }, mmLink: { classPropertyName: \"mmLink\", publicName: \"mmLink\", isSignal: true, isRequired: false, transformFunction: null }, preloadOn: { classPropertyName: \"preloadOn\", publicName: \"preloadOn\", isSignal: true, isRequired: false, transformFunction: null }, useMouseDown: { classPropertyName: \"useMouseDown\", publicName: \"useMouseDown\", isSignal: true, isRequired: false, transformFunction: null }, beforeNavigate: { classPropertyName: \"beforeNavigate\", publicName: \"beforeNavigate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { preloading: \"preloading\" }, host: { listeners: { \"mouseenter\": \"onHover()\", \"mousedown\": \"onMouseDown($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)\", \"click\": \"onClick($event.button,$event.ctrlKey,$event.shiftKey,$event.altKey,$event.metaKey)\" } }, exportAs: [\"mmLink\"], hostDirectives: [{ directive: i1.RouterLink, inputs: [\"routerLink\", \"mmLink\", \"target\", \"target\", \"queryParams\", \"queryParams\", \"fragment\", \"fragment\", \"queryParamsHandling\", \"queryParamsHandling\", \"state\", \"state\", \"relativeTo\", \"relativeTo\", \"skipLocationChange\", \"skipLocationChange\", \"replaceUrl\", \"replaceUrl\"] }], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: Link, decorators: [{\n type: Directive,\n args: [{\n selector: '[mmLink]',\n exportAs: 'mmLink',\n host: {\n '(mouseenter)': 'onHover()',\n },\n hostDirectives: [\n {\n directive: RouterLink,\n inputs: [\n 'routerLink: mmLink',\n 'target',\n 'queryParams',\n 'fragment',\n 'queryParamsHandling',\n 'state',\n 'relativeTo',\n 'skipLocationChange',\n 'replaceUrl',\n ],\n },\n ],\n }]\n }], ctorParameters: () => [], propDecorators: { onMouseDown: [{\n type: HostListener,\n args: ['mousedown', [\n '$event.button',\n '$event.ctrlKey',\n '$event.shiftKey',\n '$event.altKey',\n '$event.metaKey',\n ]]\n }], onClick: [{\n type: HostListener,\n args: ['click', [\n '$event.button',\n '$event.ctrlKey',\n '$event.shiftKey',\n '$event.altKey',\n '$event.metaKey',\n ]]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvbGluay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxNQUFNLEVBQ04sVUFBVSxFQUNWLGtCQUFrQixFQUNsQixPQUFPLEdBQ1IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQUVoRCxTQUFTLGNBQWMsQ0FDckIsTUFBYyxFQUNkLElBQXFDLEVBQ3JDLFVBQTJCLEVBQzNCLFdBQW9CLEVBQ3BCLFFBQWlCLEVBQ2pCLG1CQUErQyxFQUMvQyxpQkFBa0M7SUFFbEMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QixJQUFJLGlCQUFpQjtRQUFFLE9BQU8saUJBQWlCLENBQUM7SUFFaEQsSUFBSSxJQUFJLFlBQVksT0FBTztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXpDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVoRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFO1FBQy9CLFVBQVU7UUFDVixXQUFXO1FBQ1gsUUFBUTtRQUNSLG1CQUFtQjtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FD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QUosSUFBSTtrQkF2QmhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixJQUFJLEVBQUU7d0JBQ0osY0FBYyxFQUFFLFdBQVc7cUJBQzVCO29CQUNELGNBQWMsRUFBRTt3QkFDZDs0QkFDRSxTQUFTLEVBQUUsVUFBVTs0QkFDckIsTUFBTSxFQUFFO2dDQUNOLG9CQUFvQjtnQ0FDcEIsUUFBUTtnQ0FDUixhQUFhO2dDQUNiLFVBQVU7Z0NBQ1YscUJBQXFCO2dDQUNyQixPQUFPO2dDQUNQLFlBQVk7Z0NBQ1osb0JBQW9CO2dDQUNwQixZQUFZOzZCQUNiO3lCQUNGO3FCQUNGO2lCQUNGO3dEQTJEQyxXQUFXO3NCQVBWLFlBQVk7dUJBQUMsV0FBVyxFQUFFO3dCQUN6QixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGdCQUFnQjtxQkFDakI7Z0JBbUJELE9BQU87c0JBUE4sWUFBWTt1QkFBQyxPQUFPLEVBQUU7d0JBQ3JCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcclxuICBjb21wdXRlZCxcclxuICBEaXJlY3RpdmUsXHJcbiAgZWZmZWN0LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbmplY3QsXHJcbiAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG4gIFByb3ZpZGVyLFxyXG4gIHVudHJhY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICB0eXBlIEFjdGl2YXRlZFJvdXRlLFxyXG4gIHR5cGUgUGFyYW1zLFxyXG4gIFJvdXRlcixcclxuICBSb3V0ZXJMaW5rLFxyXG4gIFJvdXRlckxpbmtXaXRoSHJlZixcclxuICBVcmxUcmVlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGVsZW1lbnRWaXNpYmlsaXR5IH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbmltcG9ydCB7IFByZWxvYWRSZXF1ZXN0ZXIgfSBmcm9tICcuL3ByZWxvYWRpbmcnO1xyXG5cclxuZnVuY3Rpb24gaW5wdXRUb1VybFRyZWUoXHJcbiAgcm91dGVyOiBSb3V0ZXIsXHJcbiAgbGluazogc3RyaW5nIHwgYW55W10gfCBVcmxUcmVlIHwgbnVsbCxcclxuICByZWxhdGl2ZVRvPzogQWN0aXZhdGVkUm91dGUsXHJcbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXMsXHJcbiAgZnJhZ21lbnQ/OiBzdHJpbmcsXHJcbiAgcXVlcnlQYXJhbXNIYW5kbGluZz86ICdtZXJnZScgfCAncHJlc2VydmUnIHwgJycsXHJcbiAgcm91dGVyTGlua1VybFRyZWU/OiBVcmxUcmVlIHwgbnVsbCxcclxuKTogVXJsVHJlZSB8IG51bGwge1xyXG4gIGlmICghbGluaykgcmV0dXJuIG51bGw7XHJcbiAgaWYgKHJvdXRlckxpbmtVcmxUcmVlKSByZXR1cm4gcm91dGVyTGlua1VybFRyZWU7XHJcblxyXG4gIGlmIChsaW5rIGluc3RhbmNlb2YgVXJsVHJlZSkgcmV0dXJuIGxpbms7XHJcblxyXG4gIGNvbnN0IGFyciA9IEFycmF5LmlzQXJyYXkobGluaykgPyBsaW5rIDogW2xpbmtdO1xyXG5cclxuICByZXR1cm4gcm91dGVyLmNyZWF0ZVVybFRyZWUoYXJyLCB7XHJcbiAgICByZWxhdGl2ZVRvLFxyXG4gICAgcXVlcnlQYXJhbXMsXHJcbiAgICBmcmFnbWVudCxcclxuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmcsXHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyZWVUb1NlcmlhbGl6ZWRVcmwoXHJcbiAgcm91dGVyOiBSb3V0ZXIsXHJcbiAgdXJsVHJlZTogVXJsVHJlZSB8IG51bGwsXHJcbik6IHN0cmluZyB8IG51bGwge1xyXG4gIGlmICghdXJsVHJlZSkgcmV0dXJuIG51bGw7XHJcbiAgcmV0dXJuIHJvdXRlci5zZXJpYWxpemVVcmwodXJsVHJlZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RUcmlnZ2VyUHJlbG9hZCgpIHtcclxuICBjb25zdCByZXEgPSBpbmplY3QoUHJlbG9hZFJlcXVlc3Rlcik7XHJcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBsaW5rOiBzdHJpbmcgfCBhbnlbXSB8IFVybFRyZWUgfCBudWxsLFxyXG4gICAgcmVsYXRpdmVUbz86IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbXMsXHJcbiAgICBmcmFnbWVudD86IHN0cmluZyxcclxuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiAnbWVyZ2UnIHwgJ3ByZXNlcnZlJyB8ICcnLFxyXG4gICkgPT4ge1xyXG4gICAgY29uc3QgdXJsVHJlZSA9IGlucHV0VG9VcmxUcmVlKFxyXG4gICAgICByb3V0ZXIsXHJcbiAgICAgIGxpbmssXHJcbiAgICAgIHJlbGF0aXZlVG8sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICBmcmFnbWVudCxcclxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZyxcclxuICAgICk7XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHRyZWVUb1NlcmlhbGl6ZWRVcmwocm91dGVyLCB1cmxUcmVlKTtcclxuICAgIGlmICghZnVsbFBhdGgpIHJldHVybjtcclxuXHJcbiAgICByZXEuc3RhcnRQcmVsb2FkKGZ1bGxQYXRoKTtcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGBtbUxpbmtgIGRpcmVjdGl2ZS5cclxuICovXHJcbnR5cGUgTU1MaW5rQ29uZmlnID0ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBkZWZhdWx0IHByZWxvYWQgYmVoYXZpb3IgZm9yIGxpbmtzLlxyXG4gICAqIENhbiBiZSAnaG92ZXInLCAndmlzaWJsZScsIG9yIG51bGwgKG5vIHByZWxvYWRpbmcpLlxyXG4gICAqIEBkZWZhdWx0ICdob3ZlcidcclxuICAgKi9cclxuICBwcmVsb2FkT246ICdob3ZlcicgfCAndmlzaWJsZScgfCBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gdXNlIG1vdXNlIGRvd24gZXZlbnRzIGZvciBwcmVsb2FkaW5nLlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgdXNlTW91c2VEb3duOiBib29sZWFuO1xyXG59O1xyXG5cclxuY29uc3QgY29uZmlnVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TU1MaW5rQ29uZmlnPignTU1TVEFDS19MSU5LX0NPTkZJRycpO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVNTUxpbmtEZWZhdWx0Q29uZmlnKFxyXG4gIGNvbmZpZzogUGFydGlhbDxNTUxpbmtDb25maWc+LFxyXG4pOiBQcm92aWRlciB7XHJcbiAgY29uc3QgY2ZnOiBNTUxpbmtDb25maWcgPSB7XHJcbiAgICBwcmVsb2FkT246ICdob3ZlcicsXHJcbiAgICB1c2VNb3VzZURvd246IGZhbHNlLFxyXG4gICAgLi4uY29uZmlnLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBwcm92aWRlOiBjb25maWdUb2tlbixcclxuICAgIHVzZVZhbHVlOiBjZmcsXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5qZWN0Q29uZmlnKCkge1xyXG4gIGNvbnN0IGNmZyA9IGluamVjdChjb25maWdUb2tlbiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuICByZXR1cm4ge1xyXG4gICAgcHJlbG9hZE9uOiAnaG92ZXInIGFzIGNvbnN0LFxyXG4gICAgdXNlTW91c2VEb3duOiBmYWxzZSxcclxuICAgIC4uLmNmZyxcclxuICB9O1xyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1ttbUxpbmtdJyxcclxuICBleHBvcnRBczogJ21tTGluaycsXHJcbiAgaG9zdDoge1xyXG4gICAgJyhtb3VzZWVudGVyKSc6ICdvbkhvdmVyKCknLFxyXG4gIH0sXHJcbiAgaG9zdERpcmVjdGl2ZXM6IFtcclxuICAgIHtcclxuICAgICAgZGlyZWN0aXZlOiBSb3V0ZXJMaW5rLFxyXG4gICAgICBpbnB1dHM6IFtcclxuICAgICAgICAncm91dGVyTGluazogbW1MaW5rJyxcclxuICAgICAgICAndGFyZ2V0JyxcclxuICAgICAgICAncXVlcnlQYXJhbXMnLFxyXG4gICAgICAgICdmcmFnbWVudCcsXHJcbiAgICAgICAgJ3F1ZXJ5UGFyYW1zSGFuZGxpbmcnLFxyXG4gICAgICAgICdzdGF0ZScsXHJcbiAgICAgICAgJ3JlbGF0aXZlVG8nLFxyXG4gICAgICAgICdza2lwTG9jYXRpb25DaGFuZ2UnLFxyXG4gICAgICAgICdyZXBsYWNlVXJsJyxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpbmsge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyTGluayA9XHJcbiAgICBpbmplY3QoUm91dGVyTGluaywge1xyXG4gICAgICBzZWxmOiB0cnVlLFxyXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcclxuICAgIH0pID8/IGluamVjdChSb3V0ZXJMaW5rV2l0aEhyZWYsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxID0gaW5qZWN0KFByZWxvYWRSZXF1ZXN0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIHJlYWRvbmx5IHRhcmdldCA9IGlucHV0PHN0cmluZz4oKTtcclxuICByZWFkb25seSBxdWVyeVBhcmFtcyA9IGlucHV0PFBhcmFtcz4oKTtcclxuICByZWFkb25seSBmcmFnbWVudCA9IGlucHV0PHN0cmluZz4oKTtcclxuICByZWFkb25seSBxdWVyeVBhcmFtc0hhbmRsaW5nID0gaW5wdXQ8J21lcmdlJyB8ICdwcmVzZXJ2ZScgfCAnJz4oKTtcclxuICByZWFkb25seSBzdGF0ZSA9IGlucHV0PFJlY29yZDxzdHJpbmcsIGFueT4+KCk7XHJcbiAgcmVhZG9ubHkgaW5mbyA9IGlucHV0PHVua25vd24+KCk7XHJcbiAgcmVhZG9ubHkgcmVsYXRpdmVUbyA9IGlucHV0PEFjdGl2YXRlZFJvdXRlPigpO1xyXG4gIHJlYWRvbmx5IHNraXBMb2NhdGlvbkNoYW5nZSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcclxuICByZWFkb25seSByZXBsYWNlVXJsID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xyXG4gIHJlYWRvbmx5IG1tTGluayA9IGlucHV0PHN0cmluZyB8IGFueVtdIHwgVXJsVHJlZSB8IG51bGw+KG51bGwpO1xyXG4gIHJlYWRvbmx5IHByZWxvYWRPbiA9IGlucHV0PCdob3ZlcicgfCAndmlzaWJsZScgfCBudWxsPihcclxuICAgIGluamVjdENvbmZpZygpLnByZWxvYWRPbixcclxuICApO1xyXG4gIHJlYWRvbmx5IHVzZU1vdXNlRG93biA9IGlucHV0KGluamVjdENvbmZpZygpLnVzZU1vdXNlRG93biwge1xyXG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IGJlZm9yZU5hdmlnYXRlID0gaW5wdXQ8KCkgPT4gdm9pZD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgcHJlbG9hZGluZyA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHVybFRyZWUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gaW5wdXRUb1VybFRyZWUoXHJcbiAgICAgIHRoaXMucm91dGVyLFxyXG4gICAgICB0aGlzLm1tTGluaygpLFxyXG4gICAgICB0aGlzLnJlbGF0aXZlVG8oKSxcclxuICAgICAgdGhpcy5xdWVyeVBhcmFtcygpLFxyXG4gICAgICB0aGlzLmZyYWdtZW50KCksXHJcbiAgICAgIHRoaXMucXVlcnlQYXJhbXNIYW5kbGluZygpLFxyXG4gICAgICB0aGlzLnJvdXRlckxpbms/LnVybFRyZWUsXHJcbiAgICApO1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGZ1bGxQYXRoID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRyZWVUb1NlcmlhbGl6ZWRVcmwodGhpcy5yb3V0ZXIsIHRoaXMudXJsVHJlZSgpKTtcclxuICB9KTtcclxuXHJcbiAgb25Ib3ZlcigpIHtcclxuICAgIGlmICh1bnRyYWNrZWQodGhpcy5wcmVsb2FkT24pICE9PSAnaG92ZXInKSByZXR1cm47XHJcbiAgICB0aGlzLnJlcXVlc3RQcmVsb2FkKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbXHJcbiAgICAnJGV2ZW50LmJ1dHRvbicsXHJcbiAgICAnJGV2ZW50LmN0cmxLZXknLFxyXG4gICAgJyRldmVudC5zaGlmdEtleScsXHJcbiAgICAnJGV2ZW50LmFsdEtleScsXHJcbiAgICAnJGV2ZW50Lm1ldGFLZXknLFxyXG4gIF0pXHJcbiAgb25Nb3VzZURvd24oXHJcbiAgICBidXR0b246IG51bWJlcixcclxuICAgIGN0cmxLZXk6IGJvb2xlYW4sXHJcbiAgICBzaGlmdEtleTogYm9vbGVhbixcclxuICAgIGFsdEtleTogYm9vbGVhbixcclxuICAgIG1ldGFLZXk6IGJvb2xlYW4sXHJcbiAgKSB7XHJcbiAgICBpZiAoIXVudHJhY2tlZCh0aGlzLnVzZU1vdXNlRG93bikpIHJldHVybjtcclxuICAgIHJldHVybiB0aGlzLnRyaWdnZXIoYnV0dG9uLCBjdHJsS2V5LCBzaGlmdEtleSwgYWx0S2V5LCBtZXRhS2V5KTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgW1xyXG4gICAgJyRldmVudC5idXR0b24nLFxyXG4gICAgJyRldmVudC5jdHJsS2V5JyxcclxuICAgICckZXZlbnQuc2hpZnRLZXknLFxyXG4gICAgJyRldmVudC5hbHRLZXknLFxyXG4gICAgJyRldmVudC5tZXRhS2V5JyxcclxuICBdKVxyXG4gIG9uQ2xpY2soXHJcbiAgICBidXR0b246IG51bWJlcixcclxuICAgIGN0cmxLZXk6IGJvb2xlYW4sXHJcbiAgICBzaGlmdEtleTogYm9vbGVhbixcclxuICAgIGFsdEtleTogYm9vbGVhbixcclxuICAgIG1ldGFLZXk6IGJvb2xlYW4sXHJcbiAgKSB7XHJcbiAgICBpZiAodW50cmFja2VkKHRoaXMudXNlTW91c2VEb3duKSkgcmV0dXJuO1xyXG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlcihidXR0b24sIGN0cmxLZXksIHNoaWZ0S2V5LCBhbHRLZXksIG1ldGFLZXkpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBlbGVtZW50VmlzaWJpbGl0eSgpO1xyXG5cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnByZWxvYWRPbigpICE9PSAndmlzaWJsZScpIHJldHVybjtcclxuICAgICAgaWYgKGludGVyc2VjdGlvbi52aXNpYmxlKCkpIHRoaXMucmVxdWVzdFByZWxvYWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0UHJlbG9hZCgpIHtcclxuICAgIGNvbnN0IGZwID0gdW50cmFja2VkKHRoaXMuZnVsbFBhdGgpO1xyXG4gICAgaWYgKCF0aGlzLnJvdXRlckxpbmsgfHwgIWZwKSByZXR1cm47XHJcbiAgICB0aGlzLnJlcS5zdGFydFByZWxvYWQoZnApO1xyXG4gICAgdGhpcy5wcmVsb2FkaW5nLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJpZ2dlcihcclxuICAgIGJ1dHRvbjogbnVtYmVyLFxyXG4gICAgY3RybEtleTogYm9vbGVhbixcclxuICAgIHNoaWZ0S2V5OiBib29sZWFuLFxyXG4gICAgYWx0S2V5OiBib29sZWFuLFxyXG4gICAgbWV0YUtleTogYm9vbGVhbixcclxuICApIHtcclxuICAgIHVudHJhY2tlZCh0aGlzLmJlZm9yZU5hdmlnYXRlKT8uKCk7XHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXJMaW5rPy5vbkNsaWNrKGJ1dHRvbiwgY3RybEtleSwgc2hpZnRLZXksIGFsdEtleSwgbWV0YUtleSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { computed, inject, isSignal, untracked, } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { toWritable } from '@mmstack/primitives';\n/**\n * Creates a WritableSignal that synchronizes with a specific URL query parameter,\n * enabling two-way binding between the signal's state and the URL.\n *\n * Reading the signal provides the current value of the query parameter (or null if absent).\n * Setting the signal updates the URL query parameter using `Router.navigate`, triggering\n * navigation and causing the signal to update reactively if the navigation is successful.\n *\n * @param key The key of the query parameter to synchronize with.\n * Can be a static string (e.g., `'search'`) or a function/signal returning a string\n * for dynamic keys (e.g., `() => this.userId() + '_filter'` or `computed(() => this.category() + '_sort')`).\n * The signal will reactively update if the key returned by the function/signal changes.\n * @returns {WritableSignal<string | null>} A signal representing the query parameter's value.\n * - Reading returns the current value string, or `null` if the parameter is absent in the URL.\n * - Setting the signal to a string updates the query parameter in the URL (e.g., `signal.set('value')` results in `?key=value`).\n * - Setting the signal to `null` removes the query parameter from the URL (e.g., `signal.set(null)` results in `?otherParam=...`).\n * - Automatically reflects changes if the query parameters update due to external navigation.\n * @remarks\n * - Requires Angular's `ActivatedRoute` and `Router` to be available in the injection context.\n * - Uses `Router.navigate` with `queryParamsHandling: 'merge'` to preserve other existing query parameters during updates.\n * - Handles dynamic keys reactively. If the result of the `key` function/signal changes, the signal will start reflecting the value of the *new* query parameter key.\n * - During Server-Side Rendering (SSR), it reads the initial value from the route snapshot. Write operations (`set`) might have limited or no effect on the server depending on the platform configuration.\n *\n * @example\n * ```ts\n * import { Component, computed, effect, signal } from '@angular/core';\n * import { queryParam } from '@mmstack/router-core'; // Adjust import path as needed\n * // import { FormsModule } from '@angular/forms'; // If using ngModel\n *\n * @Component({\n * selector: 'app-product-list',\n * standalone: true,\n * // imports: [FormsModule], // If using ngModel\n * template: `\n * <div>\n * Sort By:\n * <select [value]=\"sortSignal() ?? ''\" (change)=\"sortSignal.set($any($event.target).value || null)\">\n * <option value=\"\">Default</option>\n * <option value=\"price_asc\">Price Asc</option>\n * <option value=\"price_desc\">Price Desc</option>\n * <option value=\"name\">Name</option>\n * </select>\n * <button (click)=\"sortSignal.set(null)\" [disabled]=\"!sortSignal()\">Clear Sort</button>\n * </div>\n * <div>\n * Page:\n * <input type=\"number\" min=\"1\" [value]=\"pageSignal() ?? '1'\" #p (input)=\"setPage(p.value)\"/>\n * </div>\n * * `\n * })\n * export class ProductListComponent {\n * // Two-way bind the 'sort' query parameter (?sort=...)\n * // Defaults to null if param is missing\n * sortSignal = queryParam('sort');\n *\n * // Example with a different type (needs serialization or separate logic)\n * // For simplicity, we treat page as string | null here\n * pageSignal = queryParam('page');\n *\n * constructor() {\n * effect(() => {\n * const currentSort = this.sortSignal();\n * const currentPage = this.pageSignal(); // Read as string | null\n * console.log('Sort/Page changed, reloading products for:', { sort: currentSort, page: currentPage });\n * // --- Fetch data based on currentSort and currentPage ---\n * });\n * }\n *\n * setPage(value: string): void {\n * const pageNum = parseInt(value, 10);\n * // Set to null if page is 1 (to remove param), otherwise set string value\n * this.pageSignal.set(isNaN(pageNum) || pageNum <= 1 ? null : pageNum.toString());\n * }\n * }\n * ```\n */\nexport function queryParam(key) {\n const route = inject(ActivatedRoute);\n const router = inject(Router);\n const keySignal = typeof key === 'string'\n ? computed(() => key)\n : isSignal(key)\n ? key\n : computed(key);\n const queryParamMap = toSignal(route.queryParamMap, {\n initialValue: route.snapshot.queryParamMap,\n });\n const queryParams = toSignal(route.queryParams, {\n initialValue: route.snapshot.queryParams,\n });\n const queryParam = computed(() => queryParamMap().get(keySignal()), ...(ngDevMode ? [{ debugName: \"queryParam\" }] : []));\n const set = (newValue) => {\n const next = {\n ...untracked(queryParams),\n };\n const key = untracked(keySignal);\n if (newValue === null) {\n delete next[key];\n }\n else {\n next[key] = newValue;\n }\n router.navigate([], {\n relativeTo: route,\n queryParams: next,\n queryParamsHandling: 'merge',\n });\n };\n return toWritable(queryParam, set);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL3F1ZXJ5LXBhcmFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyRUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixHQUE0QjtJQUU1QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTlCLE1BQU0sU0FBUyxHQUNiLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFDckIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDckIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDYixDQUFDLENBQUMsR0FBRztZQUNMLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdEIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7UUFDbEQsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYTtLQUMzQyxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtRQUM5QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXO0tBQ3pDLENBQUMsQ0FBQztJQUVILE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsc0RBQUMsQ0FBQztJQUVwRSxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQXVCLEVBQUUsRUFBRTtRQUN0QyxNQUFNLElBQUksR0FBRztZQUNYLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQztTQUMxQixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpDLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDbEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsV0FBVyxFQUFFLElBQUk7WUFDakIsbUJBQW1CLEVBQUUsT0FBTztTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgaW5qZWN0LFxyXG4gIGlzU2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxuICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICdAbW1zdGFjay9wcmltaXRpdmVzJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgV3JpdGFibGVTaWduYWwgdGhhdCBzeW5jaHJvbml6ZXMgd2l0aCBhIHNwZWNpZmljIFVSTCBxdWVyeSBwYXJhbWV0ZXIsXHJcbiAqIGVuYWJsaW5nIHR3by13YXkgYmluZGluZyBiZXR3ZWVuIHRoZSBzaWduYWwncyBzdGF0ZSBhbmQgdGhlIFVSTC5cclxuICpcclxuICogUmVhZGluZyB0aGUgc2lnbmFsIHByb3ZpZGVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXIgKG9yIG51bGwgaWYgYWJzZW50KS5cclxuICogU2V0dGluZyB0aGUgc2lnbmFsIHVwZGF0ZXMgdGhlIFVSTCBxdWVyeSBwYXJhbWV0ZXIgdXNpbmcgYFJvdXRlci5uYXZpZ2F0ZWAsIHRyaWdnZXJpbmdcclxuICogbmF2aWdhdGlvbiBhbmQgY2F1c2luZyB0aGUgc2lnbmFsIHRvIHVwZGF0ZSByZWFjdGl2ZWx5IGlmIHRoZSBuYXZpZ2F0aW9uIGlzIHN1Y2Nlc3NmdWwuXHJcbiAqXHJcbiAqIEBwYXJhbSBrZXkgVGhlIGtleSBvZiB0aGUgcXVlcnkgcGFyYW1ldGVyIHRvIHN5bmNocm9uaXplIHdpdGguXHJcbiAqIENhbiBiZSBhIHN0YXRpYyBzdHJpbmcgKGUuZy4sIGAnc2VhcmNoJ2ApIG9yIGEgZnVuY3Rpb24vc2lnbmFsIHJldHVybmluZyBhIHN0cmluZ1xyXG4gKiBmb3IgZHluYW1pYyBrZXlzIChlLmcuLCBgKCkgPT4gdGhpcy51c2VySWQoKSArICdfZmlsdGVyJ2Agb3IgYGNvbXB1dGVkKCgpID0+IHRoaXMuY2F0ZWdvcnkoKSArICdfc29ydCcpYCkuXHJcbiAqIFRoZSBzaWduYWwgd2lsbCByZWFjdGl2ZWx5IHVwZGF0ZSBpZiB0aGUga2V5IHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbi9zaWduYWwgY2hhbmdlcy5cclxuICogQHJldHVybnMge1dyaXRhYmxlU2lnbmFsPHN0cmluZyB8IG51bGw+fSBBIHNpZ25hbCByZXByZXNlbnRpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcidzIHZhbHVlLlxyXG4gKiAtIFJlYWRpbmcgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBzdHJpbmcsIG9yIGBudWxsYCBpZiB0aGUgcGFyYW1ldGVyIGlzIGFic2VudCBpbiB0aGUgVVJMLlxyXG4gKiAtIFNldHRpbmcgdGhlIHNpZ25hbCB0byBhIHN0cmluZyB1cGRhdGVzIHRoZSBxdWVyeSBwYXJhbWV0ZXIgaW4gdGhlIFVSTCAoZS5nLiwgYHNpZ25hbC5zZXQoJ3ZhbHVlJylgIHJlc3VsdHMgaW4gYD9rZXk9dmFsdWVgKS5cclxuICogLSBTZXR0aW5nIHRoZSBzaWduYWwgdG8gYG51bGxgIHJlbW92ZXMgdGhlIHF1ZXJ5IHBhcmFtZXRlciBmcm9tIHRoZSBVUkwgKGUuZy4sIGBzaWduYWwuc2V0KG51bGwpYCByZXN1bHRzIGluIGA/b3RoZXJQYXJhbT0uLi5gKS5cclxuICogLSBBdXRvbWF0aWNhbGx5IHJlZmxlY3RzIGNoYW5nZXMgaWYgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXBkYXRlIGR1ZSB0byBleHRlcm5hbCBuYXZpZ2F0aW9uLlxyXG4gKiBAcmVtYXJrc1xyXG4gKiAtIFJlcXVpcmVzIEFuZ3VsYXIncyBgQWN0aXZhdGVkUm91dGVgIGFuZCBgUm91dGVyYCB0byBiZSBhdmFpbGFibGUgaW4gdGhlIGluamVjdGlvbiBjb250ZXh0LlxyXG4gKiAtIFVzZXMgYFJvdXRlci5uYXZpZ2F0ZWAgd2l0aCBgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ2AgdG8gcHJlc2VydmUgb3RoZXIgZXhpc3RpbmcgcXVlcnkgcGFyYW1ldGVycyBkdXJpbmcgdXBkYXRlcy5cclxuICogLSBIYW5kbGVzIGR5bmFtaWMga2V5cyByZWFjdGl2ZWx5LiBJZiB0aGUgcmVzdWx0IG9mIHRoZSBga2V5YCBmdW5jdGlvbi9zaWduYWwgY2hhbmdlcywgdGhlIHNpZ25hbCB3aWxsIHN0YXJ0IHJlZmxlY3RpbmcgdGhlIHZhbHVlIG9mIHRoZSAqbmV3KiBxdWVyeSBwYXJhbWV0ZXIga2V5LlxyXG4gKiAtIER1cmluZyBTZXJ2ZXItU2lkZSBSZW5kZXJpbmcgKFNTUiksIGl0IHJlYWRzIHRoZSBpbml0aWFsIHZhbHVlIGZyb20gdGhlIHJvdXRlIHNuYXBzaG90LiBXcml0ZSBvcGVyYXRpb25zIChgc2V0YCkgbWlnaHQgaGF2ZSBsaW1pdGVkIG9yIG5vIGVmZmVjdCBvbiB0aGUgc2VydmVyIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gY29uZmlndXJhdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICogaW1wb3J0IHsgcXVlcnlQYXJhbSB9IGZyb20gJ0BtbXN0YWNrL3JvdXRlci1jb3JlJzsgLy8gQWRqdXN0IGltcG9ydCBwYXRoIGFzIG5lZWRlZFxyXG4gKiAvLyBpbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJzsgLy8gSWYgdXNpbmcgbmdNb2RlbFxyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtcHJvZHVjdC1saXN0JyxcclxuICogc3RhbmRhbG9uZTogdHJ1ZSxcclxuICogLy8gaW1wb3J0czogW0Zvcm1zTW9kdWxlXSwgLy8gSWYgdXNpbmcgbmdNb2RlbFxyXG4gKiB0ZW1wbGF0ZTogYFxyXG4gKiA8ZGl2PlxyXG4gKiBTb3J0IEJ5OlxyXG4gKiA8c2VsZWN0IFt2YWx1ZV09XCJzb3J0U2lnbmFsKCkgPz8gJydcIiAoY2hhbmdlKT1cInNvcnRTaWduYWwuc2V0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUgfHwgbnVsbClcIj5cclxuICogPG9wdGlvbiB2YWx1ZT1cIlwiPkRlZmF1bHQ8L29wdGlvbj5cclxuICogPG9wdGlvbiB2YWx1ZT1cInByaWNlX2FzY1wiPlByaWNlIEFzYzwvb3B0aW9uPlxyXG4gKiA8b3B0aW9uIHZhbHVlPVwicHJpY2VfZGVzY1wiPlByaWNlIERlc2M8L29wdGlvbj5cclxuICogPG9wdGlvbiB2YWx1ZT1cIm5hbWVcIj5OYW1lPC9vcHRpb24+XHJcbiAqIDwvc2VsZWN0PlxyXG4gKiA8YnV0dG9uIChjbGljayk9XCJzb3J0U2lnbmFsLnNldChudWxsKVwiIFtkaXNhYmxlZF09XCIhc29ydFNpZ25hbCgpXCI+Q2xlYXIgU29ydDwvYnV0dG9uPlxyXG4gKiA8L2Rpdj5cclxuICogPGRpdj5cclxuICogUGFnZTpcclxuICogPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCIgW3ZhbHVlXT1cInBhZ2VTaWduYWwoKSA/PyAnMSdcIiAjcCAoaW5wdXQpPVwic2V0UGFnZShwLnZhbHVlKVwiLz5cclxuICogPC9kaXY+XHJcbiAqICogYFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgUHJvZHVjdExpc3RDb21wb25lbnQge1xyXG4gKiAvLyBUd28td2F5IGJpbmQgdGhlICdzb3J0JyBxdWVyeSBwYXJhbWV0ZXIgKD9zb3J0PS4uLilcclxuICogLy8gRGVmYXVsdHMgdG8gbnVsbCBpZiBwYXJhbSBpcyBtaXNzaW5nXHJcbiAqIHNvcnRTaWduYWwgPSBxdWVyeVBhcmFtKCdzb3J0Jyk7XHJcbiAqXHJcbiAqIC8vIEV4YW1wbGUgd2l0aCBhIGRpZmZlcmVudCB0eXBlIChuZWVkcyBzZXJpYWxpemF0aW9uIG9yIHNlcGFyYXRlIGxvZ2ljKVxyXG4gKiAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgdHJlYXQgcGFnZSBhcyBzdHJpbmcgfCBudWxsIGhlcmVcclxuICogcGFnZVNpZ25hbCA9IHF1ZXJ5UGFyYW0oJ3BhZ2UnKTtcclxuICpcclxuICogY29uc3RydWN0b3IoKSB7XHJcbiAqIGVmZmVjdCgoKSA9PiB7XHJcbiAqIGNvbnN0IGN1cnJlbnRTb3J0ID0gdGhpcy5zb3J0U2lnbmFsKCk7XHJcbiAqIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5wYWdlU2lnbmFsKCk7IC8vIFJlYWQgYXMgc3RyaW5nIHwgbnVsbFxyXG4gKiBjb25zb2xlLmxvZygnU29ydC9QYWdlIGNoYW5nZWQsIHJlbG9hZGluZyBwcm9kdWN0cyBmb3I6JywgeyBzb3J0OiBjdXJyZW50U29ydCwgcGFnZTogY3VycmVudFBhZ2UgfSk7XHJcbiAqIC8vIC0tLSBGZXRjaCBkYXRhIGJhc2VkIG9uIGN1cnJlbnRTb3J0IGFuZCBjdXJyZW50UGFnZSAtLS1cclxuICogfSk7XHJcbiAqIH1cclxuICpcclxuICogc2V0UGFnZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAqIGNvbnN0IHBhZ2VOdW0gPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gKiAvLyBTZXQgdG8gbnVsbCBpZiBwYWdlIGlzIDEgKHRvIHJlbW92ZSBwYXJhbSksIG90aGVyd2lzZSBzZXQgc3RyaW5nIHZhbHVlXHJcbiAqIHRoaXMucGFnZVNpZ25hbC5zZXQoaXNOYU4ocGFnZU51bSkgfHwgcGFnZU51bSA8PSAxID8gbnVsbCA6IHBhZ2VOdW0udG9TdHJpbmcoKSk7XHJcbiAqIH1cclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVBhcmFtKFxyXG4gIGtleTogc3RyaW5nIHwgKCgpID0+IHN0cmluZyksXHJcbik6IFdyaXRhYmxlU2lnbmFsPHN0cmluZyB8IG51bGw+IHtcclxuICBjb25zdCByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIGNvbnN0IGtleVNpZ25hbCA9XHJcbiAgICB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJ1xyXG4gICAgICA/IGNvbXB1dGVkKCgpID0+IGtleSlcclxuICAgICAgOiBpc1NpZ25hbChrZXkpXHJcbiAgICAgICAgPyBrZXlcclxuICAgICAgICA6IGNvbXB1dGVkKGtleSk7XHJcblxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1NYXAgPSB0b1NpZ25hbChyb3V0ZS5xdWVyeVBhcmFtTWFwLCB7XHJcbiAgICBpbml0aWFsVmFsdWU6IHJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAsXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdG9TaWduYWwocm91dGUucXVlcnlQYXJhbXMsIHtcclxuICAgIGluaXRpYWxWYWx1ZTogcm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMsXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW0gPSBjb21wdXRlZCgoKSA9PiBxdWVyeVBhcmFtTWFwKCkuZ2V0KGtleVNpZ25hbCgpKSk7XHJcblxyXG4gIGNvbnN0IHNldCA9IChuZXdWYWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xyXG4gICAgY29uc3QgbmV4dCA9IHtcclxuICAgICAgLi4udW50cmFja2VkKHF1ZXJ5UGFyYW1zKSxcclxuICAgIH07XHJcbiAgICBjb25zdCBrZXkgPSB1bnRyYWNrZWQoa2V5U2lnbmFsKTtcclxuXHJcbiAgICBpZiAobmV3VmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgZGVsZXRlIG5leHRba2V5XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5leHRba2V5XSA9IG5ld1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICByZWxhdGl2ZVRvOiByb3V0ZSxcclxuICAgICAgcXVlcnlQYXJhbXM6IG5leHQsXHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICByZXR1cm4gdG9Xcml0YWJsZShxdWVyeVBhcmFtLCBzZXQpO1xyXG59XHJcbiJdfQ==","import { inject, InjectionToken } from '@angular/core';\nconst token = new InjectionToken('MMSTACK_TITLE_CONFIG');\n/**\n * used to provide the title configuration, will not be applied unless a `createTitle` resolver is used\n */\nexport function provideTitleConfig(config) {\n const prefix = config?.prefix ?? '';\n const prefixFn = typeof prefix === 'function'\n ? prefix\n : (title) => `${prefix}${title}`;\n return {\n provide: token,\n useValue: {\n parser: prefixFn,\n keepLastKnown: config?.keepLastKnownTitle ?? true,\n },\n };\n}\nexport function injectTitleConfig() {\n return inject(token);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi90aXRsZS90aXRsZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUE2QmpFLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFzQixzQkFBc0IsQ0FBQyxDQUFDO0FBRTlFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQW9CO0lBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO0lBRXBDLE1BQU0sUUFBUSxHQUNaLE9BQU8sTUFBTSxLQUFLLFVBQVU7UUFDMUIsQ0FBQyxDQUFDLE1BQU07UUFDUixDQUFDLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBRTdDLE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLGFBQWEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLElBQUksSUFBSTtTQUNsRDtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBUaXRsZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cclxuICogRGVmaW5lcyBob3cgY3JlYXRlVGl0bGUgc2hvdWxkIGJlaGF2ZVxyXG4gKiBAc2VlIHtjcmVhdGVUaXRsZX1cclxuICovXHJcbmV4cG9ydCB0eXBlIFRpdGxlQ29uZmlnID0ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSB0aXRsZSB0byBiZSB1c2VkIHdoZW4gbm8gdGl0bGUgaXMgc2V0LlxyXG4gICAqIElmIG5vdCBwcm92aWRlZCBpdCBkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmdcclxuICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAqL1xyXG4gIHByZWZpeD86IHN0cmluZyB8ICgodGl0bGU6IHN0cmluZykgPT4gc3RyaW5nKTtcclxuICAvKipcclxuICAgKiBpZiBmYWxzZSwgdGhlIHRpdGxlIHdpbGwgY2hhbmdlIHRvIHRoZSB1cmwsIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRydWUgYXMgdGhhdCBpcyBzdGFuZGFyZCBiZWhhdmlvclxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBrZWVwTGFzdEtub3duVGl0bGU/OiBib29sZWFuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSW50ZXJuYWxUaXRsZUNvbmZpZyA9IHtcclxuICBwYXJzZXI6ICh0aXRsZTogc3RyaW5nKSA9PiBzdHJpbmc7XHJcbiAga2VlcExhc3RLbm93bjogYm9vbGVhbjtcclxufTtcclxuXHJcbmNvbnN0IHRva2VuID0gbmV3IEluamVjdGlvblRva2VuPEludGVybmFsVGl0bGVDb25maWc+KCdNTVNUQUNLX1RJVExFX0NPTkZJRycpO1xyXG5cclxuLyoqXHJcbiAqIHVzZWQgdG8gcHJvdmlkZSB0aGUgdGl0bGUgY29uZmlndXJhdGlvbiwgd2lsbCBub3QgYmUgYXBwbGllZCB1bmxlc3MgYSBgY3JlYXRlVGl0bGVgIHJlc29sdmVyIGlzIHVzZWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGl0bGVDb25maWcoY29uZmlnPzogVGl0bGVDb25maWcpOiBQcm92aWRlciB7XHJcbiAgY29uc3QgcHJlZml4ID0gY29uZmlnPy5wcmVmaXggPz8gJyc7XHJcblxyXG4gIGNvbnN0IHByZWZpeEZuID1cclxuICAgIHR5cGVvZiBwcmVmaXggPT09ICdmdW5jdGlvbidcclxuICAgICAgPyBwcmVmaXhcclxuICAgICAgOiAodGl0bGU6IHN0cmluZykgPT4gYCR7cHJlZml4fSR7dGl0bGV9YDtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHByb3ZpZGU6IHRva2VuLFxyXG4gICAgdXNlVmFsdWU6IHtcclxuICAgICAgcGFyc2VyOiBwcmVmaXhGbixcclxuICAgICAga2VlcExhc3RLbm93bjogY29uZmlnPy5rZWVwTGFzdEtub3duVGl0bGUgPz8gdHJ1ZSxcclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFRpdGxlQ29uZmlnKCk6IEludGVybmFsVGl0bGVDb25maWcge1xyXG4gIHJldHVybiBpbmplY3QodG9rZW4pO1xyXG59XHJcbiJdfQ==","import { computed, effect, inject, Injectable, linkedSignal, untracked, } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { mutable, until } from '@mmstack/primitives';\nimport { injectLeafRoutes, injectSnapshotPathResolver } from '../util';\nimport { injectTitleConfig } from './title-config';\nimport * as i0 from \"@angular/core\";\nexport class TitleStore {\n title = inject(Title);\n map = mutable(new Map());\n leafRoutes = injectLeafRoutes();\n constructor() {\n const reverseLeaves = computed(() => this.leafRoutes().toReversed(), ...(ngDevMode ? [{ debugName: \"reverseLeaves\" }] : []));\n const currentResolvedTitles = computed(() => {\n const map = this.map();\n return reverseLeaves()\n .map((leaf) => map.get(leaf.path)?.() ?? leaf.route.title)\n .filter((v) => !!v);\n }, ...(ngDevMode ? [{ debugName: \"currentResolvedTitles\" }] : []));\n const currentTitle = computed(() => currentResolvedTitles().at(0) ?? '', ...(ngDevMode ? [{ debugName: \"currentTitle\" }] : []));\n const heldTitle = injectTitleConfig().keepLastKnown\n ? linkedSignal({\n source: () => currentTitle(),\n computation: (value, prev) => {\n if (!value)\n return prev?.value ?? '';\n return value;\n },\n })\n : currentTitle;\n effect(() => {\n this.title.setTitle(heldTitle());\n });\n }\n register(id, titleFn) {\n this.map.inline((m) => m.set(id, titleFn));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: TitleStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: TitleStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: TitleStore, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [] });\n/**\n *\n * Creates a title resolver function that can be used in Angular's router.\n *\n * @param fn\n * A function that returns a string or a Signal<string> representing the title.\n * @param awaitValue\n * If `true`, the resolver will wait until the title signal has a value before resolving.\n * Defaults to `false`.\n */\nexport function createTitle(fn, awaitValue = false) {\n return async (route) => {\n const store = inject(TitleStore);\n const resolver = injectSnapshotPathResolver();\n const fp = resolver(route);\n const { parser } = injectTitleConfig();\n const resolved = fn();\n const titleSignal = typeof resolved === 'string'\n ? computed(() => resolved)\n : computed(resolved);\n const parsedTitleSignal = computed(() => parser(titleSignal()), ...(ngDevMode ? [{ debugName: \"parsedTitleSignal\" }] : []));\n store.register(fp, parsedTitleSignal);\n if (awaitValue)\n await until(parsedTitleSignal, (v) => !!v);\n return Promise.resolve(untracked(parsedTitleSignal));\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL3RpdGxlL3RpdGxlLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUVaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBS25ELE1BQU0sT0FBTyxVQUFVO0lBQ0osS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixHQUFHLEdBQUcsT0FBTyxDQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEQsVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFakQ7UUFDRSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSx5REFBQyxDQUFDO1FBRXJFLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxhQUFhLEVBQUU7aUJBQ25CLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUN6RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLGlFQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSx3REFBQyxDQUFDO1FBRXpFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixFQUFFLENBQUMsYUFBYTtZQUNqRCxDQUFDLENBQUMsWUFBWSxDQUFpQjtnQkFDM0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRTtnQkFDNUIsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUMzQixJQUFJLENBQUMsS0FBSzt3QkFBRSxPQUFPLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNyQyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2FBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFFakIsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQVUsRUFBRSxPQUF1QjtRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO3VHQWxDVSxVQUFVOzJHQUFWLFVBQVUsY0FGVCxNQUFNOzsyRkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUFzQ0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsRUFBaUMsRUFDakMsVUFBVSxHQUFHLEtBQUs7SUFFbEIsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFtQixFQUFFO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRywwQkFBMEIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUV2QyxNQUFNLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUV0QixNQUFNLFdBQVcsR0FDZixPQUFPLFFBQVEsS0FBSyxRQUFRO1lBQzFCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekIsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLDZEQUFDLENBQUM7UUFFaEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUV0QyxJQUFJLFVBQVU7WUFBRSxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICBpbmplY3QsXHJcbiAgSW5qZWN0YWJsZSxcclxuICBsaW5rZWRTaWduYWwsXHJcbiAgU2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgUmVzb2x2ZUZuIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbXV0YWJsZSwgdW50aWwgfSBmcm9tICdAbW1zdGFjay9wcmltaXRpdmVzJztcclxuaW1wb3J0IHsgaW5qZWN0TGVhZlJvdXRlcywgaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIgfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHsgaW5qZWN0VGl0bGVDb25maWcgfSBmcm9tICcuL3RpdGxlLWNvbmZpZyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGl0bGVTdG9yZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZSA9IGluamVjdChUaXRsZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBtYXAgPSBtdXRhYmxlPE1hcDxzdHJpbmcsIFNpZ25hbDxzdHJpbmc+Pj4obmV3IE1hcCgpKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxlYWZSb3V0ZXMgPSBpbmplY3RMZWFmUm91dGVzKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgY29uc3QgcmV2ZXJzZUxlYXZlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubGVhZlJvdXRlcygpLnRvUmV2ZXJzZWQoKSk7XHJcblxyXG4gICAgY29uc3QgY3VycmVudFJlc29sdmVkVGl0bGVzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBtYXAgPSB0aGlzLm1hcCgpO1xyXG4gICAgICByZXR1cm4gcmV2ZXJzZUxlYXZlcygpXHJcbiAgICAgICAgLm1hcCgobGVhZikgPT4gbWFwLmdldChsZWFmLnBhdGgpPy4oKSA/PyBsZWFmLnJvdXRlLnRpdGxlKVxyXG4gICAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiAhIXYpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY3VycmVudFRpdGxlID0gY29tcHV0ZWQoKCkgPT4gY3VycmVudFJlc29sdmVkVGl0bGVzKCkuYXQoMCkgPz8gJycpO1xyXG5cclxuICAgIGNvbnN0IGhlbGRUaXRsZSA9IGluamVjdFRpdGxlQ29uZmlnKCkua2VlcExhc3RLbm93blxyXG4gICAgICA/IGxpbmtlZFNpZ25hbDxzdHJpbmcsIHN0cmluZz4oe1xyXG4gICAgICAgICAgc291cmNlOiAoKSA9PiBjdXJyZW50VGl0bGUoKSxcclxuICAgICAgICAgIGNvbXB1dGF0aW9uOiAodmFsdWUsIHByZXYpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHByZXY/LnZhbHVlID8/ICcnO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIDogY3VycmVudFRpdGxlO1xyXG5cclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudGl0bGUuc2V0VGl0bGUoaGVsZFRpdGxlKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlcihpZDogc3RyaW5nLCB0aXRsZUZuOiBTaWduYWw8c3RyaW5nPikge1xyXG4gICAgdGhpcy5tYXAuaW5saW5lKChtKSA9PiBtLnNldChpZCwgdGl0bGVGbikpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIENyZWF0ZXMgYSB0aXRsZSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGluIEFuZ3VsYXIncyByb3V0ZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSBmblxyXG4gKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHN0cmluZyBvciBhIFNpZ25hbDxzdHJpbmc+IHJlcHJlc2VudGluZyB0aGUgdGl0bGUuXHJcbiAqIEBwYXJhbSBhd2FpdFZhbHVlXHJcbiAqIElmIGB0cnVlYCwgdGhlIHJlc29sdmVyIHdpbGwgd2FpdCB1bnRpbCB0aGUgdGl0bGUgc2lnbmFsIGhhcyBhIHZhbHVlIGJlZm9yZSByZXNvbHZpbmcuXHJcbiAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGl0bGUoXHJcbiAgZm46ICgpID0+IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpLFxyXG4gIGF3YWl0VmFsdWUgPSBmYWxzZSxcclxuKTogUmVzb2x2ZUZuPHN0cmluZz4ge1xyXG4gIHJldHVybiBhc3luYyAocm91dGUpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xyXG4gICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoVGl0bGVTdG9yZSk7XHJcbiAgICBjb25zdCByZXNvbHZlciA9IGluamVjdFNuYXBzaG90UGF0aFJlc29sdmVyKCk7XHJcbiAgICBjb25zdCBmcCA9IHJlc29sdmVyKHJvdXRlKTtcclxuXHJcbiAgICBjb25zdCB7IHBhcnNlciB9ID0gaW5qZWN0VGl0bGVDb25maWcoKTtcclxuXHJcbiAgICBjb25zdCByZXNvbHZlZCA9IGZuKCk7XHJcblxyXG4gICAgY29uc3QgdGl0bGVTaWduYWwgPVxyXG4gICAgICB0eXBlb2YgcmVzb2x2ZWQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyBjb21wdXRlZCgoKSA9PiByZXNvbHZlZClcclxuICAgICAgICA6IGNvbXB1dGVkKHJlc29sdmVkKTtcclxuXHJcbiAgICBjb25zdCBwYXJzZWRUaXRsZVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHBhcnNlcih0aXRsZVNpZ25hbCgpKSk7XHJcblxyXG4gICAgc3RvcmUucmVnaXN0ZXIoZnAsIHBhcnNlZFRpdGxlU2lnbmFsKTtcclxuXHJcbiAgICBpZiAoYXdhaXRWYWx1ZSkgYXdhaXQgdW50aWwocGFyc2VkVGl0bGVTaWduYWwsICh2KSA9PiAhIXYpO1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW50cmFja2VkKHBhcnNlZFRpdGxlU2lnbmFsKSk7XHJcbiAgfTtcclxufVxyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1yb3V0ZXItY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9tbXN0YWNrLXJvdXRlci1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["token","parsePathSegment","filter"],"mappings":"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"}
1
+ {"version":3,"file":"mmstack-router-core.mjs","sources":["../../../../../packages/router/core/src/lib/breadcrumb/breadcrumb-config.ts","../../../../../packages/router/core/src/lib/url.ts","../../../../../packages/router/core/src/lib/util/leaf.store.ts","../../../../../packages/router/core/src/lib/breadcrumb/breadcrumb.ts","../../../../../packages/router/core/src/lib/breadcrumb/breadcrumb-store.ts","../../../../../packages/router/core/src/lib/util/create-route-predicate.ts","../../../../../packages/router/core/src/lib/util/find-path.ts","../../../../../packages/router/core/src/lib/util/snapshot-path.ts","../../../../../packages/router/core/src/lib/breadcrumb/breadcrumb-resolver.ts","../../../../../packages/router/core/src/lib/preloading/preload-requester.ts","../../../../../packages/router/core/src/lib/preloading/preload-strategy.ts","../../../../../packages/router/core/src/lib/link.ts","../../../../../packages/router/core/src/lib/query-param.ts","../../../../../packages/router/core/src/lib/title/title-config.ts","../../../../../packages/router/core/src/lib/title/title-store.ts","../../../../../packages/router/core/src/mmstack-router-core.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\r\nimport { ResolvedLeafRoute } from '../util';\r\n\r\n/**\r\n * A function that returns a custom label generation function.\r\n * The outer function is called in a root injection context\r\n * The returned function takes a `ResolvedLeafRoute` and produces a string label for the breadcrumb.\r\n * As the inner function is wrapped in a computed, changes to signals called within it will update the breadcrumb label reactively.\r\n */\r\ntype GenerateBreadcrumbFn = () => (leaf: ResolvedLeafRoute) => string;\r\n\r\n/**\r\n * Configuration options for the breadcrumb system.\r\n * Use `provideBreadcrumbConfig` to supply these options to your application.\r\n */\r\n\r\nexport type BreadcrumbConfig = {\r\n /**\r\n * Defines how breadcrumb labels are generated.\r\n * - If set to `'manual'`, breadcrumbs will only be displayed if manually registered\r\n * via `createBreadcrumb`. Automatic generation based on routes is disabled.\r\n * - Alternatively provide a custom label generation function\r\n * If left undefined, the system will automatically generate labels based on the route's title, data, or path.\r\n * @see GenerateBreadcrumbFn\r\n * @example\r\n * ```typescript\r\n * // For custom label generation:\r\n * // const myCustomLabelGenerator = () => (leaf: ResolvedLeafRoute) => {\r\n * // return leaf.route.data?.['customTitle'] || leaf.route.routeConfig?.path || 'Default';\r\n * // };\r\n * //\r\n * // config: { generation: myCustomLabelGenerator }\r\n * ```\r\n */\r\n generation?: 'manual' | GenerateBreadcrumbFn;\r\n};\r\n\r\n/**\r\n * @internal\r\n */\r\nconst token = new InjectionToken<BreadcrumbConfig>('MMSTACK_BREADCRUMB_CONFIG');\r\n\r\n/**\r\n * Provides configuration for the breadcrumb system.\r\n * @param config - A partial `BreadcrumbConfig` object with the desired settings. *\r\n * @see BreadcrumbConfig\r\n * @example\r\n * ```typescript\r\n * // In your app.module.ts or a standalone component's providers:\r\n * // import { provideBreadcrumbConfig } from './breadcrumb.config'; // Adjust path\r\n * // import { ResolvedLeafRoute } from './breadcrumb.type'; // Adjust path\r\n *\r\n * // const customLabelStrategy: GenerateBreadcrumbFn = () => {\r\n * // return (leaf: ResolvedLeafRoute): string => {\r\n * // // Example: Prioritize a 'navTitle' data property\r\n * // if (leaf.route.data?.['navTitle']) {\r\n * // return leaf.route.data['navTitle'];\r\n * // }\r\n * // // Fallback to a default mechanism\r\n * // return leaf.route.title || leaf.segment.resolved || 'Unnamed';\r\n * // };\r\n * // };\r\n *\r\n * export const appConfig = [\r\n * // ...rest\r\n * provideBreadcrumbConfig({\r\n * generation: customLabelStrategy, // or 'manual' to disable auto-generation\r\n * }),\r\n * ]\r\n * ```\r\n */\r\nexport function provideBreadcrumbConfig(config: Partial<BreadcrumbConfig>) {\r\n return {\r\n provide: token,\r\n useValue: {\r\n ...config,\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function injectBreadcrumbConfig(): BreadcrumbConfig {\r\n return (\r\n inject(token, {\r\n optional: true,\r\n }) ?? {}\r\n );\r\n}\r\n","import { inject, type Signal } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport {\r\n type Event,\r\n EventType,\r\n type NavigationEnd,\r\n Router,\r\n} from '@angular/router';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\n/**\r\n * Type guard to check if a Router Event is a NavigationEnd event.\r\n * @internal\r\n */\r\nfunction isNavigationEnd(e: Event): e is NavigationEnd {\r\n return 'type' in e && e.type === EventType.NavigationEnd;\r\n}\r\n\r\n/**\r\n * Creates a Signal that tracks the current router URL.\r\n *\r\n * The signal emits the URL string reflecting the router state *after* redirects\r\n * have completed for each successful navigation. It initializes with the router's\r\n * current URL state.\r\n *\r\n * @returns {Signal<string>} A Signal emitting the `urlAfterRedirects` upon successful navigation.\r\n *\r\n * @example\r\n * ```ts\r\n * import { Component, effect } from '@angular/core';\r\n * import { url } from '@mmstack/router-core'; // Adjust import path\r\n *\r\n * @Component({\r\n * selector: 'app-root',\r\n * template: `Current URL: {{ currentUrl() }}`\r\n * })\r\n * export class AppComponent {\r\n * currentUrl = url();\r\n *\r\n * constructor() {\r\n * effect(() => {\r\n * console.log('Navigation ended. New URL:', this.currentUrl());\r\n * // e.g., track page view with analytics\r\n * });\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function url(): Signal<string> {\r\n const router = inject(Router);\r\n\r\n return toSignal(\r\n router.events.pipe(\r\n filter(isNavigationEnd),\r\n map((e) => e.urlAfterRedirects),\r\n ),\r\n {\r\n initialValue: router.url,\r\n },\r\n );\r\n}\r\n","import { computed, inject, Injectable, Signal } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n Router,\r\n RouterStateSnapshot,\r\n} from '@angular/router';\r\nimport { url } from '../url';\r\n\r\n/**\r\n * @internal\r\n */\r\nexport type ResolvedLeafRoute = {\r\n route: ActivatedRouteSnapshot;\r\n segment: {\r\n path: string;\r\n resolved: string;\r\n };\r\n path: string;\r\n link: string;\r\n};\r\n\r\nfunction leafRoutes(): Signal<ResolvedLeafRoute[]> {\r\n const router = inject(Router);\r\n\r\n const getLeafRoutes = (\r\n snapshot: RouterStateSnapshot,\r\n ): ResolvedLeafRoute[] => {\r\n const routes: ResolvedLeafRoute[] = [];\r\n let route: ActivatedRouteSnapshot | null = snapshot.root;\r\n const processed = new Set<string>();\r\n\r\n while (route) {\r\n const allSegments = route.pathFromRoot.flatMap(\r\n (snap) => snap.routeConfig?.path ?? [],\r\n );\r\n\r\n const segments = allSegments.filter(Boolean);\r\n\r\n const path = router.serializeUrl(router.parseUrl(segments.join('/')));\r\n\r\n if (processed.has(path)) {\r\n route = route.firstChild;\r\n continue;\r\n }\r\n processed.add(path);\r\n\r\n const parts = route.pathFromRoot\r\n .flatMap((snap) => snap.url ?? [])\r\n .map((u) => u.path)\r\n .filter(Boolean);\r\n\r\n const link = router.serializeUrl(router.parseUrl(parts.join('/')));\r\n\r\n routes.push({\r\n route,\r\n segment: {\r\n path: segments.at(-1) ?? '',\r\n resolved: parts.at(-1) ?? '',\r\n },\r\n path,\r\n link,\r\n });\r\n route = route.firstChild;\r\n }\r\n\r\n return routes;\r\n };\r\n\r\n const currentUrl = url();\r\n\r\n const leafRoutes = computed(() => {\r\n currentUrl();\r\n return getLeafRoutes(router.routerState.snapshot);\r\n });\r\n\r\n return leafRoutes;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RouteLeafStore {\r\n readonly leaves = leafRoutes();\r\n}\r\n\r\nexport function injectLeafRoutes() {\r\n const store = inject(RouteLeafStore);\r\n return store.leaves;\r\n}\r\n","import { type Signal } from '@angular/core';\r\n\r\n/**\r\n * Represents a single breadcrumb item within the navigation path.\r\n * All dynamic properties are represented as Angular Signals to enable reactivity.\r\n */\r\nexport type Breadcrumb = {\r\n /**\r\n * A unique identifier for the breadcrumb item. Generally the unresolved path for example `/posts/:id`.\r\n * Useful for `@for` tracking in templates.\r\n */\r\n id: string;\r\n /**\r\n * The visible text for the breadcrumb item.\r\n * Updated reactively as the url/link based on\r\n * either a provided definition, or the current route.\r\n */\r\n label: Signal<string>;\r\n /**\r\n * An accessible label for the breadcrumb item.\r\n * Defaults to the same value as `label` if not provided.\r\n */\r\n ariaLabel: Signal<string>;\r\n /**\r\n * The URL link for the breadcrumb item.\r\n * Updates as the route changes.\r\n */\r\n link: Signal<string>;\r\n};\r\n\r\n/**\r\n * @internal\r\n */\r\nconst INTERNAL_BREADCRUMB_SYMBOL = Symbol.for('MMSTACK_INTERNAL_BREADCRUMB');\r\n\r\n/**\r\n * @internal\r\n */\r\nexport type InternalBreadcrumb = Breadcrumb & {\r\n [INTERNAL_BREADCRUMB_SYMBOL]: {\r\n active: Signal<boolean>;\r\n registered: boolean;\r\n };\r\n};\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function getBreadcrumbInternals(breadcrumb: InternalBreadcrumb) {\r\n return (breadcrumb as InternalBreadcrumb)[INTERNAL_BREADCRUMB_SYMBOL];\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function createInternalBreadcrumb(\r\n bc: Breadcrumb,\r\n active: Signal<boolean>,\r\n registered = true,\r\n): InternalBreadcrumb {\r\n return {\r\n ...bc,\r\n [INTERNAL_BREADCRUMB_SYMBOL]: {\r\n active,\r\n registered,\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function isInternalBreadcrumb(\r\n breadcrumb: Breadcrumb | InternalBreadcrumb,\r\n): breadcrumb is InternalBreadcrumb {\r\n return !!(breadcrumb as InternalBreadcrumb)[INTERNAL_BREADCRUMB_SYMBOL];\r\n}\r\n","import { computed, inject, Injectable, Signal } from '@angular/core';\r\nimport { mapArray, mutable } from '@mmstack/primitives';\r\nimport { injectLeafRoutes, ResolvedLeafRoute } from '../util/leaf.store';\r\nimport {\r\n Breadcrumb,\r\n createInternalBreadcrumb,\r\n getBreadcrumbInternals,\r\n InternalBreadcrumb,\r\n isInternalBreadcrumb,\r\n} from './breadcrumb';\r\nimport { injectBreadcrumbConfig } from './breadcrumb-config';\r\n\r\nfunction uppercaseFirst(str: string): string {\r\n const lcs = str.toLowerCase();\r\n return lcs.charAt(0).toUpperCase() + lcs.slice(1);\r\n}\r\n\r\nfunction removeMatrixAndQueryParams(path: string): string {\r\n const [cleanPath] = path.split(';');\r\n return cleanPath.split('?')[0];\r\n}\r\n\r\nfunction parsePathSegment(pathSegment: string): string {\r\n return pathSegment\r\n .split('/')\r\n .flatMap((part) => part.split('.'))\r\n .flatMap((part) => part.split('-'))\r\n .map((part) => uppercaseFirst(removeMatrixAndQueryParams(part)))\r\n .join(' ');\r\n}\r\n\r\nfunction generateLabel(leaf: ResolvedLeafRoute): string {\r\n const title = leaf.route.title ?? leaf.route.data?.['title'];\r\n\r\n if (title && typeof title === 'string') return title;\r\n if (leaf.segment.path.includes(':')) return leaf.segment.resolved;\r\n\r\n return parsePathSegment(leaf.segment.path);\r\n}\r\n\r\nfunction autoGenerateBreadcrumb(\r\n id: string,\r\n leaf: Signal<ResolvedLeafRoute>,\r\n autoGenerateFn: Signal<(leaf: ResolvedLeafRoute) => string>,\r\n): Breadcrumb {\r\n const label = computed(() => autoGenerateFn()(leaf()));\r\n\r\n return createInternalBreadcrumb(\r\n {\r\n id,\r\n label,\r\n ariaLabel: label,\r\n link: computed(() => leaf().link),\r\n },\r\n computed(\r\n () =>\r\n leaf().route.data?.['skipBreadcrumb'] !== true &&\r\n id !== '' &&\r\n id !== '/' &&\r\n leaf().segment.path !== '' &&\r\n leaf().segment.path !== '/' &&\r\n !leaf().segment.path.endsWith('/') &&\r\n !!label(),\r\n ),\r\n );\r\n}\r\n\r\nfunction injectGenerateLabelFn() {\r\n const { generation } = injectBreadcrumbConfig();\r\n\r\n if (typeof generation !== 'function') return computed(() => generateLabel);\r\n\r\n const provided = generation();\r\n return computed(() => provided);\r\n}\r\n\r\nfunction injectIsManual() {\r\n return injectBreadcrumbConfig().generation === 'manual';\r\n}\r\n\r\nfunction exposeActiveSignal(\r\n crumbSignal: Signal<Breadcrumb>,\r\n manual: boolean,\r\n): Signal<Breadcrumb> & {\r\n active: Signal<boolean>;\r\n} {\r\n const active = manual\r\n ? computed(() => {\r\n const crumb = crumbSignal();\r\n\r\n return (\r\n isInternalBreadcrumb(crumb) &&\r\n getBreadcrumbInternals(crumb).registered &&\r\n getBreadcrumbInternals(crumb).active()\r\n );\r\n })\r\n : computed(() => {\r\n const crumb = crumbSignal();\r\n if (!isInternalBreadcrumb(crumb)) return true;\r\n return getBreadcrumbInternals(crumb).active();\r\n });\r\n\r\n const sig = crumbSignal as Signal<Breadcrumb> & {\r\n active: Signal<boolean>;\r\n };\r\n\r\n sig.active = active;\r\n\r\n return sig;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class BreadcrumbStore {\r\n private readonly map = mutable<Map<string, InternalBreadcrumb>>(new Map());\r\n private readonly isManual = injectIsManual();\r\n private readonly autoGenerateLabelFn = injectGenerateLabelFn();\r\n private readonly leafRoutes = injectLeafRoutes();\r\n\r\n private readonly all = mapArray(\r\n this.leafRoutes,\r\n (leaf) => {\r\n const stableId = computed(() => leaf().path);\r\n\r\n return exposeActiveSignal(\r\n computed(\r\n () => {\r\n const id = stableId();\r\n\r\n const found = this.map().get(id);\r\n\r\n if (!found)\r\n return autoGenerateBreadcrumb(id, leaf, this.autoGenerateLabelFn);\r\n\r\n if (!id.includes(':')) return found;\r\n\r\n return {\r\n ...found,\r\n link: computed(() => leaf().link),\r\n };\r\n },\r\n {\r\n equal: (a, b) => a.id === b.id,\r\n },\r\n ),\r\n this.isManual,\r\n );\r\n },\r\n {\r\n equal: (a, b) => a.link === b.link,\r\n },\r\n );\r\n\r\n private readonly crumbs = computed((): Signal<Breadcrumb>[] =>\r\n this.all().filter((c) => c.active()),\r\n );\r\n\r\n readonly unwrapped = computed(() => this.crumbs().map((c) => c()));\r\n\r\n register(breadcrumb: InternalBreadcrumb) {\r\n this.map.inline((m) => m.set(breadcrumb.id, breadcrumb));\r\n }\r\n}\r\n\r\n/**\r\n * Injects and provides access to a reactive list of breadcrumbs.\r\n *\r\n * The breadcrumbs are ordered and reflect the current active navigation path.\r\n * @see Breadcrumb\r\n * @returns `Signal<Breadcrumb[]>`\r\n *\r\n * @example\r\n * ```typescript\r\n * @Component({\r\n * selector: 'app-breadcrumbs',\r\n * template: `\r\n * <nav aria-label=\"breadcrumb\">\r\n * <ol>\r\n * @for (crumb of breadcrumbs(); track crumb.id) {\r\n * <li>\r\n * <a [href]=\"crumb.link()\" [attr.aria-label]=\"crumb.ariaLabel()\">{{ crumb.label() }}</a>\r\n * </li>\r\n * }\r\n * </ol>\r\n * </nav>\r\n * `\r\n * })\r\n * export class MyBreadcrumbsComponent {\r\n * breadcrumbs = injectBreadcrumbs();\r\n * }\r\n * ```\r\n */\r\nexport function injectBreadcrumbs() {\r\n const store = inject(BreadcrumbStore);\r\n return store.unwrapped;\r\n}\r\n","function parsePathSegment(segmentString: string): {\r\n pathPart: string;\r\n matrixParams: Record<string, string>;\r\n} {\r\n const parts = segmentString.split(';');\r\n const pathPart = parts[0];\r\n const matrixParams: Record<string, string> = {};\r\n for (let i = 1; i < parts.length; i++) {\r\n const [key, value = 'true'] = parts[i].split('=');\r\n if (key) {\r\n matrixParams[key] = value;\r\n }\r\n }\r\n return { pathPart, matrixParams };\r\n}\r\n\r\nfunction createBasePredicate(path: string): (path: string) => boolean {\r\n const partPredicates = path\r\n .split('/')\r\n .filter((part) => !!part.trim())\r\n .map((configSegmentString) => {\r\n const { pathPart: configPathPart, matrixParams: configMatrixParams } =\r\n parsePathSegment(configSegmentString);\r\n\r\n let singlePathPartPredicate: (linkSegmentPathPart: string) => boolean;\r\n if (configPathPart.startsWith(':')) {\r\n singlePathPartPredicate = () => true;\r\n } else {\r\n singlePathPartPredicate = (linkSegmentPathPart: string) =>\r\n linkSegmentPathPart === configPathPart;\r\n }\r\n\r\n const configSegmentHasMatrixParams =\r\n Object.keys(configMatrixParams).length > 0;\r\n\r\n return (linkSegmentString: string) => {\r\n const { pathPart: linkPathPart, matrixParams: linkMatrixParams } =\r\n parsePathSegment(linkSegmentString);\r\n\r\n if (!singlePathPartPredicate(linkPathPart)) {\r\n return false;\r\n }\r\n\r\n if (!configSegmentHasMatrixParams) {\r\n return true;\r\n }\r\n\r\n return Object.entries(configMatrixParams).every(\r\n ([key, value]) =>\r\n Object.prototype.hasOwnProperty.call(linkMatrixParams, key) &&\r\n linkMatrixParams[key] === value,\r\n );\r\n };\r\n });\r\n\r\n return (path: string) => {\r\n const linkPathOnly = path.split(/[?#]/).at(0) ?? '';\r\n if (!linkPathOnly && partPredicates.length > 0) return false;\r\n if (!linkPathOnly && partPredicates.length === 0) return true;\r\n\r\n const parts = linkPathOnly.split('/').filter((part) => !!part.trim());\r\n if (parts.length < partPredicates.length) return false;\r\n\r\n return parts.every((seg, idx) => {\r\n const pred = partPredicates.at(idx);\r\n if (!pred) return true;\r\n return pred(seg);\r\n });\r\n };\r\n}\r\n\r\ntype ParsedSegment = {\r\n pathPart: string;\r\n matrixParams: Record<string, string>;\r\n};\r\n\r\nfunction singleSegmentMatches(\r\n configSegment: ParsedSegment,\r\n linkSegment: ParsedSegment,\r\n): boolean {\r\n if (configSegment.pathPart === ':') {\r\n return true;\r\n } else if (configSegment.pathPart !== linkSegment.pathPart) {\r\n return false;\r\n }\r\n\r\n const configMatrix = configSegment.matrixParams;\r\n const linkMatrix = linkSegment.matrixParams;\r\n for (const key in configMatrix) {\r\n if (\r\n !Object.prototype.hasOwnProperty.call(linkMatrix, key) ||\r\n linkMatrix[key] !== configMatrix[key]\r\n ) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nfunction matchSegmentsRecursive(\r\n configSegments: ParsedSegment[],\r\n linkSegments: ParsedSegment[],\r\n configIdx: number,\r\n linkIdx: number,\r\n): boolean {\r\n if (configIdx === configSegments.length) {\r\n return linkIdx === linkSegments.length;\r\n }\r\n\r\n if (linkIdx === linkSegments.length) {\r\n for (let i = configIdx; i < configSegments.length; i++) {\r\n if (configSegments[i].pathPart !== '**') {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n const currentConfigSegment = configSegments[configIdx];\r\n\r\n if (currentConfigSegment.pathPart === '**') {\r\n if (\r\n matchSegmentsRecursive(\r\n configSegments,\r\n linkSegments,\r\n configIdx + 1,\r\n linkIdx,\r\n )\r\n ) {\r\n return true;\r\n }\r\n\r\n if (linkIdx < linkSegments.length) {\r\n if (\r\n matchSegmentsRecursive(\r\n configSegments,\r\n linkSegments,\r\n configIdx,\r\n linkIdx + 1,\r\n )\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n } else {\r\n if (\r\n linkIdx < linkSegments.length &&\r\n singleSegmentMatches(currentConfigSegment, linkSegments[linkIdx])\r\n ) {\r\n return matchSegmentsRecursive(\r\n configSegments,\r\n linkSegments,\r\n configIdx + 1,\r\n linkIdx + 1,\r\n );\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction createWildcardPredicate(path: string): (linkPath: string) => boolean {\r\n const configSegments = path\r\n .split('/')\r\n .filter((p) => !!p.trim())\r\n .map((segment) => parsePathSegment(segment));\r\n\r\n return (linkPath: string): boolean => {\r\n const linkPathOnly = linkPath.split(/[?#]/).at(0) ?? '';\r\n const linkSegments = linkPathOnly\r\n .split('/')\r\n .filter((p) => !!p.trim())\r\n .map((segment) => parsePathSegment(segment));\r\n\r\n return matchSegmentsRecursive(configSegments, linkSegments, 0, 0);\r\n };\r\n}\r\n\r\nexport function createRoutePredicate(\r\n path: string,\r\n): (linkPath: string) => boolean {\r\n return path.includes('**')\r\n ? createWildcardPredicate(path)\r\n : createBasePredicate(path);\r\n}\r\n","// The following functions are adapted from ngx-quicklink,\r\n// (https://github.com/mgechev/ngx-quicklink)\r\n// Copyright (c) Minko Gechev and contributors, licensed under the MIT License.\r\n\r\nimport { PRIMARY_OUTLET, Route } from '@angular/router';\r\n\r\nfunction isPrimaryRoute(route: Route): boolean {\r\n return route.outlet === PRIMARY_OUTLET || !route.outlet;\r\n}\r\n\r\nexport const findPath = (config: Route[], route: Route): string => {\r\n const configQueue = config.slice();\r\n const parent = new Map<Route, Route>();\r\n const visited = new Set<Route>();\r\n\r\n while (configQueue.length) {\r\n const el = configQueue.shift();\r\n if (!el) {\r\n continue;\r\n }\r\n\r\n visited.add(el);\r\n\r\n if (el === route) {\r\n break;\r\n }\r\n\r\n (el.children || []).forEach((childRoute: Route) => {\r\n if (!visited.has(childRoute)) {\r\n parent.set(childRoute, el);\r\n configQueue.push(childRoute);\r\n }\r\n });\r\n\r\n const lazyRoutes = (el as any)._loadedRoutes || [];\r\n if (Array.isArray(lazyRoutes)) {\r\n lazyRoutes.forEach((lazyRoute: Route) => {\r\n if (lazyRoute && !visited.has(lazyRoute)) {\r\n parent.set(lazyRoute, el);\r\n configQueue.push(lazyRoute);\r\n }\r\n });\r\n }\r\n }\r\n\r\n let path = '';\r\n let currentRoute: Route | undefined = route;\r\n\r\n while (currentRoute) {\r\n const currentPath = currentRoute.path || '';\r\n if (isPrimaryRoute(currentRoute)) {\r\n path = `/${currentPath}${path}`;\r\n } else {\r\n path = `/(${currentRoute.outlet}:${currentPath})${path}`;\r\n }\r\n currentRoute = parent.get(currentRoute);\r\n }\r\n\r\n let normalizedPath = path.replaceAll(/\\/+/g, '/');\r\n\r\n if (normalizedPath !== '/' && normalizedPath.endsWith('/')) {\r\n normalizedPath = normalizedPath.slice(0, -1);\r\n }\r\n\r\n return normalizedPath;\r\n};\r\n","import { inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\r\n\r\nexport function injectSnapshotPathResolver() {\r\n const router = inject(Router);\r\n\r\n return (route: ActivatedRouteSnapshot) => {\r\n const segments = route.pathFromRoot.flatMap(\r\n (snap) => snap.routeConfig?.path ?? [],\r\n );\r\n\r\n const joinedSegments = segments.filter(Boolean).join('/');\r\n\r\n return router.serializeUrl(router.parseUrl(joinedSegments));\r\n };\r\n}\r\n","import { computed, inject } from '@angular/core';\r\nimport {\r\n createUrlTreeFromSnapshot,\r\n Router,\r\n type ResolveFn,\r\n} from '@angular/router';\r\nimport { BreadcrumbStore } from './breadcrumb-store';\r\n\r\n/**\r\n * Options for defining a breadcrumb.\r\n *\r\n */\r\ntype CreateBreadcrumbOptions = {\r\n /**\r\n * The visible text for the breadcrumb.\r\n * Can be a static string or a function for dynamic labels.\r\n */\r\n label: string | (() => string);\r\n /**\r\n * An accessible label for the breadcrumb item.\r\n * Defaults to the value of `label` if not provided.\r\n * Can be a static string or a function returning a string for dynamic ARIA labels.\r\n */\r\n ariaLabel?: string | (() => string);\r\n /**\r\n * If `true`, the route resolver will wait until the `label` signal has a value before `resolving`\r\n */\r\n awaitValue?: boolean;\r\n};\r\n\r\nimport { until } from '@mmstack/primitives';\r\nimport { injectSnapshotPathResolver } from '../util';\r\nimport { Breadcrumb, createInternalBreadcrumb } from './breadcrumb';\r\n\r\n/**\r\n * Creates and registers a breadcrumb for a specific route.\r\n * This function is designed to be used as an Angular Route `ResolveFn`.\r\n * It handles the registration of the breadcrumb with the `BreadcrumbStore`\r\n * and ensures automatic deregistration when the route is destroyed.\r\n *\r\n * @param factory A function that returns a `CreateBreadcrumbOptions` object.\r\n * @see CreateBreadcrumbOptions\r\n *\r\n * @example\r\n * ```typescript\r\n * export const appRoutes: Routes = [\r\n * {\r\n * path: 'home',\r\n * component: HomeComponent,\r\n * resolve: {\r\n * breadcrumb: createBreadcrumb(() => ({\r\n * label: 'Home',\r\n * });\r\n * },\r\n * path: 'users/:userId',\r\n * component: UserProfileComponent,\r\n * resolve: {\r\n * breadcrumb: createBreadcrumb(() => {\r\n * const userStore = inject(UserStore);\r\n * return {\r\n * label: () => userStore.user().name ?? 'Loading...\r\n * };\r\n * })\r\n * },\r\n * }\r\n * ];\r\n * ```\r\n */\r\nexport function createBreadcrumb(\r\n factory: () => CreateBreadcrumbOptions,\r\n): ResolveFn<void> {\r\n return async (route) => {\r\n const router = inject(Router);\r\n const store = inject(BreadcrumbStore);\r\n const resolver = injectSnapshotPathResolver();\r\n\r\n const fp = resolver(route);\r\n\r\n const tree = createUrlTreeFromSnapshot(\r\n route,\r\n [],\r\n route.queryParams,\r\n route.fragment,\r\n );\r\n\r\n const provided = factory();\r\n\r\n const link = computed(() => router.serializeUrl(tree));\r\n\r\n const { label, ariaLabel = label } = provided;\r\n\r\n const bc: Breadcrumb = {\r\n id: fp,\r\n ariaLabel:\r\n typeof ariaLabel === 'string'\r\n ? computed(() => ariaLabel)\r\n : computed(ariaLabel),\r\n label:\r\n typeof label === 'string' ? computed(() => label) : computed(label),\r\n link,\r\n };\r\n\r\n store.register(\r\n createInternalBreadcrumb(\r\n bc,\r\n computed(() => route.data?.['skipBreadcrumb'] !== true),\r\n ),\r\n );\r\n\r\n if (provided.awaitValue) await until(bc.label, (v) => !!v);\r\n\r\n return Promise.resolve();\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PreloadRequester {\r\n private readonly preloadOnDemand$ = new Subject<string>();\r\n readonly preloadRequested$ = this.preloadOnDemand$.asObservable();\r\n\r\n startPreload(routePath: string) {\r\n this.preloadOnDemand$.next(routePath);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { PreloadingStrategy, type Route, Router } from '@angular/router';\r\nimport { EMPTY, filter, finalize, Observable, switchMap, take } from 'rxjs';\r\nimport { createRoutePredicate, findPath } from '../util';\r\nimport { PreloadRequester } from './preload-requester';\r\n\r\nfunction hasSlowConnection() {\r\n if (\r\n globalThis.window &&\r\n 'navigator' in globalThis.window &&\r\n 'connection' in globalThis.window.navigator &&\r\n typeof globalThis.window.navigator.connection === 'object' &&\r\n !!globalThis.window.navigator.connection\r\n ) {\r\n const is2g =\r\n 'effectiveType' in globalThis.window.navigator.connection &&\r\n typeof globalThis.window.navigator.connection.effectiveType ===\r\n 'string' &&\r\n globalThis.window.navigator.connection.effectiveType.endsWith('2g');\r\n if (is2g) return true;\r\n if (\r\n 'saveData' in globalThis.window.navigator.connection &&\r\n typeof globalThis.window.navigator.connection.saveData === 'boolean' &&\r\n globalThis.window.navigator.connection.saveData\r\n )\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction noPreload(route: Route) {\r\n return route.data && route.data['preload'] === false;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PreloadStrategy implements PreloadingStrategy {\r\n private readonly loading = new Set<string>();\r\n private readonly router = inject(Router);\r\n private readonly req = inject(PreloadRequester);\r\n\r\n preload(route: Route, load: () => Observable<any>): Observable<any> {\r\n if (noPreload(route) || hasSlowConnection()) return EMPTY;\r\n\r\n const fp = findPath(this.router.config, route);\r\n\r\n if (this.loading.has(fp)) return EMPTY;\r\n\r\n const predicate = createRoutePredicate(fp);\r\n return this.req.preloadRequested$.pipe(\r\n filter((path) => path === fp || predicate(path)),\r\n take(1),\r\n switchMap(() => load()),\r\n finalize(() => this.loading.delete(fp)),\r\n );\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n computed,\r\n Directive,\r\n effect,\r\n HostListener,\r\n inject,\r\n InjectionToken,\r\n input,\r\n output,\r\n Provider,\r\n untracked,\r\n} from '@angular/core';\r\nimport {\r\n type ActivatedRoute,\r\n type Params,\r\n Router,\r\n RouterLink,\r\n RouterLinkWithHref,\r\n UrlTree,\r\n} from '@angular/router';\r\nimport { elementVisibility } from '@mmstack/primitives';\r\nimport { PreloadRequester } from './preloading';\r\n\r\nfunction inputToUrlTree(\r\n router: Router,\r\n link: string | any[] | UrlTree | null,\r\n relativeTo?: ActivatedRoute,\r\n queryParams?: Params,\r\n fragment?: string,\r\n queryParamsHandling?: 'merge' | 'preserve' | '',\r\n routerLinkUrlTree?: UrlTree | null,\r\n): UrlTree | null {\r\n if (!link) return null;\r\n if (routerLinkUrlTree) return routerLinkUrlTree;\r\n\r\n if (link instanceof UrlTree) return link;\r\n\r\n const arr = Array.isArray(link) ? link : [link];\r\n\r\n return router.createUrlTree(arr, {\r\n relativeTo,\r\n queryParams,\r\n fragment,\r\n queryParamsHandling,\r\n });\r\n}\r\n\r\nfunction treeToSerializedUrl(\r\n router: Router,\r\n urlTree: UrlTree | null,\r\n): string | null {\r\n if (!urlTree) return null;\r\n return router.serializeUrl(urlTree);\r\n}\r\n\r\nexport function injectTriggerPreload() {\r\n const req = inject(PreloadRequester);\r\n const router = inject(Router);\r\n\r\n return (\r\n link: string | any[] | UrlTree | null,\r\n relativeTo?: ActivatedRoute,\r\n queryParams?: Params,\r\n fragment?: string,\r\n queryParamsHandling?: 'merge' | 'preserve' | '',\r\n ) => {\r\n const urlTree = inputToUrlTree(\r\n router,\r\n link,\r\n relativeTo,\r\n queryParams,\r\n fragment,\r\n queryParamsHandling,\r\n );\r\n const fullPath = treeToSerializedUrl(router, urlTree);\r\n if (!fullPath) return;\r\n\r\n req.startPreload(fullPath);\r\n };\r\n}\r\n\r\n/**\r\n * Configuration for the `mmLink` directive.\r\n */\r\ntype MMLinkConfig = {\r\n /**\r\n * The default preload behavior for links.\r\n * Can be 'hover', 'visible', or null (no preloading).\r\n * @default 'hover'\r\n */\r\n preloadOn: 'hover' | 'visible' | null;\r\n /**\r\n * Whether to use mouse down events for preloading.\r\n * @default false\r\n */\r\n useMouseDown: boolean;\r\n};\r\n\r\nconst configToken = new InjectionToken<MMLinkConfig>('MMSTACK_LINK_CONFIG');\r\n\r\nexport function provideMMLinkDefaultConfig(\r\n config: Partial<MMLinkConfig>,\r\n): Provider {\r\n const cfg: MMLinkConfig = {\r\n preloadOn: 'hover',\r\n useMouseDown: false,\r\n ...config,\r\n };\r\n\r\n return {\r\n provide: configToken,\r\n useValue: cfg,\r\n };\r\n}\r\n\r\nfunction injectConfig() {\r\n const cfg = inject(configToken, { optional: true });\r\n return {\r\n preloadOn: 'hover' as const,\r\n useMouseDown: false,\r\n ...cfg,\r\n };\r\n}\r\n\r\n@Directive({\r\n selector: '[mmLink]',\r\n exportAs: 'mmLink',\r\n host: {\r\n '(mouseenter)': 'onHover()',\r\n },\r\n hostDirectives: [\r\n {\r\n directive: RouterLink,\r\n inputs: [\r\n 'routerLink: mmLink',\r\n 'target',\r\n 'queryParams',\r\n 'fragment',\r\n 'queryParamsHandling',\r\n 'state',\r\n 'relativeTo',\r\n 'skipLocationChange',\r\n 'replaceUrl',\r\n ],\r\n },\r\n ],\r\n})\r\nexport class Link {\r\n private readonly routerLink =\r\n inject(RouterLink, {\r\n self: true,\r\n optional: true,\r\n }) ?? inject(RouterLinkWithHref, { self: true, optional: true });\r\n\r\n private readonly req = inject(PreloadRequester);\r\n private readonly router = inject(Router);\r\n\r\n readonly target = input<string>();\r\n readonly queryParams = input<Params>();\r\n readonly fragment = input<string>();\r\n readonly queryParamsHandling = input<'merge' | 'preserve' | ''>();\r\n readonly state = input<Record<string, any>>();\r\n readonly info = input<unknown>();\r\n readonly relativeTo = input<ActivatedRoute>();\r\n readonly skipLocationChange = input(false, { transform: booleanAttribute });\r\n readonly replaceUrl = input(false, { transform: booleanAttribute });\r\n readonly mmLink = input<string | any[] | UrlTree | null>(null);\r\n readonly preloadOn = input<'hover' | 'visible' | null>(\r\n injectConfig().preloadOn,\r\n );\r\n readonly useMouseDown = input(injectConfig().useMouseDown, {\r\n transform: booleanAttribute,\r\n });\r\n readonly beforeNavigate = input<() => void>();\r\n\r\n readonly preloading = output<void>();\r\n\r\n private readonly urlTree = computed(() => {\r\n return inputToUrlTree(\r\n this.router,\r\n this.mmLink(),\r\n this.relativeTo(),\r\n this.queryParams(),\r\n this.fragment(),\r\n this.queryParamsHandling(),\r\n this.routerLink?.urlTree,\r\n );\r\n });\r\n\r\n private readonly fullPath = computed(() => {\r\n return treeToSerializedUrl(this.router, this.urlTree());\r\n });\r\n\r\n onHover() {\r\n if (untracked(this.preloadOn) !== 'hover') return;\r\n this.requestPreload();\r\n }\r\n\r\n @HostListener('mousedown', [\r\n '$event.button',\r\n '$event.ctrlKey',\r\n '$event.shiftKey',\r\n '$event.altKey',\r\n '$event.metaKey',\r\n ])\r\n onMouseDown(\r\n button: number,\r\n ctrlKey: boolean,\r\n shiftKey: boolean,\r\n altKey: boolean,\r\n metaKey: boolean,\r\n ) {\r\n if (!untracked(this.useMouseDown)) return;\r\n return this.trigger(button, ctrlKey, shiftKey, altKey, metaKey);\r\n }\r\n\r\n @HostListener('click', [\r\n '$event.button',\r\n '$event.ctrlKey',\r\n '$event.shiftKey',\r\n '$event.altKey',\r\n '$event.metaKey',\r\n ])\r\n onClick(\r\n button: number,\r\n ctrlKey: boolean,\r\n shiftKey: boolean,\r\n altKey: boolean,\r\n metaKey: boolean,\r\n ) {\r\n if (untracked(this.useMouseDown)) return;\r\n return this.trigger(button, ctrlKey, shiftKey, altKey, metaKey);\r\n }\r\n\r\n constructor() {\r\n const intersection = elementVisibility();\r\n\r\n effect(() => {\r\n if (this.preloadOn() !== 'visible') return;\r\n if (intersection.visible()) this.requestPreload();\r\n });\r\n }\r\n\r\n private requestPreload() {\r\n const fp = untracked(this.fullPath);\r\n if (!this.routerLink || !fp) return;\r\n this.req.startPreload(fp);\r\n this.preloading.emit();\r\n }\r\n\r\n private trigger(\r\n button: number,\r\n ctrlKey: boolean,\r\n shiftKey: boolean,\r\n altKey: boolean,\r\n metaKey: boolean,\r\n ) {\r\n untracked(this.beforeNavigate)?.();\r\n return this.routerLink?.onClick(button, ctrlKey, shiftKey, altKey, metaKey);\r\n }\r\n}\r\n","import {\r\n computed,\r\n inject,\r\n isSignal,\r\n untracked,\r\n type WritableSignal,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { toWritable } from '@mmstack/primitives';\r\n\r\n/**\r\n * Creates a WritableSignal that synchronizes with a specific URL query parameter,\r\n * enabling two-way binding between the signal's state and the URL.\r\n *\r\n * Reading the signal provides the current value of the query parameter (or null if absent).\r\n * Setting the signal updates the URL query parameter using `Router.navigate`, triggering\r\n * navigation and causing the signal to update reactively if the navigation is successful.\r\n *\r\n * @param key The key of the query parameter to synchronize with.\r\n * Can be a static string (e.g., `'search'`) or a function/signal returning a string\r\n * for dynamic keys (e.g., `() => this.userId() + '_filter'` or `computed(() => this.category() + '_sort')`).\r\n * The signal will reactively update if the key returned by the function/signal changes.\r\n * @returns {WritableSignal<string | null>} A signal representing the query parameter's value.\r\n * - Reading returns the current value string, or `null` if the parameter is absent in the URL.\r\n * - Setting the signal to a string updates the query parameter in the URL (e.g., `signal.set('value')` results in `?key=value`).\r\n * - Setting the signal to `null` removes the query parameter from the URL (e.g., `signal.set(null)` results in `?otherParam=...`).\r\n * - Automatically reflects changes if the query parameters update due to external navigation.\r\n * @remarks\r\n * - Requires Angular's `ActivatedRoute` and `Router` to be available in the injection context.\r\n * - Uses `Router.navigate` with `queryParamsHandling: 'merge'` to preserve other existing query parameters during updates.\r\n * - Handles dynamic keys reactively. If the result of the `key` function/signal changes, the signal will start reflecting the value of the *new* query parameter key.\r\n * - During Server-Side Rendering (SSR), it reads the initial value from the route snapshot. Write operations (`set`) might have limited or no effect on the server depending on the platform configuration.\r\n *\r\n * @example\r\n * ```ts\r\n * import { Component, computed, effect, signal } from '@angular/core';\r\n * import { queryParam } from '@mmstack/router-core'; // Adjust import path as needed\r\n * // import { FormsModule } from '@angular/forms'; // If using ngModel\r\n *\r\n * @Component({\r\n * selector: 'app-product-list',\r\n * standalone: true,\r\n * // imports: [FormsModule], // If using ngModel\r\n * template: `\r\n * <div>\r\n * Sort By:\r\n * <select [value]=\"sortSignal() ?? ''\" (change)=\"sortSignal.set($any($event.target).value || null)\">\r\n * <option value=\"\">Default</option>\r\n * <option value=\"price_asc\">Price Asc</option>\r\n * <option value=\"price_desc\">Price Desc</option>\r\n * <option value=\"name\">Name</option>\r\n * </select>\r\n * <button (click)=\"sortSignal.set(null)\" [disabled]=\"!sortSignal()\">Clear Sort</button>\r\n * </div>\r\n * <div>\r\n * Page:\r\n * <input type=\"number\" min=\"1\" [value]=\"pageSignal() ?? '1'\" #p (input)=\"setPage(p.value)\"/>\r\n * </div>\r\n * * `\r\n * })\r\n * export class ProductListComponent {\r\n * // Two-way bind the 'sort' query parameter (?sort=...)\r\n * // Defaults to null if param is missing\r\n * sortSignal = queryParam('sort');\r\n *\r\n * // Example with a different type (needs serialization or separate logic)\r\n * // For simplicity, we treat page as string | null here\r\n * pageSignal = queryParam('page');\r\n *\r\n * constructor() {\r\n * effect(() => {\r\n * const currentSort = this.sortSignal();\r\n * const currentPage = this.pageSignal(); // Read as string | null\r\n * console.log('Sort/Page changed, reloading products for:', { sort: currentSort, page: currentPage });\r\n * // --- Fetch data based on currentSort and currentPage ---\r\n * });\r\n * }\r\n *\r\n * setPage(value: string): void {\r\n * const pageNum = parseInt(value, 10);\r\n * // Set to null if page is 1 (to remove param), otherwise set string value\r\n * this.pageSignal.set(isNaN(pageNum) || pageNum <= 1 ? null : pageNum.toString());\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function queryParam(\r\n key: string | (() => string),\r\n): WritableSignal<string | null> {\r\n const route = inject(ActivatedRoute);\r\n const router = inject(Router);\r\n\r\n const keySignal =\r\n typeof key === 'string'\r\n ? computed(() => key)\r\n : isSignal(key)\r\n ? key\r\n : computed(key);\r\n\r\n const queryParamMap = toSignal(route.queryParamMap, {\r\n initialValue: route.snapshot.queryParamMap,\r\n });\r\n\r\n const queryParams = toSignal(route.queryParams, {\r\n initialValue: route.snapshot.queryParams,\r\n });\r\n\r\n const queryParam = computed(() => queryParamMap().get(keySignal()));\r\n\r\n const set = (newValue: string | null) => {\r\n const next = {\r\n ...untracked(queryParams),\r\n };\r\n const key = untracked(keySignal);\r\n\r\n if (newValue === null) {\r\n delete next[key];\r\n } else {\r\n next[key] = newValue;\r\n }\r\n\r\n router.navigate([], {\r\n relativeTo: route,\r\n queryParams: next,\r\n queryParamsHandling: 'merge',\r\n });\r\n };\r\n\r\n return toWritable(queryParam, set);\r\n}\r\n","import { inject, InjectionToken, Provider } from '@angular/core';\r\n\r\n/**\r\n * Title configuration interface.\r\n * Defines how createTitle should behave\r\n * @see {createTitle}\r\n */\r\nexport type TitleConfig = {\r\n /**\r\n * The title to be used when no title is set.\r\n * If not provided it defaults to an empty string\r\n * @default ''\r\n */\r\n prefix?: string | ((title: string) => string);\r\n /**\r\n * if false, the title will change to the url, otherwise default to true as that is standard behavior\r\n * @default true\r\n */\r\n keepLastKnownTitle?: boolean;\r\n};\r\n\r\n/**\r\n * @internal\r\n */\r\nexport type InternalTitleConfig = {\r\n parser: (title: string) => string;\r\n keepLastKnown: boolean;\r\n};\r\n\r\nconst token = new InjectionToken<InternalTitleConfig>('MMSTACK_TITLE_CONFIG');\r\n\r\n/**\r\n * used to provide the title configuration, will not be applied unless a `createTitle` resolver is used\r\n */\r\nexport function provideTitleConfig(config?: TitleConfig): Provider {\r\n const prefix = config?.prefix ?? '';\r\n\r\n const prefixFn =\r\n typeof prefix === 'function'\r\n ? prefix\r\n : (title: string) => `${prefix}${title}`;\r\n\r\n return {\r\n provide: token,\r\n useValue: {\r\n parser: prefixFn,\r\n keepLastKnown: config?.keepLastKnownTitle ?? true,\r\n },\r\n };\r\n}\r\n\r\nexport function injectTitleConfig(): InternalTitleConfig {\r\n return inject(token);\r\n}\r\n","import {\r\n computed,\r\n effect,\r\n inject,\r\n Injectable,\r\n linkedSignal,\r\n Signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ResolveFn } from '@angular/router';\r\nimport { mutable, until } from '@mmstack/primitives';\r\nimport { injectLeafRoutes, injectSnapshotPathResolver } from '../util';\r\nimport { injectTitleConfig } from './title-config';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TitleStore {\r\n private readonly title = inject(Title);\r\n private readonly map = mutable<Map<string, Signal<string>>>(new Map());\r\n private readonly leafRoutes = injectLeafRoutes();\r\n\r\n constructor() {\r\n const reverseLeaves = computed(() => this.leafRoutes().toReversed());\r\n\r\n const currentResolvedTitles = computed(() => {\r\n const map = this.map();\r\n return reverseLeaves()\r\n .map((leaf) => map.get(leaf.path)?.() ?? leaf.route.title)\r\n .filter((v): v is string => !!v);\r\n });\r\n\r\n const currentTitle = computed(() => currentResolvedTitles().at(0) ?? '');\r\n\r\n const heldTitle = injectTitleConfig().keepLastKnown\r\n ? linkedSignal<string, string>({\r\n source: () => currentTitle(),\r\n computation: (value, prev) => {\r\n if (!value) return prev?.value ?? '';\r\n return value;\r\n },\r\n })\r\n : currentTitle;\r\n\r\n effect(() => {\r\n this.title.setTitle(heldTitle());\r\n });\r\n }\r\n\r\n register(id: string, titleFn: Signal<string>) {\r\n this.map.inline((m) => m.set(id, titleFn));\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * Creates a title resolver function that can be used in Angular's router.\r\n *\r\n * @param fn\r\n * A function that returns a string or a Signal<string> representing the title.\r\n * @param awaitValue\r\n * If `true`, the resolver will wait until the title signal has a value before resolving.\r\n * Defaults to `false`.\r\n */\r\nexport function createTitle(\r\n fn: () => string | (() => string),\r\n awaitValue = false,\r\n): ResolveFn<string> {\r\n return async (route): Promise<string> => {\r\n const store = inject(TitleStore);\r\n const resolver = injectSnapshotPathResolver();\r\n const fp = resolver(route);\r\n\r\n const { parser } = injectTitleConfig();\r\n\r\n const resolved = fn();\r\n\r\n const titleSignal =\r\n typeof resolved === 'string'\r\n ? computed(() => resolved)\r\n : computed(resolved);\r\n\r\n const parsedTitleSignal = computed(() => parser(titleSignal()));\r\n\r\n store.register(fp, parsedTitleSignal);\r\n\r\n if (awaitValue) await until(parsedTitleSignal, (v) => !!v);\r\n\r\n return Promise.resolve(untracked(parsedTitleSignal));\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["token","parsePathSegment","filter"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmstack/router-core",
3
- "version": "20.4.1",
3
+ "version": "21.0.0",
4
4
  "keywords": [
5
5
  "angular",
6
6
  "signals",
@@ -20,24 +20,24 @@
20
20
  },
21
21
  "homepage": "https://github.com/mihajm/mmstack/blob/master/packages/router/core",
22
22
  "dependencies": {
23
- "@mmstack/primitives": "^20.4.1",
23
+ "@mmstack/primitives": "^21.0.0",
24
24
  "tslib": "^2.3.0"
25
25
  },
26
26
  "peerDependencies": {
27
- "@angular/core": ">=20 <21",
28
- "@angular/router": ">=20 <21",
29
- "@angular/platform-browser": ">=20 <21",
27
+ "@angular/core": ">=21 <22",
28
+ "@angular/router": ">=21 <22",
29
+ "@angular/platform-browser": ">=21 <22",
30
30
  "rxjs": "~7.8.2"
31
31
  },
32
32
  "sideEffects": false,
33
33
  "module": "fesm2022/mmstack-router-core.mjs",
34
- "typings": "index.d.ts",
34
+ "typings": "types/mmstack-router-core.d.ts",
35
35
  "exports": {
36
36
  "./package.json": {
37
37
  "default": "./package.json"
38
38
  },
39
39
  ".": {
40
- "types": "./index.d.ts",
40
+ "types": "./types/mmstack-router-core.d.ts",
41
41
  "default": "./fesm2022/mmstack-router-core.mjs"
42
42
  }
43
43
  }
File without changes