{"version":3,"file":"ng-cw-v20-virtual-scroll.mjs","sources":["../../../projects/components/virtual-scroll/virtual-scroll.component.ts","../../../projects/components/virtual-scroll/virtual-scroll.component.html","../../../projects/components/virtual-scroll/virtual-scroll.module.ts","../../../projects/components/virtual-scroll/ng-cw-v20-virtual-scroll.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  ElementRef,\n  NgZone,\n  OnChanges,\n  Renderer2,\n  SimpleChanges,\n  TemplateRef,\n  inject,\n  input,\n  signal,\n  viewChild,\n} from '@angular/core';\n\ninterface VirtualItem<T = unknown> {\n  index: number;\n  data: T;\n}\n\nfunction ncNumberAttribute(value: unknown, fallback = 0): number {\n  if (value === null || value === undefined || value === '') {\n    return fallback;\n  }\n\n  const parsed = Number(value);\n  return Number.isNaN(parsed) ? fallback : parsed;\n}\n\n@Component({\n  selector: 'nc-virtual-scroll',\n  imports: [NgTemplateOutlet],\n  templateUrl: './virtual-scroll.component.html',\n  styleUrl: './virtual-scroll.component.less',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VirtualScrollComponent<T = unknown> implements AfterViewInit, OnChanges {\n  private readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport'); // 视窗\n  private readonly templateContainer = viewChild<ElementRef<HTMLElement>>('templateContainer'); // 用于获取传入的item高度，设置itemHeight值\n\n  /** 列表数据 */\n  ncItems = input<T[]>([]);\n  /** 列表项模板 */\n  ncItemTemplate = input<TemplateRef<{ $implicit: T; index: number }> | null>(null); // 传入的item模板\n  /** 缓冲item数量，前后各2项 */\n  ncBufferCount = input(2, { transform: (value: unknown) => ncNumberAttribute(value, 2) });\n\n  readonly initialized = signal(false); // 标记 itemHeight 是否已初始化（模板中 @if 使用，需为 public）\n  readonly visibleItems = signal<Array<VirtualItem<T>>>([]); // 显示items\n  readonly totalPadding = signal(0); // 总填充高度\n  readonly topPadding = signal(0);\n  readonly scrollTop = signal(0); // 已滚动高度\n\n  itemHeight = 1; // 若设为0，下方代码获取不到this.templateContainer\n  viewportHeight = 0; // 视窗可视高度\n\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly ngZone = inject(NgZone);\n  private readonly renderer = inject(Renderer2);\n\n  private viewInitialized = false; // 标记 ngAfterViewInit 是否已执行（templateContainer 才可用）\n  private resizeObserver: ResizeObserver | null = null; // 监听 viewport 容器尺寸变化\n  private measureTimer: number | null = null;\n\n  /**\n   * 场景\t触发行\t原因\n   * 初始就有值（同步）\t第 49 行measureAndUpdate\tngOnChanges 先执行但 viewInitialized=false 跳过，由 ngAfterViewInit 补调\n   * 初始无值，后续赋值（异步）\t第 75 行measureAndUpdate\tngAfterViewInit 时无数据跳过，数据到达时 ngOnChanges 直接调用\n   */\n  constructor() {\n    this.destroyRef.onDestroy(() => this.cleanup());\n  }\n\n  ngAfterViewInit(): void {\n    this.viewportHeight = this.viewport().nativeElement.clientHeight;\n    this.viewInitialized = true;\n    // 若 ncItems 在 ngAfterViewInit 之前就已同步赋值，则在此补充执行初始化\n    if (!this.initialized() && this.ncItems().length > 0) {\n      this.measureAndUpdate();\n    }\n    // 监听 viewport 容器高度变化，在 Angular 区域外观察以避免频繁触发变更检测\n    this.ngZone.runOutsideAngular(() => {\n      this.resizeObserver = new ResizeObserver(entries => {\n        const newHeight = entries[0]?.contentRect.height ?? 0;\n        if (newHeight !== this.viewportHeight) {\n          this.ngZone.run(() => {\n            this.viewportHeight = newHeight;\n            this.updateVisibleItems();\n            this.cdr.markForCheck();\n          });\n        }\n      });\n      this.resizeObserver.observe(this.viewport().nativeElement);\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['ncItems']) {\n      if (this.ncItems().length === 0) {\n        this.clearItemsState();\n        return;\n      }\n\n      if (!this.initialized()) {\n        // templateContainer 仅在 ngAfterViewInit 后可用，未初始化则等待\n        if (this.viewInitialized) {\n          this.measureAndUpdate();\n        }\n        // 否则由 ngAfterViewInit 补调，无需处理\n      } else {\n        this.updateTotalPadding();\n        this.updateVisibleItems();\n      }\n    }\n  }\n\n  onScroll(): void {\n    this.ngZone.run(() => {\n      this.scrollTop.set(this.viewport().nativeElement.scrollTop);\n      this.updateVisibleItems();\n    });\n  }\n\n  updateVisibleItems(): void {\n    const items = this.ncItems();\n    const firstVisibleIndex = Math.floor(this.scrollTop() / this.itemHeight);\n    const startIndex = Math.max(0, firstVisibleIndex - this.ncBufferCount());\n    const visibleItemsCount = Math.ceil(this.viewportHeight / this.itemHeight);\n    const endIndex = Math.min(firstVisibleIndex + visibleItemsCount + this.ncBufferCount(), items.length - 1);\n\n    const nextVisibleItems: Array<VirtualItem<T>> = [];\n    for (let i = startIndex; i <= endIndex; i++) {\n      nextVisibleItems.push({ index: i, data: items[i] });\n    }\n\n    this.visibleItems.set(nextVisibleItems);\n    this.topPadding.set(startIndex * this.itemHeight);\n  }\n\n  updateTotalPadding(): void {\n    this.totalPadding.set(this.ncItems().length * this.itemHeight);\n  }\n\n  private clearItemsState(): void {\n    this.clearMeasureTimer();\n    this.visibleItems.set([]);\n    this.totalPadding.set(0);\n    this.topPadding.set(0);\n    this.scrollTop.set(0);\n    if (this.viewInitialized) {\n      this.viewport().nativeElement.scrollTop = 0;\n    }\n    this.cdr.markForCheck();\n  }\n\n  // 采用track提升性能，只渲染改变的dom\n  trackByIndex(item: VirtualItem<T>): number {\n    return item.index;\n  }\n\n  /** 测量 itemHeight 并更新列表（需在 ngAfterViewInit 之后调用） */\n  private measureAndUpdate(): void {\n    this.clearMeasureTimer();\n    // setTimeout(0) 确保 Angular 已完成本次 DOM 渲染\n    this.measureTimer = window.setTimeout(() => {\n      this.measureTimer = null;\n      const element = this.templateContainer()?.nativeElement.firstElementChild as HTMLElement | null;\n      if (element) {\n        const styles = getComputedStyle(element);\n        this.itemHeight = element.offsetHeight + parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n        this.initialized.set(true);\n      }\n      this.updateTotalPadding();\n      this.updateVisibleItems();\n      this.cdr.markForCheck();\n    });\n  }\n\n  private cleanup(): void {\n    this.clearMeasureTimer();\n    this.resizeObserver?.disconnect();\n    this.resizeObserver = null;\n  }\n\n  private clearMeasureTimer(): void {\n    if (this.measureTimer !== null) {\n      window.clearTimeout(this.measureTimer);\n      this.measureTimer = null;\n    }\n  }\n}\n","<!-- 用于测量 itemHeight 的隐藏探针，仅在初始化前且有数据时渲染，与 visibleItems 完全解耦 -->\n@if (!initialized() && ncItems().length > 0) {\n    <div #templateContainer style=\"visibility:hidden;position:absolute;pointer-events:none;\">\n        <ng-container [ngTemplateOutlet]=\"ncItemTemplate()\"\n            [ngTemplateOutletContext]=\"{$implicit: ncItems()[0], index: 0}\"></ng-container>\n    </div>\n}\n\n<div class=\"viewport\" #viewport (scroll)=\"onScroll()\">\n    <div class=\"total-padding\" [style.height.px]=\"totalPadding()\">\n        <div class=\"item-container\" [style.transform]=\"'translateY(' + topPadding() + 'px)'\">\n            @for (item of visibleItems(); track trackByIndex(item)) {\n                <div>\n                    <ng-container [ngTemplateOutlet]=\"ncItemTemplate()\"\n                        [ngTemplateOutletContext]=\"{$implicit: item.data, index: item.index}\"></ng-container>\n                </div>\n            }\n        </div>\n    </div>\n</div>\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { VirtualScrollComponent } from './virtual-scroll.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        VirtualScrollComponent,\r\n        CommonModule\r\n    ],\r\n    exports: [\r\n        VirtualScrollComponent\r\n    ]\r\n})\r\nexport class NcVirtualScrollModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}