{"version":3,"file":"xng-breadcrumb.mjs","sources":["../../../../libs/xng-breadcrumb/src/lib/breadcrumb-item.directive.ts","../../../../libs/xng-breadcrumb/src/lib/breadcrumb.service.ts","../../../../libs/xng-breadcrumb/src/lib/breadcrumb.component.ts","../../../../libs/xng-breadcrumb/src/lib/breadcrumb.component.html","../../../../libs/xng-breadcrumb/src/lib/breadcrumb.module.ts","../../../../libs/xng-breadcrumb/src/index.ts","../../../../libs/xng-breadcrumb/src/xng-breadcrumb.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * This directive is used to customize the breadcrumb label behavior\n * *xngBreadcrumbItem directive can be used in the child element of xng-breadcrumb\n * Usage: refer to the demo - app.component.html\n */\n@Directive({\n  selector: '[xngBreadcrumbItem]',\n})\nexport class BreadcrumbItemDirective {}\n","import { Injectable } from '@angular/core';\nimport {\n  ActivatedRoute,\n  ActivatedRouteSnapshot,\n  GuardsCheckEnd,\n  Router,\n} from '@angular/router';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { Breadcrumb } from './types/breadcrumb';\nimport {\n  BreadcrumbFunction,\n  BreadcrumbObject,\n} from './types/breadcrumb.config';\n\ntype BreadcrumbConfig = BreadcrumbObject | BreadcrumbFunction | string;\ntype StoreMatcherKey = 'routeLink' | 'routeRegex' | 'alias';\nexport type BreadcrumbDefinition = Breadcrumb & BreadcrumbObject;\nconst PATH_PARAM = {\n  PREFIX: ':',\n  REGEX_IDENTIFIER: '/:[^/]+',\n  REGEX_REPLACER: '/[^/]+',\n};\nconst ALIAS_PREFIX = '@';\nconst isNonEmpty = (obj: unknown): boolean => {\n  return obj && Object.keys(obj).length > 0;\n};\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class BreadcrumbService {\n  private baseHref = '/';\n\n  /**\n   * dynamicBreadcrumbStore holds information about dynamically updated breadcrumbs.\n   * Breadcrumbs can be set from anywhere (component, service) in the app.\n   * On every breadcrumb update check this store and use the info if available.\n   */\n  private dynamicBreadcrumbStore: BreadcrumbDefinition[] = [];\n\n  /**\n   * breadcrumbList for the current route\n   * When breadcrumb info is changed dynamically, check if the currentBreadcrumbs is effected\n   * If effected, update the change and emit a new stream\n   */\n  private currentBreadcrumbs: BreadcrumbDefinition[] = [];\n  private previousBreadcrumbs: BreadcrumbDefinition[] = [];\n\n  /**\n   * Breadcrumbs observable to be subscribed by BreadcrumbComponent\n   * Emits on every route change OR dynamic update of breadcrumb\n   */\n  private breadcrumbs = new BehaviorSubject<BreadcrumbDefinition[]>([]);\n  public breadcrumbs$ = this.breadcrumbs.asObservable();\n\n  constructor(private activatedRoute: ActivatedRoute, private router: Router) {\n    this.detectRouteChanges();\n  }\n\n  /**\n   * Whenever route changes build breadcrumb list again\n   */\n  private detectRouteChanges() {\n    // Special case where breadcrumb service & component instantiates after a route is navigated.\n    // Ex: put breadcrumbs within *ngIf and this.router.events would be empty\n    // This check is also required where  { initialNavigation: 'enabledBlocking' } is applied to routes\n    this.setupBreadcrumbs(this.activatedRoute.snapshot);\n\n    this.router.events\n      .pipe(\n        filter(\n          (event): event is GuardsCheckEnd => event instanceof GuardsCheckEnd\n        )\n      )\n      .subscribe((event) => {\n        // activatedRoute doesn't carry data when shouldReuseRoute returns false\n        // use the event data with GuardsCheckEnd as workaround\n        // Check for shouldActivate in case where the authGuard returns false the breadcrumbs shouldn't be changed\n        if (event.shouldActivate) {\n          this.setupBreadcrumbs(event.state.root);\n        }\n      });\n  }\n\n  private setupBreadcrumbs(activatedRouteSnapshot: ActivatedRouteSnapshot) {\n    this.previousBreadcrumbs = this.currentBreadcrumbs;\n    // breadcrumb label for base OR root path. Usually, this can be set as 'Home'\n    const rootBreadcrumb = this.getRootBreadcrumb();\n    this.currentBreadcrumbs = rootBreadcrumb ? [rootBreadcrumb] : [];\n    this.prepareBreadcrumbList(activatedRouteSnapshot, this.baseHref);\n  }\n\n  private getRootBreadcrumb(): Breadcrumb | void {\n    const rootConfig = this.router.config.find((config) => config.path === '');\n    const rootBreadcrumb = this.extractObject(rootConfig?.data?.breadcrumb);\n    const storeItem = this.getFromStore(rootBreadcrumb.alias, '/');\n\n    if (isNonEmpty(rootBreadcrumb) || isNonEmpty(storeItem)) {\n      return {\n        ...storeItem,\n        ...rootBreadcrumb,\n        routeLink: this.baseHref,\n        ...this.getQueryParamsFromPreviousList('/'),\n      };\n    }\n  }\n\n  private prepareBreadcrumbItem(\n    activatedRouteSnapshot: ActivatedRouteSnapshot,\n    routeLinkPrefix: string\n  ): BreadcrumbDefinition {\n    const { path, breadcrumb } = this.parseRouteData(\n      activatedRouteSnapshot.routeConfig\n    );\n    const resolvedSegment = this.resolvePathSegment(\n      path,\n      activatedRouteSnapshot\n    );\n    const routeLink = `${routeLinkPrefix}${resolvedSegment}`;\n    const storeItem = this.getFromStore(breadcrumb.alias, routeLink);\n\n    const label = this.extractLabel(\n      storeItem?.label || breadcrumb?.label,\n      resolvedSegment\n    );\n    let isAutoGeneratedLabel = false;\n    let autoGeneratedLabel = '';\n    if (!label) {\n      isAutoGeneratedLabel = true;\n      autoGeneratedLabel = resolvedSegment;\n    }\n\n    return {\n      ...storeItem,\n      ...breadcrumb,\n      label: isAutoGeneratedLabel ? autoGeneratedLabel : label,\n      routeLink,\n      isAutoGeneratedLabel,\n      ...this.getQueryParamsFromPreviousList(routeLink),\n    };\n  }\n\n  private prepareBreadcrumbList(\n    activatedRouteSnapshot: ActivatedRouteSnapshot,\n    routeLinkPrefix: string\n  ): Breadcrumb[] | void {\n    if (activatedRouteSnapshot.routeConfig?.path) {\n      const breadcrumbItem = this.prepareBreadcrumbItem(\n        activatedRouteSnapshot,\n        routeLinkPrefix\n      );\n      this.currentBreadcrumbs.push(breadcrumbItem);\n\n      if (activatedRouteSnapshot.firstChild) {\n        return this.prepareBreadcrumbList(\n          activatedRouteSnapshot.firstChild,\n          breadcrumbItem.routeLink + '/'\n        );\n      }\n    } else if (activatedRouteSnapshot.firstChild) {\n      return this.prepareBreadcrumbList(\n        activatedRouteSnapshot.firstChild,\n        routeLinkPrefix\n      );\n    }\n    const lastCrumb =\n      this.currentBreadcrumbs[this.currentBreadcrumbs.length - 1];\n    this.setQueryParamsForActiveBreadcrumb(lastCrumb, activatedRouteSnapshot);\n\n    // remove breadcrumb items that needs to be hidden\n    const breadcrumbsToShow = this.currentBreadcrumbs.filter(\n      (item) => !item.skip\n    );\n\n    this.breadcrumbs.next(breadcrumbsToShow);\n  }\n\n  private getFromStore(alias: string, routeLink: string): BreadcrumbDefinition {\n    return this.dynamicBreadcrumbStore.find((item) => {\n      return (\n        (alias && alias === item.alias) ||\n        (routeLink && routeLink === item.routeLink) ||\n        this.matchRegex(routeLink, item.routeRegex)\n      );\n    });\n  }\n\n  /**\n   * use exact match instead of regexp.test\n   * for /mentor/[^/]+ we should match '/mentor/12' but not '/mentor/12/abc'\n   */\n  private matchRegex(routeLink: string, routeRegex: string) {\n    const match = routeLink.match(new RegExp(routeRegex));\n    return match?.[0] === routeLink;\n  }\n\n  /**\n   * if the path segment has route params, read the param value from url\n   * for each segment of route this gets called\n   *\n   * for mentor/:id/view - it gets called with mentor, :id, view 3 times\n   */\n  private resolvePathSegment(\n    segment: string,\n    activatedRouteSnapshot: ActivatedRouteSnapshot\n  ) {\n    //quirk -segment can be defined as view/:id in route config in which case you need to make it view/<resolved-param>\n    if (segment.includes(PATH_PARAM.PREFIX)) {\n      Object.entries(activatedRouteSnapshot.params).forEach(([key, value]) => {\n        segment = segment.replace(`:${key}`, `${value}`);\n      });\n    }\n    return segment;\n  }\n\n  /**\n   * queryParams & fragments for previous breadcrumb path are copied over to new list\n   */\n  private getQueryParamsFromPreviousList(routeLink: string): Breadcrumb {\n    const { queryParams, fragment } =\n      this.previousBreadcrumbs.find((item) => item.routeLink === routeLink) ||\n      {};\n    return { queryParams, fragment };\n  }\n\n  /**\n   * set current activated route query params to the last breadcrumb item\n   */\n  private setQueryParamsForActiveBreadcrumb(\n    lastItem: Breadcrumb,\n    activatedRouteSnapshot: ActivatedRouteSnapshot\n  ) {\n    if (lastItem) {\n      const { queryParams, fragment } = activatedRouteSnapshot;\n      lastItem.queryParams = queryParams ? { ...queryParams } : undefined;\n      lastItem.fragment = fragment;\n    }\n  }\n\n  /**\n   * For a specific route, breadcrumb can be defined either on parent OR it's child(which has empty path)\n   * When both are defined, child takes precedence\n   *\n   * Ex: Below we are setting breadcrumb on both parent and child.\n   * So, child takes precedence and \"Defined On Child\" is displayed for the route 'home'\n   * { path: 'home', loadChildren: () => import('./home/home.module').then((m) => m.HomeModule) , data: {breadcrumb: \"Defined On Module\"}}\n   *                                                AND\n   * children: [\n   *   { path: '', component: ShowUserComponent, data: {breadcrumb: \"Defined On Child\" }\n   * ]\n   */\n  private parseRouteData(routeConfig) {\n    const { path, data } = routeConfig;\n    const breadcrumb = this.mergeWithBaseChildData(\n      routeConfig,\n      data?.breadcrumb\n    );\n\n    return { path, breadcrumb };\n  }\n\n  /**\n   * get empty children of a module or Component. Empty child is the one with path: ''\n   * When parent and it's children (that has empty route path) define data merge them both with child taking precedence\n   */\n  private mergeWithBaseChildData(\n    routeConfig,\n    config: BreadcrumbConfig\n  ): BreadcrumbObject {\n    if (!routeConfig) {\n      return this.extractObject(config);\n    }\n\n    let baseChild;\n    if (routeConfig.loadChildren) {\n      // To handle a module with empty child route\n      baseChild = routeConfig._loadedRoutes.find((route) => route.path === '');\n    } else if (routeConfig.children) {\n      // To handle a component with empty child route\n      baseChild = routeConfig.children.find((route) => route.path === '');\n    }\n\n    const childConfig = baseChild?.data?.breadcrumb;\n    return childConfig\n      ? this.mergeWithBaseChildData(baseChild, {\n          ...this.extractObject(config),\n          ...this.extractObject(childConfig),\n        })\n      : this.extractObject(config);\n  }\n\n  /**\n   * Update breadcrumb dynamically\n   *\n   * key can be a path | alias\n   *\n   * 1) Using complete route path. route can be passed the same way you define angular routes\n   * - path can be passed as 'exact path(routeLink)' or 'path with params(routeRegex)'\n   * - update label Ex: set('/mentor', 'Mentor'), set('/mentor/:id', 'Mentor Details')\n   * - change visibility Ex: set('/mentor/:id/edit', { skip: true })\n   * ------------------------------------------ OR ------------------------------------------\n   * 2) Using route alias (prefixed with '@'). alias should be unique for a route\n   * - update label Ex: set('@mentor', 'Enabler')\n   * - change visibility Ex: set('@mentorEdit', { skip: true })\n   *\n   *\n   * value can be string | BreadcrumbObject | BreadcrumbFunction\n   */\n  set(key: string, breadcrumb: string | BreadcrumbObject) {\n    const breadcrumbObject = this.extractObject(breadcrumb);\n    let updateArgs: [StoreMatcherKey, BreadcrumbDefinition];\n\n    if (key.startsWith(ALIAS_PREFIX)) {\n      updateArgs = ['alias', { ...breadcrumbObject, alias: key.slice(1) }];\n    } else if (key.includes(PATH_PARAM.PREFIX)) {\n      updateArgs = [\n        'routeRegex',\n        { ...breadcrumbObject, routeRegex: this.buildRegex(key) },\n      ];\n    } else {\n      updateArgs = [\n        'routeLink',\n        { ...breadcrumbObject, routeLink: this.ensureLeadingSlash(key) },\n      ];\n    }\n\n    // For this route if previously a breadcrumb is not defined that sets isAutoGeneratedLabel: true\n    // change it to false since this is user supplied value\n    updateArgs[1].isAutoGeneratedLabel = false;\n\n    this.updateStore(...updateArgs);\n    this.updateCurrentBreadcrumbs(...updateArgs);\n  }\n\n  /**\n   * Update the store to reuse for dynamic declarations\n   * If the store already has this route definition update it, else add\n   */\n  private updateStore(key: string, breadcrumb: BreadcrumbDefinition) {\n    const storeItemIndex = this.dynamicBreadcrumbStore.findIndex((item) => {\n      return breadcrumb[key] === item[key];\n    });\n    if (storeItemIndex > -1) {\n      this.dynamicBreadcrumbStore[storeItemIndex] = {\n        ...this.dynamicBreadcrumbStore[storeItemIndex],\n        ...breadcrumb,\n      };\n    } else {\n      this.dynamicBreadcrumbStore.push({ ...breadcrumb });\n    }\n  }\n\n  /**\n   * If breadcrumb is present in current breadcrumbs update it and emit new stream\n   */\n  private updateCurrentBreadcrumbs(\n    key: string,\n    breadcrumb: BreadcrumbDefinition\n  ) {\n    const itemIndex = this.currentBreadcrumbs.findIndex((item) => {\n      return key === 'routeRegex'\n        ? this.matchRegex(item.routeLink, breadcrumb[key])\n        : breadcrumb[key] === item[key];\n    });\n    if (itemIndex > -1) {\n      this.currentBreadcrumbs[itemIndex] = {\n        ...this.currentBreadcrumbs[itemIndex],\n        ...breadcrumb,\n      };\n      const breadcrumbsToShow = this.currentBreadcrumbs.filter(\n        (item) => !item.skip\n      );\n      this.breadcrumbs.next([...breadcrumbsToShow]);\n    }\n  }\n\n  /**\n   * For a route with path param, we create regex dynamically from angular route syntax\n   * '/mentor/:id' becomes '/mentor/[^/]',\n   * breadcrumbService.set('/mentor/:id', 'Uday') should update 'Uday' as label for '/mentor/2' OR 'mentor/ada'\n   */\n  private buildRegex(path: string) {\n    return this.ensureLeadingSlash(path).replace(\n      new RegExp(PATH_PARAM.REGEX_IDENTIFIER, 'g'),\n      PATH_PARAM.REGEX_REPLACER\n    );\n  }\n\n  private ensureLeadingSlash(path: string) {\n    return path.startsWith('/') ? path : `/${path}`;\n  }\n\n  /**\n   * In App's RouteConfig, breadcrumb can be defined as a string OR a function OR an object\n   *\n   * string: simple static breadcrumb label for a path\n   * function: callback that gets invoked with resolved path param\n   * object: additional data defined along with breadcrumb label that gets passed to *xngBreadcrumbItem directive\n   */\n  private extractLabel(config: BreadcrumbConfig, resolvedParam?: string) {\n    const label = typeof config === 'object' ? config.label : config;\n    if (typeof label === 'function') {\n      return label(resolvedParam);\n    }\n    return label;\n  }\n\n  private extractObject(config: BreadcrumbConfig): BreadcrumbObject {\n    // don't include {label} if config is undefined. This is important since we merge the configs\n    if (\n      config &&\n      (typeof config === 'string' || typeof config === 'function')\n    ) {\n      return { label: config };\n    }\n    return (config as BreadcrumbObject) || {};\n  }\n}\n","import {\n  Component,\n  ContentChild,\n  Input,\n  OnInit,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BreadcrumbItemDirective } from './breadcrumb-item.directive';\nimport { BreadcrumbDefinition, BreadcrumbService } from './breadcrumb.service';\n\n@Component({\n  selector: 'xng-breadcrumb',\n  templateUrl: './breadcrumb.component.html',\n  styleUrls: ['./breadcrumb.component.css'],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class BreadcrumbComponent implements OnInit {\n  breadcrumbs$: Observable<BreadcrumbDefinition[]>;\n  separatorTemplate: TemplateRef<void>;\n  private _separator = '/';\n\n  /**\n   * Breadcrumb item can be customized with this template\n   * Template context is provided label, additional info, first and last indexes\n   * Use cases:\n   * 1) Add an icon along with label\n   * 2) i18n. {{breadcrumb | translate}} or {{breadcrumb | transloco}}\n   * 3) Change text case {{breadcrumb | titlecase}}\n   */\n  @ContentChild(BreadcrumbItemDirective, { static: false, read: TemplateRef })\n  itemTemplate;\n\n  /**\n   * If true, breadcrumb is auto generated even without any mapping label\n   * Default label is same as route segment\n   */\n  @Input() autoGenerate = true;\n\n  /**\n   * By default query params will be preserved with breadcrumbs\n   */\n  @Input() preserveQueryParams = true;\n\n  /**\n   * By default query fragments will be preserved with breadcrumbs\n   */\n  @Input() preserveFragment = true;\n\n  /**\n   * custom class provided by consumer to increase specificity\n   * This will benefit to override styles that are conflicting\n   */\n  @Input() class = '';\n\n  /**\n   * anchorTarget = \"_blank\" makes the breadcrumb link open in a new tab\n   */\n  @Input() anchorTarget: '_blank' | undefined;\n\n  /**\n   * separator between breadcrumbs, defaults to '/'.\n   * User can customize separator either by passing a String or Template\n   *\n   * String --> Ex: <xng-breadcrumb separator=\"-\"> </xng-breadcrumb>\n   *\n   * Template --> Ex: <xng-breadcrumb [separator]=\"separatorTemplate\"> </xng-breadcrumb>\n   * <ng-template #separatorTemplate><mat-icon>arrow_right</mat-icon></ng-template>\n   */\n  @Input('separator')\n  set separator(value: string | TemplateRef<void>) {\n    if (value instanceof TemplateRef) {\n      this.separatorTemplate = value;\n      this._separator = undefined;\n    } else {\n      this.separatorTemplate = undefined;\n      this._separator = value || '/';\n    }\n  }\n  get separator() {\n    return this._separator;\n  }\n\n  setupMessage = 'not set up yet';\n  someParameterValue = null;\n\n  constructor(\n    private breadcrumbService: BreadcrumbService,\n    activateRoute: ActivatedRoute\n  ) {\n    // breadcrumb inside ngIf works only this way\n    activateRoute.params.subscribe((params) => {\n      this.setupComponent(params['someParam']);\n    });\n  }\n\n  setupComponent(someParam) {\n    this.setupMessage = 'set up at ' + new Date();\n    this.someParameterValue = someParam;\n  }\n\n  ngOnInit() {\n    this.breadcrumbs$ = this.breadcrumbService.breadcrumbs$.pipe(\n      map((breadcrumbs: BreadcrumbDefinition[]) => {\n        return breadcrumbs\n          .filter((breadcrumb: BreadcrumbDefinition) => {\n            // Usually, breadcrumb list can contain a combination of auto generated and user specified labels\n            // this filters autogenerated labels in case of \"[autoGenerate]: false\"\n            if (this.autoGenerate) {\n              return true;\n            }\n            return !breadcrumb.isAutoGeneratedLabel;\n          })\n          .map((breadcrumb: BreadcrumbDefinition) => {\n            // Do not mutate breadcrumb as its source of truth.\n            // There can be scenarios where we can have multiple xng-breadcrumb instances in page\n            const { routeInterceptor, routeLink } = breadcrumb;\n            return {\n              ...breadcrumb,\n              routeLink: routeInterceptor?.(routeLink, breadcrumb) || routeLink,\n            };\n          });\n      })\n    );\n  }\n}\n","<nav aria-label=\"breadcrumb\" class=\"xng-breadcrumb-root\" [ngClass]=\"class\">\n  <ol class=\"xng-breadcrumb-list\">\n    <ng-container\n      *ngFor=\"\n        let breadcrumb of breadcrumbs$ | async;\n        last as isLast;\n        first as isFirst;\n        index as index;\n        count as count\n      \"\n    >\n      <li class=\"xng-breadcrumb-item\">\n        <a\n          *ngIf=\"!isLast\"\n          class=\"xng-breadcrumb-link\"\n          [ngClass]=\"{ 'xng-breadcrumb-link-disabled': breadcrumb.disable }\"\n          [attr.aria-disabled]=\"breadcrumb.disable\"\n          [attr.tabIndex]=\"breadcrumb.disable ? -1 : 0\"\n          role=\"button\"\n          rel=\"noopener noreferrer\"\n          [routerLink]=\"\n            breadcrumb.routeInterceptor\n              ? breadcrumb.routeInterceptor(breadcrumb.routeLink, breadcrumb)\n              : breadcrumb.routeLink\n          \"\n          [queryParams]=\"\n            preserveQueryParams ? breadcrumb.queryParams : undefined\n          \"\n          [fragment]=\"preserveFragment ? breadcrumb.fragment : undefined\"\n          [target]=\"anchorTarget ? anchorTarget : '_self'\"\n        >\n          <ng-container\n            *ngTemplateOutlet=\"\n              itemTemplate;\n              context: {\n                $implicit: breadcrumb.label,\n                info: breadcrumb.info,\n                last: isLast,\n                first: isFirst,\n                index: index,\n                count: count\n              }\n            \"\n          ></ng-container>\n          <ng-container *ngIf=\"!itemTemplate\">{{\n            breadcrumb.label\n          }}</ng-container>\n        </a>\n\n        <label *ngIf=\"isLast\" class=\"xng-breadcrumb-trail\">\n          <ng-container\n            *ngTemplateOutlet=\"\n              itemTemplate;\n              context: {\n                $implicit: breadcrumb.label,\n                info: breadcrumb.info,\n                last: isLast,\n                first: isFirst,\n                index: index,\n                count: count\n              }\n            \"\n          ></ng-container>\n          <ng-container *ngIf=\"!itemTemplate\">{{\n            breadcrumb.label\n          }}</ng-container>\n        </label>\n      </li>\n\n      <li *ngIf=\"!isLast\" class=\"xng-breadcrumb-separator\" aria-hidden=\"true\">\n        <ng-container *ngTemplateOutlet=\"separatorTemplate\"></ng-container>\n        <ng-container *ngIf=\"!separatorTemplate\">{{ separator }}</ng-container>\n      </li>\n    </ng-container>\n  </ol>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BreadcrumbItemDirective } from './breadcrumb-item.directive';\nimport { BreadcrumbComponent } from './breadcrumb.component';\n\n@NgModule({\n  declarations: [BreadcrumbComponent, BreadcrumbItemDirective],\n  imports: [CommonModule, RouterModule],\n  exports: [BreadcrumbComponent, BreadcrumbItemDirective],\n})\nexport class BreadcrumbModule {}\n","/*\n * Public API Surface of xng-breadcrumb\n */\n\nexport * from './lib/breadcrumb-item.directive';\nexport * from './lib/breadcrumb.component';\nexport * from './lib/breadcrumb.module';\nexport * from './lib/breadcrumb.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.BreadcrumbService","i2"],"mappings":"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"}