{"version":3,"file":"ng-nest-ui-anchor.mjs","sources":["../../../../lib/ng-nest/ui/anchor/anchor.property.ts","../../../../lib/ng-nest/ui/anchor/anchor.component.ts","../../../../lib/ng-nest/ui/anchor/anchor.component.html","../../../../lib/ng-nest/ui/anchor/anchor-inner.component.ts","../../../../lib/ng-nest/ui/anchor/anchor.module.ts","../../../../lib/ng-nest/ui/anchor/ng-nest-ui-anchor.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\r\nimport { XPropertyFunction, XToCssPixelValue } from '@ng-nest/ui/core';\r\nimport type { XIdentityProperty, XJustify, XPositionLeftRight, XNumber } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Anchor\r\n * @selector x-anchor\r\n * @decorator component\r\n */\r\nexport const XAnchorPrefix = 'x-anchor';\r\nconst X_ANCHOR_CONFIG_NAME = 'anchor';\r\n\r\n/**\r\n * Anchor Property\r\n */\r\n@Component({ selector: `${XAnchorPrefix}-property`, template: '' })\r\nexport class XAnchorProperty extends XPropertyFunction(X_ANCHOR_CONFIG_NAME) {\r\n  /**\r\n   * @zh_CN 滚动区域对象\r\n   * @en_US Scroll area object\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <div #scroll style=\"height: 60rem; width: 100%; overflow: auto;\">\r\n   *   <x-anchor [scroll]=\"scroll\">\r\n   *     ...\r\n   *   </x-anchor>\r\n   * </div>\r\n   * ```\r\n   */\r\n  readonly scroll = input<HTMLElement>();\r\n  /**\r\n   * @zh_CN 顶部距离\r\n   * @en_US Top distance\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <x-anchor affixTop=\"100\">\r\n   *   ...\r\n   * </x-anchor>\r\n   * ```\r\n   *\r\n   */\r\n  readonly affixTop = input<string, XNumber>(this.config?.affixTop ?? '0', { transform: XToCssPixelValue });\r\n  /**\r\n   * @zh_CN 底部距离\r\n   * @en_US Bottom distance\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <x-anchor affixBottom=\"100\">\r\n   *   ...\r\n   * </x-anchor>\r\n   * ```\r\n   *\r\n   */\r\n  readonly affixBottom = input<string, XNumber>(this.config?.affixBottom ?? '0', { transform: XToCssPixelValue });\r\n  /**\r\n   * @zh_CN 导航宽度\r\n   * @en_US Navigation Width\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <x-anchor affixWidth=\"150\">\r\n   *   ...\r\n   * </x-anchor>\r\n   * ```\r\n   *\r\n   */\r\n  readonly affixWidth = input<string, XNumber>(this.config?.affixWidth!, { transform: XToCssPixelValue });\r\n  /**\r\n   * @zh_CN 导航相对内容位置\r\n   * @en_US Navigation relative content position\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <x-anchor layout=\"left\">\r\n   *   ...\r\n   * </x-anchor>\r\n   * ```\r\n   *\r\n   */\r\n  readonly layout = input<XAnchorLayout>(this.config?.layout ?? 'right');\r\n  /**\r\n   * @zh_CN 对齐方式\r\n   * @en_US Alignment\r\n   * @example\r\n   *\r\n   * ```html\r\n   * <x-anchor justify=\"end\">\r\n   *   ...\r\n   * </x-anchor>\r\n   * ```\r\n   *\r\n   */\r\n  readonly justify = input<XJustify>(this.config?.justify ?? 'start');\r\n}\r\n\r\n/**\r\n * Anchor inner\r\n * @selector x-anchor-inner\r\n * @decorator component\r\n */\r\nexport const XAnchorInnerPrefix = 'x-anchor-inner';\r\n\r\n/**\r\n * Anchor inner Property\r\n */\r\n@Component({ selector: `${XAnchorInnerPrefix}-property`, template: '' })\r\nexport class XAnchorInnerProperty {}\r\n\r\n/**\r\n * Anchor Node\r\n */\r\nexport interface XAnchorNode extends XIdentityProperty {\r\n  /**\r\n   * @zh_CN 左内边距，用来显示层级\r\n   * @en_US Left inner margin, used to display hierarchy\r\n   */\r\n  left?: number;\r\n  /**\r\n   * @zh_CN 图标\r\n   * @en_US Icon\r\n   */\r\n  icon?: string;\r\n  /**\r\n   * @zh_CN 锚点的链接\r\n   * @en_US Anchor link\r\n   */\r\n  link?: string;\r\n}\r\n\r\n/**\r\n * @zh_CN 布局方式，相对内容的位置\r\n * @en_US Layout method, relative content position\r\n */\r\nexport type XAnchorLayout = XPositionLeftRight;\r\n","import {\r\n  Component,\r\n  OnInit,\r\n  ViewEncapsulation,\r\n  Renderer2,\r\n  ElementRef,\r\n  ChangeDetectionStrategy,\r\n  AfterViewInit,\r\n  OnDestroy,\r\n  AfterContentChecked,\r\n  inject,\r\n  computed,\r\n  signal,\r\n  viewChild,\r\n  SimpleChanges\r\n} from '@angular/core';\r\nimport { XAnchorPrefix, XAnchorProperty } from './anchor.property';\r\nimport { XComputedStyle, XIsEmpty, XRequestAnimationFrame, XIsNumber, XToCssPx, XIsChange } from '@ng-nest/ui/core';\r\nimport { XSliderComponent } from '@ng-nest/ui/slider';\r\nimport { XAffixComponent } from '@ng-nest/ui/affix';\r\nimport { DOCUMENT, NgClass } from '@angular/common';\r\nimport { fromEvent, Subject, Subscription } from 'rxjs';\r\nimport { throttleTime, takeUntil, distinctUntilChanged } from 'rxjs/operators';\r\nimport type { XSliderNode } from '@ng-nest/ui/slider';\r\nimport type { XAnchorNode } from './anchor.property';\r\n\r\n@Component({\r\n  selector: `${XAnchorPrefix}`,\r\n  imports: [NgClass, XAffixComponent, XSliderComponent],\r\n  templateUrl: './anchor.component.html',\r\n  styleUrls: ['./anchor.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XAnchorComponent extends XAnchorProperty implements OnInit, AfterViewInit, OnDestroy, AfterContentChecked {\r\n  anchor = viewChild.required('anchor', { read: ElementRef<HTMLElement> });\r\n  content = viewChild.required('content', { read: ElementRef<HTMLElement> });\r\n  hElements = signal<NodeListOf<HTMLElement> | null>(null);\r\n  sliderData = signal<XSliderNode[]>([]);\r\n  activatedIndex = signal(0);\r\n\r\n  document: Document = inject(DOCUMENT);\r\n  contentChange = new Subject<string>();\r\n  scrollElement = computed(() => {\r\n    let scroll = this.scroll();\r\n    if (!scroll) {\r\n      scroll = this.document.documentElement;\r\n    }\r\n    return scroll;\r\n  });\r\n  sliderHeight = computed(() => {\r\n    if (XIsEmpty(this.sliderData())) {\r\n      return 0;\r\n    } else {\r\n      const height = this.scrollElement().offsetHeight;\r\n      const top = parseFloat(XComputedStyle(this.scrollElement(), 'padding-top'));\r\n      const borderTop = parseFloat(XComputedStyle(this.scrollElement(), 'border-top'));\r\n      const bottom = parseFloat(XComputedStyle(this.scrollElement(), 'padding-bottom'));\r\n      const borderBottom = parseFloat(XComputedStyle(this.scrollElement(), 'border-bottom'));\r\n      return (\r\n        height -\r\n        top -\r\n        bottom -\r\n        borderTop -\r\n        borderBottom -\r\n        XToCssPx(this.affixTop(), this.fontSize()) -\r\n        XToCssPx(this.affixBottom(), this.fontSize())\r\n      );\r\n    }\r\n  });\r\n  classMap = computed(() => ({\r\n    [`${XAnchorPrefix}-${this.layout()}`]: !XIsEmpty(this.layout())\r\n  }));\r\n  private scrolling = signal(false);\r\n  private fontSize = computed(() => parseFloat(XComputedStyle(this.document.documentElement, 'font-size')));\r\n  private unSubject = new Subject<void>();\r\n  private renderer = inject(Renderer2);\r\n  private elementRef = inject(ElementRef);\r\n  private scrollChanged = signal<Subscription | null>(null);\r\n\r\n  ngAfterContentChecked(): void {\r\n    this.contentChange.next(this.elementRef.nativeElement.innerText);\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.setSliderData();\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.contentChange.pipe(distinctUntilChanged(), takeUntil(this.unSubject)).subscribe(() => {\r\n      this.setSliderData();\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.unSubject.next();\r\n    this.unSubject.complete();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    const { scroll } = changes;\r\n    XIsChange(scroll) && this.setScroll();\r\n  }\r\n\r\n  activatedChange(index: number) {\r\n    const hElements = this.hElements();\r\n\r\n    this.scrolling.set(true);\r\n    const hElement = hElements![index];\r\n    let scrollTop =\r\n      hElement.offsetTop - this.anchor().nativeElement.offsetTop - parseFloat(XComputedStyle(hElement, 'margin-top'));\r\n    let maxScrollTop = this.scrollElement().scrollHeight - this.scrollElement().clientHeight;\r\n    if (scrollTop > maxScrollTop) scrollTop = maxScrollTop;\r\n    this.scrollTo(this.scrollElement(), parseInt(`${scrollTop}`), 150);\r\n  }\r\n\r\n  private setScroll() {\r\n    const elementScroll = this.scrollElement();\r\n    const listenScroll = elementScroll.tagName === 'HTML' ? this.document.defaultView : elementScroll;\r\n    if (this.scrollChanged()) this.scrollChanged()!.unsubscribe();\r\n    this.scrollChanged.set(\r\n      fromEvent(listenScroll!, 'scroll')\r\n        .pipe(throttleTime(10), takeUntil(this.unSubject))\r\n        .subscribe(() => {\r\n          if (this.scrolling()) return;\r\n          this.setActivatedByScroll();\r\n        })\r\n    );\r\n  }\r\n\r\n  private setActivatedByScroll() {\r\n    let now = 0;\r\n    const hElements = this.hElements();\r\n    hElements!.forEach((h, index) => {\r\n      let distance = this.scrollElement().scrollTop + this.anchor().nativeElement.offsetTop;\r\n      if (distance >= h.offsetTop) {\r\n        now = index;\r\n        return;\r\n      }\r\n    });\r\n    this.activatedIndex.set(now);\r\n  }\r\n\r\n  private setSliderData() {\r\n    this.hElements.set(\r\n      this.content().nativeElement.querySelectorAll(\r\n        ':scope> h1,:scope> h2,:scope> h3,:scope> h4,:scope> h5,:scope> x-anchor-inner> h1,:scope> x-anchor-inner>h2,:scope> x-anchor-inner>h3,:scope> x-anchor-inner>h4,:scope> x-anchor-inner>h5'\r\n      )\r\n    );\r\n    const hElements = this.hElements();\r\n    if (hElements!.length > 0) {\r\n      let list: XAnchorNode[] = [];\r\n      hElements!.forEach((x: HTMLElement, i: number) => {\r\n        const link = `x-anchor-${i}`;\r\n        const left = this.setLeft(x);\r\n        this.renderer.setAttribute(x, 'id', link);\r\n        list = [\r\n          ...list,\r\n          {\r\n            id: i,\r\n            label: x.innerText,\r\n            left: left,\r\n            link: link\r\n          }\r\n        ];\r\n      });\r\n      this.sliderData.set(list);\r\n    } else {\r\n      this.sliderData.set([]);\r\n    }\r\n  }\r\n\r\n  private setLeft(element: HTMLElement): number {\r\n    const eles = ['H1', 'H2', 'H3', 'H4', 'H5'];\r\n    const index = eles.indexOf(element.tagName);\r\n    return index + 1;\r\n  }\r\n\r\n  private scrollTo(element: HTMLElement, to: number, duration: number) {\r\n    const difference = to - element.scrollTop;\r\n    const perTick = (difference / duration) * 10;\r\n    XRequestAnimationFrame(() => {\r\n      const num = element.scrollTop + perTick;\r\n      if (XIsNumber(num) && num !== Infinity) {\r\n        element.scrollTop = num;\r\n      }\r\n      if (element.scrollTop === to || duration <= 0) {\r\n        setTimeout(() => this.scrolling.set(false), 20);\r\n        return;\r\n      } else {\r\n        this.scrollTo(element, to, duration - 10);\r\n      }\r\n    });\r\n  }\r\n}\r\n","<div #anchor class=\"x-anchor\" [ngClass]=\"classMap()\">\r\n  <div #content class=\"x-anchor-content\">\r\n    <ng-content></ng-content>\r\n  </div>\r\n  <x-affix class=\"x-anchor-affix\" [top]=\"affixTop()\">\r\n    <div class=\"x-anchor-slider\" [style.height.px]=\"sliderHeight()\" [style.width]=\"affixWidth()\">\r\n      <x-slider\r\n        [data]=\"sliderData()\"\r\n        layout=\"column\"\r\n        [(activatedIndex)]=\"activatedIndex\"\r\n        [nodeJustify]=\"justify()\"\r\n        [nodeTpl]=\"sliderNodeTpl\"\r\n        [showAnchor]=\"true\"\r\n        (indexChange)=\"activatedChange($event)\"\r\n      ></x-slider>\r\n    </div>\r\n  </x-affix>\r\n</div>\r\n\r\n<ng-template #sliderNodeTpl let-node=\"$node\">\r\n  <span [style.padding-left.rem]=\"node.left - 1\">{{ node.label }}</span>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\nimport { XAnchorInnerPrefix, XAnchorInnerProperty } from './anchor.property';\r\n\r\n@Component({\r\n  selector: `${XAnchorInnerPrefix}`,\r\n  template: '<ng-content></ng-content>',\r\n  encapsulation: ViewEncapsulation.None,\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XAnchorInnerComponent extends XAnchorInnerProperty {}\r\n","import { NgModule } from '@angular/core';\r\nimport { XAnchorComponent } from './anchor.component';\r\nimport { XAnchorInnerComponent } from './anchor-inner.component';\r\n\r\n@NgModule({\r\n  exports: [XAnchorComponent, XAnchorInnerComponent],\r\n  imports: [XAnchorComponent, XAnchorInnerComponent]\r\n})\r\nexport class XAnchorModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}