{"version":3,"file":"reuse-tab.mjs","sources":["../../../../packages/abc/reuse-tab/reuse-tab-context-menu.component.ts","../../../../packages/abc/reuse-tab/reuse-tab-context-menu.component.html","../../../../packages/abc/reuse-tab/reuse-tab-context.service.ts","../../../../packages/abc/reuse-tab/reuse-tab-context.component.ts","../../../../packages/abc/reuse-tab/reuse-tab-context.directive.ts","../../../../packages/abc/reuse-tab/reuse-tab.interfaces.ts","../../../../packages/abc/reuse-tab/reuse-tab.cache.ts","../../../../packages/abc/reuse-tab/reuse-tab.state.ts","../../../../packages/abc/reuse-tab/reuse-tab.service.ts","../../../../packages/abc/reuse-tab/reuse-tab.component.ts","../../../../packages/abc/reuse-tab/reuse-tab.component.html","../../../../packages/abc/reuse-tab/reuse-tab.strategy.ts","../../../../packages/abc/reuse-tab/reuse-tab.module.ts","../../../../packages/abc/reuse-tab/provide.ts","../../../../packages/abc/reuse-tab/reuse-tab.ts"],"sourcesContent":["import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewEncapsulation,\n  inject\n} from '@angular/core';\n\nimport { DelonLocaleService } from '@delon/theme';\nimport { NzMenuDirective, NzMenuItemComponent } from 'ng-zorro-antd/menu';\n\nimport {\n  CloseType,\n  ReuseContextCloseEvent,\n  ReuseContextI18n,\n  ReuseCustomContextMenu,\n  ReuseItem\n} from './reuse-tab.interfaces';\n\n@Component({\n  selector: 'reuse-tab-context-menu',\n  templateUrl: './reuse-tab-context-menu.component.html',\n  host: {\n    '(document:click)': 'closeMenu($event)',\n    '(document:contextmenu)': 'closeMenu($event)'\n  },\n  preserveWhitespaces: false,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n  imports: [NzMenuDirective, NzMenuItemComponent]\n})\nexport class ReuseTabContextMenuComponent implements OnInit {\n  private readonly i18nSrv = inject(DelonLocaleService);\n\n  private _i18n!: ReuseContextI18n;\n  @Input()\n  set i18n(value: ReuseContextI18n) {\n    this._i18n = {\n      ...this.i18nSrv.getData('reuseTab'),\n      ...value\n    };\n  }\n  get i18n(): ReuseContextI18n {\n    return this._i18n;\n  }\n  @Input() item!: ReuseItem;\n  @Input() event!: MouseEvent;\n  @Input() customContextMenu!: ReuseCustomContextMenu[];\n  @Output() readonly close = new EventEmitter<ReuseContextCloseEvent>();\n\n  get includeNonCloseable(): boolean {\n    return this.event.ctrlKey;\n  }\n\n  private notify(type: CloseType): void {\n    this.close.next({\n      type,\n      item: this.item,\n      includeNonCloseable: this.includeNonCloseable\n    });\n  }\n\n  ngOnInit(): void {\n    if (this.includeNonCloseable) this.item.closable = true;\n  }\n\n  click(e: MouseEvent, type: CloseType, custom?: ReuseCustomContextMenu): void {\n    e.preventDefault();\n    e.stopPropagation();\n    if (type === 'close' && !this.item.closable) return;\n    if (type === 'closeRight' && this.item.last) return;\n\n    if (custom) {\n      if (this.isDisabled(custom)) return;\n      custom.fn(this.item, custom);\n    }\n    this.notify(type);\n  }\n\n  isDisabled(custom: ReuseCustomContextMenu): boolean {\n    return custom.disabled ? custom.disabled(this.item) : false;\n  }\n\n  closeMenu(event: MouseEvent): void {\n    if (event.type === 'click' && event.button === 2) return;\n    this.notify(null);\n  }\n}\n","<ul nz-menu>\n  @if (item.active) {\n    <li nz-menu-item (click)=\"click($event, 'refresh')\" data-type=\"refresh\" [innerHTML]=\"i18n.refresh\"></li>\n  }\n  <li\n    nz-menu-item\n    (click)=\"click($event, 'close')\"\n    data-type=\"close\"\n    [nzDisabled]=\"!item.closable\"\n    [innerHTML]=\"i18n.close\"\n  ></li>\n  <li nz-menu-item (click)=\"click($event, 'closeOther')\" data-type=\"closeOther\" [innerHTML]=\"i18n.closeOther\"></li>\n  <li\n    nz-menu-item\n    (click)=\"click($event, 'closeRight')\"\n    data-type=\"closeRight\"\n    [nzDisabled]=\"item.last\"\n    [innerHTML]=\"i18n.closeRight\"\n  ></li>\n  @if (customContextMenu!.length > 0) {\n    <li nz-menu-divider></li>\n    @for (i of customContextMenu; track $index) {\n      <li\n        nz-menu-item\n        [attr.data-type]=\"i.id\"\n        [nzDisabled]=\"isDisabled(i)\"\n        (click)=\"click($event, 'custom', i)\"\n        [innerHTML]=\"i.title\"\n      ></li>\n    }\n  }\n</ul>\n","import { ConnectionPositionPair, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Injectable, inject } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\n\nimport { ReuseTabContextMenuComponent } from './reuse-tab-context-menu.component';\nimport {\n  ReuseContextCloseEvent,\n  ReuseContextEvent,\n  ReuseContextI18n,\n  ReuseCustomContextMenu\n} from './reuse-tab.interfaces';\n\n@Injectable()\nexport class ReuseTabContextService {\n  private readonly overlay = inject(Overlay);\n\n  private ref: OverlayRef | null = null;\n  i18n?: ReuseContextI18n;\n\n  show: Subject<ReuseContextEvent> = new Subject<ReuseContextEvent>();\n  close: Subject<ReuseContextCloseEvent> = new Subject<ReuseContextCloseEvent>();\n\n  remove(): void {\n    if (!this.ref) return;\n    this.ref.detach();\n    this.ref.dispose();\n    this.ref = null;\n  }\n\n  open(context: ReuseContextEvent): void {\n    this.remove();\n    const { event, item, customContextMenu } = context;\n    const { x, y } = event;\n    const positions = [\n      new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),\n      new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' })\n    ];\n    const positionStrategy = this.overlay.position().flexibleConnectedTo({ x, y }).withPositions(positions);\n    this.ref = this.overlay.create({\n      positionStrategy,\n      panelClass: 'reuse-tab__cm',\n      scrollStrategy: this.overlay.scrollStrategies.close()\n    });\n    const comp = this.ref.attach(new ComponentPortal(ReuseTabContextMenuComponent));\n    const instance = comp.instance;\n    instance.i18n = this.i18n!;\n    instance.item = { ...item };\n    instance.customContextMenu = customContextMenu as ReuseCustomContextMenu[];\n    instance.event = event;\n\n    const sub$ = new Subscription();\n    sub$.add(\n      instance.close.subscribe((res: ReuseContextCloseEvent) => {\n        this.close.next(res);\n        this.remove();\n      })\n    );\n    comp.onDestroy(() => sub$.unsubscribe());\n  }\n}\n","import { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { ReuseTabContextService } from './reuse-tab-context.service';\nimport { ReuseContextCloseEvent, ReuseContextI18n } from './reuse-tab.interfaces';\n\n@Component({\n  selector: 'reuse-tab-context',\n  template: ``,\n  standalone: true\n})\nexport class ReuseTabContextComponent {\n  private readonly srv = inject(ReuseTabContextService);\n\n  @Input()\n  set i18n(value: ReuseContextI18n | undefined) {\n    this.srv.i18n = value;\n  }\n\n  @Output() readonly change = new EventEmitter<ReuseContextCloseEvent>();\n\n  constructor() {\n    this.srv.show.pipe(takeUntilDestroyed()).subscribe(context => this.srv.open(context));\n    this.srv.close.pipe(takeUntilDestroyed()).subscribe(res => this.change.emit(res));\n  }\n}\n","import { Directive, Input, inject } from '@angular/core';\n\nimport { ReuseTabContextService } from './reuse-tab-context.service';\nimport { ReuseCustomContextMenu, ReuseItem } from './reuse-tab.interfaces';\n\n@Directive({\n  selector: '[reuse-tab-context-menu]',\n  exportAs: 'reuseTabContextMenu',\n  host: {\n    '(contextmenu)': '_onContextMenu($event)'\n  },\n  standalone: true\n})\nexport class ReuseTabContextDirective {\n  private readonly srv = inject(ReuseTabContextService);\n\n  @Input('reuse-tab-context-menu') item!: ReuseItem;\n  @Input() customContextMenu!: ReuseCustomContextMenu[];\n\n  _onContextMenu(event: MouseEvent): void {\n    this.srv.show.next({\n      event,\n      item: this.item,\n      customContextMenu: this.customContextMenu\n    });\n    event.preventDefault();\n    event.stopPropagation();\n  }\n}\n","import { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { ReuseTabContextComponent } from './reuse-tab-context.component';\n\n/**\n * 复用匹配模式\n */\nexport enum ReuseTabMatchMode {\n  /**\n   * （推荐）按菜单 `Menu` 配置\n   *\n   * 可复用：\n   * - `{ text:'Dashboard' }`\n   * - `{ text:'Dashboard', reuse: true }`\n   *\n   * 不可复用：\n   * - `{ text:'Dashboard', reuse: false }`\n   */\n  Menu,\n  /**\n   * 按菜单 `Menu` 强制配置\n   *\n   * 可复用：\n   * - `{ text:'Dashboard', reuse: true }`\n   *\n   * 不可复用：\n   * - `{ text:'Dashboard' }`\n   * - `{ text:'Dashboard', reuse: false }`\n   */\n  MenuForce,\n  /**\n   * 对所有路由有效，可以配合 `excludes` 过滤无须复用路由\n   */\n  URL\n}\n\nexport type ReuseTabRouteParamMatchMode = 'strict' | 'loose';\n\nexport interface ReuseTitle {\n  text?: string;\n  i18n?: string;\n}\n\nexport interface ReuseTabCached {\n  title: ReuseTitle;\n\n  url: string;\n\n  /** 是否允许关闭，默认：`true` */\n  closable?: boolean;\n\n  /** 当前滚动条位置 */\n  position?: [number, number] | null;\n\n  _snapshot?: ActivatedRouteSnapshot;\n\n  _handle?: ReuseComponentHandle;\n}\n\nexport interface ReuseTabNotify {\n  /** 事件类型 */\n  active:\n    | 'add'\n    | 'override'\n    | 'title'\n    | 'clear'\n    | 'closable'\n    | 'close'\n    | 'closeRight'\n    | 'move'\n    | 'refresh'\n    | 'loadState';\n  url?: string;\n  title?: ReuseTitle;\n  item?: ReuseTabCached;\n  list?: ReuseTabCached[];\n  [key: string]: NzSafeAny;\n}\n\nexport interface ReuseItem {\n  url: string;\n  title: string;\n  closable: boolean;\n  index: number;\n  active: boolean;\n  last: boolean;\n  /** 当前滚动条位置 */\n  position?: [number, number] | null;\n}\n\nexport interface ReuseContextEvent {\n  event: MouseEvent;\n  item: ReuseItem;\n  comp?: ReuseTabContextComponent;\n  customContextMenu?: ReuseCustomContextMenu[];\n}\n\nexport type CloseType = 'close' | 'closeOther' | 'closeRight' | 'custom' | 'refresh' | null;\n\nexport interface ReuseContextCloseEvent {\n  type: CloseType;\n  item: ReuseItem;\n  includeNonCloseable: boolean;\n}\n\nexport interface ReuseContextI18n {\n  close?: string;\n  closeOther?: string;\n  closeRight?: string;\n  refresh?: string;\n}\n\nexport interface ReuseCustomContextMenu {\n  id: string;\n  title: string;\n  fn: (item: ReuseItem, menu: ReuseCustomContextMenu) => void;\n  disabled?: (item: ReuseItem) => boolean;\n}\n\nexport interface ReuseComponentHandle {\n  componentRef: ReuseComponentRef;\n}\n\nexport interface ReuseComponentRef {\n  instance: ReuseComponentInstance;\n}\n\nexport type ReuseHookTypes = '_onReuseInit' | '_onReuseDestroy';\n\nexport type ReuseHookOnReuseInitType = 'init' | 'refresh';\n\nexport interface ReuseComponentInstance {\n  _onReuseInit: (type: ReuseHookOnReuseInitType) => void;\n  _onReuseDestroy: () => void;\n  destroy: () => void;\n}\n\nexport type ReuseCanClose = (options: { item: ReuseItem; includeNonCloseable: boolean }) => Observable<boolean>;\n","import { InjectionToken } from '@angular/core';\n\nimport { ReuseTabCached, ReuseTitle } from './reuse-tab.interfaces';\n\n/**\n * Storage manager that can change rules by implementing `get`, `set` accessors\n */\nexport const REUSE_TAB_CACHED_MANAGER = new InjectionToken<ReuseTabCachedManager>('REUSE_TAB_CACHED_MANAGER');\n\nexport interface ReuseTabCachedManager {\n  list: ReuseTabCached[];\n  title: { [url: string]: ReuseTitle };\n  closable: { [url: string]: boolean };\n}\n\nexport class ReuseTabCachedManagerFactory implements ReuseTabCachedManager {\n  list: ReuseTabCached[] = [];\n  title: { [url: string]: ReuseTitle } = {};\n  closable: { [url: string]: boolean } = {};\n}\n","import { InjectionToken } from '@angular/core';\n\nimport type { ReuseItem } from './reuse-tab.interfaces';\n\nexport const REUSE_TAB_STORAGE_KEY = new InjectionToken<string>('REUSE_TAB_STORAGE_KEY');\n\nexport const REUSE_TAB_STORAGE_STATE = new InjectionToken<ReuseTabStorageState>('REUSE_TAB_STORAGE_STATE');\n\nexport interface ReuseTabStorageState {\n  get(key: string): ReuseItem[];\n\n  update(key: string, value: ReuseItem[]): boolean;\n\n  remove(key: string): void;\n}\n\nexport class ReuseTabLocalStorageState implements ReuseTabStorageState {\n  get(key: string): ReuseItem[] {\n    return JSON.parse(localStorage.getItem(key) || '[]') || [];\n  }\n\n  update(key: string, value: ReuseItem[]): boolean {\n    localStorage.setItem(key, JSON.stringify(value));\n    return true;\n  }\n\n  remove(key: string): void {\n    localStorage.removeItem(key);\n  }\n}\n","import { Injectable, Injector, OnDestroy, inject } from '@angular/core';\nimport {\n  ActivatedRoute,\n  ActivatedRouteSnapshot,\n  ExtraOptions,\n  NavigationEnd,\n  NavigationStart,\n  Router,\n  ROUTER_CONFIGURATION\n} from '@angular/router';\nimport { BehaviorSubject, Observable, take, timer, Unsubscribable } from 'rxjs';\n\nimport { Menu, MenuService } from '@delon/theme';\nimport { ScrollService } from '@delon/util/browser';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { REUSE_TAB_CACHED_MANAGER } from './reuse-tab.cache';\nimport {\n  ReuseComponentRef,\n  ReuseHookOnReuseInitType,\n  ReuseHookTypes,\n  ReuseTabCached,\n  ReuseTabMatchMode,\n  ReuseTabNotify,\n  ReuseTabRouteParamMatchMode,\n  ReuseTitle\n} from './reuse-tab.interfaces';\nimport { REUSE_TAB_STORAGE_KEY, REUSE_TAB_STORAGE_STATE } from './reuse-tab.state';\n\n@Injectable()\nexport class ReuseTabService implements OnDestroy {\n  private readonly injector = inject(Injector);\n  private readonly menuService = inject(MenuService);\n  private readonly cached = inject(REUSE_TAB_CACHED_MANAGER);\n  private readonly stateKey = inject(REUSE_TAB_STORAGE_KEY);\n  private readonly stateSrv = inject(REUSE_TAB_STORAGE_STATE);\n\n  private _inited = false;\n  private _max = 10;\n  private _keepingScroll = false;\n  private _cachedChange = new BehaviorSubject<ReuseTabNotify | null>(null);\n  private _router$?: Unsubscribable;\n  private removeUrlBuffer: string | null = null;\n  private positionBuffer: { [url: string]: [number, number] } = {};\n  componentRef?: ReuseComponentRef;\n  debug = false;\n  routeParamMatchMode: ReuseTabRouteParamMatchMode = 'strict';\n  mode = ReuseTabMatchMode.Menu;\n  /** 排除规则，限 `mode=URL` */\n  excludes: RegExp[] = [];\n  storageState = false;\n\n  private get snapshot(): ActivatedRouteSnapshot {\n    return this.injector.get(ActivatedRoute).snapshot;\n  }\n\n  // #region public\n\n  /**\n   * Get init status\n   *\n   * 是否已经初始化完成\n   */\n  get inited(): boolean {\n    return this._inited;\n  }\n\n  /**\n   * Current routing address\n   *\n   * 当前路由地址\n   */\n  get curUrl(): string {\n    return this.getUrl(this.snapshot);\n  }\n\n  /**\n   * 允许最多复用多少个页面，取值范围 `2-100`，值发生变更时会强制关闭且忽略可关闭条件\n   */\n  set max(value: number) {\n    this._max = Math.min(Math.max(value, 2), 100);\n    for (let i = this.cached.list.length; i > this._max; i--) {\n      this.cached.list.pop();\n    }\n  }\n  set keepingScroll(value: boolean) {\n    this._keepingScroll = value;\n    this.initScroll();\n  }\n  get keepingScroll(): boolean {\n    return this._keepingScroll;\n  }\n  keepingScrollContainer?: Element | null;\n  /** 获取已缓存的路由 */\n  get items(): ReuseTabCached[] {\n    return this.cached.list;\n  }\n  /** 获取当前缓存的路由总数 */\n  get count(): number {\n    return this.cached.list.length;\n  }\n  /** 订阅缓存变更通知 */\n  get change(): Observable<ReuseTabNotify | null> {\n    return this._cachedChange.asObservable(); // .pipe(filter(w => w !== null));\n  }\n  /** 自定义当前标题 */\n  set title(value: string | ReuseTitle) {\n    const url = this.curUrl;\n    if (typeof value === 'string') value = { text: value };\n    this.cached.title[url] = value;\n    this.di('update current tag title: ', value);\n    this._cachedChange.next({\n      active: 'title',\n      url,\n      title: value,\n      list: this.cached.list\n    });\n  }\n  /** 获取指定路径缓存所在位置，`-1` 表示无缓存 */\n  index(url: string): number {\n    return this.cached.list.findIndex(w => w.url === url);\n  }\n  /** 获取指定路径缓存是否存在 */\n  exists(url: string): boolean {\n    return this.index(url) !== -1;\n  }\n  /** 获取指定路径缓存 */\n  get(url?: string): ReuseTabCached | null {\n    return url ? this.cached.list.find(w => w.url === url) || null : null;\n  }\n  private remove(url: string | number, includeNonCloseable: boolean): boolean {\n    const idx = typeof url === 'string' ? this.index(url) : url;\n    const item = idx !== -1 ? this.cached.list[idx] : null;\n    if (!item || (!includeNonCloseable && !item.closable)) return false;\n\n    this.destroy(item._handle);\n\n    this.cached.list.splice(idx, 1);\n    delete this.cached.title[url];\n    return true;\n  }\n  /**\n   * 根据URL移除标签\n   *\n   * @param [includeNonCloseable=false] 是否强制包含不可关闭\n   */\n  close(url: string, includeNonCloseable: boolean = false): boolean {\n    this.removeUrlBuffer = url;\n\n    this.remove(url, includeNonCloseable);\n\n    this._cachedChange.next({ active: 'close', url, list: this.cached.list });\n\n    this.di('close tag', url);\n    return true;\n  }\n  /**\n   * 清除右边\n   *\n   * @param [includeNonCloseable=false] 是否强制包含不可关闭\n   */\n  closeRight(url: string, includeNonCloseable: boolean = false): boolean {\n    const start = this.index(url);\n    for (let i = this.count - 1; i > start; i--) {\n      this.remove(i, includeNonCloseable);\n    }\n\n    this.removeUrlBuffer = null;\n\n    this._cachedChange.next({ active: 'closeRight', url, list: this.cached.list });\n\n    this.di('close right tages', url);\n    return true;\n  }\n  /**\n   * 清除所有缓存\n   *\n   * @param [includeNonCloseable=false] 是否强制包含不可关闭\n   */\n  clear(includeNonCloseable: boolean = false): void {\n    this.cached.list.forEach(w => {\n      if (!includeNonCloseable && w.closable) this.destroy(w._handle);\n    });\n    this.cached.list = this.cached.list.filter(w => !includeNonCloseable && !w.closable);\n\n    this.removeUrlBuffer = null;\n\n    this._cachedChange.next({ active: 'clear', list: this.cached.list });\n\n    this.di('clear all catch');\n  }\n  /**\n   * 移动缓存数据\n   *\n   * @param url 要移动的URL地址\n   * @param position 新位置，下标从 `0` 开始\n   *\n   * @example\n   * ```\n   * // source\n   * [ '/a/1', '/a/2', '/a/3', '/a/4', '/a/5' ]\n   * move('/a/1', 2);\n   * // output\n   * [ '/a/2', '/a/3', '/a/1', '/a/4', '/a/5' ]\n   * move('/a/1', -1);\n   * // output\n   * [ '/a/2', '/a/3', '/a/4', '/a/5', '/a/1' ]\n   * ```\n   */\n  move(url: string, position: number): void {\n    const start = this.cached.list.findIndex(w => w.url === url);\n    if (start === -1) return;\n    const data = this.cached.list.slice();\n    data.splice(position < 0 ? data.length + position : position, 0, data.splice(start, 1)[0]);\n    this.cached.list = data;\n    this._cachedChange.next({\n      active: 'move',\n      url,\n      position,\n      list: this.cached.list\n    });\n  }\n  /**\n   * 强制关闭当前路由（包含不可关闭状态），并重新导航至 `newUrl` 路由\n   */\n  replace(newUrl: string): void {\n    const url = this.curUrl;\n    this.injector\n      .get(Router)\n      .navigateByUrl(newUrl)\n      .then(() => {\n        if (this.exists(url)) {\n          this.close(url, true);\n        } else {\n          this.removeUrlBuffer = url;\n        }\n      });\n  }\n  /**\n   * 获取标题，顺序如下：\n   *\n   * 1. 组件内使用 `ReuseTabService.title = 'new title'` 重新指定文本\n   * 2. 路由配置中 data 属性中包含 titleI18n > title\n   * 3. 菜单数据中 text 属性\n   *\n   * @param url 指定URL\n   * @param route 指定路由快照\n   */\n  getTitle(url: string, route?: ActivatedRouteSnapshot): ReuseTitle {\n    if (this.cached.title[url]) {\n      return this.cached.title[url];\n    }\n\n    if (route && route.data && (route.data.titleI18n || route.data.title)) {\n      return {\n        text: route.data.title,\n        i18n: route.data.titleI18n\n      } as ReuseTitle;\n    }\n\n    const menu = this.getMenu(url);\n    return menu ? { text: menu.text, i18n: menu.i18n } : { text: url };\n  }\n\n  /**\n   * 清除标题缓存\n   */\n  clearTitleCached(): void {\n    this.cached.title = {};\n  }\n  /** 自定义当前 `closable` 状态 */\n  set closable(value: boolean) {\n    const url = this.curUrl;\n    this.cached.closable[url] = value;\n    this.di('update current tag closable: ', value);\n    this._cachedChange.next({\n      active: 'closable',\n      closable: value,\n      list: this.cached.list\n    });\n  }\n  /**\n   * 获取 `closable` 状态，顺序如下：\n   *\n   * 1. 组件内使用 `ReuseTabService.closable = true` 重新指定 `closable` 状态\n   * 2. 路由配置中 data 属性中包含 `reuseClosable`\n   * 3. 菜单数据中 `reuseClosable` 属性\n   *\n   * @param url 指定URL\n   * @param route 指定路由快照\n   */\n  getClosable(url: string, route?: ActivatedRouteSnapshot): boolean {\n    if (typeof this.cached.closable[url] !== 'undefined') return this.cached.closable[url];\n\n    if (route && route.data && typeof route.data.reuseClosable === 'boolean') return route.data.reuseClosable;\n\n    const menu = this.mode !== ReuseTabMatchMode.URL ? this.getMenu(url) : null;\n    if (menu && typeof menu.reuseClosable === 'boolean') return menu.reuseClosable;\n\n    return true;\n  }\n  /**\n   * 清空 `closable` 缓存\n   */\n  clearClosableCached(): void {\n    this.cached.closable = {};\n  }\n  getTruthRoute(route: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n    let next = route;\n    while (next.firstChild) next = next.firstChild;\n    return next;\n  }\n  /**\n   * 根据快照获取URL地址\n   */\n  getUrl(route: ActivatedRouteSnapshot): string {\n    let next = this.getTruthRoute(route);\n    const segments: string[] = [];\n    while (next) {\n      segments.push(next.url.join('/'));\n      next = next.parent!;\n    }\n    const url = `/${segments\n      .filter(i => i)\n      .reverse()\n      .join('/')}`;\n    return url;\n  }\n  /**\n   * 检查快照是否允许被复用\n   */\n  can(route: ActivatedRouteSnapshot): boolean {\n    const url = this.getUrl(route);\n    if (url === this.removeUrlBuffer) return false;\n\n    if (route.data && typeof route.data.reuse === 'boolean') return route.data.reuse;\n\n    if (this.mode !== ReuseTabMatchMode.URL) {\n      const menu = this.getMenu(url);\n      if (!menu) return false;\n      if (this.mode === ReuseTabMatchMode.Menu) {\n        if (menu.reuse === false) return false;\n      } else {\n        if (!menu.reuse || menu.reuse !== true) return false;\n      }\n      return true;\n    }\n    return !this.isExclude(url);\n  }\n\n  isExclude(url: string): boolean {\n    return this.excludes.findIndex(r => r.test(url)) !== -1;\n  }\n\n  /**\n   * 刷新，触发一个 refresh 类型事件\n   */\n  refresh(data?: NzSafeAny): void {\n    this._cachedChange.next({ active: 'refresh', data });\n  }\n  // #endregion\n\n  // #region privates\n\n  private destroy(_handle: NzSafeAny): void {\n    if (_handle && _handle.componentRef && _handle.componentRef.destroy) _handle.componentRef.destroy();\n  }\n\n  private di(...args: NzSafeAny[]): void {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (!this.debug) return;\n      console.warn(...args);\n    }\n  }\n\n  // #endregion\n\n  constructor() {\n    if (this.cached == null) {\n      this.cached = { list: [], title: {}, closable: {} };\n    }\n  }\n\n  init(): void {\n    this.initScroll();\n    this._inited = true;\n    this.loadState();\n  }\n\n  private loadState(): void {\n    if (!this.storageState) return;\n\n    this.cached.list = this.stateSrv.get(this.stateKey).map(v => ({\n      title: { text: v.title },\n      url: v.url,\n      position: v.position\n    }));\n    this._cachedChange.next({ active: 'loadState' });\n  }\n\n  private getMenu(url: string): Menu | null | undefined {\n    const menus = this.menuService.getPathByUrl(url);\n    if (!menus || menus.length === 0) return null;\n    return menus.pop();\n  }\n\n  runHook(\n    method: ReuseHookTypes,\n    comp: ReuseComponentRef | number | undefined,\n    type: ReuseHookOnReuseInitType = 'init'\n  ): void {\n    if (typeof comp === 'number') {\n      const item = this.cached.list[comp];\n      comp = item._handle?.componentRef;\n    }\n    if (comp == null || !comp.instance) {\n      return;\n    }\n    const compThis = comp.instance;\n    const fn = compThis[method];\n    if (typeof fn !== 'function') {\n      return;\n    }\n    if (method === '_onReuseInit') {\n      fn.call(compThis, type);\n    } else {\n      (fn as () => void).call(compThis);\n    }\n  }\n\n  private hasInValidRoute(route: ActivatedRouteSnapshot): boolean {\n    return !route.routeConfig || !!route.routeConfig.loadChildren || !!route.routeConfig.children;\n  }\n\n  /**\n   * 决定是否允许路由复用，若 `true` 会触发 `store`\n   */\n  shouldDetach(route: ActivatedRouteSnapshot): boolean {\n    if (this.hasInValidRoute(route)) return false;\n    this.di('#shouldDetach', this.can(route), this.getUrl(route));\n    return this.can(route);\n  }\n\n  saveCache(snapshot: ActivatedRouteSnapshot, _handle?: NzSafeAny, pos?: number): void {\n    const snapshotTrue = this.getTruthRoute(snapshot);\n    const url = this.getUrl(snapshot);\n    const idx = this.index(url);\n    const item: ReuseTabCached = {\n      title: this.getTitle(url, snapshotTrue),\n      url,\n      closable: this.getClosable(url, snapshot),\n      _snapshot: snapshot,\n      _handle\n    };\n    if (idx < 0) {\n      this.items.splice(pos ?? this.items.length, 0, item);\n      if (this.count > this._max) {\n        // Get the oldest closable location\n        const closeIdx = this.items.findIndex(w => w.url !== url && w.closable!);\n        if (closeIdx !== -1) {\n          const closeItem = this.items[closeIdx];\n          this.remove(closeIdx, false);\n          timer(1)\n            .pipe(take(1))\n            .subscribe(() => this._cachedChange.next({ active: 'close', url: closeItem.url, list: this.cached.list }));\n        }\n      }\n    } else {\n      this.items[idx] = item;\n    }\n  }\n\n  /**\n   * 存储\n   */\n  store(_snapshot: ActivatedRouteSnapshot, _handle: NzSafeAny): void {\n    const url = this.getUrl(_snapshot);\n\n    if (_handle != null) {\n      this.saveCache(_snapshot, _handle);\n    }\n\n    const list = this.cached.list;\n\n    const item: ReuseTabCached = {\n      title: this.getTitle(url, _snapshot),\n      closable: this.getClosable(url, _snapshot),\n      position: this.getKeepingScroll(url, _snapshot) ? this.positionBuffer[url] : null,\n      url,\n      _snapshot,\n      _handle\n    };\n\n    const idx = this.index(url);\n    // Current handler is null when activate routes\n    // For better reliability, we need to wait for the component to be attached before call _onReuseInit\n    const cahcedComponentRef = list[idx]?._handle?.componentRef;\n    if (_handle == null && cahcedComponentRef != null) {\n      timer(100)\n        .pipe(take(1))\n        .subscribe(() => this.runHook('_onReuseInit', cahcedComponentRef));\n    }\n    list[idx] = item;\n    this.removeUrlBuffer = null;\n\n    this.di('#store', '[override]', url);\n\n    if (_handle && _handle.componentRef) {\n      this.runHook('_onReuseDestroy', _handle.componentRef);\n    }\n\n    this._cachedChange.next({ active: 'override', item, list });\n  }\n\n  /**\n   * 决定是否允许应用缓存数据\n   */\n  shouldAttach(route: ActivatedRouteSnapshot): boolean {\n    if (this.hasInValidRoute(route)) return false;\n    const url = this.getUrl(route);\n    const data = this.get(url);\n    const ret = !!(data && data._handle);\n    this.di('#shouldAttach', ret, url);\n    if (!ret) {\n      this._cachedChange.next({ active: 'add', url, list: this.cached.list });\n    }\n    return ret;\n  }\n\n  /**\n   * 提取复用数据\n   */\n  retrieve(route: ActivatedRouteSnapshot): NzSafeAny | null {\n    if (this.hasInValidRoute(route)) return null;\n    const url = this.getUrl(route);\n    const data = this.get(url);\n    const ret = (data && data._handle) || null;\n    this.di('#retrieve', url, ret);\n    return ret;\n  }\n\n  /**\n   * 决定是否应该进行复用路由处理\n   */\n  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n    let ret = future.routeConfig === curr.routeConfig;\n    if (!ret) return false;\n\n    const path = ((future.routeConfig && future.routeConfig.path) || '') as string;\n    if (path.length > 0 && ~path.indexOf(':')) {\n      if (this.routeParamMatchMode === 'strict') {\n        ret = this.getUrl(future) === this.getUrl(curr);\n      } else {\n        ret = path === ((curr.routeConfig && curr.routeConfig.path) || '');\n      }\n    }\n    this.di('=====================');\n    this.di('#shouldReuseRoute', ret, `${this.getUrl(curr)}=>${this.getUrl(future)}`, future, curr);\n    return ret;\n  }\n\n  // #region scroll\n\n  /**\n   * 获取 `keepingScroll` 状态，顺序如下：\n   *\n   * 1. 路由配置中 data 属性中包含 `keepingScroll`\n   * 2. 菜单数据中 `keepingScroll` 属性\n   * 3. 组件 `keepingScroll` 值\n   */\n  getKeepingScroll(url: string, route?: ActivatedRouteSnapshot): boolean {\n    if (route && route.data && typeof route.data.keepingScroll === 'boolean') return route.data.keepingScroll;\n\n    const menu = this.mode !== ReuseTabMatchMode.URL ? this.getMenu(url) : null;\n    if (menu && typeof menu.keepingScroll === 'boolean') return menu.keepingScroll;\n\n    return this.keepingScroll;\n  }\n\n  private get isDisabledInRouter(): boolean {\n    const routerConfig = this.injector.get<ExtraOptions>(ROUTER_CONFIGURATION, {} as NzSafeAny);\n    return routerConfig.scrollPositionRestoration === 'disabled';\n  }\n\n  private get ss(): ScrollService {\n    return this.injector.get(ScrollService);\n  }\n\n  private initScroll(): void {\n    if (this._router$) {\n      this._router$.unsubscribe();\n    }\n\n    this._router$ = this.injector.get<Router>(Router).events.subscribe(e => {\n      if (e instanceof NavigationStart) {\n        const url = this.curUrl;\n        if (this.getKeepingScroll(url, this.getTruthRoute(this.snapshot))) {\n          this.positionBuffer[url] = this.ss.getScrollPosition(this.keepingScrollContainer);\n        } else {\n          delete this.positionBuffer[url];\n        }\n      } else if (e instanceof NavigationEnd) {\n        const url = this.curUrl;\n        const item = this.get(url);\n        if (item && item.position && this.getKeepingScroll(url, this.getTruthRoute(this.snapshot))) {\n          if (this.isDisabledInRouter) {\n            this.ss.scrollToPosition(this.keepingScrollContainer, item.position);\n          } else {\n            setTimeout(() => this.ss.scrollToPosition(this.keepingScrollContainer, item.position!), 1);\n          }\n        }\n      }\n    });\n  }\n\n  // #endregion\n\n  ngOnDestroy(): void {\n    const { _cachedChange, _router$ } = this;\n    this.clear();\n    this.cached.list = [];\n    _cachedChange.complete();\n\n    if (_router$) {\n      _router$.unsubscribe();\n    }\n  }\n}\n","import { Direction, Directionality } from '@angular/cdk/bidi';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n  booleanAttribute,\n  inject,\n  numberAttribute\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { debounceTime, filter, of } from 'rxjs';\n\nimport { ALAIN_I18N_TOKEN } from '@delon/theme';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\nimport { NzIconDirective } from 'ng-zorro-antd/icon';\nimport { NzTabComponent, NzTabSetComponent } from 'ng-zorro-antd/tabs';\n\nimport { ReuseTabContextMenuComponent } from './reuse-tab-context-menu.component';\nimport { ReuseTabContextComponent } from './reuse-tab-context.component';\nimport { ReuseTabContextDirective } from './reuse-tab-context.directive';\nimport { ReuseTabContextService } from './reuse-tab-context.service';\nimport {\n  ReuseCanClose,\n  ReuseContextCloseEvent,\n  ReuseContextI18n,\n  ReuseCustomContextMenu,\n  ReuseItem,\n  ReuseTabCached,\n  ReuseTabMatchMode,\n  ReuseTabNotify,\n  ReuseTabRouteParamMatchMode,\n  ReuseTitle\n} from './reuse-tab.interfaces';\nimport { ReuseTabService } from './reuse-tab.service';\nimport { REUSE_TAB_STORAGE_KEY, REUSE_TAB_STORAGE_STATE } from './reuse-tab.state';\n\n@Component({\n  selector: 'reuse-tab, [reuse-tab]',\n  exportAs: 'reuseTab',\n  templateUrl: './reuse-tab.component.html',\n  host: {\n    '[class.reuse-tab]': 'true',\n    '[class.reuse-tab__line]': `tabType === 'line'`,\n    '[class.reuse-tab__card]': `tabType === 'card'`,\n    '[class.reuse-tab__disabled]': `disabled`,\n    '[class.reuse-tab-rtl]': `dir === 'rtl'`\n  },\n  providers: [ReuseTabContextService],\n  preserveWhitespaces: false,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n  imports: [\n    NgTemplateOutlet,\n    NzTabSetComponent,\n    NzTabComponent,\n    ReuseTabContextMenuComponent,\n    ReuseTabContextDirective,\n    ReuseTabContextComponent,\n    NzIconDirective\n  ]\n})\nexport class ReuseTabComponent implements OnInit, OnChanges {\n  private readonly srv = inject(ReuseTabService, { optional: true })!;\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly router = inject(Router);\n  private readonly route = inject(ActivatedRoute);\n  private readonly i18nSrv = inject(ALAIN_I18N_TOKEN);\n  private readonly doc = inject(DOCUMENT);\n  private readonly platform = inject(Platform);\n  private readonly directionality = inject(Directionality);\n  private readonly stateKey = inject(REUSE_TAB_STORAGE_KEY);\n  private readonly stateSrv = inject(REUSE_TAB_STORAGE_STATE);\n\n  @ViewChild('tabset') private tabset!: NzTabSetComponent;\n  private destroy$ = inject(DestroyRef);\n  private _keepingScrollContainer?: Element | null;\n  list: ReuseItem[] = [];\n  item?: ReuseItem;\n  pos = 0;\n  dir?: Direction = 'ltr';\n\n  // #region fields\n\n  @Input() mode: ReuseTabMatchMode = ReuseTabMatchMode.Menu;\n  @Input() i18n?: ReuseContextI18n;\n  @Input({ transform: booleanAttribute }) debug = false;\n  @Input({ transform: numberAttribute }) max?: number;\n  @Input({ transform: numberAttribute }) tabMaxWidth?: number;\n  @Input() excludes?: RegExp[];\n  @Input({ transform: booleanAttribute }) allowClose = true;\n  @Input({ transform: booleanAttribute }) keepingScroll = false;\n  @Input({ transform: booleanAttribute }) storageState = false;\n  @Input()\n  set keepingScrollContainer(value: string | Element) {\n    this._keepingScrollContainer = typeof value === 'string' ? this.doc.querySelector(value) : value;\n  }\n  @Input() customContextMenu: ReuseCustomContextMenu[] = [];\n  @Input() tabBarExtraContent?: TemplateRef<void>;\n  @Input() tabBarGutter?: number;\n  @Input() tabBarStyle: { [key: string]: string } | null = null;\n  @Input() tabType: 'line' | 'card' = 'line';\n  @Input() routeParamMatchMode: ReuseTabRouteParamMatchMode = 'strict';\n  @Input({ transform: booleanAttribute }) disabled = false;\n  @Input() titleRender?: TemplateRef<{ $implicit: ReuseItem }>;\n  @Input() canClose?: ReuseCanClose;\n  @Output() readonly change = new EventEmitter<ReuseItem>();\n  @Output() readonly close = new EventEmitter<ReuseItem | null>();\n\n  // #endregion\n\n  private genTit(title: ReuseTitle): string {\n    return title.i18n ? this.i18nSrv.fanyi(title.i18n) : title.text!;\n  }\n\n  private get curUrl(): string {\n    return this.srv.getUrl(this.route.snapshot);\n  }\n\n  private genCurItem(): ReuseItem {\n    const url = this.curUrl;\n    const snapshotTrue = this.srv.getTruthRoute(this.route.snapshot);\n    return {\n      url,\n      title: this.genTit(this.srv.getTitle(url, snapshotTrue)),\n      closable: this.allowClose && this.srv.count > 0 && this.srv.getClosable(url, snapshotTrue),\n      active: false,\n      last: false,\n      index: 0\n    };\n  }\n\n  private genList(notify: ReuseTabNotify | null): void {\n    const ls = this.srv.items.map(\n      (item: ReuseTabCached, index: number) =>\n        ({\n          url: item.url,\n          title: this.genTit(item.title),\n          closable: this.allowClose && this.srv.count > 0 && this.srv.getClosable(item.url, item._snapshot),\n          position: item.position,\n          index,\n          active: false,\n          last: false\n        }) as ReuseItem\n    );\n\n    const url = this.curUrl;\n    let addCurrent = ls.findIndex(w => w.url === url) === -1;\n    if (notify && notify.active === 'close' && notify.url === url) {\n      addCurrent = false;\n      let toPos = 0;\n      const curItem = this.list.find(w => w.url === url)!;\n      if (curItem.index === ls.length) {\n        // When closed is last\n        toPos = ls.length - 1;\n      } else if (curItem.index < ls.length) {\n        // Should be actived next tab when closed is middle\n        toPos = Math.max(0, curItem.index);\n      }\n      this.router.navigateByUrl(ls[toPos].url);\n    }\n\n    if (addCurrent) {\n      const addPos = this.pos + 1;\n      ls.splice(addPos, 0, this.genCurItem());\n      // Attach to cache\n      this.srv.saveCache(this.route.snapshot, null, addPos);\n    }\n\n    ls.forEach((item, index) => (item.index = index));\n    if (ls.length === 1) {\n      ls[0].closable = false;\n    }\n    this.list = ls;\n    this.cdr.detectChanges();\n    this.updatePos();\n  }\n\n  private updateTitle(res: ReuseTabNotify): void {\n    const item = this.list.find(w => w.url === res!.url);\n    if (!item) return;\n    item.title = this.genTit(res!.title!);\n    this.cdr.detectChanges();\n  }\n\n  private refresh(item: ReuseItem): void {\n    this.srv.runHook('_onReuseInit', this.pos === item.index ? this.srv.componentRef : item.index, 'refresh');\n  }\n\n  private saveState(): void {\n    if (!this.srv.inited || !this.storageState) return;\n\n    this.stateSrv?.update(this.stateKey!, this.list);\n  }\n\n  // #region UI\n\n  contextMenuChange(res: ReuseContextCloseEvent): void {\n    let fn: (() => void) | null = null;\n    switch (res.type) {\n      case 'refresh':\n        this.refresh(res.item);\n        break;\n      case 'close':\n        this._close(null, res.item.index, res.includeNonCloseable);\n        break;\n      case 'closeRight':\n        fn = () => {\n          this.srv.closeRight(res.item.url, res.includeNonCloseable);\n          this.close.emit(null);\n        };\n        break;\n      case 'closeOther':\n        fn = () => {\n          this.srv.clear(res.includeNonCloseable);\n          this.close.emit(null);\n        };\n        break;\n    }\n    if (!fn) {\n      return;\n    }\n    if (!res.item.active && res.item.index <= this.list.find(w => w.active)!.index) {\n      this._to(res.item.index, fn);\n    } else {\n      fn();\n    }\n  }\n\n  _to(index: number, cb?: () => void): void {\n    index = Math.max(0, Math.min(index, this.list.length - 1));\n    const item = this.list[index];\n    this.router.navigateByUrl(item.url).then(res => {\n      if (!res) return;\n      this.item = item;\n      this.change.emit(item);\n      cb?.();\n    });\n  }\n\n  _close(e: Event | null, idx: number, includeNonCloseable: boolean): boolean {\n    if (e != null) {\n      e.preventDefault();\n      e.stopPropagation();\n    }\n    const item = this.list[idx];\n    (this.canClose ? this.canClose({ item, includeNonCloseable }) : of(true)).pipe(filter(v => v)).subscribe(() => {\n      this.srv.close(item.url, includeNonCloseable);\n      this.close.emit(item);\n      this.cdr.detectChanges();\n    });\n    return false;\n  }\n\n  /**\n   * 设置激活路由的实例，在 `src/app/layout/basic/basic.component.ts` 修改：\n   *\n   * @example\n   * <reuse-tab #reuseTab></reuse-tab>\n   * <router-outlet (activate)=\"reuseTab.activate($event)\" (attach)=\"reuseTab.activate($event)\"></router-outlet>\n   */\n  activate(instance: NzSafeAny): void {\n    if (this.srv == null) return;\n    this.srv.componentRef = { instance };\n  }\n\n  private updatePos(): void {\n    const url = this.srv.getUrl(this.route.snapshot);\n    const ls = this.list.filter(w => w.url === url || !this.srv.isExclude(w.url));\n    if (ls.length === 0) {\n      return;\n    }\n\n    const last = ls[ls.length - 1];\n    const item = ls.find(w => w.url === url);\n    last.last = true;\n    const pos = item == null ? last.index : item.index;\n    ls.forEach((i, idx) => (i.active = pos === idx));\n    this.pos = pos;\n    // TODO: 目前无法知道为什么 `pos` 无法通过 `nzSelectedIndex` 生效，因此强制使用组件实例的方式来修改，这种方式是安全的\n    // https://github.com/ng-alain/ng-alain/issues/1736\n    this.tabset.nzSelectedIndex = pos;\n    this.list = ls;\n    this.cdr.detectChanges();\n    this.saveState();\n  }\n\n  // #endregion\n\n  ngOnInit(): void {\n    this.dir = this.directionality.value;\n    this.directionality.change.pipe(takeUntilDestroyed(this.destroy$)).subscribe(direction => {\n      this.dir = direction;\n      this.cdr.detectChanges();\n    });\n\n    if (!this.platform.isBrowser || this.srv == null) {\n      return;\n    }\n\n    this.srv.change.pipe(takeUntilDestroyed(this.destroy$)).subscribe(res => {\n      switch (res?.active) {\n        case 'title':\n          this.updateTitle(res);\n          return;\n        case 'override':\n          if (res?.list?.length === this.list.length) {\n            this.updatePos();\n            return;\n          }\n          break;\n      }\n      this.genList(res);\n    });\n\n    this.i18nSrv.change\n      .pipe(\n        filter(() => this.srv.inited),\n        takeUntilDestroyed(this.destroy$),\n        debounceTime(100)\n      )\n      .subscribe(() => this.genList({ active: 'title' }));\n\n    this.srv.init();\n  }\n\n  ngOnChanges(changes: { [P in keyof this]?: SimpleChange } & SimpleChanges): void {\n    if (!this.platform.isBrowser || this.srv == null) {\n      return;\n    }\n\n    if (changes.max) this.srv.max = this.max!;\n    if (changes.excludes) this.srv.excludes = this.excludes!;\n    if (changes.mode) this.srv.mode = this.mode;\n    if (changes.routeParamMatchMode) this.srv.routeParamMatchMode = this.routeParamMatchMode;\n    if (changes.keepingScroll) {\n      this.srv.keepingScroll = this.keepingScroll;\n      this.srv.keepingScrollContainer = this._keepingScrollContainer;\n    }\n    if (changes.storageState) this.srv.storageState = this.storageState;\n\n    this.srv.debug = this.debug;\n\n    this.cdr.detectChanges();\n  }\n}\n","<nz-tabset\n  #tabset\n  [nzSelectedIndex]=\"pos\"\n  [nzAnimated]=\"false\"\n  [nzType]=\"tabType\"\n  [nzTabBarExtraContent]=\"tabBarExtraContent\"\n  [nzTabBarGutter]=\"tabBarGutter\"\n  [nzTabBarStyle]=\"tabBarStyle\"\n>\n  @for (i of list; track $index) {\n    <nz-tab [nzTitle]=\"titleTemplate\" (nzClick)=\"_to($index)\">\n      <ng-template #titleTemplate>\n        <div\n          [reuse-tab-context-menu]=\"i\"\n          [customContextMenu]=\"customContextMenu\"\n          class=\"reuse-tab__name\"\n          [attr.title]=\"i.title\"\n        >\n          <span [class.reuse-tab__name-width]=\"tabMaxWidth\" [style.max-width.px]=\"tabMaxWidth\">\n            @if (titleRender) {\n              <ng-template [ngTemplateOutlet]=\"titleRender\" [ngTemplateOutletContext]=\"{ $implicit: i }\" />\n            } @else {\n              {{ i.title }}\n            }\n          </span>\n        </div>\n        @if (i.closable) {\n          <i nz-icon nzType=\"close\" class=\"reuse-tab__op\" (click)=\"_close($event, $index, false)\"></i>\n        }\n      </ng-template>\n    </nz-tab>\n  }\n</nz-tabset>\n<reuse-tab-context [i18n]=\"i18n\" (change)=\"contextMenuChange($event)\" />\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouteReuseStrategy } from '@angular/router';\n\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { ReuseTabService } from './reuse-tab.service';\n\nexport class ReuseTabStrategy implements RouteReuseStrategy {\n  private readonly srv = inject(ReuseTabService);\n\n  shouldDetach(route: ActivatedRouteSnapshot): boolean {\n    return this.srv.shouldDetach(route);\n  }\n  store(route: ActivatedRouteSnapshot, handle: unknown): void {\n    this.srv.store(route, handle);\n  }\n  shouldAttach(route: ActivatedRouteSnapshot): boolean {\n    return this.srv.shouldAttach(route);\n  }\n  retrieve(route: ActivatedRouteSnapshot): NzSafeAny | null {\n    return this.srv.retrieve(route);\n  }\n  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n    return this.srv.shouldReuseRoute(future, curr);\n  }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { DelonLocaleModule } from '@delon/theme';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\nimport { NzTabsModule } from 'ng-zorro-antd/tabs';\n\nimport { ReuseTabContextMenuComponent } from './reuse-tab-context-menu.component';\nimport { ReuseTabContextComponent } from './reuse-tab-context.component';\nimport { ReuseTabContextDirective } from './reuse-tab-context.directive';\nimport { REUSE_TAB_CACHED_MANAGER, ReuseTabCachedManagerFactory } from './reuse-tab.cache';\nimport { ReuseTabComponent } from './reuse-tab.component';\nimport { ReuseTabLocalStorageState, REUSE_TAB_STORAGE_KEY, REUSE_TAB_STORAGE_STATE } from './reuse-tab.state';\n\nconst COMPONENTS = [ReuseTabComponent];\nconst NOEXPORTS = [ReuseTabContextMenuComponent, ReuseTabContextComponent, ReuseTabContextDirective];\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule,\n    DelonLocaleModule,\n    NzMenuModule,\n    NzTabsModule,\n    NzIconModule,\n    OverlayModule,\n    ...COMPONENTS,\n    ...NOEXPORTS\n  ],\n  providers: [\n    {\n      provide: REUSE_TAB_STORAGE_KEY,\n      useValue: '_reuse-tab-state'\n    },\n    {\n      provide: REUSE_TAB_STORAGE_STATE,\n      useFactory: () => new ReuseTabLocalStorageState()\n    },\n    {\n      provide: REUSE_TAB_CACHED_MANAGER,\n      useFactory: () => new ReuseTabCachedManagerFactory()\n    }\n  ],\n  exports: COMPONENTS\n})\nexport class ReuseTabModule {}\n","import {\n  ENVIRONMENT_INITIALIZER,\n  EnvironmentProviders,\n  Provider,\n  inject,\n  makeEnvironmentProviders\n} from '@angular/core';\nimport { RouteReuseStrategy } from '@angular/router';\n\nimport { REUSE_TAB_CACHED_MANAGER, ReuseTabCachedManagerFactory } from './reuse-tab.cache';\nimport { ReuseTabMatchMode, ReuseTabRouteParamMatchMode } from './reuse-tab.interfaces';\nimport { ReuseTabService } from './reuse-tab.service';\nimport { REUSE_TAB_STORAGE_KEY, REUSE_TAB_STORAGE_STATE, ReuseTabLocalStorageState } from './reuse-tab.state';\nimport { ReuseTabStrategy } from './reuse-tab.strategy';\n\nexport enum ReuseTabFeatureKind {\n  CacheManager,\n  Store\n}\n\nexport interface ReuseTabFeature<KindT extends ReuseTabFeatureKind> {\n  ɵkind: KindT;\n  ɵproviders: Provider[];\n}\n\nfunction makeFeature<KindT extends ReuseTabFeatureKind>(kind: KindT, providers: Provider[]): ReuseTabFeature<KindT> {\n  return {\n    ɵkind: kind,\n    ɵproviders: providers\n  };\n}\n\n/**\n * Configures reuse-tab to be available for injection.\n *\n * @see {@link withLocalStorage}\n * @see {@link withCacheManager}\n */\nexport function provideReuseTabConfig(options?: {\n  debug?: boolean;\n  mode?: ReuseTabMatchMode;\n  routeParamMatchMode?: ReuseTabRouteParamMatchMode;\n  max?: number;\n  excludes?: RegExp[];\n  storeKey?: string;\n  cacheManager?: ReuseTabFeature<ReuseTabFeatureKind.CacheManager>;\n  store?: ReuseTabFeature<ReuseTabFeatureKind.Store>;\n}): EnvironmentProviders {\n  const providers: Provider[] = [\n    ReuseTabService,\n    {\n      provide: REUSE_TAB_STORAGE_KEY,\n      useValue: options?.storeKey ?? '_reuse-tab-state'\n    },\n    (options?.cacheManager ?? withCacheManager()).ɵproviders,\n    (options?.store ?? withLocalStorage()).ɵproviders,\n    {\n      provide: RouteReuseStrategy,\n      useClass: ReuseTabStrategy,\n      deps: [ReuseTabService]\n    },\n    {\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useValue: () => {\n        const srv = inject(ReuseTabService);\n        if (options?.debug) srv.debug = options.debug;\n        if (options?.mode) srv.mode = options.mode;\n        if (options?.routeParamMatchMode) srv.routeParamMatchMode = options.routeParamMatchMode;\n        if (options?.max) srv.max = options.max;\n        if (options?.excludes) srv.excludes = options.excludes;\n      }\n    }\n  ];\n\n  return makeEnvironmentProviders(providers);\n}\n\nexport function withCacheManager(): ReuseTabFeature<ReuseTabFeatureKind.CacheManager> {\n  return makeFeature(ReuseTabFeatureKind.CacheManager, [\n    {\n      provide: REUSE_TAB_CACHED_MANAGER,\n      useFactory: () => new ReuseTabCachedManagerFactory()\n    }\n  ]);\n}\n\nexport function withLocalStorage(): ReuseTabFeature<ReuseTabFeatureKind.Store> {\n  return makeFeature(ReuseTabFeatureKind.Store, [\n    {\n      provide: REUSE_TAB_STORAGE_STATE,\n      useFactory: () => new ReuseTabLocalStorageState()\n    }\n  ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}