@mmstack/router-core 20.0.3 → 20.4.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.
package/README.md CHANGED
@@ -86,11 +86,11 @@ Enhance your application's performance by preloading Angular modules. This libra
86
86
 
87
87
  ### PreloadStrategy
88
88
 
89
- This is a custom Angular PreloadingStrategy that works in tandem with the mmstack `LinkDirective` (via an internal `PreloadService`) to intelligently preload lazy-loaded modules.
89
+ This is a custom Angular PreloadingStrategy that works in tandem with the mmstack `Link` (via an internal `PreloadService`) to intelligently preload lazy-loaded modules.
90
90
 
91
91
  **Features**:
92
92
 
93
- - Listens for preload requests triggered by the `LinkDirective`.
93
+ - Listens for preload requests triggered by the `Link` directive.
94
94
  - Uses advanced path matching to identify the correct route to preload, even with route parameters and matrix parameters.
95
95
  - Avoids preloading if the connection is slow (e.g., '2g' effective type) or if the user has data-saving enabled in their browser.
96
96
  - Respects a `data: { preload: false }` flag in route configurations to explicitly disable preloading for specific routes.
@@ -112,9 +112,9 @@ export const appConfig: ApplicationConfig = {
112
112
  };
113
113
  ```
114
114
 
115
- ### LinkDirective (mmLink)
115
+ ### Link (mmLink)
116
116
 
117
- The `LinkDirective` (used with the `mmLink` attribute) is an enhancement for Angular's standard `RouterLink` directive. It adds the capability to preload the JavaScript modules associated with the linked route, based on user interaction or visibility. Other than the added `preloadOn` input & `preloading` output it directly proxies `RouterLink`.
117
+ The `Link` directive (used with the `mmLink` attribute) is an enhancement for Angular's standard `RouterLink` directive. It adds the capability to preload the JavaScript modules associated with the linked route, based on user interaction or visibility. Other than the added `preloadOn` input & `preloading` output it directly proxies `RouterLink`.
118
118
 
119
119
  - `preloadOn`: `input<'hover' | 'visible' | null>()` [default: 'hover'] specifies when to preload, `null` disables preloading
120
120
  - `preloading` - `output<void>()` fires when route is registered for preloading (before load)
@@ -122,13 +122,13 @@ The `LinkDirective` (used with the `mmLink` attribute) is an enhancement for Ang
122
122
  To use it simply replace any exiting routerLinks that you would like to enable preloading on with the mmLink, you can keep all existing inputs the same. And add the mmstack `PreloadStrategy` in your configuration
123
123
 
124
124
  ```typescript
125
- import { LinkDirective } from '@mmstack/router-core';
125
+ import { Link } from '@mmstack/router-core';
126
126
  import { RouterLink } from '@angular/router';
127
127
 
