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