@mmstack/router-core
Version:
Core utilities and Signal-based primitives for enhancing development with `@angular/router`. This library provides helpers for common routing tasks, reactive integration with router state, and intelligent module preloading.
1 lines • 177 kB
Source Map (JSON)
{"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJvdXRlLXByZWRpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9jb3JlL3NyYy9saWIvdXRpbC9jcmVhdGUtcm91dGUtcHJlZGljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsZ0JBQWdCLENBQUMsYUFBcUI7SUFJN0MsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsTUFBTSxZQUFZLEdBQTJCLEVBQUUsQ0FBQztJQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLElBQVk7SUFDdkMsTUFBTSxjQUFjLEdBQUcsSUFBSTtTQUN4QixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQy9CLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLEVBQUU7UUFDM0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLEdBQ2xFLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFeEMsSUFBSSx1QkFBaUUsQ0FBQztRQUN0RSxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQyx1QkFBdUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTix1QkFBdUIsR0FBRyxDQUFDLG1CQUEyQixFQUFFLEVBQUUsQ0FDeEQsbUJBQW1CLEtBQUssY0FBYyxDQUFDO1FBQzNDLENBQUM7UUFFRCxNQUFNLDRCQUE0QixHQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUU3QyxPQUFPLENBQUMsaUJBQXlCLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsR0FDOUQsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUV0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssQ0FDN0MsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQ2YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQztnQkFDM0QsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUNsQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDdEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDO