{"version":3,"file":"ngx-zen-table.mjs","sources":["../../../projects/ngx-zen-table/src/lib/core/viewport-enter.directive.ts","../../../projects/ngx-zen-table/src/lib/zen-table/zen-table.ts","../../../projects/ngx-zen-table/src/lib/zen-table/zen-table.html","../../../projects/ngx-zen-table/src/public-api.ts","../../../projects/ngx-zen-table/src/ngx-zen-table.ts"],"sourcesContent":["import { Directive, ElementRef, EventEmitter, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[viewportEnter]'\r\n})\r\nexport class ViewportEnterDirective implements OnInit, OnDestroy {\r\n  @Output() viewportEnter = new EventEmitter<void>();\r\n  private io?: IntersectionObserver;\r\n\r\n  constructor(private el: ElementRef<HTMLElement>, private zone: NgZone) {}\r\n\r\n  ngOnInit() {\r\n    const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\r\n    if (!isBrowser || typeof (window as any).IntersectionObserver === 'undefined') return;\r\n\r\n    this.zone.runOutsideAngular(() => {\r\n      this.io = new IntersectionObserver(\r\n        entries => {\r\n          if (entries.some(e => e.isIntersecting)) {\r\n            this.zone.run(() => this.viewportEnter.emit());\r\n          }\r\n        },\r\n        { root: this.findScrollContainer(this.el.nativeElement), rootMargin: '300px' }\r\n      );\r\n      this.io.observe(this.el.nativeElement);\r\n    });\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.io?.disconnect();\r\n  }\r\n\r\n  private findScrollContainer(node: HTMLElement): Element | null {\r\n    let n: HTMLElement | null = node.parentElement;\r\n    while (n) {\r\n      const s = getComputedStyle(n);\r\n      if (/(auto|scroll)/.test(s.overflowY)) return n;\r\n      n = n.parentElement;\r\n    }\r\n    return null;\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  OnDestroy,\r\n  TemplateRef,\r\n  ViewChild,\r\n  effect,\r\n  input,\r\n  signal,\r\n  output,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { ViewportEnterDirective } from '../core/viewport-enter.directive';\r\n\r\nexport type ZenColumn<T> = {\r\n  id: string;\r\n  header?: string;\r\n  width?: string | number;\r\n  template?: TemplateRef<{ $implicit: T; index: number }>;\r\n  cell?: (row: T, index: number) => string | number;\r\n  trackBy?: (row: T) => string | number;\r\n};\r\n\r\nexport type ZenLoadPage<T> = (params: {\r\n  page: number;\r\n  pageSize: number;\r\n  cursor?: string;\r\n}) => Promise<{ items: T[]; cursor?: string; hasNext: boolean; total?: number }>;\r\n\r\nfunction debounce<F extends (...args: any[]) => void>(fn: F, ms = 120): F {\r\n  let t: any;\r\n  return ((...args: any[]) => {\r\n    clearTimeout(t);\r\n    t = setTimeout(() => fn(...args), ms);\r\n  }) as F;\r\n}\r\n\r\nfunction findScrollContainer(node: HTMLElement): HTMLElement | null {\r\n  let n: HTMLElement | null = node;\r\n  while (n && n.parentElement) {\r\n    n = n.parentElement;\r\n    const s = getComputedStyle(n);\r\n    if (/(auto|scroll)/.test(s.overflowY)) return n;\r\n  }\r\n  return null;\r\n}\r\n\r\n@Component({\r\n  selector: 'zen-table',\r\n  imports: [CommonModule, MatTableModule, MatCheckboxModule, ViewportEnterDirective],\r\n  templateUrl: './zen-table.html',\r\n  styleUrls: ['./zen-table.css'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZenTableComponent<T> implements AfterViewInit, OnDestroy {\r\n  columns = input.required<ZenColumn<T>[]>();\r\n  fetchPage = input.required<ZenLoadPage<T>>();\r\n  pageSizeHint = input(25);\r\n  rowHeightPx = input(48);\r\n  autoFill = input(true);\r\n  pageSizeCap = input<number | undefined>(200);\r\n  trackByRow = input<((idx: number, row: T) => unknown) | undefined>(undefined);\r\n  stickyHeader = input(false);\r\n  stickyHeaderOffsetPx = input(0);\r\n  resetKey = input(0);\r\n\r\n  selectable = input(false);\r\n  selectionMode = input<'single' | 'multiple'>('multiple');\r\n  getRowKey = input<((row: T) => unknown) | undefined>(undefined);\r\n  selectionChange = output<T[]>();\r\n\r\n  private pageSize = signal(this.pageSizeHint());\r\n  columnIds = signal<string[]>([]);\r\n  private columnIdsWithSelect = signal<string[]>([]);\r\n  rows = signal<T[]>([]);\r\n  private pageIndex = signal(0);\r\n  private cursor = signal<string | undefined>(undefined);\r\n  hasNext = signal(true);\r\n  loading = signal(false);\r\n  displayData = signal<any[]>([]);\r\n  private selectedKeys = signal<Set<unknown>>(new Set());\r\n\r\n  private readonly isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\r\n  @ViewChild('host', { read: ElementRef }) private host?: ElementRef<HTMLElement>;\r\n  private scrollEl?: HTMLElement;\r\n  private resizeObserver?: ResizeObserver;\r\n  private isFilling = false;\r\n  private loadGen = 0;\r\n\r\n  constructor() {\r\n    effect(() => this.pageSize.set(this.pageSizeHint()));\r\n\r\n    effect(() => {\r\n      const base = this.columns().map(c => c.id);\r\n      this.columnIds.set(base);\r\n      this.columnIdsWithSelect.set(this.selectable() ? ['__select', ...base] : base);\r\n    });\r\n\r\n    effect(() => {\r\n      this.rows();\r\n      this.loading();\r\n      this.recomputeDisplayData();\r\n    });\r\n\r\n    effect(() => {\r\n      this.resetKey();\r\n      this.hardReset();\r\n      queueMicrotask(() => this.loadNextPage());\r\n    });\r\n\r\n    queueMicrotask(() => this.loadNextPage());\r\n  }\r\n\r\n  isSkeletonRow = (row: any) => !!row?.__sk;\r\n  isDataRow = (row: any) => !row?.__sk;\r\n\r\n  private skeletonRowCount(): number {\r\n    return Math.min(30, Math.max(6, Math.ceil(this.pageSize())));\r\n  }\r\n\r\n  private hardReset() {\r\n    this.loadGen++;\r\n    this.rows.set([]);\r\n    this.displayData.set([]);\r\n    this.pageIndex.set(0);\r\n    this.cursor.set(undefined);\r\n    this.hasNext.set(true);\r\n    this.loading.set(false);\r\n    this.selectedKeys.set(new Set());\r\n  }\r\n\r\n  private recomputeDisplayData() {\r\n    const data = this.rows();\r\n    if (!this.loading()) {\r\n      this.displayData.set(data);\r\n      return;\r\n    }\r\n\r\n    let target = this.pageSize();\r\n    if (this.autoFill()) target = this.computeTargetRowCount();\r\n    const need = Math.max(0, target - data.length);\r\n    const count = Math.max(3, Math.min(this.skeletonRowCount(), need));\r\n    const sk = Array.from({ length: count }, () => ({ __sk: true }));\r\n    this.displayData.set([...data, ...sk]);\r\n  }\r\n\r\n  private rowKeyOf(row: T, index?: number): unknown {\r\n    const f = this.getRowKey();\r\n    if (f) return f(row);\r\n    const custom = this.trackByRow();\r\n    if (custom) return custom(index ?? -1, row);\r\n    return index ?? (row as unknown);\r\n  }\r\n\r\n  isSelectedByKey(row: T): boolean {\r\n    return this.selectedKeys().has(this.rowKeyOf(row));\r\n  }\r\n\r\n  isSelected(row: T, index: number): boolean {\r\n    return this.selectedKeys().has(this.rowKeyOf(row, index));\r\n  }\r\n\r\n  toggleRow(row: T, index: number): void {\r\n    if (this.isSkeletonRow(row)) return;\r\n    const key = this.rowKeyOf(row, index);\r\n    const set = new Set(this.selectedKeys());\r\n    if (this.selectionMode() === 'single') {\r\n      set.clear();\r\n      set.add(key);\r\n    } else {\r\n      if (set.has(key)) set.delete(key);\r\n      else set.add(key);\r\n    }\r\n    this.selectedKeys.set(set);\r\n    this.emitSelection();\r\n  }\r\n\r\n  get allVisibleSelected(): boolean {\r\n    const set = this.selectedKeys();\r\n    return this.rows().every((r, i) => set.has(this.rowKeyOf(r, i)));\r\n  }\r\n\r\n  toggleSelectAllVisible(checked: boolean): void {\r\n    const set = new Set(this.selectedKeys());\r\n    if (checked) {\r\n      this.rows().forEach((r, i) => set.add(this.rowKeyOf(r, i)));\r\n    } else {\r\n      this.rows().forEach((r, i) => set.delete(this.rowKeyOf(r, i)));\r\n    }\r\n    this.selectedKeys.set(set);\r\n    this.emitSelection();\r\n  }\r\n\r\n  private emitSelection(): void {\r\n    const keys = this.selectedKeys();\r\n    const selected = this.rows().filter((r, i) => keys.has(this.rowKeyOf(r, i)));\r\n    this.selectionChange.emit(selected);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (!this.autoFill()) return;\r\n    const host = this.host?.nativeElement;\r\n    if (!host) return;\r\n\r\n    this.scrollEl = this.isBrowser ? (findScrollContainer(host) ?? host) : undefined;\r\n    const useRO = this.isBrowser && typeof (window as any).ResizeObserver !== 'undefined';\r\n    if (!useRO) {\r\n      this.ensureViewportFilled();\r\n      return;\r\n    }\r\n\r\n    const handler = debounce(() => this.ensureViewportFilled(), 120);\r\n    this.resizeObserver = new ResizeObserver(handler);\r\n    this.resizeObserver.observe(this.scrollEl!);\r\n    this.ensureViewportFilled();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.resizeObserver?.disconnect();\r\n  }\r\n\r\n  private computeTargetRowCount(): number {\r\n    if (!this.isBrowser) return this.pageSize();\r\n    const el = this.scrollEl ?? this.host?.nativeElement;\r\n    const viewport = (el as HTMLElement | undefined)?.clientHeight ?? 0;\r\n    if (viewport <= 0) return this.pageSize();\r\n    const rowH = Math.max(24, this.rowHeightPx());\r\n    const base = Math.ceil((viewport / rowH) * 1.2);\r\n    return this.clampToPageSizeCap(Math.max(10, Math.min(1000, base)));\r\n  }\r\n\r\n  private clampToPageSizeCap(n: number): number {\r\n    const max = this.pageSizeCap();\r\n    return max && max > 0 ? Math.min(n, max) : n;\r\n  }\r\n\r\n  private async ensureViewportFilled() {\r\n    const target = this.computeTargetRowCount();\r\n    if (target !== this.pageSize()) this.pageSize.set(target);\r\n    await this.fillUntilRows(target);\r\n  }\r\n\r\n  private async fillUntilRows(minCount: number) {\r\n    if (this.isFilling) return;\r\n    this.isFilling = true;\r\n    try {\r\n      let loops = 0;\r\n      while (this.rows().length < minCount && this.hasNext() && !this.loading() && loops < 3) {\r\n        loops++;\r\n        await this.loadNextPage();\r\n      }\r\n    } finally {\r\n      this.isFilling = false;\r\n    }\r\n  }\r\n\r\n  async loadNextPage() {\r\n    if (this.loading() || !this.hasNext()) return;\r\n    this.loading.set(true);\r\n\r\n    const gen = this.loadGen;\r\n    try {\r\n      const { items, cursor, hasNext } = await this.fetchPage()({\r\n        page: this.pageIndex(),\r\n        pageSize: this.pageSize(),\r\n        cursor: this.cursor(),\r\n      });\r\n      if (gen !== this.loadGen) return;\r\n      this.rows.set([...this.rows(), ...(items ?? [])]);\r\n      this.cursor.set(cursor);\r\n      this.hasNext.set(hasNext);\r\n      this.pageIndex.set(this.pageIndex() + 1);\r\n    } finally {\r\n      if (gen === this.loadGen) this.loading.set(false);\r\n    }\r\n  }\r\n\r\n  rowTrackBy = (index: number, row: any): unknown => {\r\n    if (row?.__sk) return `__sk_${index}`;\r\n    const custom = this.trackByRow();\r\n    if (custom) return custom(index, row as T);\r\n    const col = this.columns().find(c => !!c.trackBy);\r\n    return col?.trackBy?.(row as T) ?? index;\r\n  };\r\n\r\n  visibleColumnIds() {\r\n    return this.columnIdsWithSelect();\r\n  }\r\n}\r\n","<div #host class=\"zen-table-container\" role=\"grid\" [attr.aria-busy]=\"loading()\">\r\n  <table mat-table [dataSource]=\"displayData()\" [trackBy]=\"rowTrackBy\">\r\n\r\n    @if (selectable()) {\r\n      <ng-container matColumnDef=\"__select\">\r\n        <th mat-header-cell *matHeaderCellDef style=\"width: 48px\">\r\n          @if (selectionMode() === 'multiple') {\r\n            <mat-checkbox\r\n              [checked]=\"allVisibleSelected\"\r\n              (change)=\"toggleSelectAllVisible($event.checked!)\"\r\n              aria-label=\"Select all visible rows\">\r\n            </mat-checkbox>\r\n          }\r\n        </th>\r\n        <td mat-cell *matCellDef=\"let row; let i = index\" style=\"width: 48px\">\r\n          @if (isSkeletonRow(row)) {\r\n            <div class=\"skeleton-cell\" aria-hidden=\"true\"></div>\r\n          } @else {\r\n            <mat-checkbox\r\n              [checked]=\"isSelected(row, i)\"\r\n              (change)=\"toggleRow(row, i)\"\r\n              aria-label=\"Select row\">\r\n            </mat-checkbox>\r\n          }\r\n        </td>\r\n      </ng-container>\r\n    }\r\n\r\n    @for (col of columns(); track col.id) {\r\n      <ng-container [matColumnDef]=\"col.id\">\r\n        <th mat-header-cell *matHeaderCellDef [style.width]=\"col.width ?? null\">\r\n          {{ col.header ?? col.id }}\r\n        </th>\r\n\r\n        <td mat-cell *matCellDef=\"let row; let i = index\"\r\n            (click)=\"!isSkeletonRow(row) && selectable() && toggleRow(row, i)\">\r\n          @if (isSkeletonRow(row)) {\r\n            <div class=\"skeleton-cell\" aria-hidden=\"true\"></div>\r\n          } @else if (col.template) {\r\n            <ng-container\r\n              *ngTemplateOutlet=\"col.template; context: {$implicit: row, index: i}\">\r\n            </ng-container>\r\n          } @else {\r\n            {{ col.cell?.(row, i) }}\r\n          }\r\n        </td>\r\n      </ng-container>\r\n    }\r\n\r\n    <tr mat-header-row *matHeaderRowDef=\"visibleColumnIds(); sticky: stickyHeader()\"></tr>\r\n\r\n    <tr mat-row\r\n        *matRowDef=\"let row; columns: visibleColumnIds(); when: isDataRow\"\r\n        [attr.aria-selected]=\"isSelectedByKey(row) ? 'true' : 'false'\">\r\n    </tr>\r\n\r\n    <tr mat-row\r\n        class=\"is-skeleton-row\"\r\n        *matRowDef=\"let row; columns: visibleColumnIds(); when: isSkeletonRow\"\r\n        aria-hidden=\"true\"\r\n        role=\"presentation\">\r\n    </tr>\r\n  </table>\r\n\r\n  @if (!loading() && rows().length === 0) {\r\n    <div class=\"zen-empty\" aria-live=\"polite\">No results found.</div>\r\n  }\r\n\r\n  <div class=\"zen-sentinel\" (viewportEnter)=\"loadNextPage()\"></div>\r\n</div>\r\n","/*\r\n * Public API Surface of ngx-zen-table\r\n */\r\n\r\nexport * from './lib/core/viewport-enter.directive';\r\nexport * from './lib/zen-table/zen-table';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}