{"version":3,"file":"guangxun-breadcrumb.mjs","sources":["../../../projects/guangxun-breadcrumb/src/lib/guangxun-breadcrumb.token.ts","../../../projects/guangxun-breadcrumb/src/lib/guangxun-breadcrumb.service.ts","../../../projects/guangxun-breadcrumb/src/lib/guangxun-breadcrumb.component.ts","../../../projects/guangxun-breadcrumb/src/lib/guangxun-breadcrumb.module.ts","../../../projects/guangxun-breadcrumb/src/public-api.ts","../../../projects/guangxun-breadcrumb/src/guangxun-breadcrumb.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {BreadcrumbConfig} from './guangxun-breadcrumb.type';\n\nexport const BREADCRUMB_CONFIG = new InjectionToken<BreadcrumbConfig>('BREADCRUMB_CONFIG');\n","import {Inject, inject, Injectable, Optional} from '@angular/core';\nimport {BehaviorSubject, filter} from 'rxjs';\nimport {Breadcrumb, BreadcrumbConfig} from './guangxun-breadcrumb.type';\nimport {ActivatedRouteSnapshot, NavigationEnd, Router} from '@angular/router';\nimport { BREADCRUMB_CONFIG } from './guangxun-breadcrumb.token';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GuangxunBreadcrumbService {\n  _router = inject(Router);\n  private _breadcrumbs = new BehaviorSubject<Breadcrumb[]>([]);\n  public readonly breadcrumbs$ = this._breadcrumbs.asObservable();\n\n  constructor(@Optional() @Inject(BREADCRUMB_CONFIG) private _config?: BreadcrumbConfig,) {\n    this._router.events.pipe(filter((e) => e instanceof NavigationEnd)).subscribe(() => {\n      const root = this._router.routerState.snapshot.root;\n      let breadcrumbs = this._buildBreadcrumbs(root);\n\n      const isAtHome = this._router.url === '/' || this._router.url === '/home';\n\n      if (!isAtHome) {\n        breadcrumbs = [\n          {\n            label: 'ROUTES.HOME',\n            link: '/home',\n            isClickable: true,\n          },\n          ...breadcrumbs,\n        ];\n      }\n\n      // 確保最後一層不可點擊\n      if (breadcrumbs.length > 0) {\n        breadcrumbs[breadcrumbs.length - 1].isClickable = false;\n      }\n\n      this._breadcrumbs.next(breadcrumbs);\n    });\n  }\n\n  private _buildBreadcrumbs(\n    route: ActivatedRouteSnapshot,\n    url: string = '',\n    breadcrumbs: Breadcrumb[] = [],\n  ): Breadcrumb[] {\n    const children: ActivatedRouteSnapshot[] = route.children;\n\n    if (route.data?.['breadcrumb']) {\n      const segment = route.url.map((s) => s.path).join('/');\n      const fullPath = segment ? `${url}/${segment}` : url;\n\n      const crumb: Breadcrumb = {\n        ...route.data['breadcrumb'],\n        link: fullPath || '/',\n        isClickable: route.data['breadcrumb'].isClickable !== false,\n      };\n\n      breadcrumbs.push(crumb);\n    }\n\n    for (const child of children) {\n      return this._buildBreadcrumbs(\n        child,\n        `${url}/${child.url.map((s) => s.path).join('/')}`,\n        breadcrumbs,\n      );\n    }\n\n    return breadcrumbs;\n  }\n\n}\n","import {Component, OnInit} from '@angular/core';\nimport {Breadcrumb} from './guangxun-breadcrumb.type';\nimport {GuangxunBreadcrumbService} from './guangxun-breadcrumb.service';\nimport {RouterLink, RouterModule} from '@angular/router';\nimport {CommonModule, NgIf} from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n  selector: 'lib-guangxun-breadcrumb',\n  imports: [\n    CommonModule, TranslateModule, RouterModule\n  ],\n  standalone: true,\n  template: `\n    <nav aria-label=\"breadcrumb\">\n      <ul class=\"breadcrumb\">\n        <li *ngFor=\"let i of breadcrumbs; let last = last\" class=\"breadcrumb-item\">\n          <ng-container *ngIf=\"i.isClickable && !last; else noLink\">\n            <a [routerLink]=\"i.link\">{{ i.label | translate }}</a>\n          </ng-container>\n\n          <ng-template #noLink>\n            <span>{{ i.label | translate }}</span>\n          </ng-template>\n        </li>\n      </ul>\n    </nav>\n  `,\n  styles: `\n    .breadcrumb {\n      list-style: none;\n      display: flex;\n      align-items: center;\n      padding: 0;\n      margin: 0;\n\n      > .breadcrumb-item {\n        display: flex;\n        align-items: center;\n\n        &:not(:first-child)::before {\n          content: '>';\n          color: hsla(0, 0%, 90%, 1);\n          margin-left: 1rem;\n          margin-right: 1rem;\n        }\n\n        a {\n          text-decoration: none;\n          color: hsla(197, 6%, 56%, 1);\n        }\n\n        span {\n          color: hsla(0, 0%, 90%, 1);\n        }\n      }\n    }`\n})\nexport class GuangxunBreadcrumbComponent implements OnInit{\n  constructor(private _breadcrumbService: GuangxunBreadcrumbService) {}\n  breadcrumbs: Breadcrumb[] = [];\n  ngOnInit(): void {\n    this._breadcrumbService.breadcrumbs$.subscribe((data) => {\n      this.breadcrumbs = data;\n    });\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { GuangxunBreadcrumbComponent } from './guangxun-breadcrumb.component';\nimport { BREADCRUMB_CONFIG } from './guangxun-breadcrumb.token';\nimport { BreadcrumbConfig } from './guangxun-breadcrumb.type';\n\n@NgModule({\n  imports: [CommonModule, RouterModule, TranslateModule , GuangxunBreadcrumbComponent],\n  exports: [GuangxunBreadcrumbComponent]\n})\nexport class GuangxunBreadcrumbModule {\n  static forRoot(config: BreadcrumbConfig): ModuleWithProviders<GuangxunBreadcrumbModule> {\n    return {\n      ngModule: GuangxunBreadcrumbModule,\n      providers: [\n        {\n          provide: BREADCRUMB_CONFIG,\n          useValue: config,\n        },\n      ],\n    };\n  }\n}\n","/*\n * Public API Surface of guangxun-breadcrumb\n */\n\nexport * from './lib/guangxun-breadcrumb.component';\nexport * from './lib/guangxun-breadcrumb.service';\nexport * from './lib/guangxun-breadcrumb.module';\nexport * from './lib/guangxun-breadcrumb.type';\nexport * from './lib/guangxun-breadcrumb.token';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GuangxunBreadcrumbService"],"mappings":"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"}