@delon/abc 20.1.0 → 21.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/fesm2022/auto-focus.mjs +10 -10
  2. package/fesm2022/auto-focus.mjs.map +1 -1
  3. package/fesm2022/cell.mjs +23 -25
  4. package/fesm2022/cell.mjs.map +1 -1
  5. package/fesm2022/chart-observer-size.mjs +21 -34
  6. package/fesm2022/chart-observer-size.mjs.map +1 -1
  7. package/fesm2022/count-down.mjs +24 -31
  8. package/fesm2022/count-down.mjs.map +1 -1
  9. package/fesm2022/date-picker.mjs +89 -85
  10. package/fesm2022/date-picker.mjs.map +1 -1
  11. package/fesm2022/down-file.mjs +24 -44
  12. package/fesm2022/down-file.mjs.map +1 -1
  13. package/fesm2022/ellipsis.mjs +165 -106
  14. package/fesm2022/ellipsis.mjs.map +1 -1
  15. package/fesm2022/error-collect.mjs +12 -14
  16. package/fesm2022/error-collect.mjs.map +1 -1
  17. package/fesm2022/exception.mjs +9 -9
  18. package/fesm2022/exception.mjs.map +1 -1
  19. package/fesm2022/footer-toolbar.mjs +9 -9
  20. package/fesm2022/footer-toolbar.mjs.map +1 -1
  21. package/fesm2022/full-content.mjs +50 -58
  22. package/fesm2022/full-content.mjs.map +1 -1
  23. package/fesm2022/global-footer.mjs +14 -15
  24. package/fesm2022/global-footer.mjs.map +1 -1
  25. package/fesm2022/hotkey.mjs +7 -7
  26. package/fesm2022/hotkey.mjs.map +1 -1
  27. package/fesm2022/loading.mjs +62 -15
  28. package/fesm2022/loading.mjs.map +1 -1
  29. package/fesm2022/lodop.mjs +8 -8
  30. package/fesm2022/lodop.mjs.map +1 -1
  31. package/fesm2022/media.mjs +37 -61
  32. package/fesm2022/media.mjs.map +1 -1
  33. package/fesm2022/notice-icon.mjs +220 -25
  34. package/fesm2022/notice-icon.mjs.map +1 -1
  35. package/fesm2022/onboarding.mjs +163 -65
  36. package/fesm2022/onboarding.mjs.map +1 -1
  37. package/fesm2022/page-header.mjs +252 -155
  38. package/fesm2022/page-header.mjs.map +1 -1
  39. package/fesm2022/pdf.mjs +9 -9
  40. package/fesm2022/pdf.mjs.map +1 -1
  41. package/fesm2022/quick-menu.mjs +79 -71
  42. package/fesm2022/quick-menu.mjs.map +1 -1
  43. package/fesm2022/reuse-tab.mjs +262 -165
  44. package/fesm2022/reuse-tab.mjs.map +1 -1
  45. package/fesm2022/se.mjs +290 -310
  46. package/fesm2022/se.mjs.map +1 -1
  47. package/fesm2022/sg.mjs +32 -69
  48. package/fesm2022/sg.mjs.map +1 -1
  49. package/fesm2022/st.mjs +124 -115
  50. package/fesm2022/st.mjs.map +1 -1
  51. package/fesm2022/sv.mjs +185 -174
  52. package/fesm2022/sv.mjs.map +1 -1
  53. package/fesm2022/tag-select.mjs +44 -25
  54. package/fesm2022/tag-select.mjs.map +1 -1
  55. package/fesm2022/xlsx.mjs +16 -19
  56. package/fesm2022/xlsx.mjs.map +1 -1
  57. package/fesm2022/zip.mjs +4 -4
  58. package/fesm2022/zip.mjs.map +1 -1
  59. package/package.json +40 -40
  60. package/{auto-focus/index.d.ts → types/auto-focus.d.ts} +2 -2
  61. package/{cell/index.d.ts → types/cell.d.ts} +12 -13
  62. package/{observers/index.d.ts → types/chart-observer-size.d.ts} +5 -9
  63. package/{count-down/index.d.ts → types/count-down.d.ts} +6 -10
  64. package/{date-picker/index.d.ts → types/date-picker.d.ts} +6 -10
  65. package/types/down-file.d.ts +32 -0
  66. package/types/ellipsis.d.ts +46 -0
  67. package/types/error-collect.d.ts +34 -0
  68. package/{exception/index.d.ts → types/exception.d.ts} +13 -13
  69. package/{footer-toolbar/index.d.ts → types/footer-toolbar.d.ts} +2 -2
  70. package/{full-content/index.d.ts → types/full-content.d.ts} +8 -13
  71. package/{global-footer/index.d.ts → types/global-footer.d.ts} +7 -7
  72. package/{loading/index.d.ts → types/loading.d.ts} +1 -0
  73. package/{media/index.d.ts → types/media.d.ts} +10 -16
  74. package/{notice-icon/index.d.ts → types/notice-icon.d.ts} +15 -15
  75. package/{onboarding/index.d.ts → types/onboarding.d.ts} +12 -14
  76. package/types/page-header.d.ts +67 -0
  77. package/types/quick-menu.d.ts +31 -0
  78. package/{reuse-tab/index.d.ts → types/reuse-tab.d.ts} +46 -55
  79. package/types/se.d.ts +101 -0
  80. package/types/sg.d.ts +31 -0
  81. package/{st/index.d.ts → types/st.d.ts} +10 -2
  82. package/types/sv.d.ts +81 -0
  83. package/types/tag-select.d.ts +25 -0
  84. package/{xlsx/index.d.ts → types/xlsx.d.ts} +3 -3
  85. package/down-file/index.d.ts +0 -34
  86. package/ellipsis/index.d.ts +0 -55
  87. package/error-collect/index.d.ts +0 -35
  88. package/page-header/index.d.ts +0 -83
  89. package/quick-menu/index.d.ts +0 -38
  90. package/se/index.d.ts +0 -129
  91. package/sg/index.d.ts +0 -44
  92. package/sv/index.d.ts +0 -96
  93. package/tag-select/index.d.ts +0 -27
  94. /package/{index.d.ts → types/abc.d.ts} +0 -0
  95. /package/{hotkey/index.d.ts → types/hotkey.d.ts} +0 -0
  96. /package/{lodop/index.d.ts → types/lodop.d.ts} +0 -0
  97. /package/{pdf/index.d.ts → types/pdf.d.ts} +0 -0
  98. /package/{zip/index.d.ts → types/zip.d.ts} +0 -0