128
128
  @Component({
129
129
  selector: 'app-navigation',
130
130
  standalone: true,
131
- imports: [LinkDirective, RouterLink],
131
+ imports: [Link, RouterLink],
132
132
  template: `
133
133
  <nav>
134
134
  <!-- preload on hover -->
@@ -571,16 +571,16 @@ function createBreadcrumb(factory) {
571
571
  };
572
572
  }
573
573
 
574
- class PreloadService {
574
+ class PreloadRequester {
575
575
  preloadOnDemand$ = new Subject();
576
576
  preloadRequested$ = this.preloadOnDemand$.asObservable();
577
577
  startPreload(routePath) {
578
578
  this.preloadOnDemand$.next(routePath);
579
579
  }
580
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: PreloadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
581
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: PreloadService, providedIn: 'root' });
580
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: PreloadRequester, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
581
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: PreloadRequester, providedIn: 'root' });
582
582
  }
583
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: PreloadService, decorators: [{
583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: PreloadRequester, decorators: [{
584
584
  type: Injectable,
585
585
  args: [{ providedIn: 'root' }]
586
586
  }] });
@@ -610,7 +610,7 @@ function noPreload(route) {
610
610
  class PreloadStrategy {
611
611
  loading = new Set();
612
612
  router = inject(Router);
613
- svc = inject(PreloadService);
613
+ req = inject(PreloadRequester);
614
614
  preload(route, load) {
615
615
  if (noPreload(route) || hasSlowConnection())
616
616
  return EMPTY;
@@ -618,7 +618,7 @@ class PreloadStrategy {
618
618
  if (this.loading.has(fp))
619
619
  return EMPTY;
620
620
  const predicate = createRoutePredicate(fp);
621
- return this.svc.preloadRequested$.pipe(filter$1((path) => path === fp || predicate(path)), take(1), switchMap(() => load()), finalize(() => this.loading.delete(fp)));
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
623
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: PreloadStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
624
624
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: PreloadStrategy, providedIn: 'root' });
@@ -651,14 +651,14 @@ function treeToSerializedUrl(router, urlTree) {
651
651
  return router.serializeUrl(urlTree);
652
652
  }
653
653
  function injectTriggerPreload() {
654
- const svc = inject(PreloadService);
654
+ const req = inject(PreloadRequester);
655
655
  const router = inject(Router);
656
656
  return (link, relativeTo, queryParams, fragment, queryParamsHandling) => {
657
657
  const urlTree = inputToUrlTree(router, link, relativeTo, queryParams, fragment, queryParamsHandling);
658
658
  const fullPath = treeToSerializedUrl(router, urlTree);
659
659
  if (!fullPath)
660
660
  return;
661
- svc.startPreload(fullPath);
661
+ req.startPreload(fullPath);
662
662
  };
663
663
  }
664
664
  const configToken = new InjectionToken('MMSTACK_LINK_CONFIG');
@@ -681,12 +681,12 @@ function injectConfig() {
681
681
  ...cfg,
682
682
  };
683
683
  }
684
- class LinkDirective {
684
+ class Link {
685
685
  routerLink = inject(RouterLink, {
686
686
  self: true,
687
687
  optional: true,
688
688
  }) ?? inject(RouterLinkWithHref, { self: true, optional: true });
689
- svc = inject(PreloadService);
689
+ req = inject(PreloadRequester);
690
690
  router = inject(Router);
691
691
  target = input(...(ngDevMode ? [undefined, { debugName: "target" }] : []));
692
692
  queryParams = input(...(ngDevMode ? [undefined, { debugName: "queryParams" }] : []));
@@ -738,17 +738,17 @@ class LinkDirective {
738
738
  const fp = untracked(this.fullPath);
739
739
  if (!this.routerLink || !fp)
740
740
  return;
741
- this.svc.startPreload(fp);
741
+ this.req.startPreload(fp);
742
742
  this.preloading.emit();
743
743
  }
744
744
  trigger(button, ctrlKey, shiftKey, altKey, metaKey) {
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.1.0", ngImport: i0, type: LinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
749
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.0", type: LinkDirective, 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: "20.1.0", ngImport: i0, type: Link, deps: [], target: i0.ɵɵFactoryTarget.Directive });
749
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.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.1.0", ngImport: i0, type: LinkDirective, decorators: [{
751
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: Link, decorators: [{
752
752
  type: Directive,
753
753
  args: [{
754
754
  selector: '[mmLink]',
@@ -996,5 +996,5 @@ function createTitle(fn, awaitValue = false) {
996
996
  * Generated bundle index. Do not edit.
997
997
  */
998
998
 
999
- export { LinkDirective, PreloadStrategy, createBreadcrumb, createTitle, injectBreadcrumbs, injectTriggerPreload, provideBreadcrumbConfig, provideMMLinkDefaultConfig, provideTitleConfig, queryParam, url };
999
+ export { Link, PreloadStrategy, createBreadcrumb, createTitle, injectBreadcrumbs, injectTriggerPreload, provideBreadcrumbConfig, provideMMLinkDefaultConfig, provideTitleConfig, queryParam, url };
1000
1000
  //# sourceMappingURL=mmstack-router-core.mjs.map
@@ -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.type.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.service.js","../tmp-esm2022/lib/preloading/preload.strategy.js","../tmp-esm2022/lib/link.directive.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFxQ3ZEOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQW1CLDJCQUEyQixDQUFDLENBQUM7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBaUM7SUFDdkUsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFO1lBQ1IsR0FBRyxNQUFNO1NBQ1Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPLENBQ0wsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxJQUFJLEVBQUUsQ0FDVCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlc29sdmVkTGVhZlJvdXRlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjdXN0b20gbGFiZWwgZ2VuZXJhdGlvbiBmdW5jdGlvbi5cbiAqIFRoZSBvdXRlciBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYSByb290IGluamVjdGlvbiBjb250ZXh0XG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gdGFrZXMgYSBgUmVzb2x2ZWRMZWFmUm91dGVgIGFuZCBwcm9kdWNlcyBhIHN0cmluZyBsYWJlbCBmb3IgdGhlIGJyZWFkY3J1bWIuXG4gKiBBcyB0aGUgaW5uZXIgZnVuY3Rpb24gaXMgd3JhcHBlZCBpbiBhIGNvbXB1dGVkLCBjaGFuZ2VzIHRvIHNpZ25hbHMgY2FsbGVkIHdpdGhpbiBpdCB3aWxsIHVwZGF0ZSB0aGUgYnJlYWRjcnVtYiBsYWJlbCByZWFjdGl2ZWx5LlxuICovXG50eXBlIEdlbmVyYXRlQnJlYWRjcnVtYkZuID0gKCkgPT4gKGxlYWY6IFJlc29sdmVkTGVhZlJvdXRlKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYnJlYWRjcnVtYiBzeXN0ZW0uXG4gKiBVc2UgYHByb3ZpZGVCcmVhZGNydW1iQ29uZmlnYCB0byBzdXBwbHkgdGhlc2Ugb3B0aW9ucyB0byB5b3VyIGFwcGxpY2F0aW9uLlxuICovXG5cbmV4cG9ydCB0eXBlIEJyZWFkY3J1bWJDb25maWcgPSB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGhvdyBicmVhZGNydW1iIGxhYmVscyBhcmUgZ2VuZXJhdGVkLlxuICAgKiAtIElmIHNldCB0byBgJ21hbnVhbCdgLCBicmVhZGNydW1icyB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIGlmIG1hbnVhbGx5IHJlZ2lzdGVyZWRcbiAgICogdmlhIGBjcmVhdGVCcmVhZGNydW1iYC4gQXV0b21hdGljIGdlbmVyYXRpb24gYmFzZWQgb24gcm91dGVzIGlzIGRpc2FibGVkLlxuICAgKiAtIEFsdGVybmF0aXZlbHkgcHJvdmlkZSBhIGN1c3RvbSBsYWJlbCBnZW5lcmF0aW9uIGZ1bmN0aW9uXG4gICAqIElmIGxlZnQgdW5kZWZpbmVkLCB0aGUgc3lzdGVtIHdpbGwgYXV0b21hdGljYWxseSBnZW5lcmF0ZSBsYWJlbHMgYmFzZWQgb24gdGhlIHJvdXRlJ3MgdGl0bGUsIGRhdGEsIG9yIHBhdGguXG4gICAqIEBzZWUgR2VuZXJhdGVCcmVhZGNydW1iRm5cbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBGb3IgY3VzdG9tIGxhYmVsIGdlbmVyYXRpb246XG4gICAqIC8vIGNvbnN0IG15Q3VzdG9tTGFiZWxHZW5lcmF0b3IgPSAoKSA9PiAobGVhZjogUmVzb2x2ZWRMZWFmUm91dGUpID0+IHtcbiAgICogLy8gICByZXR1cm4gbGVhZi5yb3V0ZS5kYXRhPy5bJ2N1c3RvbVRpdGxlJ10gfHwgbGVhZi5yb3V0ZS5yb3V0ZUNvbmZpZz8ucGF0aCB8fCAnRGVmYXVsdCc7XG4gICAqIC8vIH07XG4gICAqIC8vXG4gICAqIC8vIGNvbmZpZzogeyBnZW5lcmF0aW9uOiBteUN1c3RvbUxhYmVsR2VuZXJhdG9yIH1cbiAgICogYGBgXG4gICAqL1xuICBnZW5lcmF0aW9uPzogJ21hbnVhbCcgfCBHZW5lcmF0ZUJyZWFkY3J1bWJGbjtcbn07XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHRva2VuID0gbmV3IEluamVjdGlvblRva2VuPEJyZWFkY3J1bWJDb25maWc+KCdNTVNUQUNLX0JSRUFEQ1JVTUJfQ09ORklHJyk7XG5cbi8qKlxuICogUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGJyZWFkY3J1bWIgc3lzdGVtLlxuICogQHBhcmFtIGNvbmZpZyAtIEEgcGFydGlhbCBgQnJlYWRjcnVtYkNvbmZpZ2Agb2JqZWN0IHdpdGggdGhlIGRlc2lyZWQgc2V0dGluZ3MuICpcbiAqIEBzZWUgQnJlYWRjcnVtYkNvbmZpZ1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEluIHlvdXIgYXBwLm1vZHVsZS50cyBvciBhIHN0YW5kYWxvbmUgY29tcG9uZW50J3MgcHJvdmlkZXJzOlxuICogLy8gaW1wb3J0IHsgcHJvdmlkZUJyZWFkY3J1bWJDb25maWcgfSBmcm9tICcuL2JyZWFkY3J1bWIuY29uZmlnJzsgLy8gQWRqdXN0IHBhdGhcbiAqIC8vIGltcG9ydCB7IFJlc29sdmVkTGVhZlJvdXRlIH0gZnJvbSAnLi9icmVhZGNydW1iLnR5cGUnOyAvLyBBZGp1c3QgcGF0aFxuICpcbiAqIC8vIGNvbnN0IGN1c3RvbUxhYmVsU3RyYXRlZ3k6IEdlbmVyYXRlQnJlYWRjcnVtYkZuID0gKCkgPT4ge1xuICogLy8gICByZXR1cm4gKGxlYWY6IFJlc29sdmVkTGVhZlJvdXRlKTogc3RyaW5nID0+IHtcbiAqIC8vICAgICAvLyBFeGFtcGxlOiBQcmlvcml0aXplIGEgJ25hdlRpdGxlJyBkYXRhIHByb3BlcnR5XG4gKiAvLyAgICAgaWYgKGxlYWYucm91dGUuZGF0YT8uWyduYXZUaXRsZSddKSB7XG4gKiAvLyAgICAgICByZXR1cm4gbGVhZi5yb3V0ZS5kYXRhWyduYXZUaXRsZSddO1xuICogLy8gICAgIH1cbiAqIC8vICAgICAvLyBGYWxsYmFjayB0byBhIGRlZmF1bHQgbWVjaGFuaXNtXG4gKiAvLyAgICAgcmV0dXJuIGxlYWYucm91dGUudGl0bGUgfHwgbGVhZi5zZWdtZW50LnJlc29sdmVkIHx8ICdVbm5hbWVkJztcbiAqIC8vICAgfTtcbiAqIC8vIH07XG4gKlxuICogZXhwb3J0IGNvbnN0IGFwcENvbmZpZyA9IFtcbiAqICAvLyAuLi5yZXN0XG4gKiAgcHJvdmlkZUJyZWFkY3J1bWJDb25maWcoe1xuICogICBnZW5lcmF0aW9uOiBjdXN0b21MYWJlbFN0cmF0ZWd5LCAvLyBvciAnbWFudWFsJyB0byBkaXNhYmxlIGF1dG8tZ2VuZXJhdGlvblxuICogIH0pLFxuICogXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQnJlYWRjcnVtYkNvbmZpZyhjb25maWc6IFBhcnRpYWw8QnJlYWRjcnVtYkNvbmZpZz4pIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiB0b2tlbixcbiAgICB1c2VWYWx1ZToge1xuICAgICAgLi4uY29uZmlnLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RCcmVhZGNydW1iQ29uZmlnKCk6IEJyZWFkY3J1bWJDb25maWcge1xuICByZXR1cm4gKFxuICAgIGluamVjdCh0b2tlbiwge1xuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSkgPz8ge31cbiAgKTtcbn1cbiJdfQ==","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.1.0\", ngImport: i0, type: RouteLeafStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: RouteLeafStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZi5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvdXRpbC9sZWFmLnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBRUwsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFlN0IsU0FBUyxVQUFVO0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixNQUFNLGFBQWEsR0FBRyxDQUNwQixRQUE2QixFQUNSLEVBQUU7UUFDdkIsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBa0MsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRXBDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDNUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FDdkMsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRFLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDekIsU0FBUztZQUNYLENBQUM7WUFDRCxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZO2lCQUM3QixPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO2lCQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ2xCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVuQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkUsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixLQUFLO2dCQUNMLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtpQkFDN0I7Z0JBQ0QsSUFBSTtnQkFDSixJQUFJO2FBQ0wsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBRXpCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDL0IsVUFBVSxFQUFFLENBQUM7UUFDYixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUMsc0RBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFLRCxNQUFNLE9BQU8sY0FBYztJQUNoQixNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7dUdBRHBCLGNBQWM7MkdBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQUtELE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0YWJsZSwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBSb3V0ZXIsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB1cmwgfSBmcm9tICcuLi91cmwnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgdHlwZSBSZXNvbHZlZExlYWZSb3V0ZSA9IHtcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIHNlZ21lbnQ6IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgcmVzb2x2ZWQ6IHN0cmluZztcbiAgfTtcbiAgcGF0aDogc3RyaW5nO1xuICBsaW5rOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsZWFmUm91dGVzKCk6IFNpZ25hbDxSZXNvbHZlZExlYWZSb3V0ZVtdPiB7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIGNvbnN0IGdldExlYWZSb3V0ZXMgPSAoXG4gICAgc25hcHNob3Q6IFJvdXRlclN0YXRlU25hcHNob3QsXG4gICk6IFJlc29sdmVkTGVhZlJvdXRlW10gPT4ge1xuICAgIGNvbnN0IHJvdXRlczogUmVzb2x2ZWRMZWFmUm91dGVbXSA9IFtdO1xuICAgIGxldCByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwgPSBzbmFwc2hvdC5yb290O1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgd2hpbGUgKHJvdXRlKSB7XG4gICAgICBjb25zdCBhbGxTZWdtZW50cyA9IHJvdXRlLnBhdGhGcm9tUm9vdC5mbGF0TWFwKFxuICAgICAgICAoc25hcCkgPT4gc25hcC5yb3V0ZUNvbmZpZz8ucGF0aCA/PyBbXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYWxsU2VnbWVudHMuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICBjb25zdCBwYXRoID0gcm91dGVyLnNlcmlhbGl6ZVVybChyb3V0ZXIucGFyc2VVcmwoc2VnbWVudHMuam9pbignLycpKSk7XG5cbiAgICAgIGlmIChwcm9jZXNzZWQuaGFzKHBhdGgpKSB7XG4gICAgICAgIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBwcm9jZXNzZWQuYWRkKHBhdGgpO1xuXG4gICAgICBjb25zdCBwYXJ0cyA9IHJvdXRlLnBhdGhGcm9tUm9vdFxuICAgICAgICAuZmxhdE1hcCgoc25hcCkgPT4gc25hcC51cmwgPz8gW10pXG4gICAgICAgIC5tYXAoKHUpID0+IHUucGF0aClcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgY29uc3QgbGluayA9IHJvdXRlci5zZXJpYWxpemVVcmwocm91dGVyLnBhcnNlVXJsKHBhcnRzLmpvaW4oJy8nKSkpO1xuXG4gICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgIHJvdXRlLFxuICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgcGF0aDogc2VnbWVudHMuYXQoLTEpID8/ICcnLFxuICAgICAgICAgIHJlc29sdmVkOiBwYXJ0cy5hdCgtMSkgPz8gJycsXG4gICAgICAgIH0sXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGxpbmssXG4gICAgICB9KTtcbiAgICAgIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcm91dGVzO1xuICB9O1xuXG4gIGNvbnN0IGN1cnJlbnRVcmwgPSB1cmwoKTtcblxuICBjb25zdCBsZWFmUm91dGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGN1cnJlbnRVcmwoKTtcbiAgICByZXR1cm4gZ2V0TGVhZlJvdXRlcyhyb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QpO1xuICB9KTtcblxuICByZXR1cm4gbGVhZlJvdXRlcztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlTGVhZlN0b3JlIHtcbiAgcmVhZG9ubHkgbGVhdmVzID0gbGVhZlJvdXRlcygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0TGVhZlJvdXRlcygpIHtcbiAgY29uc3Qgc3RvcmUgPSBpbmplY3QoUm91dGVMZWFmU3RvcmUpO1xuICByZXR1cm4gc3RvcmUubGVhdmVzO1xufVxuIl19","/**\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi9icmVhZGNydW1iL2JyZWFkY3J1bWIudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4QkE7O0dBRUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQVk3RTs7R0FFRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxVQUE4QjtJQUNuRSxPQUFRLFVBQWlDLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLEVBQWMsRUFDZCxNQUF1QixFQUN2QixVQUFVLEdBQUcsSUFBSTtJQUVqQixPQUFPO1FBQ0wsR0FBRyxFQUFFO1FBQ0wsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFO1lBQzVCLE1BQU07WUFDTixVQUFVO1NBQ1g7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxVQUEyQztJQUUzQyxPQUFPLENBQUMsQ0FBRSxVQUFpQyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBicmVhZGNydW1iIGl0ZW0gd2l0aGluIHRoZSBuYXZpZ2F0aW9uIHBhdGguXG4gKiBBbGwgZHluYW1pYyBwcm9wZXJ0aWVzIGFyZSByZXByZXNlbnRlZCBhcyBBbmd1bGFyIFNpZ25hbHMgdG8gZW5hYmxlIHJlYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCB0eXBlIEJyZWFkY3J1bWIgPSB7XG4gIC8qKlxuICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYnJlYWRjcnVtYiBpdGVtLiBHZW5lcmFsbHkgdGhlIHVucmVzb2x2ZWQgcGF0aCBmb3IgZXhhbXBsZSBgL3Bvc3RzLzppZGAuXG4gICAqIFVzZWZ1bCBmb3IgYEBmb3JgIHRyYWNraW5nIGluIHRlbXBsYXRlcy5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdmlzaWJsZSB0ZXh0IGZvciB0aGUgYnJlYWRjcnVtYiBpdGVtLlxuICAgKiBVcGRhdGVkIHJlYWN0aXZlbHkgYXMgdGhlIHVybC9saW5rIGJhc2VkIG9uXG4gICAqIGVpdGhlciBhIHByb3ZpZGVkIGRlZmluaXRpb24sIG9yIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgKi9cbiAgbGFiZWw6IFNpZ25hbDxzdHJpbmc+O1xuICAvKipcbiAgICogQW4gYWNjZXNzaWJsZSBsYWJlbCBmb3IgdGhlIGJyZWFkY3J1bWIgaXRlbS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHNhbWUgdmFsdWUgYXMgYGxhYmVsYCBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBhcmlhTGFiZWw6IFNpZ25hbDxzdHJpbmc+O1xuICAvKipcbiAgICogVGhlIFVSTCBsaW5rIGZvciB0aGUgYnJlYWRjcnVtYiBpdGVtLlxuICAgKiBVcGRhdGVzIGFzIHRoZSByb3V0ZSBjaGFuZ2VzLlxuICAgKi9cbiAgbGluazogU2lnbmFsPHN0cmluZz47XG59O1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5jb25zdCBJTlRFUk5BTF9CUkVBRENSVU1CX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ01NU1RBQ0tfSU5URVJOQUxfQlJFQURDUlVNQicpO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgdHlwZSBJbnRlcm5hbEJyZWFkY3J1bWIgPSBCcmVhZGNydW1iICYge1xuICBbSU5URVJOQUxfQlJFQURDUlVNQl9TWU1CT0xdOiB7XG4gICAgYWN0aXZlOiBTaWduYWw8Ym9vbGVhbj47XG4gICAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcbiAgfTtcbn07XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcmVhZGNydW1iSW50ZXJuYWxzKGJyZWFkY3J1bWI6IEludGVybmFsQnJlYWRjcnVtYikge1xuICByZXR1cm4gKGJyZWFkY3J1bWIgYXMgSW50ZXJuYWxCcmVhZGNydW1iKVtJTlRFUk5BTF9CUkVBRENSVU1CX1NZTUJPTF07XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnRlcm5hbEJyZWFkY3J1bWIoXG4gIGJjOiBCcmVhZGNydW1iLFxuICBhY3RpdmU6IFNpZ25hbDxib29sZWFuPixcbiAgcmVnaXN0ZXJlZCA9IHRydWUsXG4pOiBJbnRlcm5hbEJyZWFkY3J1bWIge1xuICByZXR1cm4ge1xuICAgIC4uLmJjLFxuICAgIFtJTlRFUk5BTF9CUkVBRENSVU1CX1NZTUJPTF06IHtcbiAgICAgIGFjdGl2ZSxcbiAgICAgIHJlZ2lzdGVyZWQsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJuYWxCcmVhZGNydW1iKFxuICBicmVhZGNydW1iOiBCcmVhZGNydW1iIHwgSW50ZXJuYWxCcmVhZGNydW1iLFxuKTogYnJlYWRjcnVtYiBpcyBJbnRlcm5hbEJyZWFkY3J1bWIge1xuICByZXR1cm4gISEoYnJlYWRjcnVtYiBhcyBJbnRlcm5hbEJyZWFkY3J1bWIpW0lOVEVSTkFMX0JSRUFEQ1JVTUJfU1lNQk9MXTtcbn1cbiJdfQ==","import { computed, inject, Injectable } from '@angular/core';\nimport { mapArray, mutable } from '@mmstack/primitives';\nimport { injectLeafRoutes } from '../util/leaf.store';\nimport { injectBreadcrumbConfig } from './breadcrumb.config';\nimport { createInternalBreadcrumb, getBreadcrumbInternals, isInternalBreadcrumb, } from './breadcrumb.type';\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.1.0\", ngImport: i0, type: BreadcrumbStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: BreadcrumbStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUV0QixvQkFBb0IsR0FDckIsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFM0IsU0FBUyxjQUFjLENBQUMsR0FBVztJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsSUFBWTtJQUM5QyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsV0FBbUI7SUFDM0MsT0FBTyxXQUFXO1NBQ2YsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFF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QkFDbkI7O0FBb0REOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0QyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBpbmplY3QsIEluamVjdGFibGUsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwQXJyYXksIG11dGFibGUgfSBmcm9tICdAbW1zdGFjay9wcmltaXRpdmVzJztcbmltcG9ydCB7IGluamVjdExlYWZSb3V0ZXMsIFJlc29sdmVkTGVhZlJvdXRlIH0gZnJvbSAnLi4vdXRpbC9sZWFmLnN0b3JlJztcbmltcG9ydCB7IGluamVjdEJyZWFkY3J1bWJDb25maWcgfSBmcm9tICcuL2JyZWFkY3J1bWIuY29uZmlnJztcbmltcG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIGNyZWF0ZUludGVybmFsQnJlYWRjcnVtYixcbiAgZ2V0QnJlYWRjcnVtYkludGVybmFscyxcbiAgSW50ZXJuYWxCcmVhZGNydW1iLFxuICBpc0ludGVybmFsQnJlYWRjcnVtYixcbn0gZnJvbSAnLi9icmVhZGNydW1iLnR5cGUnO1xuXG5mdW5jdGlvbiB1cHBlcmNhc2VGaXJzdChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxjcyA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbGNzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbGNzLnNsaWNlKDEpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNYXRyaXhBbmRRdWVyeVBhcmFtcyhwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBbY2xlYW5QYXRoXSA9IHBhdGguc3BsaXQoJzsnKTtcbiAgcmV0dXJuIGNsZWFuUGF0aC5zcGxpdCgnPycpWzBdO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhdGhTZWdtZW50KHBhdGhTZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aFNlZ21lbnRcbiAgICAuc3BsaXQoJy8nKVxuICAgIC5mbGF0TWFwKChwYXJ0KSA9PiBwYXJ0LnNwbGl0KCcuJykpXG4gICAgLmZsYXRNYXAoKHBhcnQpID0+IHBhcnQuc3BsaXQoJy0nKSlcbiAgICAubWFwKChwYXJ0KSA9PiB1cHBlcmNhc2VGaXJzdChyZW1vdmVNYXRyaXhBbmRRdWVyeVBhcmFtcyhwYXJ0KSkpXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVMYWJlbChsZWFmOiBSZXNvbHZlZExlYWZSb3V0ZSk6IHN0cmluZyB7XG4gIGNvbnN0IHRpdGxlID0gbGVhZi5yb3V0ZS50aXRsZSA/PyBsZWFmLnJvdXRlLmRhdGE/LlsndGl0bGUnXTtcblxuICBpZiAodGl0bGUgJiYgdHlwZW9mIHRpdGxlID09PSAnc3RyaW5nJykgcmV0dXJuIHRpdGxlO1xuICBpZiAobGVhZi5zZWdtZW50LnBhdGguaW5jbHVkZXMoJzonKSkgcmV0dXJuIGxlYWYuc2VnbWVudC5yZXNvbHZlZDtcblxuICByZXR1cm4gcGFyc2VQYXRoU2VnbWVudChsZWFmLnNlZ21lbnQucGF0aCk7XG59XG5cbmZ1bmN0aW9uIGF1dG9HZW5lcmF0ZUJyZWFkY3J1bWIoXG4gIGlkOiBzdHJpbmcsXG4gIGxlYWY6IFNpZ25hbDxSZXNvbHZlZExlYWZSb3V0ZT4sXG4gIGF1dG9HZW5lcmF0ZUZuOiBTaWduYWw8KGxlYWY6IFJlc29sdmVkTGVhZlJvdXRlKSA9PiBzdHJpbmc+LFxuKTogQnJlYWRjcnVtYiB7XG4gIGNvbnN0IGxhYmVsID0gY29tcHV0ZWQoKCkgPT4gYXV0b0dlbmVyYXRlRm4oKShsZWFmKCkpKTtcblxuICByZXR1cm4gY3JlYXRlSW50ZXJuYWxCcmVhZGNydW1iKFxuICAgIHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWwsXG4gICAgICBhcmlhTGFiZWw6IGxhYmVsLFxuICAgICAgbGluazogY29tcHV0ZWQoKCkgPT4gbGVhZigpLmxpbmspLFxuICAgIH0sXG4gICAgY29tcHV0ZWQoXG4gICAgICAoKSA9PlxuICAgICAgICBsZWFmKCkucm91dGUuZGF0YT8uWydza2lwQnJlYWRjcnVtYiddICE9PSB0cnVlICYmXG4gICAgICAgIGlkICE9PSAnJyAmJlxuICAgICAgICBpZCAhPT0gJy8nICYmXG4gICAgICAgIGxlYWYoKS5zZWdtZW50LnBhdGggIT09ICcnICYmXG4gICAgICAgIGxlYWYoKS5zZWdtZW50LnBhdGggIT09ICcvJyAmJlxuICAgICAgICAhbGVhZigpLnNlZ21lbnQucGF0aC5lbmRzV2l0aCgnLycpICYmXG4gICAgICAgICEhbGFiZWwoKSxcbiAgICApLFxuICApO1xufVxuXG5mdW5jdGlvbiBpbmplY3RHZW5lcmF0ZUxhYmVsRm4oKSB7XG4gIGNvbnN0IHsgZ2VuZXJhdGlvbiB9ID0gaW5qZWN0QnJlYWRjcnVtYkNvbmZpZygpO1xuXG4gIGlmICh0eXBlb2YgZ2VuZXJhdGlvbiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGNvbXB1dGVkKCgpID0+IGdlbmVyYXRlTGFiZWwpO1xuXG4gIGNvbnN0IHByb3ZpZGVkID0gZ2VuZXJhdGlvbigpO1xuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gcHJvdmlkZWQpO1xufVxuXG5mdW5jdGlvbiBpbmplY3RJc01hbnVhbCgpIHtcbiAgcmV0dXJuIGluamVjdEJyZWFkY3J1bWJDb25maWcoKS5nZW5lcmF0aW9uID09PSAnbWFudWFsJztcbn1cblxuZnVuY3Rpb24gZXhwb3NlQWN0aXZlU2lnbmFsKFxuICBjcnVtYlNpZ25hbDogU2lnbmFsPEJyZWFkY3J1bWI+LFxuICBtYW51YWw6IGJvb2xlYW4sXG4pOiBTaWduYWw8QnJlYWRjcnVtYj4gJiB7XG4gIGFjdGl2ZTogU2lnbmFsPGJvb2xlYW4+O1xufSB7XG4gIGNvbnN0IGFjdGl2ZSA9IG1hbnVhbFxuICAgID8gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjcnVtYiA9IGNydW1iU2lnbmFsKCk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBpc0ludGVybmFsQnJlYWRjcnVtYihjcnVtYikgJiZcbiAgICAgICAgICBnZXRCcmVhZGNydW1iSW50ZXJuYWxzKGNydW1iKS5yZWdpc3RlcmVkICYmXG4gICAgICAgICAgZ2V0QnJlYWRjcnVtYkludGVybmFscyhjcnVtYikuYWN0aXZlKClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgOiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNydW1iID0gY3J1bWJTaWduYWwoKTtcbiAgICAgICAgaWYgKCFpc0ludGVybmFsQnJlYWRjcnVtYihjcnVtYikpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZ2V0QnJlYWRjcnVtYkludGVybmFscyhjcnVtYikuYWN0aXZlKCk7XG4gICAgICB9KTtcblxuICBjb25zdCBzaWcgPSBjcnVtYlNpZ25hbCBhcyBTaWduYWw8QnJlYWRjcnVtYj4gJiB7XG4gICAgYWN0aXZlOiBTaWduYWw8Ym9vbGVhbj47XG4gIH07XG5cbiAgc2lnLmFjdGl2ZSA9IGFjdGl2ZTtcblxuICByZXR1cm4gc2lnO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYlN0b3JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXAgPSBtdXRhYmxlPE1hcDxzdHJpbmcsIEludGVybmFsQnJlYWRjcnVtYj4+KG5ldyBNYXAoKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNNYW51YWwgPSBpbmplY3RJc01hbnVhbCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dG9HZW5lcmF0ZUxhYmVsRm4gPSBpbmplY3RHZW5lcmF0ZUxhYmVsRm4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsZWFmUm91dGVzID0gaW5qZWN0TGVhZlJvdXRlcygpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsID0gbWFwQXJyYXkoXG4gICAgdGhpcy5sZWFmUm91dGVzLFxuICAgIChsZWFmKSA9PiB7XG4gICAgICBjb25zdCBzdGFibGVJZCA9IGNvbXB1dGVkKCgpID0+IGxlYWYoKS5wYXRoKTtcblxuICAgICAgcmV0dXJuIGV4cG9zZUFjdGl2ZVNpZ25hbChcbiAgICAgICAgY29tcHV0ZWQoXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBzdGFibGVJZCgpO1xuXG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMubWFwKCkuZ2V0KGlkKTtcblxuICAgICAgICAgICAgaWYgKCFmb3VuZClcbiAgICAgICAgICAgICAgcmV0dXJuIGF1dG9HZW5lcmF0ZUJyZWFkY3J1bWIoaWQsIGxlYWYsIHRoaXMuYXV0b0dlbmVyYXRlTGFiZWxGbik7XG5cbiAgICAgICAgICAgIGlmICghaWQuaW5jbHVkZXMoJzonKSkgcmV0dXJuIGZvdW5kO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5mb3VuZCxcbiAgICAgICAgICAgICAgbGluazogY29tcHV0ZWQoKCkgPT4gbGVhZigpLmxpbmspLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVxdWFsOiAoYSwgYikgPT4gYS5pZCA9PT0gYi5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICB0aGlzLmlzTWFudWFsLFxuICAgICAgKTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGVxdWFsOiAoYSwgYikgPT4gYS5saW5rID09PSBiLmxpbmssXG4gICAgfSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNydW1icyA9IGNvbXB1dGVkKCgpOiBTaWduYWw8QnJlYWRjcnVtYj5bXSA9PlxuICAgIHRoaXMuYWxsKCkuZmlsdGVyKChjKSA9PiBjLmFjdGl2ZSgpKSxcbiAgKTtcblxuICByZWFkb25seSB1bndyYXBwZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNydW1icygpLm1hcCgoYykgPT4gYygpKSk7XG5cbiAgcmVnaXN0ZXIoYnJlYWRjcnVtYjogSW50ZXJuYWxCcmVhZGNydW1iKSB7XG4gICAgdGhpcy5tYXAuaW5saW5lKChtKSA9PiBtLnNldChicmVhZGNydW1iLmlkLCBicmVhZGNydW1iKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbmplY3RzIGFuZCBwcm92aWRlcyBhY2Nlc3MgdG8gYSByZWFjdGl2ZSBsaXN0IG9mIGJyZWFkY3J1bWJzLlxuICpcbiAqIFRoZSBicmVhZGNydW1icyBhcmUgb3JkZXJlZCBhbmQgcmVmbGVjdCB0aGUgY3VycmVudCBhY3RpdmUgbmF2aWdhdGlvbiBwYXRoLlxuICogQHNlZSBCcmVhZGNydW1iXG4gKiBAcmV0dXJucyBgU2lnbmFsPEJyZWFkY3J1bWJbXT5gXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdhcHAtYnJlYWRjcnVtYnMnLFxuICogdGVtcGxhdGU6IGBcbiAqICA8bmF2IGFyaWEtbGFiZWw9XCJicmVhZGNydW1iXCI+XG4gKiAgICA8b2w+XG4gKiAgICAgIEBmb3IgKGNydW1iIG9mIGJyZWFkY3J1bWJzKCk7IHRyYWNrIGNydW1iLmlkKSB7XG4gKiAgICAgICAgPGxpPlxuICogICAgICAgICAgPGEgW2hyZWZdPVwiY3J1bWIubGluaygpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJjcnVtYi5hcmlhTGFiZWwoKVwiPnt7IGNydW1iLmxhYmVsKCkgfX08L2E+XG4gKiAgICAgICAgPC9saT5cbiAqICAgICAgfVxuICogICAgPC9vbD5cbiAqICA8L25hdj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgTXlCcmVhZGNydW1ic0NvbXBvbmVudCB7XG4gKiAgYnJlYWRjcnVtYnMgPSBpbmplY3RCcmVhZGNydW1icygpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RCcmVhZGNydW1icygpIHtcbiAgY29uc3Qgc3RvcmUgPSBpbmplY3QoQnJlYWRjcnVtYlN0b3JlKTtcbiAgcmV0dXJuIHN0b3JlLnVud3JhcHBlZDtcbn1cbiJdfQ==","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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Q0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN6QixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFL0MsT0FBTyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxJQUFZO0lBRVosT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcGFyc2VQYXRoU2VnbWVudChzZWdtZW50U3RyaW5nOiBzdHJpbmcpOiB7XG4gIHBhdGhQYXJ0OiBzdHJpbmc7XG4gIG1hdHJpeFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn0ge1xuICBjb25zdCBwYXJ0cyA9IHNlZ21lbnRTdHJpbmcuc3BsaXQoJzsnKTtcbiAgY29uc3QgcGF0aFBhcnQgPSBwYXJ0c1swXTtcbiAgY29uc3QgbWF0cml4UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZSA9ICd0cnVlJ10gPSBwYXJ0c1tpXS5zcGxpdCgnPScpO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIG1hdHJpeFBhcmFtc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHBhdGhQYXJ0LCBtYXRyaXhQYXJhbXMgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVByZWRpY2F0ZShwYXRoOiBzdHJpbmcpOiAocGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgY29uc3QgcGFydFByZWRpY2F0ZXMgPSBwYXRoXG4gICAgLnNwbGl0KCcvJylcbiAgICAuZmlsdGVyKChwYXJ0KSA9PiAhIXBhcnQudHJpbSgpKVxuICAgIC5tYXAoKGNvbmZpZ1NlZ21lbnRTdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgcGF0aFBhcnQ6IGNvbmZpZ1BhdGhQYXJ0LCBtYXRyaXhQYXJhbXM6IGNvbmZpZ01hdHJpeFBhcmFtcyB9ID1cbiAgICAgICAgcGFyc2VQYXRoU2VnbWVudChjb25maWdTZWdtZW50U3RyaW5nKTtcblxuICAgICAgbGV0IHNpbmdsZVBhdGhQYXJ0UHJlZGljYXRlOiAobGlua1NlZ21lbnRQYXRoUGFydDogc3RyaW5nKSA9PiBib29sZWFuO1xuICAgICAgaWYgKGNvbmZpZ1BhdGhQYXJ0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICBzaW5nbGVQYXRoUGFydFByZWRpY2F0ZSA9ICgpID0+IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaW5nbGVQYXRoUGFydFByZWRpY2F0ZSA9IChsaW5rU2VnbWVudFBhdGhQYXJ0OiBzdHJpbmcpID0+XG4gICAgICAgICAgbGlua1NlZ21lbnRQYXRoUGFydCA9PT0gY29uZmlnUGF0aFBhcnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmZpZ1NlZ21lbnRIYXNNYXRyaXhQYXJhbXMgPVxuICAgICAgICBPYmplY3Qua2V5cyhjb25maWdNYXRyaXhQYXJhbXMpLmxlbmd0aCA+IDA7XG5cbiAgICAgIHJldHVybiAobGlua1NlZ21lbnRTdHJpbmc6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJ0OiBsaW5rUGF0aFBhcnQsIG1hdHJpeFBhcmFtczogbGlua01hdHJpeFBhcmFtcyB9ID1cbiAgICAgICAgICBwYXJzZVBhdGhTZWdtZW50KGxpbmtTZWdtZW50U3RyaW5nKTtcblxuICAgICAgICBpZiAoIXNpbmdsZVBhdGhQYXJ0UHJlZGljYXRlKGxpbmtQYXRoUGFydCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbmZpZ1NlZ21lbnRIYXNNYXRyaXhQYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjb25maWdNYXRyaXhQYXJhbXMpLmV2ZXJ5KFxuICAgICAgICAgIChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGlua01hdHJpeFBhcmFtcywga2V5KSAmJlxuICAgICAgICAgICAgbGlua01hdHJpeFBhcmFtc1trZXldID09PSB2YWx1ZSxcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgcmV0dXJuIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBsaW5rUGF0aE9ubHkgPSBwYXRoLnNwbGl0KC9bPyNdLykuYXQoMCkgPz8gJyc7XG4gICAgaWYgKCFsaW5rUGF0aE9ubHkgJiYgcGFydFByZWRpY2F0ZXMubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghbGlua1BhdGhPbmx5ICYmIHBhcnRQcmVkaWNhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBwYXJ0cyA9IGxpbmtQYXRoT25seS5zcGxpdCgnLycpLmZpbHRlcigocGFydCkgPT4gISFwYXJ0LnRyaW0oKSk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IHBhcnRQcmVkaWNhdGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHBhcnRzLmV2ZXJ5KChzZWcsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgcHJlZCA9IHBhcnRQcmVkaWNhdGVzLmF0KGlkeCk7XG4gICAgICBpZiAoIXByZWQpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIHByZWQoc2VnKTtcbiAgICB9KTtcbiAgfTtcbn1cblxudHlwZSBQYXJzZWRTZWdtZW50ID0ge1xuICBwYXRoUGFydDogc3RyaW5nO1xuICBtYXRyaXhQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5mdW5jdGlvbiBzaW5nbGVTZWdtZW50TWF0Y2hlcyhcbiAgY29uZmlnU2VnbWVudDogUGFyc2VkU2VnbWVudCxcbiAgbGlua1NlZ21lbnQ6IFBhcnNlZFNlZ21lbnQsXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbmZpZ1NlZ21lbnQucGF0aFBhcnQgPT09ICc6Jykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGNvbmZpZ1NlZ21lbnQucGF0aFBhcnQgIT09IGxpbmtTZWdtZW50LnBhdGhQYXJ0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29uZmlnTWF0cml4ID0gY29uZmlnU2VnbWVudC5tYXRyaXhQYXJhbXM7XG4gIGNvbnN0IGxpbmtNYXRyaXggPSBsaW5rU2VnbWVudC5tYXRyaXhQYXJhbXM7XG4gIGZvciAoY29uc3Qga2V5IGluIGNvbmZpZ01hdHJpeCkge1xuICAgIGlmIChcbiAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGlua01hdHJpeCwga2V5KSB8fFxuICAgICAgbGlua01hdHJpeFtrZXldICE9PSBjb25maWdNYXRyaXhba2V5XVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShcbiAgY29uZmlnU2VnbWVudHM6IFBhcnNlZFNlZ21lbnRbXSxcbiAgbGlua1NlZ21lbnRzOiBQYXJzZWRTZWdtZW50W10sXG4gIGNvbmZpZ0lkeDogbnVtYmVyLFxuICBsaW5rSWR4OiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbmZpZ0lkeCA9PT0gY29uZmlnU2VnbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGxpbmtJZHggPT09IGxpbmtTZWdtZW50cy5sZW5ndGg7XG4gIH1cblxuICBpZiAobGlua0lkeCA9PT0gbGlua1NlZ21lbnRzLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSBjb25maWdJZHg7IGkgPCBjb25maWdTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNvbmZpZ1NlZ21lbnRzW2ldLnBhdGhQYXJ0ICE9PSAnKionKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBjdXJyZW50Q29uZmlnU2VnbWVudCA9IGNvbmZpZ1NlZ21lbnRzW2NvbmZpZ0lkeF07XG5cbiAgaWYgKGN1cnJlbnRDb25maWdTZWdtZW50LnBhdGhQYXJ0ID09PSAnKionKSB7XG4gICAgaWYgKFxuICAgICAgbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShcbiAgICAgICAgY29uZmlnU2VnbWVudHMsXG4gICAgICAgIGxpbmtTZWdtZW50cyxcbiAgICAgICAgY29uZmlnSWR4ICsgMSxcbiAgICAgICAgbGlua0lkeCxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsaW5rSWR4IDwgbGlua1NlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgaWYgKFxuICAgICAgICBtYXRjaFNlZ21lbnRzUmVjdXJzaXZlKFxuICAgICAgICAgIGNvbmZpZ1NlZ21lbnRzLFxuICAgICAgICAgIGxpbmtTZWdtZW50cyxcbiAgICAgICAgICBjb25maWdJZHgsXG4gICAgICAgICAgbGlua0lkeCArIDEsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFxuICAgICAgbGlua0lkeCA8IGxpbmtTZWdtZW50cy5sZW5ndGggJiZcbiAgICAgIHNpbmdsZVNlZ21lbnRNYXRjaGVzKGN1cnJlbnRDb25maWdTZWdtZW50LCBsaW5rU2VnbWVudHNbbGlua0lkeF0pXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShcbiAgICAgICAgY29uZmlnU2VnbWVudHMsXG4gICAgICAgIGxpbmtTZWdtZW50cyxcbiAgICAgICAgY29uZmlnSWR4ICsgMSxcbiAgICAgICAgbGlua0lkeCArIDEsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXaWxkY2FyZFByZWRpY2F0ZShwYXRoOiBzdHJpbmcpOiAobGlua1BhdGg6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIGNvbnN0IGNvbmZpZ1NlZ21lbnRzID0gcGF0aFxuICAgIC5zcGxpdCgnLycpXG4gICAgLmZpbHRlcigocCkgPT4gISFwLnRyaW0oKSlcbiAgICAubWFwKChzZWdtZW50KSA9PiBwYXJzZVBhdGhTZWdtZW50KHNlZ21lbnQpKTtcblxuICByZXR1cm4gKGxpbmtQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBsaW5rUGF0aE9ubHkgPSBsaW5rUGF0aC5zcGxpdCgvWz8jXS8pLmF0KDApID8/ICcnO1xuICAgIGNvbnN0IGxpbmtTZWdtZW50cyA9IGxpbmtQYXRoT25seVxuICAgICAgLnNwbGl0KCcvJylcbiAgICAgIC5maWx0ZXIoKHApID0+ICEhcC50cmltKCkpXG4gICAgICAubWFwKChzZWdtZW50KSA9PiBwYXJzZVBhdGhTZWdtZW50KHNlZ21lbnQpKTtcblxuICAgIHJldHVybiBtYXRjaFNlZ21lbnRzUmVjdXJzaXZlKGNvbmZpZ1NlZ21lbnRzLCBsaW5rU2VnbWVudHMsIDAsIDApO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVQcmVkaWNhdGUoXG4gIHBhdGg6IHN0cmluZyxcbik6IChsaW5rUGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgcmV0dXJuIHBhdGguaW5jbHVkZXMoJyoqJylcbiAgICA/IGNyZWF0ZVdpbGRjYXJkUHJlZGljYXRlKHBhdGgpXG4gICAgOiBjcmVhdGVCYXNlUHJlZGljYXRlKHBhdGgpO1xufVxuIl19","// 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi91dGlsL2ZpbmQtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsNkNBQTZDO0FBQzdDLCtFQUErRTtBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsU0FBUyxjQUFjLENBQUMsS0FBWTtJQUNsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBZSxFQUFFLEtBQVksRUFBVSxFQUFFO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztJQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBUyxDQUFDO0lBRWpDLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixTQUFTO1FBQ1gsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFaEIsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakIsTUFBTTtRQUNSLENBQUM7UUFFRCxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBaUIsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFJLEVBQVUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFnQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN6QyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDMUIsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxJQUFJLFlBQVksR0FBc0IsS0FBSyxDQUFDO0lBRTVDLE9BQU8sWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEdBQUcsSUFBSSxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLEdBQUcsS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRWxELElBQUksY0FBYyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0QsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBhZGFwdGVkIGZyb20gbmd4LXF1aWNrbGluayxcbi8vIChodHRwczovL2dpdGh1Yi5jb20vbWdlY2hldi9uZ3gtcXVpY2tsaW5rKVxuLy8gQ29weXJpZ2h0IChjKSBNaW5rbyBHZWNoZXYgYW5kIGNvbnRyaWJ1dG9ycywgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQgeyBQUklNQVJZX09VVExFVCwgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5mdW5jdGlvbiBpc1ByaW1hcnlSb3V0ZShyb3V0ZTogUm91dGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJvdXRlLm91dGxldCA9PT0gUFJJTUFSWV9PVVRMRVQgfHwgIXJvdXRlLm91dGxldDtcbn1cblxuZXhwb3J0IGNvbnN0IGZpbmRQYXRoID0gKGNvbmZpZzogUm91dGVbXSwgcm91dGU6IFJvdXRlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY29uZmlnUXVldWUgPSBjb25maWcuc2xpY2UoKTtcbiAgY29uc3QgcGFyZW50ID0gbmV3IE1hcDxSb3V0ZSwgUm91dGU+KCk7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PFJvdXRlPigpO1xuXG4gIHdoaWxlIChjb25maWdRdWV1ZS5sZW5ndGgpIHtcbiAgICBjb25zdCBlbCA9IGNvbmZpZ1F1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKCFlbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmlzaXRlZC5hZGQoZWwpO1xuXG4gICAgaWYgKGVsID09PSByb3V0ZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgKGVsLmNoaWxkcmVuIHx8IFtdKS5mb3JFYWNoKChjaGlsZFJvdXRlOiBSb3V0ZSkgPT4ge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhjaGlsZFJvdXRlKSkge1xuICAgICAgICBwYXJlbnQuc2V0KGNoaWxkUm91dGUsIGVsKTtcbiAgICAgICAgY29uZmlnUXVldWUucHVzaChjaGlsZFJvdXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGxhenlSb3V0ZXMgPSAoZWwgYXMgYW55KS5fbG9hZGVkUm91dGVzIHx8IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxhenlSb3V0ZXMpKSB7XG4gICAgICBsYXp5Um91dGVzLmZvckVhY2goKGxhenlSb3V0ZTogUm91dGUpID0+IHtcbiAgICAgICAgaWYgKGxhenlSb3V0ZSAmJiAhdmlzaXRlZC5oYXMobGF6eVJvdXRlKSkge1xuICAgICAgICAgIHBhcmVudC5zZXQobGF6eVJvdXRlLCBlbCk7XG4gICAgICAgICAgY29uZmlnUXVldWUucHVzaChsYXp5Um91dGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgcGF0aCA9ICcnO1xuICBsZXQgY3VycmVudFJvdXRlOiBSb3V0ZSB8IHVuZGVmaW5lZCA9IHJvdXRlO1xuXG4gIHdoaWxlIChjdXJyZW50Um91dGUpIHtcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IGN1cnJlbnRSb3V0ZS5wYXRoIHx8ICcnO1xuICAgIGlmIChpc1ByaW1hcnlSb3V0ZShjdXJyZW50Um91dGUpKSB7XG4gICAgICBwYXRoID0gYC8ke2N1cnJlbnRQYXRofSR7cGF0aH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoID0gYC8oJHtjdXJyZW50Um91dGUub3V0bGV0fToke2N1cnJlbnRQYXRofSkke3BhdGh9YDtcbiAgICB9XG4gICAgY3VycmVudFJvdXRlID0gcGFyZW50LmdldChjdXJyZW50Um91dGUpO1xuICB9XG5cbiAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5yZXBsYWNlQWxsKC9cXC8rL2csICcvJyk7XG5cbiAgaWYgKG5vcm1hbGl6ZWRQYXRoICE9PSAnLycgJiYgbm9ybWFsaXplZFBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguc2xpY2UoMCwgLTEpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoO1xufTtcbiJdfQ==","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvdXRpbC9zbmFwc2hvdC1wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUEwQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRSxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixPQUFPLENBQUMsS0FBNkIsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUN2QyxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIoKSB7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHJldHVybiAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpID0+IHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHJvdXRlLnBhdGhGcm9tUm9vdC5mbGF0TWFwKFxuICAgICAgKHNuYXApID0+IHNuYXAucm91dGVDb25maWc/LnBhdGggPz8gW10sXG4gICAgKTtcblxuICAgIGNvbnN0IGpvaW5lZFNlZ21lbnRzID0gc2VnbWVudHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiByb3V0ZXIuc2VyaWFsaXplVXJsKHJvdXRlci5wYXJzZVVybChqb2luZWRTZWdtZW50cykpO1xuICB9O1xufVxuIl19","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.type';\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLnJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBd0JyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JELE9BQU8sRUFBYyx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXpFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE9BQXNDO0lBRXRDLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQztRQUU5QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0IsTUFBTSxJQUFJLEdBQUcseUJBQXlCLENBQ3BDLEtBQUssRUFDTCxFQUFFLEVBQ0YsS0FBSyxDQUFDLFdBQVcsRUFDakIsS0FBSyxDQUFDLFFBQVEsQ0FDZixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFFM0IsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdEQUFDLENBQUM7UUFFdkQsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBRTlDLE1BQU0sRUFBRSxHQUFlO1lBQ3JCLEVBQUUsRUFBRSxFQUFFO1lBQ04sU0FBUyxFQUNQLE9BQU8sU0FBUyxLQUFLLFFBQVE7Z0JBQzNCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUMzQixDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUN6QixLQUFLLEVBQ0gsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDckUsSUFBSTtTQUNMLENBQUM7UUFFRixLQUFLLENBQUMsUUFBUSxDQUNaLHdCQUF3QixDQUN0QixFQUFFLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUN4RCxDQUNGLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxVQUFVO1lBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBjcmVhdGVVcmxUcmVlRnJvbVNuYXBzaG90LFxuICBSb3V0ZXIsXG4gIHR5cGUgUmVzb2x2ZUZuLFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlN0b3JlIH0gZnJvbSAnLi9icmVhZGNydW1iLnN0b3JlJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBkZWZpbmluZyBhIGJyZWFkY3J1bWIuXG4gKlxuICovXG50eXBlIENyZWF0ZUJyZWFkY3J1bWJPcHRpb25zID0ge1xuICAvKipcbiAgICogVGhlIHZpc2libGUgdGV4dCBmb3IgdGhlIGJyZWFkY3J1bWIuXG4gICAqIENhbiBiZSBhIHN0YXRpYyBzdHJpbmcgb3IgYSBmdW5jdGlvbiBmb3IgZHluYW1pYyBsYWJlbHMuXG4gICAqL1xuICBsYWJlbDogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gIC8qKlxuICAgKiBBbiBhY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgYnJlYWRjcnVtYiBpdGVtLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYGxhYmVsYCBpZiBub3QgcHJvdmlkZWQuXG4gICAqIENhbiBiZSBhIHN0YXRpYyBzdHJpbmcgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJpbmcgZm9yIGR5bmFtaWMgQVJJQSBsYWJlbHMuXG4gICAqL1xuICBhcmlhTGFiZWw/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKTtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvdXRlIHJlc29sdmVyIHdpbGwgd2FpdCB1bnRpbCB0aGUgYGxhYmVsYCBzaWduYWwgaGFzIGEgdmFsdWUgYmVmb3JlIGByZXNvbHZpbmdgXG4gICAqL1xuICBhd2FpdFZhbHVlPzogYm9vbGVhbjtcbn07XG5cbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XG5pbXBvcnQgeyBpbmplY3RTbmFwc2hvdFBhdGhSZXNvbHZlciB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYiwgY3JlYXRlSW50ZXJuYWxCcmVhZGNydW1iIH0gZnJvbSAnLi9icmVhZGNydW1iLnR5cGUnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJlZ2lzdGVycyBhIGJyZWFkY3J1bWIgZm9yIGEgc3BlY2lmaWMgcm91dGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYW4gQW5ndWxhciBSb3V0ZSBgUmVzb2x2ZUZuYC5cbiAqIEl0IGhhbmRsZXMgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgYnJlYWRjcnVtYiB3aXRoIHRoZSBgQnJlYWRjcnVtYlN0b3JlYFxuICogYW5kIGVuc3VyZXMgYXV0b21hdGljIGRlcmVnaXN0cmF0aW9uIHdoZW4gdGhlIHJvdXRlIGlzIGRlc3Ryb3llZC5cbiAqXG4gKiBAcGFyYW0gZmFjdG9yeSBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGBDcmVhdGVCcmVhZGNydW1iT3B0aW9uc2Agb2JqZWN0LlxuICogQHNlZSBDcmVhdGVCcmVhZGNydW1iT3B0aW9uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY29uc3QgYXBwUm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnaG9tZScsXG4gKiAgICAgY29tcG9uZW50OiBIb21lQ29tcG9uZW50LFxuICogICAgIHJlc29sdmU6IHtcbiAqICAgICAgIGJyZWFkY3J1bWI6IGNyZWF0ZUJyZWFkY3J1bWIoKCkgPT4gKHtcbiAqICAgICAgICAgbGFiZWw6ICdIb21lJyxcbiAqICAgICAgIH0pO1xuICogICAgIH0sXG4gKiAgICAgcGF0aDogJ3VzZXJzLzp1c2VySWQnLFxuICogICAgIGNvbXBvbmVudDogVXNlclByb2ZpbGVDb21wb25lbnQsXG4gKiAgICAgcmVzb2x2ZToge1xuICogICAgICAgYnJlYWRjcnVtYjogY3JlYXRlQnJlYWRjcnVtYigoKSA9PiB7XG4gKiAgICAgICAgIGNvbnN0IHVzZXJTdG9yZSA9IGluamVjdChVc2VyU3RvcmUpO1xuICogICAgICAgICByZXR1cm4ge1xuICogICAgICAgICAgICBsYWJlbDogKCkgPT4gdXNlclN0b3JlLnVzZXIoKS5uYW1lID8/ICdMb2FkaW5nLi4uXG4gKiAgICAgICAgfTtcbiAqICAgICAgfSlcbiAqICAgICB9LFxuICogICB9XG4gKiBdO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCcmVhZGNydW1iKFxuICBmYWN0b3J5OiAoKSA9PiBDcmVhdGVCcmVhZGNydW1iT3B0aW9ucyxcbik6IFJlc29sdmVGbjx2b2lkPiB7XG4gIHJldHVybiBhc3luYyAocm91dGUpID0+IHtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBjb25zdCBzdG9yZSA9IGluamVjdChCcmVhZGNydW1iU3RvcmUpO1xuICAgIGNvbnN0IHJlc29sdmVyID0gaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIoKTtcblxuICAgIGNvbnN0IGZwID0gcmVzb2x2ZXIocm91dGUpO1xuXG4gICAgY29uc3QgdHJlZSA9IGNyZWF0ZVVybFRyZWVGcm9tU25hcHNob3QoXG4gICAgICByb3V0ZSxcbiAgICAgIFtdLFxuICAgICAgcm91dGUucXVlcnlQYXJhbXMsXG4gICAgICByb3V0ZS5mcmFnbWVudCxcbiAgICApO1xuXG4gICAgY29uc3QgcHJvdmlkZWQgPSBmYWN0b3J5KCk7XG5cbiAgICBjb25zdCBsaW5rID0gY29tcHV0ZWQoKCkgPT4gcm91dGVyLnNlcmlhbGl6ZVVybCh0cmVlKSk7XG5cbiAgICBjb25zdCB7IGxhYmVsLCBhcmlhTGFiZWwgPSBsYWJlbCB9ID0gcHJvdmlkZWQ7XG5cbiAgICBjb25zdCBiYzogQnJlYWRjcnVtYiA9IHtcbiAgICAgIGlkOiBmcCxcbiAgICAgIGFyaWFMYWJlbDpcbiAgICAgICAgdHlwZW9mIGFyaWFMYWJlbCA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGNvbXB1dGVkKCgpID0+IGFyaWFMYWJlbClcbiAgICAgICAgICA6IGNvbXB1dGVkKGFyaWFMYWJlbCksXG4gICAgICBsYWJlbDpcbiAgICAgICAgdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IGNvbXB1dGVkKCgpID0+IGxhYmVsKSA6IGNvbXB1dGVkKGxhYmVsKSxcbiAgICAgIGxpbmssXG4gICAgfTtcblxuICAgIHN0b3JlLnJlZ2lzdGVyKFxuICAgICAgY3JlYXRlSW50ZXJuYWxCcmVhZGNydW1iKFxuICAgICAgICBiYyxcbiAgICAgICAgY29tcHV0ZWQoKCkgPT4gcm91dGUuZGF0YT8uWydza2lwQnJlYWRjcnVtYiddICE9PSB0cnVlKSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGlmIChwcm92aWRlZC5hd2FpdFZhbHVlKSBhd2FpdCB1bnRpbChiYy5sYWJlbCwgKHYpID0+ICEhdik7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class PreloadService {\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.1.0\", ngImport: i0, type: PreloadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: PreloadService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: PreloadService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi9wcmVsb2FkaW5nL3ByZWxvYWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRy9CLE1BQU0sT0FBTyxjQUFjO0lBQ1IsZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUNqRCxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbEUsWUFBWSxDQUFDLFNBQWlCO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQzt1R0FOVSxjQUFjOzJHQUFkLGNBQWMsY0FERCxNQUFNOzsyRkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUHJlbG9hZFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHByZWxvYWRPbkRlbWFuZCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHByZWxvYWRSZXF1ZXN0ZWQkID0gdGhpcy5wcmVsb2FkT25EZW1hbmQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHN0YXJ0UHJlbG9hZChyb3V0ZVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMucHJlbG9hZE9uRGVtYW5kJC5uZXh0KHJvdXRlUGF0aCk7XG4gIH1cbn1cbiJdfQ==","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 { PreloadService } from './preload.service';\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 svc = inject(PreloadService);\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.svc.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.1.0\", ngImport: i0, type: PreloadStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: PreloadStrategy, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: PreloadStrategy, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC5zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvcHJlbG9hZGluZy9wcmVsb2FkLnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBa0MsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFjLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRW5ELFNBQVMsaUJBQWlCO0lBQ3hCLElBQ0UsVUFBVSxDQUFDLE1BQU07UUFDakIsV0FBVyxJQUFJLFVBQVUsQ0FBQyxNQUFNO1FBQ2hDLFlBQVksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVM7UUFDM0MsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUMxRCxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUN4QyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQ1IsZUFBZSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVU7WUFDekQsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYTtnQkFDekQsUUFBUTtZQUNWLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3RCLElBQ0UsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVU7WUFDcEQsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFDcEUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFFL0MsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQVk7SUFDN0IsT0FBTyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ3ZELENBQUM7QUFLRCxNQUFNLE9BQU8sZUFBZTtJQUNULE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU5QyxPQUFPLENBQUMsS0FBWSxFQUFFLElBQTJCO1FBQy9DLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFMUQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFdkMsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDcEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNoRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQ3ZCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN4QyxDQUFDO0lBQ0osQ0FBQzt1R0FuQlUsZUFBZTsyR0FBZixlQUFlLGNBRmQsTUFBTTs7MkZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByZWxvYWRpbmdTdHJhdGVneSwgdHlwZSBSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVNUFRZLCBmaWx0ZXIsIGZpbmFsaXplLCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNyZWF0ZVJvdXRlUHJlZGljYXRlLCBmaW5kUGF0aCB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgUHJlbG9hZFNlcnZpY2UgfSBmcm9tICcuL3ByZWxvYWQuc2VydmljZSc7XG5cbmZ1bmN0aW9uIGhhc1Nsb3dDb25uZWN0aW9uKCkge1xuICBpZiAoXG4gICAgZ2xvYmFsVGhpcy53aW5kb3cgJiZcbiAgICAnbmF2aWdhdG9yJyBpbiBnbG9iYWxUaGlzLndpbmRvdyAmJlxuICAgICdjb25uZWN0aW9uJyBpbiBnbG9iYWxUaGlzLndpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yLmNvbm5lY3Rpb24gPT09ICdvYmplY3QnICYmXG4gICAgISFnbG9iYWxUaGlzLndpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvblxuICApIHtcbiAgICBjb25zdCBpczJnID1cbiAgICAgICdlZmZlY3RpdmVUeXBlJyBpbiBnbG9iYWxUaGlzLndpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbiAmJlxuICAgICAgdHlwZW9mIGdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUgPT09XG4gICAgICAgICdzdHJpbmcnICYmXG4gICAgICBnbG9iYWxUaGlzLndpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlLmVuZHNXaXRoKCcyZycpO1xuICAgIGlmIChpczJnKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICAnc2F2ZURhdGEnIGluIGdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uICYmXG4gICAgICB0eXBlb2YgZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yLmNvbm5lY3Rpb24uc2F2ZURhdGEgPT09ICdib29sZWFuJyAmJlxuICAgICAgZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yLmNvbm5lY3Rpb24uc2F2ZURhdGFcbiAgICApXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbm9QcmVsb2FkKHJvdXRlOiBSb3V0ZSkge1xuICByZXR1cm4gcm91dGUuZGF0YSAmJiByb3V0ZS5kYXRhWydwcmVsb2FkJ10gPT09IGZhbHNlO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJlbG9hZFN0cmF0ZWd5IGltcGxlbWVudHMgUHJlbG9hZGluZ1N0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3ZjID0gaW5qZWN0KFByZWxvYWRTZXJ2aWNlKTtcblxuICBwcmVsb2FkKHJvdXRlOiBSb3V0ZSwgbG9hZDogKCkgPT4gT2JzZXJ2YWJsZTxhbnk+KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAobm9QcmVsb2FkKHJvdXRlKSB8fCBoYXNTbG93Q29ubmVjdGlvbigpKSByZXR1cm4gRU1QVFk7XG5cbiAgICBjb25zdCBmcCA9IGZpbmRQYXRoKHRoaXMucm91dGVyLmNvbmZpZywgcm91dGUpO1xuXG4gICAgaWYgKHRoaXMubG9hZGluZy5oYXMoZnApKSByZXR1cm4gRU1QVFk7XG5cbiAgICBjb25zdCBwcmVkaWNhdGUgPSBjcmVhdGVSb3V0ZVByZWRpY2F0ZShmcCk7XG4gICAgcmV0dXJuIHRoaXMuc3ZjLnByZWxvYWRSZXF1ZXN0ZWQkLnBpcGUoXG4gICAgICBmaWx0ZXIoKHBhdGgpID0+IHBhdGggPT09IGZwIHx8IHByZWRpY2F0ZShwYXRoKSksXG4gICAgICB0YWtlKDEpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGxvYWQoKSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmcuZGVsZXRlKGZwKSksXG4gICAgKTtcbiAgfVxufVxuIl19","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 { PreloadService } 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 svc = inject(PreloadService);\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 svc.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 LinkDirective {\n routerLink = inject(RouterLink, {\n self: true,\n optional: true,\n }) ?? inject(RouterLinkWithHref, { self: true, optional: true });\n svc = inject(PreloadService);\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.svc.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.1.0\", ngImport: i0, type: LinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.0\", type: LinkDirective, 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.1.0\", ngImport: i0, type: LinkDirective, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL2xpbmsuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLE1BQU0sRUFDTixVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLE9BQU8sR0FDUixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQUU5QyxTQUFTLGNBQWMsQ0FDckIsTUFBYyxFQUNkLElBQXFDLEVBQ3JDLFVBQTJCLEVBQzNCLFdBQW9CLEVBQ3BCLFFBQWlCLEVBQ2pCLG1CQUErQyxFQUMvQyxpQkFBa0M7SUFFbEMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QixJQUFJLGlCQUFpQjtRQUFFLE9BQU8saUJBQWlCLENBQUM7SUFFaEQsSUFBSSxJQUFJLFlBQVksT0FBTztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXpDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVoRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFO1FBQy9CLFVBQVU7UUFDVixXQUFXO1FBQ1gsUUFBUTtRQUNSLG1CQUFtQjtLQUNwQixDQUFDLENBQUM7QUFDTCxDQUFDO0FB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RkFBYixhQUFhOzsyRkFBYixhQUFhO2tCQXZCekIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsVUFBVTtvQkFDcEIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLElBQUksRUFBRTt3QkFDSixjQUFjLEVBQUUsV0FBVztxQkFDNUI7b0JBQ0QsY0FBYyxFQUFFO3dCQUNkOzRCQUNFLFNBQVMsRUFBRSxVQUFVOzRCQUNyQixNQUFNLEVBQUU7Z0NBQ04sb0JBQW9CO2dDQUNwQixRQUFRO2dDQUNSLGFBQWE7Z0NBQ2IsVUFBVTtnQ0FDVixxQkFBcUI7Z0NBQ3JCLE9BQU87Z0NBQ1AsWUFBWTtnQ0FDWixvQkFBb0I7Z0NBQ3BCLFlBQVk7NkJBQ2I7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7d0RBMkRDLFdBQVc7c0JBUFYsWUFBWTt1QkFBQyxXQUFXLEVBQUU7d0JBQ3pCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNqQjtnQkFtQkQsT0FBTztzQkFQTixZQUFZO3VCQUFDLE9BQU8sRUFBRTt3QkFDckIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixnQkFBZ0I7cUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgY29tcHV0ZWQsXG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFByb3ZpZGVyLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgdHlwZSBBY3RpdmF0ZWRSb3V0ZSxcbiAgdHlwZSBQYXJhbXMsXG4gIFJvdXRlcixcbiAgUm91dGVyTGluayxcbiAgUm91dGVyTGlua1dpdGhIcmVmLFxuICBVcmxUcmVlLFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZWxlbWVudFZpc2liaWxpdHkgfSBmcm9tICdAbW1zdGFjay9wcmltaXRpdmVzJztcbmltcG9ydCB7IFByZWxvYWRTZXJ2aWNlIH0gZnJvbSAnLi9wcmVsb2FkaW5nJztcblxuZnVuY3Rpb24gaW5wdXRUb1VybFRyZWUoXG4gIHJvdXRlcjogUm91dGVyLFxuICBsaW5rOiBzdHJpbmcgfCBhbnlbXSB8IFVybFRyZWUgfCBudWxsLFxuICByZWxhdGl2ZVRvPzogQWN0aXZhdGVkUm91dGUsXG4gIHF1ZXJ5UGFyYW1zPzogUGFyYW1zLFxuICBmcmFnbWVudD86IHN0cmluZyxcbiAgcXVlcnlQYXJhbXNIYW5kbGluZz86ICdtZXJnZScgfCAncHJlc2VydmUnIHwgJycsXG4gIHJvdXRlckxpbmtVcmxUcmVlPzogVXJsVHJlZSB8IG51bGwsXG4pOiBVcmxUcmVlIHwgbnVsbCB7XG4gIGlmICghbGluaykgcmV0dXJuIG51bGw7XG4gIGlmIChyb3V0ZXJMaW5rVXJsVHJlZSkgcmV0dXJuIHJvdXRlckxpbmtVcmxUcmVlO1xuXG4gIGlmIChsaW5rIGluc3RhbmNlb2YgVXJsVHJlZSkgcmV0dXJuIGxpbms7XG5cbiAgY29uc3QgYXJyID0gQXJyYXkuaXNBcnJheShsaW5rKSA/IGxpbmsgOiBbbGlua107XG5cbiAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGFyciwge1xuICAgIHJlbGF0aXZlVG8sXG4gICAgcXVlcnlQYXJhbXMsXG4gICAgZnJhZ21lbnQsXG4gICAgcXVlcnlQYXJhbXNIYW5kbGluZyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyZWVUb1NlcmlhbGl6ZWRVcmwoXG4gIHJvdXRlcjogUm91dGVyLFxuICB1cmxUcmVlOiBVcmxUcmVlIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXVybFRyZWUpIHJldHVybiBudWxsO1xuICByZXR1cm4gcm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFRyaWdnZXJQcmVsb2FkKCkge1xuICBjb25zdCBzdmMgPSBpbmplY3QoUHJlbG9hZFNlcnZpY2UpO1xuICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICByZXR1cm4gKFxuICAgIGxpbms6IHN0cmluZyB8IGFueVtdIHwgVXJsVHJlZSB8IG51bGwsXG4gICAgcmVsYXRpdmVUbz86IEFjdGl2YXRlZFJvdXRlLFxuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zLFxuICAgIGZyYWdtZW50Pzogc3RyaW5nLFxuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiAnbWVyZ2UnIHwgJ3ByZXNlcnZlJyB8ICcnLFxuICApID0+IHtcbiAgICBjb25zdCB1cmxUcmVlID0gaW5wdXRUb1VybFRyZWUoXG4gICAgICByb3V0ZXIsXG4gICAgICBsaW5rLFxuICAgICAgcmVsYXRpdmVUbyxcbiAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgZnJhZ21lbnQsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nLFxuICAgICk7XG4gICAgY29uc3QgZnVsbFBhdGggPSB0cmVlVG9TZXJpYWxpemVkVXJsKHJvdXRlciwgdXJsVHJlZSk7XG4gICAgaWYgKCFmdWxsUGF0aCkgcmV0dXJuO1xuXG4gICAgc3ZjLnN0YXJ0UHJlbG9hZChmdWxsUGF0aCk7XG4gIH07XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGBtbUxpbmtgIGRpcmVjdGl2ZS5cbiAqL1xudHlwZSBNTUxpbmtDb25maWcgPSB7XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBwcmVsb2FkIGJlaGF2aW9yIGZvciBsaW5rcy5cbiAgICogQ2FuIGJlICdob3ZlcicsICd2aXNpYmxlJywgb3IgbnVsbCAobm8gcHJlbG9hZGluZykuXG4gICAqIEBkZWZhdWx0ICdob3ZlcidcbiAgICovXG4gIHByZWxvYWRPbjogJ2hvdmVyJyB8ICd2aXNpYmxlJyB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSBtb3VzZSBkb3duIGV2ZW50cyBmb3IgcHJlbG9hZGluZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHVzZU1vdXNlRG93bjogYm9vbGVhbjtcbn07XG5cbmNvbnN0IGNvbmZpZ1Rva2VuID0gbmV3IEluamVjdGlvblRva2VuPE1NTGlua0NvbmZpZz4oJ01NU1RBQ0tfTElOS19DT05GSUcnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVNTUxpbmtEZWZhdWx0Q29uZmlnKFxuICBjb25maWc6IFBhcnRpYWw8TU1MaW5rQ29uZmlnPixcbik6IFByb3ZpZGVyIHtcbiAgY29uc3QgY2ZnOiBNTUxpbmtDb25maWcgPSB7XG4gICAgcHJlbG9hZE9uOiAnaG92ZXInLFxuICAgIHVzZU1vdXNlRG93bjogZmFsc2UsXG4gICAgLi4uY29uZmlnLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogY29uZmlnVG9rZW4sXG4gICAgdXNlVmFsdWU6IGNmZyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0Q29uZmlnKCkge1xuICBjb25zdCBjZmcgPSBpbmplY3QoY29uZmlnVG9rZW4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHJldHVybiB7XG4gICAgcHJlbG9hZE9uOiAnaG92ZXInIGFzIGNvbnN0LFxuICAgIHVzZU1vdXNlRG93bjogZmFsc2UsXG4gICAgLi4uY2ZnLFxuICB9O1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbW1MaW5rXScsXG4gIGV4cG9ydEFzOiAnbW1MaW5rJyxcbiAgaG9zdDoge1xuICAgICcobW91c2VlbnRlciknOiAnb25Ib3ZlcigpJyxcbiAgfSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IFJvdXRlckxpbmssXG4gICAgICBpbnB1dHM6IFtcbiAgICAgICAgJ3JvdXRlckxpbms6IG1tTGluaycsXG4gICAgICAgICd0YXJnZXQnLFxuICAgICAgICAncXVlcnlQYXJhbXMnLFxuICAgICAgICAnZnJhZ21lbnQnLFxuICAgICAgICAncXVlcnlQYXJhbXNIYW5kbGluZycsXG4gICAgICAgICdzdGF0ZScsXG4gICAgICAgICdyZWxhdGl2ZVRvJyxcbiAgICAgICAgJ3NraXBMb2NhdGlvbkNoYW5nZScsXG4gICAgICAgICdyZXBsYWNlVXJsJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlua0RpcmVjdGl2ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyTGluayA9XG4gICAgaW5qZWN0KFJvdXRlckxpbmssIHtcbiAgICAgIHNlbGY6IHRydWUsXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9KSA/PyBpbmplY3QoUm91dGVyTGlua1dpdGhIcmVmLCB7IHNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3ZjID0gaW5qZWN0KFByZWxvYWRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICByZWFkb25seSB0YXJnZXQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHF1ZXJ5UGFyYW1zID0gaW5wdXQ8UGFyYW1zPigpO1xuICByZWFkb25seSBmcmFnbWVudCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgcXVlcnlQYXJhbXNIYW5kbGluZyA9IGlucHV0PCdtZXJnZScgfCAncHJlc2VydmUnIHwgJyc+KCk7XG4gIHJlYWRvbmx5IHN0YXRlID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgYW55Pj4oKTtcbiAgcmVhZG9ubHkgaW5mbyA9IGlucHV0PHVua25vd24+KCk7XG4gIHJlYWRvbmx5IHJlbGF0aXZlVG8gPSBpbnB1dDxBY3RpdmF0ZWRSb3V0ZT4oKTtcbiAgcmVhZG9ubHkgc2tpcExvY2F0aW9uQ2hhbmdlID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICByZWFkb25seSByZXBsYWNlVXJsID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICByZWFkb25seSBtbUxpbmsgPSBpbnB1dDxzdHJpbmcgfCBhbnlbXSB8IFVybFRyZWUgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgcHJlbG9hZE9uID0gaW5wdXQ8J2hvdmVyJyB8ICd2aXNpYmxlJyB8IG51bGw+KFxuICAgIGluamVjdENvbmZpZygpLnByZWxvYWRPbixcbiAgKTtcbiAgcmVhZG9ubHkgdXNlTW91c2VEb3duID0gaW5wdXQoaW5qZWN0Q29uZmlnKCkudXNlTW91c2VEb3duLCB7XG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxuICB9KTtcbiAgcmVhZG9ubHkgYmVmb3JlTmF2aWdhdGUgPSBpbnB1dDwoKSA9PiB2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHByZWxvYWRpbmcgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVybFRyZWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGlucHV0VG9VcmxUcmVlKFxuICAgICAgdGhpcy5yb3V0ZXIsXG4gICAgICB0aGlzLm1tTGluaygpLFxuICAgICAgdGhpcy5yZWxhdGl2ZVRvKCksXG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zKCksXG4gICAgICB0aGlzLmZyYWdtZW50KCksXG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcoKSxcbiAgICAgIHRoaXMucm91dGVyTGluaz8udXJsVHJlZSxcbiAgICApO1xuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZ1bGxQYXRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0cmVlVG9TZXJpYWxpemVkVXJsKHRoaXMucm91dGVyLCB0aGlzLnVybFRyZWUoKSk7XG4gIH0pO1xuXG4gIG9uSG92ZXIoKSB7XG4gICAgaWYgKHVudHJhY2tlZCh0aGlzLnByZWxvYWRPbikgIT09ICdob3ZlcicpIHJldHVybjtcbiAgICB0aGlzLnJlcXVlc3RQcmVsb2FkKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbXG4gICAgJyRldmVudC5idXR0b24nLFxuICAgICckZXZlbnQuY3RybEtleScsXG4gICAgJyRldmVudC5zaGlmdEtleScsXG4gICAgJyRldmVudC5hbHRLZXknLFxuICAgICckZXZlbnQubWV0YUtleScsXG4gIF0pXG4gIG9uTW91c2VEb3duKFxuICAgIGJ1dHRvbjogbnVtYmVyLFxuICAgIGN0cmxLZXk6IGJvb2xlYW4sXG4gICAgc2hpZnRLZXk6IGJvb2xlYW4sXG4gICAgYWx0S2V5OiBib29sZWFuLFxuICAgIG1ldGFLZXk6IGJvb2xlYW4sXG4gICkge1xuICAgIGlmICghdW50cmFja2VkKHRoaXMudXNlTW91c2VEb3duKSkgcmV0dXJuO1xuICAgIHJldHVybiB0aGlzLnRyaWdnZXIoYnV0dG9uLCBjdHJsS2V5LCBzaGlmdEtleSwgYWx0S2V5LCBtZXRhS2V5KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgW1xuICAgICckZXZlbnQuYnV0dG9uJyxcbiAgICAnJGV2ZW50LmN0cmxLZXknLFxuICAgICckZXZlbnQuc2hpZnRLZXknLFxuICAgICckZXZlbnQuYWx0S2V5JyxcbiAgICAnJGV2ZW50Lm1ldGFLZXknLFxuICBdKVxuICBvbkNsaWNrKFxuICAgIGJ1dHRvbjogbnVtYmVyLFxuICAgIGN0cmxLZXk6IGJvb2xlYW4sXG4gICAgc2hpZnRLZXk6IGJvb2xlYW4sXG4gICAgYWx0S2V5OiBib29sZWFuLFxuICAgIG1ldGFLZXk6IGJvb2xlYW4sXG4gICkge1xuICAgIGlmICh1bnRyYWNrZWQodGhpcy51c2VNb3VzZURvd24pKSByZXR1cm47XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlcihidXR0b24sIGN0cmxLZXksIHNoaWZ0S2V5LCBhbHRLZXksIG1ldGFLZXkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgaW50ZXJzZWN0aW9uID0gZWxlbWVudFZpc2liaWxpdHkoKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcmVsb2FkT24oKSAhPT0gJ3Zpc2libGUnKSByZXR1cm47XG4gICAgICBpZiAoaW50ZXJzZWN0aW9uLnZpc2libGUoKSkgdGhpcy5yZXF1ZXN0UHJlbG9hZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0UHJlbG9hZCgpIHtcbiAgICBjb25zdCBmcCA9IHVudHJhY2tlZCh0aGlzLmZ1bGxQYXRoKTtcbiAgICBpZiAoIXRoaXMucm91dGVyTGluayB8fCAhZnApIHJldHVybjtcbiAgICB0aGlzLnN2Yy5zdGFydFByZWxvYWQoZnApO1xuICAgIHRoaXMucHJlbG9hZGluZy5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXIoXG4gICAgYnV0dG9uOiBudW1iZXIsXG4gICAgY3RybEtleTogYm9vbGVhbixcbiAgICBzaGlmdEtleTogYm9vbGVhbixcbiAgICBhbHRLZXk6IGJvb2xlYW4sXG4gICAgbWV0YUtleTogYm9vbGVhbixcbiAgKSB7XG4gICAgdW50cmFja2VkKHRoaXMuYmVmb3JlTmF2aWdhdGUpPy4oKTtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXJMaW5rPy5vbkNsaWNrKGJ1dHRvbiwgY3RybEtleSwgc2hpZnRLZXksIGFsdEtleSwgbWV0YUtleSk7XG4gIH1cbn1cbiJdfQ==","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi90aXRsZS90aXRsZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUE2QmpFLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFzQixzQkFBc0IsQ0FBQyxDQUFDO0FBRTlFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQW9CO0lBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO0lBRXBDLE1BQU0sUUFBUSxHQUNaLE9BQU8sTUFBTSxLQUFLLFVBQVU7UUFDMUIsQ0FBQyxDQUFDLE1BQU07UUFDUixDQUFDLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBRTdDLE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLGFBQWEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLElBQUksSUFBSTtTQUNsRDtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBUaXRsZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cbiAqIERlZmluZXMgaG93IGNyZWF0ZVRpdGxlIHNob3VsZCBiZWhhdmVcbiAqIEBzZWUge2NyZWF0ZVRpdGxlfVxuICovXG5leHBvcnQgdHlwZSBUaXRsZUNvbmZpZyA9IHtcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSB0byBiZSB1c2VkIHdoZW4gbm8gdGl0bGUgaXMgc2V0LlxuICAgKiBJZiBub3QgcHJvdmlkZWQgaXQgZGVmYXVsdHMgdG8gYW4gZW1wdHkgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBwcmVmaXg/OiBzdHJpbmcgfCAoKHRpdGxlOiBzdHJpbmcpID0+IHN0cmluZyk7XG4gIC8qKlxuICAgKiBpZiBmYWxzZSwgdGhlIHRpdGxlIHdpbGwgY2hhbmdlIHRvIHRoZSB1cmwsIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRydWUgYXMgdGhhdCBpcyBzdGFuZGFyZCBiZWhhdmlvclxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBrZWVwTGFzdEtub3duVGl0bGU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IHR5cGUgSW50ZXJuYWxUaXRsZUNvbmZpZyA9IHtcbiAgcGFyc2VyOiAodGl0bGU6IHN0cmluZykgPT4gc3RyaW5nO1xuICBrZWVwTGFzdEtub3duOiBib29sZWFuO1xufTtcblxuY29uc3QgdG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48SW50ZXJuYWxUaXRsZUNvbmZpZz4oJ01NU1RBQ0tfVElUTEVfQ09ORklHJyk7XG5cbi8qKlxuICogdXNlZCB0byBwcm92aWRlIHRoZSB0aXRsZSBjb25maWd1cmF0aW9uLCB3aWxsIG5vdCBiZSBhcHBsaWVkIHVubGVzcyBhIGBjcmVhdGVUaXRsZWAgcmVzb2x2ZXIgaXMgdXNlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVRpdGxlQ29uZmlnKGNvbmZpZz86IFRpdGxlQ29uZmlnKTogUHJvdmlkZXIge1xuICBjb25zdCBwcmVmaXggPSBjb25maWc/LnByZWZpeCA/PyAnJztcblxuICBjb25zdCBwcmVmaXhGbiA9XG4gICAgdHlwZW9mIHByZWZpeCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcmVmaXhcbiAgICAgIDogKHRpdGxlOiBzdHJpbmcpID0+IGAke3ByZWZpeH0ke3RpdGxlfWA7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiB0b2tlbixcbiAgICB1c2VWYWx1ZToge1xuICAgICAgcGFyc2VyOiBwcmVmaXhGbixcbiAgICAgIGtlZXBMYXN0S25vd246IGNvbmZpZz8ua2VlcExhc3RLbm93blRpdGxlID8/IHRydWUsXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFRpdGxlQ29uZmlnKCk6IEludGVybmFsVGl0bGVDb25maWcge1xuICByZXR1cm4gaW5qZWN0KHRva2VuKTtcbn1cbiJdfQ==","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.1.0\", ngImport: i0, type: TitleStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: TitleStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL3RpdGxlL3RpdGxlLnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUVaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBS25ELE1BQU0sT0FBTyxVQUFVO0lBQ0osS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixHQUFHLEdBQUcsT0FBTyxDQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEQsVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFakQ7UUFDRSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSx5REFBQyxDQUFDO1FBRXJFLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxhQUFhLEVBQUU7aUJBQ25CLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUN6RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLGlFQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSx3REFBQyxDQUFDO1FBRXpFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixFQUFFLENBQUMsYUFBYTtZQUNqRCxDQUFDLENBQUMsWUFBWSxDQUFpQjtnQkFDM0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRTtnQkFDNUIsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUMzQixJQUFJLENBQUMsS0FBSzt3QkFBRSxPQUFPLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNyQyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2FBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFFakIsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQVUsRUFBRSxPQUF1QjtRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO3VHQWxDVSxVQUFVOzJHQUFWLFVBQVUsY0FGVCxNQUFNOzsyRkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUFzQ0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsRUFBaUMsRUFDakMsVUFBVSxHQUFHLEtBQUs7SUFFbEIsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFtQixFQUFFO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRywwQkFBMEIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUV2QyxNQUFNLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUV0QixNQUFNLFdBQVcsR0FDZixPQUFPLFFBQVEsS0FBSyxRQUFRO1lBQzFCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekIsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLDZEQUFDLENBQUM7UUFFaEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUV0QyxJQUFJLFVBQVU7WUFBRSxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIEluamVjdGFibGUsXG4gIGxpbmtlZFNpZ25hbCxcbiAgU2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJlc29sdmVGbiB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBtdXRhYmxlLCB1bnRpbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xuaW1wb3J0IHsgaW5qZWN0TGVhZlJvdXRlcywgaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IGluamVjdFRpdGxlQ29uZmlnIH0gZnJvbSAnLi90aXRsZS5jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGl0bGVTdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGl0bGUgPSBpbmplY3QoVGl0bGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcCA9IG11dGFibGU8TWFwPHN0cmluZywgU2lnbmFsPHN0cmluZz4+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxlYWZSb3V0ZXMgPSBpbmplY3RMZWFmUm91dGVzKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmV2ZXJzZUxlYXZlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubGVhZlJvdXRlcygpLnRvUmV2ZXJzZWQoKSk7XG5cbiAgICBjb25zdCBjdXJyZW50UmVzb2x2ZWRUaXRsZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBtYXAgPSB0aGlzLm1hcCgpO1xuICAgICAgcmV0dXJuIHJldmVyc2VMZWF2ZXMoKVxuICAgICAgICAubWFwKChsZWFmKSA9PiBtYXAuZ2V0KGxlYWYucGF0aCk/LigpID8/IGxlYWYucm91dGUudGl0bGUpXG4gICAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiAhIXYpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY3VycmVudFRpdGxlID0gY29tcHV0ZWQoKCkgPT4gY3VycmVudFJlc29sdmVkVGl0bGVzKCkuYXQoMCkgPz8gJycpO1xuXG4gICAgY29uc3QgaGVsZFRpdGxlID0gaW5qZWN0VGl0bGVDb25maWcoKS5rZWVwTGFzdEtub3duXG4gICAgICA/IGxpbmtlZFNpZ25hbDxzdHJpbmcsIHN0cmluZz4oe1xuICAgICAgICAgIHNvdXJjZTogKCkgPT4gY3VycmVudFRpdGxlKCksXG4gICAgICAgICAgY29tcHV0YXRpb246ICh2YWx1ZSwgcHJldikgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHByZXY/LnZhbHVlID8/ICcnO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IGN1cnJlbnRUaXRsZTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnRpdGxlLnNldFRpdGxlKGhlbGRUaXRsZSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIHRpdGxlRm46IFNpZ25hbDxzdHJpbmc+KSB7XG4gICAgdGhpcy5tYXAuaW5saW5lKChtKSA9PiBtLnNldChpZCwgdGl0bGVGbikpO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYSB0aXRsZSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGluIEFuZ3VsYXIncyByb3V0ZXIuXG4gKlxuICogQHBhcmFtIGZuXG4gKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHN0cmluZyBvciBhIFNpZ25hbDxzdHJpbmc+IHJlcHJlc2VudGluZyB0aGUgdGl0bGUuXG4gKiBAcGFyYW0gYXdhaXRWYWx1ZVxuICogSWYgYHRydWVgLCB0aGUgcmVzb2x2ZXIgd2lsbCB3YWl0IHVudGlsIHRoZSB0aXRsZSBzaWduYWwgaGFzIGEgdmFsdWUgYmVmb3JlIHJlc29sdmluZy5cbiAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUaXRsZShcbiAgZm46ICgpID0+IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpLFxuICBhd2FpdFZhbHVlID0gZmFsc2UsXG4pOiBSZXNvbHZlRm48c3RyaW5nPiB7XG4gIHJldHVybiBhc3luYyAocm91dGUpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KFRpdGxlU3RvcmUpO1xuICAgIGNvbnN0IHJlc29sdmVyID0gaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIoKTtcbiAgICBjb25zdCBmcCA9IHJlc29sdmVyKHJvdXRlKTtcblxuICAgIGNvbnN0IHsgcGFyc2VyIH0gPSBpbmplY3RUaXRsZUNvbmZpZygpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWQgPSBmbigpO1xuXG4gICAgY29uc3QgdGl0bGVTaWduYWwgPVxuICAgICAgdHlwZW9mIHJlc29sdmVkID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGNvbXB1dGVkKCgpID0+IHJlc29sdmVkKVxuICAgICAgICA6IGNvbXB1dGVkKHJlc29sdmVkKTtcblxuICAgIGNvbnN0IHBhcnNlZFRpdGxlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gcGFyc2VyKHRpdGxlU2lnbmFsKCkpKTtcblxuICAgIHN0b3JlLnJlZ2lzdGVyKGZwLCBwYXJzZWRUaXRsZVNpZ25hbCk7XG5cbiAgICBpZiAoYXdhaXRWYWx1ZSkgYXdhaXQgdW50aWwocGFyc2VkVGl0bGVTaWduYWwsICh2KSA9PiAhIXYpO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bnRyYWNrZWQocGFyc2VkVGl0bGVTaWduYWwpKTtcbiAgfTtcbn1cbiJdfQ==","/**\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":["../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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFxQ3ZEOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQW1CLDJCQUEyQixDQUFDLENBQUM7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBaUM7SUFDdkUsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFO1lBQ1IsR0FBRyxNQUFNO1NBQ1Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPLENBQ0wsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUNaLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxJQUFJLEVBQUUsQ0FDVCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlc29sdmVkTGVhZlJvdXRlIH0gZnJvbSAnLi4vdXRpbCc7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjdXN0b20gbGFiZWwgZ2VuZXJhdGlvbiBmdW5jdGlvbi5cbiAqIFRoZSBvdXRlciBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gYSByb290IGluamVjdGlvbiBjb250ZXh0XG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gdGFrZXMgYSBgUmVzb2x2ZWRMZWFmUm91dGVgIGFuZCBwcm9kdWNlcyBhIHN0cmluZyBsYWJlbCBmb3IgdGhlIGJyZWFkY3J1bWIuXG4gKiBBcyB0aGUgaW5uZXIgZnVuY3Rpb24gaXMgd3JhcHBlZCBpbiBhIGNvbXB1dGVkLCBjaGFuZ2VzIHRvIHNpZ25hbHMgY2FsbGVkIHdpdGhpbiBpdCB3aWxsIHVwZGF0ZSB0aGUgYnJlYWRjcnVtYiBsYWJlbCByZWFjdGl2ZWx5LlxuICovXG50eXBlIEdlbmVyYXRlQnJlYWRjcnVtYkZuID0gKCkgPT4gKGxlYWY6IFJlc29sdmVkTGVhZlJvdXRlKSA9PiBzdHJpbmc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYnJlYWRjcnVtYiBzeXN0ZW0uXG4gKiBVc2UgYHByb3ZpZGVCcmVhZGNydW1iQ29uZmlnYCB0byBzdXBwbHkgdGhlc2Ugb3B0aW9ucyB0byB5b3VyIGFwcGxpY2F0aW9uLlxuICovXG5cbmV4cG9ydCB0eXBlIEJyZWFkY3J1bWJDb25maWcgPSB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGhvdyBicmVhZGNydW1iIGxhYmVscyBhcmUgZ2VuZXJhdGVkLlxuICAgKiAtIElmIHNldCB0byBgJ21hbnVhbCdgLCBicmVhZGNydW1icyB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIGlmIG1hbnVhbGx5IHJlZ2lzdGVyZWRcbiAgICogdmlhIGBjcmVhdGVCcmVhZGNydW1iYC4gQXV0b21hdGljIGdlbmVyYXRpb24gYmFzZWQgb24gcm91dGVzIGlzIGRpc2FibGVkLlxuICAgKiAtIEFsdGVybmF0aXZlbHkgcHJvdmlkZSBhIGN1c3RvbSBsYWJlbCBnZW5lcmF0aW9uIGZ1bmN0aW9uXG4gICAqIElmIGxlZnQgdW5kZWZpbmVkLCB0aGUgc3lzdGVtIHdpbGwgYXV0b21hdGljYWxseSBnZW5lcmF0ZSBsYWJlbHMgYmFzZWQgb24gdGhlIHJvdXRlJ3MgdGl0bGUsIGRhdGEsIG9yIHBhdGguXG4gICAqIEBzZWUgR2VuZXJhdGVCcmVhZGNydW1iRm5cbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBGb3IgY3VzdG9tIGxhYmVsIGdlbmVyYXRpb246XG4gICAqIC8vIGNvbnN0IG15Q3VzdG9tTGFiZWxHZW5lcmF0b3IgPSAoKSA9PiAobGVhZjogUmVzb2x2ZWRMZWFmUm91dGUpID0+IHtcbiAgICogLy8gICByZXR1cm4gbGVhZi5yb3V0ZS5kYXRhPy5bJ2N1c3RvbVRpdGxlJ10gfHwgbGVhZi5yb3V0ZS5yb3V0ZUNvbmZpZz8ucGF0aCB8fCAnRGVmYXVsdCc7XG4gICAqIC8vIH07XG4gICAqIC8vXG4gICAqIC8vIGNvbmZpZzogeyBnZW5lcmF0aW9uOiBteUN1c3RvbUxhYmVsR2VuZXJhdG9yIH1cbiAgICogYGBgXG4gICAqL1xuICBnZW5lcmF0aW9uPzogJ21hbnVhbCcgfCBHZW5lcmF0ZUJyZWFkY3J1bWJGbjtcbn07XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHRva2VuID0gbmV3IEluamVjdGlvblRva2VuPEJyZWFkY3J1bWJDb25maWc+KCdNTVNUQUNLX0JSRUFEQ1JVTUJfQ09ORklHJyk7XG5cbi8qKlxuICogUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGJyZWFkY3J1bWIgc3lzdGVtLlxuICogQHBhcmFtIGNvbmZpZyAtIEEgcGFydGlhbCBgQnJlYWRjcnVtYkNvbmZpZ2Agb2JqZWN0IHdpdGggdGhlIGRlc2lyZWQgc2V0dGluZ3MuICpcbiAqIEBzZWUgQnJlYWRjcnVtYkNvbmZpZ1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEluIHlvdXIgYXBwLm1vZHVsZS50cyBvciBhIHN0YW5kYWxvbmUgY29tcG9uZW50J3MgcHJvdmlkZXJzOlxuICogLy8gaW1wb3J0IHsgcHJvdmlkZUJyZWFkY3J1bWJDb25maWcgfSBmcm9tICcuL2JyZWFkY3J1bWIuY29uZmlnJzsgLy8gQWRqdXN0IHBhdGhcbiAqIC8vIGltcG9ydCB7IFJlc29sdmVkTGVhZlJvdXRlIH0gZnJvbSAnLi9icmVhZGNydW1iLnR5cGUnOyAvLyBBZGp1c3QgcGF0aFxuICpcbiAqIC8vIGNvbnN0IGN1c3RvbUxhYmVsU3RyYXRlZ3k6IEdlbmVyYXRlQnJlYWRjcnVtYkZuID0gKCkgPT4ge1xuICogLy8gICByZXR1cm4gKGxlYWY6IFJlc29sdmVkTGVhZlJvdXRlKTogc3RyaW5nID0+IHtcbiAqIC8vICAgICAvLyBFeGFtcGxlOiBQcmlvcml0aXplIGEgJ25hdlRpdGxlJyBkYXRhIHByb3BlcnR5XG4gKiAvLyAgICAgaWYgKGxlYWYucm91dGUuZGF0YT8uWyduYXZUaXRsZSddKSB7XG4gKiAvLyAgICAgICByZXR1cm4gbGVhZi5yb3V0ZS5kYXRhWyduYXZUaXRsZSddO1xuICogLy8gICAgIH1cbiAqIC8vICAgICAvLyBGYWxsYmFjayB0byBhIGRlZmF1bHQgbWVjaGFuaXNtXG4gKiAvLyAgICAgcmV0dXJuIGxlYWYucm91dGUudGl0bGUgfHwgbGVhZi5zZWdtZW50LnJlc29sdmVkIHx8ICdVbm5hbWVkJztcbiAqIC8vICAgfTtcbiAqIC8vIH07XG4gKlxuICogZXhwb3J0IGNvbnN0IGFwcENvbmZpZyA9IFtcbiAqICAvLyAuLi5yZXN0XG4gKiAgcHJvdmlkZUJyZWFkY3J1bWJDb25maWcoe1xuICogICBnZW5lcmF0aW9uOiBjdXN0b21MYWJlbFN0cmF0ZWd5LCAvLyBvciAnbWFudWFsJyB0byBkaXNhYmxlIGF1dG8tZ2VuZXJhdGlvblxuICogIH0pLFxuICogXVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQnJlYWRjcnVtYkNvbmZpZyhjb25maWc6IFBhcnRpYWw8QnJlYWRjcnVtYkNvbmZpZz4pIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiB0b2tlbixcbiAgICB1c2VWYWx1ZToge1xuICAgICAgLi4uY29uZmlnLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RCcmVhZGNydW1iQ29uZmlnKCk6IEJyZWFkY3J1bWJDb25maWcge1xuICByZXR1cm4gKFxuICAgIGluamVjdCh0b2tlbiwge1xuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSkgPz8ge31cbiAgKTtcbn1cbiJdfQ==","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.1.0\", ngImport: i0, type: RouteLeafStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: RouteLeafStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZi5zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvdXRpbC9sZWFmLnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBRUwsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFlN0IsU0FBUyxVQUFVO0lBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixNQUFNLGFBQWEsR0FBRyxDQUNwQixRQUE2QixFQUNSLEVBQUU7UUFDdkIsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLEtBQUssR0FBa0MsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRXBDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDNUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FDdkMsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRFLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDekIsU0FBUztZQUNYLENBQUM7WUFDRCxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZO2lCQUM3QixPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO2lCQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ2xCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVuQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkUsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixLQUFLO2dCQUNMLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtpQkFDN0I7Z0JBQ0QsSUFBSTtnQkFDSixJQUFJO2FBQ0wsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBRXpCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDL0IsVUFBVSxFQUFFLENBQUM7UUFDYixPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUMsc0RBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFLRCxNQUFNLE9BQU8sY0FBYztJQUNoQixNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7dUdBRHBCLGNBQWM7MkdBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQUtELE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0YWJsZSwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBSb3V0ZXIsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB1cmwgfSBmcm9tICcuLi91cmwnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgdHlwZSBSZXNvbHZlZExlYWZSb3V0ZSA9IHtcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIHNlZ21lbnQ6IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgcmVzb2x2ZWQ6IHN0cmluZztcbiAgfTtcbiAgcGF0aDogc3RyaW5nO1xuICBsaW5rOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsZWFmUm91dGVzKCk6IFNpZ25hbDxSZXNvbHZlZExlYWZSb3V0ZVtdPiB7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIGNvbnN0IGdldExlYWZSb3V0ZXMgPSAoXG4gICAgc25hcHNob3Q6IFJvdXRlclN0YXRlU25hcHNob3QsXG4gICk6IFJlc29sdmVkTGVhZlJvdXRlW10gPT4ge1xuICAgIGNvbnN0IHJvdXRlczogUmVzb2x2ZWRMZWFmUm91dGVbXSA9IFtdO1xuICAgIGxldCByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwgPSBzbmFwc2hvdC5yb290O1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgd2hpbGUgKHJvdXRlKSB7XG4gICAgICBjb25zdCBhbGxTZWdtZW50cyA9IHJvdXRlLnBhdGhGcm9tUm9vdC5mbGF0TWFwKFxuICAgICAgICAoc25hcCkgPT4gc25hcC5yb3V0ZUNvbmZpZz8ucGF0aCA/PyBbXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYWxsU2VnbWVudHMuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICBjb25zdCBwYXRoID0gcm91dGVyLnNlcmlhbGl6ZVVybChyb3V0ZXIucGFyc2VVcmwoc2VnbWVudHMuam9pbignLycpKSk7XG5cbiAgICAgIGlmIChwcm9jZXNzZWQuaGFzKHBhdGgpKSB7XG4gICAgICAgIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBwcm9jZXNzZWQuYWRkKHBhdGgpO1xuXG4gICAgICBjb25zdCBwYXJ0cyA9IHJvdXRlLnBhdGhGcm9tUm9vdFxuICAgICAgICAuZmxhdE1hcCgoc25hcCkgPT4gc25hcC51cmwgPz8gW10pXG4gICAgICAgIC5tYXAoKHUpID0+IHUucGF0aClcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgY29uc3QgbGluayA9IHJvdXRlci5zZXJpYWxpemVVcmwocm91dGVyLnBhcnNlVXJsKHBhcnRzLmpvaW4oJy8nKSkpO1xuXG4gICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgIHJvdXRlLFxuICAgICAgICBzZWdtZW50OiB7XG4gICAgICAgICAgcGF0aDogc2VnbWVudHMuYXQoLTEpID8/ICcnLFxuICAgICAgICAgIHJlc29sdmVkOiBwYXJ0cy5hdCgtMSkgPz8gJycsXG4gICAgICAgIH0sXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGxpbmssXG4gICAgICB9KTtcbiAgICAgIHJvdXRlID0gcm91dGUuZmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcm91dGVzO1xuICB9O1xuXG4gIGNvbnN0IGN1cnJlbnRVcmwgPSB1cmwoKTtcblxuICBjb25zdCBsZWFmUm91dGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGN1cnJlbnRVcmwoKTtcbiAgICByZXR1cm4gZ2V0TGVhZlJvdXRlcyhyb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QpO1xuICB9KTtcblxuICByZXR1cm4gbGVhZlJvdXRlcztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlTGVhZlN0b3JlIHtcbiAgcmVhZG9ubHkgbGVhdmVzID0gbGVhZlJvdXRlcygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0TGVhZlJvdXRlcygpIHtcbiAgY29uc3Qgc3RvcmUgPSBpbmplY3QoUm91dGVMZWFmU3RvcmUpO1xuICByZXR1cm4gc3RvcmUubGVhdmVzO1xufVxuIl19","/**\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQThCQTs7R0FFRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBWTdFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFVBQThCO0lBQ25FLE9BQVEsVUFBaUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsRUFBYyxFQUNkLE1BQXVCLEVBQ3ZCLFVBQVUsR0FBRyxJQUFJO0lBRWpCLE9BQU87UUFDTCxHQUFHLEVBQUU7UUFDTCxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDNUIsTUFBTTtZQUNOLFVBQVU7U0FDWDtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFVBQTJDO0lBRTNDLE9BQU8sQ0FBQyxDQUFFLFVBQWlDLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUMxRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGJyZWFkY3J1bWIgaXRlbSB3aXRoaW4gdGhlIG5hdmlnYXRpb24gcGF0aC5cbiAqIEFsbCBkeW5hbWljIHByb3BlcnRpZXMgYXJlIHJlcHJlc2VudGVkIGFzIEFuZ3VsYXIgU2lnbmFscyB0byBlbmFibGUgcmVhY3Rpdml0eS5cbiAqL1xuZXhwb3J0IHR5cGUgQnJlYWRjcnVtYiA9IHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0uIEdlbmVyYWxseSB0aGUgdW5yZXNvbHZlZCBwYXRoIGZvciBleGFtcGxlIGAvcG9zdHMvOmlkYC5cbiAgICogVXNlZnVsIGZvciBgQGZvcmAgdHJhY2tpbmcgaW4gdGVtcGxhdGVzLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB2aXNpYmxlIHRleHQgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0uXG4gICAqIFVwZGF0ZWQgcmVhY3RpdmVseSBhcyB0aGUgdXJsL2xpbmsgYmFzZWQgb25cbiAgICogZWl0aGVyIGEgcHJvdmlkZWQgZGVmaW5pdGlvbiwgb3IgdGhlIGN1cnJlbnQgcm91dGUuXG4gICAqL1xuICBsYWJlbDogU2lnbmFsPHN0cmluZz47XG4gIC8qKlxuICAgKiBBbiBhY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgYnJlYWRjcnVtYiBpdGVtLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc2FtZSB2YWx1ZSBhcyBgbGFiZWxgIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIGFyaWFMYWJlbDogU2lnbmFsPHN0cmluZz47XG4gIC8qKlxuICAgKiBUaGUgVVJMIGxpbmsgZm9yIHRoZSBicmVhZGNydW1iIGl0ZW0uXG4gICAqIFVwZGF0ZXMgYXMgdGhlIHJvdXRlIGNoYW5nZXMuXG4gICAqL1xuICBsaW5rOiBTaWduYWw8c3RyaW5nPjtcbn07XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IElOVEVSTkFMX0JSRUFEQ1JVTUJfU1lNQk9MID0gU3ltYm9sLmZvcignTU1TVEFDS19JTlRFUk5BTF9CUkVBRENSVU1CJyk7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCB0eXBlIEludGVybmFsQnJlYWRjcnVtYiA9IEJyZWFkY3J1bWIgJiB7XG4gIFtJTlRFUk5BTF9CUkVBRENSVU1CX1NZTUJPTF06IHtcbiAgICBhY3RpdmU6IFNpZ25hbDxib29sZWFuPjtcbiAgICByZWdpc3RlcmVkOiBib29sZWFuO1xuICB9O1xufTtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFkY3J1bWJJbnRlcm5hbHMoYnJlYWRjcnVtYjogSW50ZXJuYWxCcmVhZGNydW1iKSB7XG4gIHJldHVybiAoYnJlYWRjcnVtYiBhcyBJbnRlcm5hbEJyZWFkY3J1bWIpW0lOVEVSTkFMX0JSRUFEQ1JVTUJfU1lNQk9MXTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUludGVybmFsQnJlYWRjcnVtYihcbiAgYmM6IEJyZWFkY3J1bWIsXG4gIGFjdGl2ZTogU2lnbmFsPGJvb2xlYW4+LFxuICByZWdpc3RlcmVkID0gdHJ1ZSxcbik6IEludGVybmFsQnJlYWRjcnVtYiB7XG4gIHJldHVybiB7XG4gICAgLi4uYmMsXG4gICAgW0lOVEVSTkFMX0JSRUFEQ1JVTUJfU1lNQk9MXToge1xuICAgICAgYWN0aXZlLFxuICAgICAgcmVnaXN0ZXJlZCxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcm5hbEJyZWFkY3J1bWIoXG4gIGJyZWFkY3J1bWI6IEJyZWFkY3J1bWIgfCBJbnRlcm5hbEJyZWFkY3J1bWIsXG4pOiBicmVhZGNydW1iIGlzIEludGVybmFsQnJlYWRjcnVtYiB7XG4gIHJldHVybiAhIShicmVhZGNydW1iIGFzIEludGVybmFsQnJlYWRjcnVtYilbSU5URVJOQUxfQlJFQURDUlVNQl9TWU1CT0xdO1xufVxuIl19","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.1.0\", ngImport: i0, type: BreadcrumbStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: BreadcrumbStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", 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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Q25COztBQW9ERDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgaW5qZWN0LCBJbmplY3RhYmxlLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcEFycmF5LCBtdXRhYmxlIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XG5pbXBvcnQgeyBpbmplY3RMZWFmUm91dGVzLCBSZXNvbHZlZExlYWZSb3V0ZSB9IGZyb20gJy4uL3V0aWwvbGVhZi5zdG9yZSc7XG5pbXBvcnQge1xuICBCcmVhZGNydW1iLFxuICBjcmVhdGVJbnRlcm5hbEJyZWFkY3J1bWIsXG4gIGdldEJyZWFkY3J1bWJJbnRlcm5hbHMsXG4gIEludGVybmFsQnJlYWRjcnVtYixcbiAgaXNJbnRlcm5hbEJyZWFkY3J1bWIsXG59IGZyb20gJy4vYnJlYWRjcnVtYic7XG5pbXBvcnQgeyBpbmplY3RCcmVhZGNydW1iQ29uZmlnIH0gZnJvbSAnLi9icmVhZGNydW1iLWNvbmZpZyc7XG5cbmZ1bmN0aW9uIHVwcGVyY2FzZUZpcnN0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbGNzID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBsY3MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsY3Muc2xpY2UoMSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1hdHJpeEFuZFF1ZXJ5UGFyYW1zKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IFtjbGVhblBhdGhdID0gcGF0aC5zcGxpdCgnOycpO1xuICByZXR1cm4gY2xlYW5QYXRoLnNwbGl0KCc/JylbMF07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aFNlZ21lbnQocGF0aFNlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoU2VnbWVudFxuICAgIC5zcGxpdCgnLycpXG4gICAgLmZsYXRNYXAoKHBhcnQpID0+IHBhcnQuc3BsaXQoJy4nKSlcbiAgICAuZmxhdE1hcCgocGFydCkgPT4gcGFydC5zcGxpdCgnLScpKVxuICAgIC5tYXAoKHBhcnQpID0+IHVwcGVyY2FzZUZpcnN0KHJlbW92ZU1hdHJpeEFuZFF1ZXJ5UGFyYW1zKHBhcnQpKSlcbiAgICAuam9pbignICcpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUxhYmVsKGxlYWY6IFJlc29sdmVkTGVhZlJvdXRlKTogc3RyaW5nIHtcbiAgY29uc3QgdGl0bGUgPSBsZWFmLnJvdXRlLnRpdGxlID8/IGxlYWYucm91dGUuZGF0YT8uWyd0aXRsZSddO1xuXG4gIGlmICh0aXRsZSAmJiB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnKSByZXR1cm4gdGl0bGU7XG4gIGlmIChsZWFmLnNlZ21lbnQucGF0aC5pbmNsdWRlcygnOicpKSByZXR1cm4gbGVhZi5zZWdtZW50LnJlc29sdmVkO1xuXG4gIHJldHVybiBwYXJzZVBhdGhTZWdtZW50KGxlYWYuc2VnbWVudC5wYXRoKTtcbn1cblxuZnVuY3Rpb24gYXV0b0dlbmVyYXRlQnJlYWRjcnVtYihcbiAgaWQ6IHN0cmluZyxcbiAgbGVhZjogU2lnbmFsPFJlc29sdmVkTGVhZlJvdXRlPixcbiAgYXV0b0dlbmVyYXRlRm46IFNpZ25hbDwobGVhZjogUmVzb2x2ZWRMZWFmUm91dGUpID0+IHN0cmluZz4sXG4pOiBCcmVhZGNydW1iIHtcbiAgY29uc3QgbGFiZWwgPSBjb21wdXRlZCgoKSA9PiBhdXRvR2VuZXJhdGVGbigpKGxlYWYoKSkpO1xuXG4gIHJldHVybiBjcmVhdGVJbnRlcm5hbEJyZWFkY3J1bWIoXG4gICAge1xuICAgICAgaWQsXG4gICAgICBsYWJlbCxcbiAgICAgIGFyaWFMYWJlbDogbGFiZWwsXG4gICAgICBsaW5rOiBjb21wdXRlZCgoKSA9PiBsZWFmKCkubGluayksXG4gICAgfSxcbiAgICBjb21wdXRlZChcbiAgICAgICgpID0+XG4gICAgICAgIGxlYWYoKS5yb3V0ZS5kYXRhPy5bJ3NraXBCcmVhZGNydW1iJ10gIT09IHRydWUgJiZcbiAgICAgICAgaWQgIT09ICcnICYmXG4gICAgICAgIGlkICE9PSAnLycgJiZcbiAgICAgICAgbGVhZigpLnNlZ21lbnQucGF0aCAhPT0gJycgJiZcbiAgICAgICAgbGVhZigpLnNlZ21lbnQucGF0aCAhPT0gJy8nICYmXG4gICAgICAgICFsZWFmKCkuc2VnbWVudC5wYXRoLmVuZHNXaXRoKCcvJykgJiZcbiAgICAgICAgISFsYWJlbCgpLFxuICAgICksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGluamVjdEdlbmVyYXRlTGFiZWxGbigpIHtcbiAgY29uc3QgeyBnZW5lcmF0aW9uIH0gPSBpbmplY3RCcmVhZGNydW1iQ29uZmlnKCk7XG5cbiAgaWYgKHR5cGVvZiBnZW5lcmF0aW9uICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gY29tcHV0ZWQoKCkgPT4gZ2VuZXJhdGVMYWJlbCk7XG5cbiAgY29uc3QgcHJvdmlkZWQgPSBnZW5lcmF0aW9uKCk7XG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiBwcm92aWRlZCk7XG59XG5cbmZ1bmN0aW9uIGluamVjdElzTWFudWFsKCkge1xuICByZXR1cm4gaW5qZWN0QnJlYWRjcnVtYkNvbmZpZygpLmdlbmVyYXRpb24gPT09ICdtYW51YWwnO1xufVxuXG5mdW5jdGlvbiBleHBvc2VBY3RpdmVTaWduYWwoXG4gIGNydW1iU2lnbmFsOiBTaWduYWw8QnJlYWRjcnVtYj4sXG4gIG1hbnVhbDogYm9vbGVhbixcbik6IFNpZ25hbDxCcmVhZGNydW1iPiAmIHtcbiAgYWN0aXZlOiBTaWduYWw8Ym9vbGVhbj47XG59IHtcbiAgY29uc3QgYWN0aXZlID0gbWFudWFsXG4gICAgPyBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNydW1iID0gY3J1bWJTaWduYWwoKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGlzSW50ZXJuYWxCcmVhZGNydW1iKGNydW1iKSAmJlxuICAgICAgICAgIGdldEJyZWFkY3J1bWJJbnRlcm5hbHMoY3J1bWIpLnJlZ2lzdGVyZWQgJiZcbiAgICAgICAgICBnZXRCcmVhZGNydW1iSW50ZXJuYWxzKGNydW1iKS5hY3RpdmUoKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICA6IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY3J1bWIgPSBjcnVtYlNpZ25hbCgpO1xuICAgICAgICBpZiAoIWlzSW50ZXJuYWxCcmVhZGNydW1iKGNydW1iKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBnZXRCcmVhZGNydW1iSW50ZXJuYWxzKGNydW1iKS5hY3RpdmUoKTtcbiAgICAgIH0pO1xuXG4gIGNvbnN0IHNpZyA9IGNydW1iU2lnbmFsIGFzIFNpZ25hbDxCcmVhZGNydW1iPiAmIHtcbiAgICBhY3RpdmU6IFNpZ25hbDxib29sZWFuPjtcbiAgfTtcblxuICBzaWcuYWN0aXZlID0gYWN0aXZlO1xuXG4gIHJldHVybiBzaWc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1iU3RvcmUge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcCA9IG11dGFibGU8TWFwPHN0cmluZywgSW50ZXJuYWxCcmVhZGNydW1iPj4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc01hbnVhbCA9IGluamVjdElzTWFudWFsKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b0dlbmVyYXRlTGFiZWxGbiA9IGluamVjdEdlbmVyYXRlTGFiZWxGbigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxlYWZSb3V0ZXMgPSBpbmplY3RMZWFmUm91dGVzKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbGwgPSBtYXBBcnJheShcbiAgICB0aGlzLmxlYWZSb3V0ZXMsXG4gICAgKGxlYWYpID0+IHtcbiAgICAgIGNvbnN0IHN0YWJsZUlkID0gY29tcHV0ZWQoKCkgPT4gbGVhZigpLnBhdGgpO1xuXG4gICAgICByZXR1cm4gZXhwb3NlQWN0aXZlU2lnbmFsKFxuICAgICAgICBjb21wdXRlZChcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHN0YWJsZUlkKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5tYXAoKS5nZXQoaWQpO1xuXG4gICAgICAgICAgICBpZiAoIWZvdW5kKVxuICAgICAgICAgICAgICByZXR1cm4gYXV0b0dlbmVyYXRlQnJlYWRjcnVtYihpZCwgbGVhZiwgdGhpcy5hdXRvR2VuZXJhdGVMYWJlbEZuKTtcblxuICAgICAgICAgICAgaWYgKCFpZC5pbmNsdWRlcygnOicpKSByZXR1cm4gZm91bmQ7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZvdW5kLFxuICAgICAgICAgICAgICBsaW5rOiBjb21wdXRlZCgoKSA9PiBsZWFmKCkubGluayksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXF1YWw6IChhLCBiKSA9PiBhLmlkID09PSBiLmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuaXNNYW51YWwsXG4gICAgICApO1xuICAgIH0sXG4gICAge1xuICAgICAgZXF1YWw6IChhLCBiKSA9PiBhLmxpbmsgPT09IGIubGluayxcbiAgICB9LFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY3J1bWJzID0gY29tcHV0ZWQoKCk6IFNpZ25hbDxCcmVhZGNydW1iPltdID0+XG4gICAgdGhpcy5hbGwoKS5maWx0ZXIoKGMpID0+IGMuYWN0aXZlKCkpLFxuICApO1xuXG4gIHJlYWRvbmx5IHVud3JhcHBlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3J1bWJzKCkubWFwKChjKSA9PiBjKCkpKTtcblxuICByZWdpc3RlcihicmVhZGNydW1iOiBJbnRlcm5hbEJyZWFkY3J1bWIpIHtcbiAgICB0aGlzLm1hcC5pbmxpbmUoKG0pID0+IG0uc2V0KGJyZWFkY3J1bWIuaWQsIGJyZWFkY3J1bWIpKTtcbiAgfVxufVxuXG4vKipcbiAqIEluamVjdHMgYW5kIHByb3ZpZGVzIGFjY2VzcyB0byBhIHJlYWN0aXZlIGxpc3Qgb2YgYnJlYWRjcnVtYnMuXG4gKlxuICogVGhlIGJyZWFkY3J1bWJzIGFyZSBvcmRlcmVkIGFuZCByZWZsZWN0IHRoZSBjdXJyZW50IGFjdGl2ZSBuYXZpZ2F0aW9uIHBhdGguXG4gKiBAc2VlIEJyZWFkY3J1bWJcbiAqIEByZXR1cm5zIGBTaWduYWw8QnJlYWRjcnVtYltdPmBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ2FwcC1icmVhZGNydW1icycsXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxuYXYgYXJpYS1sYWJlbD1cImJyZWFkY3J1bWJcIj5cbiAqICAgIDxvbD5cbiAqICAgICAgQGZvciAoY3J1bWIgb2YgYnJlYWRjcnVtYnMoKTsgdHJhY2sgY3J1bWIuaWQpIHtcbiAqICAgICAgICA8bGk+XG4gKiAgICAgICAgICA8YSBbaHJlZl09XCJjcnVtYi5saW5rKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImNydW1iLmFyaWFMYWJlbCgpXCI+e3sgY3J1bWIubGFiZWwoKSB9fTwvYT5cbiAqICAgICAgICA8L2xpPlxuICogICAgICB9XG4gKiAgICA8L29sPlxuICogIDwvbmF2PlxuICogYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBNeUJyZWFkY3J1bWJzQ29tcG9uZW50IHtcbiAqICBicmVhZGNydW1icyA9IGluamVjdEJyZWFkY3J1bWJzKCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEJyZWFkY3J1bWJzKCkge1xuICBjb25zdCBzdG9yZSA9IGluamVjdChCcmVhZGNydW1iU3RvcmUpO1xuICByZXR1cm4gc3RvcmUudW53cmFwcGVkO1xufVxuIl19","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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Q0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN6QixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFL0MsT0FBTyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxJQUFZO0lBRVosT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gcGFyc2VQYXRoU2VnbWVudChzZWdtZW50U3RyaW5nOiBzdHJpbmcpOiB7XG4gIHBhdGhQYXJ0OiBzdHJpbmc7XG4gIG1hdHJpeFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn0ge1xuICBjb25zdCBwYXJ0cyA9IHNlZ21lbnRTdHJpbmcuc3BsaXQoJzsnKTtcbiAgY29uc3QgcGF0aFBhcnQgPSBwYXJ0c1swXTtcbiAgY29uc3QgbWF0cml4UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZSA9ICd0cnVlJ10gPSBwYXJ0c1tpXS5zcGxpdCgnPScpO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIG1hdHJpeFBhcmFtc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IHBhdGhQYXJ0LCBtYXRyaXhQYXJhbXMgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVByZWRpY2F0ZShwYXRoOiBzdHJpbmcpOiAocGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgY29uc3QgcGFydFByZWRpY2F0ZXMgPSBwYXRoXG4gICAgLnNwbGl0KCcvJylcbiAgICAuZmlsdGVyKChwYXJ0KSA9PiAhIXBhcnQudHJpbSgpKVxuICAgIC5tYXAoKGNvbmZpZ1NlZ21lbnRTdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgcGF0aFBhcnQ6IGNvbmZpZ1BhdGhQYXJ0LCBtYXRyaXhQYXJhbXM6IGNvbmZpZ01hdHJpeFBhcmFtcyB9ID1cbiAgICAgICAgcGFyc2VQYXRoU2VnbWVudChjb25maWdTZWdtZW50U3RyaW5nKTtcblxuICAgICAgbGV0IHNpbmdsZVBhdGhQYXJ0UHJlZGljYXRlOiAobGlua1NlZ21lbnRQYXRoUGFydDogc3RyaW5nKSA9PiBib29sZWFuO1xuICAgICAgaWYgKGNvbmZpZ1BhdGhQYXJ0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICBzaW5nbGVQYXRoUGFydFByZWRpY2F0ZSA9ICgpID0+IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaW5nbGVQYXRoUGFydFByZWRpY2F0ZSA9IChsaW5rU2VnbWVudFBhdGhQYXJ0OiBzdHJpbmcpID0+XG4gICAgICAgICAgbGlua1NlZ21lbnRQYXRoUGFydCA9PT0gY29uZmlnUGF0aFBhcnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmZpZ1NlZ21lbnRIYXNNYXRyaXhQYXJhbXMgPVxuICAgICAgICBPYmplY3Qua2V5cyhjb25maWdNYXRyaXhQYXJhbXMpLmxlbmd0aCA+IDA7XG5cbiAgICAgIHJldHVybiAobGlua1NlZ21lbnRTdHJpbmc6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB7IHBhdGhQYXJ0OiBsaW5rUGF0aFBhcnQsIG1hdHJpeFBhcmFtczogbGlua01hdHJpeFBhcmFtcyB9ID1cbiAgICAgICAgICBwYXJzZVBhdGhTZWdtZW50KGxpbmtTZWdtZW50U3RyaW5nKTtcblxuICAgICAgICBpZiAoIXNpbmdsZVBhdGhQYXJ0UHJlZGljYXRlKGxpbmtQYXRoUGFydCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbmZpZ1NlZ21lbnRIYXNNYXRyaXhQYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjb25maWdNYXRyaXhQYXJhbXMpLmV2ZXJ5KFxuICAgICAgICAgIChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGlua01hdHJpeFBhcmFtcywga2V5KSAmJlxuICAgICAgICAgICAgbGlua01hdHJpeFBhcmFtc1trZXldID09PSB2YWx1ZSxcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgcmV0dXJuIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBsaW5rUGF0aE9ubHkgPSBwYXRoLnNwbGl0KC9bPyNdLykuYXQoMCkgPz8gJyc7XG4gICAgaWYgKCFsaW5rUGF0aE9ubHkgJiYgcGFydFByZWRpY2F0ZXMubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghbGlua1BhdGhPbmx5ICYmIHBhcnRQcmVkaWNhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBwYXJ0cyA9IGxpbmtQYXRoT25seS5zcGxpdCgnLycpLmZpbHRlcigocGFydCkgPT4gISFwYXJ0LnRyaW0oKSk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IHBhcnRQcmVkaWNhdGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHBhcnRzLmV2ZXJ5KChzZWcsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgcHJlZCA9IHBhcnRQcmVkaWNhdGVzLmF0KGlkeCk7XG4gICAgICBpZiAoIXByZWQpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIHByZWQoc2VnKTtcbiAgICB9KTtcbiAgfTtcbn1cblxudHlwZSBQYXJzZWRTZWdtZW50ID0ge1xuICBwYXRoUGFydDogc3RyaW5nO1xuICBtYXRyaXhQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5mdW5jdGlvbiBzaW5nbGVTZWdtZW50TWF0Y2hlcyhcbiAgY29uZmlnU2VnbWVudDogUGFyc2VkU2VnbWVudCxcbiAgbGlua1NlZ21lbnQ6IFBhcnNlZFNlZ21lbnQsXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbmZpZ1NlZ21lbnQucGF0aFBhcnQgPT09ICc6Jykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGNvbmZpZ1NlZ21lbnQucGF0aFBhcnQgIT09IGxpbmtTZWdtZW50LnBhdGhQYXJ0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29uZmlnTWF0cml4ID0gY29uZmlnU2VnbWVudC5tYXRyaXhQYXJhbXM7XG4gIGNvbnN0IGxpbmtNYXRyaXggPSBsaW5rU2VnbWVudC5tYXRyaXhQYXJhbXM7XG4gIGZvciAoY29uc3Qga2V5IGluIGNvbmZpZ01hdHJpeCkge1xuICAgIGlmIChcbiAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGlua01hdHJpeCwga2V5KSB8fFxuICAgICAgbGlua01hdHJpeFtrZXldICE9PSBjb25maWdNYXRyaXhba2V5XVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShcbiAgY29uZmlnU2VnbWVudHM6IFBhcnNlZFNlZ21lbnRbXSxcbiAgbGlua1NlZ21lbnRzOiBQYXJzZWRTZWdtZW50W10sXG4gIGNvbmZpZ0lkeDogbnVtYmVyLFxuICBsaW5rSWR4OiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbmZpZ0lkeCA9PT0gY29uZmlnU2VnbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGxpbmtJZHggPT09IGxpbmtTZWdtZW50cy5sZW5ndGg7XG4gIH1cblxuICBpZiAobGlua0lkeCA9PT0gbGlua1NlZ21lbnRzLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSBjb25maWdJZHg7IGkgPCBjb25maWdTZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNvbmZpZ1NlZ21lbnRzW2ldLnBhdGhQYXJ0ICE9PSAnKionKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBjdXJyZW50Q29uZmlnU2VnbWVudCA9IGNvbmZpZ1NlZ21lbnRzW2NvbmZpZ0lkeF07XG5cbiAgaWYgKGN1cnJlbnRDb25maWdTZWdtZW50LnBhdGhQYXJ0ID09PSAnKionKSB7XG4gICAgaWYgKFxuICAgICAgbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShcbiAgICAgICAgY29uZmlnU2VnbWVudHMsXG4gICAgICAgIGxpbmtTZWdtZW50cyxcbiAgICAgICAgY29uZmlnSWR4ICsgMSxcbiAgICAgICAgbGlua0lkeCxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsaW5rSWR4IDwgbGlua1NlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgaWYgKFxuICAgICAgICBtYXRjaFNlZ21lbnRzUmVjdXJzaXZlKFxuICAgICAgICAgIGNvbmZpZ1NlZ21lbnRzLFxuICAgICAgICAgIGxpbmtTZWdtZW50cyxcbiAgICAgICAgICBjb25maWdJZHgsXG4gICAgICAgICAgbGlua0lkeCArIDEsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFxuICAgICAgbGlua0lkeCA8IGxpbmtTZWdtZW50cy5sZW5ndGggJiZcbiAgICAgIHNpbmdsZVNlZ21lbnRNYXRjaGVzKGN1cnJlbnRDb25maWdTZWdtZW50LCBsaW5rU2VnbWVudHNbbGlua0lkeF0pXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWF0Y2hTZWdtZW50c1JlY3Vyc2l2ZShcbiAgICAgICAgY29uZmlnU2VnbWVudHMsXG4gICAgICAgIGxpbmtTZWdtZW50cyxcbiAgICAgICAgY29uZmlnSWR4ICsgMSxcbiAgICAgICAgbGlua0lkeCArIDEsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVXaWxkY2FyZFByZWRpY2F0ZShwYXRoOiBzdHJpbmcpOiAobGlua1BhdGg6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIGNvbnN0IGNvbmZpZ1NlZ21lbnRzID0gcGF0aFxuICAgIC5zcGxpdCgnLycpXG4gICAgLmZpbHRlcigocCkgPT4gISFwLnRyaW0oKSlcbiAgICAubWFwKChzZWdtZW50KSA9PiBwYXJzZVBhdGhTZWdtZW50KHNlZ21lbnQpKTtcblxuICByZXR1cm4gKGxpbmtQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBsaW5rUGF0aE9ubHkgPSBsaW5rUGF0aC5zcGxpdCgvWz8jXS8pLmF0KDApID8/ICcnO1xuICAgIGNvbnN0IGxpbmtTZWdtZW50cyA9IGxpbmtQYXRoT25seVxuICAgICAgLnNwbGl0KCcvJylcbiAgICAgIC5maWx0ZXIoKHApID0+ICEhcC50cmltKCkpXG4gICAgICAubWFwKChzZWdtZW50KSA9PiBwYXJzZVBhdGhTZWdtZW50KHNlZ21lbnQpKTtcblxuICAgIHJldHVybiBtYXRjaFNlZ21lbnRzUmVjdXJzaXZlKGNvbmZpZ1NlZ21lbnRzLCBsaW5rU2VnbWVudHMsIDAsIDApO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVQcmVkaWNhdGUoXG4gIHBhdGg6IHN0cmluZyxcbik6IChsaW5rUGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgcmV0dXJuIHBhdGguaW5jbHVkZXMoJyoqJylcbiAgICA/IGNyZWF0ZVdpbGRjYXJkUHJlZGljYXRlKHBhdGgpXG4gICAgOiBjcmVhdGVCYXNlUHJlZGljYXRlKHBhdGgpO1xufVxuIl19","// 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi91dGlsL2ZpbmQtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsNkNBQTZDO0FBQzdDLCtFQUErRTtBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsU0FBUyxjQUFjLENBQUMsS0FBWTtJQUNsQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBZSxFQUFFLEtBQVksRUFBVSxFQUFFO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztJQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBUyxDQUFDO0lBRWpDLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixTQUFTO1FBQ1gsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFaEIsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakIsTUFBTTtRQUNSLENBQUM7UUFFRCxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBaUIsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFJLEVBQVUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFnQixFQUFFLEVBQUU7Z0JBQ3RDLElBQUksU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN6QyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDMUIsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxJQUFJLFlBQVksR0FBc0IsS0FBSyxDQUFDO0lBRTVDLE9BQU8sWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEdBQUcsSUFBSSxXQUFXLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLEdBQUcsS0FBSyxZQUFZLENBQUMsTUFBTSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRWxELElBQUksY0FBYyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0QsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBhZGFwdGVkIGZyb20gbmd4LXF1aWNrbGluayxcbi8vIChodHRwczovL2dpdGh1Yi5jb20vbWdlY2hldi9uZ3gtcXVpY2tsaW5rKVxuLy8gQ29weXJpZ2h0IChjKSBNaW5rbyBHZWNoZXYgYW5kIGNvbnRyaWJ1dG9ycywgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuXG5pbXBvcnQgeyBQUklNQVJZX09VVExFVCwgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5mdW5jdGlvbiBpc1ByaW1hcnlSb3V0ZShyb3V0ZTogUm91dGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJvdXRlLm91dGxldCA9PT0gUFJJTUFSWV9PVVRMRVQgfHwgIXJvdXRlLm91dGxldDtcbn1cblxuZXhwb3J0IGNvbnN0IGZpbmRQYXRoID0gKGNvbmZpZzogUm91dGVbXSwgcm91dGU6IFJvdXRlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY29uZmlnUXVldWUgPSBjb25maWcuc2xpY2UoKTtcbiAgY29uc3QgcGFyZW50ID0gbmV3IE1hcDxSb3V0ZSwgUm91dGU+KCk7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PFJvdXRlPigpO1xuXG4gIHdoaWxlIChjb25maWdRdWV1ZS5sZW5ndGgpIHtcbiAgICBjb25zdCBlbCA9IGNvbmZpZ1F1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKCFlbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmlzaXRlZC5hZGQoZWwpO1xuXG4gICAgaWYgKGVsID09PSByb3V0ZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgKGVsLmNoaWxkcmVuIHx8IFtdKS5mb3JFYWNoKChjaGlsZFJvdXRlOiBSb3V0ZSkgPT4ge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhjaGlsZFJvdXRlKSkge1xuICAgICAgICBwYXJlbnQuc2V0KGNoaWxkUm91dGUsIGVsKTtcbiAgICAgICAgY29uZmlnUXVldWUucHVzaChjaGlsZFJvdXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGxhenlSb3V0ZXMgPSAoZWwgYXMgYW55KS5fbG9hZGVkUm91dGVzIHx8IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxhenlSb3V0ZXMpKSB7XG4gICAgICBsYXp5Um91dGVzLmZvckVhY2goKGxhenlSb3V0ZTogUm91dGUpID0+IHtcbiAgICAgICAgaWYgKGxhenlSb3V0ZSAmJiAhdmlzaXRlZC5oYXMobGF6eVJvdXRlKSkge1xuICAgICAgICAgIHBhcmVudC5zZXQobGF6eVJvdXRlLCBlbCk7XG4gICAgICAgICAgY29uZmlnUXVldWUucHVzaChsYXp5Um91dGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgcGF0aCA9ICcnO1xuICBsZXQgY3VycmVudFJvdXRlOiBSb3V0ZSB8IHVuZGVmaW5lZCA9IHJvdXRlO1xuXG4gIHdoaWxlIChjdXJyZW50Um91dGUpIHtcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IGN1cnJlbnRSb3V0ZS5wYXRoIHx8ICcnO1xuICAgIGlmIChpc1ByaW1hcnlSb3V0ZShjdXJyZW50Um91dGUpKSB7XG4gICAgICBwYXRoID0gYC8ke2N1cnJlbnRQYXRofSR7cGF0aH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoID0gYC8oJHtjdXJyZW50Um91dGUub3V0bGV0fToke2N1cnJlbnRQYXRofSkke3BhdGh9YDtcbiAgICB9XG4gICAgY3VycmVudFJvdXRlID0gcGFyZW50LmdldChjdXJyZW50Um91dGUpO1xuICB9XG5cbiAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5yZXBsYWNlQWxsKC9cXC8rL2csICcvJyk7XG5cbiAgaWYgKG5vcm1hbGl6ZWRQYXRoICE9PSAnLycgJiYgbm9ybWFsaXplZFBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguc2xpY2UoMCwgLTEpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoO1xufTtcbiJdfQ==","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvdXRpbC9zbmFwc2hvdC1wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUEwQixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRSxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixPQUFPLENBQUMsS0FBNkIsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN6QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUN2QyxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIoKSB7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHJldHVybiAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpID0+IHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHJvdXRlLnBhdGhGcm9tUm9vdC5mbGF0TWFwKFxuICAgICAgKHNuYXApID0+IHNuYXAucm91dGVDb25maWc/LnBhdGggPz8gW10sXG4gICAgKTtcblxuICAgIGNvbnN0IGpvaW5lZFNlZ21lbnRzID0gc2VnbWVudHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiByb3V0ZXIuc2VyaWFsaXplVXJsKHJvdXRlci5wYXJzZVVybChqb2luZWRTZWdtZW50cykpO1xuICB9O1xufVxuIl19","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvYnJlYWRjcnVtYi9icmVhZGNydW1iLXJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBd0JyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JELE9BQU8sRUFBYyx3QkFBd0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUFzQztJQUV0QyxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNyQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLDBCQUEwQixFQUFFLENBQUM7UUFFOUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLE1BQU0sSUFBSSxHQUFHLHlCQUF5QixDQUNwQyxLQUFLLEVBQ0wsRUFBRSxFQUNGLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQ2YsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBRTNCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxnREFBQyxDQUFDO1FBRXZELE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUU5QyxNQUFNLEVBQUUsR0FBZTtZQUNyQixFQUFFLEVBQUUsRUFBRTtZQUNOLFNBQVMsRUFDUCxPQUFPLFNBQVMsS0FBSyxRQUFRO2dCQUMzQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDekIsS0FBSyxFQUNILE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ3JFLElBQUk7U0FDTCxDQUFDO1FBRUYsS0FBSyxDQUFDLFFBQVEsQ0FDWix3QkFBd0IsQ0FDdEIsRUFBRSxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FDeEQsQ0FDRixDQUFDO1FBRUYsSUFBSSxRQUFRLENBQUMsVUFBVTtZQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVXJsVHJlZUZyb21TbmFwc2hvdCxcbiAgUm91dGVyLFxuICB0eXBlIFJlc29sdmVGbixcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJyZWFkY3J1bWJTdG9yZSB9IGZyb20gJy4vYnJlYWRjcnVtYi1zdG9yZSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZGVmaW5pbmcgYSBicmVhZGNydW1iLlxuICpcbiAqL1xudHlwZSBDcmVhdGVCcmVhZGNydW1iT3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFRoZSB2aXNpYmxlIHRleHQgZm9yIHRoZSBicmVhZGNydW1iLlxuICAgKiBDYW4gYmUgYSBzdGF0aWMgc3RyaW5nIG9yIGEgZnVuY3Rpb24gZm9yIGR5bmFtaWMgbGFiZWxzLlxuICAgKi9cbiAgbGFiZWw6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xuICAvKipcbiAgICogQW4gYWNjZXNzaWJsZSBsYWJlbCBmb3IgdGhlIGJyZWFkY3J1bWIgaXRlbS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBsYWJlbGAgaWYgbm90IHByb3ZpZGVkLlxuICAgKiBDYW4gYmUgYSBzdGF0aWMgc3RyaW5nIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nIGZvciBkeW5hbWljIEFSSUEgbGFiZWxzLlxuICAgKi9cbiAgYXJpYUxhYmVsPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByb3V0ZSByZXNvbHZlciB3aWxsIHdhaXQgdW50aWwgdGhlIGBsYWJlbGAgc2lnbmFsIGhhcyBhIHZhbHVlIGJlZm9yZSBgcmVzb2x2aW5nYFxuICAgKi9cbiAgYXdhaXRWYWx1ZT86IGJvb2xlYW47XG59O1xuXG5pbXBvcnQgeyB1bnRpbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xuaW1wb3J0IHsgaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEJyZWFkY3J1bWIsIGNyZWF0ZUludGVybmFsQnJlYWRjcnVtYiB9IGZyb20gJy4vYnJlYWRjcnVtYic7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmVnaXN0ZXJzIGEgYnJlYWRjcnVtYiBmb3IgYSBzcGVjaWZpYyByb3V0ZS5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhbiBBbmd1bGFyIFJvdXRlIGBSZXNvbHZlRm5gLlxuICogSXQgaGFuZGxlcyB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBicmVhZGNydW1iIHdpdGggdGhlIGBCcmVhZGNydW1iU3RvcmVgXG4gKiBhbmQgZW5zdXJlcyBhdXRvbWF0aWMgZGVyZWdpc3RyYXRpb24gd2hlbiB0aGUgcm91dGUgaXMgZGVzdHJveWVkLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgYENyZWF0ZUJyZWFkY3J1bWJPcHRpb25zYCBvYmplY3QuXG4gKiBAc2VlIENyZWF0ZUJyZWFkY3J1bWJPcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjb25zdCBhcHBSb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICdob21lJyxcbiAqICAgICBjb21wb25lbnQ6IEhvbWVDb21wb25lbnQsXG4gKiAgICAgcmVzb2x2ZToge1xuICogICAgICAgYnJlYWRjcnVtYjogY3JlYXRlQnJlYWRjcnVtYigoKSA9PiAoe1xuICogICAgICAgICBsYWJlbDogJ0hvbWUnLFxuICogICAgICAgfSk7XG4gKiAgICAgfSxcbiAqICAgICBwYXRoOiAndXNlcnMvOnVzZXJJZCcsXG4gKiAgICAgY29tcG9uZW50OiBVc2VyUHJvZmlsZUNvbXBvbmVudCxcbiAqICAgICByZXNvbHZlOiB7XG4gKiAgICAgICBicmVhZGNydW1iOiBjcmVhdGVCcmVhZGNydW1iKCgpID0+IHtcbiAqICAgICAgICAgY29uc3QgdXNlclN0b3JlID0gaW5qZWN0KFVzZXJTdG9yZSk7XG4gKiAgICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgICAgIGxhYmVsOiAoKSA9PiB1c2VyU3RvcmUudXNlcigpLm5hbWUgPz8gJ0xvYWRpbmcuLi5cbiAqICAgICAgICB9O1xuICogICAgICB9KVxuICogICAgIH0sXG4gKiAgIH1cbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJyZWFkY3J1bWIoXG4gIGZhY3Rvcnk6ICgpID0+IENyZWF0ZUJyZWFkY3J1bWJPcHRpb25zLFxuKTogUmVzb2x2ZUZuPHZvaWQ+IHtcbiAgcmV0dXJuIGFzeW5jIChyb3V0ZSkgPT4ge1xuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KEJyZWFkY3J1bWJTdG9yZSk7XG4gICAgY29uc3QgcmVzb2x2ZXIgPSBpbmplY3RTbmFwc2hvdFBhdGhSZXNvbHZlcigpO1xuXG4gICAgY29uc3QgZnAgPSByZXNvbHZlcihyb3V0ZSk7XG5cbiAgICBjb25zdCB0cmVlID0gY3JlYXRlVXJsVHJlZUZyb21TbmFwc2hvdChcbiAgICAgIHJvdXRlLFxuICAgICAgW10sXG4gICAgICByb3V0ZS5xdWVyeVBhcmFtcyxcbiAgICAgIHJvdXRlLmZyYWdtZW50LFxuICAgICk7XG5cbiAgICBjb25zdCBwcm92aWRlZCA9IGZhY3RvcnkoKTtcblxuICAgIGNvbnN0IGxpbmsgPSBjb21wdXRlZCgoKSA9PiByb3V0ZXIuc2VyaWFsaXplVXJsKHRyZWUpKTtcblxuICAgIGNvbnN0IHsgbGFiZWwsIGFyaWFMYWJlbCA9IGxhYmVsIH0gPSBwcm92aWRlZDtcblxuICAgIGNvbnN0IGJjOiBCcmVhZGNydW1iID0ge1xuICAgICAgaWQ6IGZwLFxuICAgICAgYXJpYUxhYmVsOlxuICAgICAgICB0eXBlb2YgYXJpYUxhYmVsID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gY29tcHV0ZWQoKCkgPT4gYXJpYUxhYmVsKVxuICAgICAgICAgIDogY29tcHV0ZWQoYXJpYUxhYmVsKSxcbiAgICAgIGxhYmVsOlxuICAgICAgICB0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnID8gY29tcHV0ZWQoKCkgPT4gbGFiZWwpIDogY29tcHV0ZWQobGFiZWwpLFxuICAgICAgbGluayxcbiAgICB9O1xuXG4gICAgc3RvcmUucmVnaXN0ZXIoXG4gICAgICBjcmVhdGVJbnRlcm5hbEJyZWFkY3J1bWIoXG4gICAgICAgIGJjLFxuICAgICAgICBjb21wdXRlZCgoKSA9PiByb3V0ZS5kYXRhPy5bJ3NraXBCcmVhZGNydW1iJ10gIT09IHRydWUpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgaWYgKHByb3ZpZGVkLmF3YWl0VmFsdWUpIGF3YWl0IHVudGlsKGJjLmxhYmVsLCAodikgPT4gISF2KTtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcbn1cbiJdfQ==","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.1.0\", ngImport: i0, type: PreloadRequester, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: PreloadRequester, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: PreloadRequester, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC1yZXF1ZXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL3ByZWxvYWRpbmcvcHJlbG9hZC1yZXF1ZXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUcvQixNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUNqRCxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFbEUsWUFBWSxDQUFDLFNBQWlCO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQzt1R0FOVSxnQkFBZ0I7MkdBQWhCLGdCQUFnQixjQURILE1BQU07OzJGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFByZWxvYWRSZXF1ZXN0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHByZWxvYWRPbkRlbWFuZCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHByZWxvYWRSZXF1ZXN0ZWQkID0gdGhpcy5wcmVsb2FkT25EZW1hbmQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHN0YXJ0UHJlbG9hZChyb3V0ZVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMucHJlbG9hZE9uRGVtYW5kJC5uZXh0KHJvdXRlUGF0aCk7XG4gIH1cbn1cbiJdfQ==","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.1.0\", ngImport: i0, type: PreloadStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: PreloadStrategy, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: PreloadStrategy, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlbG9hZC1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvcHJlbG9hZGluZy9wcmVsb2FkLXN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBa0MsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFjLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFdkQsU0FBUyxpQkFBaUI7SUFDeEIsSUFDRSxVQUFVLENBQUMsTUFBTTtRQUNqQixXQUFXLElBQUksVUFBVSxDQUFDLE1BQU07UUFDaEMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUztRQUMzQyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsS0FBSyxRQUFRO1FBQzFELENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQ3hDLENBQUM7UUFDRCxNQUFNLElBQUksR0FDUixlQUFlLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVTtZQUN6RCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhO2dCQUN6RCxRQUFRO1lBQ1YsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsSUFDRSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVTtZQUNwRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQUssU0FBUztZQUNwRSxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUUvQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBWTtJQUM3QixPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDdkQsQ0FBQztBQUtELE1BQU0sT0FBTyxlQUFlO0lBQ1QsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDNUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixHQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFaEQsT0FBTyxDQUFDLEtBQVksRUFBRSxJQUEyQjtRQUMvQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxpQkFBaUIsRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTFELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXZDLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3BDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUN2QixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDeEMsQ0FBQztJQUNKLENBQUM7dUdBbkJVLGVBQWU7MkdBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmVsb2FkaW5nU3RyYXRlZ3ksIHR5cGUgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFTVBUWSwgZmlsdGVyLCBmaW5hbGl6ZSwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjcmVhdGVSb3V0ZVByZWRpY2F0ZSwgZmluZFBhdGggfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IFByZWxvYWRSZXF1ZXN0ZXIgfSBmcm9tICcuL3ByZWxvYWQtcmVxdWVzdGVyJztcblxuZnVuY3Rpb24gaGFzU2xvd0Nvbm5lY3Rpb24oKSB7XG4gIGlmIChcbiAgICBnbG9iYWxUaGlzLndpbmRvdyAmJlxuICAgICduYXZpZ2F0b3InIGluIGdsb2JhbFRoaXMud2luZG93ICYmXG4gICAgJ2Nvbm5lY3Rpb24nIGluIGdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvciAmJlxuICAgIHR5cGVvZiBnbG9iYWxUaGlzLndpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAhIWdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uXG4gICkge1xuICAgIGNvbnN0IGlzMmcgPVxuICAgICAgJ2VmZmVjdGl2ZVR5cGUnIGluIGdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uICYmXG4gICAgICB0eXBlb2YgZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yLmNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSA9PT1cbiAgICAgICAgJ3N0cmluZycgJiZcbiAgICAgIGdsb2JhbFRoaXMud2luZG93Lm5hdmlnYXRvci5jb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUuZW5kc1dpdGgoJzJnJyk7XG4gICAgaWYgKGlzMmcpIHJldHVybiB0cnVlO1xuICAgIGlmIChcbiAgICAgICdzYXZlRGF0YScgaW4gZ2xvYmFsVGhpcy53aW5kb3cubmF2aWdhdG9yLmNvbm5lY3Rpb24gJiZcbiAgICAgIHR5cGVvZiBnbG9iYWxUaGlzLndpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbi5zYXZlRGF0YSA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgICBnbG9iYWxUaGlzLndpbmRvdy5uYXZpZ2F0b3IuY29ubmVjdGlvbi5zYXZlRGF0YVxuICAgIClcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBub1ByZWxvYWQocm91dGU6IFJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5kYXRhICYmIHJvdXRlLmRhdGFbJ3ByZWxvYWQnXSA9PT0gZmFsc2U7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcmVsb2FkU3RyYXRlZ3kgaW1wbGVtZW50cyBQcmVsb2FkaW5nU3RyYXRlZ3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXEgPSBpbmplY3QoUHJlbG9hZFJlcXVlc3Rlcik7XG5cbiAgcHJlbG9hZChyb3V0ZTogUm91dGUsIGxvYWQ6ICgpID0+IE9ic2VydmFibGU8YW55Pik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKG5vUHJlbG9hZChyb3V0ZSkgfHwgaGFzU2xvd0Nvbm5lY3Rpb24oKSkgcmV0dXJuIEVNUFRZO1xuXG4gICAgY29uc3QgZnAgPSBmaW5kUGF0aCh0aGlzLnJvdXRlci5jb25maWcsIHJvdXRlKTtcblxuICAgIGlmICh0aGlzLmxvYWRpbmcuaGFzKGZwKSkgcmV0dXJuIEVNUFRZO1xuXG4gICAgY29uc3QgcHJlZGljYXRlID0gY3JlYXRlUm91dGVQcmVkaWNhdGUoZnApO1xuICAgIHJldHVybiB0aGlzLnJlcS5wcmVsb2FkUmVxdWVzdGVkJC5waXBlKFxuICAgICAgZmlsdGVyKChwYXRoKSA9PiBwYXRoID09PSBmcCB8fCBwcmVkaWNhdGUocGF0aCkpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiBsb2FkKCkpLFxuICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nLmRlbGV0ZShmcCkpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==","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.1.0\", ngImport: i0, type: Link, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.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 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", 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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QUosSUFBSTtrQkF2QmhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixJQUFJLEVBQUU7d0JBQ0osY0FBYyxFQUFFLFdBQVc7cUJBQzVCO29CQUNELGNBQWMsRUFBRTt3QkFDZDs0QkFDRSxTQUFTLEVBQUUsVUFBVTs0QkFDckIsTUFBTSxFQUFFO2dDQUNOLG9CQUFvQjtnQ0FDcEIsUUFBUTtnQ0FDUixhQUFhO2dDQUNiLFVBQVU7Z0NBQ1YscUJBQXFCO2dDQUNyQixPQUFPO2dDQUNQLFlBQVk7Z0NBQ1osb0JBQW9CO2dDQUNwQixZQUFZOzZCQUNiO3lCQUNGO3FCQUNGO2lCQUNGO3dEQTJEQyxXQUFXO3NCQVBWLFlBQVk7dUJBQUMsV0FBVyxFQUFFO3dCQUN6QixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGdCQUFnQjtxQkFDakI7Z0JBbUJELE9BQU87c0JBUE4sWUFBWTt1QkFBQyxPQUFPLEVBQUU7d0JBQ3JCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGNvbXB1dGVkLFxuICBEaXJlY3RpdmUsXG4gIGVmZmVjdCxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBQcm92aWRlcixcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIHR5cGUgQWN0aXZhdGVkUm91dGUsXG4gIHR5cGUgUGFyYW1zLFxuICBSb3V0ZXIsXG4gIFJvdXRlckxpbmssXG4gIFJvdXRlckxpbmtXaXRoSHJlZixcbiAgVXJsVHJlZSxcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGVsZW1lbnRWaXNpYmlsaXR5IH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XG5pbXBvcnQgeyBQcmVsb2FkUmVxdWVzdGVyIH0gZnJvbSAnLi9wcmVsb2FkaW5nJztcblxuZnVuY3Rpb24gaW5wdXRUb1VybFRyZWUoXG4gIHJvdXRlcjogUm91dGVyLFxuICBsaW5rOiBzdHJpbmcgfCBhbnlbXSB8IFVybFRyZWUgfCBudWxsLFxuICByZWxhdGl2ZVRvPzogQWN0aXZhdGVkUm91dGUsXG4gIHF1ZXJ5UGFyYW1zPzogUGFyYW1zLFxuICBmcmFnbWVudD86IHN0cmluZyxcbiAgcXVlcnlQYXJhbXNIYW5kbGluZz86ICdtZXJnZScgfCAncHJlc2VydmUnIHwgJycsXG4gIHJvdXRlckxpbmtVcmxUcmVlPzogVXJsVHJlZSB8IG51bGwsXG4pOiBVcmxUcmVlIHwgbnVsbCB7XG4gIGlmICghbGluaykgcmV0dXJuIG51bGw7XG4gIGlmIChyb3V0ZXJMaW5rVXJsVHJlZSkgcmV0dXJuIHJvdXRlckxpbmtVcmxUcmVlO1xuXG4gIGlmIChsaW5rIGluc3RhbmNlb2YgVXJsVHJlZSkgcmV0dXJuIGxpbms7XG5cbiAgY29uc3QgYXJyID0gQXJyYXkuaXNBcnJheShsaW5rKSA/IGxpbmsgOiBbbGlua107XG5cbiAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGFyciwge1xuICAgIHJlbGF0aXZlVG8sXG4gICAgcXVlcnlQYXJhbXMsXG4gICAgZnJhZ21lbnQsXG4gICAgcXVlcnlQYXJhbXNIYW5kbGluZyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyZWVUb1NlcmlhbGl6ZWRVcmwoXG4gIHJvdXRlcjogUm91dGVyLFxuICB1cmxUcmVlOiBVcmxUcmVlIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXVybFRyZWUpIHJldHVybiBudWxsO1xuICByZXR1cm4gcm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFRyaWdnZXJQcmVsb2FkKCkge1xuICBjb25zdCByZXEgPSBpbmplY3QoUHJlbG9hZFJlcXVlc3Rlcik7XG4gIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHJldHVybiAoXG4gICAgbGluazogc3RyaW5nIHwgYW55W10gfCBVcmxUcmVlIHwgbnVsbCxcbiAgICByZWxhdGl2ZVRvPzogQWN0aXZhdGVkUm91dGUsXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbXMsXG4gICAgZnJhZ21lbnQ/OiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXNIYW5kbGluZz86ICdtZXJnZScgfCAncHJlc2VydmUnIHwgJycsXG4gICkgPT4ge1xuICAgIGNvbnN0IHVybFRyZWUgPSBpbnB1dFRvVXJsVHJlZShcbiAgICAgIHJvdXRlcixcbiAgICAgIGxpbmssXG4gICAgICByZWxhdGl2ZVRvLFxuICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICBmcmFnbWVudCxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmcsXG4gICAgKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHRyZWVUb1NlcmlhbGl6ZWRVcmwocm91dGVyLCB1cmxUcmVlKTtcbiAgICBpZiAoIWZ1bGxQYXRoKSByZXR1cm47XG5cbiAgICByZXEuc3RhcnRQcmVsb2FkKGZ1bGxQYXRoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgYG1tTGlua2AgZGlyZWN0aXZlLlxuICovXG50eXBlIE1NTGlua0NvbmZpZyA9IHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHByZWxvYWQgYmVoYXZpb3IgZm9yIGxpbmtzLlxuICAgKiBDYW4gYmUgJ2hvdmVyJywgJ3Zpc2libGUnLCBvciBudWxsIChubyBwcmVsb2FkaW5nKS5cbiAgICogQGRlZmF1bHQgJ2hvdmVyJ1xuICAgKi9cbiAgcHJlbG9hZE9uOiAnaG92ZXInIHwgJ3Zpc2libGUnIHwgbnVsbDtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIG1vdXNlIGRvd24gZXZlbnRzIGZvciBwcmVsb2FkaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXNlTW91c2VEb3duOiBib29sZWFuO1xufTtcblxuY29uc3QgY29uZmlnVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TU1MaW5rQ29uZmlnPignTU1TVEFDS19MSU5LX0NPTkZJRycpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU1NTGlua0RlZmF1bHRDb25maWcoXG4gIGNvbmZpZzogUGFydGlhbDxNTUxpbmtDb25maWc+LFxuKTogUHJvdmlkZXIge1xuICBjb25zdCBjZmc6IE1NTGlua0NvbmZpZyA9IHtcbiAgICBwcmVsb2FkT246ICdob3ZlcicsXG4gICAgdXNlTW91c2VEb3duOiBmYWxzZSxcbiAgICAuLi5jb25maWcsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBjb25maWdUb2tlbixcbiAgICB1c2VWYWx1ZTogY2ZnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbmplY3RDb25maWcoKSB7XG4gIGNvbnN0IGNmZyA9IGluamVjdChjb25maWdUb2tlbiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcmV0dXJuIHtcbiAgICBwcmVsb2FkT246ICdob3ZlcicgYXMgY29uc3QsXG4gICAgdXNlTW91c2VEb3duOiBmYWxzZSxcbiAgICAuLi5jZmcsXG4gIH07XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttbUxpbmtdJyxcbiAgZXhwb3J0QXM6ICdtbUxpbmsnLFxuICBob3N0OiB7XG4gICAgJyhtb3VzZWVudGVyKSc6ICdvbkhvdmVyKCknLFxuICB9LFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogUm91dGVyTGluayxcbiAgICAgIGlucHV0czogW1xuICAgICAgICAncm91dGVyTGluazogbW1MaW5rJyxcbiAgICAgICAgJ3RhcmdldCcsXG4gICAgICAgICdxdWVyeVBhcmFtcycsXG4gICAgICAgICdmcmFnbWVudCcsXG4gICAgICAgICdxdWVyeVBhcmFtc0hhbmRsaW5nJyxcbiAgICAgICAgJ3N0YXRlJyxcbiAgICAgICAgJ3JlbGF0aXZlVG8nLFxuICAgICAgICAnc2tpcExvY2F0aW9uQ2hhbmdlJyxcbiAgICAgICAgJ3JlcGxhY2VVcmwnLFxuICAgICAgXSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBMaW5rIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXJMaW5rID1cbiAgICBpbmplY3QoUm91dGVyTGluaywge1xuICAgICAgc2VsZjogdHJ1ZSxcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0pID8/IGluamVjdChSb3V0ZXJMaW5rV2l0aEhyZWYsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXEgPSBpbmplY3QoUHJlbG9hZFJlcXVlc3Rlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcmVhZG9ubHkgdGFyZ2V0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBxdWVyeVBhcmFtcyA9IGlucHV0PFBhcmFtcz4oKTtcbiAgcmVhZG9ubHkgZnJhZ21lbnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHF1ZXJ5UGFyYW1zSGFuZGxpbmcgPSBpbnB1dDwnbWVyZ2UnIHwgJ3ByZXNlcnZlJyB8ICcnPigpO1xuICByZWFkb25seSBzdGF0ZSA9IGlucHV0PFJlY29yZDxzdHJpbmcsIGFueT4+KCk7XG4gIHJlYWRvbmx5IGluZm8gPSBpbnB1dDx1bmtub3duPigpO1xuICByZWFkb25seSByZWxhdGl2ZVRvID0gaW5wdXQ8QWN0aXZhdGVkUm91dGU+KCk7XG4gIHJlYWRvbmx5IHNraXBMb2NhdGlvbkNoYW5nZSA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmVhZG9ubHkgcmVwbGFjZVVybCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcbiAgcmVhZG9ubHkgbW1MaW5rID0gaW5wdXQ8c3RyaW5nIHwgYW55W10gfCBVcmxUcmVlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHByZWxvYWRPbiA9IGlucHV0PCdob3ZlcicgfCAndmlzaWJsZScgfCBudWxsPihcbiAgICBpbmplY3RDb25maWcoKS5wcmVsb2FkT24sXG4gICk7XG4gIHJlYWRvbmx5IHVzZU1vdXNlRG93biA9IGlucHV0KGluamVjdENvbmZpZygpLnVzZU1vdXNlRG93biwge1xuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcbiAgfSk7XG4gIHJlYWRvbmx5IGJlZm9yZU5hdmlnYXRlID0gaW5wdXQ8KCkgPT4gdm9pZD4oKTtcblxuICByZWFkb25seSBwcmVsb2FkaW5nID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1cmxUcmVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBpbnB1dFRvVXJsVHJlZShcbiAgICAgIHRoaXMucm91dGVyLFxuICAgICAgdGhpcy5tbUxpbmsoKSxcbiAgICAgIHRoaXMucmVsYXRpdmVUbygpLFxuICAgICAgdGhpcy5xdWVyeVBhcmFtcygpLFxuICAgICAgdGhpcy5mcmFnbWVudCgpLFxuICAgICAgdGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nKCksXG4gICAgICB0aGlzLnJvdXRlckxpbms/LnVybFRyZWUsXG4gICAgKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsUGF0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdHJlZVRvU2VyaWFsaXplZFVybCh0aGlzLnJvdXRlciwgdGhpcy51cmxUcmVlKCkpO1xuICB9KTtcblxuICBvbkhvdmVyKCkge1xuICAgIGlmICh1bnRyYWNrZWQodGhpcy5wcmVsb2FkT24pICE9PSAnaG92ZXInKSByZXR1cm47XG4gICAgdGhpcy5yZXF1ZXN0UHJlbG9hZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgW1xuICAgICckZXZlbnQuYnV0dG9uJyxcbiAgICAnJGV2ZW50LmN0cmxLZXknLFxuICAgICckZXZlbnQuc2hpZnRLZXknLFxuICAgICckZXZlbnQuYWx0S2V5JyxcbiAgICAnJGV2ZW50Lm1ldGFLZXknLFxuICBdKVxuICBvbk1vdXNlRG93bihcbiAgICBidXR0b246IG51bWJlcixcbiAgICBjdHJsS2V5OiBib29sZWFuLFxuICAgIHNoaWZ0S2V5OiBib29sZWFuLFxuICAgIGFsdEtleTogYm9vbGVhbixcbiAgICBtZXRhS2V5OiBib29sZWFuLFxuICApIHtcbiAgICBpZiAoIXVudHJhY2tlZCh0aGlzLnVzZU1vdXNlRG93bikpIHJldHVybjtcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyKGJ1dHRvbiwgY3RybEtleSwgc2hpZnRLZXksIGFsdEtleSwgbWV0YUtleSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFtcbiAgICAnJGV2ZW50LmJ1dHRvbicsXG4gICAgJyRldmVudC5jdHJsS2V5JyxcbiAgICAnJGV2ZW50LnNoaWZ0S2V5JyxcbiAgICAnJGV2ZW50LmFsdEtleScsXG4gICAgJyRldmVudC5tZXRhS2V5JyxcbiAgXSlcbiAgb25DbGljayhcbiAgICBidXR0b246IG51bWJlcixcbiAgICBjdHJsS2V5OiBib29sZWFuLFxuICAgIHNoaWZ0S2V5OiBib29sZWFuLFxuICAgIGFsdEtleTogYm9vbGVhbixcbiAgICBtZXRhS2V5OiBib29sZWFuLFxuICApIHtcbiAgICBpZiAodW50cmFja2VkKHRoaXMudXNlTW91c2VEb3duKSkgcmV0dXJuO1xuICAgIHJldHVybiB0aGlzLnRyaWdnZXIoYnV0dG9uLCBjdHJsS2V5LCBzaGlmdEtleSwgYWx0S2V5LCBtZXRhS2V5KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IGVsZW1lbnRWaXNpYmlsaXR5KCk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJlbG9hZE9uKCkgIT09ICd2aXNpYmxlJykgcmV0dXJuO1xuICAgICAgaWYgKGludGVyc2VjdGlvbi52aXNpYmxlKCkpIHRoaXMucmVxdWVzdFByZWxvYWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdFByZWxvYWQoKSB7XG4gICAgY29uc3QgZnAgPSB1bnRyYWNrZWQodGhpcy5mdWxsUGF0aCk7XG4gICAgaWYgKCF0aGlzLnJvdXRlckxpbmsgfHwgIWZwKSByZXR1cm47XG4gICAgdGhpcy5yZXEuc3RhcnRQcmVsb2FkKGZwKTtcbiAgICB0aGlzLnByZWxvYWRpbmcuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyKFxuICAgIGJ1dHRvbjogbnVtYmVyLFxuICAgIGN0cmxLZXk6IGJvb2xlYW4sXG4gICAgc2hpZnRLZXk6IGJvb2xlYW4sXG4gICAgYWx0S2V5OiBib29sZWFuLFxuICAgIG1ldGFLZXk6IGJvb2xlYW4sXG4gICkge1xuICAgIHVudHJhY2tlZCh0aGlzLmJlZm9yZU5hdmlnYXRlKT8uKCk7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyTGluaz8ub25DbGljayhidXR0b24sIGN0cmxLZXksIHNoaWZ0S2V5LCBhbHRLZXksIG1ldGFLZXkpO1xuICB9XG59XG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL2NvcmUvc3JjL2xpYi90aXRsZS90aXRsZS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUE2QmpFLE1BQU0sS0FBSyxHQUFHLElBQUksY0FBYyxDQUFzQixzQkFBc0IsQ0FBQyxDQUFDO0FBRTlFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQW9CO0lBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO0lBRXBDLE1BQU0sUUFBUSxHQUNaLE9BQU8sTUFBTSxLQUFLLFVBQVU7UUFDMUIsQ0FBQyxDQUFDLE1BQU07UUFDUixDQUFDLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBRTdDLE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLGFBQWEsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLElBQUksSUFBSTtTQUNsRDtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBUaXRsZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cbiAqIERlZmluZXMgaG93IGNyZWF0ZVRpdGxlIHNob3VsZCBiZWhhdmVcbiAqIEBzZWUge2NyZWF0ZVRpdGxlfVxuICovXG5leHBvcnQgdHlwZSBUaXRsZUNvbmZpZyA9IHtcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSB0byBiZSB1c2VkIHdoZW4gbm8gdGl0bGUgaXMgc2V0LlxuICAgKiBJZiBub3QgcHJvdmlkZWQgaXQgZGVmYXVsdHMgdG8gYW4gZW1wdHkgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBwcmVmaXg/OiBzdHJpbmcgfCAoKHRpdGxlOiBzdHJpbmcpID0+IHN0cmluZyk7XG4gIC8qKlxuICAgKiBpZiBmYWxzZSwgdGhlIHRpdGxlIHdpbGwgY2hhbmdlIHRvIHRoZSB1cmwsIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRydWUgYXMgdGhhdCBpcyBzdGFuZGFyZCBiZWhhdmlvclxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBrZWVwTGFzdEtub3duVGl0bGU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IHR5cGUgSW50ZXJuYWxUaXRsZUNvbmZpZyA9IHtcbiAgcGFyc2VyOiAodGl0bGU6IHN0cmluZykgPT4gc3RyaW5nO1xuICBrZWVwTGFzdEtub3duOiBib29sZWFuO1xufTtcblxuY29uc3QgdG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48SW50ZXJuYWxUaXRsZUNvbmZpZz4oJ01NU1RBQ0tfVElUTEVfQ09ORklHJyk7XG5cbi8qKlxuICogdXNlZCB0byBwcm92aWRlIHRoZSB0aXRsZSBjb25maWd1cmF0aW9uLCB3aWxsIG5vdCBiZSBhcHBsaWVkIHVubGVzcyBhIGBjcmVhdGVUaXRsZWAgcmVzb2x2ZXIgaXMgdXNlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVRpdGxlQ29uZmlnKGNvbmZpZz86IFRpdGxlQ29uZmlnKTogUHJvdmlkZXIge1xuICBjb25zdCBwcmVmaXggPSBjb25maWc/LnByZWZpeCA/PyAnJztcblxuICBjb25zdCBwcmVmaXhGbiA9XG4gICAgdHlwZW9mIHByZWZpeCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcmVmaXhcbiAgICAgIDogKHRpdGxlOiBzdHJpbmcpID0+IGAke3ByZWZpeH0ke3RpdGxlfWA7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiB0b2tlbixcbiAgICB1c2VWYWx1ZToge1xuICAgICAgcGFyc2VyOiBwcmVmaXhGbixcbiAgICAgIGtlZXBMYXN0S25vd246IGNvbmZpZz8ua2VlcExhc3RLbm93blRpdGxlID8/IHRydWUsXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFRpdGxlQ29uZmlnKCk6IEludGVybmFsVGl0bGVDb25maWcge1xuICByZXR1cm4gaW5qZWN0KHRva2VuKTtcbn1cbiJdfQ==","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.1.0\", ngImport: i0, type: TitleStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.0\", ngImport: i0, type: TitleStore, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.0\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvY29yZS9zcmMvbGliL3RpdGxlL3RpdGxlLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUVaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBS25ELE1BQU0sT0FBTyxVQUFVO0lBQ0osS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixHQUFHLEdBQUcsT0FBTyxDQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEQsVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFakQ7UUFDRSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSx5REFBQyxDQUFDO1FBRXJFLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxhQUFhLEVBQUU7aUJBQ25CLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUN6RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLGlFQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSx3REFBQyxDQUFDO1FBRXpFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixFQUFFLENBQUMsYUFBYTtZQUNqRCxDQUFDLENBQUMsWUFBWSxDQUFpQjtnQkFDM0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRTtnQkFDNUIsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUMzQixJQUFJLENBQUMsS0FBSzt3QkFBRSxPQUFPLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNyQyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2FBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFFakIsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQVUsRUFBRSxPQUF1QjtRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO3VHQWxDVSxVQUFVOzJHQUFWLFVBQVUsY0FGVCxNQUFNOzsyRkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUFzQ0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsRUFBaUMsRUFDakMsVUFBVSxHQUFHLEtBQUs7SUFFbEIsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFtQixFQUFFO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRywwQkFBMEIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztRQUV2QyxNQUFNLFFBQVEsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUV0QixNQUFNLFdBQVcsR0FDZixPQUFPLFFBQVEsS0FBSyxRQUFRO1lBQzFCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekIsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLDZEQUFDLENBQUM7UUFFaEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUV0QyxJQUFJLFVBQVU7WUFBRSxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIEluamVjdGFibGUsXG4gIGxpbmtlZFNpZ25hbCxcbiAgU2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJlc29sdmVGbiB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBtdXRhYmxlLCB1bnRpbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xuaW1wb3J0IHsgaW5qZWN0TGVhZlJvdXRlcywgaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IGluamVjdFRpdGxlQ29uZmlnIH0gZnJvbSAnLi90aXRsZS1jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGl0bGVTdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGl0bGUgPSBpbmplY3QoVGl0bGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcCA9IG11dGFibGU8TWFwPHN0cmluZywgU2lnbmFsPHN0cmluZz4+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxlYWZSb3V0ZXMgPSBpbmplY3RMZWFmUm91dGVzKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmV2ZXJzZUxlYXZlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubGVhZlJvdXRlcygpLnRvUmV2ZXJzZWQoKSk7XG5cbiAgICBjb25zdCBjdXJyZW50UmVzb2x2ZWRUaXRsZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBtYXAgPSB0aGlzLm1hcCgpO1xuICAgICAgcmV0dXJuIHJldmVyc2VMZWF2ZXMoKVxuICAgICAgICAubWFwKChsZWFmKSA9PiBtYXAuZ2V0KGxlYWYucGF0aCk/LigpID8/IGxlYWYucm91dGUudGl0bGUpXG4gICAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiAhIXYpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY3VycmVudFRpdGxlID0gY29tcHV0ZWQoKCkgPT4gY3VycmVudFJlc29sdmVkVGl0bGVzKCkuYXQoMCkgPz8gJycpO1xuXG4gICAgY29uc3QgaGVsZFRpdGxlID0gaW5qZWN0VGl0bGVDb25maWcoKS5rZWVwTGFzdEtub3duXG4gICAgICA/IGxpbmtlZFNpZ25hbDxzdHJpbmcsIHN0cmluZz4oe1xuICAgICAgICAgIHNvdXJjZTogKCkgPT4gY3VycmVudFRpdGxlKCksXG4gICAgICAgICAgY29tcHV0YXRpb246ICh2YWx1ZSwgcHJldikgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHByZXY/LnZhbHVlID8/ICcnO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IGN1cnJlbnRUaXRsZTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLnRpdGxlLnNldFRpdGxlKGhlbGRUaXRsZSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIHRpdGxlRm46IFNpZ25hbDxzdHJpbmc+KSB7XG4gICAgdGhpcy5tYXAuaW5saW5lKChtKSA9PiBtLnNldChpZCwgdGl0bGVGbikpO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYSB0aXRsZSByZXNvbHZlciBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGluIEFuZ3VsYXIncyByb3V0ZXIuXG4gKlxuICogQHBhcmFtIGZuXG4gKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHN0cmluZyBvciBhIFNpZ25hbDxzdHJpbmc+IHJlcHJlc2VudGluZyB0aGUgdGl0bGUuXG4gKiBAcGFyYW0gYXdhaXRWYWx1ZVxuICogSWYgYHRydWVgLCB0aGUgcmVzb2x2ZXIgd2lsbCB3YWl0IHVudGlsIHRoZSB0aXRsZSBzaWduYWwgaGFzIGEgdmFsdWUgYmVmb3JlIHJlc29sdmluZy5cbiAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUaXRsZShcbiAgZm46ICgpID0+IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpLFxuICBhd2FpdFZhbHVlID0gZmFsc2UsXG4pOiBSZXNvbHZlRm48c3RyaW5nPiB7XG4gIHJldHVybiBhc3luYyAocm91dGUpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KFRpdGxlU3RvcmUpO1xuICAgIGNvbnN0IHJlc29sdmVyID0gaW5qZWN0U25hcHNob3RQYXRoUmVzb2x2ZXIoKTtcbiAgICBjb25zdCBmcCA9IHJlc29sdmVyKHJvdXRlKTtcblxuICAgIGNvbnN0IHsgcGFyc2VyIH0gPSBpbmplY3RUaXRsZUNvbmZpZygpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWQgPSBmbigpO1xuXG4gICAgY29uc3QgdGl0bGVTaWduYWwgPVxuICAgICAgdHlwZW9mIHJlc29sdmVkID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGNvbXB1dGVkKCgpID0+IHJlc29sdmVkKVxuICAgICAgICA6IGNvbXB1dGVkKHJlc29sdmVkKTtcblxuICAgIGNvbnN0IHBhcnNlZFRpdGxlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gcGFyc2VyKHRpdGxlU2lnbmFsKCkpKTtcblxuICAgIHN0b3JlLnJlZ2lzdGVyKGZwLCBwYXJzZWRUaXRsZVNpZ25hbCk7XG5cbiAgICBpZiAoYXdhaXRWYWx1ZSkgYXdhaXQgdW50aWwocGFyc2VkVGl0bGVTaWduYWwsICh2KSA9PiAhIXYpO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bnRyYWNrZWQocGFyc2VkVGl0bGVTaWduYWwpKTtcbiAgfTtcbn1cbiJdfQ==","/**\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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"}
package/index.d.ts CHANGED
@@ -1,9 +1,37 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, Signal, Provider, WritableSignal } from '@angular/core';
2
+ import { Signal, InjectionToken, Provider, WritableSignal } from '@angular/core';
3
3
  import * as i1 from '@angular/router';
4
4
  import { ActivatedRouteSnapshot, ResolveFn, UrlTree, ActivatedRoute, Params, PreloadingStrategy, Route } from '@angular/router';
5
5
  import { Observable } from 'rxjs';
6
6
 
7
+ /**
8
+ * Represents a single breadcrumb item within the navigation path.
9
+ * All dynamic properties are represented as Angular Signals to enable reactivity.
10
+ */
11
+ type Breadcrumb = {
12
+ /**
13
+ * A unique identifier for the breadcrumb item. Generally the unresolved path for example `/posts/:id`.
14
+ * Useful for `@for` tracking in templates.
15
+ */
16
+ id: string;
17
+ /**
18
+ * The visible text for the breadcrumb item.
19
+ * Updated reactively as the url/link based on
20
+ * either a provided definition, or the current route.
21
+ */
22
+ label: Signal<string>;
23
+ /**
24
+ * An accessible label for the breadcrumb item.
25
+ * Defaults to the same value as `label` if not provided.
26
+ */
27
+ ariaLabel: Signal<string>;
28
+ /**
29
+ * The URL link for the breadcrumb item.
30
+ * Updates as the route changes.
31
+ */
32
+ link: Signal<string>;
33
+ };
34
+
7
35
  /**
8
36
  * @internal
9
37
  */
@@ -141,34 +169,6 @@ type CreateBreadcrumbOptions = {
141
169
  */
142
170
  declare function createBreadcrumb(factory: () => CreateBreadcrumbOptions): ResolveFn<void>;
143
171
 
144
- /**
145
- * Represents a single breadcrumb item within the navigation path.
146
- * All dynamic properties are represented as Angular Signals to enable reactivity.
147
- */
148
- type Breadcrumb = {
149
- /**
150
- * A unique identifier for the breadcrumb item. Generally the unresolved path for example `/posts/:id`.
151
- * Useful for `@for` tracking in templates.
152
- */
153
- id: string;
154
- /**
155
- * The visible text for the breadcrumb item.
156
- * Updated reactively as the url/link based on
157
- * either a provided definition, or the current route.
158
- */
159
- label: Signal<string>;
160
- /**
161
- * An accessible label for the breadcrumb item.
162
- * Defaults to the same value as `label` if not provided.
163
- */
164
- ariaLabel: Signal<string>;
165
- /**
166
- * The URL link for the breadcrumb item.
167
- * Updates as the route changes.
168
- */
169
- link: Signal<string>;
170
- };
171
-
172
172
  /**
173
173
  * Injects and provides access to a reactive list of breadcrumbs.
174
174
  *
@@ -217,9 +217,9 @@ type MMLinkConfig = {
217
217
  useMouseDown: boolean;
218
218
  };
219
219
  declare function provideMMLinkDefaultConfig(config: Partial<MMLinkConfig>): Provider;
220
- declare class LinkDirective {
220
+ declare class Link {
221
221
  private readonly routerLink;
222
- private readonly svc;
222
+ private readonly req;
223
223
  private readonly router;
224
224
  readonly target: _angular_core.InputSignal<string | undefined>;
225
225
  readonly queryParams: _angular_core.InputSignal<Params | undefined>;
@@ -243,14 +243,14 @@ declare class LinkDirective {
243
243
  constructor();
244
244
  private requestPreload;
245
245
  private trigger;
246
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<LinkDirective, never>;
247
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LinkDirective, "[mmLink]", ["mmLink"], { "target": { "alias": "target"; "required": false; "isSignal": true; }; "queryParams": { "alias": "queryParams"; "required": false; "isSignal": true; }; "fragment": { "alias": "fragment"; "required": false; "isSignal": true; }; "queryParamsHandling": { "alias": "queryParamsHandling"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "relativeTo": { "alias": "relativeTo"; "required": false; "isSignal": true; }; "skipLocationChange": { "alias": "skipLocationChange"; "required": false; "isSignal": true; }; "replaceUrl": { "alias": "replaceUrl"; "required": false; "isSignal": true; }; "mmLink": { "alias": "mmLink"; "required": false; "isSignal": true; }; "preloadOn": { "alias": "preloadOn"; "required": false; "isSignal": true; }; "useMouseDown": { "alias": "useMouseDown"; "required": false; "isSignal": true; }; "beforeNavigate": { "alias": "beforeNavigate"; "required": false; "isSignal": true; }; }, { "preloading": "preloading"; }, never, never, true, [{ directive: typeof i1.RouterLink; inputs: { "routerLink": "mmLink"; "target": "target"; "queryParams": "queryParams"; "fragment": "fragment"; "queryParamsHandling": "queryParamsHandling"; "state": "state"; "relativeTo": "relativeTo"; "skipLocationChange": "skipLocationChange"; "replaceUrl": "replaceUrl"; }; outputs: {}; }]>;
246
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Link, never>;
247
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Link, "[mmLink]", ["mmLink"], { "target": { "alias": "target"; "required": false; "isSignal": true; }; "queryParams": { "alias": "queryParams"; "required": false; "isSignal": true; }; "fragment": { "alias": "fragment"; "required": false; "isSignal": true; }; "queryParamsHandling": { "alias": "queryParamsHandling"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "relativeTo": { "alias": "relativeTo"; "required": false; "isSignal": true; }; "skipLocationChange": { "alias": "skipLocationChange"; "required": false; "isSignal": true; }; "replaceUrl": { "alias": "replaceUrl"; "required": false; "isSignal": true; }; "mmLink": { "alias": "mmLink"; "required": false; "isSignal": true; }; "preloadOn": { "alias": "preloadOn"; "required": false; "isSignal": true; }; "useMouseDown": { "alias": "useMouseDown"; "required": false; "isSignal": true; }; "beforeNavigate": { "alias": "beforeNavigate"; "required": false; "isSignal": true; }; }, { "preloading": "preloading"; }, never, never, true, [{ directive: typeof i1.RouterLink; inputs: { "routerLink": "mmLink"; "target": "target"; "queryParams": "queryParams"; "fragment": "fragment"; "queryParamsHandling": "queryParamsHandling"; "state": "state"; "relativeTo": "relativeTo"; "skipLocationChange": "skipLocationChange"; "replaceUrl": "replaceUrl"; }; outputs: {}; }]>;
248
248
  }
249
249
 
250
250
  declare class PreloadStrategy implements PreloadingStrategy {
251
251
  private readonly loading;
252
252
  private readonly router;
253
- private readonly svc;
253
+ private readonly req;
254
254
  preload(route: Route, load: () => Observable<any>): Observable<any>;
255
255
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PreloadStrategy, never>;
256
256
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<PreloadStrategy>;
@@ -401,5 +401,5 @@ declare function createTitle(fn: () => string | (() => string), awaitValue?: boo
401
401
  */
402
402
  declare function url(): Signal<string>;
403
403
 
404
- export { LinkDirective, PreloadStrategy, createBreadcrumb, createTitle, injectBreadcrumbs, injectTriggerPreload, provideBreadcrumbConfig, provideMMLinkDefaultConfig, provideTitleConfig, queryParam, url };
404
+ export { Link, PreloadStrategy, createBreadcrumb, createTitle, injectBreadcrumbs, injectTriggerPreload, provideBreadcrumbConfig, provideMMLinkDefaultConfig, provideTitleConfig, queryParam, url };
405
405
  export type { Breadcrumb, TitleConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmstack/router-core",
3
- "version": "20.0.3",
3
+ "version": "20.4.0",
4
4
  "keywords": [
5
5
  "angular",
6
6
  "signals",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "homepage": "https://github.com/mihajm/mmstack/blob/master/packages/router/core",
22
22
  "dependencies": {
23
- "@mmstack/primitives": "^20.0.3",
23
+ "@mmstack/primitives": "^20.4.0",
24
24
  "tslib": "^2.3.0"
25
25
  },
26
26
  "peerDependencies": {