@zvndev/yable-react 0.3.0 → 0.5.0

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useTable.ts","../src/hooks/useVirtualization.ts","../src/hooks/useColumnVirtualization.ts","../src/hooks/usePretextMeasurement.ts","../src/cells/CellBadge.tsx","../src/cells/CellCurrency.tsx","../src/cells/CellStatus.tsx","../src/cells/CellNumeric.tsx","../src/cells/CellRating.tsx","../src/cells/CellBoolean.tsx","../src/cells/CellProgress.tsx","../src/cells/CellDate.tsx","../src/cells/CellLink.tsx","../src/cells/resolver.tsx","../src/hooks/useAutoMeasurements.ts","../src/hooks/useTableRowHeights.ts","../src/context.ts","../src/components/SortIndicator.tsx","../src/components/SetFilter.tsx","../src/components/FloatingFilter.tsx","../src/components/TableHeader.tsx","../src/components/CellStatusBadge.tsx","../src/components/TableCell.tsx","../src/components/ErrorBoundary.tsx","../src/components/TableBody.tsx","../src/components/TableFooter.tsx","../src/components/LoadingOverlay.tsx","../src/components/NoRowsOverlay.tsx","../src/components/StatusBarPanel.tsx","../src/components/StatusBar.tsx","../src/components/ColumnsPanel.tsx","../src/components/FiltersPanel.tsx","../src/components/Sidebar.tsx","../src/components/ContextMenuItem.tsx","../src/components/ContextMenu.tsx","../src/hooks/useContextMenu.ts","../src/hooks/useKeyboardNavigation.ts","../src/components/Table.tsx","../src/components/Pagination.tsx","../src/components/GlobalFilter.tsx","../src/form/CellInput.tsx","../src/form/CellSelect.tsx","../src/form/CellCheckbox.tsx","../src/form/CellToggle.tsx","../src/form/CellDatePicker.tsx","../src/hooks/useClipboard.ts","../src/hooks/useFillHandle.ts","../src/components/FillHandle.tsx","../src/components/DragHandle.tsx","../src/hooks/useRowDrag.ts","../src/components/TreeToggle.tsx","../src/components/MasterDetail.tsx","../src/components/ExpandIcon.tsx","../src/components/PivotConfig.tsx","../src/components/Tooltip.tsx","../src/hooks/useTooltip.ts","../src/components/FlashCell.tsx","../src/hooks/useCellFlash.ts","../src/hooks/useRowAnimation.ts","../src/components/PrintLayout.tsx","../src/hooks/usePrintLayout.ts","../src/hooks/useTheme.ts"],"names":["useRef","useCallback","useState","useEffect","useMemo","measureRecipe","jsx","jsxs","pinned","React","Fragment","getDefaultLocale","items","canCellEnterEditMode","direction","SearchIcon","isEditableTarget"],"mappings":"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","file":"index.js","sourcesContent":["// @zvndev/yable-react — useTable hook\n\nimport { useState, useRef, useMemo, useCallback, useEffect } from 'react'\nimport {\n createTable,\n functionalUpdate,\n type RowData,\n type TableOptions,\n type TableOptionsResolved,\n type TableState,\n type Table,\n type Updater,\n} from '@zvndev/yable-core'\n\n/**\n * Shallow-compare two objects. Returns true if all own keys are strictly equal.\n */\nfunction shallowEqual<T extends Record<string, unknown>>(a: T, b: T): boolean {\n if (a === b) return true\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if ((a as any)[key] !== (b as any)[key]) return false\n }\n return true\n}\n\n/**\n * React hook that wraps the framework-agnostic core table engine.\n *\n * Returns a stable {@link Table} instance whose `state` reflects either\n * the consumer's controlled `options.state` or the hook's internal state.\n *\n * Re-renders are triggered by `setState` from the default `onStateChange`\n * implementation. Consumers may pass their own `onStateChange` to control\n * state externally.\n *\n * Gotcha: `options.onStateChange` is captured via a latest-ref, so a fresh\n * function identity from the parent is always invoked — even if every other\n * option key is shallow-equal to the previous render.\n */\nexport function useTable<TData extends RowData>(\n options: TableOptions<TData>\n): Table<TData> {\n // Internal state — only used if consumer doesn't provide controlled state\n const [state, setState] = useState<TableState>(() => ({\n sorting: [],\n columnFilters: [],\n globalFilter: '',\n pagination: { pageIndex: 0, pageSize: 10 },\n rowSelection: {},\n columnVisibility: {},\n columnOrder: [],\n columnPinning: { left: [], right: [] },\n columnSizing: {},\n columnSizingInfo: {\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n },\n expanded: {},\n rowPinning: { top: [], bottom: [] },\n grouping: [],\n editing: { activeCell: undefined, pendingValues: {} },\n commits: { cells: {}, nextOpId: 1 },\n keyboardNavigation: { focusedCell: null },\n undoRedo: { undoStack: [], redoStack: [], maxSize: 50 },\n fillHandle: { isDragging: false },\n formulas: { enabled: false, formulas: {}, computedValues: {}, errors: {} },\n rowDrag: { draggingRowId: null, overRowId: null, dropPosition: null },\n pivot: {\n enabled: false,\n config: { rowFields: [], columnFields: [], valueFields: [] },\n expandedRowGroups: {},\n expandedColumnGroups: {},\n },\n ...options.initialState,\n ...options.state,\n }))\n\n const stateRef = useRef(state)\n stateRef.current = state\n\n // Track previous options to avoid recomputing when consumer passes\n // a structurally identical but referentially new options object\n const prevOptionsRef = useRef(options)\n const stableOptions = useMemo(() => {\n if (shallowEqual(prevOptionsRef.current as any, options as any)) {\n return prevOptionsRef.current\n }\n prevOptionsRef.current = options\n return options\n }, [options])\n\n // Latest-ref for onStateChange so the wrapper always invokes the freshest\n // callback identity, even when every other key in `options` is shallow-equal\n // (which would otherwise leave `stableOptions` referentially identical and\n // mask a new function identity from the parent).\n const onStateChangeRef = useRef(options.onStateChange)\n onStateChangeRef.current = options.onStateChange\n\n const resolvedState = useMemo(\n () => ({\n ...state,\n ...stableOptions.state,\n }),\n [state, stableOptions.state]\n )\n\n const onStateChange = useCallback(\n (updater: Updater<TableState>) => {\n const latest = onStateChangeRef.current\n if (latest) {\n latest(updater)\n } else {\n setState((prev) => functionalUpdate(updater, prev))\n }\n },\n []\n )\n\n const resolvedOptions: TableOptions<TData> = useMemo(\n () => ({\n ...stableOptions,\n state: resolvedState,\n onStateChange,\n }),\n [stableOptions, resolvedState, onStateChange]\n )\n\n // Create or update the table instance\n const tableRef = useRef<Table<TData> | null>(null)\n\n if (!tableRef.current) {\n tableRef.current = createTable(resolvedOptions)\n } else {\n tableRef.current.setOptions((prev) => ({\n ...prev,\n ...resolvedOptions,\n state: resolvedState,\n onStateChange,\n }) as TableOptionsResolved<TData>)\n }\n\n // Clean up event listeners on unmount to prevent memory leaks in SPAs\n useEffect(() => {\n return () => {\n if (tableRef.current) {\n tableRef.current.events.removeAllListeners()\n }\n }\n }, [])\n\n return tableRef.current\n}\n","// @zvndev/yable-react — Row virtualization hook\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nexport interface VirtualRow {\n index: number\n start: number\n size: number\n}\n\nexport interface UseVirtualizationOptions {\n containerRef: React.RefObject<HTMLElement | null>\n totalRows: number\n rowHeight?: number | ((index: number) => number)\n overscan?: number\n estimateRowHeight?: number\n /** Pre-computed row heights from Pretext measurement (Float64Array indexed by row) */\n pretextHeights?: Float64Array | null\n /** Pre-computed prefix sums for O(log n) scroll lookups */\n pretextPrefixSums?: Float64Array | null\n}\n\nexport interface UseVirtualizationResult {\n virtualRows: VirtualRow[]\n totalHeight: number\n startIndex: number\n endIndex: number\n scrollTo: (index: number) => void\n}\n\nconst EMPTY_RESULT: Omit<UseVirtualizationResult, 'scrollTo'> = {\n virtualRows: [],\n totalHeight: 0,\n startIndex: 0,\n endIndex: 0,\n}\n\n/**\n * Computes which rows are visible in a scrollable container and returns\n * positioning data so only those rows (plus an overscan buffer) are rendered.\n *\n * Returns `{ virtualRows, totalHeight, startIndex, endIndex, scrollTo }`.\n * Re-renders are triggered by scroll (rAF-throttled) and ResizeObserver\n * container resize. Supports fixed, variable, and Pretext-pre-measured heights.\n *\n * Gotcha: variable-height mode caches measured heights per index — pass new\n * `pretextHeights` arrays (or change `totalRows`) to invalidate the cache.\n */\nexport function useVirtualization({\n containerRef,\n totalRows,\n rowHeight = 40,\n overscan = 5,\n estimateRowHeight: _estimateRowHeight,\n pretextHeights,\n pretextPrefixSums,\n}: UseVirtualizationOptions): UseVirtualizationResult {\n const hasPretextHeights = !!(\n pretextHeights &&\n pretextPrefixSums &&\n pretextHeights.length >= totalRows\n )\n const isFixedHeight = typeof rowHeight === 'number' && !hasPretextHeights\n\n // Cache for variable row heights (index -> measured or estimated size)\n const heightCacheRef = useRef<Map<number, number>>(new Map())\n\n const getRowHeight = useCallback(\n (index: number): number => {\n // Pretext heights take priority — exact pixel values.\n // Safe: hasPretextHeights verified pretextHeights.length >= totalRows and index < totalRows\n if (hasPretextHeights) return pretextHeights![index]!\n if (isFixedHeight) return rowHeight as number\n // Check cache first\n const cached = heightCacheRef.current.get(index)\n if (cached !== undefined) return cached\n // Use the rowHeight function if provided\n const height = (rowHeight as (index: number) => number)(index)\n heightCacheRef.current.set(index, height)\n return height\n },\n [rowHeight, isFixedHeight, hasPretextHeights, pretextHeights],\n )\n\n const [scrollState, setScrollState] = useState<{\n scrollTop: number\n containerHeight: number\n }>({ scrollTop: 0, containerHeight: 0 })\n\n // RAF handle for scroll throttling\n const rafRef = useRef<number | null>(null)\n\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n // Initialize container dimensions\n setScrollState({\n scrollTop: container.scrollTop,\n containerHeight: container.clientHeight,\n })\n\n const handleScroll = () => {\n if (rafRef.current !== null) return\n\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = null\n const el = containerRef.current\n if (!el) return\n setScrollState({\n scrollTop: el.scrollTop,\n containerHeight: el.clientHeight,\n })\n })\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n\n // Handle container resize via ResizeObserver\n let resizeObserver: ResizeObserver | undefined\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => {\n const el = containerRef.current\n if (!el) return\n setScrollState((prev) => {\n const newHeight = el.clientHeight\n if (prev.containerHeight === newHeight) return prev\n return { ...prev, containerHeight: newHeight }\n })\n })\n resizeObserver.observe(container)\n }\n\n return () => {\n container.removeEventListener('scroll', handleScroll)\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current)\n rafRef.current = null\n }\n if (resizeObserver) {\n resizeObserver.disconnect()\n }\n }\n }, [containerRef])\n\n // Clear height cache when totalRows changes significantly\n useEffect(() => {\n if (!isFixedHeight) {\n heightCacheRef.current.clear()\n }\n }, [totalRows, isFixedHeight])\n\n // scrollTo must be declared before any early returns (rules of hooks)\n const scrollTo = useCallback(\n (index: number) => {\n const container = containerRef.current\n if (!container || totalRows === 0) return\n const clampedIndex = Math.max(0, Math.min(index, totalRows - 1))\n\n if (hasPretextHeights && pretextPrefixSums!) {\n // Instant: prefix sums give us the exact offset.\n // Safe: hasPretextHeights verified length, clampedIndex < totalRows <= pretextPrefixSums.length\n container.scrollTop = pretextPrefixSums![clampedIndex]!\n } else if (isFixedHeight) {\n container.scrollTop = clampedIndex * (rowHeight as number)\n } else {\n let offset = 0\n for (let i = 0; i < clampedIndex; i++) {\n offset += getRowHeight(i)\n }\n container.scrollTop = offset\n }\n },\n [\n containerRef,\n totalRows,\n rowHeight,\n isFixedHeight,\n getRowHeight,\n hasPretextHeights,\n pretextPrefixSums,\n ],\n )\n\n // Compute total height — pretext prefix sums give us this for free\n const totalHeight = useMemo(() => {\n if (totalRows === 0) return 0\n // Safe: prefixSums has length data.length + 1, totalRows === data.length, so [totalRows] exists\n if (hasPretextHeights && pretextPrefixSums!) return pretextPrefixSums![totalRows]!\n if (isFixedHeight) return totalRows * (rowHeight as number)\n let total = 0\n for (let i = 0; i < totalRows; i++) {\n total += getRowHeight(i)\n }\n return total\n }, [totalRows, rowHeight, isFixedHeight, getRowHeight, hasPretextHeights, pretextPrefixSums])\n\n const { scrollTop, containerHeight } = scrollState\n\n // Edge case: no rows\n if (totalRows === 0) {\n return { ...EMPTY_RESULT, scrollTo }\n }\n\n // Edge case: container not yet measured\n if (containerHeight === 0) {\n return {\n virtualRows: [],\n totalHeight,\n startIndex: 0,\n endIndex: 0,\n scrollTo,\n }\n }\n\n // Find visible range\n let startIndex = 0\n let endIndex = 0\n\n if (hasPretextHeights && pretextPrefixSums!) {\n // O(log n) binary search using pre-computed prefix sums\n // Find first row whose bottom edge is past scrollTop\n let lo = 0\n let hi = totalRows - 1\n while (lo < hi) {\n const mid = (lo + hi) >>> 1\n // Safe: mid + 1 <= hi + 1 <= totalRows < prefixSums.length (length is data.length + 1)\n if (pretextPrefixSums![mid + 1]! <= scrollTop) {\n lo = mid + 1\n } else {\n hi = mid\n }\n }\n startIndex = lo\n\n // Find last row whose top edge is before scrollTop + containerHeight\n const bottomEdge = scrollTop + containerHeight\n lo = startIndex\n hi = totalRows - 1\n while (lo < hi) {\n const mid = (lo + hi + 1) >>> 1\n // Safe: mid <= hi < totalRows < prefixSums.length\n if (pretextPrefixSums![mid]! < bottomEdge) {\n lo = mid\n } else {\n hi = mid - 1\n }\n }\n endIndex = lo\n } else if (isFixedHeight) {\n const fixedH = rowHeight as number\n startIndex = Math.floor(scrollTop / fixedH)\n endIndex = Math.min(totalRows - 1, Math.ceil((scrollTop + containerHeight) / fixedH) - 1)\n } else {\n // Variable heights: walk rows to find the visible range\n let accum = 0\n let foundStart = false\n\n for (let i = 0; i < totalRows; i++) {\n const h = getRowHeight(i)\n if (!foundStart && accum + h > scrollTop) {\n startIndex = i\n foundStart = true\n }\n if (foundStart && accum >= scrollTop + containerHeight) {\n endIndex = i - 1\n break\n }\n accum += h\n if (i === totalRows - 1) {\n endIndex = i\n }\n }\n\n if (!foundStart) {\n startIndex = 0\n endIndex = 0\n }\n }\n\n // Apply overscan\n const overscanStart = Math.max(0, startIndex - overscan)\n const overscanEnd = Math.min(totalRows - 1, endIndex + overscan)\n\n // Build virtual rows\n const virtualRows: VirtualRow[] = []\n\n if (hasPretextHeights && pretextPrefixSums!) {\n // Fastest path: prefix sums give us start offsets directly.\n // Safe: i in [overscanStart, overscanEnd] ⊆ [0, totalRows - 1] < both arrays' lengths\n for (let i = overscanStart; i <= overscanEnd; i++) {\n virtualRows.push({\n index: i,\n start: pretextPrefixSums![i]!,\n size: pretextHeights![i]!,\n })\n }\n } else if (isFixedHeight) {\n const fixedH = rowHeight as number\n for (let i = overscanStart; i <= overscanEnd; i++) {\n virtualRows.push({\n index: i,\n start: i * fixedH,\n size: fixedH,\n })\n }\n } else {\n // Compute start offset for overscanStart\n let offset = 0\n for (let i = 0; i < overscanStart; i++) {\n offset += getRowHeight(i)\n }\n for (let i = overscanStart; i <= overscanEnd; i++) {\n const h = getRowHeight(i)\n virtualRows.push({\n index: i,\n start: offset,\n size: h,\n })\n offset += h\n }\n }\n\n return {\n virtualRows,\n totalHeight,\n startIndex: overscanStart,\n endIndex: overscanEnd,\n scrollTo,\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { Column, RowData } from '@zvndev/yable-core'\n\nexport interface VirtualColumn<TData extends RowData> {\n column: Column<TData, unknown>\n index: number\n start: number\n size: number\n}\n\nexport interface UseColumnVirtualizationOptions<TData extends RowData> {\n containerRef: React.RefObject<HTMLElement | null>\n columns: Column<TData, unknown>[]\n overscan?: number\n enabled?: boolean\n}\n\nexport interface UseColumnVirtualizationResult<TData extends RowData> {\n virtualColumns: VirtualColumn<TData>[]\n startOffset: number\n endOffset: number\n totalWidth: number\n visibleWidth: number\n startIndex: number\n endIndex: number\n isVirtualized: boolean\n scrollToIndex: (index: number) => void\n}\n\nfunction binarySearchOffsets(offsets: number[], target: number): number {\n let low = 0\n let high = offsets.length - 1\n\n while (low < high) {\n const mid = (low + high) >>> 1\n if (offsets[mid + 1]! <= target) {\n low = mid + 1\n } else {\n high = mid\n }\n }\n\n return low\n}\n\nexport function useColumnVirtualization<TData extends RowData>({\n containerRef,\n columns,\n overscan = 2,\n enabled = true,\n}: UseColumnVirtualizationOptions<TData>): UseColumnVirtualizationResult<TData> {\n const [scrollState, setScrollState] = useState({\n scrollLeft: 0,\n containerWidth: 0,\n })\n const rafRef = useRef<number | null>(null)\n\n const sizes = useMemo(() => columns.map((column) => column.getSize()), [columns])\n\n const offsets = useMemo(() => {\n const next = new Array<number>(columns.length + 1)\n next[0] = 0\n for (let i = 0; i < columns.length; i++) {\n next[i + 1] = next[i]! + (sizes[i] ?? 0)\n }\n return next\n }, [columns.length, sizes])\n\n const totalWidth = offsets[offsets.length - 1] ?? 0\n\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n setScrollState({\n scrollLeft: container.scrollLeft,\n containerWidth: container.clientWidth,\n })\n\n const handleScroll = () => {\n if (rafRef.current !== null) return\n\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = null\n const el = containerRef.current\n if (!el) return\n setScrollState({\n scrollLeft: el.scrollLeft,\n containerWidth: el.clientWidth,\n })\n })\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n\n let resizeObserver: ResizeObserver | undefined\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => {\n const el = containerRef.current\n if (!el) return\n setScrollState((prev) => {\n const nextWidth = el.clientWidth\n if (prev.containerWidth === nextWidth && prev.scrollLeft === el.scrollLeft) {\n return prev\n }\n return {\n scrollLeft: el.scrollLeft,\n containerWidth: nextWidth,\n }\n })\n })\n resizeObserver.observe(container)\n }\n\n return () => {\n container.removeEventListener('scroll', handleScroll)\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current)\n rafRef.current = null\n }\n resizeObserver?.disconnect()\n }\n }, [containerRef])\n\n const scrollToIndex = useCallback(\n (index: number) => {\n const container = containerRef.current\n if (!container || columns.length === 0) return\n const clampedIndex = Math.max(0, Math.min(index, columns.length - 1))\n container.scrollLeft = offsets[clampedIndex] ?? 0\n },\n [columns.length, containerRef, offsets],\n )\n\n if (!enabled || columns.length === 0) {\n return {\n virtualColumns: columns.map((column, index) => ({\n column,\n index,\n start: offsets[index] ?? 0,\n size: sizes[index] ?? 0,\n })),\n startOffset: 0,\n endOffset: 0,\n totalWidth,\n visibleWidth: totalWidth,\n startIndex: 0,\n endIndex: Math.max(columns.length - 1, 0),\n isVirtualized: false,\n scrollToIndex,\n }\n }\n\n const { scrollLeft, containerWidth } = scrollState\n\n if (containerWidth <= 0 || totalWidth <= containerWidth) {\n return {\n virtualColumns: columns.map((column, index) => ({\n column,\n index,\n start: offsets[index] ?? 0,\n size: sizes[index] ?? 0,\n })),\n startOffset: 0,\n endOffset: 0,\n totalWidth,\n visibleWidth: totalWidth,\n startIndex: 0,\n endIndex: Math.max(columns.length - 1, 0),\n isVirtualized: false,\n scrollToIndex,\n }\n }\n\n const startIndex = binarySearchOffsets(offsets, scrollLeft)\n const endBoundary = scrollLeft + containerWidth\n const endIndex = binarySearchOffsets(offsets, Math.max(scrollLeft, endBoundary - 1))\n\n const overscanStart = Math.max(0, startIndex - overscan)\n const overscanEnd = Math.min(columns.length - 1, endIndex + overscan)\n\n const virtualColumns: VirtualColumn<TData>[] = []\n for (let i = overscanStart; i <= overscanEnd; i++) {\n virtualColumns.push({\n column: columns[i]!,\n index: i,\n start: offsets[i] ?? 0,\n size: sizes[i] ?? 0,\n })\n }\n\n const startOffset = offsets[overscanStart] ?? 0\n const visibleWidth = (offsets[overscanEnd + 1] ?? totalWidth) - startOffset\n const endOffset = totalWidth - (offsets[overscanEnd + 1] ?? totalWidth)\n\n return {\n virtualColumns,\n startOffset,\n endOffset,\n totalWidth,\n visibleWidth,\n startIndex: overscanStart,\n endIndex: overscanEnd,\n isVirtualized: true,\n scrollToIndex,\n }\n}\n","// @zvndev/yable-react — Pretext-powered row height pre-computation\n//\n// Uses @chenglou/pretext to measure text layout WITHOUT DOM access.\n// Returns exact pixel heights for every row before any rendering happens.\n// This makes virtualization pixel-perfect: no scroll jitter, no height corrections.\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\n\n// Dynamic import types — pretext is an optional dependency\ntype PreparedText = { readonly [brand: symbol]: true }\ntype LayoutResult = { lineCount: number; height: number }\ntype PrepareFn = (text: string, font: string) => PreparedText\ntype LayoutFn = (prepared: PreparedText, maxWidth: number, lineHeight: number) => LayoutResult\n\ninterface PretextModule {\n prepare: PrepareFn\n layout: LayoutFn\n clearCache: () => void\n}\n\nexport interface CellMeasurement {\n /** Column ID */\n columnId: string\n /** Column width in px */\n width: number\n /** CSS font string for this column, e.g. \"400 13px Inter\" */\n font: string\n /** Line height in px */\n lineHeight: number\n /** Vertical padding in px (top + bottom) */\n padding?: number\n /**\n * If true, this column never wraps text — Pretext skips text measurement\n * for it and contributes a constant `lineHeight + padding` to every row.\n * Use this for visual cells like progress bars and rating stars.\n */\n fixedHeight?: boolean\n}\n\nexport interface UsePretextMeasurementOptions {\n /** The row data to measure */\n data: any[]\n /** Measurement config per column — only columns that need text measurement */\n columns: CellMeasurement[]\n /** Extract the text content for a given row and column */\n getCellText: (row: any, columnId: string) => string\n /** Minimum row height in px */\n minRowHeight?: number\n /** Whether measurement is enabled */\n enabled?: boolean\n}\n\nexport interface UsePretextMeasurementResult {\n /** Map from row index → exact pixel height */\n rowHeights: Float64Array | null\n /** Pre-computed cumulative offsets for binary search (prefix sums) */\n prefixSums: Float64Array | null\n /** Total height of all rows in px */\n totalHeight: number\n /** Whether pretext is loaded and heights are computed */\n ready: boolean\n /** Time taken for prepare() phase in ms */\n prepareTimeMs: number\n /** Time taken for layout() phase in ms */\n layoutTimeMs: number\n}\n\n// Singleton: try to load pretext once\nlet pretextPromise: Promise<PretextModule | null> | null = null\n\nfunction loadPretext(): Promise<PretextModule | null> {\n if (pretextPromise) return pretextPromise\n pretextPromise = import('@chenglou/pretext')\n .then((mod) => mod as unknown as PretextModule)\n .catch(() => null)\n return pretextPromise\n}\n\n/**\n * Pre-computes exact pixel heights for every row using Pretext's\n * DOM-free text measurement.\n *\n * Returns `{ rowHeights, prefixSums, totalHeight, ready, ... }` as typed\n * arrays for cache-friendly access by the virtualizer. `prepare()` re-runs\n * when `data` or fonts change; `layout()` re-runs only when column widths\n * change (pure math, ~0.0003ms per cell).\n *\n * Gotcha: pretext is loaded lazily — `ready` flips to true on the first\n * render after the dynamic import resolves and heights are computed.\n */\nexport function usePretextMeasurement({\n data,\n columns,\n getCellText,\n minRowHeight = 32,\n enabled = true,\n}: UsePretextMeasurementOptions): UsePretextMeasurementResult {\n const [pretext, setPretext] = useState<PretextModule | null>(null)\n const [ready, setReady] = useState(false)\n const prepareTimeRef = useRef(0)\n const layoutTimeRef = useRef(0)\n\n // Stable reference for column widths (used to detect resize)\n const columnWidthsKey = columns.map((c) => `${c.columnId}:${c.width}`).join('|')\n\n // Load pretext on mount\n useEffect(() => {\n if (!enabled) return\n let cancelled = false\n loadPretext().then((mod) => {\n if (!cancelled && mod) setPretext(mod)\n })\n return () => {\n cancelled = true\n }\n }, [enabled])\n\n // Cache prepared text handles — keyed by \"text|font\"\n // These survive column resizes (only layout() needs to re-run)\n const preparedCacheRef = useRef<Map<string, PreparedText>>(new Map())\n\n // Phase 1: prepare() — runs when data or fonts change\n // Fixed-height columns are skipped here entirely (no text measurement needed).\n const preparedCells = useMemo(() => {\n if (!pretext || !enabled || data.length === 0 || columns.length === 0) return null\n\n const cache = preparedCacheRef.current\n const start = performance.now()\n const result: { rowIndex: number; columnId: string; prepared: PreparedText }[] = []\n\n for (let r = 0; r < data.length; r++) {\n for (const col of columns) {\n if (col.fixedHeight) continue\n const text = getCellText(data[r], col.columnId)\n if (!text) continue\n const key = `${text}|${col.font}`\n let prepared = cache.get(key)\n if (!prepared) {\n prepared = pretext.prepare(text, col.font)\n cache.set(key, prepared)\n }\n result.push({ rowIndex: r, columnId: col.columnId, prepared })\n }\n }\n\n prepareTimeRef.current = performance.now() - start\n return result\n // Re-run when data changes or fonts change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n pretext,\n enabled,\n data,\n columns.map((c) => `${c.columnId}:${c.font}:${c.fixedHeight ? 'F' : 'T'}`).join('|'),\n ])\n\n // Phase 2: layout() — runs when column widths change (pure math, instant)\n const measurement = useMemo(() => {\n if (!pretext || !preparedCells) {\n return { rowHeights: null, prefixSums: null, totalHeight: 0 }\n }\n\n const start = performance.now()\n const rowHeights = new Float64Array(data.length).fill(minRowHeight)\n\n // Column config lookup\n const colMap = new Map<string, CellMeasurement>()\n for (const col of columns) colMap.set(col.columnId, col)\n\n // Seed every row with the tallest fixed-height column contribution.\n // These don't depend on text, so they can be applied up front in O(rows).\n let fixedFloor = 0\n for (const col of columns) {\n if (col.fixedHeight) {\n const h = col.lineHeight + (col.padding ?? 0)\n if (h > fixedFloor) fixedFloor = h\n }\n }\n if (fixedFloor > 0) {\n for (let r = 0; r < data.length; r++) {\n // Safe: r < data.length === rowHeights.length (Float64Array allocated above)\n if (fixedFloor > rowHeights[r]!) rowHeights[r] = fixedFloor\n }\n }\n\n // Layout every text cell and take max height per row\n for (const { rowIndex, columnId, prepared } of preparedCells) {\n const col = colMap.get(columnId)\n if (!col) continue\n const result = pretext.layout(prepared, col.width, col.lineHeight)\n const cellHeight = result.height + (col.padding ?? 16)\n // Safe: rowIndex came from iterating `0..data.length` when building preparedCells\n if (cellHeight > rowHeights[rowIndex]!) {\n rowHeights[rowIndex] = cellHeight\n }\n }\n\n // Build prefix sums for O(log n) binary search in virtualizer\n const prefixSums = new Float64Array(data.length + 1)\n for (let i = 0; i < data.length; i++) {\n // Safe: i < data.length, and prefixSums has length data.length + 1\n prefixSums[i + 1] = prefixSums[i]! + rowHeights[i]!\n }\n\n layoutTimeRef.current = performance.now() - start\n\n return {\n rowHeights,\n prefixSums,\n // Safe: prefixSums has length data.length + 1, so [data.length] always exists\n totalHeight: prefixSums[data.length]!,\n }\n // Re-run on column width changes (layout is pure math, ~15ms for 50k cells)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pretext, preparedCells, columnWidthsKey, minRowHeight, data.length])\n\n // Mark ready once we have heights\n useEffect(() => {\n if (measurement.rowHeights) setReady(true)\n }, [measurement.rowHeights])\n\n return {\n rowHeights: measurement.rowHeights,\n prefixSums: measurement.prefixSums,\n totalHeight: measurement.totalHeight,\n ready,\n prepareTimeMs: prepareTimeRef.current,\n layoutTimeMs: layoutTimeRef.current,\n }\n}\n","// @zvndev/yable-react — CellBadge display component\n// Renders categorical data as a styled pill/badge.\n// Theme-aware via CSS custom properties.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellBadgeProps, CellMeasureRecipe } from './types'\n\n/**\n * Default text-measurement recipe for badge cells.\n * Single-line text with theme-default font + standard padding.\n * Consumers can override per-column via `column.measureRecipe`.\n */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '500 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nexport function CellBadge<TData extends RowData, TValue>({\n context,\n variant = 'default',\n appearance = 'soft',\n className,\n}: CellBadgeProps & { context: CellContext<TData, TValue> }) {\n const value = context.getValue()\n if (value == null || value === '') return null\n\n const classNames = [\n 'yable-cell-badge',\n `yable-cell-badge--${variant}`,\n `yable-cell-badge--${appearance}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <span className={classNames}>{String(value)}</span>\n}\n\nCellBadge.displayName = 'CellBadge'\n","// @zvndev/yable-react — CellCurrency display component\n// Renders numbers as formatted currency with tabular figures.\n\nimport { useMemo } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellCurrencyProps, CellMeasureRecipe } from './types'\n\n/**\n * Currency cells render numbers using tabular figures and never wrap.\n * Treated as a single text line with theme-default body font.\n */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nexport function CellCurrency<TData extends RowData, TValue>({\n context,\n currency = 'USD',\n locale = 'en-US',\n decimals,\n colorize = false,\n className,\n}: CellCurrencyProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const num = typeof raw === 'number' ? raw : Number(raw)\n\n const formatter = useMemo(\n () =>\n new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: decimals ?? 0,\n maximumFractionDigits: decimals ?? 0,\n }),\n [locale, currency, decimals]\n )\n\n if (raw == null || isNaN(num)) return null\n\n const classNames = [\n 'yable-cell-currency',\n colorize && num > 0 && 'yable-cell-currency--positive',\n colorize && num < 0 && 'yable-cell-currency--negative',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <span className={classNames}>{formatter.format(num)}</span>\n}\n\nCellCurrency.displayName = 'CellCurrency'\n","// @zvndev/yable-react — CellStatus display component\n// Renders a status dot + label for state indicators.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellStatusProps, CellMeasureRecipe } from './types'\n\n/** Status pill: short, single-line label paired with a color dot. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '500 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nconst DEFAULT_COLOR_MAP: Record<string, string> = {\n active: 'success',\n inactive: 'danger',\n enabled: 'success',\n disabled: 'danger',\n published: 'success',\n draft: 'warning',\n review: 'info',\n pending: 'warning',\n archived: 'default',\n error: 'danger',\n failed: 'danger',\n success: 'success',\n complete: 'success',\n completed: 'success',\n cancelled: 'danger',\n canceled: 'danger',\n true: 'success',\n false: 'danger',\n}\n\nexport function CellStatus<TData extends RowData, TValue>({\n context,\n colorMap,\n className,\n}: CellStatusProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n if (raw == null) return null\n\n const label = String(raw)\n const normalizedKey = label.toLowerCase().trim()\n\n // Resolve color: user map first, then defaults, then 'default'\n const color = colorMap?.[normalizedKey]\n ?? colorMap?.[label]\n ?? DEFAULT_COLOR_MAP[normalizedKey]\n ?? 'default'\n\n const classNames = [\n 'yable-cell-status',\n `yable-cell-status--${color}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <span className={classNames}>{label}</span>\n}\n\nCellStatus.displayName = 'CellStatus'\n","// @zvndev/yable-react — CellNumeric display component\n// Right-aligned number with tabular figures and optional unit suffix.\n\nimport { useMemo } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellNumericProps, CellMeasureRecipe } from './types'\n\n/** Right-aligned tabular number. Always single-line. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nexport function CellNumeric<TData extends RowData, TValue>({\n context,\n locale = 'en-US',\n unit,\n decimals,\n colorize = false,\n className,\n}: CellNumericProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const num = typeof raw === 'number' ? raw : Number(raw)\n\n const formatter = useMemo(\n () =>\n new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }),\n [locale, decimals]\n )\n\n if (raw == null || isNaN(num)) return null\n\n const classNames = [\n 'yable-cell-numeric',\n colorize && num > 0 && 'yable-cell-numeric--positive',\n colorize && num < 0 && 'yable-cell-numeric--negative',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <span className={classNames}>\n {formatter.format(num)}\n {unit && <span className=\"yable-cell-numeric__unit\">{unit}</span>}\n </span>\n )\n}\n\nCellNumeric.displayName = 'CellNumeric'\n","// @zvndev/yable-react — CellRating display component\n// Renders a rating value as filled/empty characters (stars by default).\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellRatingProps, CellMeasureRecipe } from './types'\n\n/**\n * Rating cells render a fixed-width row of glyphs and never wrap.\n * `fixedHeight` tells Pretext to skip text measurement and just contribute\n * the row's intrinsic visual height.\n */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n fixedHeight: true,\n}\n\nexport function CellRating<TData extends RowData, TValue>({\n context,\n max = 5,\n character = '\\u2605',\n emptyCharacter = '\\u2606',\n className,\n}: CellRatingProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const num = typeof raw === 'number' ? raw : Number(raw)\n\n if (raw == null || isNaN(num)) return null\n\n const filled = Math.min(Math.max(Math.round(num), 0), max)\n\n return (\n <span className={`yable-cell-rating ${className ?? ''}`} aria-label={`${filled} of ${max}`}>\n <span className=\"yable-cell-rating__filled\">{character.repeat(filled)}</span>\n <span className=\"yable-cell-rating__empty\">{emptyCharacter.repeat(max - filled)}</span>\n </span>\n )\n}\n\nCellRating.displayName = 'CellRating'\n","// @zvndev/yable-react — CellBoolean display component\n// Visual true/false indicator with dot, badge, or icon modes.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellBooleanProps, CellMeasureRecipe } from './types'\n\n/** Boolean indicator: short single-line label, sometimes with a dot. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '500 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nexport function CellBoolean<TData extends RowData, TValue>({\n context,\n trueLabel = 'Active',\n falseLabel = 'Inactive',\n mode = 'dot',\n className,\n}: CellBooleanProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const bool = Boolean(raw)\n const label = bool ? trueLabel : falseLabel\n const variant = bool ? 'success' : 'danger'\n\n const classNames = [\n 'yable-cell-boolean',\n `yable-cell-boolean--${variant}`,\n `yable-cell-boolean--${mode}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <span className={classNames}>{label}</span>\n}\n\nCellBoolean.displayName = 'CellBoolean'\n","// @zvndev/yable-react — CellProgress display component\n// Inline progress bar for percentage or bounded numeric values.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellProgressProps, CellMeasureRecipe } from './types'\n\n/**\n * Progress cells render a fixed-height bar (and optional label).\n * `fixedHeight` tells Pretext to skip text measurement entirely.\n */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n fixedHeight: true,\n}\n\nexport function CellProgress<TData extends RowData, TValue>({\n context,\n max = 100,\n variant = 'accent',\n showLabel = true,\n className,\n}: CellProgressProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const num = typeof raw === 'number' ? raw : Number(raw)\n\n if (raw == null || isNaN(num)) return null\n\n const pct = Math.min(Math.max((num / max) * 100, 0), 100)\n\n const classNames = [\n 'yable-cell-progress',\n `yable-cell-progress--${variant}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <span className={classNames}>\n <span className=\"yable-cell-progress__track\">\n <span\n className=\"yable-cell-progress__fill\"\n style={{ width: `${pct}%` }}\n />\n </span>\n {showLabel && (\n <span className=\"yable-cell-progress__label\">{Math.round(pct)}%</span>\n )}\n </span>\n )\n}\n\nCellProgress.displayName = 'CellProgress'\n","// @zvndev/yable-react — CellDate display component\n// Formatted date display with preset and custom format support.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellDateProps, CellMeasureRecipe } from './types'\n\n/** Date cells render a single line of formatted text. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nconst PRESETS: Record<string, Intl.DateTimeFormatOptions> = {\n short: { month: 'numeric', day: 'numeric', year: '2-digit' },\n medium: { month: 'short', day: 'numeric', year: 'numeric' },\n long: { month: 'long', day: 'numeric', year: 'numeric' },\n}\n\nconst rtf =\n typeof Intl !== 'undefined' && Intl.RelativeTimeFormat\n ? new Intl.RelativeTimeFormat('en', { numeric: 'auto' })\n : null\n\nfunction formatRelative(date: Date): string {\n if (!rtf) return date.toLocaleDateString()\n const diffMs = date.getTime() - Date.now()\n const diffDays = Math.round(diffMs / (1000 * 60 * 60 * 24))\n if (Math.abs(diffDays) < 1) return 'today'\n if (Math.abs(diffDays) < 30) return rtf.format(diffDays, 'day')\n if (Math.abs(diffDays) < 365) return rtf.format(Math.round(diffDays / 30), 'month')\n return rtf.format(Math.round(diffDays / 365), 'year')\n}\n\nexport function CellDate<TData extends RowData, TValue>({\n context,\n format = 'medium',\n locale = 'en-US',\n className,\n}: CellDateProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n if (raw == null) return null\n\n const date = raw instanceof Date ? raw : new Date(String(raw))\n if (isNaN(date.getTime())) return <span className=\"yable-cell-date\">{String(raw)}</span>\n\n const formatter =\n typeof format === 'string' && format !== 'relative'\n ? new Intl.DateTimeFormat(locale, {\n ...PRESETS[format],\n timeZone: 'UTC',\n })\n : typeof format === 'object'\n ? new Intl.DateTimeFormat(locale, { ...format, timeZone: 'UTC' })\n : null\n\n const formatted =\n format === 'relative'\n ? formatRelative(date)\n : formatter\n ? formatter.format(date)\n : date.toLocaleDateString(locale)\n\n return (\n <span className={`yable-cell-date ${className ?? ''}`} title={date.toISOString()}>\n {formatted}\n </span>\n )\n}\n\nCellDate.displayName = 'CellDate'\n","// @zvndev/yable-react — CellLink display component\n// Clickable link cell with external link support.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellLinkProps, CellMeasureRecipe } from './types'\n\n/** Link cells render the target text/URL on a single line. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nfunction isSafeUrl(url: string): boolean {\n const normalized = String(url).trim()\n // Allow relative URLs (start with / or # or ?)\n if (/^[/#?]/.test(normalized)) return true\n try {\n const parsed = new URL(normalized, 'https://placeholder.invalid')\n return ['http:', 'https:', 'mailto:', 'tel:'].includes(parsed.protocol)\n } catch {\n return false\n }\n}\n\nexport function CellLink<TData extends RowData, TValue>({\n context,\n href,\n external = false,\n className,\n}: CellLinkProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n if (raw == null || raw === '') return null\n\n const label = String(raw)\n const url = typeof href === 'function' ? href(raw) : (href ?? label)\n\n const safeUrl = isSafeUrl(url) ? url : undefined\n\n if (!safeUrl) {\n return <span className={`yable-cell-link ${className ?? ''}`}>{label}</span>\n }\n\n return (\n <a\n href={safeUrl}\n className={`yable-cell-link ${className ?? ''}`}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n >\n {label}\n {external && (\n <span className=\"yable-cell-link__icon\" aria-hidden>\n &#8599;\n </span>\n )}\n </a>\n )\n}\n\nCellLink.displayName = 'CellLink'\n","// @zvndev/yable-react — Cell type resolver\n// Maps declarative cellType strings to display cell components AND\n// to text-measurement recipes used by Pretext auto-measurement.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport { CellBadge, measureRecipe as badgeRecipe } from './CellBadge'\nimport { CellCurrency, measureRecipe as currencyRecipe } from './CellCurrency'\nimport { CellStatus, measureRecipe as statusRecipe } from './CellStatus'\nimport { CellNumeric, measureRecipe as numericRecipe } from './CellNumeric'\nimport { CellRating, measureRecipe as ratingRecipe } from './CellRating'\nimport { CellBoolean, measureRecipe as booleanRecipe } from './CellBoolean'\nimport { CellProgress, measureRecipe as progressRecipe } from './CellProgress'\nimport { CellDate, measureRecipe as dateRecipe } from './CellDate'\nimport { CellLink, measureRecipe as linkRecipe } from './CellLink'\nimport type { CellMeasureRecipe } from './types'\n\nconst CELL_TYPE_MAP: Record<string, React.ComponentType<any>> = {\n badge: CellBadge,\n currency: CellCurrency,\n status: CellStatus,\n numeric: CellNumeric,\n rating: CellRating,\n boolean: CellBoolean,\n progress: CellProgress,\n date: CellDate,\n link: CellLink,\n}\n\nconst MEASURE_RECIPE_MAP: Record<string, CellMeasureRecipe> = {\n badge: badgeRecipe,\n currency: currencyRecipe,\n status: statusRecipe,\n numeric: numericRecipe,\n rating: ratingRecipe,\n boolean: booleanRecipe,\n progress: progressRecipe,\n date: dateRecipe,\n link: linkRecipe,\n}\n\nexport function resolveCellType<TData extends RowData, TValue>(\n cellType: string,\n context: CellContext<TData, TValue>,\n props?: Record<string, unknown>,\n): React.ReactNode {\n const Component = CELL_TYPE_MAP[cellType]\n if (!Component) return context.renderValue() as React.ReactNode\n return <Component context={context} {...props} />\n}\n\n/**\n * Look up the measure recipe for a built-in cell type. Returns `undefined`\n * for unknown types so callers can fall back to a default text recipe.\n */\nexport function getMeasureRecipeForCellType(cellType: string): CellMeasureRecipe | undefined {\n return MEASURE_RECIPE_MAP[cellType]\n}\n\n/** Read-only access to the registered cell type ids — useful for tooling. */\nexport function getRegisteredCellTypes(): readonly string[] {\n return Object.keys(CELL_TYPE_MAP)\n}\n","// @zvndev/yable-react — Pretext auto-measurement helpers\n//\n// Bridges the declarative cell-type system to Pretext: given a list of\n// columns, derive the per-column `CellMeasurement[]` that\n// `usePretextMeasurement` needs, without making the consumer hand-write\n// font strings, line-heights, or padding numbers.\n//\n// Resolution order for each column:\n// 1. `column.measureRecipe` (explicit per-column override)\n// 2. `getMeasureRecipeForCellType(column.cellType)` (built-in recipe)\n// 3. The default text recipe passed to this hook (theme-derived)\n\nimport { useMemo } from 'react'\nimport type { ColumnDef, RowData } from '@zvndev/yable-core'\nimport { getMeasureRecipeForCellType } from '../cells/resolver'\nimport type { CellMeasureRecipe } from '../cells/types'\nimport type { CellMeasurement } from './usePretextMeasurement'\n\nexport interface AutoMeasurementsOptions<TData extends RowData> {\n /** Columns to measure — usually the same array passed into `useTable`. */\n columns: ColumnDef<TData, any>[]\n /**\n * Default recipe for columns that don't declare a `cellType` or\n * `measureRecipe`. This is the theme's body text style.\n */\n defaultRecipe: CellMeasureRecipe\n /**\n * Override how a column's pixel width is determined. Defaults to\n * `column.size ?? 150`. Provide this when you want auto-measurement to\n * track live column resizing — e.g. `(col) => table.getColumn(col.id)?.getSize() ?? 150`.\n */\n getColumnWidth?: (column: ColumnDef<TData, any>) => number\n /**\n * Optional filter — return false to skip a column entirely (e.g. select\n * checkboxes, action buttons). Defaults to skipping columns whose id\n * starts with `_` or matches common non-data ids.\n */\n shouldMeasureColumn?: (column: ColumnDef<TData, any>) => boolean\n}\n\nconst NON_DATA_COLUMN_IDS = new Set(['select', 'expand', 'drag', 'actions'])\n\nfunction getColumnId<TData extends RowData>(col: ColumnDef<TData, any>): string | undefined {\n const id = (col as { id?: string }).id ?? (col as { accessorKey?: string }).accessorKey\n return typeof id === 'string' ? id : undefined\n}\n\nfunction defaultShouldMeasure<TData extends RowData>(col: ColumnDef<TData, any>): boolean {\n const id = getColumnId(col)\n if (!id) return false\n if (id.startsWith('_')) return false\n if (NON_DATA_COLUMN_IDS.has(id)) return false\n return true\n}\n\nfunction defaultGetColumnWidth<TData extends RowData>(col: ColumnDef<TData, any>): number {\n return (col as { size?: number }).size ?? 150\n}\n\n/**\n * Resolve the measure recipe for a single column, walking the precedence\n * chain (per-column override → cellType built-in → default).\n */\nexport function resolveMeasureRecipe<TData extends RowData>(\n column: ColumnDef<TData, any>,\n defaultRecipe: CellMeasureRecipe,\n): CellMeasureRecipe {\n const explicit = (column as { measureRecipe?: CellMeasureRecipe }).measureRecipe\n if (explicit) return explicit\n\n const cellType = (column as { cellType?: string }).cellType\n if (cellType) {\n const fromCellType = getMeasureRecipeForCellType(cellType)\n if (fromCellType) return fromCellType\n }\n\n return defaultRecipe\n}\n\n/**\n * Build a `CellMeasurement[]` from columns, suitable for handing to\n * `usePretextMeasurement`. Pure derivation — no table instance required.\n */\nexport function useAutoMeasurements<TData extends RowData>({\n columns,\n defaultRecipe,\n getColumnWidth = defaultGetColumnWidth,\n shouldMeasureColumn = defaultShouldMeasure,\n}: AutoMeasurementsOptions<TData>): CellMeasurement[] {\n // Stable key over the inputs that actually affect the result. Re-keying\n // when widths change ensures column resizing re-runs the layout phase\n // even though the columns array reference is stable.\n const widthKey = columns\n .map((c) => `${getColumnId(c) ?? '?'}:${getColumnWidth(c)}`)\n .join('|')\n\n return useMemo(() => {\n const result: CellMeasurement[] = []\n for (const col of columns) {\n const id = getColumnId(col)\n if (!id) continue\n if (!shouldMeasureColumn(col)) continue\n\n const recipe = resolveMeasureRecipe(col, defaultRecipe)\n result.push({\n columnId: id,\n width: getColumnWidth(col),\n font: recipe.font,\n lineHeight: recipe.lineHeight,\n padding: recipe.padding,\n fixedHeight: recipe.fixedHeight,\n })\n }\n return result\n // widthKey + columns + defaultRecipe identity captures every input.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widthKey, columns, defaultRecipe, shouldMeasureColumn, getColumnWidth])\n}\n","// @zvndev/yable-react — One-call row-height computation for declarative tables\n//\n// Combines `useAutoMeasurements` (column-defs → measurement specs) with\n// `usePretextMeasurement` (specs → exact pixel heights). Most users\n// shouldn't need to touch CellMeasurement, fonts, or paddings — they\n// just declare `cellType: 'currency'` on their columns and call this hook.\n\nimport { useMemo } from 'react'\nimport type { ColumnDef, RowData } from '@zvndev/yable-core'\nimport {\n usePretextMeasurement,\n type CellMeasurement,\n type UsePretextMeasurementResult,\n} from './usePretextMeasurement'\nimport { useAutoMeasurements } from './useAutoMeasurements'\nimport type { CellMeasureRecipe } from '../cells/types'\n\nexport interface UseTableRowHeightsOptions<TData extends RowData> {\n /** Row data being measured. */\n data: TData[]\n /** Column definitions (the same array passed into `useTable`). */\n columns: ColumnDef<TData, any>[]\n /**\n * Default text recipe for columns without an explicit `cellType` /\n * `measureRecipe`. Should reflect the active theme's body text style.\n */\n defaultRecipe?: CellMeasureRecipe\n /**\n * Override how a column's pixel width is determined. Defaults to\n * `column.size ?? 150`. Provide this when you want pretext to track\n * live column resizing — e.g. `(c) => table.getColumn(c.id)?.getSize() ?? 150`.\n */\n getColumnWidth?: (column: ColumnDef<TData, any>) => number\n /** Minimum row height in px (default: 36). */\n minRowHeight?: number\n /** Disable measurement entirely (e.g. when virtualization is off). */\n enabled?: boolean\n}\n\n/** Sensible default that matches `@zvndev/yable-themes` `tokens.css`. */\nexport const DEFAULT_TEXT_RECIPE: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\n/**\n * Compute exact pixel row heights for the entire dataset using Pretext,\n * deriving per-column measurement specs from each column's declarative\n * `cellType` (or explicit `measureRecipe` override). No font strings,\n * line heights, or paddings to hand-write.\n *\n * Returns the same shape as `usePretextMeasurement` plus the resolved\n * `measurements` array for debugging / inspection.\n */\nexport function useTableRowHeights<TData extends RowData>({\n data,\n columns,\n defaultRecipe = DEFAULT_TEXT_RECIPE,\n getColumnWidth,\n minRowHeight = 36,\n enabled = true,\n}: UseTableRowHeightsOptions<TData>): UsePretextMeasurementResult & {\n measurements: CellMeasurement[]\n} {\n const measurements = useAutoMeasurements({\n columns,\n defaultRecipe,\n getColumnWidth,\n })\n\n // Build a fast id-keyed lookup of accessor keys so we can pull cell\n // text out of arbitrary row shapes without re-running React renders.\n const accessorMap = useMemo(() => {\n const map = new Map<string, (row: TData) => unknown>()\n for (const col of columns) {\n const id =\n (col as { id?: string }).id ?? (col as { accessorKey?: string }).accessorKey\n if (typeof id !== 'string') continue\n const accessorKey = (col as { accessorKey?: string }).accessorKey\n const accessorFn = (col as { accessorFn?: (row: TData) => unknown }).accessorFn\n if (typeof accessorFn === 'function') {\n map.set(id, accessorFn)\n } else if (typeof accessorKey === 'string') {\n map.set(id, (row) => (row as Record<string, unknown>)[accessorKey])\n } else {\n map.set(id, (row) => (row as Record<string, unknown>)[id])\n }\n }\n return map\n }, [columns])\n\n const getCellText = useMemo(\n () =>\n (row: TData, columnId: string): string => {\n const get = accessorMap.get(columnId)\n if (!get) return ''\n const value = get(row)\n if (value == null) return ''\n return typeof value === 'string' ? value : String(value)\n },\n [accessorMap],\n )\n\n const result = usePretextMeasurement({\n data,\n columns: measurements,\n getCellText,\n minRowHeight,\n enabled,\n })\n\n return { ...result, measurements }\n}\n","// @zvndev/yable-react — React context for table instance\n\nimport { createContext, useContext } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\nconst TableContext = createContext<Table<any> | null>(null)\n\nexport const TableProvider = TableContext.Provider\n\nexport function useTableContext<TData extends RowData>(): Table<TData> {\n const ctx = useContext(TableContext)\n if (!ctx) {\n throw new Error(\n '[yable E001] useTableContext must be used within a <Table> component. ' +\n 'Did you forget to pass the `table` prop?',\n )\n }\n return ctx as Table<TData>\n}\n","// @zvndev/yable-react — Sort Indicator Component\n\nimport type { SortDirection } from '@zvndev/yable-core'\n\ninterface SortIndicatorProps {\n direction: SortDirection | false\n index?: number\n}\n\nexport function SortIndicator({ direction, index }: SortIndicatorProps) {\n return (\n <span\n className=\"yable-sort-indicator\"\n data-active={direction ? 'true' : undefined}\n data-direction={direction || undefined}\n aria-hidden=\"true\"\n >\n {direction ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 3L11 8H3L7 3Z\"\n fill=\"currentColor\"\n />\n </svg>\n ) : (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ opacity: 0.3 }}\n >\n <path d=\"M7 3L11 7H3L7 3Z\" fill=\"currentColor\" />\n <path d=\"M7 11L3 7H11L7 11Z\" fill=\"currentColor\" />\n </svg>\n )}\n {index != null && index >= 0 && (\n <span className=\"yable-sort-badge\">{index + 1}</span>\n )}\n </span>\n )\n}\n","import { useState } from 'react'\nimport type { Column, RowData } from '@zvndev/yable-core'\n\ninterface SetFilterProps<TData extends RowData> {\n column: Column<TData, unknown>\n className?: string\n}\n\nfunction formatValue(value: unknown): string {\n if (value == null || value === '') return '(empty)'\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n if (value instanceof Date) return value.toISOString()\n return JSON.stringify(value)\n}\n\nexport function SetFilter<TData extends RowData>({ column, className }: SetFilterProps<TData>) {\n const [open, setOpen] = useState(false)\n const filterValue = column.getFilterValue()\n const selectedValues = Array.isArray(filterValue)\n ? filterValue\n : filterValue == null || filterValue === ''\n ? []\n : [filterValue]\n\n const facetedUniqueValues = column.getFacetedUniqueValues()\n\n const options = Array.from(facetedUniqueValues.entries())\n .map(([value, count]) => ({\n value,\n count,\n label: formatValue(value),\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n\n const selectedSet = new Set(selectedValues)\n\n const toggleValue = (value: unknown) => {\n const next = new Set(selectedSet)\n if (next.has(value)) {\n next.delete(value)\n } else {\n next.add(value)\n }\n\n const nextValues = Array.from(next)\n column.setFilterValue(nextValues.length > 0 ? nextValues : undefined)\n }\n\n const headerLabel =\n typeof column.columnDef.header === 'string' ? column.columnDef.header : column.id\n\n return (\n <div\n className={['yable-set-filter', className].filter(Boolean).join(' ')}\n style={{ position: 'relative' }}\n >\n <button\n type=\"button\"\n className=\"yable-set-filter-trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen((prev) => !prev)}\n style={{\n width: '100%',\n minHeight: 28,\n padding: '4px 8px',\n border: '1px solid rgba(127, 127, 127, 0.35)',\n borderRadius: 6,\n background: 'transparent',\n font: 'inherit',\n textAlign: 'left',\n cursor: 'pointer',\n }}\n >\n {selectedValues.length > 0 ? `${selectedValues.length} selected` : `Filter ${headerLabel}`}\n </button>\n\n {open && (\n <div\n role=\"dialog\"\n aria-label={`${headerLabel} set filter`}\n className=\"yable-set-filter-popover\"\n style={{\n position: 'absolute',\n insetInlineStart: 0,\n top: 'calc(100% + 4px)',\n zIndex: 20,\n width: 220,\n maxHeight: 240,\n overflow: 'auto',\n padding: 8,\n border: '1px solid rgba(127, 127, 127, 0.35)',\n borderRadius: 8,\n background: 'var(--yable-color-bg, #fff)',\n boxShadow: '0 10px 30px rgba(0, 0, 0, 0.12)',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n marginBottom: 8,\n }}\n >\n <strong style={{ fontSize: 12 }}>{headerLabel}</strong>\n {selectedValues.length > 0 && (\n <button\n type=\"button\"\n onClick={() => column.setFilterValue(undefined)}\n style={{\n border: 'none',\n background: 'transparent',\n padding: 0,\n cursor: 'pointer',\n fontSize: 12,\n }}\n >\n Clear\n </button>\n )}\n </div>\n\n <div role=\"group\" aria-label={`${headerLabel} options`}>\n {options.length === 0 && <div style={{ fontSize: 12, opacity: 0.75 }}>No values</div>}\n {options.map((option) => {\n const checked = selectedSet.has(option.value)\n return (\n <label\n key={`${option.label}-${option.count}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '4px 0',\n fontSize: 12,\n }}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => toggleValue(option.value)}\n />\n <span style={{ flex: 1 }}>{option.label}</span>\n <span style={{ opacity: 0.6 }}>{option.count}</span>\n </label>\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import type { Column, RowData } from '@zvndev/yable-core'\nimport { SetFilter } from './SetFilter'\n\ninterface FloatingFilterProps<TData extends RowData> {\n column: Column<TData, unknown>\n}\n\ntype FilterVariant = 'text' | 'set'\n\nfunction isSetCompatibleValue(value: unknown): boolean {\n return (\n value == null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n}\n\nfunction inferFilterVariant<TData extends RowData>(column: Column<TData, unknown>): FilterVariant {\n const meta = (column.columnDef.meta ?? {}) as { filterVariant?: FilterVariant }\n if (meta.filterVariant) return meta.filterVariant\n\n const uniqueValues = column.getFacetedUniqueValues()\n if (uniqueValues.size > 0 && uniqueValues.size <= 12) {\n const allValuesSupported = Array.from(uniqueValues.keys()).every(isSetCompatibleValue)\n if (allValuesSupported) return 'set'\n }\n\n return 'text'\n}\n\nexport function FloatingFilter<TData extends RowData>({ column }: FloatingFilterProps<TData>) {\n const variant = inferFilterVariant(column)\n\n if (!column.getCanFilter()) {\n return <div style={{ minHeight: 28 }} aria-hidden=\"true\" />\n }\n\n if (variant === 'set') {\n return <SetFilter column={column} />\n }\n\n const filterValue = column.getFilterValue()\n const normalizedValue =\n typeof filterValue === 'string' || typeof filterValue === 'number' ? String(filterValue) : ''\n\n const label = typeof column.columnDef.header === 'string' ? column.columnDef.header : column.id\n\n return (\n <label style={{ display: 'block' }}>\n <input\n aria-label={`Filter ${label}`}\n className=\"yable-floating-filter-input\"\n value={normalizedValue}\n onChange={(event) => {\n const nextValue = event.target.value\n column.setFilterValue(nextValue === '' ? undefined : nextValue)\n }}\n placeholder={`Filter ${label}`}\n style={{\n width: '100%',\n minHeight: 28,\n padding: '4px 8px',\n border: '1px solid rgba(127, 127, 127, 0.35)',\n borderRadius: 6,\n background: 'transparent',\n font: 'inherit',\n }}\n />\n </label>\n )\n}\n","// @zvndev/yable-react — Table Header Component\n\nimport React, { useCallback, useMemo, useRef, useState } from 'react'\nimport type {\n RowData,\n Table,\n Header as HeaderType,\n Column as ColumnType,\n ColumnOrderState,\n HeaderContext,\n} from '@zvndev/yable-core'\nimport { SortIndicator } from './SortIndicator'\nimport { FloatingFilter } from './FloatingFilter'\n\ninterface TableHeaderProps<TData extends RowData> {\n table: Table<TData>\n floatingFilters?: boolean\n}\n\nconst DRAG_MIME = 'application/yable-column'\n\nexport function TableHeader<TData extends RowData>({\n table,\n floatingFilters = false,\n}: TableHeaderProps<TData>) {\n const headerGroups = table.getHeaderGroups()\n const visibleColumns = table.getVisibleLeafColumns()\n\n return (\n <thead className=\"yable-thead\">\n {headerGroups.map((headerGroup) => (\n <tr key={headerGroup.id} className=\"yable-header-row\">\n {headerGroup.headers.map((header) => (\n <HeaderCell key={header.id} header={header} table={table} />\n ))}\n </tr>\n ))}\n\n {floatingFilters && visibleColumns.length > 0 && (\n <tr className=\"yable-header-row yable-header-row--filters\">\n {visibleColumns.map((column) => (\n <FloatingFilterCell key={`${column.id}-filter`} column={column} />\n ))}\n </tr>\n )}\n </thead>\n )\n}\n\nfunction FloatingFilterCell<TData extends RowData>({\n column,\n}: {\n column: ColumnType<TData, unknown>\n}) {\n const style = useMemo((): React.CSSProperties => {\n const next: React.CSSProperties = {\n width: column.getSize(),\n minWidth: column.columnDef.minSize,\n maxWidth: column.columnDef.maxSize,\n padding: 6,\n verticalAlign: 'top',\n }\n\n const pinned = column.getIsPinned()\n if (pinned) {\n next.position = 'sticky'\n if (pinned === 'left') {\n next.left = column.getStart('left')\n } else {\n next.right = column.getStart('right')\n }\n }\n\n return next\n }, [column])\n\n return (\n <th className=\"yable-th yable-th--filter\" role=\"columnheader\" style={style}>\n <FloatingFilter column={column} />\n </th>\n )\n}\n\nfunction HeaderCell<TData extends RowData>({\n header,\n table,\n}: {\n header: HeaderType<TData, unknown>\n table: Table<TData>\n}) {\n const column = header.column\n const canSort = column.getCanSort()\n const sortDirection = column.getIsSorted()\n const sortIndex = column.getSortIndex()\n const canResize = column.getCanResize()\n const canReorder = column.getCanReorder() && !header.isPlaceholder\n type HeaderRenderer = (ctx: HeaderContext<TData, unknown>) => React.ReactNode\n\n const headerContent = header.isPlaceholder\n ? null\n : typeof column.columnDef.header === 'function'\n ? (column.columnDef.header as HeaderRenderer)(header.getContext())\n : (column.columnDef.header ?? header.id)\n\n const style = useMemo((): React.CSSProperties => {\n const s: React.CSSProperties = {\n width: header.getSize(),\n minWidth: column.columnDef.minSize,\n maxWidth: column.columnDef.maxSize,\n }\n\n const pinned = column.getIsPinned()\n if (pinned) {\n s.position = 'sticky'\n if (pinned === 'left') {\n s.left = header.getStart('left')\n } else {\n s.right = header.getStart('right')\n }\n }\n\n return s\n }, [header, column])\n\n const pinned = column.getIsPinned()\n\n const lastResizeEndRef = useRef(0)\n\n const startResize = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation()\n\n const onEnd = () => {\n lastResizeEndRef.current = Date.now()\n document.removeEventListener('mouseup', onEnd, true)\n document.removeEventListener('touchend', onEnd, true)\n }\n document.addEventListener('mouseup', onEnd, true)\n document.addEventListener('touchend', onEnd, true)\n\n const handler = header.getResizeHandler()\n if (handler) (handler as (ev: unknown) => void)(e.nativeEvent)\n },\n [header],\n )\n\n const handleResizeClick = useCallback((e: React.MouseEvent) => {\n e.stopPropagation()\n }, [])\n\n const [dragOver, setDragOver] = useState<'left' | 'right' | null>(null)\n\n const handleDragStart = useCallback(\n (e: React.DragEvent<HTMLTableCellElement>) => {\n if (!canReorder) return\n const target = e.target as Element | null\n if (target && target.closest('.yable-resize-handle')) {\n e.preventDefault()\n return\n }\n e.stopPropagation()\n e.dataTransfer.effectAllowed = 'move'\n try {\n e.dataTransfer.setData(DRAG_MIME, column.id)\n e.dataTransfer.setData('text/plain', column.id)\n } catch {\n // Ignore legacy dataTransfer issues.\n }\n },\n [canReorder, column.id],\n )\n\n const handleDragOver = useCallback(\n (e: React.DragEvent<HTMLTableCellElement>) => {\n if (!canReorder) return\n const types = e.dataTransfer.types as unknown as ArrayLike<string>\n let isYableDrag = false\n for (let i = 0; i < types.length; i++) {\n if (types[i] === DRAG_MIME) {\n isYableDrag = true\n break\n }\n }\n if (!isYableDrag) return\n\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n const rect = e.currentTarget.getBoundingClientRect()\n const midpoint = rect.left + rect.width / 2\n setDragOver(e.clientX < midpoint ? 'left' : 'right')\n },\n [canReorder],\n )\n\n const handleDragLeave = useCallback((e: React.DragEvent<HTMLTableCellElement>) => {\n const next = e.relatedTarget as Node | null\n if (next && e.currentTarget.contains(next)) return\n setDragOver(null)\n }, [])\n\n const handleDragEnd = useCallback(() => {\n setDragOver(null)\n }, [])\n\n const handleDrop = useCallback(\n (e: React.DragEvent<HTMLTableCellElement>) => {\n if (!canReorder) return\n e.preventDefault()\n e.stopPropagation()\n const sourceId = e.dataTransfer.getData(DRAG_MIME)\n const rect = e.currentTarget.getBoundingClientRect()\n const insertAfter = e.clientX >= rect.left + rect.width / 2\n setDragOver(null)\n\n if (!sourceId || sourceId === column.id) return\n\n const state = table.getState()\n const allLeafs = table.getAllLeafColumns()\n const baseOrder: ColumnOrderState =\n state.columnOrder && state.columnOrder.length > 0\n ? state.columnOrder\n : allLeafs.map((c) => c.id)\n\n const next: string[] = []\n const seen = new Set<string>()\n for (const id of baseOrder) {\n if (allLeafs.some((c) => c.id === id)) {\n next.push(id)\n seen.add(id)\n }\n }\n for (const c of allLeafs) {\n if (!seen.has(c.id)) {\n next.push(c.id)\n seen.add(c.id)\n }\n }\n\n const fromIdx = next.indexOf(sourceId)\n if (fromIdx === -1) return\n next.splice(fromIdx, 1)\n\n let toIdx = next.indexOf(column.id)\n if (toIdx === -1) return\n if (insertAfter) toIdx += 1\n next.splice(toIdx, 0, sourceId)\n\n table.setColumnOrder(next)\n },\n [canReorder, column.id, table],\n )\n\n const handleHeaderClick = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (!canSort) return\n if (Date.now() - lastResizeEndRef.current < 250) return\n const handler = column.getToggleSortingHandler()\n if (handler) handler(e)\n },\n [canSort, column],\n )\n\n return (\n <th\n className=\"yable-th\"\n style={style}\n data-sortable={canSort || undefined}\n data-pinned={pinned || undefined}\n data-reorderable={canReorder || undefined}\n data-drag-over={dragOver || undefined}\n aria-sort={\n sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : canSort\n ? 'none'\n : undefined\n }\n role=\"columnheader\"\n colSpan={header.colSpan}\n draggable={canReorder || undefined}\n onClick={handleHeaderClick}\n onDragStart={canReorder ? handleDragStart : undefined}\n onDragOver={canReorder ? handleDragOver : undefined}\n onDragLeave={canReorder ? handleDragLeave : undefined}\n onDragEnd={canReorder ? handleDragEnd : undefined}\n onDrop={canReorder ? handleDrop : undefined}\n >\n <div className=\"yable-th-content\">\n <span>{headerContent}</span>\n {canSort && (\n <SortIndicator direction={sortDirection} index={sortIndex > 0 ? sortIndex : undefined} />\n )}\n </div>\n\n {canResize && (\n <div\n className=\"yable-resize-handle\"\n data-resizing={column.getIsResizing() || undefined}\n onMouseDown={startResize}\n onTouchStart={startResize}\n onClick={handleResizeClick}\n draggable={false}\n onDragStart={(e) => e.preventDefault()}\n />\n )}\n </th>\n )\n}\n","// @zvndev/yable-react — CellStatusBadge\n//\n// Renders the error / conflict decoration over a cell when the commit\n// coordinator marks it as `error` or `conflict`. Consumers can override\n// the component via a slot prop on the table once that surface lands;\n// for now this is the default rendering.\n\ninterface CellStatusBadgeBaseProps {\n onRetry: () => void\n onDismiss: () => void\n}\n\ninterface ErrorProps extends CellStatusBadgeBaseProps {\n status: 'error'\n message: string | undefined\n}\n\ninterface ConflictProps extends CellStatusBadgeBaseProps {\n status: 'conflict'\n conflictWith: unknown\n}\n\nexport type CellStatusBadgeProps = ErrorProps | ConflictProps\n\nexport function CellStatusBadge(props: CellStatusBadgeProps) {\n if (props.status === 'error') {\n return (\n <span\n className=\"yable-cell-status-badge yable-cell-status-badge--error\"\n role=\"status\"\n aria-label={`Save failed: ${props.message ?? 'unknown error'}`}\n title={props.message}\n >\n <button\n type=\"button\"\n className=\"yable-cell-status-badge__retry\"\n onClick={(e) => {\n e.stopPropagation()\n props.onRetry()\n }}\n aria-label=\"Retry save\"\n >\n ↻\n </button>\n <button\n type=\"button\"\n className=\"yable-cell-status-badge__dismiss\"\n onClick={(e) => {\n e.stopPropagation()\n props.onDismiss()\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n </span>\n )\n }\n\n // conflict\n return (\n <span\n className=\"yable-cell-status-badge yable-cell-status-badge--conflict\"\n role=\"status\"\n aria-label={`Conflict: server has ${String(props.conflictWith)}`}\n title={`Server value: ${String(props.conflictWith)}`}\n >\n <button\n type=\"button\"\n className=\"yable-cell-status-badge__accept-mine\"\n onClick={(e) => {\n e.stopPropagation()\n props.onRetry()\n }}\n aria-label=\"Keep my change\"\n >\n ✓\n </button>\n <button\n type=\"button\"\n className=\"yable-cell-status-badge__accept-theirs\"\n onClick={(e) => {\n e.stopPropagation()\n props.onDismiss()\n }}\n aria-label=\"Accept server value\"\n >\n ✗\n </button>\n </span>\n )\n}\n","// @zvndev/yable-react — Table Cell Component\n\nimport React, { useCallback } from 'react'\nimport {\n canCellEnterEditMode,\n type CellContext,\n type RowData,\n type Table,\n type Cell,\n} from '@zvndev/yable-core'\nimport { resolveCellType } from '../cells/resolver'\nimport { CellStatusBadge } from './CellStatusBadge'\n\ninterface TableCellProps<TData extends RowData> {\n cell: Cell<TData, unknown>\n table: Table<TData>\n rowIndex: number\n columnIndex: number\n isFocused: boolean\n isTabStop: boolean\n}\n\nexport function TableCell<TData extends RowData>({\n cell,\n table,\n rowIndex,\n columnIndex,\n isFocused,\n isTabStop,\n}: TableCellProps<TData>) {\n const column = cell.column\n const isEditing = cell.getIsEditing()\n const isAlwaysEditable = cell.getIsAlwaysEditable()\n const pinned = column.getIsPinned()\n const keyboardNavigationEnabled = table.options.enableKeyboardNavigation !== false\n\n const style: React.CSSProperties = {\n width: column.getSize(),\n minWidth: column.columnDef.minSize,\n maxWidth: column.columnDef.maxSize,\n }\n\n if (pinned) {\n style.position = 'sticky'\n if (pinned === 'left') {\n style.left = column.getStart('left')\n } else {\n style.right = column.getStart('right')\n }\n }\n\n // Read coordinator state — cell status + merged render value\n const cellStatus = table.getCellStatus(cell.row.id, column.id)\n const cellErrorMessage = table.getCellErrorMessage(cell.row.id, column.id)\n const cellConflictWith = table.getCellConflictWith(cell.row.id, column.id)\n const selectionRange = table.getCellSelectionRange()\n const selectionEdges = table.getCellSelectionEdges(rowIndex, columnIndex)\n const isCellSelected = selectionEdges !== null\n const isMultiCellSelection =\n selectionRange !== null &&\n (selectionRange.start.rowIndex !== selectionRange.end.rowIndex ||\n selectionRange.start.columnIndex !== selectionRange.end.columnIndex)\n\n // When pending/error/conflict, the rendered value is the user's typed value,\n // not the saved value\n const overrideValue =\n cellStatus !== 'idle' ? table.getCellRenderValue(cell.row.id, column.id) : undefined\n\n // Determine cell content\n let content: React.ReactNode\n const cellDef = column.columnDef.cell\n const cellType = column.columnDef.cellType\n type CellRenderer = (ctx: CellContext<TData, unknown>) => React.ReactNode\n\n if (typeof cellDef === 'function') {\n const ctx = cell.getContext()\n if (overrideValue !== undefined) {\n // Override getValue() / renderValue() for this render\n const overriddenCtx = {\n ...ctx,\n getValue: () => overrideValue,\n renderValue: () => overrideValue,\n }\n content = (cellDef as CellRenderer)(overriddenCtx)\n } else {\n content = (cellDef as CellRenderer)(ctx)\n }\n } else if (cellType && !(isEditing || isAlwaysEditable)) {\n content = resolveCellType(cellType, cell.getContext(), column.columnDef.cellTypeProps)\n } else {\n content = (overrideValue !== undefined ? overrideValue : cell.renderValue()) as React.ReactNode\n }\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('cell:click', {\n cell,\n row: cell.row,\n column: cell.column,\n event: e.nativeEvent,\n } as any)\n\n // Start editing on click if column is editable\n if (\n canCellEnterEditMode(table, cell.row, column) &&\n !isAlwaysEditable &&\n !isEditing &&\n !isMultiCellSelection &&\n !e.shiftKey &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n table.startEditing(cell.row.id, column.id)\n }\n },\n [cell, column, isAlwaysEditable, isEditing, isMultiCellSelection, table],\n )\n\n const handleDoubleClick = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('cell:dblclick', {\n cell,\n row: cell.row,\n column: cell.column,\n event: e.nativeEvent,\n } as any)\n },\n [table, cell],\n )\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('cell:contextmenu', {\n cell,\n row: cell.row,\n column: cell.column,\n event: e.nativeEvent,\n } as any)\n },\n [table, cell],\n )\n\n const handleFocus = useCallback(() => {\n if (!keyboardNavigationEnabled) return\n table.setFocusedCell({ rowIndex, columnIndex })\n }, [columnIndex, keyboardNavigationEnabled, rowIndex, table])\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (e.button !== 0) return\n\n const clickTarget = e.target as HTMLElement | null\n if (isInteractiveClickTarget(clickTarget)) return\n\n e.preventDefault()\n table.setFocusedCell({ rowIndex, columnIndex })\n table.startCellRangeSelection({ rowIndex, columnIndex }, { extend: e.shiftKey })\n e.currentTarget.focus({ preventScroll: true })\n },\n [columnIndex, rowIndex, table],\n )\n\n const handleMouseEnter = useCallback(() => {\n if (!table.getState().cellSelection?.isDragging) return\n table.updateCellRangeSelection({ rowIndex, columnIndex })\n }, [columnIndex, rowIndex, table])\n\n const handleMouseUp = useCallback(() => {\n if (!table.getState().cellSelection?.isDragging) return\n table.endCellRangeSelection()\n }, [table])\n\n const classNames = [\n 'yable-td',\n isFocused && 'yable-cell--focused',\n isCellSelected && 'yable-cell--selected',\n selectionEdges?.top && 'yable-cell--selection-top',\n selectionEdges?.right && 'yable-cell--selection-right',\n selectionEdges?.bottom && 'yable-cell--selection-bottom',\n selectionEdges?.left && 'yable-cell--selection-left',\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <td\n className={classNames}\n style={style}\n data-editing={isEditing || undefined}\n data-focused={isFocused || undefined}\n data-pinned={pinned || undefined}\n data-cell-status={cellStatus !== 'idle' ? cellStatus : undefined}\n data-column-id={column.id}\n data-row-index={rowIndex}\n data-column-index={columnIndex}\n data-cell-selected={isCellSelected || undefined}\n aria-rowindex={rowIndex + 1}\n aria-colindex={columnIndex + 1}\n role=\"gridcell\"\n tabIndex={keyboardNavigationEnabled ? (isTabStop ? 0 : -1) : undefined}\n onMouseDown={handleMouseDown}\n onMouseEnter={handleMouseEnter}\n onMouseUp={handleMouseUp}\n onClick={handleClick}\n onDoubleClick={handleDoubleClick}\n onContextMenu={handleContextMenu}\n onFocus={handleFocus}\n >\n {content}\n {cellStatus === 'error' && (\n <CellStatusBadge\n status=\"error\"\n message={cellErrorMessage}\n onRetry={() => void table.retryCommit(cell.row.id, column.id)}\n onDismiss={() => table.dismissCommit(cell.row.id, column.id)}\n />\n )}\n {cellStatus === 'conflict' && (\n <CellStatusBadge\n status=\"conflict\"\n conflictWith={cellConflictWith}\n onRetry={() => void table.retryCommit(cell.row.id, column.id)}\n onDismiss={() => table.dismissCommit(cell.row.id, column.id)}\n />\n )}\n </td>\n )\n}\n\nfunction isInteractiveClickTarget(element: HTMLElement | null): boolean {\n if (!element) return false\n\n const interactive = element.closest(\n 'input, textarea, select, button, a[href], [contenteditable=\"true\"]',\n )\n\n return interactive !== null\n}\n","// @zvndev/yable-react — Error Boundary Component\n\nimport React from 'react'\n\ninterface ErrorBoundaryProps {\n /** Callback fired when an error is caught */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void\n /** When any value in this array changes, the boundary resets */\n resetKeys?: unknown[]\n /** Custom fallback to render when an error is caught */\n fallback?: React.ReactNode\n children: React.ReactNode\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean\n error: Error | null\n}\n\n/**\n * Catches rendering errors in child components so one bad cell or row\n * does not crash the entire table. Logs errors and provides a fallback UI.\n */\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n console.error('[yable] Rendering error caught by ErrorBoundary:', error, errorInfo)\n this.props.onError?.(error, errorInfo)\n }\n\n componentDidUpdate(prevProps: ErrorBoundaryProps): void {\n // Auto-reset when resetKeys change\n if (this.state.hasError && this.props.resetKeys) {\n const prevKeys = prevProps.resetKeys ?? []\n const nextKeys = this.props.resetKeys\n const changed =\n prevKeys.length !== nextKeys.length ||\n prevKeys.some((key, i) => !Object.is(key, nextKeys[i]))\n\n if (changed) {\n this.setState({ hasError: false, error: null })\n }\n }\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n if (this.props.fallback !== undefined) {\n return this.props.fallback\n }\n return (\n <span\n className=\"yable-error-cell\"\n title={this.state.error?.message ?? 'Render error'}\n style={{\n color: '#dc2626',\n border: '1px solid #dc2626',\n borderRadius: 2,\n padding: '2px 4px',\n fontSize: '0.75em',\n }}\n >\n Error\n </span>\n )\n }\n\n return this.props.children\n }\n}\n\n/**\n * Lightweight boundary specifically for table cells.\n * Renders inline so it does not break table layout.\n */\nexport class CellErrorBoundary extends React.Component<\n {\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void\n resetKeys?: unknown[]\n children: React.ReactNode\n },\n ErrorBoundaryState\n> {\n constructor(props: { onError?: (error: Error, errorInfo: React.ErrorInfo) => void; resetKeys?: unknown[]; children: React.ReactNode }) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n console.error('[yable] Cell rendering error:', error, errorInfo)\n this.props.onError?.(error, errorInfo)\n }\n\n componentDidUpdate(prevProps: { resetKeys?: unknown[] }): void {\n if (this.state.hasError && this.props.resetKeys) {\n const prevKeys = prevProps.resetKeys ?? []\n const nextKeys = this.props.resetKeys\n const changed =\n prevKeys.length !== nextKeys.length ||\n prevKeys.some((key, i) => !Object.is(key, nextKeys[i]))\n\n if (changed) {\n this.setState({ hasError: false, error: null })\n }\n }\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n return (\n <span\n className=\"yable-error-cell\"\n title={this.state.error?.message ?? 'Render error'}\n style={{\n color: '#dc2626',\n border: '1px solid #dc2626',\n borderRadius: 2,\n padding: '2px 4px',\n fontSize: '0.75em',\n }}\n >\n Error\n </span>\n )\n }\n return this.props.children\n }\n}\n","// @zvndev/yable-react — Table Body Component\n\nimport React, { useCallback, useEffect, useRef } from 'react'\nimport type { Column, RowData, Table, Row } from '@zvndev/yable-core'\nimport { TableCell } from './TableCell'\nimport { CellErrorBoundary } from './ErrorBoundary'\nimport { useVirtualization } from '../hooks/useVirtualization'\n\ninterface TableBodyProps<TData extends RowData> {\n table: Table<TData>\n clickableRows?: boolean\n}\n\nexport function TableBody<TData extends RowData>({ table, clickableRows }: TableBodyProps<TData>) {\n const rows = table.getRowModel().rows\n const visibleColumns = table.getVisibleLeafColumns()\n const activeCell = table.getState().editing.activeCell\n const focusedCell = table.getFocusedCell()\n const cellSelection = table.getState().cellSelection ?? {\n range: null,\n anchor: null,\n isDragging: false,\n }\n const options = table.options\n const enableVirtualization = options.enableVirtualization ?? false\n const scrollContainerRef = useRef<HTMLDivElement>(null)\n\n const rowHeight = options.rowHeight ?? 40\n const overscan = options.overscan ?? 5\n const estimateRowHeight = options.estimateRowHeight\n const pretextHeights = options.pretextHeights ?? null\n const pretextPrefixSums = options.pretextPrefixSums ?? null\n\n const { virtualRows, totalHeight } = useVirtualization({\n containerRef: scrollContainerRef,\n totalRows: rows.length,\n rowHeight,\n overscan,\n estimateRowHeight,\n pretextHeights,\n pretextPrefixSums,\n })\n\n const cellSelectionKey = cellSelection.range\n ? `${cellSelection.range.start.rowIndex}:${cellSelection.range.start.columnIndex}:${cellSelection.range.end.rowIndex}:${cellSelection.range.end.columnIndex}:${cellSelection.isDragging ? 'dragging' : 'idle'}`\n : `none:${cellSelection.isDragging ? 'dragging' : 'idle'}`\n\n useEffect(() => {\n const handleWindowMouseUp = () => {\n if (table.getState().cellSelection?.isDragging) {\n table.endCellRangeSelection()\n }\n }\n\n window.addEventListener('mouseup', handleWindowMouseUp)\n return () => {\n window.removeEventListener('mouseup', handleWindowMouseUp)\n }\n }, [table])\n\n if (!enableVirtualization) {\n // Non-virtualized: render all rows directly\n return (\n <tbody className=\"yable-tbody\">\n {rows.map((row, rowIndex) => (\n <MemoizedTableRow\n key={row.id}\n row={row}\n table={table}\n rowIndex={rowIndex}\n visibleColumns={visibleColumns}\n isSelected={row.getIsSelected()}\n isExpanded={row.getIsExpanded()}\n activeColumnId={activeCell?.rowId === row.id ? activeCell.columnId : undefined}\n focusedColumnIndex={focusedCell?.rowIndex === rowIndex ? focusedCell.columnIndex : null}\n hasFocusedCell={focusedCell !== null}\n cellSelectionKey={cellSelectionKey}\n clickable={clickableRows}\n />\n ))}\n </tbody>\n )\n }\n\n // Virtualized rendering\n const hasPretextData = !!(pretextHeights && pretextPrefixSums)\n const fixedRowHeight = typeof rowHeight === 'number' && !hasPretextData ? rowHeight : undefined\n const containerHeight = hasPretextData\n ? Math.min(totalHeight, 800) // Pretext: use real total, cap at 800px viewport\n : fixedRowHeight\n ? Math.min(totalHeight, fixedRowHeight * 20) // Default visible area ~20 rows\n : 600 // Fallback for variable heights\n\n return (\n <tbody className=\"yable-tbody\">\n <tr style={{ height: 0, padding: 0, border: 'none' }}>\n <td style={{ height: 0, padding: 0, border: 'none' }} colSpan={visibleColumns.length}>\n <div\n ref={scrollContainerRef}\n className=\"yable-virtual-scroll-container\"\n style={{\n overflowY: 'auto',\n height: containerHeight,\n position: 'relative',\n }}\n >\n <div\n className=\"yable-virtual-spacer\"\n style={{ height: totalHeight, position: 'relative' }}\n >\n <table\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n tableLayout: 'fixed',\n borderCollapse: 'collapse',\n }}\n >\n <tbody>\n {virtualRows.map((vRow) => {\n const row = rows[vRow.index]\n if (!row) return null\n return (\n <MemoizedTableRow\n key={row.id}\n row={row}\n table={table}\n rowIndex={vRow.index}\n visibleColumns={visibleColumns}\n isSelected={row.getIsSelected()}\n isExpanded={row.getIsExpanded()}\n activeColumnId={\n activeCell?.rowId === row.id ? activeCell.columnId : undefined\n }\n focusedColumnIndex={\n focusedCell?.rowIndex === vRow.index ? focusedCell.columnIndex : null\n }\n hasFocusedCell={focusedCell !== null}\n cellSelectionKey={cellSelectionKey}\n clickable={clickableRows}\n virtualStyle={{\n position: 'absolute' as const,\n top: 0,\n left: 0,\n width: '100%',\n height: vRow.size,\n transform: `translateY(${vRow.start}px)`,\n }}\n />\n )\n })}\n </tbody>\n </table>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TableRow — wrapped in React.memo with custom comparison\n// ---------------------------------------------------------------------------\n\ninterface TableRowProps<TData extends RowData> {\n row: Row<TData>\n table: Table<TData>\n rowIndex: number\n visibleColumns: Column<TData, unknown>[]\n isSelected: boolean\n isExpanded: boolean\n activeColumnId?: string\n focusedColumnIndex: number | null\n hasFocusedCell: boolean\n cellSelectionKey: string\n clickable?: boolean\n virtualStyle?: React.CSSProperties\n}\n\nfunction TableRowInner<TData extends RowData>({\n row,\n table,\n rowIndex,\n visibleColumns,\n isSelected,\n isExpanded,\n activeColumnId,\n focusedColumnIndex,\n hasFocusedCell,\n cellSelectionKey: _cellSelectionKey,\n clickable,\n virtualStyle,\n}: TableRowProps<TData>) {\n const allCells = row.getAllCells()\n const visibleCells = visibleColumns\n .map((column) => allCells.find((cell) => cell.column.id === column.id))\n .filter((cell): cell is NonNullable<typeof cell> => cell != null)\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n if (clickable) {\n table.events.emit('row:click', {\n row,\n event: e.nativeEvent,\n } as any)\n }\n },\n [clickable, table.events, row],\n )\n\n const handleDoubleClick = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('row:dblclick', {\n row,\n event: e.nativeEvent,\n } as any)\n },\n [table.events, row],\n )\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('row:contextmenu', {\n row,\n event: e.nativeEvent,\n } as any)\n },\n [table.events, row],\n )\n\n const selectionEnabled = Boolean(table.options.enableRowSelection)\n const expansionEnabled = Boolean(table.options.enableExpanding)\n\n return (\n <>\n <tr\n className=\"yable-tr\"\n style={virtualStyle}\n data-selected={isSelected || undefined}\n data-expanded={isExpanded || undefined}\n data-clickable={clickable || undefined}\n data-row-id={row.id}\n data-row-index={rowIndex}\n aria-selected={selectionEnabled ? isSelected : undefined}\n aria-expanded={expansionEnabled ? isExpanded : undefined}\n onClick={handleClick}\n onDoubleClick={handleDoubleClick}\n onContextMenu={handleContextMenu}\n >\n {visibleCells.map((cell, columnIndex) => {\n const isFocused = focusedColumnIndex === columnIndex\n const isTabStop = isFocused || (!hasFocusedCell && rowIndex === 0 && columnIndex === 0)\n\n return (\n <CellErrorBoundary\n key={cell.id}\n resetKeys={[cell.getValue(), activeColumnId === cell.column.id, isFocused]}\n >\n <TableCell\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnIndex={columnIndex}\n isFocused={isFocused}\n isTabStop={isTabStop}\n />\n </CellErrorBoundary>\n )\n })}\n </tr>\n\n {isExpanded && (\n <tr className=\"yable-expand-row\">\n <td className=\"yable-td\" colSpan={visibleColumns.length}>\n {typeof (row as any)._renderExpanded === 'function'\n ? (row as any)._renderExpanded()\n : null}\n </td>\n </tr>\n )}\n </>\n )\n}\n\n// Custom comparison for React.memo: only re-render when meaningful props change.\n// We compare by reference for data, and by value for boolean/selection/editing state.\nfunction areRowPropsEqual<TData extends RowData>(\n prev: TableRowProps<TData>,\n next: TableRowProps<TData>,\n): boolean {\n // Different row identity\n if (prev.row.id !== next.row.id) return false\n\n // Current row-model position changed\n if (prev.rowIndex !== next.rowIndex) return false\n\n // Visible columns or ordering changed\n if (prev.visibleColumns !== next.visibleColumns) return false\n\n // Data reference changed — re-render\n if (prev.row.original !== next.row.original) return false\n\n // Selection state\n if (prev.isSelected !== next.isSelected) return false\n\n // Expansion state\n if (prev.isExpanded !== next.isExpanded) return false\n\n // Clickable prop\n if (prev.clickable !== next.clickable) return false\n\n // Focus / edit state for this row\n if (prev.activeColumnId !== next.activeColumnId) return false\n if (prev.focusedColumnIndex !== next.focusedColumnIndex) return false\n if (prev.hasFocusedCell !== next.hasFocusedCell) return false\n if (prev.cellSelectionKey !== next.cellSelectionKey) return false\n\n // Virtual positioning\n if (prev.virtualStyle !== next.virtualStyle) {\n // For virtual rows, compare actual transform values\n if (!prev.virtualStyle || !next.virtualStyle) return false\n if (prev.virtualStyle.transform !== next.virtualStyle.transform) return false\n if (prev.virtualStyle.height !== next.virtualStyle.height) return false\n }\n\n // Table reference changed (e.g., options update)\n if (prev.table !== next.table) return false\n\n return true\n}\n\nconst MemoizedTableRow = React.memo(TableRowInner, areRowPropsEqual) as typeof TableRowInner\n","// @zvndev/yable-react — Table Footer Component\n\nimport React from 'react'\nimport type { HeaderContext, RowData, Table } from '@zvndev/yable-core'\n\ninterface TableFooterProps<TData extends RowData> {\n table: Table<TData>\n}\n\nexport function TableFooter<TData extends RowData>({ table }: TableFooterProps<TData>) {\n const footerGroups = table.getFooterGroups()\n type FooterRenderer = (ctx: HeaderContext<TData, unknown>) => React.ReactNode\n\n if (!footerGroups.length) return null\n\n return (\n <tfoot className=\"yable-tfoot\">\n {footerGroups.map((footerGroup) => (\n <tr key={footerGroup.id} className=\"yable-tr\">\n {footerGroup.headers.map((header) => {\n const footerDef = header.column.columnDef.footer\n const content = header.isPlaceholder\n ? null\n : typeof footerDef === 'function'\n ? (footerDef as FooterRenderer)(header.getContext())\n : (footerDef ?? null)\n\n return (\n <td key={header.id} className=\"yable-td\" colSpan={header.colSpan}>\n {content}\n </td>\n )\n })}\n </tr>\n ))}\n </tfoot>\n )\n}\n","// @zvndev/yable-react — Loading Overlay Component\n// Backdrop-blurred overlay with animated spinner and pulse animation.\n\nimport React from 'react'\nimport { getDefaultLocale } from '@zvndev/yable-core'\n\nexport interface LoadingOverlayProps {\n /** Whether loading is active */\n loading?: boolean\n /** Custom loading component to render instead of default spinner */\n loadingComponent?: React.ReactNode\n /** Loading text shown below the spinner */\n loadingText?: string\n}\n\n/**\n * Animated spinner SVG with a track ring and a spinning arc.\n * Uses CSS animation (keyframe defined in base.css) for the rotation.\n */\nfunction Spinner() {\n return (\n <div className=\"yable-overlay-spinner\" aria-hidden=\"true\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Background track ring */}\n <circle\n cx=\"16\"\n cy=\"16\"\n r=\"13\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.1\"\n strokeWidth=\"3\"\n />\n {/* Spinning arc — 90 degree sweep */}\n <path\n d=\"M16 3a13 13 0 0 1 13 13\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n )\n}\n\nexport function LoadingOverlay({\n loading,\n loadingComponent,\n loadingText,\n}: LoadingOverlayProps) {\n if (!loading) return null\n\n const resolvedText = loadingText ?? getDefaultLocale().loadingText\n\n return (\n <div\n className=\"yable-overlay-loading\"\n role=\"alert\"\n aria-busy=\"true\"\n aria-label={resolvedText}\n >\n <div className=\"yable-overlay-loading-content\">\n {loadingComponent ?? (\n <>\n <Spinner />\n {resolvedText && (\n <span className=\"yable-overlay-loading-text\">{resolvedText}</span>\n )}\n </>\n )}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — No Rows Overlay Component\n// Centered message with illustration SVGs, distinguishing \"no data\" vs \"no results\" (filtered).\n\nimport React from 'react'\nimport { getDefaultLocale } from '@zvndev/yable-core'\n\nexport interface NoRowsOverlayProps {\n /** Custom empty component */\n emptyComponent?: React.ReactNode\n /** Custom icon for empty state */\n emptyIcon?: React.ReactNode\n /** Main empty message */\n emptyMessage?: string\n /** Secondary detail text */\n emptyDetail?: string\n /** Whether results are filtered (changes icon/message) */\n isFiltered?: boolean\n}\n\n/** Default empty icon — an open box illustration */\nfunction DefaultEmptyIcon() {\n return (\n <svg\n className=\"yable-overlay-empty-icon\"\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n {/* Box body */}\n <path\n d=\"M10 22L28 14L46 22V38L28 46L10 38V22Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n strokeOpacity=\"0.25\"\n />\n {/* Box top flap */}\n <path\n d=\"M28 14V30\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeOpacity=\"0.15\"\n />\n {/* Box middle horizontal */}\n <path\n d=\"M10 22L28 30L46 22\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n strokeOpacity=\"0.2\"\n />\n {/* Lid flaps */}\n <path\n d=\"M4 20L28 10L52 20\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeOpacity=\"0.12\"\n />\n </svg>\n )\n}\n\n/** Default filtered/no-results icon — magnifying glass with empty result */\nfunction DefaultFilteredIcon() {\n return (\n <svg\n className=\"yable-overlay-empty-icon\"\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n {/* Magnifying glass circle */}\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeOpacity=\"0.3\"\n />\n {/* Handle */}\n <path\n d=\"M34 34L46 46\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeOpacity=\"0.25\"\n />\n {/* X in center of glass */}\n <path\n d=\"M20.5 20.5L29.5 29.5M29.5 20.5L20.5 29.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeOpacity=\"0.25\"\n />\n </svg>\n )\n}\n\nexport function NoRowsOverlay({\n emptyComponent,\n emptyIcon,\n emptyMessage,\n emptyDetail,\n isFiltered = false,\n}: NoRowsOverlayProps) {\n if (emptyComponent) {\n return <div className=\"yable-overlay-empty\">{emptyComponent}</div>\n }\n\n const locale = getDefaultLocale()\n const defaultMessage = isFiltered\n ? locale.emptyNoResults\n : locale.emptyNoData\n\n const defaultDetail = isFiltered\n ? locale.emptyNoResultsDetail\n : locale.emptyNoDataDetail\n\n const icon = emptyIcon ?? (isFiltered ? <DefaultFilteredIcon /> : <DefaultEmptyIcon />)\n\n return (\n <div className=\"yable-overlay-empty\" role=\"status\">\n <div className=\"yable-overlay-empty-icon-wrapper\">\n {icon}\n </div>\n <div className=\"yable-overlay-empty-message\">\n {emptyMessage ?? defaultMessage}\n </div>\n <div className=\"yable-overlay-empty-detail\">\n {emptyDetail ?? defaultDetail}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Status Bar Panel Component\n// Individual panel segment with icon, label, and value.\n\nimport React from 'react'\n\nexport interface StatusBarPanelComponentProps {\n label?: string\n value: string | number\n icon?: React.ReactNode\n /** Optional tooltip text */\n title?: string\n}\n\nexport function StatusBarPanelComponent({\n label,\n value,\n icon,\n title,\n}: StatusBarPanelComponentProps) {\n const displayValue = typeof value === 'number'\n ? value.toLocaleString()\n : value\n\n return (\n <div className=\"yable-status-panel\" title={title}>\n {icon && <span className=\"yable-status-panel-icon\">{icon}</span>}\n {label && <span className=\"yable-status-panel-label\">{label}:</span>}\n <span className=\"yable-status-panel-value\">{displayValue}</span>\n </div>\n )\n}\n","// @zvndev/yable-react — Status Bar Component\n// Footer bar with flex layout, dividers between panels, and support for\n// total row count, selected count, filtered count, and custom aggregations.\n\nimport React from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport type { StatusBarPanelConfig } from '../types'\nimport { StatusBarPanelComponent } from './StatusBarPanel'\n\ninterface StatusBarProps<TData extends RowData> {\n table: Table<TData>\n panels?: StatusBarPanelConfig[]\n}\n\n/** Vertical divider between adjacent status panels */\nfunction StatusDivider() {\n return <span className=\"yable-status-bar-divider\" aria-hidden=\"true\" />\n}\n\n/** Renders panels with dividers between them */\nfunction PanelGroup({ children }: { children: React.ReactNode }) {\n const items = React.Children.toArray(children).filter(Boolean)\n return (\n <>\n {items.map((child, i) => (\n <React.Fragment key={i}>\n {i > 0 && <StatusDivider />}\n {child}\n </React.Fragment>\n ))}\n </>\n )\n}\n\n/** Row count icon — tiny grid of dots */\nfunction RowCountIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"2.5\" rx=\"0.5\" fill=\"currentColor\" opacity=\"0.5\" />\n <rect x=\"1\" y=\"4.75\" width=\"10\" height=\"2.5\" rx=\"0.5\" fill=\"currentColor\" opacity=\"0.35\" />\n <rect x=\"1\" y=\"8.5\" width=\"10\" height=\"2.5\" rx=\"0.5\" fill=\"currentColor\" opacity=\"0.2\" />\n </svg>\n )\n}\n\n/** Filter icon */\nfunction FilterIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 2.5h10M3 6h6M4.5 9.5h3\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Checkmark icon for selected */\nfunction SelectedIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2.5 6.5L5 9L9.5 3\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport function StatusBar<TData extends RowData>({\n table,\n panels,\n}: StatusBarProps<TData>) {\n const totalRows = table.getCoreRowModel().rows.length\n const filteredRows = table.getFilteredRowModel().rows.length\n const selectedRows = Object.keys(table.getState().rowSelection).length\n const isFiltered =\n table.getState().globalFilter ||\n table.getState().columnFilters.length > 0\n\n // If custom panels are provided, render those\n if (panels && panels.length > 0) {\n const leftPanels = panels.filter((p) => p.align === 'left' || !p.align)\n const centerPanels = panels.filter((p) => p.align === 'center')\n const rightPanels = panels.filter((p) => p.align === 'right')\n\n return (\n <div className=\"yable-status-bar\" role=\"status\" aria-label=\"Table status\">\n <div className=\"yable-status-bar-section yable-status-bar-left\">\n <PanelGroup>\n {leftPanels.map((panel) =>\n panel.component ? (\n <panel.component key={panel.id} table={table} />\n ) : (\n <StatusBarPanelComponent\n key={panel.id}\n label={panel.label}\n value=\"\"\n />\n )\n )}\n </PanelGroup>\n </div>\n {centerPanels.length > 0 && (\n <div className=\"yable-status-bar-section yable-status-bar-center\">\n <PanelGroup>\n {centerPanels.map((panel) =>\n panel.component ? (\n <panel.component key={panel.id} table={table} />\n ) : null\n )}\n </PanelGroup>\n </div>\n )}\n <div className=\"yable-status-bar-section yable-status-bar-right\">\n <PanelGroup>\n {rightPanels.map((panel) =>\n panel.component ? (\n <panel.component key={panel.id} table={table} />\n ) : null\n )}\n </PanelGroup>\n </div>\n </div>\n )\n }\n\n // Default status bar content\n return (\n <div className=\"yable-status-bar\" role=\"status\" aria-label=\"Table status\">\n <div className=\"yable-status-bar-section yable-status-bar-left\">\n <PanelGroup>\n <StatusBarPanelComponent\n label=\"Total\"\n value={totalRows}\n icon={<RowCountIcon />}\n />\n {isFiltered && (\n <StatusBarPanelComponent\n label=\"Filtered\"\n value={filteredRows}\n icon={<FilterIcon />}\n />\n )}\n </PanelGroup>\n </div>\n <div className=\"yable-status-bar-section yable-status-bar-right\">\n <PanelGroup>\n {selectedRows > 0 && (\n <StatusBarPanelComponent\n label=\"Selected\"\n value={selectedRows}\n icon={<SelectedIcon />}\n />\n )}\n </PanelGroup>\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Columns Panel Component\n// Show/hide/reorder columns via drag-and-drop with search, toggle-all actions,\n// and a polished drag handle.\n\nimport React, { useState, useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\ninterface ColumnsPanelProps<TData extends RowData> {\n table: Table<TData>\n}\n\n/** Search icon for the column search field */\nfunction SearchIcon() {\n return (\n <svg className=\"yable-sidebar-search-icon\" width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"6.25\" cy=\"6.25\" r=\"4.25\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M9.5 9.5L12.5 12.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Eye icon indicating visibility state */\nfunction VisibilityIcon({ visible }: { visible: boolean }) {\n if (visible) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 7s2.5-4 6-4 6 4 6 4-2.5 4-6 4-6-4-6-4z\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n </svg>\n )\n }\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 7s2.5-4 6-4 6 4 6 4-2.5 4-6 4-6-4-6-4z\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" opacity=\"0.3\" />\n <line x1=\"2\" y1=\"2\" x2=\"12\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" opacity=\"0.5\" />\n </svg>\n )\n}\n\nexport function ColumnsPanel<TData extends RowData>({\n table,\n}: ColumnsPanelProps<TData>) {\n const [search, setSearch] = useState('')\n const [draggedId, setDraggedId] = useState<string | null>(null)\n\n const columns = table.getAllLeafColumns()\n const visibleCount = columns.filter((c) => c.getIsVisible()).length\n const filteredColumns = search\n ? columns.filter((col) => {\n const header = typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : col.id\n return header.toLowerCase().includes(search.toLowerCase())\n })\n : columns\n\n const handleToggleAll = useCallback(\n (visible: boolean) => {\n table.toggleAllColumnsVisible(visible)\n },\n [table]\n )\n\n const handleDragStart = useCallback((e: React.DragEvent, columnId: string) => {\n setDraggedId(columnId)\n e.dataTransfer.effectAllowed = 'move'\n e.dataTransfer.setData('text/plain', columnId)\n }, [])\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }, [])\n\n const handleDragEnd = useCallback(() => {\n setDraggedId(null)\n }, [])\n\n const handleDrop = useCallback(\n (e: React.DragEvent, targetId: string) => {\n e.preventDefault()\n if (!draggedId || draggedId === targetId) return\n\n const currentOrder = table.getState().columnOrder.length > 0\n ? table.getState().columnOrder\n : columns.map((c) => c.id)\n\n const fromIndex = currentOrder.indexOf(draggedId)\n const toIndex = currentOrder.indexOf(targetId)\n\n if (fromIndex === -1 || toIndex === -1) return\n\n const newOrder = [...currentOrder]\n newOrder.splice(fromIndex, 1)\n newOrder.splice(toIndex, 0, draggedId)\n\n table.setColumnOrder(newOrder)\n setDraggedId(null)\n },\n [draggedId, table, columns]\n )\n\n return (\n <div className=\"yable-sidebar-panel yable-sidebar-columns\">\n {/* Search input with icon */}\n <div className=\"yable-sidebar-panel-search\">\n <SearchIcon />\n <input\n type=\"text\"\n className=\"yable-sidebar-search-input\"\n placeholder=\"Search columns...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n aria-label=\"Search columns\"\n />\n </div>\n\n {/* Toggle actions with count badge */}\n <div className=\"yable-sidebar-panel-actions\">\n <button\n type=\"button\"\n className=\"yable-sidebar-action-btn\"\n onClick={() => handleToggleAll(true)}\n >\n Show all\n </button>\n <button\n type=\"button\"\n className=\"yable-sidebar-action-btn\"\n onClick={() => handleToggleAll(false)}\n >\n Hide all\n </button>\n <span className=\"yable-sidebar-column-count\" aria-live=\"polite\">\n {visibleCount}/{columns.length}\n </span>\n </div>\n\n {/* Draggable column list */}\n <div className=\"yable-sidebar-column-list\" role=\"listbox\" aria-label=\"Columns\">\n {filteredColumns.map((column) => {\n const header = typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id\n const isVisible = column.getIsVisible()\n\n return (\n <div\n key={column.id}\n className={`yable-sidebar-column-item${draggedId === column.id ? ' yable-sidebar-column-item--dragging' : ''}${!isVisible ? ' yable-sidebar-column-item--hidden' : ''}`}\n draggable\n onDragStart={(e) => handleDragStart(e, column.id)}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDrop={(e) => handleDrop(e, column.id)}\n role=\"option\"\n aria-selected={isVisible}\n >\n <span className=\"yable-sidebar-drag-handle\" aria-hidden=\"true\">\n <svg width=\"8\" height=\"14\" viewBox=\"0 0 8 14\" fill=\"currentColor\">\n <circle cx=\"2\" cy=\"2\" r=\"1.2\" />\n <circle cx=\"6\" cy=\"2\" r=\"1.2\" />\n <circle cx=\"2\" cy=\"7\" r=\"1.2\" />\n <circle cx=\"6\" cy=\"7\" r=\"1.2\" />\n <circle cx=\"2\" cy=\"12\" r=\"1.2\" />\n <circle cx=\"6\" cy=\"12\" r=\"1.2\" />\n </svg>\n </span>\n <label className=\"yable-sidebar-column-label\">\n <input\n type=\"checkbox\"\n className=\"yable-checkbox\"\n checked={isVisible}\n onChange={(e) => column.toggleVisibility(e.target.checked)}\n />\n <span className=\"yable-sidebar-column-name\">{header}</span>\n </label>\n <span className=\"yable-sidebar-column-visibility\" aria-hidden=\"true\">\n <VisibilityIcon visible={isVisible} />\n </span>\n </div>\n )\n })}\n\n {/* Empty state when search yields no results */}\n {filteredColumns.length === 0 && search && (\n <div className=\"yable-sidebar-empty\">\n <span>No columns match &ldquo;{search}&rdquo;</span>\n </div>\n )}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Filters Panel Component\n// Summary of active filters with edit/remove capabilities, count badge,\n// and a polished empty state illustration.\n\nimport { useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\ninterface FiltersPanelProps<TData extends RowData> {\n table: Table<TData>\n}\n\n/** Small X icon for remove buttons */\nfunction RemoveIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 3l6 6M9 3L3 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Search/globe icon for global filter badge */\nfunction GlobalSearchIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"5.5\" cy=\"5.5\" r=\"3.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M8 8L10.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Column filter icon */\nfunction ColumnFilterIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1.5 2h9L7 6v3.5L5 11V6L1.5 2z\" stroke=\"currentColor\" strokeWidth=\"1.1\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport function FiltersPanel<TData extends RowData>({\n table,\n}: FiltersPanelProps<TData>) {\n const columnFilters = table.getState().columnFilters\n const globalFilter = table.getState().globalFilter\n const hasFilters = columnFilters.length > 0 || Boolean(globalFilter)\n const filterCount = columnFilters.length + (globalFilter ? 1 : 0)\n\n const handleRemoveColumnFilter = useCallback(\n (columnId: string) => {\n table.setColumnFilters((prev) =>\n prev.filter((f) => f.id !== columnId)\n )\n },\n [table]\n )\n\n const handleClearAll = useCallback(() => {\n table.resetColumnFilters(true)\n table.resetGlobalFilter(true)\n }, [table])\n\n return (\n <div className=\"yable-sidebar-panel yable-sidebar-filters\">\n <div className=\"yable-sidebar-panel-header\">\n <span className=\"yable-sidebar-panel-title\">\n Active Filters\n {hasFilters && (\n <span className=\"yable-sidebar-filter-badge\">{filterCount}</span>\n )}\n </span>\n {hasFilters && (\n <button\n type=\"button\"\n className=\"yable-sidebar-action-btn yable-sidebar-action-btn--danger\"\n onClick={handleClearAll}\n >\n Clear all\n </button>\n )}\n </div>\n\n {!hasFilters && (\n <div className=\"yable-sidebar-empty\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5 10h30M10 20h20M15 30h10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeOpacity=\"0.2\"\n />\n <circle cx=\"32\" cy=\"30\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeOpacity=\"0.15\" />\n <path d=\"M30 28l4 4M34 28l-4 4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeOpacity=\"0.15\" />\n </svg>\n <span>No active filters</span>\n <span className=\"yable-sidebar-empty-hint\">\n Filter columns using the header menu or the search bar.\n </span>\n </div>\n )}\n\n <div className=\"yable-sidebar-filter-list\" role=\"list\">\n {/* Global filter */}\n {globalFilter && (\n <div className=\"yable-sidebar-filter-item\" role=\"listitem\">\n <span className=\"yable-sidebar-filter-type-icon\" aria-hidden=\"true\">\n <GlobalSearchIcon />\n </span>\n <div className=\"yable-sidebar-filter-info\">\n <span className=\"yable-sidebar-filter-column\">Global Search</span>\n <span className=\"yable-sidebar-filter-value\">\n &ldquo;{String(globalFilter)}&rdquo;\n </span>\n </div>\n <button\n type=\"button\"\n className=\"yable-sidebar-filter-remove\"\n onClick={() => table.resetGlobalFilter(true)}\n aria-label=\"Remove global filter\"\n title=\"Remove filter\"\n >\n <RemoveIcon />\n </button>\n </div>\n )}\n\n {/* Column filters */}\n {columnFilters.map((filter) => {\n const column = table.getColumn(filter.id)\n const headerName = column\n ? typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id\n : filter.id\n\n return (\n <div key={filter.id} className=\"yable-sidebar-filter-item\" role=\"listitem\">\n <span className=\"yable-sidebar-filter-type-icon\" aria-hidden=\"true\">\n <ColumnFilterIcon />\n </span>\n <div className=\"yable-sidebar-filter-info\">\n <span className=\"yable-sidebar-filter-column\">{headerName}</span>\n <span className=\"yable-sidebar-filter-value\">\n {String(filter.value)}\n </span>\n </div>\n <button\n type=\"button\"\n className=\"yable-sidebar-filter-remove\"\n onClick={() => handleRemoveColumnFilter(filter.id)}\n aria-label={`Remove filter for ${headerName}`}\n title=\"Remove filter\"\n >\n <RemoveIcon />\n </button>\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Sidebar / Tool Panels Component\n// Slides in from right with tab interface for Columns and Filters panels.\n// Includes keyboard support: Escape to close, tab-switching keyboard nav.\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { ColumnsPanel } from './ColumnsPanel'\nimport { FiltersPanel } from './FiltersPanel'\n\ninterface SidebarProps<TData extends RowData> {\n table: Table<TData>\n open: boolean\n onClose: () => void\n panels: ('columns' | 'filters')[]\n activePanel: 'columns' | 'filters'\n onPanelChange: (panel: 'columns' | 'filters') => void\n}\n\nexport function Sidebar<TData extends RowData>({\n table,\n open,\n onClose,\n panels,\n activePanel,\n onPanelChange,\n}: SidebarProps<TData>) {\n const sidebarRef = useRef<HTMLDivElement>(null)\n\n // Close on Escape key\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onClose()\n }\n },\n [open, onClose]\n )\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [handleKeyDown])\n\n const panelId = `yable-sidebar-panel-${activePanel}`\n const tabId = (panel: string) => `yable-sidebar-tab-${panel}`\n\n return (\n <div\n ref={sidebarRef}\n className={`yable-sidebar${open ? ' yable-sidebar--open' : ''}`}\n role=\"complementary\"\n aria-label=\"Table tools\"\n >\n {/* Header with tabs */}\n <div className=\"yable-sidebar-header\">\n <div className=\"yable-sidebar-tabs\" role=\"tablist\" aria-label=\"Tool panels\">\n {panels.includes('columns') && (\n <button\n type=\"button\"\n id={tabId('columns')}\n className={`yable-sidebar-tab${activePanel === 'columns' ? ' yable-sidebar-tab--active' : ''}`}\n role=\"tab\"\n aria-selected={activePanel === 'columns'}\n aria-controls={panelId}\n onClick={() => onPanelChange('columns')}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1\" y=\"1\" width=\"5\" height=\"12\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <rect x=\"8\" y=\"1\" width=\"5\" height=\"12\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n </svg>\n <span>Columns</span>\n </button>\n )}\n {panels.includes('filters') && (\n <button\n type=\"button\"\n id={tabId('filters')}\n className={`yable-sidebar-tab${activePanel === 'filters' ? ' yable-sidebar-tab--active' : ''}`}\n role=\"tab\"\n aria-selected={activePanel === 'filters'}\n aria-controls={panelId}\n onClick={() => onPanelChange('filters')}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 3h12M3 7h8M5 11h4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n <span>Filters</span>\n </button>\n )}\n </div>\n <button\n type=\"button\"\n className=\"yable-sidebar-close\"\n onClick={onClose}\n aria-label=\"Close sidebar\"\n title=\"Close (Esc)\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l6 6M10 4L4 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {/* Panel content */}\n <div\n id={panelId}\n className=\"yable-sidebar-content\"\n role=\"tabpanel\"\n aria-labelledby={tabId(activePanel)}\n >\n {activePanel === 'columns' && <ColumnsPanel table={table} />}\n {activePanel === 'filters' && <FiltersPanel table={table} />}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Context Menu Item Component\n// Renders a single menu item with optional icon, shortcut badge, submenu arrow, and hover states.\n\nimport React, { useState, useRef, useEffect } from 'react'\n\nexport interface ContextMenuItemDef {\n id: string\n label: string\n icon?: React.ReactNode\n shortcut?: string\n disabled?: boolean\n danger?: boolean\n separator?: boolean\n children?: ContextMenuItemDef[]\n action?: () => void\n}\n\ninterface ContextMenuItemProps {\n item: ContextMenuItemDef\n onClose: () => void\n}\n\nexport function ContextMenuItem({ item, onClose }: ContextMenuItemProps) {\n const [submenuOpen, setSubmenuOpen] = useState(false)\n const itemRef = useRef<HTMLDivElement>(null)\n const submenuRef = useRef<HTMLDivElement>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n // Cleanup timer on unmount\n useEffect(() => {\n return () => clearTimeout(timerRef.current)\n }, [])\n\n if (item.separator) {\n return <div className=\"yable-ctx-separator\" role=\"separator\" />\n }\n\n const hasChildren = item.children && item.children.length > 0\n\n const classes = [\n 'yable-ctx-item',\n item.disabled && 'yable-ctx-item--disabled',\n item.danger && 'yable-ctx-item--danger',\n hasChildren && 'yable-ctx-item--has-submenu',\n submenuOpen && 'yable-ctx-item--submenu-open',\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleClick = () => {\n if (item.disabled) return\n if (hasChildren) return\n item.action?.()\n onClose()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n if (e.key === 'ArrowRight' && hasChildren) {\n setSubmenuOpen(true)\n }\n if (e.key === 'ArrowLeft' && submenuOpen) {\n setSubmenuOpen(false)\n }\n }\n\n const handleMouseEnter = () => {\n clearTimeout(timerRef.current)\n if (hasChildren) {\n timerRef.current = setTimeout(() => setSubmenuOpen(true), 150)\n }\n }\n\n const handleMouseLeave = () => {\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setSubmenuOpen(false), 200)\n }\n\n return (\n <div\n ref={itemRef}\n className={classes}\n role=\"menuitem\"\n tabIndex={item.disabled ? -1 : 0}\n aria-disabled={item.disabled}\n aria-haspopup={hasChildren ? 'menu' : undefined}\n aria-expanded={hasChildren ? submenuOpen : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <span className=\"yable-ctx-item-icon\" aria-hidden=\"true\">\n {item.icon ?? null}\n </span>\n <span className=\"yable-ctx-item-label\">{item.label}</span>\n {item.shortcut && (\n <kbd className=\"yable-ctx-item-shortcut\">{item.shortcut}</kbd>\n )}\n {hasChildren && (\n <span className=\"yable-ctx-item-arrow\" aria-hidden=\"true\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path d=\"M3.5 2L6.5 5L3.5 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n )}\n\n {hasChildren && submenuOpen && (\n <div\n ref={submenuRef}\n className=\"yable-ctx-menu yable-ctx-submenu yable-ctx-menu--animated\"\n role=\"menu\"\n onMouseEnter={() => clearTimeout(timerRef.current)}\n onMouseLeave={handleMouseLeave}\n >\n {item.children!.map((child) => (\n <ContextMenuItem key={child.id} item={child} onClose={onClose} />\n ))}\n </div>\n )}\n </div>\n )\n}\n","// @zvndev/yable-react — Context Menu Component\n// Built-in right-click menu with copy, paste, cut, export, sort, pin, hide, auto-size.\n\nimport React, { useRef, useEffect, useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { ContextMenuItem, type ContextMenuItemDef } from './ContextMenuItem'\n\nexport type { ContextMenuItemDef }\n\ninterface ContextMenuProps<TData extends RowData> {\n x: number\n y: number\n onClose: () => void\n table: Table<TData>\n customItems?: ContextMenuItemDef[]\n}\n\nexport function ContextMenu<TData extends RowData>({\n x,\n y,\n onClose,\n table,\n customItems,\n}: ContextMenuProps<TData>) {\n const menuRef = useRef<HTMLDivElement>(null)\n\n // Position adjustment to keep menu within viewport\n useEffect(() => {\n if (!menuRef.current) return\n const rect = menuRef.current.getBoundingClientRect()\n const vw = window.innerWidth\n const vh = window.innerHeight\n\n if (rect.right > vw - 8) {\n menuRef.current.style.left = `${x - rect.width}px`\n }\n if (rect.bottom > vh - 8) {\n menuRef.current.style.top = `${y - rect.height}px`\n }\n }, [x, y])\n\n // Focus first item for keyboard nav\n useEffect(() => {\n const firstItem = menuRef.current?.querySelector<HTMLElement>('[role=\"menuitem\"]')\n firstItem?.focus()\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose()\n return\n }\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n const items = menuRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n )\n if (!items || items.length === 0) return\n\n const currentIndex = Array.from(items).findIndex((el) => el === document.activeElement)\n\n let nextIndex: number\n if (e.key === 'ArrowDown') {\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0\n } else {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1\n }\n items[nextIndex]?.focus()\n }\n },\n [onClose],\n )\n\n // Build default menu items\n const defaultItems: ContextMenuItemDef[] = [\n {\n id: 'copy',\n label: 'Copy',\n shortcut: '\\u2318C',\n action: () => {\n try {\n const text = table.copyToClipboard()\n navigator.clipboard?.writeText(text)\n } catch {\n // Clipboard access can be unavailable in some browsers or test environments.\n }\n },\n },\n {\n id: 'cut',\n label: 'Cut',\n shortcut: '\\u2318X',\n action: () => {\n try {\n const text = table.cutCells()\n navigator.clipboard?.writeText(text)\n } catch {\n // Clipboard access can be unavailable in some browsers or test environments.\n }\n },\n },\n {\n id: 'paste',\n label: 'Paste',\n shortcut: '\\u2318V',\n action: () => {\n navigator.clipboard\n ?.readText()\n .then((text) => {\n const editing = table.getState().editing\n if (editing?.activeCell) {\n table.pasteFromClipboard(text, editing.activeCell.rowId, editing.activeCell.columnId)\n }\n })\n .catch(() => {})\n },\n },\n { id: 'sep1', label: '', separator: true },\n {\n id: 'sort',\n label: 'Sort',\n children: [\n {\n id: 'sort-asc',\n label: 'Sort Ascending',\n action: () => {\n table.setSorting([])\n },\n },\n {\n id: 'sort-desc',\n label: 'Sort Descending',\n action: () => {\n table.setSorting([])\n },\n },\n {\n id: 'sort-clear',\n label: 'Clear Sort',\n action: () => {\n table.resetSorting(true)\n },\n },\n ],\n },\n { id: 'sep2', label: '', separator: true },\n {\n id: 'export',\n label: 'Export',\n children: [\n {\n id: 'export-csv',\n label: 'Export as CSV',\n action: () => {\n const csv = table.exportData({ format: 'csv', allRows: true })\n const blob = new Blob([csv], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = 'table-export.csv'\n a.click()\n URL.revokeObjectURL(url)\n },\n },\n {\n id: 'export-json',\n label: 'Export as JSON',\n action: () => {\n const json = table.exportData({ format: 'json', allRows: true })\n const blob = new Blob([json], { type: 'application/json' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = 'table-export.json'\n a.click()\n URL.revokeObjectURL(url)\n },\n },\n ],\n },\n ]\n\n const items = customItems\n ? [...defaultItems, { id: 'sep-custom', label: '', separator: true }, ...customItems]\n : defaultItems\n\n return (\n <>\n {/* Invisible backdrop to capture outside clicks and close the menu */}\n <div\n className=\"yable-ctx-backdrop\"\n onClick={onClose}\n onContextMenu={(e) => {\n e.preventDefault()\n onClose()\n }}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9998,\n }}\n aria-hidden=\"true\"\n />\n <div\n ref={menuRef}\n className=\"yable-ctx-menu yable-ctx-menu--animated\"\n role=\"menu\"\n aria-label=\"Context menu\"\n style={{\n position: 'fixed',\n left: x,\n top: y,\n zIndex: 9999,\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n >\n {items.map((item) => (\n <ContextMenuItem key={item.id} item={item} onClose={onClose} />\n ))}\n </div>\n </>\n )\n}\n","// @zvndev/yable-react — useContextMenu hook\n\nimport { useState, useCallback, useEffect } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\nexport function useContextMenu() {\n const [isOpen, setIsOpen] = useState(false)\n const [x, setX] = useState(0)\n const [y, setY] = useState(0)\n const [targetTable, setTargetTable] = useState<Table<any> | null>(null)\n\n const open = useCallback(\n <TData extends RowData>(clientX: number, clientY: number, table: Table<TData>) => {\n setX(clientX)\n setY(clientY)\n setTargetTable(table as any)\n setIsOpen(true)\n },\n []\n )\n\n const close = useCallback(() => {\n setIsOpen(false)\n setTargetTable(null)\n }, [])\n\n // Close on escape key\n useEffect(() => {\n if (!isOpen) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close()\n }\n\n const handleClick = () => close()\n\n document.addEventListener('keydown', handleKeyDown)\n document.addEventListener('click', handleClick)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.removeEventListener('click', handleClick)\n }\n }, [isOpen, close])\n\n return { isOpen, x, y, targetTable, open, close }\n}\n","// @zvndev/yable-react — useKeyboardNavigation hook\n// Attaches spreadsheet-style keyboard navigation to the table container.\n\nimport { useCallback, useEffect } from 'react'\nimport {\n canCellEnterEditMode,\n getFirstKeyboardCell,\n getResolvedFocusedCell,\n type KeyboardNavigationCell,\n type RowData,\n type Table,\n} from '@zvndev/yable-core'\n\nexport interface UseKeyboardNavigationOptions {\n /** Whether keyboard navigation is enabled. Default: true */\n enabled?: boolean\n /** The table container element ref */\n containerRef?: React.RefObject<HTMLElement | null>\n}\n\nexport function useKeyboardNavigation<TData extends RowData>(\n table: Table<TData>,\n options: UseKeyboardNavigationOptions = {}\n): void {\n const {\n enabled = true,\n containerRef,\n } = options\n\n const focusedCell = table.getFocusedCell()\n const activeCell = table.getState().editing.activeCell\n const focusedRowIndex = focusedCell?.rowIndex ?? null\n const focusedColumnIndex = focusedCell?.columnIndex ?? null\n\n const focusCellElement = useCallback(\n (container: HTMLElement, cell: KeyboardNavigationCell): boolean => {\n const element = getCellElement(container, cell)\n if (!element) return false\n\n element.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n })\n\n if (document.activeElement !== element) {\n element.focus({ preventScroll: true })\n }\n\n return true\n },\n []\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!enabled || table.options.enableKeyboardNavigation === false) return\n\n const target = event.target as HTMLElement | null\n if (isEditableTarget(target)) return\n\n const ctrlKey = event.ctrlKey || event.metaKey\n const currentFocusedCell = table.getFocusedCell() ?? getFirstKeyboardCell(table)\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault()\n table.moveFocus({ type: 'arrow', direction: 'up', ctrlKey })\n return\n\n case 'ArrowDown':\n event.preventDefault()\n table.moveFocus({ type: 'arrow', direction: 'down', ctrlKey })\n return\n\n case 'ArrowLeft':\n event.preventDefault()\n table.moveFocus({ type: 'arrow', direction: 'left', ctrlKey })\n return\n\n case 'ArrowRight':\n event.preventDefault()\n table.moveFocus({ type: 'arrow', direction: 'right', ctrlKey })\n return\n\n case 'Tab':\n event.preventDefault()\n table.moveFocus({ type: 'tab', shiftKey: event.shiftKey })\n return\n\n case 'Home':\n event.preventDefault()\n table.moveFocus({ type: 'home', ctrlKey })\n return\n\n case 'End':\n event.preventDefault()\n table.moveFocus({ type: 'end', ctrlKey })\n return\n\n case 'PageUp':\n event.preventDefault()\n table.moveFocus({\n type: 'page',\n direction: 'up',\n pageSize: getVisiblePageSize(containerRef?.current, table),\n })\n return\n\n case 'PageDown':\n event.preventDefault()\n table.moveFocus({\n type: 'page',\n direction: 'down',\n pageSize: getVisiblePageSize(containerRef?.current, table),\n })\n return\n\n case 'F2': {\n const resolved = getResolvedFocusedCell(table, currentFocusedCell)\n if (!resolved) return\n if (!canCellEnterEditMode(table, resolved.row, resolved.column)) return\n\n event.preventDefault()\n table.startEditing(resolved.row.id, resolved.column.id)\n return\n }\n\n case 'Enter':\n if (!activeCell) return\n event.preventDefault()\n table.commitEdit()\n return\n\n case 'Escape':\n if (!activeCell) return\n event.preventDefault()\n table.cancelEdit()\n return\n }\n },\n [activeCell, containerRef, enabled, table]\n )\n\n useEffect(() => {\n if (!enabled || table.options.enableKeyboardNavigation === false) return\n\n const container = containerRef?.current\n if (!container) return\n\n container.addEventListener('keydown', handleKeyDown)\n\n return () => {\n container.removeEventListener('keydown', handleKeyDown)\n }\n }, [containerRef, enabled, handleKeyDown, table.options.enableKeyboardNavigation])\n\n useEffect(() => {\n if (!enabled || table.options.enableKeyboardNavigation === false) return\n if (focusedRowIndex === null || focusedColumnIndex === null) return\n if (activeCell) return\n\n const container = containerRef?.current\n if (!container) return\n\n const nextFocusedCell = {\n rowIndex: focusedRowIndex,\n columnIndex: focusedColumnIndex,\n }\n\n if (focusCellElement(container, nextFocusedCell)) {\n return\n }\n\n const virtualContainer = getVirtualScrollContainer(container)\n if (!virtualContainer) return\n\n scrollVirtualRowIntoView(virtualContainer, table, nextFocusedCell.rowIndex)\n\n const rafId = requestAnimationFrame(() => {\n focusCellElement(container, nextFocusedCell)\n })\n\n return () => cancelAnimationFrame(rafId)\n }, [\n activeCell,\n containerRef,\n enabled,\n focusCellElement,\n focusedColumnIndex,\n focusedRowIndex,\n table,\n ])\n}\n\nfunction getCellElement(\n container: HTMLElement,\n cell: KeyboardNavigationCell\n): HTMLTableCellElement | null {\n return container.querySelector<HTMLTableCellElement>(\n `[data-row-index=\"${cell.rowIndex}\"][data-column-index=\"${cell.columnIndex}\"]`\n )\n}\n\nfunction getVirtualScrollContainer(container: HTMLElement): HTMLElement | null {\n return container.querySelector<HTMLElement>('.yable-virtual-scroll-container')\n}\n\nfunction getEstimatedRowHeight<TData extends RowData>(\n table: Table<TData>,\n rowIndex: number\n): number {\n const rowHeight = table.options.rowHeight\n\n if (typeof rowHeight === 'function') {\n return rowHeight(rowIndex)\n }\n\n if (typeof rowHeight === 'number') {\n return rowHeight\n }\n\n return table.options.estimateRowHeight ?? 40\n}\n\nfunction getEstimatedRowOffset<TData extends RowData>(\n table: Table<TData>,\n rowIndex: number\n): number {\n const rowHeight = table.options.rowHeight\n\n if (typeof rowHeight === 'function') {\n let offset = 0\n for (let index = 0; index < rowIndex; index++) {\n offset += rowHeight(index)\n }\n return offset\n }\n\n const estimatedRowHeight = getEstimatedRowHeight(table, rowIndex)\n return rowIndex * estimatedRowHeight\n}\n\nfunction scrollVirtualRowIntoView<TData extends RowData>(\n container: HTMLElement,\n table: Table<TData>,\n rowIndex: number\n): void {\n const rowTop = getEstimatedRowOffset(table, rowIndex)\n const rowHeight = getEstimatedRowHeight(table, rowIndex)\n const rowBottom = rowTop + rowHeight\n\n if (rowTop < container.scrollTop) {\n container.scrollTop = rowTop\n return\n }\n\n const viewportBottom = container.scrollTop + container.clientHeight\n if (rowBottom > viewportBottom) {\n container.scrollTop = rowBottom - container.clientHeight\n }\n}\n\nfunction getVisiblePageSize<TData extends RowData>(\n container: HTMLElement | null | undefined,\n table: Table<TData>\n): number {\n if (!container) return 10\n\n const scrollContainer = getVirtualScrollContainer(container) ?? container\n const estimatedRowHeight = getEstimatedRowHeight(\n table,\n table.getFocusedCell()?.rowIndex ?? 0\n )\n\n if (estimatedRowHeight <= 0) return 10\n\n return Math.max(1, Math.floor(scrollContainer.clientHeight / estimatedRowHeight))\n}\n\nfunction isEditableTarget(element: HTMLElement | null): boolean {\n if (!element) return false\n\n const tagName = element.tagName.toLowerCase()\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\n return true\n }\n\n return element.isContentEditable\n}\n","// @zvndev/yable-react — Main Table Component\n\nimport React, { useMemo, useState, useCallback, useRef, useEffect } from 'react'\nimport type { HeaderGroup, RowData, Table as TableInstance } from '@zvndev/yable-core'\nimport { TableProvider } from '../context'\nimport type { TableProps } from '../types'\nimport { TableHeader } from './TableHeader'\nimport { TableBody } from './TableBody'\nimport { TableFooter } from './TableFooter'\nimport { LoadingOverlay } from './LoadingOverlay'\nimport { NoRowsOverlay } from './NoRowsOverlay'\nimport { StatusBar } from './StatusBar'\nimport { Sidebar } from './Sidebar'\nimport { ContextMenu } from './ContextMenu'\nimport { useContextMenu } from '../hooks/useContextMenu'\nimport { useKeyboardNavigation } from '../hooks/useKeyboardNavigation'\nimport { useColumnVirtualization } from '../hooks/useColumnVirtualization'\n\nfunction filterHeaderGroups<TData extends RowData>(\n groups: HeaderGroup<TData>[],\n visibleColumnIds: Set<string>,\n): HeaderGroup<TData>[] {\n return groups\n .map((group) => ({\n ...group,\n headers: group.headers.filter((header) => visibleColumnIds.has(header.column.id)),\n }))\n .filter((group) => group.headers.length > 0)\n}\n\nexport function Table<TData extends RowData>({\n table,\n stickyHeader,\n striped,\n bordered,\n compact,\n theme,\n clickableRows,\n footer,\n loading,\n loadingComponent,\n loadingText,\n emptyMessage,\n emptyComponent,\n emptyIcon,\n emptyDetail,\n renderEmpty,\n renderLoading,\n children,\n className,\n direction,\n statusBar,\n statusBarPanels,\n sidebar,\n sidebarPanels = ['columns', 'filters'],\n defaultSidebarPanel,\n floatingFilters,\n columnVirtualization,\n columnVirtualizationOverscan,\n ariaLabel,\n ...rest\n}: TableProps<TData>) {\n const [sidebarOpen, setSidebarOpen] = useState(false)\n const [sidebarPanel, setSidebarPanel] = useState<'columns' | 'filters'>(\n defaultSidebarPanel ?? 'columns',\n )\n const containerRef = useRef<HTMLDivElement>(null)\n const horizontalScrollRef = useRef<HTMLDivElement>(null)\n const isRtl = direction === 'rtl'\n\n const classNames = [\n 'yable',\n theme && `yable-theme-${theme}`,\n stickyHeader && 'yable--sticky-header',\n striped && 'yable--striped',\n bordered && 'yable--bordered',\n compact && 'yable--compact',\n loading && 'yable-loading',\n isRtl && 'yable--rtl',\n sidebarOpen && 'yable--sidebar-open',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const rows = table.getRowModel().rows\n const hasGlobalFilter = Boolean(table.getState().globalFilter)\n const hasColumnFilters = table.getState().columnFilters.length > 0\n const isFiltered = hasGlobalFilter || hasColumnFilters\n const allVisibleColumns = table.getVisibleLeafColumns()\n const hasPinnedColumns =\n table.getLeftVisibleLeafColumns().length > 0 || table.getRightVisibleLeafColumns().length > 0\n const hasGroupedHeaders = table.getHeaderGroups().length > 1\n const canVirtualizeColumns =\n Boolean(columnVirtualization) &&\n !hasPinnedColumns &&\n !hasGroupedHeaders &&\n allVisibleColumns.length > 0\n\n const columnVirtualState = useColumnVirtualization({\n containerRef: horizontalScrollRef,\n columns: allVisibleColumns,\n overscan: columnVirtualizationOverscan ?? 2,\n enabled: canVirtualizeColumns,\n })\n\n const renderTable = useMemo(() => {\n if (!canVirtualizeColumns || !columnVirtualState.isVirtualized) {\n return table\n }\n\n const virtualColumns = columnVirtualState.virtualColumns.map((entry) => entry.column)\n const visibleColumnIds = new Set(virtualColumns.map((column) => column.id))\n const next = Object.create(table) as TableInstance<TData>\n\n next.getVisibleFlatColumns = () => virtualColumns\n next.getVisibleLeafColumns = () => virtualColumns\n next.getCenterVisibleLeafColumns = () => virtualColumns\n next.getLeftVisibleLeafColumns = () => []\n next.getRightVisibleLeafColumns = () => []\n next.getHeaderGroups = () => filterHeaderGroups(table.getHeaderGroups(), visibleColumnIds)\n next.getCenterHeaderGroups = () =>\n filterHeaderGroups(table.getCenterHeaderGroups(), visibleColumnIds)\n next.getFooterGroups = () => filterHeaderGroups(table.getFooterGroups(), visibleColumnIds)\n next.getCenterFooterGroups = () =>\n filterHeaderGroups(table.getCenterFooterGroups(), visibleColumnIds)\n\n return next\n }, [\n canVirtualizeColumns,\n columnVirtualState.isVirtualized,\n columnVirtualState.virtualColumns,\n table,\n ])\n\n const showColumnVirtualizationShell = canVirtualizeColumns\n\n const contextMenu = useContextMenu()\n useKeyboardNavigation(table, { containerRef })\n\n // ---- aria-live announcements for sort, filter, and pagination changes ----\n const [announcement, setAnnouncement] = useState('')\n const prevSortingRef = useRef(table.getState().sorting)\n const prevFilterCountRef = useRef(rows.length)\n const prevHasFiltersRef = useRef(isFiltered)\n const prevPaginationRef = useRef(table.getState().pagination)\n const isFirstRenderRef = useRef(true)\n\n useEffect(() => {\n // Skip announcements on first render\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false\n return\n }\n\n const currentSorting = table.getState().sorting\n const currentPagination = table.getState().pagination\n const currentRowCount = rows.length\n const currentIsFiltered = isFiltered\n\n // Check for sorting changes\n if (JSON.stringify(currentSorting) !== JSON.stringify(prevSortingRef.current)) {\n prevSortingRef.current = currentSorting\n const firstSort = currentSorting[0]\n if (firstSort) {\n const column = table.getColumn(firstSort.id)\n const headerDef = column?.columnDef.header\n const columnName = typeof headerDef === 'string' ? headerDef : firstSort.id\n const direction = firstSort.desc ? 'descending' : 'ascending'\n setAnnouncement(`Sorted by ${columnName} ${direction}`)\n return\n }\n }\n\n // Check for filter result count changes\n if (\n currentRowCount !== prevFilterCountRef.current ||\n currentIsFiltered !== prevHasFiltersRef.current\n ) {\n prevFilterCountRef.current = currentRowCount\n prevHasFiltersRef.current = currentIsFiltered\n if (currentIsFiltered) {\n setAnnouncement(`${currentRowCount} rows after filtering`)\n return\n }\n }\n\n // Check for pagination changes\n if (JSON.stringify(currentPagination) !== JSON.stringify(prevPaginationRef.current)) {\n prevPaginationRef.current = currentPagination\n const pageCount = table.getPageCount()\n if (pageCount > 0) {\n setAnnouncement(`Page ${currentPagination.pageIndex + 1} of ${pageCount}`)\n return\n }\n }\n })\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault()\n contextMenu.open(e.clientX, e.clientY, table)\n },\n [contextMenu, table],\n )\n\n const tableNode = (\n <table\n className=\"yable-table\"\n style={\n columnVirtualState.isVirtualized\n ? {\n width: columnVirtualState.visibleWidth,\n minWidth: columnVirtualState.visibleWidth,\n marginLeft: columnVirtualState.startOffset,\n tableLayout: 'fixed',\n }\n : undefined\n }\n data-column-virtualized={columnVirtualState.isVirtualized || undefined}\n >\n <TableHeader table={renderTable} floatingFilters={floatingFilters} />\n <TableBody table={renderTable} clickableRows={clickableRows} />\n {footer && <TableFooter table={renderTable} />}\n </table>\n )\n\n return (\n <TableProvider value={table}>\n <div\n ref={containerRef}\n className={classNames}\n data-theme={theme}\n dir={direction}\n role=\"grid\"\n aria-label={ariaLabel ?? 'Data table'}\n aria-rowcount={table.getRowModel().rows.length}\n aria-colcount={table.getVisibleLeafColumns().length}\n onContextMenu={handleContextMenu}\n {...rest}\n >\n <div className=\"yable-main\">\n {showColumnVirtualizationShell ? (\n <div\n ref={horizontalScrollRef}\n className=\"yable-horizontal-scroll-container\"\n style={{\n overflowX: 'auto',\n overflowY: 'visible',\n maxWidth: '100%',\n position: 'relative',\n }}\n >\n <div\n className=\"yable-horizontal-scroll-inner\"\n style={{\n width: Math.max(columnVirtualState.totalWidth, columnVirtualState.visibleWidth),\n minWidth: Math.max(\n columnVirtualState.totalWidth,\n columnVirtualState.visibleWidth,\n ),\n }}\n >\n {tableNode}\n </div>\n </div>\n ) : (\n tableNode\n )}\n\n <LoadingOverlay\n loading={loading}\n loadingComponent={renderLoading ? renderLoading() : loadingComponent}\n loadingText={loadingText}\n />\n\n {!loading &&\n rows.length === 0 &&\n (renderEmpty ? (\n renderEmpty()\n ) : (\n <NoRowsOverlay\n emptyComponent={emptyComponent}\n emptyIcon={emptyIcon}\n emptyMessage={emptyMessage}\n emptyDetail={emptyDetail}\n isFiltered={isFiltered}\n />\n ))}\n </div>\n\n {sidebar && (\n <Sidebar\n table={table}\n open={sidebarOpen}\n onClose={() => setSidebarOpen(false)}\n panels={sidebarPanels}\n activePanel={sidebarPanel}\n onPanelChange={setSidebarPanel}\n />\n )}\n\n {statusBar && <StatusBar table={table} panels={statusBarPanels} />}\n\n {children}\n\n {contextMenu.isOpen && (\n <ContextMenu\n x={contextMenu.x}\n y={contextMenu.y}\n onClose={contextMenu.close}\n table={table}\n />\n )}\n\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n border: 0,\n }}\n >\n {announcement}\n </div>\n </div>\n </TableProvider>\n )\n}\n","// @zvndev/yable-react — Pagination Component\n// Polished page navigation with SVG icons, page size selector, and row info.\n\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { getDefaultLocale } from '@zvndev/yable-core'\n\ninterface PaginationProps<TData extends RowData> {\n table: Table<TData>\n /** Show page size selector */\n showPageSize?: boolean\n /** Available page sizes */\n pageSizes?: number[]\n /** Show row count info */\n showInfo?: boolean\n /** Show first/last buttons */\n showFirstLast?: boolean\n}\n\n/** Chevron-left icon for Previous */\nfunction ChevronLeftIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M8.5 3L4.5 7L8.5 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\n/** Chevron-right icon for Next */\nfunction ChevronRightIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.5 3L9.5 7L5.5 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\n/** Double-chevron-left icon for First Page */\nfunction ChevronFirstIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9.5 3L5.5 7L9.5 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.5 3V11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Double-chevron-right icon for Last Page */\nfunction ChevronLastIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4.5 3L8.5 7L4.5 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9.5 3V11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Small chevron for the page size select dropdown */\nfunction SelectChevronIcon() {\n return (\n <svg className=\"yable-pagination-select-icon\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2.5 4L5 6.5L7.5 4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport function Pagination<TData extends RowData>({\n table,\n showPageSize = true,\n pageSizes = [10, 20, 50, 100],\n showInfo = true,\n showFirstLast = true,\n}: PaginationProps<TData>) {\n const { pageIndex, pageSize } = table.getState().pagination\n const pageCount = table.getPageCount()\n const totalRows = table.getPrePaginationRowModel().rows.length\n const from = pageIndex * pageSize + 1\n const to = Math.min((pageIndex + 1) * pageSize, totalRows)\n const canPrev = table.getCanPreviousPage()\n const canNext = table.getCanNextPage()\n const locale = getDefaultLocale()\n\n return (\n <nav className=\"yable-pagination\" role=\"navigation\" aria-label=\"Table pagination\">\n {/* Row info and page size selector */}\n {showInfo && (\n <div className=\"yable-pagination-info\">\n <span className=\"yable-pagination-info-text\">\n {totalRows > 0\n ? `${from}\\u2013${to} ${locale.paginationOf} ${totalRows}`\n : locale.paginationNoResults}\n </span>\n {showPageSize && (\n <div className=\"yable-pagination-select-wrapper\">\n <select\n className=\"yable-pagination-select\"\n value={pageSize}\n onChange={(e) => {\n table.setPageSize(Number(e.target.value))\n }}\n aria-label=\"Rows per page\"\n >\n {pageSizes.map((size) => (\n <option key={size} value={size}>\n {size} {locale.paginationRows}\n </option>\n ))}\n </select>\n <SelectChevronIcon />\n </div>\n )}\n </div>\n )}\n\n {/* Page navigation buttons */}\n <div className=\"yable-pagination-pages\">\n {showFirstLast && (\n <button\n type=\"button\"\n className=\"yable-pagination-btn yable-pagination-btn--nav\"\n onClick={() => table.setPageIndex(0)}\n disabled={!canPrev}\n aria-label={locale.paginationFirstPage}\n title={locale.paginationFirstPage}\n >\n <ChevronFirstIcon />\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"yable-pagination-btn yable-pagination-btn--nav\"\n onClick={() => table.previousPage()}\n disabled={!canPrev}\n aria-label={locale.paginationPreviousPage}\n title={locale.paginationPreviousPage}\n >\n <ChevronLeftIcon />\n </button>\n\n {/* Page number buttons with ellipsis */}\n {getPageNumbers(pageIndex, pageCount).map((page, i) =>\n page === -1 ? (\n <span\n key={`ellipsis-${i}`}\n className=\"yable-pagination-ellipsis\"\n aria-hidden=\"true\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle cx=\"3\" cy=\"7\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"7\" cy=\"7\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"11\" cy=\"7\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </span>\n ) : (\n <button\n type=\"button\"\n key={page}\n className={`yable-pagination-btn yable-pagination-btn--page${page === pageIndex ? ' yable-pagination-btn--active' : ''}`}\n data-active={page === pageIndex ? 'true' : undefined}\n onClick={() => table.setPageIndex(page)}\n aria-label={`${locale.paginationPage} ${page + 1}`}\n aria-current={page === pageIndex ? 'page' : undefined}\n >\n {page + 1}\n </button>\n )\n )}\n\n <button\n type=\"button\"\n className=\"yable-pagination-btn yable-pagination-btn--nav\"\n onClick={() => table.nextPage()}\n disabled={!canNext}\n aria-label={locale.paginationNextPage}\n title={locale.paginationNextPage}\n >\n <ChevronRightIcon />\n </button>\n\n {showFirstLast && (\n <button\n type=\"button\"\n className=\"yable-pagination-btn yable-pagination-btn--nav\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!canNext}\n aria-label={locale.paginationLastPage}\n title={locale.paginationLastPage}\n >\n <ChevronLastIcon />\n </button>\n )}\n </div>\n </nav>\n )\n}\n\n/** Compute which page numbers to show (with ellipsis) */\nfunction getPageNumbers(current: number, total: number): number[] {\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i)\n }\n\n const pages: number[] = []\n\n // Always show first\n pages.push(0)\n\n if (current > 3) {\n pages.push(-1) // ellipsis\n }\n\n // Window around current\n const start = Math.max(1, current - 1)\n const end = Math.min(total - 2, current + 1)\n\n for (let i = start; i <= end; i++) {\n pages.push(i)\n }\n\n if (current < total - 4) {\n pages.push(-1) // ellipsis\n }\n\n // Always show last\n pages.push(total - 1)\n\n return pages\n}\n","// @zvndev/yable-react — Global Filter Component\n// Search input with inline magnifying glass icon and clear button.\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { getDefaultLocale } from '@zvndev/yable-core'\n\ninterface GlobalFilterProps<TData extends RowData> {\n table: Table<TData>\n /** Placeholder text */\n placeholder?: string\n /** Debounce delay in ms (0 = no debounce) */\n debounce?: number\n /** Custom class name */\n className?: string\n}\n\n/** Magnifying glass search icon */\nfunction SearchIcon() {\n return (\n <svg\n className=\"yable-global-filter-icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"6.25\" cy=\"6.25\" r=\"4.25\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M9.5 9.5L12.5 12.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Small X icon for clearing the search */\nfunction ClearIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 3l6 6M9 3L3 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport function GlobalFilter<TData extends RowData>({\n table,\n placeholder,\n debounce = 300,\n className,\n}: GlobalFilterProps<TData>) {\n const locale = getDefaultLocale()\n const resolvedPlaceholder = placeholder ?? locale.searchPlaceholder\n const [value, setValue] = useState<string>(\n (table.getState().globalFilter as string) ?? ''\n )\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n setValue(newValue)\n\n if (debounce > 0) {\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => {\n table.setGlobalFilter(newValue)\n }, debounce)\n } else {\n table.setGlobalFilter(newValue)\n }\n },\n [table, debounce]\n )\n\n const handleClear = useCallback(() => {\n setValue('')\n table.setGlobalFilter('')\n clearTimeout(timerRef.current)\n inputRef.current?.focus()\n }, [table])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && value) {\n e.preventDefault()\n handleClear()\n }\n },\n [value, handleClear]\n )\n\n // Cleanup timer\n useEffect(() => {\n return () => clearTimeout(timerRef.current)\n }, [])\n\n // Sync external state changes\n useEffect(() => {\n const externalValue = (table.getState().globalFilter as string) ?? ''\n if (externalValue !== value) {\n setValue(externalValue)\n }\n }, [table.getState().globalFilter])\n\n const hasValue = value.length > 0\n\n return (\n <div className={`yable-global-filter${hasValue ? ' yable-global-filter--has-value' : ''}${className ? ` ${className}` : ''}`}>\n <SearchIcon />\n <input\n ref={inputRef}\n type=\"text\"\n className=\"yable-global-filter-input\"\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={resolvedPlaceholder}\n aria-label={locale.searchAriaLabel}\n role=\"searchbox\"\n />\n {hasValue && (\n <button\n type=\"button\"\n className=\"yable-global-filter-clear\"\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n )\n}\n","// @zvndev/yable-react — CellInput form component\n\nimport React, { useEffect, useRef } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface CellInputProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n type?: 'text' | 'number' | 'email' | 'url' | 'tel'\n placeholder?: string\n inline?: boolean\n autoFocus?: boolean\n className?: string\n}\n\nexport function CellInput<TData extends RowData, TValue>({\n context,\n type = 'text',\n placeholder,\n inline = false,\n autoFocus,\n className,\n}: CellInputProps<TData, TValue>) {\n const { table, row, column, cell } = context\n const inputRef = useRef<HTMLInputElement>(null)\n const isEditing = cell.getIsEditing()\n const isAlwaysEditable = cell.getIsAlwaysEditable()\n\n // Get pending value or fall back to current\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = type === 'number' ? Number(e.target.value) : e.target.value\n table.setPendingValue(row.id, column.id, val)\n }\n\n const handleBlur = () => {\n if (isEditing && !isAlwaysEditable) {\n table.commitEdit()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n if (isEditing && !isAlwaysEditable) {\n table.commitEdit()\n }\n } else if (e.key === 'Escape') {\n if (isEditing && !isAlwaysEditable) {\n table.cancelEdit()\n }\n }\n }\n\n // Auto-focus when entering edit mode\n useEffect(() => {\n if ((isEditing || autoFocus) && inputRef.current) {\n inputRef.current.focus()\n inputRef.current.select()\n }\n }, [isEditing, autoFocus])\n\n const classNames = [\n 'yable-input',\n inline && 'yable-input--inline',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <input\n ref={inputRef}\n type={type}\n className={classNames}\n value={String(currentValue ?? '')}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n />\n )\n}\n","// @zvndev/yable-react — CellSelect form component\n\nimport React, { useEffect, useRef } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface SelectOption {\n label: string\n value: string | number\n}\n\ninterface CellSelectProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n options: SelectOption[]\n placeholder?: string\n className?: string\n}\n\nexport function CellSelect<TData extends RowData, TValue>({\n context,\n options,\n placeholder,\n className,\n}: CellSelectProps<TData, TValue>) {\n const { table, row, column, cell } = context\n const isEditing = cell.getIsEditing()\n const isAlwaysEditable = cell.getIsAlwaysEditable()\n\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n // Track the deferred-commit timer so we can cancel it if the component\n // unmounts before the macrotask fires (otherwise commitEdit would run\n // against a torn-down editing context).\n const commitTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n return () => {\n if (commitTimerRef.current !== null) {\n clearTimeout(commitTimerRef.current)\n commitTimerRef.current = null\n }\n }\n }, [])\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n table.setPendingValue(row.id, column.id, e.target.value)\n\n // Auto-commit for selects (they don't need blur to commit)\n if (isEditing && !isAlwaysEditable) {\n // Defer commit so the state update happens first\n if (commitTimerRef.current !== null) {\n clearTimeout(commitTimerRef.current)\n }\n commitTimerRef.current = setTimeout(() => {\n commitTimerRef.current = null\n table.commitEdit()\n }, 0)\n }\n }\n\n return (\n <select\n className={`yable-select ${className ?? ''}`}\n value={String(currentValue ?? '')}\n onChange={handleChange}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )\n}\n","// @zvndev/yable-react — CellCheckbox form component\n\nimport React from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface CellCheckboxProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n className?: string\n}\n\nexport function CellCheckbox<TData extends RowData, TValue>({\n context,\n className,\n}: CellCheckboxProps<TData, TValue>) {\n const { table, row, column, cell } = context\n\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n table.setPendingValue(row.id, column.id, e.target.checked)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={`yable-checkbox ${className ?? ''}`}\n checked={Boolean(currentValue)}\n onChange={handleChange}\n />\n )\n}\n","// @zvndev/yable-react — CellToggle form component\n\nimport React from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface CellToggleProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n className?: string\n}\n\nexport function CellToggle<TData extends RowData, TValue>({\n context,\n className,\n}: CellToggleProps<TData, TValue>) {\n const { table, row, column, cell } = context\n\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n table.setPendingValue(row.id, column.id, e.target.checked)\n }\n\n return (\n <input\n type=\"checkbox\"\n role=\"switch\"\n className={`yable-toggle ${className ?? ''}`}\n checked={Boolean(currentValue)}\n onChange={handleChange}\n aria-checked={Boolean(currentValue)}\n />\n )\n}\n","// @zvndev/yable-react — CellDatePicker form component\n\nimport React, { useEffect, useRef } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface CellDatePickerProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n type?: 'date' | 'datetime-local' | 'time'\n className?: string\n}\n\nexport function CellDatePicker<TData extends RowData, TValue>({\n context,\n type = 'date',\n className,\n}: CellDatePickerProps<TData, TValue>) {\n const { table, row, column, cell } = context\n const inputRef = useRef<HTMLInputElement>(null)\n const isEditing = cell.getIsEditing()\n const isAlwaysEditable = cell.getIsAlwaysEditable()\n\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n // Format value for date input\n const formattedValue = formatDateValue(currentValue, type)\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n table.setPendingValue(row.id, column.id, e.target.value)\n }\n\n const handleBlur = () => {\n if (isEditing && !isAlwaysEditable) {\n table.commitEdit()\n }\n }\n\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus()\n }\n }, [isEditing])\n\n return (\n <input\n ref={inputRef}\n type={type}\n className={`yable-input ${className ?? ''}`}\n value={formattedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n )\n}\n\nfunction formatDateValue(value: unknown, type: string): string {\n if (!value) return ''\n if (typeof value === 'string') return value\n\n if (value instanceof Date) {\n if (type === 'date') {\n return value.toISOString().split('T')[0]!\n }\n if (type === 'datetime-local') {\n return value.toISOString().slice(0, 16)\n }\n if (type === 'time') {\n return value.toISOString().slice(11, 16)\n }\n }\n\n return String(value)\n}\n","// @zvndev/yable-react — useClipboard hook\n// Attaches copy/cut/paste keyboard listeners to the table container.\n\nimport { useEffect, useCallback } from 'react'\nimport type { RowData, Table, ClipboardOptions } from '@zvndev/yable-core'\n\nexport interface UseClipboardOptions extends ClipboardOptions {\n /** Whether clipboard is enabled. Default: true */\n enabled?: boolean\n /** The container element ref to attach listeners to */\n containerRef?: React.RefObject<HTMLElement | null>\n /** Callback when data is copied */\n onCopy?: (text: string) => void\n /** Callback when data is cut */\n onCut?: (text: string) => void\n /** Callback when data is pasted */\n onPaste?: (text: string) => void\n}\n\n/**\n * React hook that attaches Ctrl+C / Ctrl+X / Ctrl+V keyboard listeners\n * to the table container for clipboard operations.\n */\nexport function useClipboard<TData extends RowData>(\n table: Table<TData>,\n options: UseClipboardOptions = {},\n): void {\n const { enabled = true, containerRef, onCopy, onCut, onPaste, ...clipboardOptions } = options\n\n const handleCopy = useCallback(\n (e: ClipboardEvent) => {\n // Don't intercept if user is in a form field\n if (isEditableTarget(e.target as HTMLElement)) return\n\n e.preventDefault()\n const text = table.copyToClipboard(clipboardOptions)\n\n if (e.clipboardData) {\n e.clipboardData.setData('text/plain', text)\n }\n\n onCopy?.(text)\n },\n [table, clipboardOptions, onCopy],\n )\n\n const handleCut = useCallback(\n (e: ClipboardEvent) => {\n if (isEditableTarget(e.target as HTMLElement)) return\n\n e.preventDefault()\n const text = table.cutCells(clipboardOptions)\n\n if (e.clipboardData) {\n e.clipboardData.setData('text/plain', text)\n }\n\n onCut?.(text)\n },\n [table, clipboardOptions, onCut],\n )\n\n const handlePaste = useCallback(\n (e: ClipboardEvent) => {\n if (isEditableTarget(e.target as HTMLElement)) return\n\n e.preventDefault()\n const text = e.clipboardData?.getData('text/plain') ?? ''\n\n if (!text) return\n\n // Determine target cell for paste (use active editing cell or first selected row + first column)\n const state = table.getState()\n let targetRowId: string | undefined\n let targetColumnId: string | undefined\n\n if (state.editing?.activeCell) {\n targetRowId = state.editing.activeCell.rowId\n targetColumnId = state.editing.activeCell.columnId\n } else {\n const selectedRange = table.getCellSelectionRange()\n const rows = table.getRowModel().rows\n const columns = table.getVisibleLeafColumns()\n\n if (selectedRange) {\n const startRowIndex = Math.min(selectedRange.start.rowIndex, selectedRange.end.rowIndex)\n const startColumnIndex = Math.min(\n selectedRange.start.columnIndex,\n selectedRange.end.columnIndex,\n )\n\n targetRowId = rows[startRowIndex]?.id\n targetColumnId = columns[startColumnIndex]?.id\n } else {\n // Use first selected row\n const selectedRowIds = Object.keys(state.rowSelection || {}).filter(\n (id) => state.rowSelection[id],\n )\n if (selectedRowIds.length > 0) {\n targetRowId = selectedRowIds[0]\n } else if (rows.length > 0) {\n // Use first visible row\n targetRowId = rows[0]!.id\n }\n\n if (columns.length > 0) {\n // Use first visible column\n targetColumnId = columns[0]!.id\n }\n }\n }\n\n if (targetRowId && targetColumnId) {\n table.pasteFromClipboard(text, targetRowId, targetColumnId, clipboardOptions)\n onPaste?.(text)\n }\n },\n [table, clipboardOptions, onPaste],\n )\n\n useEffect(() => {\n if (!enabled) return\n\n const container = containerRef?.current ?? document\n\n container.addEventListener('copy', handleCopy as EventListener)\n container.addEventListener('cut', handleCut as EventListener)\n container.addEventListener('paste', handlePaste as EventListener)\n\n return () => {\n container.removeEventListener('copy', handleCopy as EventListener)\n container.removeEventListener('cut', handleCut as EventListener)\n container.removeEventListener('paste', handlePaste as EventListener)\n }\n }, [enabled, containerRef, handleCopy, handleCut, handlePaste])\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Returns true if the event target is an editable form element (input, textarea,\n * contenteditable), meaning we should NOT intercept clipboard events.\n */\nfunction isEditableTarget(el: HTMLElement | null): boolean {\n if (!el) return false\n const tagName = el.tagName?.toLowerCase()\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\n return true\n }\n if (el.isContentEditable) return true\n return false\n}\n","// @zvndev/yable-react — useFillHandle hook\n// Tracks drag state for the fill handle corner square.\n\nimport { useState, useCallback, useEffect, useRef } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\nexport interface FillHandleDragState {\n isDragging: boolean\n sourceCell: { rowIndex: number; columnIndex: number } | null\n currentCell: { rowIndex: number; columnIndex: number } | null\n}\n\nexport interface UseFillHandleOptions {\n /** Whether fill handle is enabled. Default: true */\n enabled?: boolean\n}\n\nexport interface UseFillHandleReturn {\n dragState: FillHandleDragState\n onFillHandleMouseDown: (\n rowIndex: number,\n columnIndex: number,\n e: React.MouseEvent\n ) => void\n}\n\n/**\n * React hook for fill handle drag tracking.\n * Returns drag state and a mousedown handler to attach to the FillHandle component.\n */\nexport function useFillHandle<TData extends RowData>(\n table: Table<TData>,\n options: UseFillHandleOptions = {}\n): UseFillHandleReturn {\n const { enabled = true } = options\n\n const [dragState, setDragState] = useState<FillHandleDragState>({\n isDragging: false,\n sourceCell: null,\n currentCell: null,\n })\n\n const dragRef = useRef(dragState)\n dragRef.current = dragState\n\n const onFillHandleMouseDown = useCallback(\n (rowIndex: number, columnIndex: number, e: React.MouseEvent) => {\n if (!enabled) return\n\n e.preventDefault()\n e.stopPropagation()\n\n setDragState({\n isDragging: true,\n sourceCell: { rowIndex, columnIndex },\n currentCell: { rowIndex, columnIndex },\n })\n },\n [enabled]\n )\n\n useEffect(() => {\n if (!dragState.isDragging) return\n\n const handleMouseMove = (e: MouseEvent) => {\n // Find the table cell under the cursor\n const target = document.elementFromPoint(e.clientX, e.clientY)\n if (!target) return\n\n const td = target.closest('td[data-column-id]') as HTMLElement | null\n const tr = target.closest('tr[data-row-id]') as HTMLElement | null\n\n if (!td || !tr) return\n\n const columnId = td.getAttribute('data-column-id')\n const rowId = tr.getAttribute('data-row-id')\n\n if (!columnId || !rowId) return\n\n // Find row and column indices\n const rows = table.getRowModel().rows\n const columns = table.getVisibleLeafColumns()\n\n const rowIndex = rows.findIndex((r) => r.id === rowId)\n const columnIndex = columns.findIndex((c) => c.id === columnId)\n\n if (rowIndex === -1 || columnIndex === -1) return\n\n setDragState((prev) => ({\n ...prev,\n currentCell: { rowIndex, columnIndex },\n }))\n }\n\n const handleMouseUp = () => {\n const current = dragRef.current\n\n if (current.sourceCell && current.currentCell) {\n const source = current.sourceCell\n const target = current.currentCell\n\n // Only fill if we actually dragged to a different cell\n if (source.rowIndex !== target.rowIndex || source.columnIndex !== target.columnIndex) {\n const sourceRange = {\n startRow: source.rowIndex,\n startCol: source.columnIndex,\n endRow: source.rowIndex,\n endCol: source.columnIndex,\n }\n\n const targetRange = {\n startRow: Math.min(source.rowIndex, target.rowIndex),\n startCol: Math.min(source.columnIndex, target.columnIndex),\n endRow: Math.max(source.rowIndex, target.rowIndex),\n endCol: Math.max(source.columnIndex, target.columnIndex),\n }\n\n table.fillRange(sourceRange, targetRange)\n }\n }\n\n setDragState({\n isDragging: false,\n sourceCell: null,\n currentCell: null,\n })\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n }\n }, [dragState.isDragging, table])\n\n return { dragState, onFillHandleMouseDown }\n}\n","// @zvndev/yable-react — FillHandle Component\n// Small blue square at the bottom-right corner of the focused cell.\n// Cursor changes to crosshair and the handle scales up on hover.\n\nimport React, { useCallback } from 'react'\n\nexport interface FillHandleProps {\n /** Row index of the cell this handle belongs to */\n rowIndex: number\n /** Column index of the cell this handle belongs to */\n columnIndex: number\n /** Callback when the user starts dragging the fill handle */\n onMouseDown: (rowIndex: number, columnIndex: number, e: React.MouseEvent) => void\n}\n\n/**\n * Renders a small accent-colored square at the bottom-right corner of a cell.\n * The user drags this to auto-fill adjacent cells (like Excel/Google Sheets).\n */\nexport function FillHandle({\n rowIndex,\n columnIndex,\n onMouseDown,\n}: FillHandleProps) {\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n onMouseDown(rowIndex, columnIndex, e)\n },\n [rowIndex, columnIndex, onMouseDown]\n )\n\n return (\n <div\n className=\"yable-fill-handle\"\n onMouseDown={handleMouseDown}\n role=\"presentation\"\n aria-hidden=\"true\"\n title=\"Drag to fill\"\n >\n <div className=\"yable-fill-handle-dot\" />\n </div>\n )\n}\n","// @zvndev/yable-react — Drag Handle Component\n// Renders a 2x3 grip dot icon that initiates HTML5 drag operations.\n// Appears subtle by default and becomes more prominent on hover.\n\nimport React, { useCallback } from 'react'\n\ninterface DragHandleProps {\n /** Called when drag starts on this handle */\n onDragStart: (e: React.DragEvent) => void\n /** Whether this handle is currently part of a dragging row */\n isDragging?: boolean\n /** Accessible label */\n ariaLabel?: string\n /** Additional className */\n className?: string\n}\n\n/** 2x3 grip dot pattern — the universal drag affordance */\nfunction GripIcon() {\n return (\n <svg\n width=\"10\"\n height=\"16\"\n viewBox=\"0 0 10 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n {/* Column 1 */}\n <circle cx=\"2.5\" cy=\"3\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"2.5\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"2.5\" cy=\"13\" r=\"1.3\" fill=\"currentColor\" />\n {/* Column 2 */}\n <circle cx=\"7.5\" cy=\"3\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"7.5\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"7.5\" cy=\"13\" r=\"1.3\" fill=\"currentColor\" />\n </svg>\n )\n}\n\nexport function DragHandle({\n onDragStart,\n isDragging,\n ariaLabel = 'Drag to reorder row',\n className,\n}: DragHandleProps) {\n const classes = [\n 'yable-row-drag-handle',\n isDragging && 'yable-row-drag-handle--dragging',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleDragStart = useCallback(\n (e: React.DragEvent) => {\n // Set a drag image offset so the row follows the cursor naturally\n if (e.dataTransfer && e.currentTarget instanceof HTMLElement) {\n e.dataTransfer.effectAllowed = 'move'\n }\n onDragStart(e)\n },\n [onDragStart]\n )\n\n return (\n <button\n type=\"button\"\n className={classes}\n draggable\n onDragStart={handleDragStart}\n aria-label={ariaLabel}\n aria-roledescription=\"Drag handle\"\n tabIndex={-1}\n >\n <GripIcon />\n </button>\n )\n}\n","// @zvndev/yable-react — useRowDrag hook\n// React hook wrapping the HTML5 Drag & Drop API for row reordering.\n\nimport { useState, useCallback, useRef } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport {\n type RowDragState,\n getInitialRowDragState,\n moveRow,\n} from '@zvndev/yable-core/features/rowDragging'\n\n// Re-export the type for convenience\nexport type { RowDragState }\n\nexport interface UseRowDragOptions<TData extends RowData> {\n table: Table<TData>\n /** Current data array */\n data: TData[]\n /** Callback to set data after reorder */\n onDataChange: (data: TData[]) => void\n /** Optional callback when reorder completes */\n onReorder?: (event: { fromIndex: number; toIndex: number; rowId: string }) => void\n}\n\nexport interface UseRowDragReturn {\n /** Current drag state */\n dragState: RowDragState\n /** Props to spread on a draggable row */\n getRowDragProps: (rowId: string, rowIndex: number) => {\n draggable: boolean\n onDragStart: (e: React.DragEvent) => void\n onDragOver: (e: React.DragEvent) => void\n onDragLeave: (e: React.DragEvent) => void\n onDrop: (e: React.DragEvent) => void\n onDragEnd: (e: React.DragEvent) => void\n 'data-dragging': boolean | undefined\n 'data-drag-over': string | undefined\n }\n /** Props to spread on a drag handle element */\n getDragHandleProps: (rowId: string) => {\n onDragStart: (e: React.DragEvent) => void\n }\n}\n\nexport function useRowDrag<TData extends RowData>({\n table,\n data,\n onDataChange,\n onReorder,\n}: UseRowDragOptions<TData>): UseRowDragReturn {\n const [dragState, setDragState] = useState<RowDragState>(getInitialRowDragState)\n const dragRowIdRef = useRef<string | null>(null)\n const dragRowIndexRef = useRef<number>(-1)\n\n const getRowDragProps = useCallback(\n (rowId: string, rowIndex: number) => {\n return {\n draggable: true as boolean,\n\n onDragStart: (e: React.DragEvent) => {\n dragRowIdRef.current = rowId\n dragRowIndexRef.current = rowIndex\n\n e.dataTransfer.effectAllowed = 'move'\n e.dataTransfer.setData('text/plain', rowId)\n\n // Slight delay so the browser renders the drag image\n requestAnimationFrame(() => {\n setDragState({\n draggingRowId: rowId,\n overRowId: null,\n dropPosition: null,\n })\n })\n\n table.events.emit('row:drag:start' as any, {\n rowId,\n rowIndex,\n row: table.getRow(rowId, true),\n })\n },\n\n onDragOver: (e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n\n if (!dragRowIdRef.current || dragRowIdRef.current === rowId) return\n\n // Determine drop position based on mouse Y relative to row midpoint\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const midY = rect.top + rect.height / 2\n const position: 'before' | 'after' =\n e.clientY < midY ? 'before' : 'after'\n\n setDragState((prev) => ({\n ...prev,\n overRowId: rowId,\n dropPosition: position,\n }))\n },\n\n onDragLeave: (_e: React.DragEvent) => {\n setDragState((prev) => {\n if (prev.overRowId === rowId) {\n return { ...prev, overRowId: null, dropPosition: null }\n }\n return prev\n })\n },\n\n onDrop: (e: React.DragEvent) => {\n e.preventDefault()\n\n const fromId = dragRowIdRef.current\n if (!fromId || fromId === rowId) {\n setDragState(getInitialRowDragState())\n return\n }\n\n const fromIndex = dragRowIndexRef.current\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const midY = rect.top + rect.height / 2\n const dropAfter = e.clientY >= midY\n\n let toIndex = rowIndex\n if (dropAfter && fromIndex > rowIndex) {\n toIndex = rowIndex + 1\n } else if (!dropAfter && fromIndex < rowIndex) {\n toIndex = rowIndex - 1\n }\n\n // Clamp\n toIndex = Math.max(0, Math.min(toIndex, data.length - 1))\n\n const newData = moveRow(data, fromIndex, toIndex)\n onDataChange(newData)\n\n onReorder?.({ fromIndex, toIndex, rowId: fromId })\n table.events.emit('row:reorder' as any, {\n fromIndex,\n toIndex,\n rowId: fromId,\n })\n\n table.events.emit('row:drag:end' as any, {\n rowId: fromId,\n row: table.getRow(fromId, true),\n cancelled: false,\n })\n\n setDragState(getInitialRowDragState())\n dragRowIdRef.current = null\n dragRowIndexRef.current = -1\n },\n\n onDragEnd: (_e: React.DragEvent) => {\n if (dragRowIdRef.current) {\n try {\n table.events.emit('row:drag:end' as any, {\n rowId: dragRowIdRef.current,\n row: table.getRow(dragRowIdRef.current, true),\n cancelled: true,\n })\n } catch {\n // Row may no longer exist\n }\n }\n\n setDragState(getInitialRowDragState())\n dragRowIdRef.current = null\n dragRowIndexRef.current = -1\n },\n\n 'data-dragging':\n dragState.draggingRowId === rowId ? true : undefined,\n 'data-drag-over':\n dragState.overRowId === rowId\n ? (dragState.dropPosition ?? undefined)\n : undefined,\n }\n },\n [data, dragState, onDataChange, onReorder, table]\n )\n\n const getDragHandleProps = useCallback(\n (rowId: string) => ({\n onDragStart: (e: React.DragEvent) => {\n // The parent row's onDragStart will fire via bubbling,\n // but we set the data here for the drag handle specifically\n e.dataTransfer.effectAllowed = 'move'\n e.dataTransfer.setData('text/plain', rowId)\n },\n }),\n []\n )\n\n return {\n dragState,\n getRowDragProps,\n getDragHandleProps,\n }\n}\n","// @zvndev/yable-react — Tree Toggle Component\n// Renders indent + animated expand/collapse chevron for tree data rows.\n// The chevron smoothly rotates 90 degrees on expand/collapse via CSS transition.\n\nimport React, { useCallback } from 'react'\nimport type { RowData, Row } from '@zvndev/yable-core'\n\ninterface TreeToggleProps<TData extends RowData> {\n row: Row<TData>\n /** Indentation width per level in pixels */\n indentWidth?: number\n /** Whether to show the toggle icon (false for leaf nodes) */\n showToggle?: boolean\n /** Optional custom toggle icon */\n renderIcon?: (props: { isExpanded: boolean; isLeaf: boolean }) => React.ReactNode\n}\n\nexport function TreeToggle<TData extends RowData>({\n row,\n indentWidth = 20,\n showToggle,\n renderIcon,\n}: TreeToggleProps<TData>) {\n const depth = (row as any)._treeDepth ?? row.depth\n const isLeaf = (row as any)._isLeaf ?? row.subRows.length === 0\n const hasChildren = (row as any)._hasChildren ?? row.subRows.length > 0\n const isExpanded = row.getIsExpanded()\n const canToggle = showToggle !== undefined ? showToggle : hasChildren\n\n const indent = depth * indentWidth\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n if (canToggle) {\n row.toggleExpanded()\n }\n },\n [canToggle, row]\n )\n\n return (\n <span\n className=\"yable-tree-toggle\"\n style={{ paddingLeft: `${indent}px` }}\n data-depth={depth}\n data-leaf={isLeaf || undefined}\n >\n {canToggle ? (\n <button\n type=\"button\"\n className={`yable-tree-toggle-btn${isExpanded ? ' yable-tree-toggle-btn--expanded' : ''}`}\n onClick={handleClick}\n data-expanded={isExpanded || undefined}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n tabIndex={-1}\n >\n {renderIcon ? (\n renderIcon({ isExpanded, isLeaf })\n ) : (\n <svg\n className=\"yable-tree-chevron\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n style={{\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform var(--yable-transition, 150ms ease)',\n }}\n >\n <path\n d=\"M5 3L9 7L5 11\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n ) : (\n <span className=\"yable-tree-toggle-spacer\" aria-hidden=\"true\" />\n )}\n </span>\n )\n}\n","// @zvndev/yable-react — Master Detail Component\n// Detail panel container for expanded rows with slide-down animation\n// and proper accessibility semantics.\n\nimport React from 'react'\nimport type { RowData, Row, Table } from '@zvndev/yable-core'\n\ninterface MasterDetailProps<TData extends RowData> {\n row: Row<TData>\n table: Table<TData>\n /** Number of columns to span (full table width) */\n colSpan: number\n /** Custom render function for the detail panel */\n renderDetailPanel?: (row: Row<TData>) => React.ReactNode\n /** Optional animation class */\n animationClass?: string\n}\n\nexport function MasterDetail<TData extends RowData>({\n row,\n table,\n colSpan,\n renderDetailPanel,\n animationClass,\n}: MasterDetailProps<TData>) {\n // Determine what to render in the detail panel\n const renderer =\n renderDetailPanel ?? (table.options as any).renderDetailPanel\n\n if (!renderer) return null\n\n const content = renderer(row)\n if (content == null) return null\n\n const classes = [\n 'yable-detail-row',\n 'yable-detail-row--animated',\n animationClass,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <tr\n className={classes}\n data-detail-for={row.id}\n role=\"row\"\n aria-label={`Details for row ${row.id}`}\n >\n <td className=\"yable-detail-cell\" colSpan={colSpan} role=\"cell\">\n <div className=\"yable-detail-panel\">\n <div className=\"yable-detail-panel-inner\">\n {content}\n </div>\n </div>\n </td>\n </tr>\n )\n}\n","// @zvndev/yable-react — Expand Icon Component\n// Animated expand/collapse chevron for master/detail rows.\n// Uses CSS transform: rotate() with a smooth transition for the expand animation.\n\nimport React, { useCallback } from 'react'\n\ninterface ExpandIconProps {\n /** Whether the row is expanded */\n isExpanded: boolean\n /** Click handler to toggle expansion */\n onClick: (e: React.MouseEvent) => void\n /** Accessible label */\n ariaLabel?: string\n /** Size of the icon in pixels */\n size?: number\n /** Additional className */\n className?: string\n}\n\nexport function ExpandIcon({\n isExpanded,\n onClick,\n ariaLabel,\n size = 18,\n className,\n}: ExpandIconProps) {\n const classes = [\n 'yable-detail-expand-icon',\n isExpanded && 'yable-detail-expand-icon--expanded',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const label = ariaLabel ?? (isExpanded ? 'Collapse details' : 'Expand details')\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n onClick(e)\n },\n [onClick]\n )\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={handleClick}\n aria-expanded={isExpanded}\n aria-label={label}\n tabIndex={-1}\n >\n <svg\n className=\"yable-detail-expand-chevron\"\n width={size}\n height={size}\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n style={{\n transform: isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)',\n transition: 'transform var(--yable-transition, 150ms ease)',\n }}\n >\n <path\n d=\"M6 7L9 10L12 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )\n}\n","// @zvndev/yable-react — Pivot Config Component\n// UI for configuring pivot table fields: dragging fields between\n// rows, columns, and values zones.\n\nimport { useState, useCallback } from 'react'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PivotFieldItem {\n field: string\n label: string\n}\n\nexport interface PivotValueItem {\n field: string\n label: string\n aggregation: string\n}\n\nexport interface PivotConfigProps {\n /** Available fields that can be dragged into zones */\n availableFields: PivotFieldItem[]\n /** Currently configured row fields */\n rowFields: PivotFieldItem[]\n /** Currently configured column fields */\n columnFields: PivotFieldItem[]\n /** Currently configured value fields */\n valueFields: PivotValueItem[]\n /** Callback when row fields change */\n onRowFieldsChange: (fields: PivotFieldItem[]) => void\n /** Callback when column fields change */\n onColumnFieldsChange: (fields: PivotFieldItem[]) => void\n /** Callback when value fields change */\n onValueFieldsChange: (fields: PivotValueItem[]) => void\n /** Available aggregation functions */\n aggregationOptions?: { value: string; label: string }[]\n /** Additional className */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Default aggregation options\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_AGGREGATION_OPTIONS = [\n { value: 'sum', label: 'Sum' },\n { value: 'count', label: 'Count' },\n { value: 'mean', label: 'Average' },\n { value: 'min', label: 'Min' },\n { value: 'max', label: 'Max' },\n { value: 'median', label: 'Median' },\n { value: 'uniqueCount', label: 'Distinct Count' },\n]\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function PivotConfigPanel({\n availableFields,\n rowFields,\n columnFields,\n valueFields,\n onRowFieldsChange,\n onColumnFieldsChange,\n onValueFieldsChange,\n aggregationOptions = DEFAULT_AGGREGATION_OPTIONS,\n className,\n}: PivotConfigProps) {\n const [dragSource, setDragSource] = useState<{\n field: string\n zone: 'available' | 'rows' | 'columns' | 'values'\n } | null>(null)\n\n // Compute which fields are already placed\n const usedFields = new Set([\n ...rowFields.map((f) => f.field),\n ...columnFields.map((f) => f.field),\n ...valueFields.map((f) => f.field),\n ])\n\n const unplacedFields = availableFields.filter((f) => !usedFields.has(f.field))\n\n // -----------------------------------------------------------------------\n // Drag handlers\n // -----------------------------------------------------------------------\n\n const handleDragStart = useCallback(\n (field: string, zone: 'available' | 'rows' | 'columns' | 'values') => {\n setDragSource({ field, zone })\n },\n []\n )\n\n const handleDrop = useCallback(\n (targetZone: 'available' | 'rows' | 'columns' | 'values') => {\n if (!dragSource) return\n\n const { field, zone: sourceZone } = dragSource\n if (sourceZone === targetZone) {\n setDragSource(null)\n return\n }\n\n // Find the field item\n const fieldItem = availableFields.find((f) => f.field === field)\n if (!fieldItem) {\n setDragSource(null)\n return\n }\n\n // Remove from source zone\n if (sourceZone === 'rows') {\n onRowFieldsChange(rowFields.filter((f) => f.field !== field))\n } else if (sourceZone === 'columns') {\n onColumnFieldsChange(columnFields.filter((f) => f.field !== field))\n } else if (sourceZone === 'values') {\n onValueFieldsChange(valueFields.filter((f) => f.field !== field))\n }\n\n // Add to target zone\n if (targetZone === 'rows') {\n onRowFieldsChange([...rowFields, { field: fieldItem.field, label: fieldItem.label }])\n } else if (targetZone === 'columns') {\n onColumnFieldsChange([...columnFields, { field: fieldItem.field, label: fieldItem.label }])\n } else if (targetZone === 'values') {\n onValueFieldsChange([\n ...valueFields,\n { field: fieldItem.field, label: fieldItem.label, aggregation: 'sum' },\n ])\n }\n // targetZone === 'available' just removes it (already done above)\n\n setDragSource(null)\n },\n [\n dragSource,\n availableFields,\n rowFields,\n columnFields,\n valueFields,\n onRowFieldsChange,\n onColumnFieldsChange,\n onValueFieldsChange,\n ]\n )\n\n const handleAggregationChange = useCallback(\n (field: string, aggregation: string) => {\n onValueFieldsChange(\n valueFields.map((vf) =>\n vf.field === field ? { ...vf, aggregation } : vf\n )\n )\n },\n [valueFields, onValueFieldsChange]\n )\n\n const handleRemoveField = useCallback(\n (field: string, zone: 'rows' | 'columns' | 'values') => {\n if (zone === 'rows') {\n onRowFieldsChange(rowFields.filter((f) => f.field !== field))\n } else if (zone === 'columns') {\n onColumnFieldsChange(columnFields.filter((f) => f.field !== field))\n } else if (zone === 'values') {\n onValueFieldsChange(valueFields.filter((f) => f.field !== field))\n }\n },\n [rowFields, columnFields, valueFields, onRowFieldsChange, onColumnFieldsChange, onValueFieldsChange]\n )\n\n // -----------------------------------------------------------------------\n // Render\n // -----------------------------------------------------------------------\n\n const classes = ['yable-pivot-config', className].filter(Boolean).join(' ')\n\n return (\n <div className={classes}>\n {/* Available Fields */}\n <div\n className=\"yable-pivot-zone yable-pivot-zone--available\"\n onDragOver={(e) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }}\n onDrop={(e) => {\n e.preventDefault()\n handleDrop('available')\n }}\n >\n <div className=\"yable-pivot-zone-label\">Fields</div>\n <div className=\"yable-pivot-zone-items\">\n {unplacedFields.map((f) => (\n <div\n key={f.field}\n className=\"yable-pivot-field\"\n draggable\n onDragStart={() => handleDragStart(f.field, 'available')}\n >\n {f.label}\n </div>\n ))}\n {unplacedFields.length === 0 && (\n <div className=\"yable-pivot-zone-empty\">All fields placed</div>\n )}\n </div>\n </div>\n\n {/* Row Fields Zone */}\n <DropZone\n label=\"Row Groups\"\n zone=\"rows\"\n items={rowFields}\n onDragStart={handleDragStart}\n onDrop={handleDrop}\n onRemove={(field) => handleRemoveField(field, 'rows')}\n />\n\n {/* Column Fields Zone */}\n <DropZone\n label=\"Column Groups\"\n zone=\"columns\"\n items={columnFields}\n onDragStart={handleDragStart}\n onDrop={handleDrop}\n onRemove={(field) => handleRemoveField(field, 'columns')}\n />\n\n {/* Value Fields Zone */}\n <div\n className=\"yable-pivot-zone yable-pivot-zone--values\"\n onDragOver={(e) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }}\n onDrop={(e) => {\n e.preventDefault()\n handleDrop('values')\n }}\n >\n <div className=\"yable-pivot-zone-label\">Values</div>\n <div className=\"yable-pivot-zone-items\">\n {valueFields.map((vf) => (\n <div\n key={vf.field}\n className=\"yable-pivot-field yable-pivot-field--value\"\n draggable\n onDragStart={() => handleDragStart(vf.field, 'values')}\n >\n <span className=\"yable-pivot-field-label\">{vf.label}</span>\n <select\n className=\"yable-pivot-agg-select\"\n value={vf.aggregation}\n onChange={(e) =>\n handleAggregationChange(vf.field, e.target.value)\n }\n onClick={(e) => e.stopPropagation()}\n >\n {aggregationOptions.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n <button\n type=\"button\"\n className=\"yable-pivot-field-remove\"\n onClick={() => handleRemoveField(vf.field, 'values')}\n aria-label={`Remove ${vf.label}`}\n >\n x\n </button>\n </div>\n ))}\n {valueFields.length === 0 && (\n <div className=\"yable-pivot-zone-empty\">\n Drop value fields here\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropZone sub-component\n// ---------------------------------------------------------------------------\n\nfunction DropZone({\n label,\n zone,\n items,\n onDragStart,\n onDrop,\n onRemove,\n}: {\n label: string\n zone: 'rows' | 'columns'\n items: PivotFieldItem[]\n onDragStart: (field: string, zone: 'rows' | 'columns') => void\n onDrop: (zone: 'rows' | 'columns') => void\n onRemove: (field: string) => void\n}) {\n return (\n <div\n className={`yable-pivot-zone yable-pivot-zone--${zone}`}\n onDragOver={(e) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }}\n onDrop={(e) => {\n e.preventDefault()\n onDrop(zone)\n }}\n >\n <div className=\"yable-pivot-zone-label\">{label}</div>\n <div className=\"yable-pivot-zone-items\">\n {items.map((f) => (\n <div\n key={f.field}\n className=\"yable-pivot-field\"\n draggable\n onDragStart={() => onDragStart(f.field, zone)}\n >\n <span className=\"yable-pivot-field-label\">{f.label}</span>\n <button\n type=\"button\"\n className=\"yable-pivot-field-remove\"\n onClick={() => onRemove(f.field)}\n aria-label={`Remove ${f.label}`}\n >\n x\n </button>\n </div>\n ))}\n {items.length === 0 && (\n <div className=\"yable-pivot-zone-empty\">\n Drop fields here\n </div>\n )}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Tooltip Component\n// Renders a positioned tooltip with arrow/caret, entrance animation, and auto-flip support.\n\nimport React, { useEffect, useRef } from 'react'\nimport type { TooltipPosition } from '../hooks/useTooltip'\n\nexport interface TooltipProps {\n /** Whether the tooltip is visible */\n visible: boolean\n /** Position and placement */\n position: TooltipPosition\n /** Tooltip content text */\n content: string\n /** Custom tooltip component */\n customComponent?: React.ReactNode\n}\n\n/** Arrow/caret SVG for the tooltip — rendered differently per placement */\nfunction TooltipArrow({ placement }: { placement: string }) {\n return (\n <div className={`yable-tooltip-arrow yable-tooltip-arrow--${placement}`} aria-hidden=\"true\">\n <svg\n className=\"yable-tooltip-arrow-svg\"\n width=\"10\"\n height=\"5\"\n viewBox=\"0 0 10 5\"\n fill=\"none\"\n >\n <path d=\"M0 0L5 5L10 0\" fill=\"currentColor\" />\n </svg>\n </div>\n )\n}\n\nexport function Tooltip({\n visible,\n position,\n content,\n customComponent,\n}: TooltipProps) {\n const tooltipRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!visible || !tooltipRef.current) return\n\n const el = tooltipRef.current\n const rect = el.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n // Clamp horizontal position to prevent overflow\n if (rect.left < 4) {\n el.style.marginLeft = `${4 - rect.left}px`\n } else if (rect.right > viewportWidth - 4) {\n el.style.marginLeft = `${viewportWidth - 4 - rect.right}px`\n }\n\n // Clamp vertical position to prevent overflow\n if (rect.top < 4) {\n el.style.marginTop = `${4 - rect.top}px`\n } else if (rect.bottom > viewportHeight - 4) {\n el.style.marginTop = `${viewportHeight - 4 - rect.bottom}px`\n }\n }, [visible, position])\n\n if (!visible || !content) return null\n\n const style: React.CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n pointerEvents: 'none',\n }\n\n // Offset the tooltip away from the target with a small gap\n const gap = 6\n\n switch (position.placement) {\n case 'top':\n style.left = position.x\n style.top = position.y - gap\n style.transform = 'translate(-50%, -100%)'\n break\n case 'bottom':\n style.left = position.x\n style.top = position.y + gap\n style.transform = 'translate(-50%, 0)'\n break\n case 'left':\n style.left = position.x - gap\n style.top = position.y\n style.transform = 'translate(-100%, -50%)'\n break\n case 'right':\n style.left = position.x + gap\n style.top = position.y\n style.transform = 'translate(0, -50%)'\n break\n }\n\n return (\n <div\n ref={tooltipRef}\n className={`yable-tooltip yable-tooltip--${position.placement}`}\n style={style}\n role=\"tooltip\"\n >\n {/* Arrow on the side closest to the target element */}\n {position.placement === 'bottom' && <TooltipArrow placement={position.placement} />}\n {position.placement === 'right' && <TooltipArrow placement={position.placement} />}\n\n {customComponent ?? (\n <div className=\"yable-tooltip-content\">{content}</div>\n )}\n\n {position.placement === 'top' && <TooltipArrow placement={position.placement} />}\n {position.placement === 'left' && <TooltipArrow placement={position.placement} />}\n </div>\n )\n}\n","// @zvndev/yable-react — useTooltip hook\n// Manages tooltip positioning, visibility, delay, and auto-flip.\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\nexport interface TooltipPosition {\n x: number\n y: number\n placement: 'top' | 'bottom' | 'left' | 'right'\n}\n\nexport interface UseTooltipOptions {\n /** Delay before showing tooltip in ms */\n delay?: number\n /** Preferred placement */\n placement?: 'top' | 'bottom' | 'left' | 'right'\n /** Whether tooltip is enabled */\n enabled?: boolean\n}\n\nexport function useTooltip(options: UseTooltipOptions = {}) {\n const { delay = 500, placement = 'top', enabled = true } = options\n const [visible, setVisible] = useState(false)\n const [position, setPosition] = useState<TooltipPosition>({\n x: 0,\n y: 0,\n placement,\n })\n const [content, setContent] = useState<string>('')\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const targetRef = useRef<HTMLElement | null>(null)\n\n const show = useCallback(\n (target: HTMLElement, tooltipContent: string) => {\n if (!enabled || !tooltipContent) return\n targetRef.current = target\n setContent(tooltipContent)\n\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => {\n const rect = target.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n // Calculate position with auto-flip\n let finalPlacement = placement\n let x = rect.left + rect.width / 2\n let y: number\n\n // Check vertical space\n if (placement === 'top' && rect.top < 60) {\n finalPlacement = 'bottom'\n } else if (placement === 'bottom' && viewportHeight - rect.bottom < 60) {\n finalPlacement = 'top'\n }\n\n // Check horizontal space\n if (placement === 'left' && rect.left < 120) {\n finalPlacement = 'right'\n } else if (placement === 'right' && viewportWidth - rect.right < 120) {\n finalPlacement = 'left'\n }\n\n switch (finalPlacement) {\n case 'top':\n y = rect.top - 8\n break\n case 'bottom':\n y = rect.bottom + 8\n break\n case 'left':\n x = rect.left - 8\n y = rect.top + rect.height / 2\n break\n case 'right':\n x = rect.right + 8\n y = rect.top + rect.height / 2\n break\n default:\n y = rect.top - 8\n }\n\n setPosition({ x, y, placement: finalPlacement })\n setVisible(true)\n }, delay)\n },\n [delay, placement, enabled]\n )\n\n const hide = useCallback(() => {\n clearTimeout(timerRef.current)\n setVisible(false)\n targetRef.current = null\n }, [])\n\n useEffect(() => {\n return () => clearTimeout(timerRef.current)\n }, [])\n\n return {\n visible,\n position,\n content,\n show,\n hide,\n }\n}\n","// @zvndev/yable-react — Flash Cell Component\n// Wraps cell content with flash animation on data change.\n\nimport React from 'react'\nimport type { CellFlashInfo } from '@zvndev/yable-core'\n\n// ---------------------------------------------------------------------------\n// SECURITY: CSS color validation\n// ---------------------------------------------------------------------------\n\n/** Named CSS colors (CSS Level 4) */\nconst CSS_NAMED_COLORS = new Set([\n 'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque',\n 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue',\n 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan',\n 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey',\n 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred',\n 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey',\n 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey',\n 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro',\n 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey',\n 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender',\n 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',\n 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink',\n 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey',\n 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon',\n 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',\n 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred',\n 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy',\n 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod',\n 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru',\n 'pink', 'plum', 'powderblue', 'purple', 'rebeccapurple', 'red', 'rosybrown',\n 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna',\n 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen',\n 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat',\n 'white', 'whitesmoke', 'yellow', 'yellowgreen',\n])\n\n/** CSS keywords that are valid as color values */\nconst CSS_COLOR_KEYWORDS = new Set([\n 'currentcolor', 'inherit', 'initial', 'unset', 'revert', 'transparent',\n])\n\n/**\n * Validates whether a string is a safe CSS color value.\n * Allows hex, rgb/rgba, hsl/hsla, oklch, oklab, lab, lch, color(), named colors, and keywords.\n * Rejects values containing dangerous patterns like url(), expression(), javascript:, or @import.\n */\nfunction isValidCSSColor(value: string): boolean {\n const trimmed = value.trim().toLowerCase()\n\n // Reject dangerous patterns first\n if (/url\\s*\\(/i.test(trimmed)) return false\n if (/expression\\s*\\(/i.test(trimmed)) return false\n if (/javascript\\s*:/i.test(trimmed)) return false\n if (/@import/i.test(trimmed)) return false\n if (/[{};]/.test(trimmed)) return false\n\n // Hex colors: #fff, #ffffff, #ffffffff\n if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.test(trimmed)) return true\n\n // Functional color notations: rgb, rgba, hsl, hsla, oklch, oklab, lab, lch, color\n if (/^(rgba?|hsla?|oklch|oklab|lab|lch|color)\\s*\\(/.test(trimmed)) return true\n\n // Named colors\n if (CSS_NAMED_COLORS.has(trimmed)) return true\n\n // CSS keywords\n if (CSS_COLOR_KEYWORDS.has(trimmed)) return true\n\n return false\n}\n\n// Default flash colors\nconst DEFAULT_UP_COLOR = '#22c55e33'\nconst DEFAULT_DOWN_COLOR = '#ef444433'\nconst DEFAULT_CHANGE_COLOR = '#3b82f633'\n\ninterface FlashCellProps {\n /** The flash info for this cell (if any) */\n flash?: CellFlashInfo\n /** Flash duration in ms */\n duration?: number\n /** Custom up color */\n upColor?: string\n /** Custom down color */\n downColor?: string\n /** Custom change color */\n changeColor?: string\n /** Cell content */\n children: React.ReactNode\n}\n\n/**\n * Validates and returns a safe color value. If the provided color is invalid,\n * logs a warning and returns the fallback default color.\n */\nfunction safeColor(value: string | undefined, fallback: string, propName: string): string | undefined {\n if (value === undefined) return undefined\n if (isValidCSSColor(value)) return value\n\n console.warn(\n `Yable FlashCell: Invalid CSS color for ${propName}: \"${value}\". ` +\n `Using default color instead. Colors must be valid CSS color values ` +\n `(hex, rgb, hsl, named colors, etc.) and must not contain url(), expression(), or javascript:.`\n )\n return fallback\n}\n\nexport function FlashCell({\n flash,\n duration = 700,\n upColor,\n downColor,\n changeColor,\n children,\n}: FlashCellProps) {\n if (!flash) {\n return <>{children}</>\n }\n\n const flashClass = `yable-flash-cell yable-flash-cell--${flash.direction}`\n\n const style: React.CSSProperties = {\n animationDuration: `${duration}ms`,\n }\n\n // SECURITY: Validate custom color props before setting as CSS custom properties\n if (flash.direction === 'up' && upColor) {\n const validated = safeColor(upColor, DEFAULT_UP_COLOR, 'upColor')\n if (validated) (style as Record<string, string>)['--yable-flash-up-color'] = validated\n } else if (flash.direction === 'down' && downColor) {\n const validated = safeColor(downColor, DEFAULT_DOWN_COLOR, 'downColor')\n if (validated) (style as Record<string, string>)['--yable-flash-down-color'] = validated\n } else if (flash.direction === 'change' && changeColor) {\n const validated = safeColor(changeColor, DEFAULT_CHANGE_COLOR, 'changeColor')\n if (validated) (style as Record<string, string>)['--yable-flash-change-color'] = validated\n }\n\n return (\n <div className={flashClass} style={style}>\n {children}\n </div>\n )\n}\n","// @zvndev/yable-react — useCellFlash hook\n// Tracks data changes and provides flash state for cells.\n\nimport { useState, useEffect, useRef, useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { detectCellChanges, type CellFlashInfo } from '@zvndev/yable-core'\n\nexport interface UseCellFlashOptions {\n /** Flash duration in ms */\n duration?: number\n}\n\nexport function useCellFlash<TData extends RowData>(\n table: Table<TData>,\n options: UseCellFlashOptions = {}\n) {\n const { duration = 700 } = options\n const [flashes, setFlashes] = useState<Map<string, CellFlashInfo>>(new Map())\n const prevDataRef = useRef<TData[]>([])\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map())\n\n const clearFlash = useCallback((key: string) => {\n setFlashes((prev) => {\n const next = new Map(prev)\n next.delete(key)\n return next\n })\n timersRef.current.delete(key)\n }, [])\n\n useEffect(() => {\n const currentData = table.options.data\n const prevData = prevDataRef.current\n\n if (prevData.length > 0 && currentData !== prevData) {\n const columns = table.getAllLeafColumns().map((col) => ({\n id: col.id,\n enableCellFlash: (col.columnDef as any).enableCellFlash ?? false,\n }))\n\n const getRowId = table.options.getRowId ?? ((_row: TData, i: number) => String(i))\n const newFlashes = detectCellChanges(prevData, currentData, columns, getRowId)\n\n if (newFlashes.size > 0) {\n setFlashes((prev) => {\n const merged = new Map(prev)\n for (const [key, flash] of newFlashes) {\n merged.set(key, flash)\n\n // Clear previous timer for this key\n const existingTimer = timersRef.current.get(key)\n if (existingTimer) clearTimeout(existingTimer)\n\n // Set auto-clear timer\n const timer = setTimeout(() => clearFlash(key), duration)\n timersRef.current.set(key, timer)\n }\n return merged\n })\n\n // Emit flash events\n for (const [, flash] of newFlashes) {\n table.events.emit('cell:flash' as any, flash)\n }\n }\n }\n\n prevDataRef.current = currentData\n }, [table.options.data, table, duration, clearFlash])\n\n // Cleanup timers\n useEffect(() => {\n return () => {\n for (const timer of timersRef.current.values()) {\n clearTimeout(timer)\n }\n }\n }, [])\n\n const getFlash = useCallback(\n (rowId: string, columnId: string): CellFlashInfo | undefined => {\n return flashes.get(`${rowId}:${columnId}`)\n },\n [flashes]\n )\n\n return { flashes, getFlash }\n}\n","// @zvndev/yable-react — useRowAnimation hook\n// Animated transitions on sort/filter/group changes.\n// Tracks row positions and applies CSS transform transitions.\n\nimport { useRef, useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\nexport interface UseRowAnimationOptions {\n /** Enable row animations. Default: false */\n enabled?: boolean\n /** Transition duration in ms. Default: 250 */\n duration?: number\n /** Easing function. Default: 'ease' */\n easing?: string\n}\n\ninterface RowPosition {\n top: number\n height: number\n}\n\nexport function useRowAnimation<TData extends RowData>(\n _table: Table<TData>,\n options: UseRowAnimationOptions = {}\n) {\n const { enabled = false, duration = 250, easing = 'ease' } = options\n const prevPositionsRef = useRef<Map<string, RowPosition>>(new Map())\n const animatingRef = useRef(false)\n\n const capturePositions = useCallback(\n (containerEl: HTMLElement | null) => {\n if (!enabled || !containerEl) return\n\n const positions = new Map<string, RowPosition>()\n const rows = containerEl.querySelectorAll<HTMLElement>('.yable-tr[data-row-id]')\n\n rows.forEach((el) => {\n const rowId = el.getAttribute('data-row-id')\n if (rowId) {\n positions.set(rowId, {\n top: el.offsetTop,\n height: el.offsetHeight,\n })\n }\n })\n\n prevPositionsRef.current = positions\n },\n [enabled]\n )\n\n const animateRows = useCallback(\n (containerEl: HTMLElement | null) => {\n if (!enabled || !containerEl || animatingRef.current) return\n\n const prevPositions = prevPositionsRef.current\n if (prevPositions.size === 0) return\n\n const rows = containerEl.querySelectorAll<HTMLElement>('.yable-tr[data-row-id]')\n const currentPositions = new Map<string, RowPosition>()\n const currentIds = new Set<string>()\n\n // Gather current positions\n rows.forEach((el) => {\n const rowId = el.getAttribute('data-row-id')\n if (rowId) {\n currentIds.add(rowId)\n currentPositions.set(rowId, {\n top: el.offsetTop,\n height: el.offsetHeight,\n })\n }\n })\n\n animatingRef.current = true\n\n rows.forEach((el) => {\n const rowId = el.getAttribute('data-row-id')\n if (!rowId) return\n\n const prev = prevPositions.get(rowId)\n const curr = currentPositions.get(rowId)\n\n if (prev && curr) {\n // Row moved — animate from old position\n const deltaY = prev.top - curr.top\n if (Math.abs(deltaY) > 1) {\n el.style.transform = `translateY(${deltaY}px)`\n el.style.transition = 'none'\n\n requestAnimationFrame(() => {\n el.style.transition = `transform ${duration}ms ${easing}`\n el.style.transform = ''\n })\n }\n } else if (!prev && curr) {\n // New row — fade in\n el.classList.add('yable-row-enter')\n el.style.animation = `yable-row-fade-in ${duration}ms ${easing} forwards`\n\n const cleanup = () => {\n el.classList.remove('yable-row-enter')\n el.style.animation = ''\n el.removeEventListener('animationend', cleanup)\n }\n el.addEventListener('animationend', cleanup)\n }\n })\n\n // After animations complete, clear state\n setTimeout(() => {\n animatingRef.current = false\n rows.forEach((el) => {\n el.style.transform = ''\n el.style.transition = ''\n })\n }, duration + 50)\n },\n [enabled, duration, easing]\n )\n\n return {\n capturePositions,\n animateRows,\n enabled,\n }\n}\n","// @zvndev/yable-react — Print Layout Component\n// Renders a print-optimized version of the table that removes\n// sticky positioning, virtualization, and shows all rows.\n// Includes page header, timestamp, row count summary, and page-break hints.\n\nimport React from 'react'\nimport type { CellContext, HeaderContext, RowData, Table } from '@zvndev/yable-core'\n\ninterface PrintLayoutProps<TData extends RowData> {\n table: Table<TData>\n /** Print title displayed at the top */\n title?: string\n /** Show print timestamp */\n showTimestamp?: boolean\n}\n\nexport function PrintLayout<TData extends RowData>({\n table,\n title,\n showTimestamp = true,\n}: PrintLayoutProps<TData>) {\n // Get all rows (bypass pagination)\n const allRows = table.getPrePaginationRowModel().rows\n const headerGroups = table.getHeaderGroups()\n const timestamp = new Date().toLocaleString()\n type HeaderRenderer = (ctx: HeaderContext<TData, unknown>) => React.ReactNode\n type CellRenderer = (ctx: CellContext<TData, unknown>) => React.ReactNode\n\n return (\n <div className=\"yable-print-layout\">\n {/* Print header with title and metadata */}\n {(title || showTimestamp) && (\n <div className=\"yable-print-header\">\n {title && <h2 className=\"yable-print-title\">{title}</h2>}\n {showTimestamp && <span className=\"yable-print-timestamp\">Printed: {timestamp}</span>}\n </div>\n )}\n\n {/* Summary line before the table */}\n <div className=\"yable-print-summary\">\n <span className=\"yable-print-summary-text\">\n {allRows.length.toLocaleString()} row{allRows.length !== 1 ? 's' : ''}\n </span>\n </div>\n\n <table className=\"yable-print-table\">\n <thead>\n {headerGroups.map((headerGroup) => (\n <tr key={headerGroup.id} className=\"yable-print-thead-row\">\n {headerGroup.headers.map((header) => {\n const headerContent = header.isPlaceholder\n ? null\n : typeof header.column.columnDef.header === 'function'\n ? (header.column.columnDef.header as HeaderRenderer)(header.getContext())\n : (header.column.columnDef.header ?? header.id)\n\n return (\n <th key={header.id} colSpan={header.colSpan} className=\"yable-print-th\">\n {headerContent}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {allRows.map((row, index) => (\n <tr\n key={row.id}\n className={`yable-print-tr${index % 2 === 1 ? ' yable-print-tr--alt' : ''}`}\n >\n {row.getVisibleCells().map((cell) => {\n const cellDef = cell.column.columnDef.cell\n const content =\n typeof cellDef === 'function'\n ? (cellDef as CellRenderer)(cell.getContext())\n : cell.renderValue()\n\n return (\n <td key={cell.id} className=\"yable-print-td\">\n {content as React.ReactNode}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n\n {/* Print footer */}\n <div className=\"yable-print-footer\">\n <span className=\"yable-print-footer-count\">\n Total: {allRows.length.toLocaleString()} row{allRows.length !== 1 ? 's' : ''}\n </span>\n {showTimestamp && <span className=\"yable-print-footer-timestamp\">{timestamp}</span>}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — usePrintLayout hook\n// Prepares the table for print by removing virtualization, expanding rows,\n// showing all pages, and triggering the browser print dialog.\n\nimport { useCallback, useRef } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\n// ---------------------------------------------------------------------------\n// SECURITY: CSS sanitization for user-provided print styles\n// ---------------------------------------------------------------------------\n\n/**\n * Sanitizes a CSS string to remove dangerous patterns that could load\n * external resources or execute scripts.\n *\n * NOTE: This is defense-in-depth only. CSS injection has limited but real\n * attack surface (data exfiltration via url(), external resource loading\n * via @import). Full prevention requires only allowing developer-provided CSS.\n */\nfunction sanitizeCSS(css: string): string {\n let sanitized = css\n\n // Remove @import rules (prevents loading external stylesheets / data exfiltration)\n sanitized = sanitized.replace(/@import\\s+[^;]*;?/gi, '/* @import removed */')\n\n // Remove @charset rules\n sanitized = sanitized.replace(/@charset\\s+[^;]*;?/gi, '/* @charset removed */')\n\n // Remove url() values (prevents data exfiltration and external resource loading)\n sanitized = sanitized.replace(/url\\s*\\([^)]*\\)/gi, '/* url() removed */')\n\n // Remove expression() (IE-specific XSS vector)\n sanitized = sanitized.replace(/expression\\s*\\([^)]*\\)/gi, '/* expression() removed */')\n\n // Remove javascript: protocol in any context\n sanitized = sanitized.replace(/javascript\\s*:/gi, '/* javascript: removed */')\n\n return sanitized\n}\n\nexport interface UsePrintLayoutOptions {\n /** Custom print title */\n title?: string\n /**\n * Additional CSS to inject for print.\n *\n * **Security warning:** Must be developer-provided CSS only.\n * User-generated CSS is not safe even with sanitization.\n * The library applies basic sanitization (removing @import, url(), expression())\n * but this cannot guarantee safety against all CSS-based attacks.\n */\n additionalCSS?: string\n}\n\nexport function usePrintLayout<TData extends RowData>(\n _table: Table<TData>,\n options: UsePrintLayoutOptions = {},\n) {\n const { title, additionalCSS } = options\n const isPrintingRef = useRef(false)\n\n const preparePrint = useCallback(() => {\n // Add print mode class to the table container\n const yableEl = document.querySelector('.yable')\n if (yableEl) {\n yableEl.classList.add('yable-print-mode')\n }\n\n // Set document title for print\n const originalTitle = document.title\n if (title) {\n document.title = title\n }\n\n // Inject additional CSS if provided\n let styleEl: HTMLStyleElement | null = null\n if (additionalCSS) {\n styleEl = document.createElement('style')\n styleEl.setAttribute('data-yable-print', 'true')\n // SECURITY: Sanitize CSS to remove dangerous patterns (@import, url(), expression())\n styleEl.textContent = sanitizeCSS(additionalCSS)\n document.head.appendChild(styleEl)\n }\n\n isPrintingRef.current = true\n\n // Cleanup after print\n const cleanup = () => {\n isPrintingRef.current = false\n if (yableEl) {\n yableEl.classList.remove('yable-print-mode')\n }\n if (title) {\n document.title = originalTitle\n }\n if (styleEl) {\n styleEl.remove()\n }\n window.removeEventListener('afterprint', cleanup)\n }\n\n window.addEventListener('afterprint', cleanup)\n\n // Trigger print\n requestAnimationFrame(() => {\n window.print()\n })\n }, [title, additionalCSS])\n\n return {\n preparePrint,\n isPrinting: isPrintingRef.current,\n }\n}\n","// @zvndev/yable-react — useTheme hook\n// Runtime theme switching without page reload.\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\n\nexport interface UseThemeOptions {\n /** Initial theme name */\n defaultTheme?: string\n /** Initial color scheme */\n defaultColorScheme?: 'light' | 'dark' | 'auto'\n}\n\nexport function useTheme(options: UseThemeOptions = {}) {\n const { defaultTheme = 'default', defaultColorScheme = 'auto' } = options\n const [theme, setThemeState] = useState(defaultTheme)\n const [colorScheme, setColorSchemeState] = useState<'light' | 'dark' | 'auto'>(defaultColorScheme)\n const containerRef = useRef<HTMLElement | null>(null)\n\n const setTheme = useCallback((newTheme: string) => {\n setThemeState(newTheme)\n }, [])\n\n const setColorScheme = useCallback((scheme: 'light' | 'dark' | 'auto') => {\n setColorSchemeState(scheme)\n }, [])\n\n const toggleColorScheme = useCallback(() => {\n setColorSchemeState((prev) => {\n if (prev === 'auto') return 'dark'\n if (prev === 'dark') return 'light'\n return 'auto'\n })\n }, [])\n\n // Apply color scheme to the nearest yable container or document\n useEffect(() => {\n const target = containerRef.current ?? document.documentElement\n if (colorScheme === 'auto') {\n target.removeAttribute('data-yable-theme')\n } else {\n target.setAttribute('data-yable-theme', colorScheme)\n }\n }, [colorScheme])\n\n // Detect system preference\n const [systemDark, setSystemDark] = useState(false)\n\n useEffect(() => {\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n setSystemDark(mq.matches)\n\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches)\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [])\n\n const resolvedColorScheme = colorScheme === 'auto'\n ? (systemDark ? 'dark' : 'light')\n : colorScheme\n\n return {\n theme,\n setTheme,\n colorScheme,\n setColorScheme,\n toggleColorScheme,\n resolvedColorScheme,\n containerRef,\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/YableProvider.tsx","../src/config.ts","../src/useTable.ts","../src/hooks/useServerTable.ts","../src/hooks/useTablePersistence.ts","../src/hooks/useVirtualization.ts","../src/hooks/useColumnVirtualization.ts","../src/hooks/usePretextMeasurement.ts","../src/cells/CellBadge.tsx","../src/cells/CellCurrency.tsx","../src/cells/CellStatus.tsx","../src/cells/CellNumeric.tsx","../src/cells/CellRating.tsx","../src/cells/CellBoolean.tsx","../src/cells/CellProgress.tsx","../src/cells/CellDate.tsx","../src/cells/CellLink.tsx","../src/cells/resolver.tsx","../src/hooks/useAutoMeasurements.ts","../src/hooks/useTableRowHeights.ts","../src/context.ts","../src/components/SortIndicator.tsx","../src/components/SetFilter.tsx","../src/components/FloatingFilter.tsx","../src/components/TableHeader.tsx","../src/components/CellStatusBadge.tsx","../src/components/TableCell.tsx","../src/components/ErrorBoundary.tsx","../src/components/MasterDetail.tsx","../src/components/TableBody.tsx","../src/components/TableFooter.tsx","../src/components/LoadingOverlay.tsx","../src/components/NoRowsOverlay.tsx","../src/components/StatusBarPanel.tsx","../src/components/StatusBar.tsx","../src/components/ColumnsPanel.tsx","../src/components/FiltersPanel.tsx","../src/components/Sidebar.tsx","../src/components/ContextMenuItem.tsx","../src/components/ContextMenu.tsx","../src/hooks/useContextMenu.ts","../src/hooks/useKeyboardNavigation.ts","../src/components/Table.tsx","../src/components/Pagination.tsx","../src/components/GlobalFilter.tsx","../src/form/CellInput.tsx","../src/form/CellSelect.tsx","../src/form/CellCheckbox.tsx","../src/form/CellToggle.tsx","../src/form/CellDatePicker.tsx","../src/hooks/useClipboard.ts","../src/hooks/useFillHandle.ts","../src/components/FillHandle.tsx","../src/components/DragHandle.tsx","../src/hooks/useRowDrag.ts","../src/components/TreeToggle.tsx","../src/components/ExpandIcon.tsx","../src/components/PivotConfig.tsx","../src/components/Tooltip.tsx","../src/hooks/useTooltip.ts","../src/components/FlashCell.tsx","../src/hooks/useCellFlash.ts","../src/hooks/useRowAnimation.ts","../src/components/PrintLayout.tsx","../src/hooks/usePrintLayout.ts","../src/hooks/useTheme.ts","../src/presets/selectColumn.tsx","../src/presets/rowNumberColumn.tsx","../src/presets/actionsColumn.tsx","../src/presets/expandColumn.tsx","../src/primitives/CellStack.tsx","../src/primitives/CellRow.tsx","../src/primitives/CellWithIcon.tsx","../src/primitives/CellText.tsx","../src/utils/mergeEditChanges.ts"],"names":["useState","useRef","useCallback","useEffect","functionalUpdate","useMemo","jsx","measureRecipe","jsxs","getColumnId","createContext","useContext","React","isInteractiveClickTarget","Fragment","getDefaultLocale","items","canCellEnterEditMode","direction","SearchIcon","isEditableTarget"],"mappings":"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","file":"index.js","sourcesContent":["// @zvndev/yable-react — Project-wide defaults provider\n\nimport { createContext, useContext } from 'react'\nimport type { ReactNode } from 'react'\nimport type { ColumnDefBase, ColumnDefExtensions } from '@zvndev/yable-core'\nimport type { TableProps } from './types'\nimport type { YableConfig } from './config'\n\n/**\n * Project-wide default table and column options.\n *\n * Wrap your app (or a subtree) in `<YableProvider>` so every `<Table>` and\n * `useTable` call inherits these defaults without repeating config.\n *\n * Component-level and hook-level values always take precedence over provider\n * defaults.\n */\nexport interface YableDefaults {\n /** Layered project config with default and named table/cell profiles */\n config?: YableConfig\n /** Named config profile used by descendants unless overridden */\n tableProfile?: string\n /** Default props applied to every `<Table>` in the subtree */\n tableProps?: Partial<\n Pick<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- provider defaults must work for every table row shape.\n TableProps<any>,\n 'striped' | 'bordered' | 'compact' | 'stickyHeader' | 'theme' | 'direction' | 'ariaLabel'\n >\n >\n /** Default column definition merged under every table's own `defaultColumnDef` */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- provider defaults are merged into generic table options later.\n defaultColumnDef?: Partial<ColumnDefBase<any, unknown>> &\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- provider defaults are row-shape agnostic.\n Partial<ColumnDefExtensions<any, unknown>>\n}\n\nconst YableContext = createContext<YableDefaults>({})\n\n/**\n * Read the nearest `YableProvider` defaults.\n *\n * Safe to call outside a provider — returns an empty object.\n */\nexport function useYableDefaults(): YableDefaults {\n return useContext(YableContext)\n}\n\n/**\n * Provide project-wide defaults for all Yable tables in a subtree.\n *\n * @example\n * ```tsx\n * <YableProvider\n * striped\n * stickyHeader\n * theme=\"stripe\"\n * defaultColumnDef={{ enableSorting: true }}\n * >\n * <EmployeeTable />\n * <ProjectTable />\n * </YableProvider>\n * ```\n */\nexport function YableProvider({\n children,\n config,\n tableProfile,\n defaultColumnDef,\n striped,\n stickyHeader,\n bordered,\n compact,\n theme,\n direction,\n ariaLabel,\n}: YableDefaults & {\n children: ReactNode\n striped?: boolean\n stickyHeader?: boolean\n bordered?: boolean\n compact?: boolean\n theme?: string\n direction?: 'ltr' | 'rtl'\n ariaLabel?: string\n}) {\n // Build tableProps from flat props — only include keys that were actually passed\n const tableProps: YableDefaults['tableProps'] = {}\n if (striped !== undefined) tableProps.striped = striped\n if (stickyHeader !== undefined) tableProps.stickyHeader = stickyHeader\n if (bordered !== undefined) tableProps.bordered = bordered\n if (compact !== undefined) tableProps.compact = compact\n if (theme !== undefined) tableProps.theme = theme\n if (direction !== undefined) tableProps.direction = direction\n if (ariaLabel !== undefined) tableProps.ariaLabel = ariaLabel\n\n const value: YableDefaults = {\n config,\n tableProfile,\n tableProps: Object.keys(tableProps).length > 0 ? tableProps : undefined,\n defaultColumnDef,\n }\n\n return <YableContext.Provider value={value}>{children}</YableContext.Provider>\n}\n","// @zvndev/yable-react — layered table configuration utilities\n\nimport type {\n ColumnDef,\n ColumnDefBase,\n ColumnDefExtensions,\n Row,\n RowData,\n} from '@zvndev/yable-core'\nimport type { CSSProperties } from 'react'\nimport type { TableProps } from './types'\n\nexport type YableTableVisualConfig = Partial<\n Pick<\n TableProps<any>,\n | 'striped'\n | 'bordered'\n | 'compact'\n | 'stickyHeader'\n | 'theme'\n | 'direction'\n | 'ariaLabel'\n | 'clickableRows'\n | 'floatingFilters'\n | 'columnVirtualization'\n | 'columnVirtualizationOverscan'\n | 'statusBar'\n | 'sidebar'\n | 'sidebarPanels'\n | 'defaultSidebarPanel'\n >\n>\n\nexport type YableColumnConfig<TData extends RowData = any, TValue = unknown> = Partial<\n ColumnDefBase<TData, TValue>\n> &\n Partial<ColumnDefExtensions<TData, TValue>>\n\nexport interface YableRowConfig<TData extends RowData = any> {\n className?: string | ((row: Row<TData>) => string | undefined)\n style?: CSSProperties | ((row: Row<TData>) => CSSProperties)\n}\n\nexport type YableCellConfig<TData extends RowData = any, TValue = unknown> = Pick<\n YableColumnConfig<TData, TValue>,\n | 'cell'\n | 'cellType'\n | 'cellTypeProps'\n | 'cellClassName'\n | 'cellStyle'\n | 'editable'\n | 'editConfig'\n | 'tooltip'\n | 'tooltipDelay'\n>\n\nexport interface YableColumnConfigSet<TData extends RowData = any> {\n default?: YableColumnConfig<TData>\n byId?: Record<string, YableColumnConfig<TData>>\n}\n\nexport interface YableCellConfigSet<TData extends RowData = any> {\n default?: YableCellConfig<TData>\n named?: Record<string, YableCellConfig<TData>>\n byColumn?: Record<string, YableCellConfig<TData>>\n}\n\nexport interface YableTableProfile<TData extends RowData = any> {\n table?: YableTableVisualConfig\n columns?: YableColumnConfigSet<TData>\n rows?: YableRowConfig<TData>\n cells?: YableCellConfigSet<TData>\n}\n\nexport interface YableConfig<TData extends RowData = any> extends YableTableProfile<TData> {\n profiles?: Record<string, YableTableProfile<TData>>\n}\n\nexport interface ResolvedYableProfile<\n TData extends RowData = any,\n> extends YableTableProfile<TData> {\n name: string\n}\n\nexport function createYableConfig<TData extends RowData = any>(\n config: YableConfig<TData>,\n): YableConfig<TData> {\n return config\n}\n\nexport function resolveYableProfile<TData extends RowData = any>(\n config?: YableConfig<TData>,\n profileName = 'default',\n): ResolvedYableProfile<TData> {\n const base = pickProfileFields(config)\n const named = profileName === 'default' ? undefined : config?.profiles?.[profileName]\n return {\n name: profileName,\n table: { ...base.table, ...named?.table },\n columns: {\n default: { ...base.columns?.default, ...named?.columns?.default },\n byId: { ...base.columns?.byId, ...named?.columns?.byId },\n },\n rows: { ...base.rows, ...named?.rows },\n cells: {\n default: { ...base.cells?.default, ...named?.cells?.default },\n named: { ...base.cells?.named, ...named?.cells?.named },\n byColumn: { ...base.cells?.byColumn, ...named?.cells?.byColumn },\n },\n }\n}\n\nexport function getYableDefaultColumnDef<TData extends RowData>(\n profile?: YableTableProfile<TData>,\n): YableColumnConfig<TData> | undefined {\n const next: YableColumnConfig<TData> = {\n ...profile?.columns?.default,\n }\n\n return Object.keys(next).length > 0 ? next : undefined\n}\n\nexport function applyYableConfigToColumns<TData extends RowData>(\n columns: ColumnDef<TData, any>[],\n profile?: YableTableProfile<TData>,\n): ColumnDef<TData, any>[] {\n if (!profile) return columns\n return columns.map((columnDef) => applyColumnConfig(columnDef, profile))\n}\n\nfunction applyColumnConfig<TData extends RowData>(\n columnDef: ColumnDef<TData, any>,\n profile: YableTableProfile<TData>,\n): ColumnDef<TData, any> {\n const columnId = getColumnId(columnDef)\n const explicit = columnDef as YableColumnConfig<TData> & {\n columns?: ColumnDef<TData, any>[]\n cellConfig?: string | string[]\n }\n const cellNames = normalizeCellConfigNames(explicit.cellConfig)\n const namedCellConfig = cellNames.reduce<YableCellConfig<TData>>(\n (acc, name) => ({ ...acc, ...profile.cells?.named?.[name] }),\n {},\n )\n const defaultCell = profile.cells?.default\n const columnCell = columnId ? profile.cells?.byColumn?.[columnId] : undefined\n const columnConfig = columnId ? profile.columns?.byId?.[columnId] : undefined\n\n const children =\n 'columns' in columnDef && columnDef.columns\n ? { columns: columnDef.columns.map((child) => applyColumnConfig(child, profile)) }\n : undefined\n\n return {\n ...defaultCell,\n ...namedCellConfig,\n ...columnCell,\n ...columnConfig,\n ...columnDef,\n ...children,\n } as ColumnDef<TData, any>\n}\n\nfunction pickProfileFields<TData extends RowData>(\n config?: YableConfig<TData>,\n): YableTableProfile<TData> {\n if (!config) return {}\n return {\n table: config.table,\n columns: config.columns,\n rows: config.rows,\n cells: config.cells,\n }\n}\n\nfunction getColumnId<TData extends RowData>(columnDef: ColumnDef<TData, any>): string | undefined {\n if ('id' in columnDef && columnDef.id) return String(columnDef.id)\n if ('accessorKey' in columnDef && columnDef.accessorKey) return String(columnDef.accessorKey)\n return undefined\n}\n\nfunction normalizeCellConfigNames(value: string | string[] | undefined): string[] {\n if (!value) return []\n return Array.isArray(value) ? value : [value]\n}\n","// @zvndev/yable-react — useTable hook\n\nimport { useState, useRef, useMemo, useCallback, useEffect } from 'react'\nimport {\n createTable,\n functionalUpdate,\n type RowData,\n type TableOptions,\n type TableOptionsResolved,\n type TableState,\n type Table,\n type Updater,\n} from '@zvndev/yable-core'\nimport { useYableDefaults } from './YableProvider'\nimport { applyYableConfigToColumns, getYableDefaultColumnDef, resolveYableProfile } from './config'\nimport type { YableConfig, YableTableProfile } from './config'\n\nexport type UseTableOptions<TData extends RowData> = TableOptions<TData> & {\n /** Table-local config; overrides provider config for this table instance. */\n config?: YableConfig<TData>\n /** Named profile from `YableProvider config`; overrides provider `tableProfile`. */\n configProfile?: string\n}\n\n/**\n * Shallow-compare two objects. Returns true if all own keys are strictly equal.\n */\nfunction shallowEqual<T extends Record<string, unknown>>(a: T, b: T): boolean {\n if (a === b) return true\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if ((a as any)[key] !== (b as any)[key]) return false\n }\n return true\n}\n\n/**\n * React hook that wraps the framework-agnostic core table engine.\n *\n * Returns a stable {@link Table} instance whose `state` reflects either\n * the consumer's controlled `options.state` or the hook's internal state.\n *\n * Re-renders are triggered by `setState` from the default `onStateChange`\n * implementation. Consumers may pass their own `onStateChange` to control\n * state externally.\n *\n * Gotcha: `options.onStateChange` is captured via a latest-ref, so a fresh\n * function identity from the parent is always invoked — even if every other\n * option key is shallow-equal to the previous render.\n */\nexport function useTable<TData extends RowData>(options: UseTableOptions<TData>): Table<TData> {\n // Merge provider-level defaultColumnDef under the table's own defaultColumnDef.\n // Table-level values always take precedence over provider defaults.\n const providerDefaults = useYableDefaults()\n const optionsWithDefaults = useMemo(() => {\n const profile = resolveYableProfile(\n options.config ?? providerDefaults.config,\n options.configProfile ?? providerDefaults.tableProfile,\n ) as YableTableProfile<TData>\n const profileDefaultColumnDef = getYableDefaultColumnDef(profile)\n const configuredColumns = applyYableConfigToColumns(options.columns, profile)\n const defaultColumnDef = {\n ...profileDefaultColumnDef,\n ...providerDefaults.defaultColumnDef,\n ...options.defaultColumnDef,\n }\n\n return {\n ...options,\n columns: configuredColumns,\n rowClassName: options.rowClassName ?? profile.rows?.className,\n rowStyle: options.rowStyle ?? profile.rows?.style,\n defaultColumnDef: Object.keys(defaultColumnDef).length > 0 ? defaultColumnDef : undefined,\n }\n }, [\n options,\n providerDefaults.config,\n providerDefaults.defaultColumnDef,\n providerDefaults.tableProfile,\n ])\n\n // Internal state — only used if consumer doesn't provide controlled state\n const [state, setState] = useState<TableState>(() => ({\n sorting: [],\n columnFilters: [],\n globalFilter: '',\n pagination: { pageIndex: 0, pageSize: 10 },\n rowSelection: {},\n columnVisibility: {},\n columnOrder: [],\n columnPinning: { left: [], right: [] },\n columnSizing: {},\n columnSizingInfo: {\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n },\n expanded: {},\n rowPinning: { top: [], bottom: [] },\n grouping: [],\n editing: { activeCell: undefined, pendingValues: {} },\n commits: { cells: {}, nextOpId: 1 },\n keyboardNavigation: { focusedCell: null },\n undoRedo: { undoStack: [], redoStack: [], maxSize: 50 },\n fillHandle: { isDragging: false },\n formulas: { enabled: false, formulas: {}, computedValues: {}, errors: {} },\n rowDrag: { draggingRowId: null, overRowId: null, dropPosition: null },\n pivot: {\n enabled: false,\n config: { rowFields: [], columnFields: [], valueFields: [] },\n expandedRowGroups: {},\n expandedColumnGroups: {},\n },\n ...options.initialState,\n ...options.state,\n }))\n\n const stateRef = useRef(state)\n stateRef.current = state\n\n // Track previous options to avoid recomputing when consumer passes\n // a structurally identical but referentially new options object\n const prevOptionsRef = useRef(optionsWithDefaults)\n const stableOptions = useMemo(() => {\n if (shallowEqual(prevOptionsRef.current as any, optionsWithDefaults as any)) {\n return prevOptionsRef.current\n }\n prevOptionsRef.current = optionsWithDefaults\n return optionsWithDefaults\n }, [optionsWithDefaults])\n\n // Latest-ref for onStateChange so the wrapper always invokes the freshest\n // callback identity, even when every other key in `options` is shallow-equal\n // (which would otherwise leave `stableOptions` referentially identical and\n // mask a new function identity from the parent).\n const onStateChangeRef = useRef(options.onStateChange)\n onStateChangeRef.current = options.onStateChange\n\n const resolvedState = useMemo(\n () => ({\n ...state,\n ...stableOptions.state,\n }),\n [state, stableOptions.state],\n )\n\n const onStateChange = useCallback((updater: Updater<TableState>) => {\n const latest = onStateChangeRef.current\n if (latest) {\n latest(updater)\n } else {\n setState((prev) => functionalUpdate(updater, prev))\n }\n }, [])\n\n const resolvedOptions: TableOptions<TData> = useMemo(\n () => ({\n ...stableOptions,\n state: resolvedState,\n onStateChange,\n }),\n [stableOptions, resolvedState, onStateChange],\n )\n\n // Create or update the table instance\n const tableRef = useRef<Table<TData> | null>(null)\n\n if (!tableRef.current) {\n tableRef.current = createTable(resolvedOptions)\n } else {\n tableRef.current.setOptions(\n (prev) =>\n ({\n ...prev,\n ...resolvedOptions,\n state: resolvedState,\n onStateChange,\n }) as TableOptionsResolved<TData>,\n )\n }\n\n useEffect(() => {\n const table = tableRef.current\n if (!table) return\n\n const unsubscribers = [\n options.onCellClick && table.events.on('cell:click', options.onCellClick),\n options.onCellDoubleClick && table.events.on('cell:dblclick', options.onCellDoubleClick),\n options.onCellContextMenu && table.events.on('cell:contextmenu', options.onCellContextMenu),\n options.onRowClick && table.events.on('row:click', options.onRowClick),\n options.onRowDoubleClick && table.events.on('row:dblclick', options.onRowDoubleClick),\n options.onRowContextMenu && table.events.on('row:contextmenu', options.onRowContextMenu),\n options.onHeaderClick && table.events.on('header:click', options.onHeaderClick),\n options.onHeaderContextMenu &&\n table.events.on('header:contextmenu', options.onHeaderContextMenu),\n ].filter((unsubscribe): unsubscribe is () => void => Boolean(unsubscribe))\n\n return () => {\n unsubscribers.forEach((unsubscribe) => unsubscribe())\n }\n }, [\n options.onCellClick,\n options.onCellContextMenu,\n options.onCellDoubleClick,\n options.onHeaderClick,\n options.onHeaderContextMenu,\n options.onRowClick,\n options.onRowContextMenu,\n options.onRowDoubleClick,\n ])\n\n // Clean up event listeners on unmount to prevent memory leaks in SPAs\n useEffect(() => {\n return () => {\n if (tableRef.current) {\n tableRef.current.events.removeAllListeners()\n }\n }\n }, [])\n\n return tableRef.current\n}\n","// @zvndev/yable-react — server-state table controller\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n type ColumnFiltersState,\n type PaginationState,\n type RowData,\n type SortingState,\n type Table,\n type Updater,\n functionalUpdate,\n} from '@zvndev/yable-core'\nimport { useTable, type UseTableOptions } from '../useTable'\n\nexport interface ServerTableFetchArgs {\n sorting: SortingState\n columnFilters: ColumnFiltersState\n globalFilter: string\n pagination: PaginationState\n cursor: unknown\n signal: AbortSignal\n}\n\nexport interface ServerTableFetchResult<TData extends RowData> {\n rows: TData[]\n cursor?: unknown\n hasMore?: boolean\n rowCount?: number\n pageCount?: number\n}\n\nexport interface ServerTableUpdateArgs<TData extends RowData> {\n rowId: string\n patch: Partial<TData>\n previousRow?: TData\n signal: AbortSignal\n}\n\nexport interface UseServerTableOptions<TData extends RowData> extends Omit<\n UseTableOptions<TData>,\n | 'data'\n | 'state'\n | 'manualSorting'\n | 'manualFiltering'\n | 'manualPagination'\n | 'onSortingChange'\n | 'onColumnFiltersChange'\n | 'onGlobalFilterChange'\n | 'onPaginationChange'\n | 'rowCount'\n | 'pageCount'\n> {\n fetchData: (args: ServerTableFetchArgs) => Promise<ServerTableFetchResult<TData>>\n updateRow?: (args: ServerTableUpdateArgs<TData>) => Promise<TData | Partial<TData> | void>\n initialRows?: TData[]\n initialCursor?: unknown\n initialHasMore?: boolean\n initialRowCount?: number\n initialPageCount?: number\n initialSorting?: SortingState\n initialColumnFilters?: ColumnFiltersState\n initialGlobalFilter?: string\n initialPagination?: PaginationState\n autoLoad?: boolean\n}\n\nexport interface ServerTableController<TData extends RowData> {\n table: Table<TData>\n rows: TData[]\n loading: boolean\n error: unknown\n cursor: unknown\n hasMore: boolean\n rowCount?: number\n pageCount?: number\n sorting: SortingState\n columnFilters: ColumnFiltersState\n globalFilter: string\n pagination: PaginationState\n refresh: () => Promise<void>\n loadMore: () => Promise<void>\n updateRow: (rowId: string, patch: Partial<TData>) => Promise<void>\n}\n\nexport function useServerTable<TData extends RowData>({\n fetchData,\n updateRow,\n initialRows = [],\n initialCursor = null,\n initialHasMore = true,\n initialRowCount,\n initialPageCount,\n initialSorting = [],\n initialColumnFilters = [],\n initialGlobalFilter = '',\n initialPagination = { pageIndex: 0, pageSize: 50 },\n autoLoad = true,\n getRowId,\n ...tableOptions\n}: UseServerTableOptions<TData>): ServerTableController<TData> {\n const [rows, setRows] = useState<TData[]>(initialRows)\n const [cursor, setCursor] = useState<unknown>(initialCursor)\n const [hasMore, setHasMore] = useState(initialHasMore)\n const [rowCount, setRowCount] = useState<number | undefined>(initialRowCount)\n const [pageCount, setPageCount] = useState<number | undefined>(initialPageCount)\n const [sorting, setSorting] = useState<SortingState>(initialSorting)\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>(initialColumnFilters)\n const [globalFilter, setGlobalFilter] = useState(initialGlobalFilter)\n const [pagination, setPagination] = useState<PaginationState>(initialPagination)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<unknown>(null)\n const abortRef = useRef<AbortController | null>(null)\n const cursorRef = useRef(cursor)\n const fetchDataRef = useRef(fetchData)\n const updateRowRef = useRef(updateRow)\n\n const resolveRowId = useCallback(\n (row: TData, index: number) =>\n getRowId?.(row, index) ?? String((row as { id?: unknown }).id ?? index),\n [getRowId],\n )\n\n const runFetch = useCallback(\n async (mode: 'replace' | 'append') => {\n abortRef.current?.abort()\n const abort = new AbortController()\n abortRef.current = abort\n setLoading(true)\n setError(null)\n\n try {\n const result = await fetchDataRef.current({\n sorting,\n columnFilters,\n globalFilter,\n pagination,\n cursor: mode === 'append' ? cursorRef.current : null,\n signal: abort.signal,\n })\n if (abort.signal.aborted) return\n\n setRows((prev) => (mode === 'append' ? [...prev, ...result.rows] : result.rows))\n setCursor(result.cursor ?? null)\n setHasMore((prev) => result.hasMore ?? prev)\n setRowCount((prev) => result.rowCount ?? prev)\n setPageCount((prev) => result.pageCount ?? prev)\n } catch (nextError) {\n if (!abort.signal.aborted) setError(nextError)\n } finally {\n if (!abort.signal.aborted) setLoading(false)\n }\n },\n [columnFilters, globalFilter, pagination, sorting],\n )\n\n const refresh = useCallback(() => runFetch('replace'), [runFetch])\n const loadMore = useCallback(async () => {\n if (!hasMore || loading) return\n await runFetch('append')\n }, [hasMore, loading, runFetch])\n\n const patchRow = useCallback(\n async (rowId: string, patch: Partial<TData>) => {\n const previousRow = rows.find((row, index) => resolveRowId(row, index) === rowId)\n setRows((prev) =>\n prev.map((row, index) => (resolveRowId(row, index) === rowId ? { ...row, ...patch } : row)),\n )\n\n if (!updateRowRef.current) return\n\n const abort = new AbortController()\n try {\n const result = await updateRowRef.current({\n rowId,\n patch,\n previousRow,\n signal: abort.signal,\n })\n if (!result) return\n setRows((prev) =>\n prev.map((row, index) =>\n resolveRowId(row, index) === rowId ? ({ ...row, ...result } as TData) : row,\n ),\n )\n } catch (nextError) {\n setError(nextError)\n if (previousRow) {\n setRows((prev) =>\n prev.map((row, index) => (resolveRowId(row, index) === rowId ? previousRow : row)),\n )\n }\n }\n },\n [resolveRowId, rows],\n )\n\n useEffect(() => {\n fetchDataRef.current = fetchData\n }, [fetchData])\n\n useEffect(() => {\n updateRowRef.current = updateRow\n }, [updateRow])\n\n useEffect(() => {\n if (!autoLoad) return\n void refresh()\n }, [autoLoad, refresh])\n\n useEffect(() => {\n cursorRef.current = cursor\n }, [cursor])\n\n useEffect(() => () => abortRef.current?.abort(), [])\n\n const table = useTable<TData>({\n ...tableOptions,\n data: rows,\n getRowId: resolveRowId,\n manualSorting: true,\n manualFiltering: true,\n manualPagination: true,\n rowCount,\n pageCount,\n state: {\n sorting,\n columnFilters,\n globalFilter,\n pagination,\n },\n onSortingChange: (updater: Updater<SortingState>) => {\n setSorting((prev) => functionalUpdate(updater, prev))\n setCursor(null)\n setHasMore(true)\n },\n onColumnFiltersChange: (updater: Updater<ColumnFiltersState>) => {\n setColumnFilters((prev) => functionalUpdate(updater, prev))\n setCursor(null)\n setHasMore(true)\n },\n onGlobalFilterChange: (updater: Updater<string>) => {\n setGlobalFilter((prev) => functionalUpdate(updater, prev))\n setCursor(null)\n setHasMore(true)\n },\n onPaginationChange: (updater: Updater<PaginationState>) => {\n setPagination((prev) => functionalUpdate(updater, prev))\n setCursor(null)\n setHasMore(true)\n },\n } as UseTableOptions<TData>)\n\n return useMemo(\n () => ({\n table,\n rows,\n loading,\n error,\n cursor,\n hasMore,\n rowCount,\n pageCount,\n sorting,\n columnFilters,\n globalFilter,\n pagination,\n refresh,\n loadMore,\n updateRow: patchRow,\n }),\n [\n table,\n rows,\n loading,\n error,\n cursor,\n hasMore,\n rowCount,\n pageCount,\n sorting,\n columnFilters,\n globalFilter,\n pagination,\n refresh,\n loadMore,\n patchRow,\n ],\n )\n}\n","// @zvndev/yable-react — useTablePersistence hook\n// Persists selected table state slices to localStorage (or custom storage).\n\nimport { useState, useRef, useCallback, useMemo, useEffect } from 'react'\nimport { functionalUpdate, type TableState, type Updater } from '@zvndev/yable-core'\n\n/** Keys from TableState that are safe to persist by default. */\nconst DEFAULT_PERSISTED_KEYS: (keyof TableState)[] = [\n 'columnVisibility',\n 'columnOrder',\n 'columnSizing',\n 'columnPinning',\n]\n\nexport interface UseTablePersistenceOptions {\n /** Storage key used for getItem/setItem. */\n key: string\n /** Which TableState slices to persist. Defaults to column layout keys. */\n persistedKeys?: (keyof TableState)[]\n /** Milliseconds to debounce storage writes. Default: 100. */\n debounce?: number\n /** Schema version — bumping this discards any stale stored data. */\n version?: number\n /** Custom Storage implementation. Default: localStorage. */\n storage?: Storage\n}\n\ninterface PersistedEnvelope {\n version: number\n state: Partial<TableState>\n}\n\n/**\n * Resolve storage safely (SSR-safe).\n * Returns `undefined` if running on the server or storage is unavailable.\n */\nfunction resolveStorage(custom?: Storage): Storage | undefined {\n if (custom) return custom\n if (typeof window !== 'undefined') {\n try {\n return window.localStorage\n } catch {\n return undefined\n }\n }\n return undefined\n}\n\n/**\n * Pick a subset of keys from an object.\n */\nfunction pick<T extends Record<string, unknown>>(obj: T, keys: (keyof T)[]): Partial<T> {\n const result: Partial<T> = {}\n for (const k of keys) {\n if (k in obj) {\n result[k] = obj[k]\n }\n }\n return result\n}\n\n/**\n * Read persisted state from storage.\n * Returns an empty object on any failure.\n */\nfunction readState(\n storage: Storage | undefined,\n key: string,\n version: number,\n persistedKeys: (keyof TableState)[],\n): Partial<TableState> {\n if (!storage) return {}\n try {\n const raw = storage.getItem(key)\n if (!raw) return {}\n const envelope: PersistedEnvelope = JSON.parse(raw)\n if (envelope.version !== version) {\n // Version mismatch — discard stale data\n storage.removeItem(key)\n return {}\n }\n return pick(envelope.state as Record<string, unknown>, persistedKeys) as Partial<TableState>\n } catch {\n // Corrupted data — log and move on\n if (typeof console !== 'undefined') {\n console.warn(`[yable] Failed to read persisted state for key \"${key}\"`)\n }\n return {}\n }\n}\n\n/**\n * Write persisted state to storage.\n * Silently swallows errors (e.g. quota exceeded).\n */\nfunction writeState(\n storage: Storage | undefined,\n key: string,\n version: number,\n state: Partial<TableState>,\n): void {\n if (!storage) return\n try {\n const envelope: PersistedEnvelope = { version, state }\n storage.setItem(key, JSON.stringify(envelope))\n } catch {\n if (typeof console !== 'undefined') {\n console.warn(`[yable] Failed to persist state for key \"${key}\" (storage may be full)`)\n }\n }\n}\n\nexport interface UseTablePersistenceReturn {\n /**\n * Partial state hydrated from storage — pass to `useTable({ initialState })`.\n * Only useful when NOT passing `onStateChange` (i.e., uncontrolled mode).\n */\n initialState: Partial<TableState>\n /**\n * State-change handler that persists relevant slices on each update.\n * When passed to `useTable({ onStateChange })`, the persistence hook\n * takes over state management (controlled mode). You MUST also pass\n * `state` to useTable in this case.\n */\n onStateChange: (updater: Updater<TableState>) => void\n /**\n * Current table state managed by the persistence hook.\n * Pass to `useTable({ state })` alongside `onStateChange`.\n */\n state: Partial<TableState>\n /** Manually clear all persisted state for this key. */\n clearPersistedState: () => void\n}\n\n/**\n * React hook that persists selected table state slices to storage.\n *\n * Returns `initialState` (hydrated from storage), `state`, and\n * `onStateChange` — pass all three to `useTable` so that persisted\n * slices survive page reloads.\n *\n * @example\n * ```tsx\n * const persistence = useTablePersistence({ key: 'my-table', version: 1 })\n *\n * // Controlled mode (recommended) — persistence manages state:\n * const table = useTable({\n * data,\n * columns,\n * initialState: persistence.initialState,\n * state: persistence.state,\n * onStateChange: persistence.onStateChange,\n * })\n *\n * // Uncontrolled mode — only hydrate, no live persistence:\n * const table = useTable({\n * data,\n * columns,\n * initialState: persistence.initialState,\n * })\n * ```\n */\nexport function useTablePersistence(\n options: UseTablePersistenceOptions,\n): UseTablePersistenceReturn {\n const {\n key,\n persistedKeys = DEFAULT_PERSISTED_KEYS,\n debounce: debounceMs = 100,\n version = 0,\n storage: customStorage,\n } = options\n\n const storage = useMemo(() => resolveStorage(customStorage), [customStorage])\n\n // Read initial state once (during first render, never re-computed).\n const initialState = useMemo(\n () => readState(storage, key, version, persistedKeys),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- intentionally read only on mount\n [],\n )\n\n // Internal state — drives re-renders when useTable delegates to us\n const [state, setState] = useState<Partial<TableState>>(initialState)\n\n // Refs for debounced writes\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Stable refs for options so the callback identity never changes\n const keyRef = useRef(key)\n keyRef.current = key\n const versionRef = useRef(version)\n versionRef.current = version\n const persistedKeysRef = useRef(persistedKeys)\n persistedKeysRef.current = persistedKeys\n const debounceRef = useRef(debounceMs)\n debounceRef.current = debounceMs\n const storageRef = useRef(storage)\n storageRef.current = storage\n\n const onStateChange = useCallback((updater: Updater<TableState>) => {\n setState((prev) => {\n const next = functionalUpdate(updater, prev as TableState)\n\n // Debounced storage write\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current)\n }\n timerRef.current = setTimeout(() => {\n const sliced = pick(\n next as unknown as Record<string, unknown>,\n persistedKeysRef.current,\n ) as Partial<TableState>\n writeState(storageRef.current, keyRef.current, versionRef.current, sliced)\n timerRef.current = null\n }, debounceRef.current)\n\n return next\n })\n }, [])\n\n // Clean up pending timer on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current)\n }\n }\n }, [])\n\n const clearPersistedState = useCallback(() => {\n const s = storageRef.current\n if (s) {\n try {\n s.removeItem(keyRef.current)\n } catch {\n // Ignore\n }\n }\n }, [])\n\n return { initialState, state, onStateChange, clearPersistedState }\n}\n","// @zvndev/yable-react — Row virtualization hook\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nexport interface VirtualRow {\n index: number\n start: number\n size: number\n}\n\nexport interface UseVirtualizationOptions {\n containerRef: React.RefObject<HTMLElement | null>\n totalRows: number\n rowHeight?: number | ((index: number) => number)\n overscan?: number\n estimateRowHeight?: number\n /** Pre-computed row heights from Pretext measurement (Float64Array indexed by row) */\n pretextHeights?: Float64Array | null\n /** Pre-computed prefix sums for O(log n) scroll lookups */\n pretextPrefixSums?: Float64Array | null\n /**\n * Opaque key that changes when column widths change.\n * When this value changes the height cache is invalidated because column\n * resizing can affect text wrapping and therefore row heights.\n */\n columnSizingHash?: string | number\n}\n\nexport interface UseVirtualizationResult {\n virtualRows: VirtualRow[]\n totalHeight: number\n startIndex: number\n endIndex: number\n scrollTo: (index: number) => void\n /**\n * Manually clear the row-height cache and force recalculation.\n * Call this when cell content changes (data mutations, font-size changes, etc.)\n * that may affect row heights.\n */\n invalidateRowHeights: () => void\n}\n\nconst EMPTY_RESULT: Omit<UseVirtualizationResult, 'scrollTo' | 'invalidateRowHeights'> = {\n virtualRows: [],\n totalHeight: 0,\n startIndex: 0,\n endIndex: 0,\n}\n\n/**\n * Computes which rows are visible in a scrollable container and returns\n * positioning data so only those rows (plus an overscan buffer) are rendered.\n *\n * Returns `{ virtualRows, totalHeight, startIndex, endIndex, scrollTo, invalidateRowHeights }`.\n * Re-renders are triggered by scroll (rAF-throttled) and ResizeObserver\n * container resize. Supports fixed, variable, and Pretext-pre-measured heights.\n *\n * The height cache is automatically invalidated when `totalRows`, `isFixedHeight`,\n * or `columnSizingHash` changes. For manual invalidation (e.g. after data mutations\n * or font-size changes), call `invalidateRowHeights()`.\n */\nexport function useVirtualization({\n containerRef,\n totalRows,\n rowHeight = 40,\n overscan = 5,\n estimateRowHeight: _estimateRowHeight,\n pretextHeights,\n pretextPrefixSums,\n columnSizingHash,\n}: UseVirtualizationOptions): UseVirtualizationResult {\n const hasPretextHeights = !!(\n pretextHeights &&\n pretextPrefixSums &&\n pretextHeights.length >= totalRows\n )\n const isFixedHeight = typeof rowHeight === 'number' && !hasPretextHeights\n\n // Cache for variable row heights (index -> measured or estimated size)\n const heightCacheRef = useRef<Map<number, number>>(new Map())\n\n // Monotonic version counter — incremented on every cache invalidation to\n // force dependents (totalHeight, virtualRows) to recompute.\n const heightCacheVersionRef = useRef(0)\n const [heightCacheVersion, setHeightCacheVersion] = useState(0)\n\n const getRowHeight = useCallback(\n (index: number): number => {\n // Pretext heights take priority — exact pixel values.\n // Safe: hasPretextHeights verified pretextHeights.length >= totalRows and index < totalRows\n if (hasPretextHeights) return pretextHeights![index]!\n if (isFixedHeight) return rowHeight as number\n // Check cache first\n const cached = heightCacheRef.current.get(index)\n if (cached !== undefined) return cached\n // Use the rowHeight function if provided\n const height = (rowHeight as (index: number) => number)(index)\n heightCacheRef.current.set(index, height)\n return height\n },\n // heightCacheVersion forces a new callback identity after cache invalidation\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [rowHeight, isFixedHeight, hasPretextHeights, pretextHeights, heightCacheVersion],\n )\n\n const [scrollState, setScrollState] = useState<{\n scrollTop: number\n containerHeight: number\n }>({ scrollTop: 0, containerHeight: 0 })\n\n // RAF handle for scroll throttling\n const rafRef = useRef<number | null>(null)\n\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n // Initialize container dimensions\n setScrollState({\n scrollTop: container.scrollTop,\n containerHeight: container.clientHeight,\n })\n\n const handleScroll = () => {\n if (rafRef.current !== null) return\n\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = null\n const el = containerRef.current\n if (!el) return\n setScrollState({\n scrollTop: el.scrollTop,\n containerHeight: el.clientHeight,\n })\n })\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n\n // Handle container resize via ResizeObserver\n let resizeObserver: ResizeObserver | undefined\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => {\n const el = containerRef.current\n if (!el) return\n setScrollState((prev) => {\n const newHeight = el.clientHeight\n if (prev.containerHeight === newHeight) return prev\n return { ...prev, containerHeight: newHeight }\n })\n })\n resizeObserver.observe(container)\n }\n\n return () => {\n container.removeEventListener('scroll', handleScroll)\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current)\n rafRef.current = null\n }\n if (resizeObserver) {\n resizeObserver.disconnect()\n }\n }\n }, [containerRef, totalRows])\n\n // Clear height cache when totalRows changes significantly\n useEffect(() => {\n if (!isFixedHeight) {\n heightCacheRef.current.clear()\n }\n }, [totalRows, isFixedHeight])\n\n // Clear height cache when column sizing changes (text wrapping may change row heights)\n useEffect(() => {\n if (!isFixedHeight && columnSizingHash !== undefined) {\n heightCacheRef.current.clear()\n heightCacheVersionRef.current += 1\n setHeightCacheVersion(heightCacheVersionRef.current)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columnSizingHash])\n\n // Imperative cache invalidation for consumers\n const invalidateRowHeights = useCallback(() => {\n heightCacheRef.current.clear()\n heightCacheVersionRef.current += 1\n setHeightCacheVersion(heightCacheVersionRef.current)\n }, [])\n\n // scrollTo must be declared before any early returns (rules of hooks)\n const scrollTo = useCallback(\n (index: number) => {\n const container = containerRef.current\n if (!container || totalRows === 0) return\n const clampedIndex = Math.max(0, Math.min(index, totalRows - 1))\n\n if (hasPretextHeights && pretextPrefixSums!) {\n // Instant: prefix sums give us the exact offset.\n // Safe: hasPretextHeights verified length, clampedIndex < totalRows <= pretextPrefixSums.length\n container.scrollTop = pretextPrefixSums![clampedIndex]!\n } else if (isFixedHeight) {\n container.scrollTop = clampedIndex * (rowHeight as number)\n } else {\n let offset = 0\n for (let i = 0; i < clampedIndex; i++) {\n offset += getRowHeight(i)\n }\n container.scrollTop = offset\n }\n },\n [\n containerRef,\n totalRows,\n rowHeight,\n isFixedHeight,\n getRowHeight,\n hasPretextHeights,\n pretextPrefixSums,\n ],\n )\n\n // Compute total height — pretext prefix sums give us this for free\n const totalHeight = useMemo(() => {\n if (totalRows === 0) return 0\n // Safe: prefixSums has length data.length + 1, totalRows === data.length, so [totalRows] exists\n if (hasPretextHeights && pretextPrefixSums!) return pretextPrefixSums![totalRows]!\n if (isFixedHeight) return totalRows * (rowHeight as number)\n let total = 0\n for (let i = 0; i < totalRows; i++) {\n total += getRowHeight(i)\n }\n return total\n // heightCacheVersion ensures totalHeight recalculates after cache invalidation\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n totalRows,\n rowHeight,\n isFixedHeight,\n getRowHeight,\n hasPretextHeights,\n pretextPrefixSums,\n heightCacheVersion,\n ])\n\n const { scrollTop, containerHeight } = scrollState\n\n // Edge case: no rows\n if (totalRows === 0) {\n return { ...EMPTY_RESULT, scrollTo, invalidateRowHeights }\n }\n\n // Edge case: container not yet measured\n if (containerHeight === 0) {\n return {\n virtualRows: [],\n totalHeight,\n startIndex: 0,\n endIndex: 0,\n scrollTo,\n invalidateRowHeights,\n }\n }\n\n // Find visible range\n let startIndex = 0\n let endIndex = 0\n\n if (hasPretextHeights && pretextPrefixSums!) {\n // O(log n) binary search using pre-computed prefix sums\n // Find first row whose bottom edge is past scrollTop\n let lo = 0\n let hi = totalRows - 1\n while (lo < hi) {\n const mid = (lo + hi) >>> 1\n // Safe: mid + 1 <= hi + 1 <= totalRows < prefixSums.length (length is data.length + 1)\n if (pretextPrefixSums![mid + 1]! <= scrollTop) {\n lo = mid + 1\n } else {\n hi = mid\n }\n }\n startIndex = lo\n\n // Find last row whose top edge is before scrollTop + containerHeight\n const bottomEdge = scrollTop + containerHeight\n lo = startIndex\n hi = totalRows - 1\n while (lo < hi) {\n const mid = (lo + hi + 1) >>> 1\n // Safe: mid <= hi < totalRows < prefixSums.length\n if (pretextPrefixSums![mid]! < bottomEdge) {\n lo = mid\n } else {\n hi = mid - 1\n }\n }\n endIndex = lo\n } else if (isFixedHeight) {\n const fixedH = rowHeight as number\n startIndex = Math.floor(scrollTop / fixedH)\n endIndex = Math.min(totalRows - 1, Math.ceil((scrollTop + containerHeight) / fixedH) - 1)\n } else {\n // Variable heights: walk rows to find the visible range\n let accum = 0\n let foundStart = false\n\n for (let i = 0; i < totalRows; i++) {\n const h = getRowHeight(i)\n if (!foundStart && accum + h > scrollTop) {\n startIndex = i\n foundStart = true\n }\n if (foundStart && accum >= scrollTop + containerHeight) {\n endIndex = i - 1\n break\n }\n accum += h\n if (i === totalRows - 1) {\n endIndex = i\n }\n }\n\n if (!foundStart) {\n startIndex = 0\n endIndex = 0\n }\n }\n\n // Apply overscan\n const overscanStart = Math.max(0, startIndex - overscan)\n const overscanEnd = Math.min(totalRows - 1, endIndex + overscan)\n\n // Build virtual rows\n const virtualRows: VirtualRow[] = []\n\n if (hasPretextHeights && pretextPrefixSums!) {\n // Fastest path: prefix sums give us start offsets directly.\n // Safe: i in [overscanStart, overscanEnd] ⊆ [0, totalRows - 1] < both arrays' lengths\n for (let i = overscanStart; i <= overscanEnd; i++) {\n virtualRows.push({\n index: i,\n start: pretextPrefixSums![i]!,\n size: pretextHeights![i]!,\n })\n }\n } else if (isFixedHeight) {\n const fixedH = rowHeight as number\n for (let i = overscanStart; i <= overscanEnd; i++) {\n virtualRows.push({\n index: i,\n start: i * fixedH,\n size: fixedH,\n })\n }\n } else {\n // Compute start offset for overscanStart\n let offset = 0\n for (let i = 0; i < overscanStart; i++) {\n offset += getRowHeight(i)\n }\n for (let i = overscanStart; i <= overscanEnd; i++) {\n const h = getRowHeight(i)\n virtualRows.push({\n index: i,\n start: offset,\n size: h,\n })\n offset += h\n }\n }\n\n return {\n virtualRows,\n totalHeight,\n startIndex: overscanStart,\n endIndex: overscanEnd,\n scrollTo,\n invalidateRowHeights,\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport type { Column, RowData } from '@zvndev/yable-core'\n\nexport interface VirtualColumn<TData extends RowData> {\n column: Column<TData, unknown>\n index: number\n start: number\n size: number\n}\n\nexport interface UseColumnVirtualizationOptions<TData extends RowData> {\n containerRef: React.RefObject<HTMLElement | null>\n columns: Column<TData, unknown>[]\n overscan?: number\n enabled?: boolean\n sizingKey?: string\n}\n\nexport interface UseColumnVirtualizationResult<TData extends RowData> {\n virtualColumns: VirtualColumn<TData>[]\n startOffset: number\n endOffset: number\n totalWidth: number\n visibleWidth: number\n startIndex: number\n endIndex: number\n isVirtualized: boolean\n scrollToIndex: (index: number) => void\n}\n\nfunction binarySearchOffsets(offsets: number[], target: number): number {\n let low = 0\n let high = offsets.length - 1\n\n while (low < high) {\n const mid = (low + high) >>> 1\n if (offsets[mid + 1]! <= target) {\n low = mid + 1\n } else {\n high = mid\n }\n }\n\n return low\n}\n\nexport function useColumnVirtualization<TData extends RowData>({\n containerRef,\n columns,\n overscan = 2,\n enabled = true,\n sizingKey,\n}: UseColumnVirtualizationOptions<TData>): UseColumnVirtualizationResult<TData> {\n const [scrollState, setScrollState] = useState({\n scrollLeft: 0,\n containerWidth: 0,\n })\n const rafRef = useRef<number | null>(null)\n\n const sizes = useMemo(\n () => columns.map((column) => column.getSize()),\n // `sizingKey` is an explicit invalidation hook for stable Column objects whose getSize value changed.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [columns, sizingKey],\n )\n\n const offsets = useMemo(() => {\n const next = new Array<number>(columns.length + 1)\n next[0] = 0\n for (let i = 0; i < columns.length; i++) {\n next[i + 1] = next[i]! + (sizes[i] ?? 0)\n }\n return next\n }, [columns.length, sizes])\n\n const totalWidth = offsets[offsets.length - 1] ?? 0\n\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n setScrollState({\n scrollLeft: container.scrollLeft,\n containerWidth: container.clientWidth,\n })\n\n const handleScroll = () => {\n if (rafRef.current !== null) return\n\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = null\n const el = containerRef.current\n if (!el) return\n setScrollState({\n scrollLeft: el.scrollLeft,\n containerWidth: el.clientWidth,\n })\n })\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n\n let resizeObserver: ResizeObserver | undefined\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(() => {\n const el = containerRef.current\n if (!el) return\n setScrollState((prev) => {\n const nextWidth = el.clientWidth\n if (prev.containerWidth === nextWidth && prev.scrollLeft === el.scrollLeft) {\n return prev\n }\n return {\n scrollLeft: el.scrollLeft,\n containerWidth: nextWidth,\n }\n })\n })\n resizeObserver.observe(container)\n }\n\n return () => {\n container.removeEventListener('scroll', handleScroll)\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current)\n rafRef.current = null\n }\n resizeObserver?.disconnect()\n }\n }, [containerRef])\n\n const scrollToIndex = useCallback(\n (index: number) => {\n const container = containerRef.current\n if (!container || columns.length === 0) return\n const clampedIndex = Math.max(0, Math.min(index, columns.length - 1))\n container.scrollLeft = offsets[clampedIndex] ?? 0\n },\n [columns.length, containerRef, offsets],\n )\n\n if (!enabled || columns.length === 0) {\n return {\n virtualColumns: columns.map((column, index) => ({\n column,\n index,\n start: offsets[index] ?? 0,\n size: sizes[index] ?? 0,\n })),\n startOffset: 0,\n endOffset: 0,\n totalWidth,\n visibleWidth: totalWidth,\n startIndex: 0,\n endIndex: Math.max(columns.length - 1, 0),\n isVirtualized: false,\n scrollToIndex,\n }\n }\n\n const { scrollLeft, containerWidth } = scrollState\n\n if (containerWidth <= 0 || totalWidth <= containerWidth) {\n return {\n virtualColumns: columns.map((column, index) => ({\n column,\n index,\n start: offsets[index] ?? 0,\n size: sizes[index] ?? 0,\n })),\n startOffset: 0,\n endOffset: 0,\n totalWidth,\n visibleWidth: totalWidth,\n startIndex: 0,\n endIndex: Math.max(columns.length - 1, 0),\n isVirtualized: false,\n scrollToIndex,\n }\n }\n\n const startIndex = binarySearchOffsets(offsets, scrollLeft)\n const endBoundary = scrollLeft + containerWidth\n const endIndex = binarySearchOffsets(offsets, Math.max(scrollLeft, endBoundary - 1))\n\n const overscanStart = Math.max(0, startIndex - overscan)\n const overscanEnd = Math.min(columns.length - 1, endIndex + overscan)\n\n const virtualColumns: VirtualColumn<TData>[] = []\n for (let i = overscanStart; i <= overscanEnd; i++) {\n virtualColumns.push({\n column: columns[i]!,\n index: i,\n start: offsets[i] ?? 0,\n size: sizes[i] ?? 0,\n })\n }\n\n const startOffset = offsets[overscanStart] ?? 0\n const visibleWidth = (offsets[overscanEnd + 1] ?? totalWidth) - startOffset\n const endOffset = totalWidth - (offsets[overscanEnd + 1] ?? totalWidth)\n\n return {\n virtualColumns,\n startOffset,\n endOffset,\n totalWidth,\n visibleWidth,\n startIndex: overscanStart,\n endIndex: overscanEnd,\n isVirtualized: true,\n scrollToIndex,\n }\n}\n","// @zvndev/yable-react — Pretext-powered row height pre-computation\n//\n// Uses @chenglou/pretext to measure text layout WITHOUT DOM access.\n// Returns exact pixel heights for every row before any rendering happens.\n// This makes virtualization pixel-perfect: no scroll jitter, no height corrections.\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\n\n// Dynamic import types — pretext is an optional dependency\ntype PreparedText = { readonly [brand: symbol]: true }\ntype LayoutResult = { lineCount: number; height: number }\ntype PrepareFn = (text: string, font: string) => PreparedText\ntype LayoutFn = (prepared: PreparedText, maxWidth: number, lineHeight: number) => LayoutResult\n\ninterface PretextModule {\n prepare: PrepareFn\n layout: LayoutFn\n clearCache: () => void\n}\n\nexport interface CellMeasurement {\n /** Column ID */\n columnId: string\n /** Column width in px */\n width: number\n /** CSS font string for this column, e.g. \"400 13px Inter\" */\n font: string\n /** Line height in px */\n lineHeight: number\n /** Vertical padding in px (top + bottom) */\n padding?: number\n /**\n * If true, this column never wraps text — Pretext skips text measurement\n * for it and contributes a constant `lineHeight + padding` to every row.\n * Use this for visual cells like progress bars and rating stars.\n */\n fixedHeight?: boolean\n}\n\nexport interface UsePretextMeasurementOptions {\n /** The row data to measure */\n data: any[]\n /** Measurement config per column — only columns that need text measurement */\n columns: CellMeasurement[]\n /** Extract the text content for a given row and column */\n getCellText: (row: any, columnId: string) => string\n /** Minimum row height in px */\n minRowHeight?: number\n /** Whether measurement is enabled */\n enabled?: boolean\n}\n\nexport interface UsePretextMeasurementResult {\n /** Map from row index → exact pixel height */\n rowHeights: Float64Array | null\n /** Pre-computed cumulative offsets for binary search (prefix sums) */\n prefixSums: Float64Array | null\n /** Total height of all rows in px */\n totalHeight: number\n /** Whether pretext is loaded and heights are computed */\n ready: boolean\n /** Time taken for prepare() phase in ms */\n prepareTimeMs: number\n /** Time taken for layout() phase in ms */\n layoutTimeMs: number\n}\n\n// Singleton: try to load pretext once\nlet pretextPromise: Promise<PretextModule | null> | null = null\n\nfunction loadPretext(): Promise<PretextModule | null> {\n if (pretextPromise) return pretextPromise\n pretextPromise = import('@chenglou/pretext')\n .then((mod) => mod as unknown as PretextModule)\n .catch(() => null)\n return pretextPromise\n}\n\n/**\n * Pre-computes exact pixel heights for every row using Pretext's\n * DOM-free text measurement.\n *\n * Returns `{ rowHeights, prefixSums, totalHeight, ready, ... }` as typed\n * arrays for cache-friendly access by the virtualizer. `prepare()` re-runs\n * when `data` or fonts change; `layout()` re-runs only when column widths\n * change (pure math, ~0.0003ms per cell).\n *\n * Gotcha: pretext is loaded lazily — `ready` flips to true on the first\n * render after the dynamic import resolves and heights are computed.\n */\nexport function usePretextMeasurement({\n data,\n columns,\n getCellText,\n minRowHeight = 32,\n enabled = true,\n}: UsePretextMeasurementOptions): UsePretextMeasurementResult {\n const [pretext, setPretext] = useState<PretextModule | null>(null)\n const [ready, setReady] = useState(false)\n const prepareTimeRef = useRef(0)\n const layoutTimeRef = useRef(0)\n\n // Stable reference for column widths (used to detect resize)\n const columnWidthsKey = columns.map((c) => `${c.columnId}:${c.width}`).join('|')\n\n // Load pretext on mount\n useEffect(() => {\n if (!enabled) return\n let cancelled = false\n loadPretext().then((mod) => {\n if (!cancelled && mod) setPretext(mod)\n })\n return () => {\n cancelled = true\n }\n }, [enabled])\n\n // Cache prepared text handles — keyed by \"text|font\"\n // These survive column resizes (only layout() needs to re-run)\n const preparedCacheRef = useRef<Map<string, PreparedText>>(new Map())\n\n // Phase 1: prepare() — runs when data or fonts change\n // Fixed-height columns are skipped here entirely (no text measurement needed).\n const preparedCells = useMemo(() => {\n if (!pretext || !enabled || data.length === 0 || columns.length === 0) return null\n\n const cache = preparedCacheRef.current\n const start = performance.now()\n const result: { rowIndex: number; columnId: string; prepared: PreparedText }[] = []\n\n for (let r = 0; r < data.length; r++) {\n for (const col of columns) {\n if (col.fixedHeight) continue\n const text = getCellText(data[r], col.columnId)\n if (!text) continue\n const key = `${text}|${col.font}`\n let prepared = cache.get(key)\n if (!prepared) {\n prepared = pretext.prepare(text, col.font)\n cache.set(key, prepared)\n }\n result.push({ rowIndex: r, columnId: col.columnId, prepared })\n }\n }\n\n prepareTimeRef.current = performance.now() - start\n return result\n // Re-run when data changes or fonts change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n pretext,\n enabled,\n data,\n columns.map((c) => `${c.columnId}:${c.font}:${c.fixedHeight ? 'F' : 'T'}`).join('|'),\n ])\n\n // Phase 2: layout() — runs when column widths change (pure math, instant)\n const measurement = useMemo(() => {\n if (!pretext || !preparedCells) {\n return { rowHeights: null, prefixSums: null, totalHeight: 0 }\n }\n\n const start = performance.now()\n const rowHeights = new Float64Array(data.length).fill(minRowHeight)\n\n // Column config lookup\n const colMap = new Map<string, CellMeasurement>()\n for (const col of columns) colMap.set(col.columnId, col)\n\n // Seed every row with the tallest fixed-height column contribution.\n // These don't depend on text, so they can be applied up front in O(rows).\n let fixedFloor = 0\n for (const col of columns) {\n if (col.fixedHeight) {\n const h = col.lineHeight + (col.padding ?? 0)\n if (h > fixedFloor) fixedFloor = h\n }\n }\n if (fixedFloor > 0) {\n for (let r = 0; r < data.length; r++) {\n // Safe: r < data.length === rowHeights.length (Float64Array allocated above)\n if (fixedFloor > rowHeights[r]!) rowHeights[r] = fixedFloor\n }\n }\n\n // Layout every text cell and take max height per row\n for (const { rowIndex, columnId, prepared } of preparedCells) {\n const col = colMap.get(columnId)\n if (!col) continue\n const result = pretext.layout(prepared, col.width, col.lineHeight)\n const cellHeight = result.height + (col.padding ?? 16)\n // Safe: rowIndex came from iterating `0..data.length` when building preparedCells\n if (cellHeight > rowHeights[rowIndex]!) {\n rowHeights[rowIndex] = cellHeight\n }\n }\n\n // Build prefix sums for O(log n) binary search in virtualizer\n const prefixSums = new Float64Array(data.length + 1)\n for (let i = 0; i < data.length; i++) {\n // Safe: i < data.length, and prefixSums has length data.length + 1\n prefixSums[i + 1] = prefixSums[i]! + rowHeights[i]!\n }\n\n layoutTimeRef.current = performance.now() - start\n\n return {\n rowHeights,\n prefixSums,\n // Safe: prefixSums has length data.length + 1, so [data.length] always exists\n totalHeight: prefixSums[data.length]!,\n }\n // Re-run on column width changes (layout is pure math, ~15ms for 50k cells)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pretext, preparedCells, columnWidthsKey, minRowHeight, data.length])\n\n // Mark ready once we have heights\n useEffect(() => {\n if (measurement.rowHeights) setReady(true)\n }, [measurement.rowHeights])\n\n return {\n rowHeights: measurement.rowHeights,\n prefixSums: measurement.prefixSums,\n totalHeight: measurement.totalHeight,\n ready,\n prepareTimeMs: prepareTimeRef.current,\n layoutTimeMs: layoutTimeRef.current,\n }\n}\n","// @zvndev/yable-react — CellBadge display component\n// Renders categorical data as a styled pill/badge.\n// Theme-aware via CSS custom properties.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellBadgeProps, CellMeasureRecipe } from './types'\n\n/**\n * Default text-measurement recipe for badge cells.\n * Single-line text with theme-default font + standard padding.\n * Consumers can override per-column via `column.measureRecipe`.\n */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '500 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nexport function CellBadge<TData extends RowData, TValue>({\n context,\n variant = 'default',\n appearance = 'soft',\n className,\n}: CellBadgeProps & { context: CellContext<TData, TValue> }) {\n const value = context.getValue()\n if (value == null || value === '') return null\n\n const classNames = [\n 'yable-cell-badge',\n `yable-cell-badge--${variant}`,\n `yable-cell-badge--${appearance}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <span className={classNames}>{String(value)}</span>\n}\n\nCellBadge.displayName = 'CellBadge'\n","// @zvndev/yable-react — CellCurrency display component\n// Renders numbers as formatted currency with tabular figures.\n\nimport { useMemo } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellCurrencyProps, CellMeasureRecipe } from './types'\n\n/**\n * Currency cells render numbers using tabular figures and never wrap.\n * Treated as a single text line with theme-default body font.\n */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nexport function CellCurrency<TData extends RowData, TValue>({\n context,\n currency = 'USD',\n locale = 'en-US',\n decimals,\n colorize = false,\n className,\n}: CellCurrencyProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const num = typeof raw === 'number' ? raw : Number(raw)\n\n const formatter = useMemo(\n () =>\n new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: decimals ?? 0,\n maximumFractionDigits: decimals ?? 0,\n }),\n [locale, currency, decimals]\n )\n\n if (raw == null || isNaN(num)) return null\n\n const classNames = [\n 'yable-cell-currency',\n colorize && num > 0 && 'yable-cell-currency--positive',\n colorize && num < 0 && 'yable-cell-currency--negative',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <span className={classNames}>{formatter.format(num)}</span>\n}\n\nCellCurrency.displayName = 'CellCurrency'\n","// @zvndev/yable-react — CellStatus display component\n// Renders a status dot + label for state indicators.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellStatusProps, CellMeasureRecipe } from './types'\n\n/** Status pill: short, single-line label paired with a color dot. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '500 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nconst DEFAULT_COLOR_MAP: Record<string, string> = {\n active: 'success',\n inactive: 'danger',\n enabled: 'success',\n disabled: 'danger',\n published: 'success',\n draft: 'warning',\n review: 'info',\n pending: 'warning',\n archived: 'default',\n error: 'danger',\n failed: 'danger',\n success: 'success',\n complete: 'success',\n completed: 'success',\n cancelled: 'danger',\n canceled: 'danger',\n true: 'success',\n false: 'danger',\n}\n\nexport function CellStatus<TData extends RowData, TValue>({\n context,\n colorMap,\n className,\n}: CellStatusProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n if (raw == null) return null\n\n const label = String(raw)\n const normalizedKey = label.toLowerCase().trim()\n\n // Resolve color: user map first, then defaults, then 'default'\n const color = colorMap?.[normalizedKey]\n ?? colorMap?.[label]\n ?? DEFAULT_COLOR_MAP[normalizedKey]\n ?? 'default'\n\n const classNames = [\n 'yable-cell-status',\n `yable-cell-status--${color}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <span className={classNames}>{label}</span>\n}\n\nCellStatus.displayName = 'CellStatus'\n","// @zvndev/yable-react — CellNumeric display component\n// Right-aligned number with tabular figures and optional unit suffix.\n\nimport { useMemo } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellNumericProps, CellMeasureRecipe } from './types'\n\n/** Right-aligned tabular number. Always single-line. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nexport function CellNumeric<TData extends RowData, TValue>({\n context,\n locale = 'en-US',\n unit,\n decimals,\n colorize = false,\n className,\n}: CellNumericProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const num = typeof raw === 'number' ? raw : Number(raw)\n\n const formatter = useMemo(\n () =>\n new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n }),\n [locale, decimals]\n )\n\n if (raw == null || isNaN(num)) return null\n\n const classNames = [\n 'yable-cell-numeric',\n colorize && num > 0 && 'yable-cell-numeric--positive',\n colorize && num < 0 && 'yable-cell-numeric--negative',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <span className={classNames}>\n {formatter.format(num)}\n {unit && <span className=\"yable-cell-numeric__unit\">{unit}</span>}\n </span>\n )\n}\n\nCellNumeric.displayName = 'CellNumeric'\n","// @zvndev/yable-react — CellRating display component\n// Renders a rating value as filled/empty characters (stars by default).\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellRatingProps, CellMeasureRecipe } from './types'\n\n/**\n * Rating cells render a fixed-width row of glyphs and never wrap.\n * `fixedHeight` tells Pretext to skip text measurement and just contribute\n * the row's intrinsic visual height.\n */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n fixedHeight: true,\n}\n\nexport function CellRating<TData extends RowData, TValue>({\n context,\n max = 5,\n character = '\\u2605',\n emptyCharacter = '\\u2606',\n className,\n}: CellRatingProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const num = typeof raw === 'number' ? raw : Number(raw)\n\n if (raw == null || isNaN(num)) return null\n\n const filled = Math.min(Math.max(Math.round(num), 0), max)\n\n return (\n <span className={`yable-cell-rating ${className ?? ''}`} aria-label={`${filled} of ${max}`}>\n <span className=\"yable-cell-rating__filled\">{character.repeat(filled)}</span>\n <span className=\"yable-cell-rating__empty\">{emptyCharacter.repeat(max - filled)}</span>\n </span>\n )\n}\n\nCellRating.displayName = 'CellRating'\n","// @zvndev/yable-react — CellBoolean display component\n// Visual true/false indicator with dot, badge, or icon modes.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellBooleanProps, CellMeasureRecipe } from './types'\n\n/** Boolean indicator: short single-line label, sometimes with a dot. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '500 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nexport function CellBoolean<TData extends RowData, TValue>({\n context,\n trueLabel = 'Active',\n falseLabel = 'Inactive',\n mode = 'dot',\n className,\n}: CellBooleanProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const bool = Boolean(raw)\n const label = bool ? trueLabel : falseLabel\n const variant = bool ? 'success' : 'danger'\n\n const classNames = [\n 'yable-cell-boolean',\n `yable-cell-boolean--${variant}`,\n `yable-cell-boolean--${mode}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <span className={classNames}>{label}</span>\n}\n\nCellBoolean.displayName = 'CellBoolean'\n","// @zvndev/yable-react — CellProgress display component\n// Inline progress bar for percentage or bounded numeric values.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellProgressProps, CellMeasureRecipe } from './types'\n\n/**\n * Progress cells render a fixed-height bar (and optional label).\n * `fixedHeight` tells Pretext to skip text measurement entirely.\n */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n fixedHeight: true,\n}\n\nexport function CellProgress<TData extends RowData, TValue>({\n context,\n max = 100,\n variant = 'accent',\n showLabel = true,\n className,\n}: CellProgressProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n const num = typeof raw === 'number' ? raw : Number(raw)\n\n if (raw == null || isNaN(num)) return null\n\n const pct = Math.min(Math.max((num / max) * 100, 0), 100)\n\n const classNames = [\n 'yable-cell-progress',\n `yable-cell-progress--${variant}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <span className={classNames}>\n <span className=\"yable-cell-progress__track\">\n <span\n className=\"yable-cell-progress__fill\"\n style={{ width: `${pct}%` }}\n />\n </span>\n {showLabel && (\n <span className=\"yable-cell-progress__label\">{Math.round(pct)}%</span>\n )}\n </span>\n )\n}\n\nCellProgress.displayName = 'CellProgress'\n","// @zvndev/yable-react — CellDate display component\n// Formatted date display with preset and custom format support.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellDateProps, CellMeasureRecipe } from './types'\n\n/** Date cells render a single line of formatted text. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nconst PRESETS: Record<string, Intl.DateTimeFormatOptions> = {\n short: { month: 'numeric', day: 'numeric', year: '2-digit' },\n medium: { month: 'short', day: 'numeric', year: 'numeric' },\n long: { month: 'long', day: 'numeric', year: 'numeric' },\n}\n\nconst rtf =\n typeof Intl !== 'undefined' && Intl.RelativeTimeFormat\n ? new Intl.RelativeTimeFormat('en', { numeric: 'auto' })\n : null\n\nfunction formatRelative(date: Date): string {\n if (!rtf) return date.toLocaleDateString()\n const diffMs = date.getTime() - Date.now()\n const diffDays = Math.round(diffMs / (1000 * 60 * 60 * 24))\n if (Math.abs(diffDays) < 1) return 'today'\n if (Math.abs(diffDays) < 30) return rtf.format(diffDays, 'day')\n if (Math.abs(diffDays) < 365) return rtf.format(Math.round(diffDays / 30), 'month')\n return rtf.format(Math.round(diffDays / 365), 'year')\n}\n\nexport function CellDate<TData extends RowData, TValue>({\n context,\n format = 'medium',\n locale = 'en-US',\n className,\n}: CellDateProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n if (raw == null) return null\n\n const date = raw instanceof Date ? raw : new Date(String(raw))\n if (isNaN(date.getTime())) return <span className=\"yable-cell-date\">{String(raw)}</span>\n\n const formatter =\n typeof format === 'string' && format !== 'relative'\n ? new Intl.DateTimeFormat(locale, {\n ...PRESETS[format],\n timeZone: 'UTC',\n })\n : typeof format === 'object'\n ? new Intl.DateTimeFormat(locale, { ...format, timeZone: 'UTC' })\n : null\n\n const formatted =\n format === 'relative'\n ? formatRelative(date)\n : formatter\n ? formatter.format(date)\n : date.toLocaleDateString(locale)\n\n return (\n <span className={`yable-cell-date ${className ?? ''}`} title={date.toISOString()}>\n {formatted}\n </span>\n )\n}\n\nCellDate.displayName = 'CellDate'\n","// @zvndev/yable-react — CellLink display component\n// Clickable link cell with external link support.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport type { CellLinkProps, CellMeasureRecipe } from './types'\n\n/** Link cells render the target text/URL on a single line. */\nexport const measureRecipe: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\nfunction isSafeUrl(url: string): boolean {\n const normalized = String(url).trim()\n // Allow relative URLs (start with / or # or ?)\n if (/^[/#?]/.test(normalized)) return true\n try {\n const parsed = new URL(normalized, 'https://placeholder.invalid')\n return ['http:', 'https:', 'mailto:', 'tel:'].includes(parsed.protocol)\n } catch {\n return false\n }\n}\n\nexport function CellLink<TData extends RowData, TValue>({\n context,\n href,\n external = false,\n className,\n}: CellLinkProps & { context: CellContext<TData, TValue> }) {\n const raw = context.getValue()\n if (raw == null || raw === '') return null\n\n const label = String(raw)\n const url = typeof href === 'function' ? href(raw) : (href ?? label)\n\n const safeUrl = isSafeUrl(url) ? url : undefined\n\n if (!safeUrl) {\n return <span className={`yable-cell-link ${className ?? ''}`}>{label}</span>\n }\n\n return (\n <a\n href={safeUrl}\n className={`yable-cell-link ${className ?? ''}`}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n >\n {label}\n {external && (\n <span className=\"yable-cell-link__icon\" aria-hidden>\n &#8599;\n </span>\n )}\n </a>\n )\n}\n\nCellLink.displayName = 'CellLink'\n","// @zvndev/yable-react — Cell type resolver\n// Maps declarative cellType strings to display cell components AND\n// to text-measurement recipes used by Pretext auto-measurement.\n\nimport type { RowData, CellContext } from '@zvndev/yable-core'\nimport { CellBadge, measureRecipe as badgeRecipe } from './CellBadge'\nimport { CellCurrency, measureRecipe as currencyRecipe } from './CellCurrency'\nimport { CellStatus, measureRecipe as statusRecipe } from './CellStatus'\nimport { CellNumeric, measureRecipe as numericRecipe } from './CellNumeric'\nimport { CellRating, measureRecipe as ratingRecipe } from './CellRating'\nimport { CellBoolean, measureRecipe as booleanRecipe } from './CellBoolean'\nimport { CellProgress, measureRecipe as progressRecipe } from './CellProgress'\nimport { CellDate, measureRecipe as dateRecipe } from './CellDate'\nimport { CellLink, measureRecipe as linkRecipe } from './CellLink'\nimport type { CellMeasureRecipe } from './types'\n\nconst CELL_TYPE_MAP: Record<string, React.ComponentType<any>> = {\n badge: CellBadge,\n currency: CellCurrency,\n status: CellStatus,\n numeric: CellNumeric,\n rating: CellRating,\n boolean: CellBoolean,\n progress: CellProgress,\n date: CellDate,\n link: CellLink,\n}\n\nconst MEASURE_RECIPE_MAP: Record<string, CellMeasureRecipe> = {\n badge: badgeRecipe,\n currency: currencyRecipe,\n status: statusRecipe,\n numeric: numericRecipe,\n rating: ratingRecipe,\n boolean: booleanRecipe,\n progress: progressRecipe,\n date: dateRecipe,\n link: linkRecipe,\n}\n\nexport function resolveCellType<TData extends RowData, TValue>(\n cellType: string,\n context: CellContext<TData, TValue>,\n props?: Record<string, unknown>,\n): React.ReactNode {\n const Component = CELL_TYPE_MAP[cellType]\n if (!Component) return context.renderValue() as React.ReactNode\n return <Component context={context} {...props} />\n}\n\n/**\n * Look up the measure recipe for a built-in cell type. Returns `undefined`\n * for unknown types so callers can fall back to a default text recipe.\n */\nexport function getMeasureRecipeForCellType(cellType: string): CellMeasureRecipe | undefined {\n return MEASURE_RECIPE_MAP[cellType]\n}\n\n/** Read-only access to the registered cell type ids — useful for tooling. */\nexport function getRegisteredCellTypes(): readonly string[] {\n return Object.keys(CELL_TYPE_MAP)\n}\n","// @zvndev/yable-react — Pretext auto-measurement helpers\n//\n// Bridges the declarative cell-type system to Pretext: given a list of\n// columns, derive the per-column `CellMeasurement[]` that\n// `usePretextMeasurement` needs, without making the consumer hand-write\n// font strings, line-heights, or padding numbers.\n//\n// Resolution order for each column:\n// 1. `column.measureRecipe` (explicit per-column override)\n// 2. `getMeasureRecipeForCellType(column.cellType)` (built-in recipe)\n// 3. The default text recipe passed to this hook (theme-derived)\n\nimport { useMemo } from 'react'\nimport type { ColumnDef, RowData } from '@zvndev/yable-core'\nimport { getMeasureRecipeForCellType } from '../cells/resolver'\nimport type { CellMeasureRecipe } from '../cells/types'\nimport type { CellMeasurement } from './usePretextMeasurement'\n\nexport interface AutoMeasurementsOptions<TData extends RowData> {\n /** Columns to measure — usually the same array passed into `useTable`. */\n columns: ColumnDef<TData, any>[]\n /**\n * Default recipe for columns that don't declare a `cellType` or\n * `measureRecipe`. This is the theme's body text style.\n */\n defaultRecipe: CellMeasureRecipe\n /**\n * Override how a column's pixel width is determined. Defaults to\n * `column.size ?? 150`. Provide this when you want auto-measurement to\n * track live column resizing — e.g. `(col) => table.getColumn(col.id)?.getSize() ?? 150`.\n */\n getColumnWidth?: (column: ColumnDef<TData, any>) => number\n /**\n * Optional filter — return false to skip a column entirely (e.g. select\n * checkboxes, action buttons). Defaults to skipping columns whose id\n * starts with `_` or matches common non-data ids.\n */\n shouldMeasureColumn?: (column: ColumnDef<TData, any>) => boolean\n}\n\nconst NON_DATA_COLUMN_IDS = new Set(['select', 'expand', 'drag', 'actions'])\n\nfunction getColumnId<TData extends RowData>(col: ColumnDef<TData, any>): string | undefined {\n const id = (col as { id?: string }).id ?? (col as { accessorKey?: string }).accessorKey\n return typeof id === 'string' ? id : undefined\n}\n\nfunction defaultShouldMeasure<TData extends RowData>(col: ColumnDef<TData, any>): boolean {\n const id = getColumnId(col)\n if (!id) return false\n if (id.startsWith('_')) return false\n if (NON_DATA_COLUMN_IDS.has(id)) return false\n return true\n}\n\nfunction defaultGetColumnWidth<TData extends RowData>(col: ColumnDef<TData, any>): number {\n return (col as { size?: number }).size ?? 150\n}\n\n/**\n * Resolve the measure recipe for a single column, walking the precedence\n * chain (per-column override → cellType built-in → default).\n */\nexport function resolveMeasureRecipe<TData extends RowData>(\n column: ColumnDef<TData, any>,\n defaultRecipe: CellMeasureRecipe,\n): CellMeasureRecipe {\n const explicit = (column as { measureRecipe?: CellMeasureRecipe }).measureRecipe\n if (explicit) return explicit\n\n const cellType = (column as { cellType?: string }).cellType\n if (cellType) {\n const fromCellType = getMeasureRecipeForCellType(cellType)\n if (fromCellType) return fromCellType\n }\n\n return defaultRecipe\n}\n\n/**\n * Build a `CellMeasurement[]` from columns, suitable for handing to\n * `usePretextMeasurement`. Pure derivation — no table instance required.\n */\nexport function useAutoMeasurements<TData extends RowData>({\n columns,\n defaultRecipe,\n getColumnWidth = defaultGetColumnWidth,\n shouldMeasureColumn = defaultShouldMeasure,\n}: AutoMeasurementsOptions<TData>): CellMeasurement[] {\n // Stable key over the inputs that actually affect the result. Re-keying\n // when widths change ensures column resizing re-runs the layout phase\n // even though the columns array reference is stable.\n const widthKey = columns\n .map((c) => `${getColumnId(c) ?? '?'}:${getColumnWidth(c)}`)\n .join('|')\n\n return useMemo(() => {\n const result: CellMeasurement[] = []\n for (const col of columns) {\n const id = getColumnId(col)\n if (!id) continue\n if (!shouldMeasureColumn(col)) continue\n\n const recipe = resolveMeasureRecipe(col, defaultRecipe)\n result.push({\n columnId: id,\n width: getColumnWidth(col),\n font: recipe.font,\n lineHeight: recipe.lineHeight,\n padding: recipe.padding,\n fixedHeight: recipe.fixedHeight,\n })\n }\n return result\n // widthKey + columns + defaultRecipe identity captures every input.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [widthKey, columns, defaultRecipe, shouldMeasureColumn, getColumnWidth])\n}\n","// @zvndev/yable-react — One-call row-height computation for declarative tables\n//\n// Combines `useAutoMeasurements` (column-defs → measurement specs) with\n// `usePretextMeasurement` (specs → exact pixel heights). Most users\n// shouldn't need to touch CellMeasurement, fonts, or paddings — they\n// just declare `cellType: 'currency'` on their columns and call this hook.\n\nimport { useMemo } from 'react'\nimport type { ColumnDef, RowData } from '@zvndev/yable-core'\nimport {\n usePretextMeasurement,\n type CellMeasurement,\n type UsePretextMeasurementResult,\n} from './usePretextMeasurement'\nimport { useAutoMeasurements } from './useAutoMeasurements'\nimport type { CellMeasureRecipe } from '../cells/types'\n\nexport interface UseTableRowHeightsOptions<TData extends RowData> {\n /** Row data being measured. */\n data: TData[]\n /** Column definitions (the same array passed into `useTable`). */\n columns: ColumnDef<TData, any>[]\n /**\n * Default text recipe for columns without an explicit `cellType` /\n * `measureRecipe`. Should reflect the active theme's body text style.\n */\n defaultRecipe?: CellMeasureRecipe\n /**\n * Override how a column's pixel width is determined. Defaults to\n * `column.size ?? 150`. Provide this when you want pretext to track\n * live column resizing — e.g. `(c) => table.getColumn(c.id)?.getSize() ?? 150`.\n */\n getColumnWidth?: (column: ColumnDef<TData, any>) => number\n /** Minimum row height in px (default: 36). */\n minRowHeight?: number\n /** Disable measurement entirely (e.g. when virtualization is off). */\n enabled?: boolean\n}\n\n/** Sensible default that matches `@zvndev/yable-themes` `tokens.css`. */\nexport const DEFAULT_TEXT_RECIPE: CellMeasureRecipe = {\n font: '400 13px -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif',\n lineHeight: 20,\n padding: 20,\n}\n\n/**\n * Compute exact pixel row heights for the entire dataset using Pretext,\n * deriving per-column measurement specs from each column's declarative\n * `cellType` (or explicit `measureRecipe` override). No font strings,\n * line heights, or paddings to hand-write.\n *\n * Returns the same shape as `usePretextMeasurement` plus the resolved\n * `measurements` array for debugging / inspection.\n */\nexport function useTableRowHeights<TData extends RowData>({\n data,\n columns,\n defaultRecipe = DEFAULT_TEXT_RECIPE,\n getColumnWidth,\n minRowHeight = 36,\n enabled = true,\n}: UseTableRowHeightsOptions<TData>): UsePretextMeasurementResult & {\n measurements: CellMeasurement[]\n} {\n const measurements = useAutoMeasurements({\n columns,\n defaultRecipe,\n getColumnWidth,\n })\n\n // Build a fast id-keyed lookup of accessor keys so we can pull cell\n // text out of arbitrary row shapes without re-running React renders.\n const accessorMap = useMemo(() => {\n const map = new Map<string, (row: TData) => unknown>()\n for (const col of columns) {\n const id =\n (col as { id?: string }).id ?? (col as { accessorKey?: string }).accessorKey\n if (typeof id !== 'string') continue\n const accessorKey = (col as { accessorKey?: string }).accessorKey\n const accessorFn = (col as { accessorFn?: (row: TData) => unknown }).accessorFn\n if (typeof accessorFn === 'function') {\n map.set(id, accessorFn)\n } else if (typeof accessorKey === 'string') {\n map.set(id, (row) => (row as Record<string, unknown>)[accessorKey])\n } else {\n map.set(id, (row) => (row as Record<string, unknown>)[id])\n }\n }\n return map\n }, [columns])\n\n const getCellText = useMemo(\n () =>\n (row: TData, columnId: string): string => {\n const get = accessorMap.get(columnId)\n if (!get) return ''\n const value = get(row)\n if (value == null) return ''\n return typeof value === 'string' ? value : String(value)\n },\n [accessorMap],\n )\n\n const result = usePretextMeasurement({\n data,\n columns: measurements,\n getCellText,\n minRowHeight,\n enabled,\n })\n\n return { ...result, measurements }\n}\n","// @zvndev/yable-react — React context for table instance\n\nimport { createContext, useContext } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\nconst TableContext = createContext<Table<any> | null>(null)\n\nexport const TableProvider = TableContext.Provider\n\nexport function useTableContext<TData extends RowData>(): Table<TData> {\n const ctx = useContext(TableContext)\n if (!ctx) {\n throw new Error(\n '[yable E001] useTableContext must be used within a <Table> component. ' +\n 'Did you forget to pass the `table` prop?',\n )\n }\n return ctx as Table<TData>\n}\n","// @zvndev/yable-react — Sort Indicator Component\n\nimport type { SortDirection } from '@zvndev/yable-core'\n\ninterface SortIndicatorProps {\n direction: SortDirection | false\n index?: number\n}\n\nexport function SortIndicator({ direction, index }: SortIndicatorProps) {\n return (\n <span\n className=\"yable-sort-indicator\"\n data-active={direction ? 'true' : undefined}\n data-direction={direction || undefined}\n aria-hidden=\"true\"\n >\n {direction ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 3L11 8H3L7 3Z\"\n fill=\"currentColor\"\n />\n </svg>\n ) : (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ opacity: 0.3 }}\n >\n <path d=\"M7 3L11 7H3L7 3Z\" fill=\"currentColor\" />\n <path d=\"M7 11L3 7H11L7 11Z\" fill=\"currentColor\" />\n </svg>\n )}\n {index != null && index >= 0 && (\n <span className=\"yable-sort-badge\">{index + 1}</span>\n )}\n </span>\n )\n}\n","import { useState } from 'react'\nimport type { Column, RowData } from '@zvndev/yable-core'\n\ninterface SetFilterProps<TData extends RowData> {\n column: Column<TData, unknown>\n className?: string\n}\n\nfunction formatValue(value: unknown): string {\n if (value == null || value === '') return '(empty)'\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n if (value instanceof Date) return value.toISOString()\n return JSON.stringify(value)\n}\n\nexport function SetFilter<TData extends RowData>({ column, className }: SetFilterProps<TData>) {\n const [open, setOpen] = useState(false)\n const filterValue = column.getFilterValue()\n const selectedValues = Array.isArray(filterValue)\n ? filterValue\n : filterValue == null || filterValue === ''\n ? []\n : [filterValue]\n\n const facetedUniqueValues = column.getFacetedUniqueValues()\n\n const options = Array.from(facetedUniqueValues.entries())\n .map(([value, count]) => ({\n value,\n count,\n label: formatValue(value),\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n\n const selectedSet = new Set(selectedValues)\n\n const toggleValue = (value: unknown) => {\n const next = new Set(selectedSet)\n if (next.has(value)) {\n next.delete(value)\n } else {\n next.add(value)\n }\n\n const nextValues = Array.from(next)\n column.setFilterValue(nextValues.length > 0 ? nextValues : undefined)\n }\n\n const headerLabel =\n typeof column.columnDef.header === 'string' ? column.columnDef.header : column.id\n\n return (\n <div\n className={['yable-set-filter', className].filter(Boolean).join(' ')}\n style={{ position: 'relative' }}\n >\n <button\n type=\"button\"\n className=\"yable-set-filter-trigger\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n onClick={() => setOpen((prev) => !prev)}\n style={{\n width: '100%',\n minHeight: 28,\n padding: '4px 8px',\n border: '1px solid rgba(127, 127, 127, 0.35)',\n borderRadius: 6,\n background: 'transparent',\n font: 'inherit',\n textAlign: 'left',\n cursor: 'pointer',\n }}\n >\n {selectedValues.length > 0 ? `${selectedValues.length} selected` : `Filter ${headerLabel}`}\n </button>\n\n {open && (\n <div\n role=\"dialog\"\n aria-label={`${headerLabel} set filter`}\n className=\"yable-set-filter-popover\"\n style={{\n position: 'absolute',\n insetInlineStart: 0,\n top: 'calc(100% + 4px)',\n zIndex: 20,\n width: 220,\n maxHeight: 240,\n overflow: 'auto',\n padding: 8,\n border: '1px solid rgba(127, 127, 127, 0.35)',\n borderRadius: 8,\n background: 'var(--yable-color-bg, #fff)',\n boxShadow: '0 10px 30px rgba(0, 0, 0, 0.12)',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n marginBottom: 8,\n }}\n >\n <strong style={{ fontSize: 12 }}>{headerLabel}</strong>\n {selectedValues.length > 0 && (\n <button\n type=\"button\"\n onClick={() => column.setFilterValue(undefined)}\n style={{\n border: 'none',\n background: 'transparent',\n padding: 0,\n cursor: 'pointer',\n fontSize: 12,\n }}\n >\n Clear\n </button>\n )}\n </div>\n\n <div role=\"group\" aria-label={`${headerLabel} options`}>\n {options.length === 0 && <div style={{ fontSize: 12, opacity: 0.75 }}>No values</div>}\n {options.map((option) => {\n const checked = selectedSet.has(option.value)\n return (\n <label\n key={`${option.label}-${option.count}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '4px 0',\n fontSize: 12,\n }}\n >\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => toggleValue(option.value)}\n />\n <span style={{ flex: 1 }}>{option.label}</span>\n <span style={{ opacity: 0.6 }}>{option.count}</span>\n </label>\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import type { Column, RowData } from '@zvndev/yable-core'\nimport { SetFilter } from './SetFilter'\n\ninterface FloatingFilterProps<TData extends RowData> {\n column: Column<TData, unknown>\n}\n\ntype FilterVariant = 'text' | 'set'\n\nfunction isSetCompatibleValue(value: unknown): boolean {\n return (\n value == null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n}\n\nfunction inferFilterVariant<TData extends RowData>(column: Column<TData, unknown>): FilterVariant {\n const meta = (column.columnDef.meta ?? {}) as { filterVariant?: FilterVariant }\n if (meta.filterVariant) return meta.filterVariant\n\n const uniqueValues = column.getFacetedUniqueValues()\n if (uniqueValues.size > 0 && uniqueValues.size <= 12) {\n const allValuesSupported = Array.from(uniqueValues.keys()).every(isSetCompatibleValue)\n if (allValuesSupported) return 'set'\n }\n\n return 'text'\n}\n\nexport function FloatingFilter<TData extends RowData>({ column }: FloatingFilterProps<TData>) {\n const variant = inferFilterVariant(column)\n\n if (!column.getCanFilter()) {\n return <div style={{ minHeight: 28 }} aria-hidden=\"true\" />\n }\n\n if (variant === 'set') {\n return <SetFilter column={column} />\n }\n\n const filterValue = column.getFilterValue()\n const normalizedValue =\n typeof filterValue === 'string' || typeof filterValue === 'number' ? String(filterValue) : ''\n\n const label = typeof column.columnDef.header === 'string' ? column.columnDef.header : column.id\n\n return (\n <label style={{ display: 'block' }}>\n <input\n aria-label={`Filter ${label}`}\n className=\"yable-floating-filter-input\"\n value={normalizedValue}\n onChange={(event) => {\n const nextValue = event.target.value\n column.setFilterValue(nextValue === '' ? undefined : nextValue)\n }}\n placeholder={`Filter ${label}`}\n style={{\n width: '100%',\n minHeight: 28,\n padding: '4px 8px',\n border: '1px solid rgba(127, 127, 127, 0.35)',\n borderRadius: 6,\n background: 'transparent',\n font: 'inherit',\n }}\n />\n </label>\n )\n}\n","// @zvndev/yable-react — Table Header Component\n\nimport React, { useCallback, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport type {\n RowData,\n Table,\n Header as HeaderType,\n Column as ColumnType,\n ColumnOrderState,\n HeaderContext,\n HeaderClickEvent,\n} from '@zvndev/yable-core'\nimport { SortIndicator } from './SortIndicator'\nimport { FloatingFilter } from './FloatingFilter'\n\ninterface TableHeaderProps<TData extends RowData> {\n table: Table<TData>\n floatingFilters?: boolean\n}\n\ninterface ColumnDragState {\n columnId: string\n fromIndex: number\n /** Insertion index among visible leaf columns (0..n). */\n toIndex: number\n /** Live pointer x in viewport coordinates. */\n pointerX: number\n /** pointerX − draggedColumnLeft at grab time, so the ghost tracks the grab point. */\n grabOffsetX: number\n /** Dragged column width (px) — the distance other columns slide to make room. */\n width: number\n /** Top/height of the header row (viewport coords) for the floating ghost. */\n top: number\n height: number\n /** Snapshot of each visible leaf column's left/width at drag start. */\n layout: { id: string; left: number; width: number }[]\n}\n\nconst REORDER_TRANSITION = 'transform 180ms cubic-bezier(0.2, 0, 0, 1)'\n\n/**\n * The slide offset (px) for the column at visible index `i` during a reorder:\n * columns between the source and the insertion point shift by ±draggedWidth to\n * open a gap; the source stays put (it rides in the floating ghost).\n */\nfunction transformAt(i: number, d: ColumnDragState): number {\n if (i === d.fromIndex) return 0\n if (d.toIndex > d.fromIndex) return i > d.fromIndex && i < d.toIndex ? -d.width : 0\n return i >= d.toIndex && i < d.fromIndex ? d.width : 0\n}\n\nexport function TableHeader<TData extends RowData>({\n table,\n floatingFilters = false,\n}: TableHeaderProps<TData>) {\n const headerGroups = table.getHeaderGroups()\n const visibleColumns = table.getVisibleLeafColumns()\n const theadRef = useRef<HTMLTableSectionElement>(null)\n // Set on every reorder end; used to suppress the click-to-sort that fires\n // right after a pointer drag releases.\n const reorderEndRef = useRef(0)\n\n const [drag, setDrag] = useState<ColumnDragState | null>(null)\n\n const commitReorder = useCallback(\n (d: ColumnDragState) => {\n // No visible movement → nothing to commit.\n if (d.toIndex === d.fromIndex || d.toIndex === d.fromIndex + 1) return\n\n const order = table.getState().columnOrder\n const base = order && order.length > 0 ? [...order] : d.layout.map((l) => l.id)\n const targetId = d.toIndex < d.layout.length ? d.layout[d.toIndex]!.id : null\n const next = base.filter((id) => id !== d.columnId)\n let insertAt = targetId ? next.indexOf(targetId) : next.length\n if (insertAt === -1) insertAt = next.length\n next.splice(insertAt, 0, d.columnId)\n table.setColumnOrder(next as ColumnOrderState)\n },\n [table],\n )\n\n const beginReorder = useCallback(\n (e: React.PointerEvent<HTMLDivElement>, columnId: string) => {\n // Left button / primary pointer only.\n if (e.button !== 0) return\n const thead = theadRef.current\n if (!thead) return\n\n const startX = e.clientX\n const startY = e.clientY\n\n // Snapshot the leaf-column layout from the live DOM.\n const layout: { id: string; left: number; width: number }[] = []\n let top = 0\n let height = 0\n for (const c of visibleColumns) {\n const th = thead.querySelector<HTMLElement>(`th[data-column-id=\"${CSS.escape(c.id)}\"]`)\n if (!th) return\n const r = th.getBoundingClientRect()\n layout.push({ id: c.id, left: r.left, width: r.width })\n if (c.id === columnId) {\n top = r.top\n height = r.height\n }\n }\n const fromIndex = layout.findIndex((l) => l.id === columnId)\n if (fromIndex < 0) return\n const src = layout[fromIndex]!\n\n // Body cells slide in lockstep with the header. We drive them imperatively\n // (no per-frame React re-render of the virtualized body); TableCell never\n // sets transform/transition/opacity, so these are safe to add and clear.\n const bodyRoot = thead.closest('table')\n const applyBody = (d: ColumnDragState) => {\n if (!bodyRoot) return\n visibleColumns.forEach((col, i) => {\n if (col.getIsPinned()) return // sticky cells can't be transformed\n const tx = transformAt(i, d)\n bodyRoot\n .querySelectorAll<HTMLElement>(`td[data-column-id=\"${CSS.escape(col.id)}\"]`)\n .forEach((td) => {\n td.style.transition = REORDER_TRANSITION\n td.style.opacity = i === d.fromIndex ? '0' : ''\n td.style.transform = i !== d.fromIndex && tx ? `translateX(${tx}px)` : ''\n })\n })\n }\n const clearBody = () => {\n bodyRoot?.querySelectorAll<HTMLElement>('td[data-column-id]').forEach((td) => {\n td.style.transform = ''\n td.style.transition = ''\n td.style.opacity = ''\n })\n }\n\n let started = false\n let latest: ColumnDragState = {\n columnId,\n fromIndex,\n toIndex: fromIndex,\n pointerX: startX,\n grabOffsetX: startX - src.left,\n width: src.width,\n top,\n height,\n layout,\n }\n\n const computeToIndex = (x: number) => {\n let t = layout.findIndex((l) => x < l.left + l.width / 2)\n if (t === -1) t = layout.length\n return t\n }\n\n const onMove = (ev: PointerEvent) => {\n if (!started) {\n if (Math.abs(ev.clientX - startX) < 4 && Math.abs(ev.clientY - startY) < 4) return\n started = true\n table.setColumnDragActive(true)\n document.body.style.userSelect = 'none'\n document.body.style.cursor = 'grabbing'\n }\n latest = { ...latest, pointerX: ev.clientX, toIndex: computeToIndex(ev.clientX) }\n setDrag(latest)\n applyBody(latest)\n }\n\n const finish = () => {\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', finish)\n window.removeEventListener('pointercancel', finish)\n if (started) {\n commitReorder(latest)\n reorderEndRef.current = Date.now()\n table.setColumnDragActive(false)\n document.body.style.userSelect = ''\n document.body.style.cursor = ''\n clearBody()\n }\n setDrag(null)\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', finish)\n window.addEventListener('pointercancel', finish)\n },\n [visibleColumns, table, commitReorder],\n )\n\n const transformFor = useCallback(\n (columnId: string): number => {\n if (!drag) return 0\n const i = visibleColumns.findIndex((c) => c.id === columnId)\n if (i < 0) return 0\n return transformAt(i, drag)\n },\n [drag, visibleColumns],\n )\n\n const dragColumn = drag ? visibleColumns.find((c) => c.id === drag.columnId) : null\n\n return (\n <thead className=\"yable-thead\" ref={theadRef}>\n {headerGroups.map((headerGroup) => (\n <tr key={headerGroup.id} className=\"yable-header-row\">\n {headerGroup.headers.map((header) => (\n <HeaderCell\n key={header.id}\n header={header}\n table={table}\n onReorderPointerDown={beginReorder}\n dragTransform={transformFor(header.column.id)}\n isDragSource={drag?.columnId === header.column.id}\n dragActive={drag !== null}\n reorderEndRef={reorderEndRef}\n />\n ))}\n </tr>\n ))}\n\n {floatingFilters && visibleColumns.length > 0 && (\n <tr className=\"yable-header-row yable-header-row--filters\">\n {visibleColumns.map((column) => (\n <FloatingFilterCell key={`${column.id}-filter`} column={column} />\n ))}\n </tr>\n )}\n\n {drag &&\n dragColumn &&\n typeof document !== 'undefined' &&\n createPortal(\n <div\n className=\"yable-col-drag-ghost\"\n aria-hidden=\"true\"\n style={{\n position: 'fixed',\n top: drag.top,\n left: drag.pointerX - drag.grabOffsetX,\n width: drag.width,\n height: drag.height,\n }}\n >\n {typeof dragColumn.columnDef.header === 'string'\n ? dragColumn.columnDef.header\n : dragColumn.id}\n </div>,\n document.body,\n )}\n </thead>\n )\n}\n\nfunction FloatingFilterCell<TData extends RowData>({\n column,\n}: {\n column: ColumnType<TData, unknown>\n}) {\n const style = useMemo((): React.CSSProperties => {\n const next: React.CSSProperties = {\n width: column.getSize(),\n minWidth: column.columnDef.minSize,\n maxWidth: column.columnDef.maxSize,\n padding: 6,\n verticalAlign: 'top',\n }\n\n const pinned = column.getIsPinned()\n if (pinned) {\n next.position = 'sticky'\n if (pinned === 'left') {\n next.left = column.getStart('left')\n } else {\n next.right = column.getStart('right')\n }\n }\n\n return next\n }, [column])\n\n return (\n <th className=\"yable-th yable-th--filter\" role=\"columnheader\" style={style}>\n <FloatingFilter column={column} />\n </th>\n )\n}\n\nfunction HeaderCell<TData extends RowData>({\n header,\n table,\n onReorderPointerDown,\n dragTransform,\n isDragSource,\n dragActive,\n reorderEndRef,\n}: {\n header: HeaderType<TData, unknown>\n table: Table<TData>\n onReorderPointerDown: (e: React.PointerEvent<HTMLDivElement>, columnId: string) => void\n dragTransform: number\n isDragSource: boolean\n dragActive: boolean\n reorderEndRef: React.MutableRefObject<number>\n}) {\n const column = header.column\n const canSort = column.getCanSort()\n const sortDirection = column.getIsSorted()\n const sortIndex = column.getSortIndex()\n const canResize = column.getCanResize()\n const canReorder = column.getCanReorder() && !header.isPlaceholder\n const pinned = column.getIsPinned()\n type HeaderRenderer = (ctx: HeaderContext<TData, unknown>) => React.ReactNode\n\n const headerContent = header.isPlaceholder\n ? null\n : typeof column.columnDef.header === 'function'\n ? (column.columnDef.header as HeaderRenderer)(header.getContext())\n : (column.columnDef.header ?? header.id)\n\n const style = useMemo((): React.CSSProperties => {\n const s: React.CSSProperties = {\n width: header.getSize(),\n minWidth: column.columnDef.minSize,\n maxWidth: column.columnDef.maxSize,\n }\n\n if (pinned) {\n s.position = 'sticky'\n if (pinned === 'left') {\n s.left = header.getStart('left')\n } else {\n s.right = header.getStart('right')\n }\n }\n\n // Live reorder animation. Pinned columns are excluded (they own `position`).\n // The source slot is held open (styled via [data-drag-source]); its content\n // rides in the floating ghost. Other columns slide to make room (the\n // transition is applied via the [data-reordering] CSS rule).\n if (!pinned && !isDragSource && dragTransform !== 0) {\n s.transform = `translateX(${dragTransform}px)`\n }\n\n return s\n }, [header, column, pinned, isDragSource, dragTransform])\n\n const lastResizeEndRef = useRef(0)\n\n const startResize = useCallback(\n (e: React.MouseEvent | React.TouchEvent) => {\n e.stopPropagation()\n\n const onEnd = () => {\n lastResizeEndRef.current = Date.now()\n document.removeEventListener('mouseup', onEnd, true)\n document.removeEventListener('touchend', onEnd, true)\n }\n document.addEventListener('mouseup', onEnd, true)\n document.addEventListener('touchend', onEnd, true)\n\n const handler = header.getResizeHandler()\n if (handler) (handler as (ev: unknown) => void)(e.nativeEvent)\n },\n [header],\n )\n\n const handleResizeClick = useCallback((e: React.MouseEvent) => {\n e.stopPropagation()\n }, [])\n\n const handleContentPointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (!canReorder || pinned) return\n onReorderPointerDown(e, column.id)\n },\n [canReorder, pinned, onReorderPointerDown, column.id],\n )\n\n const handleHeaderClick = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n table.events.emit('header:click', {\n column,\n header,\n originalEvent: e,\n } satisfies HeaderClickEvent<TData>)\n if (!canSort) return\n // Swallow the click that ends a resize or a reorder drag.\n if (Date.now() - lastResizeEndRef.current < 250) return\n if (Date.now() - reorderEndRef.current < 250) return\n const handler = column.getToggleSortingHandler()\n if (handler) handler(e)\n },\n [canSort, column, header, table.events, reorderEndRef],\n )\n\n const handleHeaderContextMenu = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n table.events.emit('header:contextmenu', {\n column,\n header,\n originalEvent: e,\n } satisfies HeaderClickEvent<TData>)\n },\n [column, header, table.events],\n )\n\n return (\n <th\n className=\"yable-th\"\n style={style}\n data-column-id={column.id}\n data-sortable={canSort || undefined}\n data-pinned={pinned || undefined}\n data-reorderable={(canReorder && !pinned) || undefined}\n data-reordering={(dragActive && !pinned) || undefined}\n data-drag-source={isDragSource || undefined}\n aria-sort={\n sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : canSort\n ? 'none'\n : undefined\n }\n role=\"columnheader\"\n colSpan={header.colSpan}\n onClick={handleHeaderClick}\n onContextMenu={handleHeaderContextMenu}\n >\n <div\n className=\"yable-th-content\"\n onPointerDown={canReorder && !pinned ? handleContentPointerDown : undefined}\n >\n <span>{headerContent}</span>\n {canSort && (\n <SortIndicator direction={sortDirection} index={sortIndex > 0 ? sortIndex : undefined} />\n )}\n </div>\n\n {canResize && (\n <div\n className=\"yable-resize-handle\"\n data-resizing={column.getIsResizing() || undefined}\n onMouseDown={startResize}\n onTouchStart={startResize}\n onClick={handleResizeClick}\n />\n )}\n </th>\n )\n}\n","// @zvndev/yable-react — CellStatusBadge\n//\n// Renders the error / conflict decoration over a cell when the commit\n// coordinator marks it as `error` or `conflict`. Consumers can override\n// the component via a slot prop on the table once that surface lands;\n// for now this is the default rendering.\n\ninterface CellStatusBadgeBaseProps {\n onRetry: () => void\n onDismiss: () => void\n}\n\ninterface ErrorProps extends CellStatusBadgeBaseProps {\n status: 'error'\n message: string | undefined\n}\n\ninterface ConflictProps extends CellStatusBadgeBaseProps {\n status: 'conflict'\n conflictWith: unknown\n}\n\nexport type CellStatusBadgeProps = ErrorProps | ConflictProps\n\nexport function CellStatusBadge(props: CellStatusBadgeProps) {\n if (props.status === 'error') {\n return (\n <span\n className=\"yable-cell-status-badge yable-cell-status-badge--error\"\n role=\"status\"\n aria-label={`Save failed: ${props.message ?? 'unknown error'}`}\n title={props.message}\n >\n <button\n type=\"button\"\n className=\"yable-cell-status-badge__retry\"\n onClick={(e) => {\n e.stopPropagation()\n props.onRetry()\n }}\n aria-label=\"Retry save\"\n >\n ↻\n </button>\n <button\n type=\"button\"\n className=\"yable-cell-status-badge__dismiss\"\n onClick={(e) => {\n e.stopPropagation()\n props.onDismiss()\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n </span>\n )\n }\n\n // conflict\n return (\n <span\n className=\"yable-cell-status-badge yable-cell-status-badge--conflict\"\n role=\"status\"\n aria-label={`Conflict: server has ${String(props.conflictWith)}`}\n title={`Server value: ${String(props.conflictWith)}`}\n >\n <button\n type=\"button\"\n className=\"yable-cell-status-badge__accept-mine\"\n onClick={(e) => {\n e.stopPropagation()\n props.onRetry()\n }}\n aria-label=\"Keep my change\"\n >\n ✓\n </button>\n <button\n type=\"button\"\n className=\"yable-cell-status-badge__accept-theirs\"\n onClick={(e) => {\n e.stopPropagation()\n props.onDismiss()\n }}\n aria-label=\"Accept server value\"\n >\n ✗\n </button>\n </span>\n )\n}\n","// @zvndev/yable-react — Table Cell Component\n\nimport React, { useCallback } from 'react'\nimport {\n canCellEnterEditMode,\n type CellContext,\n type RowData,\n type Table,\n type Cell,\n} from '@zvndev/yable-core'\nimport { resolveCellType } from '../cells/resolver'\nimport { CellStatusBadge } from './CellStatusBadge'\n\ninterface TableCellProps<TData extends RowData> {\n cell: Cell<TData, unknown>\n table: Table<TData>\n rowIndex: number\n columnIndex: number\n isFocused: boolean\n isTabStop: boolean\n}\n\nexport function TableCell<TData extends RowData>({\n cell,\n table,\n rowIndex,\n columnIndex,\n isFocused,\n isTabStop,\n}: TableCellProps<TData>) {\n const column = cell.column\n const isEditing = cell.getIsEditing()\n const isAlwaysEditable = cell.getIsAlwaysEditable()\n const pinned = column.getIsPinned()\n const keyboardNavigationEnabled = table.options.enableKeyboardNavigation !== false\n const cellSelectionEnabled =\n table.options.enableCellSelection !== false && column.columnDef.enableCellSelection !== false\n\n const style: React.CSSProperties = {\n width: column.getSize(),\n minWidth: column.columnDef.minSize,\n maxWidth: column.columnDef.maxSize,\n }\n\n if (pinned) {\n style.position = 'sticky'\n if (pinned === 'left') {\n style.left = column.getStart('left')\n } else {\n style.right = column.getStart('right')\n }\n }\n\n // Read coordinator state — cell status + merged render value\n const cellStatus = table.getCellStatus(cell.row.id, column.id)\n const cellErrorMessage = table.getCellErrorMessage(cell.row.id, column.id)\n const cellConflictWith = table.getCellConflictWith(cell.row.id, column.id)\n const selectionRange = table.getCellSelectionRange()\n const selectionEdges = table.getCellSelectionEdges(rowIndex, columnIndex)\n const isCellSelected = selectionEdges !== null\n const isMultiCellSelection =\n selectionRange !== null &&\n (selectionRange.start.rowIndex !== selectionRange.end.rowIndex ||\n selectionRange.start.columnIndex !== selectionRange.end.columnIndex)\n\n // When pending/error/conflict, the rendered value is the user's typed value,\n // not the saved value\n const overrideValue =\n cellStatus !== 'idle' ? table.getCellRenderValue(cell.row.id, column.id) : undefined\n\n // Determine cell content\n let content: React.ReactNode\n const cellDef = column.columnDef.cell\n const cellType = column.columnDef.cellType\n type CellRenderer = (ctx: CellContext<TData, unknown>) => React.ReactNode\n\n if (typeof cellDef === 'function') {\n const ctx = cell.getContext()\n if (overrideValue !== undefined) {\n // Override getValue() / renderValue() for this render\n const overriddenCtx = {\n ...ctx,\n getValue: () => overrideValue,\n renderValue: () => overrideValue,\n }\n content = (cellDef as CellRenderer)(overriddenCtx)\n } else {\n content = (cellDef as CellRenderer)(ctx)\n }\n } else if (cellType && !(isEditing || isAlwaysEditable)) {\n content = resolveCellType(cellType, cell.getContext(), column.columnDef.cellTypeProps)\n } else {\n content = (overrideValue !== undefined ? overrideValue : cell.renderValue()) as React.ReactNode\n }\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('cell:click', {\n cell,\n row: cell.row,\n column: cell.column,\n event: e.nativeEvent,\n } as any)\n\n // Start editing on click if column is editable\n if (\n canCellEnterEditMode(table, cell.row, column) &&\n !isAlwaysEditable &&\n !isEditing &&\n !isMultiCellSelection &&\n !e.shiftKey &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n table.startEditing(cell.row.id, column.id)\n }\n },\n [cell, column, isAlwaysEditable, isEditing, isMultiCellSelection, table],\n )\n\n const handleDoubleClick = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('cell:dblclick', {\n cell,\n row: cell.row,\n column: cell.column,\n event: e.nativeEvent,\n } as any)\n },\n [table, cell],\n )\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('cell:contextmenu', {\n cell,\n row: cell.row,\n column: cell.column,\n event: e.nativeEvent,\n } as any)\n },\n [table, cell],\n )\n\n const handleFocus = useCallback(() => {\n if (!keyboardNavigationEnabled) return\n table.setFocusedCell({ rowIndex, columnIndex })\n }, [columnIndex, keyboardNavigationEnabled, rowIndex, table])\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLTableCellElement>) => {\n if (e.button !== 0) return\n if (!cellSelectionEnabled) return\n\n const clickTarget = e.target as HTMLElement | null\n if (isInteractiveClickTarget(clickTarget)) return\n\n e.preventDefault()\n table.setFocusedCell({ rowIndex, columnIndex })\n table.startCellRangeSelection({ rowIndex, columnIndex }, { extend: e.shiftKey })\n e.currentTarget.focus({ preventScroll: true })\n },\n [cellSelectionEnabled, columnIndex, rowIndex, table],\n )\n\n const handleMouseEnter = useCallback(() => {\n if (!cellSelectionEnabled) return\n if (!table.getState().cellSelection?.isDragging) return\n table.updateCellRangeSelection({ rowIndex, columnIndex })\n }, [cellSelectionEnabled, columnIndex, rowIndex, table])\n\n const handleMouseUp = useCallback(() => {\n if (!table.getState().cellSelection?.isDragging) return\n table.endCellRangeSelection()\n }, [table])\n\n const cellClassNameDef = column.columnDef.cellClassName\n const userClassName =\n typeof cellClassNameDef === 'function' ? cellClassNameDef(cell.getContext()) : cellClassNameDef\n\n const cellStyleDef = column.columnDef.cellStyle\n const userStyle =\n typeof cellStyleDef === 'function' ? cellStyleDef(cell.getContext()) : cellStyleDef\n\n const mergedStyle = userStyle ? { ...style, ...userStyle } : style\n\n const classNames = [\n 'yable-td',\n isFocused && 'yable-cell--focused',\n isCellSelected && 'yable-cell--selected',\n selectionEdges?.top && 'yable-cell--selection-top',\n selectionEdges?.right && 'yable-cell--selection-right',\n selectionEdges?.bottom && 'yable-cell--selection-bottom',\n selectionEdges?.left && 'yable-cell--selection-left',\n userClassName,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <td\n className={classNames}\n style={mergedStyle}\n data-editing={isEditing || undefined}\n data-focused={isFocused || undefined}\n data-pinned={pinned || undefined}\n data-cell-status={cellStatus !== 'idle' ? cellStatus : undefined}\n data-column-id={column.id}\n data-row-index={rowIndex}\n data-column-index={columnIndex}\n data-cell-selected={isCellSelected || undefined}\n aria-rowindex={rowIndex + 1}\n aria-colindex={columnIndex + 1}\n role=\"gridcell\"\n tabIndex={keyboardNavigationEnabled ? (isTabStop ? 0 : -1) : undefined}\n onMouseDown={handleMouseDown}\n onMouseEnter={handleMouseEnter}\n onMouseUp={handleMouseUp}\n onClick={handleClick}\n onDoubleClick={handleDoubleClick}\n onContextMenu={handleContextMenu}\n onFocus={handleFocus}\n >\n {content}\n {cellStatus === 'error' && (\n <CellStatusBadge\n status=\"error\"\n message={cellErrorMessage}\n onRetry={() => void table.retryCommit(cell.row.id, column.id)}\n onDismiss={() => table.dismissCommit(cell.row.id, column.id)}\n />\n )}\n {cellStatus === 'conflict' && (\n <CellStatusBadge\n status=\"conflict\"\n conflictWith={cellConflictWith}\n onRetry={() => void table.retryCommit(cell.row.id, column.id)}\n onDismiss={() => table.dismissCommit(cell.row.id, column.id)}\n />\n )}\n </td>\n )\n}\n\nfunction isInteractiveClickTarget(element: HTMLElement | null): boolean {\n if (!element) return false\n\n const interactive = element.closest(\n 'input, textarea, select, button, a[href], [contenteditable=\"true\"]',\n )\n\n return interactive !== null\n}\n","// @zvndev/yable-react — Error Boundary Component\n\nimport React from 'react'\n\ninterface ErrorBoundaryProps {\n /** Callback fired when an error is caught */\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void\n /** When any value in this array changes, the boundary resets */\n resetKeys?: unknown[]\n /** Custom fallback to render when an error is caught */\n fallback?: React.ReactNode\n children: React.ReactNode\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean\n error: Error | null\n}\n\n/**\n * Catches rendering errors in child components so one bad cell or row\n * does not crash the entire table. Logs errors and provides a fallback UI.\n */\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n console.error('[yable] Rendering error caught by ErrorBoundary:', error, errorInfo)\n this.props.onError?.(error, errorInfo)\n }\n\n componentDidUpdate(prevProps: ErrorBoundaryProps): void {\n // Auto-reset when resetKeys change\n if (this.state.hasError && this.props.resetKeys) {\n const prevKeys = prevProps.resetKeys ?? []\n const nextKeys = this.props.resetKeys\n const changed =\n prevKeys.length !== nextKeys.length ||\n prevKeys.some((key, i) => !Object.is(key, nextKeys[i]))\n\n if (changed) {\n this.setState({ hasError: false, error: null })\n }\n }\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n if (this.props.fallback !== undefined) {\n return this.props.fallback\n }\n return (\n <span\n className=\"yable-error-cell\"\n title={this.state.error?.message ?? 'Render error'}\n style={{\n color: '#dc2626',\n border: '1px solid #dc2626',\n borderRadius: 2,\n padding: '2px 4px',\n fontSize: '0.75em',\n }}\n >\n Error\n </span>\n )\n }\n\n return this.props.children\n }\n}\n\n/**\n * Lightweight boundary specifically for table cells.\n * Renders inline so it does not break table layout.\n */\nexport class CellErrorBoundary extends React.Component<\n {\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void\n resetKeys?: unknown[]\n children: React.ReactNode\n },\n ErrorBoundaryState\n> {\n constructor(props: { onError?: (error: Error, errorInfo: React.ErrorInfo) => void; resetKeys?: unknown[]; children: React.ReactNode }) {\n super(props)\n this.state = { hasError: false, error: null }\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n console.error('[yable] Cell rendering error:', error, errorInfo)\n this.props.onError?.(error, errorInfo)\n }\n\n componentDidUpdate(prevProps: { resetKeys?: unknown[] }): void {\n if (this.state.hasError && this.props.resetKeys) {\n const prevKeys = prevProps.resetKeys ?? []\n const nextKeys = this.props.resetKeys\n const changed =\n prevKeys.length !== nextKeys.length ||\n prevKeys.some((key, i) => !Object.is(key, nextKeys[i]))\n\n if (changed) {\n this.setState({ hasError: false, error: null })\n }\n }\n }\n\n render(): React.ReactNode {\n if (this.state.hasError) {\n return (\n <span\n className=\"yable-error-cell\"\n title={this.state.error?.message ?? 'Render error'}\n style={{\n color: '#dc2626',\n border: '1px solid #dc2626',\n borderRadius: 2,\n padding: '2px 4px',\n fontSize: '0.75em',\n }}\n >\n Error\n </span>\n )\n }\n return this.props.children\n }\n}\n","// @zvndev/yable-react — Master Detail Component\n// Detail panel container for expanded rows with slide-down animation\n// and proper accessibility semantics.\n\nimport React from 'react'\nimport type { RowData, Row, Table } from '@zvndev/yable-core'\n\ninterface MasterDetailProps<TData extends RowData> {\n row: Row<TData>\n table: Table<TData>\n /** Number of columns to span (full table width) */\n colSpan: number\n /** Custom render function for the detail panel */\n renderDetailPanel?: (row: Row<TData>) => React.ReactNode\n /** Optional animation class */\n animationClass?: string\n}\n\nexport function MasterDetail<TData extends RowData>({\n row,\n table,\n colSpan,\n renderDetailPanel,\n animationClass,\n}: MasterDetailProps<TData>) {\n // Determine what to render in the detail panel\n const renderer =\n renderDetailPanel ?? (table.options as any).renderDetailPanel\n\n if (!renderer) return null\n\n const content = renderer(row)\n if (content == null) return null\n\n const classes = [\n 'yable-detail-row',\n 'yable-detail-row--animated',\n animationClass,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <tr\n className={classes}\n data-detail-for={row.id}\n role=\"row\"\n aria-label={`Details for row ${row.id}`}\n >\n <td className=\"yable-detail-cell\" colSpan={colSpan} role=\"cell\">\n <div className=\"yable-detail-panel\">\n <div className=\"yable-detail-panel-inner\">\n {content}\n </div>\n </div>\n </td>\n </tr>\n )\n}\n","// @zvndev/yable-react — Table Body Component\n\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react'\nimport type { Column, RowData, Table, Row } from '@zvndev/yable-core'\nimport { TableCell } from './TableCell'\nimport { CellErrorBoundary } from './ErrorBoundary'\nimport { MasterDetail } from './MasterDetail'\nimport { useVirtualization } from '../hooks/useVirtualization'\n\ninterface TableBodyProps<TData extends RowData> {\n table: Table<TData>\n clickableRows?: boolean\n colgroup?: React.ReactNode\n}\n\nexport function TableBody<TData extends RowData>({\n table,\n clickableRows,\n colgroup,\n}: TableBodyProps<TData>) {\n const rows = table.getRowModel().rows\n const visibleColumns = table.getVisibleLeafColumns()\n const activeCell = table.getState().editing.activeCell\n const focusedCell = table.getFocusedCell()\n const cellSelection = table.getState().cellSelection ?? {\n range: null,\n anchor: null,\n isDragging: false,\n }\n const pendingValues = table.getState().editing.pendingValues ?? {}\n const options = table.options\n const enableVirtualization = options.enableVirtualization ?? false\n const scrollContainerRef = useRef<HTMLDivElement>(null)\n\n const rowHeight = options.rowHeight ?? 40\n const overscan = options.overscan ?? 5\n const estimateRowHeight = options.estimateRowHeight\n const pretextHeights = options.pretextHeights ?? null\n const pretextPrefixSums = options.pretextPrefixSums ?? null\n\n // Derive a stable hash from columnSizing so the virtualization hook can\n // invalidate its row-height cache when column widths change (text wrapping).\n const columnSizing = table.getState().columnSizing\n const columnSizingHash = useMemo(() => {\n const entries = Object.entries(columnSizing)\n if (entries.length === 0) return 0\n // Simple numeric hash: sum of (charCode-weighted key + value)\n let h = 0\n for (const [key, value] of entries) {\n for (let i = 0; i < key.length; i++) {\n h = (h * 31 + key.charCodeAt(i)) | 0\n }\n h = (h * 31 + (value | 0)) | 0\n }\n return h\n }, [columnSizing])\n\n const { virtualRows, totalHeight } = useVirtualization({\n containerRef: scrollContainerRef,\n totalRows: rows.length,\n rowHeight,\n overscan,\n estimateRowHeight,\n pretextHeights,\n pretextPrefixSums,\n columnSizingHash,\n })\n\n const cellSelectionKey = cellSelection.range\n ? `${cellSelection.range.start.rowIndex}:${cellSelection.range.start.columnIndex}:${cellSelection.range.end.rowIndex}:${cellSelection.range.end.columnIndex}:${cellSelection.isDragging ? 'dragging' : 'idle'}`\n : `none:${cellSelection.isDragging ? 'dragging' : 'idle'}`\n\n useEffect(() => {\n const handleWindowMouseUp = () => {\n if (table.getState().cellSelection?.isDragging) {\n table.endCellRangeSelection()\n }\n }\n\n window.addEventListener('mouseup', handleWindowMouseUp)\n return () => {\n window.removeEventListener('mouseup', handleWindowMouseUp)\n }\n }, [table])\n\n const renderRow = (row: Row<TData>, rowIndex: number, pinnedPosition?: 'top' | 'bottom') => (\n <MemoizedTableRow\n key={row.id}\n row={row}\n table={table}\n rowIndex={rowIndex}\n visibleColumns={visibleColumns}\n isSelected={row.getIsSelected()}\n isExpanded={row.getIsExpanded()}\n activeColumnId={activeCell?.rowId === row.id ? activeCell.columnId : undefined}\n focusedColumnIndex={focusedCell?.rowIndex === rowIndex ? focusedCell.columnIndex : null}\n hasFocusedCell={focusedCell !== null}\n cellSelectionKey={cellSelectionKey}\n pendingValuesKey={getPendingValuesKey(pendingValues[row.id])}\n clickable={clickableRows}\n pinnedPosition={pinnedPosition}\n />\n )\n\n if (!enableVirtualization) {\n // When no rows are pinned, getCenterRows() === the full row set, so we keep\n // the original full-row render to guarantee identical output. Only split\n // into top/center/bottom sections once row pinning is actually in use.\n const rowPinning = table.getState().rowPinning\n const hasPinnedRows = (rowPinning.top?.length ?? 0) > 0 || (rowPinning.bottom?.length ?? 0) > 0\n\n if (hasPinnedRows) {\n const topRows = table.getTopRows()\n const centerRows = table.getCenterRows()\n const bottomRows = table.getBottomRows()\n let visualIndex = 0\n return (\n <tbody className=\"yable-tbody\">\n {topRows.map((row) => renderRow(row, visualIndex++, 'top'))}\n {centerRows.map((row) => renderRow(row, visualIndex++))}\n {bottomRows.map((row) => renderRow(row, visualIndex++, 'bottom'))}\n </tbody>\n )\n }\n\n // Non-virtualized: render all rows directly\n return (\n <tbody className=\"yable-tbody\">{rows.map((row, rowIndex) => renderRow(row, rowIndex))}</tbody>\n )\n }\n\n // Virtualized rendering\n const hasPretextData = !!(pretextHeights && pretextPrefixSums)\n const fixedRowHeight = typeof rowHeight === 'number' && !hasPretextData ? rowHeight : undefined\n const containerHeight = hasPretextData\n ? Math.min(totalHeight, 800) // Pretext: use real total, cap at 800px viewport\n : fixedRowHeight\n ? Math.min(totalHeight, fixedRowHeight * 20) // Default visible area ~20 rows\n : 600 // Fallback for variable heights\n\n return (\n <tbody className=\"yable-tbody\">\n <tr style={{ height: 0, padding: 0, border: 'none' }}>\n <td style={{ height: 0, padding: 0, border: 'none' }} colSpan={visibleColumns.length}>\n <div\n ref={scrollContainerRef}\n className=\"yable-virtual-scroll-container\"\n style={{\n overflowY: 'auto',\n height: containerHeight,\n position: 'relative',\n }}\n >\n <div\n className=\"yable-virtual-spacer\"\n style={{ height: totalHeight, position: 'relative' }}\n >\n <table\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n tableLayout: 'fixed',\n borderCollapse: 'collapse',\n }}\n >\n {colgroup}\n <tbody>\n {virtualRows.map((vRow) => {\n const row = rows[vRow.index]\n if (!row) return null\n return (\n <MemoizedTableRow\n key={row.id}\n row={row}\n table={table}\n rowIndex={vRow.index}\n visibleColumns={visibleColumns}\n isSelected={row.getIsSelected()}\n isExpanded={row.getIsExpanded()}\n activeColumnId={\n activeCell?.rowId === row.id ? activeCell.columnId : undefined\n }\n focusedColumnIndex={\n focusedCell?.rowIndex === vRow.index ? focusedCell.columnIndex : null\n }\n hasFocusedCell={focusedCell !== null}\n cellSelectionKey={cellSelectionKey}\n pendingValuesKey={getPendingValuesKey(pendingValues[row.id])}\n clickable={clickableRows}\n virtualStyle={{\n position: 'absolute' as const,\n top: 0,\n left: 0,\n width: '100%',\n height: vRow.size,\n transform: `translateY(${vRow.start}px)`,\n }}\n />\n )\n })}\n </tbody>\n </table>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TableRow — wrapped in React.memo with custom comparison\n// ---------------------------------------------------------------------------\n\ninterface TableRowProps<TData extends RowData> {\n row: Row<TData>\n table: Table<TData>\n rowIndex: number\n visibleColumns: Column<TData, unknown>[]\n isSelected: boolean\n isExpanded: boolean\n activeColumnId?: string\n focusedColumnIndex: number | null\n hasFocusedCell: boolean\n cellSelectionKey: string\n pendingValuesKey: string\n clickable?: boolean\n pinnedPosition?: 'top' | 'bottom'\n virtualStyle?: React.CSSProperties\n}\n\nfunction TableRowInner<TData extends RowData>({\n row,\n table,\n rowIndex,\n visibleColumns,\n isSelected,\n isExpanded,\n activeColumnId,\n focusedColumnIndex,\n hasFocusedCell,\n cellSelectionKey: _cellSelectionKey,\n pendingValuesKey: _pendingValuesKey,\n clickable,\n pinnedPosition,\n virtualStyle,\n}: TableRowProps<TData>) {\n const allCells = row.getAllCells()\n const visibleCells = visibleColumns\n .map((column) => allCells.find((cell) => cell.column.id === column.id))\n .filter((cell): cell is NonNullable<typeof cell> => cell != null)\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n if (\n table.options.enableRowClickSelection &&\n row.getCanSelect() &&\n !isInteractiveClickTarget(e.target)\n ) {\n row.toggleSelected()\n }\n\n if (clickable) {\n table.events.emit('row:click', {\n row,\n event: e.nativeEvent,\n } as any)\n }\n },\n [clickable, table, row],\n )\n\n const handleDoubleClick = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('row:dblclick', {\n row,\n event: e.nativeEvent,\n } as any)\n },\n [table.events, row],\n )\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent) => {\n table.events.emit('row:contextmenu', {\n row,\n event: e.nativeEvent,\n } as any)\n },\n [table.events, row],\n )\n\n const selectionEnabled = Boolean(table.options.enableRowSelection)\n const expansionEnabled = Boolean(table.options.enableExpanding)\n const rowClassNameDef = table.options.rowClassName\n const userRowClassName =\n typeof rowClassNameDef === 'function' ? rowClassNameDef(row) : rowClassNameDef\n const rowStyleDef = table.options.rowStyle\n const userRowStyle = typeof rowStyleDef === 'function' ? rowStyleDef(row) : rowStyleDef\n const mergedRowStyle = userRowStyle ? { ...virtualStyle, ...userRowStyle } : virtualStyle\n const rowClassName = [\n 'yable-tr',\n pinnedPosition && `yable-tr--pinned-${pinnedPosition}`,\n userRowClassName,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <>\n <tr\n className={rowClassName}\n style={mergedRowStyle}\n data-selected={isSelected || undefined}\n data-expanded={isExpanded || undefined}\n data-clickable={clickable || undefined}\n data-pinned-row={pinnedPosition}\n data-row-id={row.id}\n data-row-index={rowIndex}\n aria-selected={selectionEnabled ? isSelected : undefined}\n aria-expanded={expansionEnabled ? isExpanded : undefined}\n onClick={handleClick}\n onDoubleClick={handleDoubleClick}\n onContextMenu={handleContextMenu}\n >\n {visibleCells.map((cell, columnIndex) => {\n const isFocused = focusedColumnIndex === columnIndex\n const isTabStop = isFocused || (!hasFocusedCell && rowIndex === 0 && columnIndex === 0)\n\n return (\n <CellErrorBoundary\n key={cell.id}\n resetKeys={[cell.getValue(), activeColumnId === cell.column.id, isFocused]}\n >\n <TableCell\n cell={cell}\n table={table}\n rowIndex={rowIndex}\n columnIndex={columnIndex}\n isFocused={isFocused}\n isTabStop={isTabStop}\n />\n </CellErrorBoundary>\n )\n })}\n </tr>\n\n {isExpanded && <MasterDetail row={row} table={table} colSpan={visibleColumns.length} />}\n </>\n )\n}\n\n// Custom comparison for React.memo: only re-render when meaningful props change.\n// We compare by reference for data, and by value for boolean/selection/editing state.\nfunction areRowPropsEqual<TData extends RowData>(\n prev: TableRowProps<TData>,\n next: TableRowProps<TData>,\n): boolean {\n // Different row identity\n if (prev.row.id !== next.row.id) return false\n\n // Current row-model position changed\n if (prev.rowIndex !== next.rowIndex) return false\n\n // Visible columns or ordering changed\n if (prev.visibleColumns !== next.visibleColumns) return false\n\n // Data reference changed — re-render\n if (prev.row.original !== next.row.original) return false\n\n // Selection state\n if (prev.isSelected !== next.isSelected) return false\n\n // Expansion state\n if (prev.isExpanded !== next.isExpanded) return false\n\n // Clickable prop\n if (prev.clickable !== next.clickable) return false\n\n // Row-pinning position\n if (prev.pinnedPosition !== next.pinnedPosition) return false\n\n // Focus / edit state for this row\n if (prev.activeColumnId !== next.activeColumnId) return false\n if (prev.focusedColumnIndex !== next.focusedColumnIndex) return false\n if (prev.hasFocusedCell !== next.hasFocusedCell) return false\n if (prev.cellSelectionKey !== next.cellSelectionKey) return false\n if (prev.pendingValuesKey !== next.pendingValuesKey) return false\n\n // Virtual positioning\n if (prev.virtualStyle !== next.virtualStyle) {\n // For virtual rows, compare actual transform values\n if (!prev.virtualStyle || !next.virtualStyle) return false\n if (prev.virtualStyle.transform !== next.virtualStyle.transform) return false\n if (prev.virtualStyle.height !== next.virtualStyle.height) return false\n }\n\n // Table reference changed (e.g., options update)\n if (prev.table !== next.table) return false\n\n return true\n}\n\nconst MemoizedTableRow = React.memo(TableRowInner, areRowPropsEqual) as typeof TableRowInner\n\nfunction getPendingValuesKey(values: Record<string, unknown> | undefined): string {\n if (!values) return ''\n return Object.keys(values)\n .sort()\n .map((key) => `${key}:${String(values[key])}`)\n .join('|')\n}\n\nfunction isInteractiveClickTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false\n return Boolean(\n target.closest('input, textarea, select, button, a[href], [contenteditable=\"true\"]'),\n )\n}\n","// @zvndev/yable-react — Table Footer Component\n\nimport React from 'react'\nimport type { HeaderContext, RowData, Table } from '@zvndev/yable-core'\n\ninterface TableFooterProps<TData extends RowData> {\n table: Table<TData>\n}\n\nexport function TableFooter<TData extends RowData>({ table }: TableFooterProps<TData>) {\n const footerGroups = table.getFooterGroups()\n type FooterRenderer = (ctx: HeaderContext<TData, unknown>) => React.ReactNode\n\n if (!footerGroups.length) return null\n\n return (\n <tfoot className=\"yable-tfoot\">\n {footerGroups.map((footerGroup) => (\n <tr key={footerGroup.id} className=\"yable-tr\">\n {footerGroup.headers.map((header) => {\n const footerDef = header.column.columnDef.footer\n const content = header.isPlaceholder\n ? null\n : typeof footerDef === 'function'\n ? (footerDef as FooterRenderer)(header.getContext())\n : (footerDef ?? null)\n\n return (\n <td key={header.id} className=\"yable-td\" colSpan={header.colSpan}>\n {content}\n </td>\n )\n })}\n </tr>\n ))}\n </tfoot>\n )\n}\n","// @zvndev/yable-react — Loading Overlay Component\n// Backdrop-blurred overlay with animated spinner and pulse animation.\n\nimport React from 'react'\nimport { getDefaultLocale } from '@zvndev/yable-core'\n\nexport interface LoadingOverlayProps {\n /** Whether loading is active */\n loading?: boolean\n /** Custom loading component to render instead of default spinner */\n loadingComponent?: React.ReactNode\n /** Loading text shown below the spinner */\n loadingText?: string\n}\n\n/**\n * Animated spinner SVG with a track ring and a spinning arc.\n * Uses CSS animation (keyframe defined in base.css) for the rotation.\n */\nfunction Spinner() {\n return (\n <div className=\"yable-overlay-spinner\" aria-hidden=\"true\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {/* Background track ring */}\n <circle\n cx=\"16\"\n cy=\"16\"\n r=\"13\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.1\"\n strokeWidth=\"3\"\n />\n {/* Spinning arc — 90 degree sweep */}\n <path\n d=\"M16 3a13 13 0 0 1 13 13\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n )\n}\n\nexport function LoadingOverlay({\n loading,\n loadingComponent,\n loadingText,\n}: LoadingOverlayProps) {\n if (!loading) return null\n\n const resolvedText = loadingText ?? getDefaultLocale().loadingText\n\n return (\n <div\n className=\"yable-overlay-loading\"\n role=\"alert\"\n aria-busy=\"true\"\n aria-label={resolvedText}\n >\n <div className=\"yable-overlay-loading-content\">\n {loadingComponent ?? (\n <>\n <Spinner />\n {resolvedText && (\n <span className=\"yable-overlay-loading-text\">{resolvedText}</span>\n )}\n </>\n )}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — No Rows Overlay Component\n// Centered message with illustration SVGs, distinguishing \"no data\" vs \"no results\" (filtered).\n\nimport React from 'react'\nimport { getDefaultLocale } from '@zvndev/yable-core'\n\nexport interface NoRowsOverlayProps {\n /** Custom empty component */\n emptyComponent?: React.ReactNode\n /** Custom icon for empty state */\n emptyIcon?: React.ReactNode\n /** Main empty message */\n emptyMessage?: string\n /** Secondary detail text */\n emptyDetail?: string\n /** Whether results are filtered (changes icon/message) */\n isFiltered?: boolean\n}\n\n/** Default empty icon — an open box illustration */\nfunction DefaultEmptyIcon() {\n return (\n <svg\n className=\"yable-overlay-empty-icon\"\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n {/* Box body */}\n <path\n d=\"M10 22L28 14L46 22V38L28 46L10 38V22Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n strokeOpacity=\"0.25\"\n />\n {/* Box top flap */}\n <path\n d=\"M28 14V30\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeOpacity=\"0.15\"\n />\n {/* Box middle horizontal */}\n <path\n d=\"M10 22L28 30L46 22\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n strokeOpacity=\"0.2\"\n />\n {/* Lid flaps */}\n <path\n d=\"M4 20L28 10L52 20\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeOpacity=\"0.12\"\n />\n </svg>\n )\n}\n\n/** Default filtered/no-results icon — magnifying glass with empty result */\nfunction DefaultFilteredIcon() {\n return (\n <svg\n className=\"yable-overlay-empty-icon\"\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n {/* Magnifying glass circle */}\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeOpacity=\"0.3\"\n />\n {/* Handle */}\n <path\n d=\"M34 34L46 46\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeOpacity=\"0.25\"\n />\n {/* X in center of glass */}\n <path\n d=\"M20.5 20.5L29.5 29.5M29.5 20.5L20.5 29.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeOpacity=\"0.25\"\n />\n </svg>\n )\n}\n\nexport function NoRowsOverlay({\n emptyComponent,\n emptyIcon,\n emptyMessage,\n emptyDetail,\n isFiltered = false,\n}: NoRowsOverlayProps) {\n if (emptyComponent) {\n return <div className=\"yable-overlay-empty\">{emptyComponent}</div>\n }\n\n const locale = getDefaultLocale()\n const defaultMessage = isFiltered\n ? locale.emptyNoResults\n : locale.emptyNoData\n\n const defaultDetail = isFiltered\n ? locale.emptyNoResultsDetail\n : locale.emptyNoDataDetail\n\n const icon = emptyIcon ?? (isFiltered ? <DefaultFilteredIcon /> : <DefaultEmptyIcon />)\n\n return (\n <div className=\"yable-overlay-empty\" role=\"status\">\n <div className=\"yable-overlay-empty-icon-wrapper\">\n {icon}\n </div>\n <div className=\"yable-overlay-empty-message\">\n {emptyMessage ?? defaultMessage}\n </div>\n <div className=\"yable-overlay-empty-detail\">\n {emptyDetail ?? defaultDetail}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Status Bar Panel Component\n// Individual panel segment with icon, label, and value.\n\nimport React from 'react'\n\nexport interface StatusBarPanelComponentProps {\n label?: string\n value: string | number\n icon?: React.ReactNode\n /** Optional tooltip text */\n title?: string\n}\n\nexport function StatusBarPanelComponent({\n label,\n value,\n icon,\n title,\n}: StatusBarPanelComponentProps) {\n const displayValue = typeof value === 'number'\n ? value.toLocaleString()\n : value\n\n return (\n <div className=\"yable-status-panel\" title={title}>\n {icon && <span className=\"yable-status-panel-icon\">{icon}</span>}\n {label && <span className=\"yable-status-panel-label\">{label}:</span>}\n <span className=\"yable-status-panel-value\">{displayValue}</span>\n </div>\n )\n}\n","// @zvndev/yable-react — Status Bar Component\n// Footer bar with flex layout, dividers between panels, and support for\n// total row count, selected count, filtered count, and custom aggregations.\n\nimport React from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport type { StatusBarPanelConfig } from '../types'\nimport { StatusBarPanelComponent } from './StatusBarPanel'\n\ninterface StatusBarProps<TData extends RowData> {\n table: Table<TData>\n panels?: StatusBarPanelConfig[]\n}\n\n/** Vertical divider between adjacent status panels */\nfunction StatusDivider() {\n return <span className=\"yable-status-bar-divider\" aria-hidden=\"true\" />\n}\n\n/** Renders panels with dividers between them */\nfunction PanelGroup({ children }: { children: React.ReactNode }) {\n const items = React.Children.toArray(children).filter(Boolean)\n return (\n <>\n {items.map((child, i) => (\n <React.Fragment key={i}>\n {i > 0 && <StatusDivider />}\n {child}\n </React.Fragment>\n ))}\n </>\n )\n}\n\n/** Row count icon — tiny grid of dots */\nfunction RowCountIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"2.5\" rx=\"0.5\" fill=\"currentColor\" opacity=\"0.5\" />\n <rect x=\"1\" y=\"4.75\" width=\"10\" height=\"2.5\" rx=\"0.5\" fill=\"currentColor\" opacity=\"0.35\" />\n <rect x=\"1\" y=\"8.5\" width=\"10\" height=\"2.5\" rx=\"0.5\" fill=\"currentColor\" opacity=\"0.2\" />\n </svg>\n )\n}\n\n/** Filter icon */\nfunction FilterIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 2.5h10M3 6h6M4.5 9.5h3\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Checkmark icon for selected */\nfunction SelectedIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2.5 6.5L5 9L9.5 3\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport function StatusBar<TData extends RowData>({\n table,\n panels,\n}: StatusBarProps<TData>) {\n const totalRows = table.getCoreRowModel().rows.length\n const filteredRows = table.getFilteredRowModel().rows.length\n const selectedRows = Object.keys(table.getState().rowSelection).length\n const isFiltered =\n table.getState().globalFilter ||\n table.getState().columnFilters.length > 0\n\n // If custom panels are provided, render those\n if (panels && panels.length > 0) {\n const leftPanels = panels.filter((p) => p.align === 'left' || !p.align)\n const centerPanels = panels.filter((p) => p.align === 'center')\n const rightPanels = panels.filter((p) => p.align === 'right')\n\n return (\n <div className=\"yable-status-bar\" role=\"status\" aria-label=\"Table status\">\n <div className=\"yable-status-bar-section yable-status-bar-left\">\n <PanelGroup>\n {leftPanels.map((panel) =>\n panel.component ? (\n <panel.component key={panel.id} table={table} />\n ) : (\n <StatusBarPanelComponent\n key={panel.id}\n label={panel.label}\n value=\"\"\n />\n )\n )}\n </PanelGroup>\n </div>\n {centerPanels.length > 0 && (\n <div className=\"yable-status-bar-section yable-status-bar-center\">\n <PanelGroup>\n {centerPanels.map((panel) =>\n panel.component ? (\n <panel.component key={panel.id} table={table} />\n ) : null\n )}\n </PanelGroup>\n </div>\n )}\n <div className=\"yable-status-bar-section yable-status-bar-right\">\n <PanelGroup>\n {rightPanels.map((panel) =>\n panel.component ? (\n <panel.component key={panel.id} table={table} />\n ) : null\n )}\n </PanelGroup>\n </div>\n </div>\n )\n }\n\n // Default status bar content\n return (\n <div className=\"yable-status-bar\" role=\"status\" aria-label=\"Table status\">\n <div className=\"yable-status-bar-section yable-status-bar-left\">\n <PanelGroup>\n <StatusBarPanelComponent\n label=\"Total\"\n value={totalRows}\n icon={<RowCountIcon />}\n />\n {isFiltered && (\n <StatusBarPanelComponent\n label=\"Filtered\"\n value={filteredRows}\n icon={<FilterIcon />}\n />\n )}\n </PanelGroup>\n </div>\n <div className=\"yable-status-bar-section yable-status-bar-right\">\n <PanelGroup>\n {selectedRows > 0 && (\n <StatusBarPanelComponent\n label=\"Selected\"\n value={selectedRows}\n icon={<SelectedIcon />}\n />\n )}\n </PanelGroup>\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Columns Panel Component\n// Show/hide/reorder columns via drag-and-drop with search, toggle-all actions,\n// and a polished drag handle.\n\nimport React, { useState, useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\ninterface ColumnsPanelProps<TData extends RowData> {\n table: Table<TData>\n}\n\n/** Search icon for the column search field */\nfunction SearchIcon() {\n return (\n <svg\n className=\"yable-sidebar-search-icon\"\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"6.25\" cy=\"6.25\" r=\"4.25\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M9.5 9.5L12.5 12.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Eye icon indicating visibility state */\nfunction VisibilityIcon({ visible }: { visible: boolean }) {\n if (visible) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M1 7s2.5-4 6-4 6 4 6 4-2.5 4-6 4-6-4-6-4z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinejoin=\"round\"\n />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n </svg>\n )\n }\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M1 7s2.5-4 6-4 6 4 6 4-2.5 4-6 4-6-4-6-4z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinejoin=\"round\"\n opacity=\"0.3\"\n />\n <line\n x1=\"2\"\n y1=\"2\"\n x2=\"12\"\n y2=\"12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n opacity=\"0.5\"\n />\n </svg>\n )\n}\n\nexport function ColumnsPanel<TData extends RowData>({ table }: ColumnsPanelProps<TData>) {\n const [search, setSearch] = useState('')\n const [draggedId, setDraggedId] = useState<string | null>(null)\n\n // Order the panel list by the live columnOrder state so it stays in sync with\n // the table after a reorder (whether triggered here or by a header drag).\n // getAllLeafColumns() returns definition order, which would otherwise desync.\n const allColumns = table.getAllLeafColumns()\n const columnOrder = table.getState().columnOrder\n const columns =\n columnOrder && columnOrder.length > 0\n ? [...allColumns].sort((a, b) => {\n const ia = columnOrder.indexOf(a.id)\n const ib = columnOrder.indexOf(b.id)\n return (\n (ia === -1 ? Number.MAX_SAFE_INTEGER : ia) - (ib === -1 ? Number.MAX_SAFE_INTEGER : ib)\n )\n })\n : allColumns\n const visibleCount = columns.filter((c) => c.getIsVisible()).length\n const filteredColumns = search\n ? columns.filter((col) => {\n const header = typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id\n return header.toLowerCase().includes(search.toLowerCase())\n })\n : columns\n\n const handleToggleAll = useCallback(\n (visible: boolean) => {\n table.toggleAllColumnsVisible(visible)\n },\n [table],\n )\n\n const handleDragStart = useCallback((e: React.DragEvent, columnId: string) => {\n setDraggedId(columnId)\n e.dataTransfer.effectAllowed = 'move'\n e.dataTransfer.setData('text/plain', columnId)\n }, [])\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }, [])\n\n const handleDragEnd = useCallback(() => {\n setDraggedId(null)\n }, [])\n\n const handleDrop = useCallback(\n (e: React.DragEvent, targetId: string) => {\n e.preventDefault()\n if (!draggedId || draggedId === targetId) return\n\n const currentOrder =\n table.getState().columnOrder.length > 0\n ? table.getState().columnOrder\n : columns.map((c) => c.id)\n\n const fromIndex = currentOrder.indexOf(draggedId)\n const toIndex = currentOrder.indexOf(targetId)\n\n if (fromIndex === -1 || toIndex === -1) return\n\n const newOrder = [...currentOrder]\n newOrder.splice(fromIndex, 1)\n newOrder.splice(toIndex, 0, draggedId)\n\n table.setColumnOrder(newOrder)\n setDraggedId(null)\n },\n [draggedId, table, columns],\n )\n\n return (\n <div className=\"yable-sidebar-panel yable-sidebar-columns\">\n {/* Search input with icon */}\n <div className=\"yable-sidebar-panel-search\">\n <SearchIcon />\n <input\n type=\"text\"\n className=\"yable-sidebar-search-input\"\n placeholder=\"Search columns...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n aria-label=\"Search columns\"\n />\n </div>\n\n {/* Toggle actions with count badge */}\n <div className=\"yable-sidebar-panel-actions\">\n <button\n type=\"button\"\n className=\"yable-sidebar-action-btn\"\n onClick={() => handleToggleAll(true)}\n >\n Show all\n </button>\n <button\n type=\"button\"\n className=\"yable-sidebar-action-btn\"\n onClick={() => handleToggleAll(false)}\n >\n Hide all\n </button>\n <span className=\"yable-sidebar-column-count\" aria-live=\"polite\">\n {visibleCount}/{columns.length}\n </span>\n </div>\n\n {/* Draggable column list */}\n <div className=\"yable-sidebar-column-list\" role=\"listbox\" aria-label=\"Columns\">\n {filteredColumns.map((column) => {\n const header =\n typeof column.columnDef.header === 'string' ? column.columnDef.header : column.id\n const isVisible = column.getIsVisible()\n\n return (\n <div\n key={column.id}\n className={`yable-sidebar-column-item${draggedId === column.id ? ' yable-sidebar-column-item--dragging' : ''}${!isVisible ? ' yable-sidebar-column-item--hidden' : ''}`}\n draggable\n onDragStart={(e) => handleDragStart(e, column.id)}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDrop={(e) => handleDrop(e, column.id)}\n role=\"option\"\n aria-selected={isVisible}\n >\n <span className=\"yable-sidebar-drag-handle\" aria-hidden=\"true\">\n <svg width=\"8\" height=\"14\" viewBox=\"0 0 8 14\" fill=\"currentColor\">\n <circle cx=\"2\" cy=\"2\" r=\"1.2\" />\n <circle cx=\"6\" cy=\"2\" r=\"1.2\" />\n <circle cx=\"2\" cy=\"7\" r=\"1.2\" />\n <circle cx=\"6\" cy=\"7\" r=\"1.2\" />\n <circle cx=\"2\" cy=\"12\" r=\"1.2\" />\n <circle cx=\"6\" cy=\"12\" r=\"1.2\" />\n </svg>\n </span>\n <label className=\"yable-sidebar-column-label\">\n <input\n type=\"checkbox\"\n className=\"yable-checkbox\"\n checked={isVisible}\n onChange={(e) => column.toggleVisibility(e.target.checked)}\n />\n <span className=\"yable-sidebar-column-name\">{header}</span>\n </label>\n <span className=\"yable-sidebar-column-visibility\" aria-hidden=\"true\">\n <VisibilityIcon visible={isVisible} />\n </span>\n </div>\n )\n })}\n\n {/* Empty state when search yields no results */}\n {filteredColumns.length === 0 && search && (\n <div className=\"yable-sidebar-empty\">\n <span>No columns match &ldquo;{search}&rdquo;</span>\n </div>\n )}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Filters Panel Component\n// Summary of active filters with edit/remove capabilities, count badge,\n// and a polished empty state illustration.\n\nimport { useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\ninterface FiltersPanelProps<TData extends RowData> {\n table: Table<TData>\n}\n\n/** Small X icon for remove buttons */\nfunction RemoveIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 3l6 6M9 3L3 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Search/globe icon for global filter badge */\nfunction GlobalSearchIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"5.5\" cy=\"5.5\" r=\"3.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M8 8L10.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Column filter icon */\nfunction ColumnFilterIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1.5 2h9L7 6v3.5L5 11V6L1.5 2z\" stroke=\"currentColor\" strokeWidth=\"1.1\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport function FiltersPanel<TData extends RowData>({\n table,\n}: FiltersPanelProps<TData>) {\n const columnFilters = table.getState().columnFilters\n const globalFilter = table.getState().globalFilter\n const hasFilters = columnFilters.length > 0 || Boolean(globalFilter)\n const filterCount = columnFilters.length + (globalFilter ? 1 : 0)\n\n const handleRemoveColumnFilter = useCallback(\n (columnId: string) => {\n table.setColumnFilters((prev) =>\n prev.filter((f) => f.id !== columnId)\n )\n },\n [table]\n )\n\n const handleClearAll = useCallback(() => {\n table.resetColumnFilters(true)\n table.resetGlobalFilter(true)\n }, [table])\n\n return (\n <div className=\"yable-sidebar-panel yable-sidebar-filters\">\n <div className=\"yable-sidebar-panel-header\">\n <span className=\"yable-sidebar-panel-title\">\n Active Filters\n {hasFilters && (\n <span className=\"yable-sidebar-filter-badge\">{filterCount}</span>\n )}\n </span>\n {hasFilters && (\n <button\n type=\"button\"\n className=\"yable-sidebar-action-btn yable-sidebar-action-btn--danger\"\n onClick={handleClearAll}\n >\n Clear all\n </button>\n )}\n </div>\n\n {!hasFilters && (\n <div className=\"yable-sidebar-empty\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5 10h30M10 20h20M15 30h10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeOpacity=\"0.2\"\n />\n <circle cx=\"32\" cy=\"30\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeOpacity=\"0.15\" />\n <path d=\"M30 28l4 4M34 28l-4 4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeOpacity=\"0.15\" />\n </svg>\n <span>No active filters</span>\n <span className=\"yable-sidebar-empty-hint\">\n Filter columns using the header menu or the search bar.\n </span>\n </div>\n )}\n\n <div className=\"yable-sidebar-filter-list\" role=\"list\">\n {/* Global filter */}\n {globalFilter && (\n <div className=\"yable-sidebar-filter-item\" role=\"listitem\">\n <span className=\"yable-sidebar-filter-type-icon\" aria-hidden=\"true\">\n <GlobalSearchIcon />\n </span>\n <div className=\"yable-sidebar-filter-info\">\n <span className=\"yable-sidebar-filter-column\">Global Search</span>\n <span className=\"yable-sidebar-filter-value\">\n &ldquo;{String(globalFilter)}&rdquo;\n </span>\n </div>\n <button\n type=\"button\"\n className=\"yable-sidebar-filter-remove\"\n onClick={() => table.resetGlobalFilter(true)}\n aria-label=\"Remove global filter\"\n title=\"Remove filter\"\n >\n <RemoveIcon />\n </button>\n </div>\n )}\n\n {/* Column filters */}\n {columnFilters.map((filter) => {\n const column = table.getColumn(filter.id)\n const headerName = column\n ? typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id\n : filter.id\n\n return (\n <div key={filter.id} className=\"yable-sidebar-filter-item\" role=\"listitem\">\n <span className=\"yable-sidebar-filter-type-icon\" aria-hidden=\"true\">\n <ColumnFilterIcon />\n </span>\n <div className=\"yable-sidebar-filter-info\">\n <span className=\"yable-sidebar-filter-column\">{headerName}</span>\n <span className=\"yable-sidebar-filter-value\">\n {String(filter.value)}\n </span>\n </div>\n <button\n type=\"button\"\n className=\"yable-sidebar-filter-remove\"\n onClick={() => handleRemoveColumnFilter(filter.id)}\n aria-label={`Remove filter for ${headerName}`}\n title=\"Remove filter\"\n >\n <RemoveIcon />\n </button>\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Sidebar / Tool Panels Component\n// Slides in from right with tab interface for Columns and Filters panels.\n// Includes keyboard support: Escape to close, tab-switching keyboard nav.\n\nimport { useCallback, useEffect, useRef } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { ColumnsPanel } from './ColumnsPanel'\nimport { FiltersPanel } from './FiltersPanel'\n\ninterface SidebarProps<TData extends RowData> {\n table: Table<TData>\n open: boolean\n onClose: () => void\n panels: ('columns' | 'filters')[]\n activePanel: 'columns' | 'filters'\n onPanelChange: (panel: 'columns' | 'filters') => void\n}\n\nexport function Sidebar<TData extends RowData>({\n table,\n open,\n onClose,\n panels,\n activePanel,\n onPanelChange,\n}: SidebarProps<TData>) {\n const sidebarRef = useRef<HTMLDivElement>(null)\n\n // Close on Escape key\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape' && open) {\n onClose()\n }\n },\n [open, onClose]\n )\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [handleKeyDown])\n\n const panelId = `yable-sidebar-panel-${activePanel}`\n const tabId = (panel: string) => `yable-sidebar-tab-${panel}`\n\n return (\n <div\n ref={sidebarRef}\n className={`yable-sidebar${open ? ' yable-sidebar--open' : ''}`}\n role=\"complementary\"\n aria-label=\"Table tools\"\n >\n {/* Header with tabs */}\n <div className=\"yable-sidebar-header\">\n <div className=\"yable-sidebar-tabs\" role=\"tablist\" aria-label=\"Tool panels\">\n {panels.includes('columns') && (\n <button\n type=\"button\"\n id={tabId('columns')}\n className={`yable-sidebar-tab${activePanel === 'columns' ? ' yable-sidebar-tab--active' : ''}`}\n role=\"tab\"\n aria-selected={activePanel === 'columns'}\n aria-controls={panelId}\n onClick={() => onPanelChange('columns')}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"1\" y=\"1\" width=\"5\" height=\"12\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <rect x=\"8\" y=\"1\" width=\"5\" height=\"12\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n </svg>\n <span>Columns</span>\n </button>\n )}\n {panels.includes('filters') && (\n <button\n type=\"button\"\n id={tabId('filters')}\n className={`yable-sidebar-tab${activePanel === 'filters' ? ' yable-sidebar-tab--active' : ''}`}\n role=\"tab\"\n aria-selected={activePanel === 'filters'}\n aria-controls={panelId}\n onClick={() => onPanelChange('filters')}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M1 3h12M3 7h8M5 11h4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n <span>Filters</span>\n </button>\n )}\n </div>\n <button\n type=\"button\"\n className=\"yable-sidebar-close\"\n onClick={onClose}\n aria-label=\"Close sidebar\"\n title=\"Close (Esc)\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l6 6M10 4L4 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {/* Panel content */}\n <div\n id={panelId}\n className=\"yable-sidebar-content\"\n role=\"tabpanel\"\n aria-labelledby={tabId(activePanel)}\n >\n {activePanel === 'columns' && <ColumnsPanel table={table} />}\n {activePanel === 'filters' && <FiltersPanel table={table} />}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Context Menu Item Component\n// Renders a single menu item with optional icon, shortcut badge, submenu arrow, and hover states.\n\nimport React, { useState, useRef, useEffect } from 'react'\n\nexport interface ContextMenuItemDef {\n id: string\n label: string\n icon?: React.ReactNode\n shortcut?: string\n disabled?: boolean\n danger?: boolean\n separator?: boolean\n children?: ContextMenuItemDef[]\n action?: () => void\n}\n\ninterface ContextMenuItemProps {\n item: ContextMenuItemDef\n onClose: () => void\n}\n\nexport function ContextMenuItem({ item, onClose }: ContextMenuItemProps) {\n const [submenuOpen, setSubmenuOpen] = useState(false)\n const itemRef = useRef<HTMLDivElement>(null)\n const submenuRef = useRef<HTMLDivElement>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n // Cleanup timer on unmount\n useEffect(() => {\n return () => clearTimeout(timerRef.current)\n }, [])\n\n if (item.separator) {\n return <div className=\"yable-ctx-separator\" role=\"separator\" />\n }\n\n const hasChildren = item.children && item.children.length > 0\n\n const classes = [\n 'yable-ctx-item',\n item.disabled && 'yable-ctx-item--disabled',\n item.danger && 'yable-ctx-item--danger',\n hasChildren && 'yable-ctx-item--has-submenu',\n submenuOpen && 'yable-ctx-item--submenu-open',\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleClick = () => {\n if (item.disabled) return\n if (hasChildren) return\n item.action?.()\n onClose()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n if (e.key === 'ArrowRight' && hasChildren) {\n setSubmenuOpen(true)\n }\n if (e.key === 'ArrowLeft' && submenuOpen) {\n setSubmenuOpen(false)\n }\n }\n\n const handleMouseEnter = () => {\n clearTimeout(timerRef.current)\n if (hasChildren) {\n timerRef.current = setTimeout(() => setSubmenuOpen(true), 150)\n }\n }\n\n const handleMouseLeave = () => {\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setSubmenuOpen(false), 200)\n }\n\n return (\n <div\n ref={itemRef}\n className={classes}\n role=\"menuitem\"\n tabIndex={item.disabled ? -1 : 0}\n aria-disabled={item.disabled}\n aria-haspopup={hasChildren ? 'menu' : undefined}\n aria-expanded={hasChildren ? submenuOpen : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <span className=\"yable-ctx-item-icon\" aria-hidden=\"true\">\n {item.icon ?? null}\n </span>\n <span className=\"yable-ctx-item-label\">{item.label}</span>\n {item.shortcut && (\n <kbd className=\"yable-ctx-item-shortcut\">{item.shortcut}</kbd>\n )}\n {hasChildren && (\n <span className=\"yable-ctx-item-arrow\" aria-hidden=\"true\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path d=\"M3.5 2L6.5 5L3.5 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n )}\n\n {hasChildren && submenuOpen && (\n <div\n ref={submenuRef}\n className=\"yable-ctx-menu yable-ctx-submenu yable-ctx-menu--animated\"\n role=\"menu\"\n onMouseEnter={() => clearTimeout(timerRef.current)}\n onMouseLeave={handleMouseLeave}\n >\n {item.children!.map((child) => (\n <ContextMenuItem key={child.id} item={child} onClose={onClose} />\n ))}\n </div>\n )}\n </div>\n )\n}\n","// @zvndev/yable-react — Context Menu Component\n// Built-in right-click menu with copy, paste, cut, export, sort, pin, hide, auto-size.\n\nimport React, { useRef, useEffect, useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { ContextMenuItem, type ContextMenuItemDef } from './ContextMenuItem'\n\nexport type { ContextMenuItemDef }\n\ninterface ContextMenuProps<TData extends RowData> {\n x: number\n y: number\n onClose: () => void\n table: Table<TData>\n /** Column the menu was opened on (right-clicked header/cell). */\n targetColumnId?: string\n customItems?: ContextMenuItemDef[]\n}\n\nexport function ContextMenu<TData extends RowData>({\n x,\n y,\n onClose,\n table,\n targetColumnId,\n customItems,\n}: ContextMenuProps<TData>) {\n const menuRef = useRef<HTMLDivElement>(null)\n\n // Position adjustment to keep menu within viewport\n useEffect(() => {\n if (!menuRef.current) return\n const rect = menuRef.current.getBoundingClientRect()\n const vw = window.innerWidth\n const vh = window.innerHeight\n\n if (rect.right > vw - 8) {\n menuRef.current.style.left = `${x - rect.width}px`\n }\n if (rect.bottom > vh - 8) {\n menuRef.current.style.top = `${y - rect.height}px`\n }\n }, [x, y])\n\n // Focus first item for keyboard nav\n useEffect(() => {\n const firstItem = menuRef.current?.querySelector<HTMLElement>('[role=\"menuitem\"]')\n firstItem?.focus()\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose()\n return\n }\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n const items = menuRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n )\n if (!items || items.length === 0) return\n\n const currentIndex = Array.from(items).findIndex((el) => el === document.activeElement)\n\n let nextIndex: number\n if (e.key === 'ArrowDown') {\n nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0\n } else {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1\n }\n items[nextIndex]?.focus()\n }\n },\n [onClose],\n )\n\n // Resolve the column the sort actions should target. Prefer the column the\n // user right-clicked; otherwise fall back to the currently focused cell.\n const resolveSortColumn = () => {\n if (targetColumnId) {\n const column = table.getColumn(targetColumnId)\n if (column) return column\n }\n const focused = table.getFocusedCell()\n if (focused) {\n return table.getVisibleLeafColumns()[focused.columnIndex]\n }\n return undefined\n }\n\n // Build default menu items\n const defaultItems: ContextMenuItemDef[] = [\n {\n id: 'copy',\n label: 'Copy',\n shortcut: '\\u2318C',\n action: () => {\n try {\n const text = table.copyToClipboard()\n navigator.clipboard?.writeText(text)\n } catch {\n // Clipboard access can be unavailable in some browsers or test environments.\n }\n },\n },\n {\n id: 'cut',\n label: 'Cut',\n shortcut: '\\u2318X',\n action: () => {\n try {\n const text = table.cutCells()\n navigator.clipboard?.writeText(text)\n } catch {\n // Clipboard access can be unavailable in some browsers or test environments.\n }\n },\n },\n {\n id: 'paste',\n label: 'Paste',\n shortcut: '\\u2318V',\n action: () => {\n navigator.clipboard\n ?.readText()\n .then((text) => {\n const editing = table.getState().editing\n if (editing?.activeCell) {\n table.pasteFromClipboard(text, editing.activeCell.rowId, editing.activeCell.columnId)\n }\n })\n .catch(() => {})\n },\n },\n { id: 'sep1', label: '', separator: true },\n {\n id: 'sort',\n label: 'Sort',\n children: [\n {\n id: 'sort-asc',\n label: 'Sort Ascending',\n action: () => {\n resolveSortColumn()?.toggleSorting(false)\n },\n },\n {\n id: 'sort-desc',\n label: 'Sort Descending',\n action: () => {\n resolveSortColumn()?.toggleSorting(true)\n },\n },\n {\n id: 'sort-clear',\n label: 'Clear Sort',\n action: () => {\n table.resetSorting(true)\n },\n },\n ],\n },\n { id: 'sep2', label: '', separator: true },\n {\n id: 'export',\n label: 'Export',\n children: [\n {\n id: 'export-csv',\n label: 'Export as CSV',\n action: () => {\n const csv = table.exportData({ format: 'csv', allRows: true })\n const blob = new Blob([csv], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = 'table-export.csv'\n a.click()\n URL.revokeObjectURL(url)\n },\n },\n {\n id: 'export-json',\n label: 'Export as JSON',\n action: () => {\n const json = table.exportData({ format: 'json', allRows: true })\n const blob = new Blob([json], { type: 'application/json' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = 'table-export.json'\n a.click()\n URL.revokeObjectURL(url)\n },\n },\n ],\n },\n ]\n\n const items = customItems\n ? [...defaultItems, { id: 'sep-custom', label: '', separator: true }, ...customItems]\n : defaultItems\n\n return (\n <>\n {/* Invisible backdrop to capture outside clicks and close the menu */}\n <div\n className=\"yable-ctx-backdrop\"\n onClick={onClose}\n onContextMenu={(e) => {\n e.preventDefault()\n onClose()\n }}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9998,\n }}\n aria-hidden=\"true\"\n />\n <div\n ref={menuRef}\n className=\"yable-ctx-menu yable-ctx-menu--animated\"\n role=\"menu\"\n aria-label=\"Context menu\"\n style={{\n position: 'fixed',\n left: x,\n top: y,\n zIndex: 9999,\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n >\n {items.map((item) => (\n <ContextMenuItem key={item.id} item={item} onClose={onClose} />\n ))}\n </div>\n </>\n )\n}\n","// @zvndev/yable-react — useContextMenu hook\n\nimport { useState, useCallback, useEffect } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\nexport function useContextMenu() {\n const [isOpen, setIsOpen] = useState(false)\n const [x, setX] = useState(0)\n const [y, setY] = useState(0)\n const [targetTable, setTargetTable] = useState<Table<any> | null>(null)\n const [targetColumnId, setTargetColumnId] = useState<string | undefined>(undefined)\n\n const open = useCallback(\n <TData extends RowData>(\n clientX: number,\n clientY: number,\n table: Table<TData>,\n columnId?: string,\n ) => {\n setX(clientX)\n setY(clientY)\n setTargetTable(table as any)\n setTargetColumnId(columnId)\n setIsOpen(true)\n },\n [],\n )\n\n const close = useCallback(() => {\n setIsOpen(false)\n setTargetTable(null)\n setTargetColumnId(undefined)\n }, [])\n\n // Close on escape key\n useEffect(() => {\n if (!isOpen) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close()\n }\n\n const handleClick = () => close()\n\n document.addEventListener('keydown', handleKeyDown)\n document.addEventListener('click', handleClick)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.removeEventListener('click', handleClick)\n }\n }, [isOpen, close])\n\n return { isOpen, x, y, targetTable, targetColumnId, open, close }\n}\n","// @zvndev/yable-react — useKeyboardNavigation hook\n// Attaches spreadsheet-style keyboard navigation to the table container.\n\nimport { useCallback, useEffect } from 'react'\nimport {\n canCellEnterEditMode,\n getFirstKeyboardCell,\n getResolvedFocusedCell,\n type KeyboardNavigationCell,\n type RowData,\n type Table,\n} from '@zvndev/yable-core'\n\nexport interface UseKeyboardNavigationOptions {\n /** Whether keyboard navigation is enabled. Default: true */\n enabled?: boolean\n /** The table container element ref */\n containerRef?: React.RefObject<HTMLElement | null>\n}\n\nexport function useKeyboardNavigation<TData extends RowData>(\n table: Table<TData>,\n options: UseKeyboardNavigationOptions = {}\n): void {\n const {\n enabled = true,\n containerRef,\n } = options\n\n const focusedCell = table.getFocusedCell()\n const activeCell = table.getState().editing.activeCell\n const focusedRowIndex = focusedCell?.rowIndex ?? null\n const focusedColumnIndex = focusedCell?.columnIndex ?? null\n\n const focusCellElement = useCallback(\n (container: HTMLElement, cell: KeyboardNavigationCell): boolean => {\n const element = getCellElement(container, cell)\n if (!element) return false\n\n element.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n })\n\n if (document.activeElement !== element) {\n element.focus({ preventScroll: true })\n }\n\n return true\n },\n []\n )\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!enabled || table.options.enableKeyboardNavigation === false) return\n\n const target = event.target as HTMLElement | null\n if (isEditableTarget(target)) return\n\n const ctrlKey = event.ctrlKey || event.metaKey\n const currentFocusedCell = table.getFocusedCell() ?? getFirstKeyboardCell(table)\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault()\n table.moveFocus({ type: 'arrow', direction: 'up', ctrlKey })\n return\n\n case 'ArrowDown':\n event.preventDefault()\n table.moveFocus({ type: 'arrow', direction: 'down', ctrlKey })\n return\n\n case 'ArrowLeft':\n event.preventDefault()\n table.moveFocus({ type: 'arrow', direction: 'left', ctrlKey })\n return\n\n case 'ArrowRight':\n event.preventDefault()\n table.moveFocus({ type: 'arrow', direction: 'right', ctrlKey })\n return\n\n case 'Tab':\n event.preventDefault()\n table.moveFocus({ type: 'tab', shiftKey: event.shiftKey })\n return\n\n case 'Home':\n event.preventDefault()\n table.moveFocus({ type: 'home', ctrlKey })\n return\n\n case 'End':\n event.preventDefault()\n table.moveFocus({ type: 'end', ctrlKey })\n return\n\n case 'PageUp':\n event.preventDefault()\n table.moveFocus({\n type: 'page',\n direction: 'up',\n pageSize: getVisiblePageSize(containerRef?.current, table),\n })\n return\n\n case 'PageDown':\n event.preventDefault()\n table.moveFocus({\n type: 'page',\n direction: 'down',\n pageSize: getVisiblePageSize(containerRef?.current, table),\n })\n return\n\n case 'F2': {\n const resolved = getResolvedFocusedCell(table, currentFocusedCell)\n if (!resolved) return\n if (!canCellEnterEditMode(table, resolved.row, resolved.column)) return\n\n event.preventDefault()\n table.startEditing(resolved.row.id, resolved.column.id)\n return\n }\n\n case 'Enter':\n if (!activeCell) return\n event.preventDefault()\n table.commitEdit()\n return\n\n case 'Escape':\n if (!activeCell) return\n event.preventDefault()\n table.cancelEdit()\n return\n }\n },\n [activeCell, containerRef, enabled, table]\n )\n\n useEffect(() => {\n if (!enabled || table.options.enableKeyboardNavigation === false) return\n\n const container = containerRef?.current\n if (!container) return\n\n container.addEventListener('keydown', handleKeyDown)\n\n return () => {\n container.removeEventListener('keydown', handleKeyDown)\n }\n }, [containerRef, enabled, handleKeyDown, table.options.enableKeyboardNavigation])\n\n useEffect(() => {\n if (!enabled || table.options.enableKeyboardNavigation === false) return\n if (focusedRowIndex === null || focusedColumnIndex === null) return\n if (activeCell) return\n\n const container = containerRef?.current\n if (!container) return\n\n const nextFocusedCell = {\n rowIndex: focusedRowIndex,\n columnIndex: focusedColumnIndex,\n }\n\n if (focusCellElement(container, nextFocusedCell)) {\n return\n }\n\n const virtualContainer = getVirtualScrollContainer(container)\n if (!virtualContainer) return\n\n scrollVirtualRowIntoView(virtualContainer, table, nextFocusedCell.rowIndex)\n\n const rafId = requestAnimationFrame(() => {\n focusCellElement(container, nextFocusedCell)\n })\n\n return () => cancelAnimationFrame(rafId)\n }, [\n activeCell,\n containerRef,\n enabled,\n focusCellElement,\n focusedColumnIndex,\n focusedRowIndex,\n table,\n ])\n}\n\nfunction getCellElement(\n container: HTMLElement,\n cell: KeyboardNavigationCell\n): HTMLTableCellElement | null {\n return container.querySelector<HTMLTableCellElement>(\n `[data-row-index=\"${cell.rowIndex}\"][data-column-index=\"${cell.columnIndex}\"]`\n )\n}\n\nfunction getVirtualScrollContainer(container: HTMLElement): HTMLElement | null {\n return container.querySelector<HTMLElement>('.yable-virtual-scroll-container')\n}\n\nfunction getEstimatedRowHeight<TData extends RowData>(\n table: Table<TData>,\n rowIndex: number\n): number {\n const rowHeight = table.options.rowHeight\n\n if (typeof rowHeight === 'function') {\n return rowHeight(rowIndex)\n }\n\n if (typeof rowHeight === 'number') {\n return rowHeight\n }\n\n return table.options.estimateRowHeight ?? 40\n}\n\nfunction getEstimatedRowOffset<TData extends RowData>(\n table: Table<TData>,\n rowIndex: number\n): number {\n const rowHeight = table.options.rowHeight\n\n if (typeof rowHeight === 'function') {\n let offset = 0\n for (let index = 0; index < rowIndex; index++) {\n offset += rowHeight(index)\n }\n return offset\n }\n\n const estimatedRowHeight = getEstimatedRowHeight(table, rowIndex)\n return rowIndex * estimatedRowHeight\n}\n\nfunction scrollVirtualRowIntoView<TData extends RowData>(\n container: HTMLElement,\n table: Table<TData>,\n rowIndex: number\n): void {\n const rowTop = getEstimatedRowOffset(table, rowIndex)\n const rowHeight = getEstimatedRowHeight(table, rowIndex)\n const rowBottom = rowTop + rowHeight\n\n if (rowTop < container.scrollTop) {\n container.scrollTop = rowTop\n return\n }\n\n const viewportBottom = container.scrollTop + container.clientHeight\n if (rowBottom > viewportBottom) {\n container.scrollTop = rowBottom - container.clientHeight\n }\n}\n\nfunction getVisiblePageSize<TData extends RowData>(\n container: HTMLElement | null | undefined,\n table: Table<TData>\n): number {\n if (!container) return 10\n\n const scrollContainer = getVirtualScrollContainer(container) ?? container\n const estimatedRowHeight = getEstimatedRowHeight(\n table,\n table.getFocusedCell()?.rowIndex ?? 0\n )\n\n if (estimatedRowHeight <= 0) return 10\n\n return Math.max(1, Math.floor(scrollContainer.clientHeight / estimatedRowHeight))\n}\n\nfunction isEditableTarget(element: HTMLElement | null): boolean {\n if (!element) return false\n\n const tagName = element.tagName.toLowerCase()\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\n return true\n }\n\n return element.isContentEditable\n}\n","// @zvndev/yable-react — Main Table Component\n\nimport React, { useMemo, useState, useCallback, useRef, useEffect } from 'react'\nimport type { HeaderGroup, RowData, Table as TableInstance } from '@zvndev/yable-core'\nimport { TableProvider } from '../context'\nimport { useYableDefaults } from '../YableProvider'\nimport { resolveYableProfile } from '../config'\nimport type { TableProps } from '../types'\nimport { TableHeader } from './TableHeader'\nimport { TableBody } from './TableBody'\nimport { TableFooter } from './TableFooter'\nimport { LoadingOverlay } from './LoadingOverlay'\nimport { NoRowsOverlay } from './NoRowsOverlay'\nimport { StatusBar } from './StatusBar'\nimport { Sidebar } from './Sidebar'\nimport { ContextMenu } from './ContextMenu'\nimport { useContextMenu } from '../hooks/useContextMenu'\nimport { useKeyboardNavigation } from '../hooks/useKeyboardNavigation'\nimport { useColumnVirtualization } from '../hooks/useColumnVirtualization'\n\nfunction filterHeaderGroups<TData extends RowData>(\n groups: HeaderGroup<TData>[],\n visibleColumnIds: Set<string>,\n): HeaderGroup<TData>[] {\n return groups\n .map((group) => ({\n ...group,\n headers: group.headers.filter((header) => visibleColumnIds.has(header.column.id)),\n }))\n .filter((group) => group.headers.length > 0)\n}\n\nexport function Table<TData extends RowData>({\n table,\n stickyHeader: stickyHeaderProp,\n striped: stripedProp,\n bordered: borderedProp,\n compact: compactProp,\n theme: themeProp,\n config,\n configProfile,\n clickableRows,\n footer,\n loading,\n loadingComponent,\n loadingText,\n emptyMessage,\n emptyComponent,\n emptyIcon,\n emptyDetail,\n renderEmpty,\n renderLoading,\n children,\n className,\n direction: directionProp,\n statusBar,\n statusBarPanels,\n sidebar,\n sidebarPanels,\n defaultSidebarPanel,\n floatingFilters,\n columnVirtualization,\n columnVirtualizationOverscan,\n ariaLabel: ariaLabelProp,\n ...rest\n}: TableProps<TData>) {\n // Merge provider-level tableProps under explicit props (explicit wins)\n const providerDefaults = useYableDefaults()\n const { tableProps: providerTableProps } = providerDefaults\n const profile = resolveYableProfile(\n config ?? providerDefaults.config,\n configProfile ?? providerDefaults.tableProfile,\n )\n const profileTableProps = profile.table\n const stickyHeader =\n stickyHeaderProp ?? profileTableProps?.stickyHeader ?? providerTableProps?.stickyHeader\n const striped = stripedProp ?? profileTableProps?.striped ?? providerTableProps?.striped\n const bordered = borderedProp ?? profileTableProps?.bordered ?? providerTableProps?.bordered\n const compact = compactProp ?? profileTableProps?.compact ?? providerTableProps?.compact\n const theme = themeProp ?? profileTableProps?.theme ?? providerTableProps?.theme\n const direction = directionProp ?? profileTableProps?.direction ?? providerTableProps?.direction\n const ariaLabel = ariaLabelProp ?? profileTableProps?.ariaLabel ?? providerTableProps?.ariaLabel\n const resolvedClickableRows = clickableRows ?? profileTableProps?.clickableRows\n const resolvedStatusBar = statusBar ?? profileTableProps?.statusBar\n const resolvedSidebar = sidebar ?? profileTableProps?.sidebar\n const resolvedSidebarPanels = sidebarPanels ??\n profileTableProps?.sidebarPanels ?? ['columns', 'filters']\n const resolvedDefaultSidebarPanel = defaultSidebarPanel ?? profileTableProps?.defaultSidebarPanel\n const resolvedFloatingFilters = floatingFilters ?? profileTableProps?.floatingFilters\n const resolvedColumnVirtualization =\n columnVirtualization ?? profileTableProps?.columnVirtualization\n const resolvedColumnVirtualizationOverscan =\n columnVirtualizationOverscan ?? profileTableProps?.columnVirtualizationOverscan\n\n const [sidebarOpen, setSidebarOpen] = useState(false)\n const [sidebarPanel, setSidebarPanel] = useState<'columns' | 'filters'>(\n resolvedDefaultSidebarPanel ?? 'columns',\n )\n const containerRef = useRef<HTMLDivElement>(null)\n const horizontalScrollRef = useRef<HTMLDivElement>(null)\n const isRtl = direction === 'rtl'\n\n const classNames = [\n 'yable',\n theme && `yable-theme-${theme}`,\n stickyHeader && 'yable--sticky-header',\n striped && 'yable--striped',\n bordered && 'yable--bordered',\n compact && 'yable--compact',\n loading && 'yable-loading',\n isRtl && 'yable--rtl',\n sidebarOpen && 'yable--sidebar-open',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const rows = table.getRowModel().rows\n const hasGlobalFilter = Boolean(table.getState().globalFilter)\n const hasColumnFilters = table.getState().columnFilters.length > 0\n const isFiltered = hasGlobalFilter || hasColumnFilters\n const allVisibleColumns = table.getVisibleLeafColumns()\n const hasPinnedColumns =\n table.getLeftVisibleLeafColumns().length > 0 || table.getRightVisibleLeafColumns().length > 0\n const hasGroupedHeaders = table.getHeaderGroups().length > 1\n const canVirtualizeColumns =\n Boolean(resolvedColumnVirtualization) &&\n !hasPinnedColumns &&\n !hasGroupedHeaders &&\n allVisibleColumns.length > 0\n const allVisibleColumnSizeSignature = allVisibleColumns\n .map((column) => `${column.id}:${column.getSize()}`)\n .join('|')\n\n const columnVirtualState = useColumnVirtualization({\n containerRef: horizontalScrollRef,\n columns: allVisibleColumns,\n overscan: resolvedColumnVirtualizationOverscan ?? 2,\n enabled: canVirtualizeColumns,\n sizingKey: allVisibleColumnSizeSignature,\n })\n\n const renderTable = useMemo(() => {\n if (!canVirtualizeColumns || !columnVirtualState.isVirtualized) {\n return table\n }\n\n const virtualColumns = columnVirtualState.virtualColumns.map((entry) => entry.column)\n const visibleColumnIds = new Set(virtualColumns.map((column) => column.id))\n const next = Object.create(table) as TableInstance<TData>\n\n next.getVisibleFlatColumns = () => virtualColumns\n next.getVisibleLeafColumns = () => virtualColumns\n next.getCenterVisibleLeafColumns = () => virtualColumns\n next.getLeftVisibleLeafColumns = () => []\n next.getRightVisibleLeafColumns = () => []\n next.getHeaderGroups = () => filterHeaderGroups(table.getHeaderGroups(), visibleColumnIds)\n next.getCenterHeaderGroups = () =>\n filterHeaderGroups(table.getCenterHeaderGroups(), visibleColumnIds)\n next.getFooterGroups = () => filterHeaderGroups(table.getFooterGroups(), visibleColumnIds)\n next.getCenterFooterGroups = () =>\n filterHeaderGroups(table.getCenterFooterGroups(), visibleColumnIds)\n\n return next\n }, [\n canVirtualizeColumns,\n columnVirtualState.isVirtualized,\n columnVirtualState.virtualColumns,\n table,\n ])\n\n const showColumnVirtualizationShell = canVirtualizeColumns\n\n const contextMenu = useContextMenu()\n useKeyboardNavigation(table, { containerRef })\n\n // ---- aria-live announcements for sort, filter, and pagination changes ----\n const [announcement, setAnnouncement] = useState('')\n const prevSortingRef = useRef(table.getState().sorting)\n const prevFilterCountRef = useRef(rows.length)\n const prevHasFiltersRef = useRef(isFiltered)\n const prevPaginationRef = useRef(table.getState().pagination)\n const isFirstRenderRef = useRef(true)\n\n useEffect(() => {\n // Skip announcements on first render\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false\n return\n }\n\n const currentSorting = table.getState().sorting\n const currentPagination = table.getState().pagination\n const currentRowCount = rows.length\n const currentIsFiltered = isFiltered\n\n // Check for sorting changes\n if (JSON.stringify(currentSorting) !== JSON.stringify(prevSortingRef.current)) {\n prevSortingRef.current = currentSorting\n const firstSort = currentSorting[0]\n if (firstSort) {\n const column = table.getColumn(firstSort.id)\n const headerDef = column?.columnDef.header\n const columnName = typeof headerDef === 'string' ? headerDef : firstSort.id\n const direction = firstSort.desc ? 'descending' : 'ascending'\n setAnnouncement(`Sorted by ${columnName} ${direction}`)\n return\n }\n }\n\n // Check for filter result count changes\n if (\n currentRowCount !== prevFilterCountRef.current ||\n currentIsFiltered !== prevHasFiltersRef.current\n ) {\n prevFilterCountRef.current = currentRowCount\n prevHasFiltersRef.current = currentIsFiltered\n if (currentIsFiltered) {\n setAnnouncement(`${currentRowCount} rows after filtering`)\n return\n }\n }\n\n // Check for pagination changes\n if (JSON.stringify(currentPagination) !== JSON.stringify(prevPaginationRef.current)) {\n prevPaginationRef.current = currentPagination\n const pageCount = table.getPageCount()\n if (pageCount > 0) {\n setAnnouncement(`Page ${currentPagination.pageIndex + 1} of ${pageCount}`)\n return\n }\n }\n })\n\n const handleContextMenu = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault()\n // Resolve the right-clicked column from the nearest header/cell so the\n // menu's sort actions operate on the column under the cursor.\n const targetEl = (e.target as HTMLElement | null)?.closest?.('[data-column-id]')\n const targetColumnId = targetEl?.getAttribute('data-column-id') ?? undefined\n contextMenu.open(e.clientX, e.clientY, table, targetColumnId)\n },\n [contextMenu, table],\n )\n\n const visibleLeafColumns = renderTable.getVisibleLeafColumns()\n const visibleColumnTotalSize = visibleLeafColumns.reduce(\n (sum, column) => sum + column.getSize(),\n 0,\n )\n\n const colgroup =\n visibleLeafColumns.length === 0 ? null : (\n <colgroup>\n {visibleLeafColumns.map((col) => (\n <col key={col.id} style={{ width: col.getSize() }} />\n ))}\n </colgroup>\n )\n\n const outerTableStyle = useMemo((): React.CSSProperties | undefined => {\n if (columnVirtualState.isVirtualized) {\n return {\n width: columnVirtualState.visibleWidth,\n minWidth: columnVirtualState.visibleWidth,\n marginLeft: columnVirtualState.startOffset,\n tableLayout: 'fixed',\n }\n }\n return {\n minWidth: visibleColumnTotalSize || undefined,\n tableLayout: 'fixed',\n }\n }, [\n columnVirtualState.isVirtualized,\n columnVirtualState.visibleWidth,\n columnVirtualState.startOffset,\n visibleColumnTotalSize,\n ])\n\n const tableNode = (\n <table\n className=\"yable-table\"\n style={outerTableStyle}\n data-column-virtualized={columnVirtualState.isVirtualized || undefined}\n >\n {colgroup}\n <TableHeader table={renderTable} floatingFilters={resolvedFloatingFilters} />\n <TableBody table={renderTable} clickableRows={resolvedClickableRows} colgroup={colgroup} />\n {footer && <TableFooter table={renderTable} />}\n </table>\n )\n\n return (\n <TableProvider value={table}>\n <div\n ref={containerRef}\n className={classNames}\n data-theme={theme}\n dir={direction}\n role=\"grid\"\n aria-label={ariaLabel ?? 'Data table'}\n aria-rowcount={table.getRowModel().rows.length}\n aria-colcount={table.getVisibleLeafColumns().length}\n onContextMenu={handleContextMenu}\n {...rest}\n >\n <div className=\"yable-main\">\n {showColumnVirtualizationShell ? (\n <div\n ref={horizontalScrollRef}\n className=\"yable-horizontal-scroll-container\"\n style={{\n overflowX: 'auto',\n overflowY: 'visible',\n maxWidth: '100%',\n position: 'relative',\n }}\n >\n <div\n className=\"yable-horizontal-scroll-inner\"\n style={{\n width: Math.max(columnVirtualState.totalWidth, columnVirtualState.visibleWidth),\n minWidth: Math.max(\n columnVirtualState.totalWidth,\n columnVirtualState.visibleWidth,\n ),\n }}\n >\n {tableNode}\n </div>\n </div>\n ) : (\n tableNode\n )}\n\n <LoadingOverlay\n loading={loading}\n loadingComponent={renderLoading ? renderLoading() : loadingComponent}\n loadingText={loadingText}\n />\n\n {!loading &&\n rows.length === 0 &&\n (renderEmpty ? (\n renderEmpty()\n ) : (\n <NoRowsOverlay\n emptyComponent={emptyComponent}\n emptyIcon={emptyIcon}\n emptyMessage={emptyMessage}\n emptyDetail={emptyDetail}\n isFiltered={isFiltered}\n />\n ))}\n </div>\n\n {resolvedSidebar && !sidebarOpen && (\n <button\n type=\"button\"\n className=\"yable-sidebar-trigger\"\n aria-label=\"Open tool panel\"\n title=\"Open tool panel\"\n onClick={() => setSidebarOpen(true)}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <rect\n x=\"3\"\n y=\"4\"\n width=\"18\"\n height=\"16\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <line x1=\"14\" y1=\"4\" x2=\"14\" y2=\"20\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n </button>\n )}\n\n {resolvedSidebar && (\n <Sidebar\n table={table}\n open={sidebarOpen}\n onClose={() => setSidebarOpen(false)}\n panels={resolvedSidebarPanels}\n activePanel={sidebarPanel}\n onPanelChange={setSidebarPanel}\n />\n )}\n\n {resolvedStatusBar && <StatusBar table={table} panels={statusBarPanels} />}\n\n {children}\n\n {contextMenu.isOpen && (\n <ContextMenu\n x={contextMenu.x}\n y={contextMenu.y}\n onClose={contextMenu.close}\n table={table}\n targetColumnId={contextMenu.targetColumnId}\n />\n )}\n\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n border: 0,\n }}\n >\n {announcement}\n </div>\n </div>\n </TableProvider>\n )\n}\n","// @zvndev/yable-react — Pagination Component\n// Polished page navigation with SVG icons, page size selector, and row info.\n\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { getDefaultLocale } from '@zvndev/yable-core'\n\ninterface PaginationProps<TData extends RowData> {\n table: Table<TData>\n /** Show page size selector */\n showPageSize?: boolean\n /** Available page sizes */\n pageSizes?: number[]\n /** Show row count info */\n showInfo?: boolean\n /** Show first/last buttons */\n showFirstLast?: boolean\n}\n\n/** Chevron-left icon for Previous */\nfunction ChevronLeftIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M8.5 3L4.5 7L8.5 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\n/** Chevron-right icon for Next */\nfunction ChevronRightIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.5 3L9.5 7L5.5 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\n/** Double-chevron-left icon for First Page */\nfunction ChevronFirstIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9.5 3L5.5 7L9.5 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4.5 3V11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Double-chevron-right icon for Last Page */\nfunction ChevronLastIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4.5 3L8.5 7L4.5 11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M9.5 3V11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Small chevron for the page size select dropdown */\nfunction SelectChevronIcon() {\n return (\n <svg className=\"yable-pagination-select-icon\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2.5 4L5 6.5L7.5 4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport function Pagination<TData extends RowData>({\n table,\n showPageSize = true,\n pageSizes = [10, 20, 50, 100],\n showInfo = true,\n showFirstLast = true,\n}: PaginationProps<TData>) {\n const { pageIndex, pageSize } = table.getState().pagination\n const pageCount = table.getPageCount()\n const totalRows = table.getPrePaginationRowModel().rows.length\n const from = pageIndex * pageSize + 1\n const to = Math.min((pageIndex + 1) * pageSize, totalRows)\n const canPrev = table.getCanPreviousPage()\n const canNext = table.getCanNextPage()\n const locale = getDefaultLocale()\n\n return (\n <nav className=\"yable-pagination\" role=\"navigation\" aria-label=\"Table pagination\">\n {/* Row info and page size selector */}\n {showInfo && (\n <div className=\"yable-pagination-info\">\n <span className=\"yable-pagination-info-text\">\n {totalRows > 0\n ? `${from}\\u2013${to} ${locale.paginationOf} ${totalRows}`\n : locale.paginationNoResults}\n </span>\n {showPageSize && (\n <div className=\"yable-pagination-select-wrapper\">\n <select\n className=\"yable-pagination-select\"\n value={pageSize}\n onChange={(e) => {\n table.setPageSize(Number(e.target.value))\n }}\n aria-label=\"Rows per page\"\n >\n {pageSizes.map((size) => (\n <option key={size} value={size}>\n {size} {locale.paginationRows}\n </option>\n ))}\n </select>\n <SelectChevronIcon />\n </div>\n )}\n </div>\n )}\n\n {/* Page navigation buttons */}\n <div className=\"yable-pagination-pages\">\n {showFirstLast && (\n <button\n type=\"button\"\n className=\"yable-pagination-btn yable-pagination-btn--nav\"\n onClick={() => table.setPageIndex(0)}\n disabled={!canPrev}\n aria-label={locale.paginationFirstPage}\n title={locale.paginationFirstPage}\n >\n <ChevronFirstIcon />\n </button>\n )}\n\n <button\n type=\"button\"\n className=\"yable-pagination-btn yable-pagination-btn--nav\"\n onClick={() => table.previousPage()}\n disabled={!canPrev}\n aria-label={locale.paginationPreviousPage}\n title={locale.paginationPreviousPage}\n >\n <ChevronLeftIcon />\n </button>\n\n {/* Page number buttons with ellipsis */}\n {getPageNumbers(pageIndex, pageCount).map((page, i) =>\n page === -1 ? (\n <span\n key={`ellipsis-${i}`}\n className=\"yable-pagination-ellipsis\"\n aria-hidden=\"true\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle cx=\"3\" cy=\"7\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"7\" cy=\"7\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"11\" cy=\"7\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </span>\n ) : (\n <button\n type=\"button\"\n key={page}\n className={`yable-pagination-btn yable-pagination-btn--page${page === pageIndex ? ' yable-pagination-btn--active' : ''}`}\n data-active={page === pageIndex ? 'true' : undefined}\n onClick={() => table.setPageIndex(page)}\n aria-label={`${locale.paginationPage} ${page + 1}`}\n aria-current={page === pageIndex ? 'page' : undefined}\n >\n {page + 1}\n </button>\n )\n )}\n\n <button\n type=\"button\"\n className=\"yable-pagination-btn yable-pagination-btn--nav\"\n onClick={() => table.nextPage()}\n disabled={!canNext}\n aria-label={locale.paginationNextPage}\n title={locale.paginationNextPage}\n >\n <ChevronRightIcon />\n </button>\n\n {showFirstLast && (\n <button\n type=\"button\"\n className=\"yable-pagination-btn yable-pagination-btn--nav\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!canNext}\n aria-label={locale.paginationLastPage}\n title={locale.paginationLastPage}\n >\n <ChevronLastIcon />\n </button>\n )}\n </div>\n </nav>\n )\n}\n\n/** Compute which page numbers to show (with ellipsis) */\nfunction getPageNumbers(current: number, total: number): number[] {\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i)\n }\n\n const pages: number[] = []\n\n // Always show first\n pages.push(0)\n\n if (current > 3) {\n pages.push(-1) // ellipsis\n }\n\n // Window around current\n const start = Math.max(1, current - 1)\n const end = Math.min(total - 2, current + 1)\n\n for (let i = start; i <= end; i++) {\n pages.push(i)\n }\n\n if (current < total - 4) {\n pages.push(-1) // ellipsis\n }\n\n // Always show last\n pages.push(total - 1)\n\n return pages\n}\n","// @zvndev/yable-react — Global Filter Component\n// Search input with inline magnifying glass icon and clear button.\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { getDefaultLocale } from '@zvndev/yable-core'\n\ninterface GlobalFilterProps<TData extends RowData> {\n table: Table<TData>\n /** Placeholder text */\n placeholder?: string\n /** Debounce delay in ms (0 = no debounce) */\n debounce?: number\n /** Custom class name */\n className?: string\n}\n\n/** Magnifying glass search icon */\nfunction SearchIcon() {\n return (\n <svg\n className=\"yable-global-filter-icon\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle cx=\"6.25\" cy=\"6.25\" r=\"4.25\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M9.5 9.5L12.5 12.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\n/** Small X icon for clearing the search */\nfunction ClearIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 3l6 6M9 3L3 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport function GlobalFilter<TData extends RowData>({\n table,\n placeholder,\n debounce = 300,\n className,\n}: GlobalFilterProps<TData>) {\n const locale = getDefaultLocale()\n const resolvedPlaceholder = placeholder ?? locale.searchPlaceholder\n const [value, setValue] = useState<string>(\n (table.getState().globalFilter as string) ?? ''\n )\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n setValue(newValue)\n\n if (debounce > 0) {\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => {\n table.setGlobalFilter(newValue)\n }, debounce)\n } else {\n table.setGlobalFilter(newValue)\n }\n },\n [table, debounce]\n )\n\n const handleClear = useCallback(() => {\n setValue('')\n table.setGlobalFilter('')\n clearTimeout(timerRef.current)\n inputRef.current?.focus()\n }, [table])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && value) {\n e.preventDefault()\n handleClear()\n }\n },\n [value, handleClear]\n )\n\n // Cleanup timer\n useEffect(() => {\n return () => clearTimeout(timerRef.current)\n }, [])\n\n // Sync external state changes\n useEffect(() => {\n const externalValue = (table.getState().globalFilter as string) ?? ''\n if (externalValue !== value) {\n setValue(externalValue)\n }\n }, [table.getState().globalFilter])\n\n const hasValue = value.length > 0\n\n return (\n <div className={`yable-global-filter${hasValue ? ' yable-global-filter--has-value' : ''}${className ? ` ${className}` : ''}`}>\n <SearchIcon />\n <input\n ref={inputRef}\n type=\"text\"\n className=\"yable-global-filter-input\"\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={resolvedPlaceholder}\n aria-label={locale.searchAriaLabel}\n role=\"searchbox\"\n />\n {hasValue && (\n <button\n type=\"button\"\n className=\"yable-global-filter-clear\"\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n )\n}\n","// @zvndev/yable-react — CellInput form component\n\nimport React, { useEffect, useRef } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface CellInputProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n type?: 'text' | 'number' | 'email' | 'url' | 'tel'\n placeholder?: string\n inline?: boolean\n autoFocus?: boolean\n className?: string\n}\n\nexport function CellInput<TData extends RowData, TValue>({\n context,\n type = 'text',\n placeholder,\n inline = false,\n autoFocus,\n className,\n}: CellInputProps<TData, TValue>) {\n const { table, row, column, cell } = context\n const inputRef = useRef<HTMLInputElement>(null)\n const isEditing = cell.getIsEditing()\n const isAlwaysEditable = cell.getIsAlwaysEditable()\n\n // Get pending value or fall back to current\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = type === 'number' ? Number(e.target.value) : e.target.value\n table.setPendingValue(row.id, column.id, val)\n }\n\n const handleBlur = () => {\n if (isEditing && !isAlwaysEditable) {\n table.commitEdit()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n if (isEditing && !isAlwaysEditable) {\n table.commitEdit()\n }\n } else if (e.key === 'Escape') {\n if (isEditing && !isAlwaysEditable) {\n table.cancelEdit()\n }\n }\n }\n\n // Auto-focus when entering edit mode\n useEffect(() => {\n if ((isEditing || autoFocus) && inputRef.current) {\n inputRef.current.focus()\n inputRef.current.select()\n }\n }, [isEditing, autoFocus])\n\n const classNames = [\n 'yable-input',\n inline && 'yable-input--inline',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <input\n ref={inputRef}\n type={type}\n className={classNames}\n value={String(currentValue ?? '')}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n />\n )\n}\n","// @zvndev/yable-react — CellSelect form component\n\nimport React, { useEffect, useRef } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface SelectOption {\n label: string\n value: string | number\n}\n\ninterface CellSelectProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n options: SelectOption[]\n placeholder?: string\n className?: string\n}\n\nexport function CellSelect<TData extends RowData, TValue>({\n context,\n options,\n placeholder,\n className,\n}: CellSelectProps<TData, TValue>) {\n const { table, row, column, cell } = context\n const isEditing = cell.getIsEditing()\n const isAlwaysEditable = cell.getIsAlwaysEditable()\n\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n // Track the deferred-commit timer so we can cancel it if the component\n // unmounts before the macrotask fires (otherwise commitEdit would run\n // against a torn-down editing context).\n const commitTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n return () => {\n if (commitTimerRef.current !== null) {\n clearTimeout(commitTimerRef.current)\n commitTimerRef.current = null\n }\n }\n }, [])\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n table.setPendingValue(row.id, column.id, e.target.value)\n\n // Auto-commit for selects (they don't need blur to commit)\n if (isEditing && !isAlwaysEditable) {\n // Defer commit so the state update happens first\n if (commitTimerRef.current !== null) {\n clearTimeout(commitTimerRef.current)\n }\n commitTimerRef.current = setTimeout(() => {\n commitTimerRef.current = null\n table.commitEdit()\n }, 0)\n }\n }\n\n return (\n <select\n className={`yable-select ${className ?? ''}`}\n value={String(currentValue ?? '')}\n onChange={handleChange}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )\n}\n","// @zvndev/yable-react — CellCheckbox form component\n\nimport React from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface CellCheckboxProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n className?: string\n}\n\nexport function CellCheckbox<TData extends RowData, TValue>({\n context,\n className,\n}: CellCheckboxProps<TData, TValue>) {\n const { table, row, column, cell } = context\n\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n table.setPendingValue(row.id, column.id, e.target.checked)\n }\n\n return (\n <input\n type=\"checkbox\"\n className={`yable-checkbox ${className ?? ''}`}\n checked={Boolean(currentValue)}\n onChange={handleChange}\n />\n )\n}\n","// @zvndev/yable-react — CellToggle form component\n\nimport React from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface CellToggleProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n className?: string\n}\n\nexport function CellToggle<TData extends RowData, TValue>({\n context,\n className,\n}: CellToggleProps<TData, TValue>) {\n const { table, row, column, cell } = context\n\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n table.setPendingValue(row.id, column.id, e.target.checked)\n }\n\n return (\n <input\n type=\"checkbox\"\n role=\"switch\"\n className={`yable-toggle ${className ?? ''}`}\n checked={Boolean(currentValue)}\n onChange={handleChange}\n aria-checked={Boolean(currentValue)}\n />\n )\n}\n","// @zvndev/yable-react — CellDatePicker form component\n\nimport React, { useEffect, useRef } from 'react'\nimport type { RowData, CellContext } from '@zvndev/yable-core'\n\ninterface CellDatePickerProps<TData extends RowData, TValue> {\n context: CellContext<TData, TValue>\n type?: 'date' | 'datetime-local' | 'time'\n className?: string\n}\n\nexport function CellDatePicker<TData extends RowData, TValue>({\n context,\n type = 'date',\n className,\n}: CellDatePickerProps<TData, TValue>) {\n const { table, row, column, cell } = context\n const inputRef = useRef<HTMLInputElement>(null)\n const isEditing = cell.getIsEditing()\n const isAlwaysEditable = cell.getIsAlwaysEditable()\n\n const pending = table.getPendingValue(row.id, column.id)\n const currentValue = pending !== undefined ? pending : cell.getValue()\n\n // Format value for date input\n const formattedValue = formatDateValue(currentValue, type)\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n table.setPendingValue(row.id, column.id, e.target.value)\n }\n\n const handleBlur = () => {\n if (isEditing && !isAlwaysEditable) {\n table.commitEdit()\n }\n }\n\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus()\n }\n }, [isEditing])\n\n return (\n <input\n ref={inputRef}\n type={type}\n className={`yable-input ${className ?? ''}`}\n value={formattedValue}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n )\n}\n\nfunction formatDateValue(value: unknown, type: string): string {\n if (!value) return ''\n if (typeof value === 'string') return value\n\n if (value instanceof Date) {\n if (type === 'date') {\n return value.toISOString().split('T')[0]!\n }\n if (type === 'datetime-local') {\n return value.toISOString().slice(0, 16)\n }\n if (type === 'time') {\n return value.toISOString().slice(11, 16)\n }\n }\n\n return String(value)\n}\n","// @zvndev/yable-react — useClipboard hook\n// Attaches copy/cut/paste keyboard listeners to the table container.\n\nimport { useEffect, useCallback } from 'react'\nimport type { RowData, Table, ClipboardOptions } from '@zvndev/yable-core'\n\nexport interface UseClipboardOptions extends ClipboardOptions {\n /** Whether clipboard is enabled. Default: true */\n enabled?: boolean\n /** The container element ref to attach listeners to */\n containerRef?: React.RefObject<HTMLElement | null>\n /** Callback when data is copied */\n onCopy?: (text: string) => void\n /** Callback when data is cut */\n onCut?: (text: string) => void\n /** Callback when data is pasted */\n onPaste?: (text: string) => void\n}\n\n/**\n * React hook that attaches Ctrl+C / Ctrl+X / Ctrl+V keyboard listeners\n * to the table container for clipboard operations.\n */\nexport function useClipboard<TData extends RowData>(\n table: Table<TData>,\n options: UseClipboardOptions = {},\n): void {\n const { enabled = true, containerRef, onCopy, onCut, onPaste, ...clipboardOptions } = options\n\n const handleCopy = useCallback(\n (e: ClipboardEvent) => {\n // Don't intercept if user is in a form field\n if (isEditableTarget(e.target as HTMLElement)) return\n\n e.preventDefault()\n const text = table.copyToClipboard(clipboardOptions)\n\n if (e.clipboardData) {\n e.clipboardData.setData('text/plain', text)\n }\n\n onCopy?.(text)\n },\n [table, clipboardOptions, onCopy],\n )\n\n const handleCut = useCallback(\n (e: ClipboardEvent) => {\n if (isEditableTarget(e.target as HTMLElement)) return\n\n e.preventDefault()\n const text = table.cutCells(clipboardOptions)\n\n if (e.clipboardData) {\n e.clipboardData.setData('text/plain', text)\n }\n\n onCut?.(text)\n },\n [table, clipboardOptions, onCut],\n )\n\n const handlePaste = useCallback(\n (e: ClipboardEvent) => {\n if (isEditableTarget(e.target as HTMLElement)) return\n\n e.preventDefault()\n const text = e.clipboardData?.getData('text/plain') ?? ''\n\n if (!text) return\n\n // Determine target cell for paste (use active editing cell or first selected row + first column)\n const state = table.getState()\n let targetRowId: string | undefined\n let targetColumnId: string | undefined\n\n if (state.editing?.activeCell) {\n targetRowId = state.editing.activeCell.rowId\n targetColumnId = state.editing.activeCell.columnId\n } else {\n const selectedRange = table.getCellSelectionRange()\n const rows = table.getRowModel().rows\n const columns = table.getVisibleLeafColumns()\n\n if (selectedRange) {\n const startRowIndex = Math.min(selectedRange.start.rowIndex, selectedRange.end.rowIndex)\n const startColumnIndex = Math.min(\n selectedRange.start.columnIndex,\n selectedRange.end.columnIndex,\n )\n\n targetRowId = rows[startRowIndex]?.id\n targetColumnId = columns[startColumnIndex]?.id\n } else {\n // Use first selected row\n const selectedRowIds = Object.keys(state.rowSelection || {}).filter(\n (id) => state.rowSelection[id],\n )\n if (selectedRowIds.length > 0) {\n targetRowId = selectedRowIds[0]\n } else if (rows.length > 0) {\n // Use first visible row\n targetRowId = rows[0]!.id\n }\n\n if (columns.length > 0) {\n // Use first visible column\n targetColumnId = columns[0]!.id\n }\n }\n }\n\n if (targetRowId && targetColumnId) {\n table.pasteFromClipboard(text, targetRowId, targetColumnId, clipboardOptions)\n onPaste?.(text)\n }\n },\n [table, clipboardOptions, onPaste],\n )\n\n useEffect(() => {\n if (!enabled) return\n\n const container = containerRef?.current ?? document\n\n container.addEventListener('copy', handleCopy as EventListener)\n container.addEventListener('cut', handleCut as EventListener)\n container.addEventListener('paste', handlePaste as EventListener)\n\n return () => {\n container.removeEventListener('copy', handleCopy as EventListener)\n container.removeEventListener('cut', handleCut as EventListener)\n container.removeEventListener('paste', handlePaste as EventListener)\n }\n }, [enabled, containerRef, handleCopy, handleCut, handlePaste])\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Returns true if the event target is an editable form element (input, textarea,\n * contenteditable), meaning we should NOT intercept clipboard events.\n */\nfunction isEditableTarget(el: HTMLElement | null): boolean {\n if (!el) return false\n const tagName = el.tagName?.toLowerCase()\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\n return true\n }\n if (el.isContentEditable) return true\n return false\n}\n","// @zvndev/yable-react — useFillHandle hook\n// Tracks drag state for the fill handle corner square.\n\nimport { useState, useCallback, useEffect, useRef } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\nexport interface FillHandleDragState {\n isDragging: boolean\n sourceCell: { rowIndex: number; columnIndex: number } | null\n currentCell: { rowIndex: number; columnIndex: number } | null\n}\n\nexport interface UseFillHandleOptions {\n /** Whether fill handle is enabled. Default: true */\n enabled?: boolean\n}\n\nexport interface UseFillHandleReturn {\n dragState: FillHandleDragState\n onFillHandleMouseDown: (\n rowIndex: number,\n columnIndex: number,\n e: React.MouseEvent\n ) => void\n}\n\n/**\n * React hook for fill handle drag tracking.\n * Returns drag state and a mousedown handler to attach to the FillHandle component.\n */\nexport function useFillHandle<TData extends RowData>(\n table: Table<TData>,\n options: UseFillHandleOptions = {}\n): UseFillHandleReturn {\n const { enabled = true } = options\n\n const [dragState, setDragState] = useState<FillHandleDragState>({\n isDragging: false,\n sourceCell: null,\n currentCell: null,\n })\n\n const dragRef = useRef(dragState)\n dragRef.current = dragState\n\n const onFillHandleMouseDown = useCallback(\n (rowIndex: number, columnIndex: number, e: React.MouseEvent) => {\n if (!enabled) return\n\n e.preventDefault()\n e.stopPropagation()\n\n setDragState({\n isDragging: true,\n sourceCell: { rowIndex, columnIndex },\n currentCell: { rowIndex, columnIndex },\n })\n },\n [enabled]\n )\n\n useEffect(() => {\n if (!dragState.isDragging) return\n\n const handleMouseMove = (e: MouseEvent) => {\n // Find the table cell under the cursor\n const target = document.elementFromPoint(e.clientX, e.clientY)\n if (!target) return\n\n const td = target.closest('td[data-column-id]') as HTMLElement | null\n const tr = target.closest('tr[data-row-id]') as HTMLElement | null\n\n if (!td || !tr) return\n\n const columnId = td.getAttribute('data-column-id')\n const rowId = tr.getAttribute('data-row-id')\n\n if (!columnId || !rowId) return\n\n // Find row and column indices\n const rows = table.getRowModel().rows\n const columns = table.getVisibleLeafColumns()\n\n const rowIndex = rows.findIndex((r) => r.id === rowId)\n const columnIndex = columns.findIndex((c) => c.id === columnId)\n\n if (rowIndex === -1 || columnIndex === -1) return\n\n setDragState((prev) => ({\n ...prev,\n currentCell: { rowIndex, columnIndex },\n }))\n }\n\n const handleMouseUp = () => {\n const current = dragRef.current\n\n if (current.sourceCell && current.currentCell) {\n const source = current.sourceCell\n const target = current.currentCell\n\n // Only fill if we actually dragged to a different cell\n if (source.rowIndex !== target.rowIndex || source.columnIndex !== target.columnIndex) {\n const sourceRange = {\n startRow: source.rowIndex,\n startCol: source.columnIndex,\n endRow: source.rowIndex,\n endCol: source.columnIndex,\n }\n\n const targetRange = {\n startRow: Math.min(source.rowIndex, target.rowIndex),\n startCol: Math.min(source.columnIndex, target.columnIndex),\n endRow: Math.max(source.rowIndex, target.rowIndex),\n endCol: Math.max(source.columnIndex, target.columnIndex),\n }\n\n table.fillRange(sourceRange, targetRange)\n }\n }\n\n setDragState({\n isDragging: false,\n sourceCell: null,\n currentCell: null,\n })\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n }\n }, [dragState.isDragging, table])\n\n return { dragState, onFillHandleMouseDown }\n}\n","// @zvndev/yable-react — FillHandle Component\n// Small blue square at the bottom-right corner of the focused cell.\n// Cursor changes to crosshair and the handle scales up on hover.\n\nimport React, { useCallback } from 'react'\n\nexport interface FillHandleProps {\n /** Row index of the cell this handle belongs to */\n rowIndex: number\n /** Column index of the cell this handle belongs to */\n columnIndex: number\n /** Callback when the user starts dragging the fill handle */\n onMouseDown: (rowIndex: number, columnIndex: number, e: React.MouseEvent) => void\n}\n\n/**\n * Renders a small accent-colored square at the bottom-right corner of a cell.\n * The user drags this to auto-fill adjacent cells (like Excel/Google Sheets).\n */\nexport function FillHandle({\n rowIndex,\n columnIndex,\n onMouseDown,\n}: FillHandleProps) {\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n onMouseDown(rowIndex, columnIndex, e)\n },\n [rowIndex, columnIndex, onMouseDown]\n )\n\n return (\n <div\n className=\"yable-fill-handle\"\n onMouseDown={handleMouseDown}\n role=\"presentation\"\n aria-hidden=\"true\"\n title=\"Drag to fill\"\n >\n <div className=\"yable-fill-handle-dot\" />\n </div>\n )\n}\n","// @zvndev/yable-react — Drag Handle Component\n// Renders a 2x3 grip dot icon that initiates HTML5 drag operations.\n// Appears subtle by default and becomes more prominent on hover.\n\nimport React, { useCallback } from 'react'\n\ninterface DragHandleProps {\n /** Called when drag starts on this handle */\n onDragStart: (e: React.DragEvent) => void\n /** Whether this handle is currently part of a dragging row */\n isDragging?: boolean\n /** Accessible label */\n ariaLabel?: string\n /** Additional className */\n className?: string\n}\n\n/** 2x3 grip dot pattern — the universal drag affordance */\nfunction GripIcon() {\n return (\n <svg\n width=\"10\"\n height=\"16\"\n viewBox=\"0 0 10 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n {/* Column 1 */}\n <circle cx=\"2.5\" cy=\"3\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"2.5\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"2.5\" cy=\"13\" r=\"1.3\" fill=\"currentColor\" />\n {/* Column 2 */}\n <circle cx=\"7.5\" cy=\"3\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"7.5\" cy=\"8\" r=\"1.3\" fill=\"currentColor\" />\n <circle cx=\"7.5\" cy=\"13\" r=\"1.3\" fill=\"currentColor\" />\n </svg>\n )\n}\n\nexport function DragHandle({\n onDragStart,\n isDragging,\n ariaLabel = 'Drag to reorder row',\n className,\n}: DragHandleProps) {\n const classes = [\n 'yable-row-drag-handle',\n isDragging && 'yable-row-drag-handle--dragging',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleDragStart = useCallback(\n (e: React.DragEvent) => {\n // Set a drag image offset so the row follows the cursor naturally\n if (e.dataTransfer && e.currentTarget instanceof HTMLElement) {\n e.dataTransfer.effectAllowed = 'move'\n }\n onDragStart(e)\n },\n [onDragStart]\n )\n\n return (\n <button\n type=\"button\"\n className={classes}\n draggable\n onDragStart={handleDragStart}\n aria-label={ariaLabel}\n aria-roledescription=\"Drag handle\"\n tabIndex={-1}\n >\n <GripIcon />\n </button>\n )\n}\n","// @zvndev/yable-react — useRowDrag hook\n// React hook wrapping the HTML5 Drag & Drop API for row reordering.\n\nimport { useState, useCallback, useRef } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport {\n type RowDragState,\n getInitialRowDragState,\n moveRow,\n} from '@zvndev/yable-core/features/rowDragging'\n\n// Re-export the type for convenience\nexport type { RowDragState }\n\nexport interface UseRowDragOptions<TData extends RowData> {\n table: Table<TData>\n /** Current data array */\n data: TData[]\n /** Callback to set data after reorder */\n onDataChange: (data: TData[]) => void\n /** Optional callback when reorder completes */\n onReorder?: (event: { fromIndex: number; toIndex: number; rowId: string }) => void\n}\n\nexport interface UseRowDragReturn {\n /** Current drag state */\n dragState: RowDragState\n /** Props to spread on a draggable row */\n getRowDragProps: (rowId: string, rowIndex: number) => {\n draggable: boolean\n onDragStart: (e: React.DragEvent) => void\n onDragOver: (e: React.DragEvent) => void\n onDragLeave: (e: React.DragEvent) => void\n onDrop: (e: React.DragEvent) => void\n onDragEnd: (e: React.DragEvent) => void\n 'data-dragging': boolean | undefined\n 'data-drag-over': string | undefined\n }\n /** Props to spread on a drag handle element */\n getDragHandleProps: (rowId: string) => {\n onDragStart: (e: React.DragEvent) => void\n }\n}\n\nexport function useRowDrag<TData extends RowData>({\n table,\n data,\n onDataChange,\n onReorder,\n}: UseRowDragOptions<TData>): UseRowDragReturn {\n const [dragState, setDragState] = useState<RowDragState>(getInitialRowDragState)\n const dragRowIdRef = useRef<string | null>(null)\n const dragRowIndexRef = useRef<number>(-1)\n\n const getRowDragProps = useCallback(\n (rowId: string, rowIndex: number) => {\n return {\n draggable: true as boolean,\n\n onDragStart: (e: React.DragEvent) => {\n dragRowIdRef.current = rowId\n dragRowIndexRef.current = rowIndex\n\n e.dataTransfer.effectAllowed = 'move'\n e.dataTransfer.setData('text/plain', rowId)\n\n // Slight delay so the browser renders the drag image\n requestAnimationFrame(() => {\n setDragState({\n draggingRowId: rowId,\n overRowId: null,\n dropPosition: null,\n })\n })\n\n table.events.emit('row:drag:start' as any, {\n rowId,\n rowIndex,\n row: table.getRow(rowId, true),\n })\n },\n\n onDragOver: (e: React.DragEvent) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n\n if (!dragRowIdRef.current || dragRowIdRef.current === rowId) return\n\n // Determine drop position based on mouse Y relative to row midpoint\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const midY = rect.top + rect.height / 2\n const position: 'before' | 'after' =\n e.clientY < midY ? 'before' : 'after'\n\n setDragState((prev) => ({\n ...prev,\n overRowId: rowId,\n dropPosition: position,\n }))\n },\n\n onDragLeave: (_e: React.DragEvent) => {\n setDragState((prev) => {\n if (prev.overRowId === rowId) {\n return { ...prev, overRowId: null, dropPosition: null }\n }\n return prev\n })\n },\n\n onDrop: (e: React.DragEvent) => {\n e.preventDefault()\n\n const fromId = dragRowIdRef.current\n if (!fromId || fromId === rowId) {\n setDragState(getInitialRowDragState())\n return\n }\n\n const fromIndex = dragRowIndexRef.current\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n const midY = rect.top + rect.height / 2\n const dropAfter = e.clientY >= midY\n\n let toIndex = rowIndex\n if (dropAfter && fromIndex > rowIndex) {\n toIndex = rowIndex + 1\n } else if (!dropAfter && fromIndex < rowIndex) {\n toIndex = rowIndex - 1\n }\n\n // Clamp\n toIndex = Math.max(0, Math.min(toIndex, data.length - 1))\n\n const newData = moveRow(data, fromIndex, toIndex)\n onDataChange(newData)\n\n onReorder?.({ fromIndex, toIndex, rowId: fromId })\n table.events.emit('row:reorder' as any, {\n fromIndex,\n toIndex,\n rowId: fromId,\n })\n\n table.events.emit('row:drag:end' as any, {\n rowId: fromId,\n row: table.getRow(fromId, true),\n cancelled: false,\n })\n\n setDragState(getInitialRowDragState())\n dragRowIdRef.current = null\n dragRowIndexRef.current = -1\n },\n\n onDragEnd: (_e: React.DragEvent) => {\n if (dragRowIdRef.current) {\n try {\n table.events.emit('row:drag:end' as any, {\n rowId: dragRowIdRef.current,\n row: table.getRow(dragRowIdRef.current, true),\n cancelled: true,\n })\n } catch {\n // Row may no longer exist\n }\n }\n\n setDragState(getInitialRowDragState())\n dragRowIdRef.current = null\n dragRowIndexRef.current = -1\n },\n\n 'data-dragging':\n dragState.draggingRowId === rowId ? true : undefined,\n 'data-drag-over':\n dragState.overRowId === rowId\n ? (dragState.dropPosition ?? undefined)\n : undefined,\n }\n },\n [data, dragState, onDataChange, onReorder, table]\n )\n\n const getDragHandleProps = useCallback(\n (rowId: string) => ({\n onDragStart: (e: React.DragEvent) => {\n // The parent row's onDragStart will fire via bubbling,\n // but we set the data here for the drag handle specifically\n e.dataTransfer.effectAllowed = 'move'\n e.dataTransfer.setData('text/plain', rowId)\n },\n }),\n []\n )\n\n return {\n dragState,\n getRowDragProps,\n getDragHandleProps,\n }\n}\n","// @zvndev/yable-react — Tree Toggle Component\n// Renders indent + animated expand/collapse chevron for tree data rows.\n// The chevron smoothly rotates 90 degrees on expand/collapse via CSS transition.\n\nimport React, { useCallback } from 'react'\nimport type { RowData, Row } from '@zvndev/yable-core'\n\ninterface TreeToggleProps<TData extends RowData> {\n row: Row<TData>\n /** Indentation width per level in pixels */\n indentWidth?: number\n /** Whether to show the toggle icon (false for leaf nodes) */\n showToggle?: boolean\n /** Optional custom toggle icon */\n renderIcon?: (props: { isExpanded: boolean; isLeaf: boolean }) => React.ReactNode\n}\n\nexport function TreeToggle<TData extends RowData>({\n row,\n indentWidth = 20,\n showToggle,\n renderIcon,\n}: TreeToggleProps<TData>) {\n const depth = (row as any)._treeDepth ?? row.depth\n const isLeaf = (row as any)._isLeaf ?? row.subRows.length === 0\n const hasChildren = (row as any)._hasChildren ?? row.subRows.length > 0\n const isExpanded = row.getIsExpanded()\n const canToggle = showToggle !== undefined ? showToggle : hasChildren\n\n const indent = depth * indentWidth\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n if (canToggle) {\n row.toggleExpanded()\n }\n },\n [canToggle, row]\n )\n\n return (\n <span\n className=\"yable-tree-toggle\"\n style={{ paddingLeft: `${indent}px` }}\n data-depth={depth}\n data-leaf={isLeaf || undefined}\n >\n {canToggle ? (\n <button\n type=\"button\"\n className={`yable-tree-toggle-btn${isExpanded ? ' yable-tree-toggle-btn--expanded' : ''}`}\n onClick={handleClick}\n data-expanded={isExpanded || undefined}\n aria-expanded={isExpanded}\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n tabIndex={-1}\n >\n {renderIcon ? (\n renderIcon({ isExpanded, isLeaf })\n ) : (\n <svg\n className=\"yable-tree-chevron\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n style={{\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform var(--yable-transition, 150ms ease)',\n }}\n >\n <path\n d=\"M5 3L9 7L5 11\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n ) : (\n <span className=\"yable-tree-toggle-spacer\" aria-hidden=\"true\" />\n )}\n </span>\n )\n}\n","// @zvndev/yable-react — Expand Icon Component\n// Animated expand/collapse chevron for master/detail rows.\n// Uses CSS transform: rotate() with a smooth transition for the expand animation.\n\nimport React, { useCallback } from 'react'\n\ninterface ExpandIconProps {\n /** Whether the row is expanded */\n isExpanded: boolean\n /** Click handler to toggle expansion */\n onClick: (e: React.MouseEvent) => void\n /** Accessible label */\n ariaLabel?: string\n /** Size of the icon in pixels */\n size?: number\n /** Additional className */\n className?: string\n}\n\nexport function ExpandIcon({\n isExpanded,\n onClick,\n ariaLabel,\n size = 18,\n className,\n}: ExpandIconProps) {\n const classes = [\n 'yable-detail-expand-icon',\n isExpanded && 'yable-detail-expand-icon--expanded',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const label = ariaLabel ?? (isExpanded ? 'Collapse details' : 'Expand details')\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n onClick(e)\n },\n [onClick]\n )\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={handleClick}\n aria-expanded={isExpanded}\n aria-label={label}\n tabIndex={-1}\n >\n <svg\n className=\"yable-detail-expand-chevron\"\n width={size}\n height={size}\n viewBox=\"0 0 18 18\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n style={{\n transform: isExpanded ? 'rotate(0deg)' : 'rotate(-90deg)',\n transition: 'transform var(--yable-transition, 150ms ease)',\n }}\n >\n <path\n d=\"M6 7L9 10L12 7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )\n}\n","// @zvndev/yable-react — Pivot Config Component\n// UI for configuring pivot table fields: dragging fields between\n// rows, columns, and values zones.\n\nimport { useState, useCallback } from 'react'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PivotFieldItem {\n field: string\n label: string\n}\n\nexport interface PivotValueItem {\n field: string\n label: string\n aggregation: string\n}\n\nexport interface PivotConfigProps {\n /** Available fields that can be dragged into zones */\n availableFields: PivotFieldItem[]\n /** Currently configured row fields */\n rowFields: PivotFieldItem[]\n /** Currently configured column fields */\n columnFields: PivotFieldItem[]\n /** Currently configured value fields */\n valueFields: PivotValueItem[]\n /** Callback when row fields change */\n onRowFieldsChange: (fields: PivotFieldItem[]) => void\n /** Callback when column fields change */\n onColumnFieldsChange: (fields: PivotFieldItem[]) => void\n /** Callback when value fields change */\n onValueFieldsChange: (fields: PivotValueItem[]) => void\n /** Available aggregation functions */\n aggregationOptions?: { value: string; label: string }[]\n /** Additional className */\n className?: string\n}\n\n// ---------------------------------------------------------------------------\n// Default aggregation options\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_AGGREGATION_OPTIONS = [\n { value: 'sum', label: 'Sum' },\n { value: 'count', label: 'Count' },\n { value: 'mean', label: 'Average' },\n { value: 'min', label: 'Min' },\n { value: 'max', label: 'Max' },\n { value: 'median', label: 'Median' },\n { value: 'uniqueCount', label: 'Distinct Count' },\n]\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function PivotConfigPanel({\n availableFields,\n rowFields,\n columnFields,\n valueFields,\n onRowFieldsChange,\n onColumnFieldsChange,\n onValueFieldsChange,\n aggregationOptions = DEFAULT_AGGREGATION_OPTIONS,\n className,\n}: PivotConfigProps) {\n const [dragSource, setDragSource] = useState<{\n field: string\n zone: 'available' | 'rows' | 'columns' | 'values'\n } | null>(null)\n\n // Compute which fields are already placed\n const usedFields = new Set([\n ...rowFields.map((f) => f.field),\n ...columnFields.map((f) => f.field),\n ...valueFields.map((f) => f.field),\n ])\n\n const unplacedFields = availableFields.filter((f) => !usedFields.has(f.field))\n\n // -----------------------------------------------------------------------\n // Drag handlers\n // -----------------------------------------------------------------------\n\n const handleDragStart = useCallback(\n (field: string, zone: 'available' | 'rows' | 'columns' | 'values') => {\n setDragSource({ field, zone })\n },\n []\n )\n\n const handleDrop = useCallback(\n (targetZone: 'available' | 'rows' | 'columns' | 'values') => {\n if (!dragSource) return\n\n const { field, zone: sourceZone } = dragSource\n if (sourceZone === targetZone) {\n setDragSource(null)\n return\n }\n\n // Find the field item\n const fieldItem = availableFields.find((f) => f.field === field)\n if (!fieldItem) {\n setDragSource(null)\n return\n }\n\n // Remove from source zone\n if (sourceZone === 'rows') {\n onRowFieldsChange(rowFields.filter((f) => f.field !== field))\n } else if (sourceZone === 'columns') {\n onColumnFieldsChange(columnFields.filter((f) => f.field !== field))\n } else if (sourceZone === 'values') {\n onValueFieldsChange(valueFields.filter((f) => f.field !== field))\n }\n\n // Add to target zone\n if (targetZone === 'rows') {\n onRowFieldsChange([...rowFields, { field: fieldItem.field, label: fieldItem.label }])\n } else if (targetZone === 'columns') {\n onColumnFieldsChange([...columnFields, { field: fieldItem.field, label: fieldItem.label }])\n } else if (targetZone === 'values') {\n onValueFieldsChange([\n ...valueFields,\n { field: fieldItem.field, label: fieldItem.label, aggregation: 'sum' },\n ])\n }\n // targetZone === 'available' just removes it (already done above)\n\n setDragSource(null)\n },\n [\n dragSource,\n availableFields,\n rowFields,\n columnFields,\n valueFields,\n onRowFieldsChange,\n onColumnFieldsChange,\n onValueFieldsChange,\n ]\n )\n\n const handleAggregationChange = useCallback(\n (field: string, aggregation: string) => {\n onValueFieldsChange(\n valueFields.map((vf) =>\n vf.field === field ? { ...vf, aggregation } : vf\n )\n )\n },\n [valueFields, onValueFieldsChange]\n )\n\n const handleRemoveField = useCallback(\n (field: string, zone: 'rows' | 'columns' | 'values') => {\n if (zone === 'rows') {\n onRowFieldsChange(rowFields.filter((f) => f.field !== field))\n } else if (zone === 'columns') {\n onColumnFieldsChange(columnFields.filter((f) => f.field !== field))\n } else if (zone === 'values') {\n onValueFieldsChange(valueFields.filter((f) => f.field !== field))\n }\n },\n [rowFields, columnFields, valueFields, onRowFieldsChange, onColumnFieldsChange, onValueFieldsChange]\n )\n\n // -----------------------------------------------------------------------\n // Render\n // -----------------------------------------------------------------------\n\n const classes = ['yable-pivot-config', className].filter(Boolean).join(' ')\n\n return (\n <div className={classes}>\n {/* Available Fields */}\n <div\n className=\"yable-pivot-zone yable-pivot-zone--available\"\n onDragOver={(e) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }}\n onDrop={(e) => {\n e.preventDefault()\n handleDrop('available')\n }}\n >\n <div className=\"yable-pivot-zone-label\">Fields</div>\n <div className=\"yable-pivot-zone-items\">\n {unplacedFields.map((f) => (\n <div\n key={f.field}\n className=\"yable-pivot-field\"\n draggable\n onDragStart={() => handleDragStart(f.field, 'available')}\n >\n {f.label}\n </div>\n ))}\n {unplacedFields.length === 0 && (\n <div className=\"yable-pivot-zone-empty\">All fields placed</div>\n )}\n </div>\n </div>\n\n {/* Row Fields Zone */}\n <DropZone\n label=\"Row Groups\"\n zone=\"rows\"\n items={rowFields}\n onDragStart={handleDragStart}\n onDrop={handleDrop}\n onRemove={(field) => handleRemoveField(field, 'rows')}\n />\n\n {/* Column Fields Zone */}\n <DropZone\n label=\"Column Groups\"\n zone=\"columns\"\n items={columnFields}\n onDragStart={handleDragStart}\n onDrop={handleDrop}\n onRemove={(field) => handleRemoveField(field, 'columns')}\n />\n\n {/* Value Fields Zone */}\n <div\n className=\"yable-pivot-zone yable-pivot-zone--values\"\n onDragOver={(e) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }}\n onDrop={(e) => {\n e.preventDefault()\n handleDrop('values')\n }}\n >\n <div className=\"yable-pivot-zone-label\">Values</div>\n <div className=\"yable-pivot-zone-items\">\n {valueFields.map((vf) => (\n <div\n key={vf.field}\n className=\"yable-pivot-field yable-pivot-field--value\"\n draggable\n onDragStart={() => handleDragStart(vf.field, 'values')}\n >\n <span className=\"yable-pivot-field-label\">{vf.label}</span>\n <select\n className=\"yable-pivot-agg-select\"\n value={vf.aggregation}\n onChange={(e) =>\n handleAggregationChange(vf.field, e.target.value)\n }\n onClick={(e) => e.stopPropagation()}\n >\n {aggregationOptions.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n <button\n type=\"button\"\n className=\"yable-pivot-field-remove\"\n onClick={() => handleRemoveField(vf.field, 'values')}\n aria-label={`Remove ${vf.label}`}\n >\n x\n </button>\n </div>\n ))}\n {valueFields.length === 0 && (\n <div className=\"yable-pivot-zone-empty\">\n Drop value fields here\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// DropZone sub-component\n// ---------------------------------------------------------------------------\n\nfunction DropZone({\n label,\n zone,\n items,\n onDragStart,\n onDrop,\n onRemove,\n}: {\n label: string\n zone: 'rows' | 'columns'\n items: PivotFieldItem[]\n onDragStart: (field: string, zone: 'rows' | 'columns') => void\n onDrop: (zone: 'rows' | 'columns') => void\n onRemove: (field: string) => void\n}) {\n return (\n <div\n className={`yable-pivot-zone yable-pivot-zone--${zone}`}\n onDragOver={(e) => {\n e.preventDefault()\n e.dataTransfer.dropEffect = 'move'\n }}\n onDrop={(e) => {\n e.preventDefault()\n onDrop(zone)\n }}\n >\n <div className=\"yable-pivot-zone-label\">{label}</div>\n <div className=\"yable-pivot-zone-items\">\n {items.map((f) => (\n <div\n key={f.field}\n className=\"yable-pivot-field\"\n draggable\n onDragStart={() => onDragStart(f.field, zone)}\n >\n <span className=\"yable-pivot-field-label\">{f.label}</span>\n <button\n type=\"button\"\n className=\"yable-pivot-field-remove\"\n onClick={() => onRemove(f.field)}\n aria-label={`Remove ${f.label}`}\n >\n x\n </button>\n </div>\n ))}\n {items.length === 0 && (\n <div className=\"yable-pivot-zone-empty\">\n Drop fields here\n </div>\n )}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — Tooltip Component\n// Renders a positioned tooltip with arrow/caret, entrance animation, and auto-flip support.\n\nimport React, { useEffect, useRef } from 'react'\nimport type { TooltipPosition } from '../hooks/useTooltip'\n\nexport interface TooltipProps {\n /** Whether the tooltip is visible */\n visible: boolean\n /** Position and placement */\n position: TooltipPosition\n /** Tooltip content text */\n content: string\n /** Custom tooltip component */\n customComponent?: React.ReactNode\n}\n\n/** Arrow/caret SVG for the tooltip — rendered differently per placement */\nfunction TooltipArrow({ placement }: { placement: string }) {\n return (\n <div className={`yable-tooltip-arrow yable-tooltip-arrow--${placement}`} aria-hidden=\"true\">\n <svg\n className=\"yable-tooltip-arrow-svg\"\n width=\"10\"\n height=\"5\"\n viewBox=\"0 0 10 5\"\n fill=\"none\"\n >\n <path d=\"M0 0L5 5L10 0\" fill=\"currentColor\" />\n </svg>\n </div>\n )\n}\n\nexport function Tooltip({\n visible,\n position,\n content,\n customComponent,\n}: TooltipProps) {\n const tooltipRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!visible || !tooltipRef.current) return\n\n const el = tooltipRef.current\n const rect = el.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n // Clamp horizontal position to prevent overflow\n if (rect.left < 4) {\n el.style.marginLeft = `${4 - rect.left}px`\n } else if (rect.right > viewportWidth - 4) {\n el.style.marginLeft = `${viewportWidth - 4 - rect.right}px`\n }\n\n // Clamp vertical position to prevent overflow\n if (rect.top < 4) {\n el.style.marginTop = `${4 - rect.top}px`\n } else if (rect.bottom > viewportHeight - 4) {\n el.style.marginTop = `${viewportHeight - 4 - rect.bottom}px`\n }\n }, [visible, position])\n\n if (!visible || !content) return null\n\n const style: React.CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n pointerEvents: 'none',\n }\n\n // Offset the tooltip away from the target with a small gap\n const gap = 6\n\n switch (position.placement) {\n case 'top':\n style.left = position.x\n style.top = position.y - gap\n style.transform = 'translate(-50%, -100%)'\n break\n case 'bottom':\n style.left = position.x\n style.top = position.y + gap\n style.transform = 'translate(-50%, 0)'\n break\n case 'left':\n style.left = position.x - gap\n style.top = position.y\n style.transform = 'translate(-100%, -50%)'\n break\n case 'right':\n style.left = position.x + gap\n style.top = position.y\n style.transform = 'translate(0, -50%)'\n break\n }\n\n return (\n <div\n ref={tooltipRef}\n className={`yable-tooltip yable-tooltip--${position.placement}`}\n style={style}\n role=\"tooltip\"\n >\n {/* Arrow on the side closest to the target element */}\n {position.placement === 'bottom' && <TooltipArrow placement={position.placement} />}\n {position.placement === 'right' && <TooltipArrow placement={position.placement} />}\n\n {customComponent ?? (\n <div className=\"yable-tooltip-content\">{content}</div>\n )}\n\n {position.placement === 'top' && <TooltipArrow placement={position.placement} />}\n {position.placement === 'left' && <TooltipArrow placement={position.placement} />}\n </div>\n )\n}\n","// @zvndev/yable-react — useTooltip hook\n// Manages tooltip positioning, visibility, delay, and auto-flip.\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\nexport interface TooltipPosition {\n x: number\n y: number\n placement: 'top' | 'bottom' | 'left' | 'right'\n}\n\nexport interface UseTooltipOptions {\n /** Delay before showing tooltip in ms */\n delay?: number\n /** Preferred placement */\n placement?: 'top' | 'bottom' | 'left' | 'right'\n /** Whether tooltip is enabled */\n enabled?: boolean\n}\n\nexport function useTooltip(options: UseTooltipOptions = {}) {\n const { delay = 500, placement = 'top', enabled = true } = options\n const [visible, setVisible] = useState(false)\n const [position, setPosition] = useState<TooltipPosition>({\n x: 0,\n y: 0,\n placement,\n })\n const [content, setContent] = useState<string>('')\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const targetRef = useRef<HTMLElement | null>(null)\n\n const show = useCallback(\n (target: HTMLElement, tooltipContent: string) => {\n if (!enabled || !tooltipContent) return\n targetRef.current = target\n setContent(tooltipContent)\n\n clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => {\n const rect = target.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n // Calculate position with auto-flip\n let finalPlacement = placement\n let x = rect.left + rect.width / 2\n let y: number\n\n // Check vertical space\n if (placement === 'top' && rect.top < 60) {\n finalPlacement = 'bottom'\n } else if (placement === 'bottom' && viewportHeight - rect.bottom < 60) {\n finalPlacement = 'top'\n }\n\n // Check horizontal space\n if (placement === 'left' && rect.left < 120) {\n finalPlacement = 'right'\n } else if (placement === 'right' && viewportWidth - rect.right < 120) {\n finalPlacement = 'left'\n }\n\n switch (finalPlacement) {\n case 'top':\n y = rect.top - 8\n break\n case 'bottom':\n y = rect.bottom + 8\n break\n case 'left':\n x = rect.left - 8\n y = rect.top + rect.height / 2\n break\n case 'right':\n x = rect.right + 8\n y = rect.top + rect.height / 2\n break\n default:\n y = rect.top - 8\n }\n\n setPosition({ x, y, placement: finalPlacement })\n setVisible(true)\n }, delay)\n },\n [delay, placement, enabled]\n )\n\n const hide = useCallback(() => {\n clearTimeout(timerRef.current)\n setVisible(false)\n targetRef.current = null\n }, [])\n\n useEffect(() => {\n return () => clearTimeout(timerRef.current)\n }, [])\n\n return {\n visible,\n position,\n content,\n show,\n hide,\n }\n}\n","// @zvndev/yable-react — Flash Cell Component\n// Wraps cell content with flash animation on data change.\n\nimport React from 'react'\nimport type { CellFlashInfo } from '@zvndev/yable-core'\n\n// ---------------------------------------------------------------------------\n// SECURITY: CSS color validation\n// ---------------------------------------------------------------------------\n\n/** Named CSS colors (CSS Level 4) */\nconst CSS_NAMED_COLORS = new Set([\n 'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque',\n 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue',\n 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan',\n 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey',\n 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred',\n 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey',\n 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey',\n 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro',\n 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey',\n 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender',\n 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan',\n 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink',\n 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey',\n 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon',\n 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',\n 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred',\n 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy',\n 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod',\n 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru',\n 'pink', 'plum', 'powderblue', 'purple', 'rebeccapurple', 'red', 'rosybrown',\n 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna',\n 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen',\n 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat',\n 'white', 'whitesmoke', 'yellow', 'yellowgreen',\n])\n\n/** CSS keywords that are valid as color values */\nconst CSS_COLOR_KEYWORDS = new Set([\n 'currentcolor', 'inherit', 'initial', 'unset', 'revert', 'transparent',\n])\n\n/**\n * Validates whether a string is a safe CSS color value.\n * Allows hex, rgb/rgba, hsl/hsla, oklch, oklab, lab, lch, color(), named colors, and keywords.\n * Rejects values containing dangerous patterns like url(), expression(), javascript:, or @import.\n */\nfunction isValidCSSColor(value: string): boolean {\n const trimmed = value.trim().toLowerCase()\n\n // Reject dangerous patterns first\n if (/url\\s*\\(/i.test(trimmed)) return false\n if (/expression\\s*\\(/i.test(trimmed)) return false\n if (/javascript\\s*:/i.test(trimmed)) return false\n if (/@import/i.test(trimmed)) return false\n if (/[{};]/.test(trimmed)) return false\n\n // Hex colors: #fff, #ffffff, #ffffffff\n if (/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.test(trimmed)) return true\n\n // Functional color notations: rgb, rgba, hsl, hsla, oklch, oklab, lab, lch, color\n if (/^(rgba?|hsla?|oklch|oklab|lab|lch|color)\\s*\\(/.test(trimmed)) return true\n\n // Named colors\n if (CSS_NAMED_COLORS.has(trimmed)) return true\n\n // CSS keywords\n if (CSS_COLOR_KEYWORDS.has(trimmed)) return true\n\n return false\n}\n\n// Default flash colors\nconst DEFAULT_UP_COLOR = '#22c55e33'\nconst DEFAULT_DOWN_COLOR = '#ef444433'\nconst DEFAULT_CHANGE_COLOR = '#3b82f633'\n\ninterface FlashCellProps {\n /** The flash info for this cell (if any) */\n flash?: CellFlashInfo\n /** Flash duration in ms */\n duration?: number\n /** Custom up color */\n upColor?: string\n /** Custom down color */\n downColor?: string\n /** Custom change color */\n changeColor?: string\n /** Cell content */\n children: React.ReactNode\n}\n\n/**\n * Validates and returns a safe color value. If the provided color is invalid,\n * logs a warning and returns the fallback default color.\n */\nfunction safeColor(value: string | undefined, fallback: string, propName: string): string | undefined {\n if (value === undefined) return undefined\n if (isValidCSSColor(value)) return value\n\n console.warn(\n `Yable FlashCell: Invalid CSS color for ${propName}: \"${value}\". ` +\n `Using default color instead. Colors must be valid CSS color values ` +\n `(hex, rgb, hsl, named colors, etc.) and must not contain url(), expression(), or javascript:.`\n )\n return fallback\n}\n\nexport function FlashCell({\n flash,\n duration = 700,\n upColor,\n downColor,\n changeColor,\n children,\n}: FlashCellProps) {\n if (!flash) {\n return <>{children}</>\n }\n\n const flashClass = `yable-flash-cell yable-flash-cell--${flash.direction}`\n\n const style: React.CSSProperties = {\n animationDuration: `${duration}ms`,\n }\n\n // SECURITY: Validate custom color props before setting as CSS custom properties\n if (flash.direction === 'up' && upColor) {\n const validated = safeColor(upColor, DEFAULT_UP_COLOR, 'upColor')\n if (validated) (style as Record<string, string>)['--yable-flash-up-color'] = validated\n } else if (flash.direction === 'down' && downColor) {\n const validated = safeColor(downColor, DEFAULT_DOWN_COLOR, 'downColor')\n if (validated) (style as Record<string, string>)['--yable-flash-down-color'] = validated\n } else if (flash.direction === 'change' && changeColor) {\n const validated = safeColor(changeColor, DEFAULT_CHANGE_COLOR, 'changeColor')\n if (validated) (style as Record<string, string>)['--yable-flash-change-color'] = validated\n }\n\n return (\n <div className={flashClass} style={style}>\n {children}\n </div>\n )\n}\n","// @zvndev/yable-react — useCellFlash hook\n// Tracks data changes and provides flash state for cells.\n\nimport { useState, useEffect, useRef, useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\nimport { detectCellChanges, type CellFlashInfo } from '@zvndev/yable-core'\n\nexport interface UseCellFlashOptions {\n /** Flash duration in ms */\n duration?: number\n}\n\nexport function useCellFlash<TData extends RowData>(\n table: Table<TData>,\n options: UseCellFlashOptions = {}\n) {\n const { duration = 700 } = options\n const [flashes, setFlashes] = useState<Map<string, CellFlashInfo>>(new Map())\n const prevDataRef = useRef<TData[]>([])\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map())\n\n const clearFlash = useCallback((key: string) => {\n setFlashes((prev) => {\n const next = new Map(prev)\n next.delete(key)\n return next\n })\n timersRef.current.delete(key)\n }, [])\n\n useEffect(() => {\n const currentData = table.options.data\n const prevData = prevDataRef.current\n\n if (prevData.length > 0 && currentData !== prevData) {\n const columns = table.getAllLeafColumns().map((col) => ({\n id: col.id,\n enableCellFlash: (col.columnDef as any).enableCellFlash ?? false,\n }))\n\n const getRowId = table.options.getRowId ?? ((_row: TData, i: number) => String(i))\n const newFlashes = detectCellChanges(prevData, currentData, columns, getRowId)\n\n if (newFlashes.size > 0) {\n setFlashes((prev) => {\n const merged = new Map(prev)\n for (const [key, flash] of newFlashes) {\n merged.set(key, flash)\n\n // Clear previous timer for this key\n const existingTimer = timersRef.current.get(key)\n if (existingTimer) clearTimeout(existingTimer)\n\n // Set auto-clear timer\n const timer = setTimeout(() => clearFlash(key), duration)\n timersRef.current.set(key, timer)\n }\n return merged\n })\n\n // Emit flash events\n for (const [, flash] of newFlashes) {\n table.events.emit('cell:flash' as any, flash)\n }\n }\n }\n\n prevDataRef.current = currentData\n }, [table.options.data, table, duration, clearFlash])\n\n // Cleanup timers\n useEffect(() => {\n return () => {\n for (const timer of timersRef.current.values()) {\n clearTimeout(timer)\n }\n }\n }, [])\n\n const getFlash = useCallback(\n (rowId: string, columnId: string): CellFlashInfo | undefined => {\n return flashes.get(`${rowId}:${columnId}`)\n },\n [flashes]\n )\n\n return { flashes, getFlash }\n}\n","// @zvndev/yable-react — useRowAnimation hook\n// Animated transitions on sort/filter/group changes.\n// Tracks row positions and applies CSS transform transitions.\n\nimport { useRef, useCallback } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\nexport interface UseRowAnimationOptions {\n /** Enable row animations. Default: false */\n enabled?: boolean\n /** Transition duration in ms. Default: 250 */\n duration?: number\n /** Easing function. Default: 'ease' */\n easing?: string\n}\n\ninterface RowPosition {\n top: number\n height: number\n}\n\nexport function useRowAnimation<TData extends RowData>(\n _table: Table<TData>,\n options: UseRowAnimationOptions = {}\n) {\n const { enabled = false, duration = 250, easing = 'ease' } = options\n const prevPositionsRef = useRef<Map<string, RowPosition>>(new Map())\n const animatingRef = useRef(false)\n\n const capturePositions = useCallback(\n (containerEl: HTMLElement | null) => {\n if (!enabled || !containerEl) return\n\n const positions = new Map<string, RowPosition>()\n const rows = containerEl.querySelectorAll<HTMLElement>('.yable-tr[data-row-id]')\n\n rows.forEach((el) => {\n const rowId = el.getAttribute('data-row-id')\n if (rowId) {\n positions.set(rowId, {\n top: el.offsetTop,\n height: el.offsetHeight,\n })\n }\n })\n\n prevPositionsRef.current = positions\n },\n [enabled]\n )\n\n const animateRows = useCallback(\n (containerEl: HTMLElement | null) => {\n if (!enabled || !containerEl || animatingRef.current) return\n\n const prevPositions = prevPositionsRef.current\n if (prevPositions.size === 0) return\n\n const rows = containerEl.querySelectorAll<HTMLElement>('.yable-tr[data-row-id]')\n const currentPositions = new Map<string, RowPosition>()\n const currentIds = new Set<string>()\n\n // Gather current positions\n rows.forEach((el) => {\n const rowId = el.getAttribute('data-row-id')\n if (rowId) {\n currentIds.add(rowId)\n currentPositions.set(rowId, {\n top: el.offsetTop,\n height: el.offsetHeight,\n })\n }\n })\n\n animatingRef.current = true\n\n rows.forEach((el) => {\n const rowId = el.getAttribute('data-row-id')\n if (!rowId) return\n\n const prev = prevPositions.get(rowId)\n const curr = currentPositions.get(rowId)\n\n if (prev && curr) {\n // Row moved — animate from old position\n const deltaY = prev.top - curr.top\n if (Math.abs(deltaY) > 1) {\n el.style.transform = `translateY(${deltaY}px)`\n el.style.transition = 'none'\n\n requestAnimationFrame(() => {\n el.style.transition = `transform ${duration}ms ${easing}`\n el.style.transform = ''\n })\n }\n } else if (!prev && curr) {\n // New row — fade in\n el.classList.add('yable-row-enter')\n el.style.animation = `yable-row-fade-in ${duration}ms ${easing} forwards`\n\n const cleanup = () => {\n el.classList.remove('yable-row-enter')\n el.style.animation = ''\n el.removeEventListener('animationend', cleanup)\n }\n el.addEventListener('animationend', cleanup)\n }\n })\n\n // After animations complete, clear state\n setTimeout(() => {\n animatingRef.current = false\n rows.forEach((el) => {\n el.style.transform = ''\n el.style.transition = ''\n })\n }, duration + 50)\n },\n [enabled, duration, easing]\n )\n\n return {\n capturePositions,\n animateRows,\n enabled,\n }\n}\n","// @zvndev/yable-react — Print Layout Component\n// Renders a print-optimized version of the table that removes\n// sticky positioning, virtualization, and shows all rows.\n// Includes page header, timestamp, row count summary, and page-break hints.\n\nimport React from 'react'\nimport type { CellContext, HeaderContext, RowData, Table } from '@zvndev/yable-core'\n\ninterface PrintLayoutProps<TData extends RowData> {\n table: Table<TData>\n /** Print title displayed at the top */\n title?: string\n /** Show print timestamp */\n showTimestamp?: boolean\n}\n\nexport function PrintLayout<TData extends RowData>({\n table,\n title,\n showTimestamp = true,\n}: PrintLayoutProps<TData>) {\n // Get all rows (bypass pagination)\n const allRows = table.getPrePaginationRowModel().rows\n const headerGroups = table.getHeaderGroups()\n const timestamp = new Date().toLocaleString()\n type HeaderRenderer = (ctx: HeaderContext<TData, unknown>) => React.ReactNode\n type CellRenderer = (ctx: CellContext<TData, unknown>) => React.ReactNode\n\n return (\n <div className=\"yable-print-layout\">\n {/* Print header with title and metadata */}\n {(title || showTimestamp) && (\n <div className=\"yable-print-header\">\n {title && <h2 className=\"yable-print-title\">{title}</h2>}\n {showTimestamp && <span className=\"yable-print-timestamp\">Printed: {timestamp}</span>}\n </div>\n )}\n\n {/* Summary line before the table */}\n <div className=\"yable-print-summary\">\n <span className=\"yable-print-summary-text\">\n {allRows.length.toLocaleString()} row{allRows.length !== 1 ? 's' : ''}\n </span>\n </div>\n\n <table className=\"yable-print-table\">\n <thead>\n {headerGroups.map((headerGroup) => (\n <tr key={headerGroup.id} className=\"yable-print-thead-row\">\n {headerGroup.headers.map((header) => {\n const headerContent = header.isPlaceholder\n ? null\n : typeof header.column.columnDef.header === 'function'\n ? (header.column.columnDef.header as HeaderRenderer)(header.getContext())\n : (header.column.columnDef.header ?? header.id)\n\n return (\n <th key={header.id} colSpan={header.colSpan} className=\"yable-print-th\">\n {headerContent}\n </th>\n )\n })}\n </tr>\n ))}\n </thead>\n <tbody>\n {allRows.map((row, index) => (\n <tr\n key={row.id}\n className={`yable-print-tr${index % 2 === 1 ? ' yable-print-tr--alt' : ''}`}\n >\n {row.getVisibleCells().map((cell) => {\n const cellDef = cell.column.columnDef.cell\n const content =\n typeof cellDef === 'function'\n ? (cellDef as CellRenderer)(cell.getContext())\n : cell.renderValue()\n\n return (\n <td key={cell.id} className=\"yable-print-td\">\n {content as React.ReactNode}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n\n {/* Print footer */}\n <div className=\"yable-print-footer\">\n <span className=\"yable-print-footer-count\">\n Total: {allRows.length.toLocaleString()} row{allRows.length !== 1 ? 's' : ''}\n </span>\n {showTimestamp && <span className=\"yable-print-footer-timestamp\">{timestamp}</span>}\n </div>\n </div>\n )\n}\n","// @zvndev/yable-react — usePrintLayout hook\n// Prepares the table for print by removing virtualization, expanding rows,\n// showing all pages, and triggering the browser print dialog.\n\nimport { useCallback, useRef } from 'react'\nimport type { RowData, Table } from '@zvndev/yable-core'\n\n// ---------------------------------------------------------------------------\n// SECURITY: CSS sanitization for user-provided print styles\n// ---------------------------------------------------------------------------\n\n/**\n * Sanitizes a CSS string to remove dangerous patterns that could load\n * external resources or execute scripts.\n *\n * NOTE: This is defense-in-depth only. CSS injection has limited but real\n * attack surface (data exfiltration via url(), external resource loading\n * via @import). Full prevention requires only allowing developer-provided CSS.\n */\nfunction sanitizeCSS(css: string): string {\n let sanitized = css\n\n // Remove @import rules (prevents loading external stylesheets / data exfiltration)\n sanitized = sanitized.replace(/@import\\s+[^;]*;?/gi, '/* @import removed */')\n\n // Remove @charset rules\n sanitized = sanitized.replace(/@charset\\s+[^;]*;?/gi, '/* @charset removed */')\n\n // Remove url() values (prevents data exfiltration and external resource loading)\n sanitized = sanitized.replace(/url\\s*\\([^)]*\\)/gi, '/* url() removed */')\n\n // Remove expression() (IE-specific XSS vector)\n sanitized = sanitized.replace(/expression\\s*\\([^)]*\\)/gi, '/* expression() removed */')\n\n // Remove javascript: protocol in any context\n sanitized = sanitized.replace(/javascript\\s*:/gi, '/* javascript: removed */')\n\n return sanitized\n}\n\nexport interface UsePrintLayoutOptions {\n /** Custom print title */\n title?: string\n /**\n * Additional CSS to inject for print.\n *\n * **Security warning:** Must be developer-provided CSS only.\n * User-generated CSS is not safe even with sanitization.\n * The library applies basic sanitization (removing @import, url(), expression())\n * but this cannot guarantee safety against all CSS-based attacks.\n */\n additionalCSS?: string\n}\n\nexport function usePrintLayout<TData extends RowData>(\n _table: Table<TData>,\n options: UsePrintLayoutOptions = {},\n) {\n const { title, additionalCSS } = options\n const isPrintingRef = useRef(false)\n\n const preparePrint = useCallback(() => {\n // Add print mode class to the table container\n const yableEl = document.querySelector('.yable')\n if (yableEl) {\n yableEl.classList.add('yable-print-mode')\n }\n\n // Set document title for print\n const originalTitle = document.title\n if (title) {\n document.title = title\n }\n\n // Inject additional CSS if provided\n let styleEl: HTMLStyleElement | null = null\n if (additionalCSS) {\n styleEl = document.createElement('style')\n styleEl.setAttribute('data-yable-print', 'true')\n // SECURITY: Sanitize CSS to remove dangerous patterns (@import, url(), expression())\n styleEl.textContent = sanitizeCSS(additionalCSS)\n document.head.appendChild(styleEl)\n }\n\n isPrintingRef.current = true\n\n // Cleanup after print\n const cleanup = () => {\n isPrintingRef.current = false\n if (yableEl) {\n yableEl.classList.remove('yable-print-mode')\n }\n if (title) {\n document.title = originalTitle\n }\n if (styleEl) {\n styleEl.remove()\n }\n window.removeEventListener('afterprint', cleanup)\n }\n\n window.addEventListener('afterprint', cleanup)\n\n // Trigger print\n requestAnimationFrame(() => {\n window.print()\n })\n }, [title, additionalCSS])\n\n return {\n preparePrint,\n isPrinting: isPrintingRef.current,\n }\n}\n","// @zvndev/yable-react — useTheme hook\n// Runtime theme switching without page reload.\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\n\nexport interface UseThemeOptions {\n /** Initial theme name */\n defaultTheme?: string\n /** Initial color scheme */\n defaultColorScheme?: 'light' | 'dark' | 'auto'\n}\n\nexport function useTheme(options: UseThemeOptions = {}) {\n const { defaultTheme = 'default', defaultColorScheme = 'auto' } = options\n const [theme, setThemeState] = useState(defaultTheme)\n const [colorScheme, setColorSchemeState] = useState<'light' | 'dark' | 'auto'>(defaultColorScheme)\n const containerRef = useRef<HTMLElement | null>(null)\n\n const setTheme = useCallback((newTheme: string) => {\n setThemeState(newTheme)\n }, [])\n\n const setColorScheme = useCallback((scheme: 'light' | 'dark' | 'auto') => {\n setColorSchemeState(scheme)\n }, [])\n\n const toggleColorScheme = useCallback(() => {\n setColorSchemeState((prev) => {\n if (prev === 'auto') return 'dark'\n if (prev === 'dark') return 'light'\n return 'auto'\n })\n }, [])\n\n // Apply color scheme to the nearest yable container or document\n useEffect(() => {\n const target = containerRef.current ?? document.documentElement\n if (colorScheme === 'auto') {\n target.removeAttribute('data-yable-theme')\n } else {\n target.setAttribute('data-yable-theme', colorScheme)\n }\n }, [colorScheme])\n\n // Detect system preference\n const [systemDark, setSystemDark] = useState(false)\n\n useEffect(() => {\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n setSystemDark(mq.matches)\n\n const handler = (e: MediaQueryListEvent) => setSystemDark(e.matches)\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [])\n\n const resolvedColorScheme = colorScheme === 'auto'\n ? (systemDark ? 'dark' : 'light')\n : colorScheme\n\n return {\n theme,\n setTheme,\n colorScheme,\n setColorScheme,\n toggleColorScheme,\n resolvedColorScheme,\n containerRef,\n }\n}\n","import type { RowData, ColumnDef } from '@zvndev/yable-core'\n\nexport interface SelectColumnOptions {\n id?: string\n size?: number\n headerAriaLabel?: string\n}\n\nexport function selectColumn<TData extends RowData>(\n options: SelectColumnOptions = {},\n): ColumnDef<TData, unknown> {\n const { id = '_select', size = 40, headerAriaLabel = 'Select all rows' } = options\n return {\n id,\n header: ({ table }) => (\n <label className=\"yable-checkbox-hitbox\" onClick={(event) => event.stopPropagation()}>\n <input\n type=\"checkbox\"\n className=\"yable-checkbox\"\n checked={table.getIsAllPageRowsSelected()}\n ref={(el) => {\n if (el)\n el.indeterminate =\n table.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected()\n }}\n onChange={() => table.toggleAllPageRowsSelected()}\n aria-label={headerAriaLabel}\n />\n </label>\n ),\n cell: ({ row }) => (\n <label className=\"yable-checkbox-hitbox\" onClick={(event) => event.stopPropagation()}>\n <input\n type=\"checkbox\"\n className=\"yable-checkbox\"\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onChange={row.getToggleSelectedHandler()}\n aria-label=\"Select row\"\n />\n </label>\n ),\n size,\n enableSorting: true,\n sortingFn: (rowA, rowB) => Number(rowA.getIsSelected()) - Number(rowB.getIsSelected()),\n enableColumnFilter: false,\n enableResizing: false,\n enableReorder: false,\n enableHiding: false,\n lockVisible: true,\n } as ColumnDef<TData, unknown>\n}\n","import type { RowData, ColumnDef } from '@zvndev/yable-core'\n\nexport interface RowNumberColumnOptions {\n id?: string\n header?: string\n size?: number\n startFrom?: number\n}\n\nexport function rowNumberColumn<TData extends RowData>(\n options: RowNumberColumnOptions = {},\n): ColumnDef<TData, unknown> {\n const { id = '_rowNumber', header = '#', size = 50, startFrom = 1 } = options\n return {\n id,\n header,\n cell: ({ row }) => row.index + startFrom,\n size,\n enableSorting: false,\n enableColumnFilter: false,\n enableResizing: false,\n enableReorder: false,\n lockVisible: true,\n } as ColumnDef<TData, unknown>\n}\n","import type { ReactNode } from 'react'\nimport type { RowData, ColumnDef, Row, CellContext } from '@zvndev/yable-core'\n\nexport interface ActionItem<TData extends RowData> {\n label: string\n icon?: ReactNode\n onClick: (row: Row<TData>) => void\n hidden?: (row: Row<TData>) => boolean\n disabled?: (row: Row<TData>) => boolean\n}\n\nexport interface ActionsColumnOptions<TData extends RowData> {\n id?: string\n header?: string\n size?: number\n actions: ActionItem<TData>[] | ((row: Row<TData>) => ActionItem<TData>[])\n}\n\nexport function actionsColumn<TData extends RowData>(\n options: ActionsColumnOptions<TData>,\n): ColumnDef<TData, unknown> {\n const { id = '_actions', header = '', size = 100, actions } = options\n return {\n id,\n header,\n cell: (ctx: CellContext<TData, unknown>) => {\n const items = typeof actions === 'function' ? actions(ctx.row) : actions\n return (\n <div className=\"yable-cell-actions\">\n {items\n .filter((a) => !a.hidden || !a.hidden(ctx.row))\n .map((action, i) => (\n <button\n key={i}\n type=\"button\"\n className=\"yable-action-btn\"\n disabled={action.disabled?.(ctx.row)}\n onClick={(e) => {\n e.stopPropagation()\n action.onClick(ctx.row)\n }}\n title={action.label}\n >\n {action.icon ?? action.label}\n </button>\n ))}\n </div>\n )\n },\n size,\n enableSorting: false,\n enableColumnFilter: false,\n enableResizing: false,\n enableReorder: false,\n } as ColumnDef<TData, unknown>\n}\n","import type { RowData, ColumnDef } from '@zvndev/yable-core'\n\nexport interface ExpandColumnOptions {\n id?: string\n size?: number\n}\n\nexport function expandColumn<TData extends RowData>(\n options: ExpandColumnOptions = {},\n): ColumnDef<TData, unknown> {\n const { id = '_expand', size = 40 } = options\n return {\n id,\n header: () => null,\n cell: ({ row }) => {\n if (!row.getCanExpand()) return null\n return (\n <button\n type=\"button\"\n className=\"yable-expand-btn\"\n onClick={(e) => {\n e.stopPropagation()\n row.toggleExpanded()\n }}\n aria-expanded={row.getIsExpanded()}\n aria-label={row.getIsExpanded() ? 'Collapse row' : 'Expand row'}\n >\n <span\n className=\"yable-expand-icon\"\n style={{\n display: 'inline-block',\n transform: row.getIsExpanded() ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform 150ms ease',\n }}\n >\n ▶\n </span>\n </button>\n )\n },\n size,\n enableSorting: false,\n enableColumnFilter: false,\n enableResizing: false,\n enableReorder: false,\n lockVisible: true,\n } as ColumnDef<TData, unknown>\n}\n","import React from 'react'\n\nexport interface CellStackProps {\n children: React.ReactNode\n gap?: number\n}\n\nexport function CellStack({ children, gap = 2 }: CellStackProps) {\n return (\n <div\n className=\"yable-cell-stack\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap,\n }}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface CellRowProps {\n children: React.ReactNode\n gap?: number\n align?: 'start' | 'center' | 'end' | 'baseline'\n justify?: 'start' | 'center' | 'end' | 'between'\n}\n\nexport function CellRow({ children, gap = 6, align = 'center', justify = 'start' }: CellRowProps) {\n const justifyMap: Record<string, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n }\n return (\n <div\n className=\"yable-cell-row\"\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems:\n align === 'baseline'\n ? 'baseline'\n : align === 'start'\n ? 'flex-start'\n : align === 'end'\n ? 'flex-end'\n : 'center',\n justifyContent: justifyMap[justify] || 'flex-start',\n gap,\n }}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface CellWithIconProps {\n icon: React.ReactNode\n children: React.ReactNode\n gap?: number\n iconSize?: number\n}\n\nexport function CellWithIcon({ icon, children, gap = 6, iconSize }: CellWithIconProps) {\n return (\n <div\n className=\"yable-cell-with-icon\"\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap,\n }}\n >\n <span\n className=\"yable-cell-icon\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n ...(iconSize ? { width: iconSize, height: iconSize } : {}),\n }}\n >\n {icon}\n </span>\n <span className=\"yable-cell-icon-content\" style={{ minWidth: 0 }}>\n {children}\n </span>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface CellTextProps {\n children: React.ReactNode\n variant?: 'primary' | 'secondary' | 'muted'\n bold?: boolean\n truncate?: boolean\n size?: 'sm' | 'md' | 'lg'\n}\n\nexport function CellText({\n children,\n variant = 'primary',\n bold,\n truncate,\n size = 'md',\n}: CellTextProps) {\n const fontSizeMap = { sm: '0.75rem', md: '0.875rem', lg: '1rem' }\n\n return (\n <span\n className={`yable-cell-text yable-cell-text--${variant}`}\n style={{\n fontSize: fontSizeMap[size],\n fontWeight: bold ? 600 : undefined,\n color:\n variant === 'secondary'\n ? 'var(--yable-text-secondary, #6b7280)'\n : variant === 'muted'\n ? 'var(--yable-text-muted, #9ca3af)'\n : undefined,\n ...(truncate\n ? {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap' as const,\n }\n : {}),\n }}\n >\n {children}\n </span>\n )\n}\n","/**\n * Merges edit-commit changes into a data array, returning a new array\n * with matching rows shallow-merged. Rows without changes keep their\n * original reference so downstream memoisation works.\n *\n * @param data Current data array\n * @param changes Map of row ID -> partial row values (same shape as `onEditCommit`)\n * @param getRowId Optional row-ID resolver; defaults to string index\n */\nexport function mergeEditChanges<TData>(\n data: TData[],\n changes: Record<string, Partial<TData>>,\n getRowId: (row: TData, index: number) => string = (_, i) => String(i),\n): TData[] {\n // Fast path: nothing to apply\n const changeKeys = Object.keys(changes)\n if (changeKeys.length === 0) return data\n\n return data.map((row, i) => {\n const id = getRowId(row, i)\n const patch = changes[id]\n return patch ? { ...row, ...patch } : row\n })\n}\n"]}