@@ -1 +1 @@
1
- {"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 changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NzMenuDirective, NzMenuItemComponent]\n})\nexport class ReuseTabContextMenuComponent implements OnInit {\n private locale = inject(DelonLocaleService).valueSignal('reuseTab');\n\n private _i18n!: ReuseContextI18n;\n @Input()\n set i18n(value: ReuseContextI18n) {\n this._i18n = {\n ...this.locale(),\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})\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})\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: Record<string, ReuseTitle>;\n closable: Record<string, boolean>;\n}\n\nexport class ReuseTabCachedManagerFactory implements ReuseTabCachedManager {\n list: ReuseTabCached[] = [];\n title: Record<string, ReuseTitle> = {};\n closable: Record<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 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: Record<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 ...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(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 { 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, NzTabsComponent } from 'ng-zorro-antd/tabs';\n\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 changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n NzTabsComponent,\n NzTabComponent,\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 stateKey = inject(REUSE_TAB_STORAGE_KEY);\n private readonly stateSrv = inject(REUSE_TAB_STORAGE_STATE);\n\n @ViewChild('tabset') private tabset!: NzTabsComponent;\n private destroy$ = inject(DestroyRef);\n private _keepingScrollContainer?: Element | null;\n list: ReuseItem[] = [];\n item?: ReuseItem;\n pos = 0;\n dir = inject(Directionality).valueSignal;\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: Record<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 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-tabs\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 <nz-icon nzType=\"close\" class=\"reuse-tab__op\" (click)=\"_close($event, $index, false)\" />\n }\n </ng-template>\n </nz-tab>\n }\n</nz-tabs>\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 EnvironmentProviders,\n Provider,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer\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 return makeEnvironmentProviders([\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 provideEnvironmentInitializer(() => {\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\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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"}
1
+ {"version":3,"file":"reuse-tab.mjs","sources":["../../../../packages/abc/reuse-tab/reuse-tab-context-menu.component.ts","../../../../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.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 template: `\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 `,\n host: {\n '(document:click)': 'closeMenu($event)',\n '(document:contextmenu)': 'closeMenu($event)'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NzMenuDirective, NzMenuItemComponent]\n})\nexport class ReuseTabContextMenuComponent implements OnInit {\n private locale = inject(DelonLocaleService).valueSignal('reuseTab');\n\n private _i18n!: ReuseContextI18n;\n @Input()\n set i18n(value: ReuseContextI18n) {\n this._i18n = {\n ...this.locale(),\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","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})\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, inject, input } 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})\nexport class ReuseTabContextDirective {\n private readonly srv = inject(ReuseTabContextService);\n\n readonly item = input.required<ReuseItem>({ alias: 'reuse-tab-context-menu' });\n readonly customContextMenu = input.required<ReuseCustomContextMenu[]>();\n\n protected _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 type { ActivatedRouteSnapshot } from '@angular/router';\nimport type { 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 =\n | 'strict'\n | 'loose'\n | ((future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot) => boolean);\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: Record<string, ReuseTitle>;\n closable: Record<string, boolean>;\n}\n\nexport class ReuseTabCachedManagerFactory implements ReuseTabCachedManager {\n list: ReuseTabCached[] = [];\n title: Record<string, ReuseTitle> = {};\n closable: Record<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 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: Record<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 ...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;\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 const mode = this.routeParamMatchMode;\n if (typeof mode === 'function') {\n ret = mode(future, curr);\n } else if (mode === '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(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 { Directionality } from '@angular/cdk/bidi';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnChanges,\n OnInit,\n SimpleChange,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n viewChild\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, NzTabsComponent } from 'ng-zorro-antd/tabs';\n\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 template: `\n <nz-tabs\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 i) {\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 <nz-icon nzType=\"close\" class=\"reuse-tab__op\" (click)=\"_close($event, $index, false)\" />\n }\n </ng-template>\n </nz-tab>\n }\n </nz-tabs>\n <reuse-tab-context [i18n]=\"i18n()\" (change)=\"contextMenuChange($event)\" />\n `,\n host: {\n class: 'reuse-tab',\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 changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n NzTabsComponent,\n NzTabComponent,\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 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 stateKey = inject(REUSE_TAB_STORAGE_KEY);\n private readonly stateSrv = inject(REUSE_TAB_STORAGE_STATE);\n\n private readonly tabset = viewChild.required(NzTabsComponent);\n private destroy$ = inject(DestroyRef);\n protected dir = inject(Directionality).valueSignal;\n list = signal<ReuseItem[]>([]);\n item?: ReuseItem;\n protected pos = signal(0);\n\n // #region fields\n\n readonly mode = input<ReuseTabMatchMode>(ReuseTabMatchMode.Menu);\n readonly i18n = input<ReuseContextI18n>();\n readonly debug = input(false, { transform: booleanAttribute });\n readonly max = input(undefined, { transform: numberAttribute });\n readonly tabMaxWidth = input(undefined, { transform: numberAttribute });\n readonly excludes = input<RegExp[]>();\n readonly allowClose = input(true, { transform: booleanAttribute });\n readonly keepingScroll = input(false, { transform: booleanAttribute });\n readonly storageState = input(false, { transform: booleanAttribute });\n readonly keepingScrollContainer = input<string | Element>();\n readonly customContextMenu = input<ReuseCustomContextMenu[]>([]);\n readonly tabBarExtraContent = input<TemplateRef<void>>();\n readonly tabBarGutter = input<number>();\n readonly tabBarStyle = input<Record<string, string> | null>(null);\n readonly tabType = input<'line' | 'card'>('line');\n readonly routeParamMatchMode = input<ReuseTabRouteParamMatchMode>('strict');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly titleRender = input<TemplateRef<{ $implicit: ReuseItem }>>();\n readonly canClose = input<ReuseCanClose>();\n readonly change = output<ReuseItem>();\n readonly close = output<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.set(ls);\n this.updatePos();\n }\n\n private updateTitle(res: ReuseTabNotify): void {\n this.list.update(ls => {\n const item = ls.find(w => w.url === res!.url);\n if (!item) return ls;\n item.title = this.genTit(res!.title!);\n return [...ls];\n });\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 const canClose = this.canClose();\n (canClose ? canClose({ item, includeNonCloseable }) : of(true)).pipe(filter(v => v)).subscribe(() => {\n this.srv.close(item.url, includeNonCloseable);\n this.close.emit(item);\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.set(pos);\n // TODO: 目前无法知道为什么 `pos` 无法通过 `nzSelectedIndex` 生效,因此强制使用组件实例的方式来修改,这种方式是安全的\n // https://github.com/ng-alain/ng-alain/issues/1736\n this.tabset().nzSelectedIndex = pos;\n this.list.set(ls);\n this.saveState();\n }\n\n // #endregion\n\n ngOnInit(): void {\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 const keepingScrollContainer = this.keepingScrollContainer();\n this.srv.keepingScrollContainer =\n typeof keepingScrollContainer === 'string'\n ? this.doc.querySelector(keepingScrollContainer)\n : keepingScrollContainer;\n }\n if (changes.storageState) this.srv.storageState = this.storageState();\n ``;\n this.srv.debug = this.debug();\n }\n}\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 EnvironmentProviders,\n Provider,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer\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 return makeEnvironmentProviders([\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 provideEnvironmentInitializer(() => {\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\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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"}