{"version":3,"file":"useVirtualRows.cjs","sources":["../../../../components/data-view/hooks/useVirtualRows.tsx"],"sourcesContent":["'use client';\n\nimport { useVirtualizer, type VirtualItem } from '@tanstack/react-virtual';\n\ninterface UseVirtualRowsParams<TRow> {\n  enabled: boolean;\n  rows: TRow[];\n  scrollRef: React.RefObject<HTMLElement | null>;\n  estimatedRowHeight: number;\n  estimateSize: (row: TRow | undefined, index: number) => number;\n  overscan?: number;\n}\n\ninterface UseVirtualRowsResult {\n  totalSize: number;\n  items: VirtualItem[];\n  measureRef: ((el: HTMLElement | null) => void) | undefined;\n}\n\nconst DEFAULT_OVERSCAN = 8;\n\n/**\n * Wraps `useVirtualizer` with auto-measurement. Consumers pass an initial\n * `estimatedRowHeight` and an `estimateSize(row, i)` that can return a\n * different size for special rows (e.g. group headers). After paint, the\n * virtualizer's `measureElement` re-measures each row so variable-height\n * content settles correctly.\n *\n * When `enabled` is false the hook still calls `useVirtualizer` (so hook order\n * stays stable) but reports `count: 0` and surfaces empty values — the\n * consumer renders rows in natural flow instead.\n */\nexport function useVirtualRows<TRow>({\n  enabled,\n  rows,\n  scrollRef,\n  estimatedRowHeight,\n  estimateSize,\n  overscan = DEFAULT_OVERSCAN\n}: UseVirtualRowsParams<TRow>): UseVirtualRowsResult {\n  const virtualizer = useVirtualizer({\n    count: enabled ? rows.length : 0,\n    getScrollElement: () => scrollRef.current,\n    estimateSize: index => estimateSize(rows[index], index),\n    overscan,\n    initialRect:\n      typeof window === 'undefined'\n        ? { width: 0, height: estimatedRowHeight * overscan }\n        : undefined\n  });\n\n  if (!enabled) {\n    return { totalSize: 0, items: [], measureRef: undefined };\n  }\n\n  return {\n    totalSize: virtualizer.getTotalSize(),\n    items: virtualizer.getVirtualItems(),\n    measureRef: virtualizer.measureElement\n  };\n}\n"],"names":[],"mappings":";;;;;AAmBA;AAEA;;;;;;;;;;AAUG;;;;AAWC;AACA;;AAEA;;AAGI;AACL;;AAGC;;;AAIA;AACA;;;AAGJ;;"}