@ricsam/react-spreadsheets 0.0.11 → 0.0.13

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.
@@ -2,7 +2,7 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/spreadsheet/spreadsheet.tsx", "../../src/utils/use-resize-observer.ts", "../../src/utils/use-color-scheme.ts", "../../src/utils/contrast-text.ts", "../../src/utils/cn.ts", "../../src/spreadsheet/constants.ts", "../../src/spreadsheet/utils.ts", "../../src/clipboard/clipboard-manager.ts", "../../src/grid/frame.tsx", "../../src/grid/icons.tsx", "../../src/grid/types.ts", "../../src/spreadsheet/snapping.ts", "../../src/workbook/workbook.tsx", "../../src/utils/use-scheme-root.ts", "../../src/workbook/border-sides.ts", "../../src/workbook/cell-data-type.ts", "../../src/workbook/cell-edit-error.ts", "../../src/workbook/workbook-selection-manager.ts", "../../src/spreadsheet/zoom-constants.ts", "../../src/utils/use-click-away.ts"],
4
4
  "sourcesContent": [
5
- "import {\n type Format,\n type MaybeInfNumber,\n type NavigationRequest,\n SelectionManager,\n type SelectionNavigationModel,\n type SelectionManagerState,\n type SMArea,\n type SMCell,\n useInitializeSelectionManager,\n useSelectionManager\n} from '@ricsam/selection-manager';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ReactNode\n} from 'react';\nimport { useResizeObserver } from '../utils/use-resize-observer';\nimport { useColorScheme } from '../utils/use-color-scheme';\nimport { getContrastingTextColor } from '../utils/contrast-text';\nimport { cn } from '../utils/cn';\nimport { DEFAULT_CELL_HEIGHT, DEFAULT_CELL_WIDTH, HEADER_HEIGHT, HEADER_WIDTH } from './constants';\n\nimport type {\n CellRenderContext,\n SerializedCellValue,\n SpreadsheetColumnWidths,\n SpreadsheetRowHeights\n} from '../types';\nimport { type CellDataUpdate, ClipboardUtils } from '../clipboard/clipboard-manager';\nimport { Frame } from '../grid/frame';\nimport { ViewportStream } from '../grid/types';\nimport { columnToIndex, getRowNumber, indexToColumn, parseCellReference, rowToLetter } from './utils';\nimport { CONTROLLED_ZOOM_FACTOR, MAX_ZOOM, MIN_ZOOM, ZOOM_FACTOR } from './zoom-constants';\nimport {\n getColumnEdgePosition,\n getCellSnapAnchorFromRect,\n getRectFromCellSnapAnchor,\n getRowEdgePosition,\n moveCellSnapAnchorToNearestOrigin,\n normalizeCellSnapAnchor,\n resizeCellSnapAnchorToNearestEdges,\n type CellSnapAnchor,\n type CellSnapRect,\n type CellSnapResizeHandle\n} from './snapping';\n\nconst SPREADSHEET_OVERLAY_SELECTOR = '[data-rsp-overlay]';\n\n/**\n * Resolves the grid line color used for canvas painting.\n *\n * Canvas 2D cannot evaluate CSS, so the themed `--rsp-gridline` value has to be\n * resolved to a concrete color first. Reading the custom property directly is\n * not enough: custom properties compute to an unresolved token sequence, so a\n * `light-dark()` value comes back verbatim and is not paintable.\n *\n * Instead we read a real, inherited property (`color`) from a hidden probe\n * element that declares `color: var(--_rsp-gridline)`. The browser resolves\n * `light-dark()` against the probe's inherited `color-scheme`, which yields a\n * paintable `rgb(...)` string that always matches what the DOM is showing.\n */\nconst resolveGridLineColor = (\n probe: HTMLElement | null,\n colorScheme: 'light' | 'dark'\n): string => {\n const fallback = colorScheme === 'dark' ? '#232c3d' : '#e8ebf1';\n\n if (!probe || typeof getComputedStyle !== 'function') {\n return fallback;\n }\n\n const resolved = getComputedStyle(probe).color?.trim();\n\n // A fully transparent result means the probe never received a usable value.\n if (!resolved || resolved.includes('light-dark(') || resolved === 'rgba(0, 0, 0, 0)') {\n return fallback;\n }\n\n return resolved;\n};\n\n/**\n * Keeps consumer-supplied cell fills readable in both color schemes.\n *\n * A custom `backgroundColor` is normally a literal from the document model and\n * has no dark-mode variant, while the grid's default ink follows the active\n * scheme. Pairing a light literal fill with the dark theme's near-white text\n * produces unreadable cells, so when the consumer set a background but no\n * explicit text color we derive a readable one from that background.\n */\nconst withReadableTextColor = (\n style: React.CSSProperties | undefined\n): React.CSSProperties | undefined => {\n if (!style?.backgroundColor || style.color) return style;\n\n const background = style.backgroundColor;\n if (typeof background !== 'string') return style;\n\n const color = getContrastingTextColor(background);\n if (!color) return style;\n\n return { ...style, color };\n};\n\nconst hasBorderStyle = (style?: React.CSSProperties): boolean =>\n Boolean(\n style?.borderColor ||\n style?.borderTopColor ||\n style?.borderRightColor ||\n style?.borderBottomColor ||\n style?.borderLeftColor\n );\n\nconst normalizeFiniteCount = (count: number | undefined): number | undefined => {\n if (count === undefined || count === Infinity) return undefined;\n if (!Number.isFinite(count)) return 0;\n return Math.max(0, Math.floor(count));\n};\n\nconst countToSelectionBound = (count: number | undefined): MaybeInfNumber =>\n count === undefined ? { type: 'infinity' } : { type: 'number', value: count };\n\nconst alignScrollOffset = (\n current: number,\n itemStart: number,\n itemEnd: number,\n viewportSize: number,\n align: SpreadsheetScrollAlignment\n): number => {\n if (viewportSize <= 0) return current;\n if (align === 'start') return itemStart;\n if (align === 'end') return itemEnd - viewportSize;\n\n // If a range is larger than the viewport, retain an already-visible portion.\n // When it is entirely outside the viewport, reveal its nearest edge instead\n // of jumping across the range to its more distant edge.\n if (itemEnd - itemStart > viewportSize) {\n if (itemEnd <= current) return itemEnd - viewportSize;\n if (itemStart >= current + viewportSize) return itemStart;\n return current;\n }\n\n if (itemStart < current) return itemStart;\n if (itemEnd > current + viewportSize) return itemEnd - viewportSize;\n return current;\n};\n\nconst normalizeScrollRangeAxis = (\n start: number,\n end: MaybeInfNumber,\n finiteCount: number | undefined\n): { start: number; end: number } | undefined => {\n if (!Number.isFinite(start) || (end.type === 'number' && !Number.isFinite(end.value))) {\n return undefined;\n }\n\n const normalizedStart = Math.max(0, Math.floor(start));\n const normalizedEnd =\n end.type === 'infinity'\n ? finiteCount === undefined\n ? normalizedStart\n : Math.max(0, finiteCount - 1)\n : Math.max(0, Math.floor(end.value));\n const lower = Math.min(normalizedStart, normalizedEnd);\n const upper = Math.max(normalizedStart, normalizedEnd);\n\n if (finiteCount === undefined) return { start: lower, end: upper };\n if (finiteCount === 0) return undefined;\n\n const lastIndex = finiteCount - 1;\n return {\n start: Math.min(lower, lastIndex),\n end: Math.min(upper, lastIndex)\n };\n};\n\nconst hasCellData = (value: SerializedCellValue): boolean => value !== undefined && value !== '';\n\nconst getSparseUsedRange = (\n cellData: Map<string, SerializedCellValue>,\n rowCount?: number,\n columnCount?: number\n) => {\n let minRow = Infinity;\n let maxRow = -1;\n let minCol = Infinity;\n let maxCol = -1;\n\n for (const [reference, value] of cellData) {\n if (!hasCellData(value)) continue;\n\n let rowIndex: number;\n let columnIndex: number;\n try {\n ({ rowIndex, columnIndex } = parseCellReference(reference));\n } catch {\n continue;\n }\n\n if (\n rowIndex < 0 ||\n columnIndex < 0 ||\n (rowCount !== undefined && rowIndex >= rowCount) ||\n (columnCount !== undefined && columnIndex >= columnCount)\n ) {\n continue;\n }\n\n minRow = Math.min(minRow, rowIndex);\n maxRow = Math.max(maxRow, rowIndex);\n minCol = Math.min(minCol, columnIndex);\n maxCol = Math.max(maxCol, columnIndex);\n }\n\n if (maxRow < 0 || maxCol < 0) return undefined;\n\n return {\n start: { row: minRow, col: minCol },\n end: {\n row: { type: 'number' as const, value: maxRow },\n col: { type: 'number' as const, value: maxCol }\n }\n };\n};\n\n/**\n * Excel-style sparse jump navigation along the active row or column.\n * Tables remain authoritative and are handled by SelectionManager's fallback.\n */\nconst resolveSparseNavigationTarget = (\n request: NavigationRequest,\n cellData: Map<string, SerializedCellValue>\n): SMCell | undefined => {\n if (request.kind !== 'jump' || request.table) return undefined;\n\n const isVertical = request.direction === 'up' || request.direction === 'down';\n const movingForward = request.direction === 'down' || request.direction === 'right';\n const originAxis = isVertical ? request.origin.row : request.origin.col;\n const fixedAxis = isVertical ? request.origin.col : request.origin.row;\n const occupied = new Set<number>();\n\n for (const [reference, value] of cellData) {\n if (!hasCellData(value)) continue;\n\n let rowIndex: number;\n let columnIndex: number;\n try {\n ({ rowIndex, columnIndex } = parseCellReference(reference));\n } catch {\n continue;\n }\n\n if ((isVertical ? columnIndex : rowIndex) === fixedAxis) {\n occupied.add(isVertical ? rowIndex : columnIndex);\n }\n }\n\n const step = movingForward ? 1 : -1;\n let targetAxis: number | undefined;\n\n // When the adjacent cell contains data, jump to the end of that contiguous run.\n if (occupied.has(originAxis + step)) {\n targetAxis = originAxis + step;\n while (occupied.has(targetAxis + step)) targetAxis += step;\n } else {\n // Otherwise jump across the blank region to the next populated cell.\n const candidates = [...occupied].filter((index) =>\n movingForward ? index > originAxis : index < originAxis\n );\n if (candidates.length > 0) {\n targetAxis = movingForward ? Math.min(...candidates) : Math.max(...candidates);\n }\n }\n\n if (targetAxis === undefined) return undefined;\n return isVertical\n ? { row: targetAxis, col: request.origin.col }\n : { row: request.origin.row, col: targetAxis };\n};\n\n// Cell component with callback ref for optimal performance\nconst CellComponent = React.memo(\n ({\n value,\n row,\n col,\n selectionManager,\n cellToPixelBase,\n getColumnWidth,\n getRowHeight,\n customCellStyle,\n customCellRenderer,\n inputValue,\n editInputVersion,\n width,\n height\n }: {\n selectionManager: SelectionManager;\n cellToPixelBase: (row: number, col: string) => { x: number; y: number };\n getColumnWidth: (col: string) => number;\n getRowHeight: (row: number) => number;\n customCellStyle?: (cell: CellRenderContext) => React.CSSProperties;\n customCellRenderer?: (cell: CellRenderContext) => React.ReactNode;\n width?: number;\n height?: number;\n inputValue: SerializedCellValue;\n editInputVersion: number;\n } & CellData) => {\n const cellRef = useCallback(\n (el: HTMLElement | null) => {\n if (el) {\n const rowIndex = row - 1; // Convert to 0-based\n const colIndex = columnToIndex(col);\n return selectionManager.setupCellElement(el, {\n row: rowIndex,\n col: colIndex\n });\n }\n },\n [row, col, selectionManager]\n );\n\n // Track hook state changes\n const colIndex = columnToIndex(col);\n const rowIndex = row - 1;\n const isSelected = useSelectionManager(selectionManager, () =>\n selectionManager.isSelected({ row: rowIndex, col: colIndex })\n );\n const isBeingEdited = useSelectionManager(selectionManager, () =>\n selectionManager.isEditingCell(rowIndex, colIndex)\n );\n\n const { x, y } = cellToPixelBase(row, col);\n const cellStyleCallbackData: CellRenderContext = {\n id: `${col}${row}`,\n row: getRowNumber(row),\n col,\n rowIndex: row - 1,\n colIndex: columnToIndex(col),\n value,\n isSelected: isSelected,\n isBeingEdited: isBeingEdited || false\n };\n const customStyle = withReadableTextColor(customCellStyle?.(cellStyleCallbackData));\n\n const canHaveFillHandle = useSelectionManager(selectionManager, () => {\n return selectionManager.canCellHaveFillHandle({\n row: rowIndex,\n col: colIndex\n });\n });\n\n const inputRef = useCallback(\n (el: HTMLTextAreaElement | null) => {\n if (el) {\n const rowIndex = row - 1; // Convert to 0-based\n const colIndex = columnToIndex(col);\n return selectionManager.setupInputElement(el as unknown as HTMLInputElement, {\n rowIndex,\n colIndex\n });\n }\n },\n [row, col, selectionManager]\n );\n\n return (\n <div\n ref={cellRef}\n className={cn('rsp-cell', {\n 'rsp-cell-multiline': typeof value === 'string' && value.includes('\\n'),\n 'rsp-cell-selected': isSelected,\n 'rsp-cell-editing': isBeingEdited,\n // Selection tinting is only applied when the consumer has not taken\n // over the background, so custom borders/fills stay visible.\n 'rsp-cell-plain': !(hasBorderStyle(customStyle) && !customStyle?.backgroundColor)\n })}\n data-testid={`spreadsheet-cell-${col}${row}`}\n style={{\n left: x,\n top: y,\n width: getColumnWidth(col) - 1,\n height: getRowHeight(row) - 1,\n ...customStyle,\n // While editing, the cell must present the plain editor surface. The\n // custom style is applied inline and would otherwise outrank the\n // stylesheet, leaving the typed text on a conditional fill.\n ...(isBeingEdited\n ? { backgroundColor: undefined, color: undefined }\n : null)\n }}\n >\n {isBeingEdited ? (\n <textarea\n key={editInputVersion}\n className=\"rsp-cell-editor\"\n data-testid={`spreadsheet-cell-input-${col}${row}`}\n ref={inputRef}\n defaultValue={inputValue?.toString() ?? ''}\n onKeyDownCapture={(event) => {\n if (event.key === 'Enter') event.preventDefault();\n }}\n style={{\n left: x + 4,\n top: y + 4,\n width,\n height\n }}\n />\n ) : customCellRenderer ? (\n customCellRenderer(cellStyleCallbackData)\n ) : (\n value\n )}\n {canHaveFillHandle && (\n <div\n className=\"rsp-fill-handle\"\n data-fill-handle={true}\n data-testid={`spreadsheet-fill-handle-${col}${row}`}\n />\n )}\n </div>\n );\n }\n);\n\nCellComponent.displayName = 'CellComponent';\n\n// Header component with callback ref for optimal performance\nconst HeaderComponent = React.memo(\n ({\n index,\n type,\n selectionManager,\n reverseHeaders,\n getColumnWidth,\n getRowHeight,\n handleColumnResizeStart,\n handleColumnResizeDoubleClick,\n handleRowResizeStart,\n handleRowResizeDoubleClick\n }: {\n index: number;\n type: 'row' | 'col';\n selectionManager: SelectionManager;\n reverseHeaders?: boolean;\n getColumnWidth: (col: string) => number;\n getRowHeight: (row: number) => number;\n handleColumnResizeStart: (e: React.MouseEvent, col: string) => void;\n handleColumnResizeDoubleClick: (e: React.MouseEvent, col: string) => void;\n handleRowResizeStart: (e: React.MouseEvent, row: number) => void;\n handleRowResizeDoubleClick: (e: React.MouseEvent, row: number) => void;\n }) => {\n const headerRef = useCallback(\n (el: HTMLElement | null) => {\n if (el) {\n return selectionManager.setupHeaderElement(el, index, type);\n }\n },\n [index, type, selectionManager]\n );\n\n // Calculate position and size based on index and type\n const { position, size } = React.useMemo(() => {\n if (type === 'col') {\n const col = indexToColumn(index);\n const width = getColumnWidth(col);\n const height = HEADER_HEIGHT;\n\n // Calculate x position\n let x = 0;\n for (let i = 0; i < index; i++) {\n const colKey = indexToColumn(i);\n x += getColumnWidth(colKey);\n }\n\n return {\n position: { x, y: 0 },\n size: { width, height }\n };\n } else {\n // row header\n const row = index + 1;\n const width = HEADER_WIDTH;\n const height = getRowHeight(row);\n\n // Calculate y position\n let y = 0;\n for (let i = 1; i <= index; i++) {\n y += getRowHeight(i);\n }\n\n return {\n position: { x: 0, y },\n size: { width, height }\n };\n }\n }, [index, type, getColumnWidth, getRowHeight]);\n\n // Check if this header is selected\n const isSelected = useSelectionManager(selectionManager, () => {\n if (type === 'col') {\n return selectionManager.isWholeColSelected(index);\n } else {\n return selectionManager.isWholeRowSelected(index);\n }\n });\n\n const content =\n type === 'col'\n ? reverseHeaders\n ? index + 1\n : indexToColumn(index)\n : reverseHeaders\n ? rowToLetter(index + 1)\n : index + 1;\n\n return (\n <div\n ref={headerRef}\n className={cn('rsp-header', `rsp-header-${type}`, {\n 'rsp-header-selected': isSelected\n })}\n data-testid={`spreadsheet-${type}-header-${type === 'col' ? indexToColumn(index) : index + 1}`}\n style={{\n left: position.x,\n top: position.y,\n width: size.width - 1,\n height: size.height - 1\n }}\n >\n {content}\n {type === 'col' && (\n <div\n className=\"rsp-col-resize-handle\"\n data-testid={`spreadsheet-column-resize-handle-${indexToColumn(index)}`}\n onMouseDown={(e) => handleColumnResizeStart(e, indexToColumn(index))}\n onDoubleClick={(e) => handleColumnResizeDoubleClick(e, indexToColumn(index))}\n />\n )}\n {type === 'row' && (\n <div\n className=\"rsp-row-resize-handle\"\n data-testid={`spreadsheet-row-resize-handle-${index + 1}`}\n onMouseDown={(e) => handleRowResizeStart(e, index + 1)}\n onDoubleClick={(e) => handleRowResizeDoubleClick(e, index + 1)}\n />\n )}\n </div>\n );\n }\n);\n\nHeaderComponent.displayName = 'HeaderComponent';\n\nconst isEditableKeyboardTarget = (target: EventTarget | null): boolean => {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n return Boolean(target.closest('input, textarea, select, [contenteditable=\"true\"]'));\n};\n\n// Types and interfaces\ninterface CellData {\n value: SerializedCellValue;\n /**\n * The row of the cell, e.g. 1, 2, 3, etc.\n */\n row: number;\n /**\n * The column of the cell, e.g. \"A\", \"B\", \"C\", etc.\n */\n col: string;\n}\n\n// Overlay component types (similar to Grid)\nexport interface SpreadsheetChildInitial {\n x: number;\n y: number;\n width: number;\n height: number;\n zoom?: number;\n}\n\nexport interface SpreadsheetChild {\n id: string;\n title: string;\n x: number; // pixel position relative to cell grid (before zoom/scroll applied)\n y: number;\n width: number;\n height: number;\n zoom?: number;\n snapToCells?: boolean;\n cellAnchor?: CellSnapAnchor;\n minimized?: boolean;\n initial?: SpreadsheetChildInitial;\n component: string;\n canClose?: boolean;\n persistent?: boolean;\n props?: any;\n}\n\nexport interface SpreadsheetChildState {\n isSelected: boolean;\n isMinimized: boolean;\n}\n\nexport type SpreadsheetComponent = (child: SpreadsheetChild, state: SpreadsheetChildState) => ReactNode;\n\nconst columnWidthsRecordToMap = (columnWidths?: SpreadsheetColumnWidths): Map<string, number> => {\n return new Map(\n Object.entries(columnWidths || {}).filter((entry): entry is [string, number] => {\n const width = entry[1];\n return typeof width === 'number' && Number.isFinite(width) && width > 0;\n })\n );\n};\n\nconst columnWidthsMapToRecord = (columnWidths: Map<string, number>): SpreadsheetColumnWidths => {\n const result: SpreadsheetColumnWidths = {};\n columnWidths.forEach((width, column) => {\n if (Number.isFinite(width) && width > 0) {\n result[column] = width;\n }\n });\n return result;\n};\n\nconst rowHeightsRecordToMap = (rowHeights?: SpreadsheetRowHeights): Map<number, number> => {\n const entries = Object.entries(rowHeights || {}).flatMap(([row, height]) => {\n const rowNumber = Number(row);\n if (Number.isInteger(rowNumber) && rowNumber > 0 && Number.isFinite(height) && height > 0) {\n return [[rowNumber, height] as [number, number]];\n }\n return [];\n });\n\n return new Map(entries);\n};\n\nconst rowHeightsMapToRecord = (rowHeights: Map<number, number>): SpreadsheetRowHeights => {\n const result: SpreadsheetRowHeights = {};\n rowHeights.forEach((height, row) => {\n if (Number.isInteger(row) && row > 0 && Number.isFinite(height) && height > 0) {\n result[row] = height;\n }\n });\n return result;\n};\n\nconst isSnappedTextBox = (child: SpreadsheetChild): boolean =>\n child.component === 'RichText' && Boolean(child.snapToCells);\n\nconst areCellSnapAnchorsEqual = (a: CellSnapAnchor, b: CellSnapAnchor): boolean =>\n a.startCol === b.startCol && a.startRow === b.startRow && a.endCol === b.endCol && a.endRow === b.endRow;\n\nconst applyCellSnapAnchorToTextBox = (\n child: SpreadsheetChild,\n anchor: CellSnapAnchor,\n columnWidths: Map<string, number>,\n rowHeights: Map<number, number>\n): SpreadsheetChild => {\n const normalizedAnchor = normalizeCellSnapAnchor(anchor);\n const rect = getRectFromCellSnapAnchor(normalizedAnchor, columnWidths, rowHeights);\n\n return {\n ...child,\n snapToCells: true,\n cellAnchor: normalizedAnchor,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n };\n};\n\nconst syncSnappedTextBoxRects = (\n children: SpreadsheetChild[],\n columnWidths: Map<string, number>,\n rowHeights: Map<number, number>\n): SpreadsheetChild[] => {\n let changed = false;\n\n const nextChildren = children.map((child) => {\n if (!isSnappedTextBox(child)) {\n return child;\n }\n\n const fallbackAnchor = getCellSnapAnchorFromRect(child, columnWidths, rowHeights);\n const anchor = child.cellAnchor ? normalizeCellSnapAnchor(child.cellAnchor) : fallbackAnchor;\n const rect = getRectFromCellSnapAnchor(anchor, columnWidths, rowHeights);\n const currentAnchor = child.cellAnchor ? normalizeCellSnapAnchor(child.cellAnchor) : undefined;\n const anchorChanged = !currentAnchor || !areCellSnapAnchorsEqual(currentAnchor, anchor);\n const rectChanged =\n child.x !== rect.x || child.y !== rect.y || child.width !== rect.width || child.height !== rect.height;\n\n if (!anchorChanged && !rectChanged) {\n return child;\n }\n\n changed = true;\n return {\n ...child,\n cellAnchor: anchor,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n };\n });\n\n return changed ? nextChildren : children;\n};\n\nconst isCellSnapResizeHandle = (handle: string): handle is CellSnapResizeHandle => {\n return (\n handle === 'top' ||\n handle === 'right' ||\n handle === 'bottom' ||\n handle === 'left' ||\n handle === 'top-left' ||\n handle === 'top-right' ||\n handle === 'bottom-left' ||\n handle === 'bottom-right'\n );\n};\n\nexport interface SpreadsheetProps {\n style?: React.CSSProperties;\n /** Extra class name applied to the outer `.rsp-root` element. */\n className?: string;\n containerProps?: React.HTMLAttributes<HTMLDivElement>;\n cellData?: Map<string, SerializedCellValue>;\n onCellDataChange?: (data: Map<string, SerializedCellValue>) => void;\n onCellDataChangeError?: (error: unknown) => void;\n /** Finite number of rows. Omit for an unbounded sheet. */\n rowCount?: number;\n /** Finite number of columns. Omit for an unbounded sheet. */\n columnCount?: number;\n columnWidths?: SpreadsheetColumnWidths;\n onColumnWidthsChange?: (columnWidths: SpreadsheetColumnWidths) => void;\n rowHeights?: SpreadsheetRowHeights;\n onRowHeightsChange?: (rowHeights: SpreadsheetRowHeights) => void;\n customCellStyle?: (cell: CellRenderContext) => React.CSSProperties;\n customCellRenderer?: (cell: CellRenderContext) => React.ReactNode;\n /**\n * Used for saving the value to the cell data. Most useful for parsing a pasted\n * string value to a number.\n */\n parseValue?: (\n value: string,\n cell: {\n id: string;\n row: number;\n col: string;\n rowIndex: number;\n colIndex: number;\n }\n ) => string | number;\n\n selection?: {\n initialState?: Partial<SelectionManagerState>;\n state?: SelectionManagerState;\n onStateChange?: (state: SelectionManagerState) => void;\n effects?: (selectionManager: SelectionManager) => (() => void) | void;\n formats?: Format[];\n /** Data- and table-aware keyboard navigation hooks. */\n navigation?: SelectionNavigationModel;\n };\n\n // Overlay component props\n components?: Record<string, SpreadsheetComponent>;\n overlayChildren?: SpreadsheetChild[];\n selectedOverlayId?: string | null;\n onOverlaySelect?: (childId: string | null) => void;\n onOverlayChildrenChange?: (children: SpreadsheetChild[]) => void;\n overlayPlaceholder?: {\n componentType: string;\n title: string;\n width: number;\n height: number;\n onPlaced: (x: number, y: number) => void;\n onCancel?: () => void;\n };\n /** Whether the parent component is selected (used to gate overlay selection) */\n parentSelected?: boolean;\n}\n\ninterface ViewportState {\n scrollX: number;\n scrollY: number;\n zoom: number;\n}\n\ninterface GridDimensions {\n cellWidth: number;\n cellHeight: number;\n headerWidth: number;\n headerHeight: number;\n}\n\nexport type SpreadsheetScrollAlignment = 'nearest' | 'start' | 'end';\n\nexport interface SpreadsheetScrollToCellOptions {\n align?: SpreadsheetScrollAlignment;\n}\n\nexport interface SpreadsheetScrollToRangeOptions {\n align?: SpreadsheetScrollAlignment;\n}\n\n// Ref interface for imperative methods\nexport interface SpreadsheetRef {\n focus: () => void;\n blur: () => void;\n /** Reveal a zero-based cell without changing the selection. */\n scrollToCell: (\n cell: SMCell,\n options?: SpreadsheetScrollToCellOptions\n ) => void;\n /** Reveal a zero-based range without changing the selection. */\n scrollToRange: (\n range: SMArea,\n options?: SpreadsheetScrollToRangeOptions\n ) => void;\n}\n\nclass SpreadsheetClipboardManager extends ClipboardUtils {\n constructor(\n private cellDataRef: React.RefObject<Map<string, SerializedCellValue>>,\n private selectionManager: SelectionManager\n ) {\n super();\n }\n public triggerCopy() {\n const extractedCells = this.extractCellsFromSelection(this.selectionManager, this.cellDataRef.current);\n\n if (!extractedCells) return;\n\n const { width, height, cells } = extractedCells;\n\n const exportGrid = this.createExportGrid(width, height);\n\n cells.forEach(({ relative, value }) => {\n const row = exportGrid[relative.rowIndex];\n if (!row) return;\n row[relative.columnIndex] = value === undefined ? '' : String(value);\n });\n\n this.writeToOsClipboard(exportGrid);\n }\n public triggerPaste(updates: CellDataUpdate[]) {\n this.selectionManager.saveCellValues(updates);\n }\n}\n\n// Main component\nexport const Spreadsheet = forwardRef<\n SpreadsheetRef | undefined,\n SpreadsheetProps & {\n disableClipboard?: boolean;\n }\n>(\n (\n {\n style,\n className,\n containerProps,\n cellData: controlledCellData,\n onCellDataChange,\n onCellDataChangeError,\n rowCount,\n columnCount,\n columnWidths: controlledColumnWidths,\n onColumnWidthsChange,\n rowHeights: controlledRowHeights,\n onRowHeightsChange,\n customCellStyle,\n customCellRenderer,\n parseValue,\n selection,\n components,\n overlayChildren: controlledOverlayChildren,\n selectedOverlayId: controlledSelectedOverlayId,\n onOverlaySelect,\n onOverlayChildrenChange,\n overlayPlaceholder,\n parentSelected = true,\n disableClipboard = false\n },\n ref\n ) => {\n const [{ width, height }, containerRef] = useResizeObserver();\n const [containerDivRef, setContainerDivRef] = useState<HTMLDivElement | null>(null);\n // Resolved from the mounted element so a consumer can pin a subtree to\n // light or dark via `color-scheme` and have canvas gridlines follow.\n const colorScheme = useColorScheme(containerDivRef);\n // Hidden element used to read the browser-resolved `--rsp-gridline` color\n // for canvas painting (see `resolveGridLineColor`).\n const gridLineProbeRef = useRef<HTMLSpanElement | null>(null);\n\n // State management\n const [internalCellData, setInternalCellData] = useState<Map<string, SerializedCellValue>>(new Map());\n const [retryingEdit, setRetryingEdit] = useState<{\n rowIndex: number;\n colIndex: number;\n version: number;\n } | null>(null);\n const retryingEditVersionRef = useRef(0);\n\n // Use controlled cellData if provided, otherwise use internal state\n const cellData = controlledCellData ?? internalCellData;\n\n const cellDataRef = useRef(cellData);\n cellDataRef.current = cellData;\n\n const finiteRowCount = normalizeFiniteCount(rowCount);\n const finiteColumnCount = normalizeFiniteCount(columnCount);\n const gridCountsRef = useRef({ rows: finiteRowCount, columns: finiteColumnCount });\n gridCountsRef.current = { rows: finiteRowCount, columns: finiteColumnCount };\n\n const getNumRows = useCallback(\n () => countToSelectionBound(gridCountsRef.current.rows),\n []\n );\n const getNumCols = useCallback(\n () => countToSelectionBound(gridCountsRef.current.columns),\n []\n );\n const getDefaultUsedRange = useCallback(\n () =>\n getSparseUsedRange(\n cellDataRef.current,\n gridCountsRef.current.rows,\n gridCountsRef.current.columns\n ),\n []\n );\n const defaultResolveTarget = useCallback(\n (request: NavigationRequest) =>\n resolveSparseNavigationTarget(request, cellDataRef.current),\n []\n );\n const consumerNavigation = selection?.navigation;\n const navigation = useMemo<SelectionNavigationModel>(\n () => ({\n getUsedRange: consumerNavigation?.getUsedRange ?? getDefaultUsedRange,\n ...(consumerNavigation?.getTableAt\n ? { getTableAt: consumerNavigation.getTableAt }\n : {}),\n resolveTarget: consumerNavigation?.resolveTarget ?? defaultResolveTarget\n }),\n [consumerNavigation, defaultResolveTarget, getDefaultUsedRange]\n );\n\n const selectionManager = useInitializeSelectionManager({\n getNumCols,\n getNumRows,\n initialState: selection?.initialState,\n state: selection?.state,\n onStateChange: selection?.onStateChange,\n containerElement: containerDivRef,\n formats: selection?.formats,\n navigation,\n disableAutoClipboard: true\n });\n\n const effects = selection?.effects;\n useEffect(() => {\n if (effects) {\n return effects(selectionManager);\n }\n }, [selectionManager, effects]);\n\n const isControlled = controlledCellData !== undefined;\n const prevIsControlledRef = useRef(isControlled);\n\n selectionManager.getCellsWithData = (area) => {\n const cells: { rowIndex: number; colIndex: number }[] = [];\n cellData.forEach((value, key) => {\n const { rowIndex, columnIndex } = parseCellReference(key);\n if (\n columnIndex >= area.start.col &&\n (area.end.col.type === 'infinity' || columnIndex <= area.end.col.value) &&\n rowIndex >= area.start.row &&\n (area.end.row.type === 'infinity' || rowIndex <= area.end.row.value)\n ) {\n cells.push({ rowIndex, colIndex: columnIndex });\n }\n });\n return cells;\n };\n\n React.useEffect(() => {\n if (isControlled !== prevIsControlledRef.current) {\n prevIsControlledRef.current = isControlled;\n console.warn(\n `The component went from ${\n prevIsControlledRef.current ? 'controlled' : 'uncontrolled'\n } to ${isControlled ? 'controlled' : 'uncontrolled'}, this is not supported`\n );\n }\n }, [controlledCellData, isControlled]);\n\n const [viewport, setViewport] = useState<ViewportState>({\n scrollX: 0,\n scrollY: 0,\n zoom: 1\n });\n const controlledColumnWidthsMap = useMemo(\n () => (controlledColumnWidths ? columnWidthsRecordToMap(controlledColumnWidths) : undefined),\n [controlledColumnWidths]\n );\n const [internalColumnWidths, setInternalColumnWidths] = useState<Map<string, number>>(() =>\n columnWidthsRecordToMap(controlledColumnWidths)\n );\n const [transientColumnWidths, setTransientColumnWidths] = useState<Map<string, number> | null>(null);\n const columnWidths = transientColumnWidths ?? controlledColumnWidthsMap ?? internalColumnWidths;\n const columnWidthsRef = useRef(columnWidths);\n columnWidthsRef.current = columnWidths;\n const previousControlledColumnWidthsRef = useRef(controlledColumnWidths);\n useEffect(() => {\n if (controlledColumnWidths !== previousControlledColumnWidthsRef.current) {\n previousControlledColumnWidthsRef.current = controlledColumnWidths;\n setTransientColumnWidths(null);\n }\n }, [controlledColumnWidths]);\n const controlledRowHeightsMap = useMemo(\n () => (controlledRowHeights ? rowHeightsRecordToMap(controlledRowHeights) : undefined),\n [controlledRowHeights]\n );\n const [internalRowHeights, setInternalRowHeights] = useState<Map<number, number>>(() =>\n rowHeightsRecordToMap(controlledRowHeights)\n );\n const [transientRowHeights, setTransientRowHeights] = useState<Map<number, number> | null>(null);\n const rowHeights = transientRowHeights ?? controlledRowHeightsMap ?? internalRowHeights;\n const rowHeightsRef = useRef(rowHeights);\n rowHeightsRef.current = rowHeights;\n const previousControlledRowHeightsRef = useRef(controlledRowHeights);\n useEffect(() => {\n if (controlledRowHeights !== previousControlledRowHeightsRef.current) {\n previousControlledRowHeightsRef.current = controlledRowHeights;\n setTransientRowHeights(null);\n }\n }, [controlledRowHeights]);\n\n const [isResizingColumn, setIsResizingColumn] = useState<string | null>(null);\n const [isResizingRow, setIsResizingRow] = useState<number | null>(null);\n const [resizeStartX, setResizeStartX] = useState(0);\n const [resizeStartY, setResizeStartY] = useState(0);\n const [resizeStartSize, setResizeStartSize] = useState(0);\n\n // Overlay state management\n const [internalOverlayChildren, setInternalOverlayChildren] = useState<SpreadsheetChild[]>([]);\n const [transientOverlayChildren, setTransientOverlayChildren] = useState<SpreadsheetChild[] | null>(null);\n const [internalSelectedOverlayId, setInternalSelectedOverlayId] = useState<string | null>(null);\n const [mountedPersistentOverlayIds, setMountedPersistentOverlayIds] = useState<Set<string>>(new Set());\n\n // Placeholder state for overlay placement\n const [placeholderPos, setPlaceholderPos] = useState<{ x: number; y: number } | null>(null);\n\n // Use transient overlay state while dragging/resizing, then commit once the interaction ends.\n const overlayChildren = transientOverlayChildren ?? controlledOverlayChildren ?? internalOverlayChildren;\n const selectedOverlayId =\n controlledSelectedOverlayId !== undefined ? controlledSelectedOverlayId : internalSelectedOverlayId;\n\n const previousControlledOverlayChildrenRef = useRef(controlledOverlayChildren);\n useEffect(() => {\n if (controlledOverlayChildren !== previousControlledOverlayChildrenRef.current) {\n previousControlledOverlayChildrenRef.current = controlledOverlayChildren;\n setTransientOverlayChildren(null);\n }\n }, [controlledOverlayChildren]);\n\n const overlayChildrenRef = useRef<SpreadsheetChild[]>(overlayChildren);\n overlayChildrenRef.current = overlayChildren;\n const overlayInteractionDraftRectsRef = useRef<Record<string, CellSnapRect>>({});\n const pendingSnappedTextBoxLayoutCommitRef = useRef(false);\n\n // Refs\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayContainerRef = useRef<HTMLDivElement>(null);\n const viewportStreamRef = useRef(\n new ViewportStream({\n x: viewport.scrollX,\n y: viewport.scrollY,\n zoom: viewport.zoom\n })\n );\n\n // Update viewport stream when viewport changes\n React.useEffect(() => {\n viewportStreamRef.current.next({\n x: viewport.scrollX,\n y: viewport.scrollY,\n zoom: viewport.zoom\n });\n }, [viewport.scrollX, viewport.scrollY, viewport.zoom]);\n // Grid dimensions\n const gridDims: GridDimensions = useMemo(\n () => ({\n cellWidth: DEFAULT_CELL_WIDTH * viewport.zoom,\n cellHeight: DEFAULT_CELL_HEIGHT * viewport.zoom,\n headerWidth: HEADER_WIDTH * viewport.zoom,\n headerHeight: HEADER_HEIGHT * viewport.zoom\n }),\n [viewport.zoom]\n );\n\n // Handle mouse movement for placeholder positioning\n React.useEffect(() => {\n if (!overlayPlaceholder || !containerDivRef) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = containerDivRef.getBoundingClientRect();\n const mouseX = e.clientX - rect.left;\n const mouseY = e.clientY - rect.top;\n\n // Check if mouse is within the spreadsheet (after headers)\n if (mouseX >= gridDims.headerWidth && mouseY >= gridDims.headerHeight) {\n // Convert screen coordinates to sheet coordinates (centered on cursor)\n const sheetX =\n (mouseX - gridDims.headerWidth + viewport.scrollX) / viewport.zoom - overlayPlaceholder.width / 2;\n const sheetY =\n (mouseY - gridDims.headerHeight + viewport.scrollY) / viewport.zoom -\n overlayPlaceholder.height / 2;\n\n // Clamp to minimum bounds (can't be negative or overlap headers)\n const clampedX = Math.max(0, sheetX);\n const clampedY = Math.max(0, sheetY);\n\n setPlaceholderPos({ x: clampedX, y: clampedY });\n } else {\n // Clear placeholder position when mouse is over headers\n setPlaceholderPos(null);\n }\n };\n\n const handleClick = (e: MouseEvent) => {\n if (placeholderPos) {\n e.stopPropagation();\n // Final bounds check before placement\n const finalX = Math.max(0, placeholderPos.x);\n const finalY = Math.max(0, placeholderPos.y);\n overlayPlaceholder.onPlaced(finalX, finalY);\n setPlaceholderPos(null);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n overlayPlaceholder.onCancel?.();\n setPlaceholderPos(null);\n }\n };\n\n const handleContextMenu = (e: MouseEvent) => {\n e.preventDefault();\n overlayPlaceholder.onCancel?.();\n setPlaceholderPos(null);\n };\n\n containerDivRef.addEventListener('mousemove', handleMouseMove);\n containerDivRef.addEventListener('click', handleClick);\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('contextmenu', handleContextMenu);\n\n return () => {\n containerDivRef.removeEventListener('mousemove', handleMouseMove);\n containerDivRef.removeEventListener('click', handleClick);\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('contextmenu', handleContextMenu);\n };\n }, [overlayPlaceholder, containerDivRef, viewport, gridDims, placeholderPos]);\n\n const effectsRefOb = {\n onCellDataChange,\n onCellDataChangeError,\n controlledCellData,\n parseValue,\n cellData,\n viewport,\n gridDims,\n height\n };\n const effectsRef = useRef(effectsRefOb);\n effectsRef.current = effectsRefOb;\n\n // Styles are now imported via CSS module\n\n // Helper function to setup canvas with devicePixelRatio scaling\n const setupCanvas = useCallback((canvas: HTMLCanvasElement, width: number, height: number) => {\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n // Set actual size in memory (scaled for high-DPI)\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n\n // Set display size (CSS pixels)\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n\n // Scale the drawing context so everything draws at the correct size\n ctx.scale(devicePixelRatio, devicePixelRatio);\n\n return ctx;\n }, []);\n\n // Draw main grid on canvas\n const drawGrid = useCallback(() => {\n if (!canvasRef.current || !width || !height) return;\n\n const ctx = setupCanvas(canvasRef.current, width, height);\n if (!ctx) return;\n\n ctx.clearRect(0, 0, width, height);\n // Canvas 2D cannot evaluate CSS, so read the resolved gridline color from\n // a hidden probe element that the browser has already themed for us.\n ctx.strokeStyle = resolveGridLineColor(gridLineProbeRef.current, colorScheme);\n ctx.lineWidth = 1;\n\n // Draw vertical grid lines using custom column widths\n let x = gridDims.headerWidth;\n let colIndex = 0;\n\n // Skip columns before viewport\n while (\n x < viewport.scrollX + gridDims.headerWidth &&\n (finiteColumnCount === undefined || colIndex < finiteColumnCount)\n ) {\n const colWidth = (columnWidths.get(indexToColumn(colIndex)) || DEFAULT_CELL_WIDTH) * viewport.zoom;\n if (x + colWidth > viewport.scrollX + gridDims.headerWidth) {\n break;\n }\n x += colWidth;\n colIndex++;\n }\n\n // Draw visible columns\n while (\n x - viewport.scrollX < width &&\n (finiteColumnCount === undefined || colIndex < finiteColumnCount)\n ) {\n const drawX = x - viewport.scrollX;\n if (drawX >= gridDims.headerWidth && drawX <= width) {\n ctx.beginPath();\n ctx.moveTo(drawX, gridDims.headerHeight);\n ctx.lineTo(drawX, height);\n ctx.stroke();\n }\n const colWidth = (columnWidths.get(indexToColumn(colIndex)) || DEFAULT_CELL_WIDTH) * viewport.zoom;\n x += colWidth;\n colIndex++;\n }\n\n // Draw horizontal grid lines using custom row heights\n let y = gridDims.headerHeight;\n let rowNum = 1;\n\n // Skip rows before viewport\n while (\n y < viewport.scrollY + gridDims.headerHeight &&\n (finiteRowCount === undefined || rowNum <= finiteRowCount)\n ) {\n const rowHeight = (rowHeights.get(rowNum) || DEFAULT_CELL_HEIGHT) * viewport.zoom;\n if (y + rowHeight > viewport.scrollY + gridDims.headerHeight) {\n break;\n }\n y += rowHeight;\n rowNum++;\n }\n\n // Draw visible rows\n while (\n y - viewport.scrollY < height &&\n (finiteRowCount === undefined || rowNum <= finiteRowCount)\n ) {\n const drawY = y - viewport.scrollY;\n if (drawY >= gridDims.headerHeight && drawY <= height) {\n ctx.beginPath();\n ctx.moveTo(gridDims.headerWidth, drawY);\n ctx.lineTo(width, drawY);\n ctx.stroke();\n }\n const rowHeight = (rowHeights.get(rowNum) || DEFAULT_CELL_HEIGHT) * viewport.zoom;\n y += rowHeight;\n rowNum++;\n }\n }, [\n columnWidths,\n finiteColumnCount,\n finiteRowCount,\n gridDims.headerHeight,\n gridDims.headerWidth,\n height,\n rowHeights,\n setupCanvas,\n viewport.scrollX,\n viewport.scrollY,\n viewport.zoom,\n width,\n colorScheme\n ]);\n\n // Get visible cells for rendering - ensure we always render all visible positions\n const getVisibleCells = useCallback(() => {\n if (!width || !height) return [];\n\n const cells: CellData[] = [];\n\n // Find first visible column\n let x = 0;\n let startCol = 0;\n while (\n x < viewport.scrollX &&\n (finiteColumnCount === undefined || startCol < finiteColumnCount)\n ) {\n const colWidth = (columnWidths.get(indexToColumn(startCol)) || DEFAULT_CELL_WIDTH) * viewport.zoom;\n if (x + colWidth > viewport.scrollX) {\n break;\n }\n x += colWidth;\n startCol++;\n }\n\n // Find first visible row\n let y = 0;\n let startRow = 0;\n while (\n y < viewport.scrollY &&\n (finiteRowCount === undefined || startRow < finiteRowCount)\n ) {\n const rowHeight = (rowHeights.get(startRow + 1) || DEFAULT_CELL_HEIGHT) * viewport.zoom;\n if (y + rowHeight > viewport.scrollY) {\n break;\n }\n y += rowHeight;\n startRow++;\n }\n\n // Collect visible cells\n let rowY = y;\n let row = startRow;\n while (\n rowY < viewport.scrollY + height &&\n (finiteRowCount === undefined || row < finiteRowCount)\n ) {\n let colX = x;\n let col = startCol;\n while (\n colX < viewport.scrollX + width &&\n (finiteColumnCount === undefined || col < finiteColumnCount)\n ) {\n const colKey = indexToColumn(col);\n const rowNum = getRowNumber(row);\n const cellKey = `${colKey}${rowNum}`;\n cells.push({\n value: cellData.get(cellKey) ?? '',\n row: rowNum,\n col: colKey\n });\n const colWidth = (columnWidths.get(colKey) || DEFAULT_CELL_WIDTH) * viewport.zoom;\n colX += colWidth;\n col++;\n }\n const rowHeight = (rowHeights.get(row + 1) || DEFAULT_CELL_HEIGHT) * viewport.zoom;\n rowY += rowHeight;\n row++;\n }\n\n return cells;\n }, [\n cellData,\n columnWidths,\n finiteColumnCount,\n finiteRowCount,\n height,\n rowHeights,\n viewport.scrollX,\n viewport.scrollY,\n viewport.zoom,\n width\n ]);\n\n // Get column width (considering custom sizes)\n const getColumnWidth = useCallback(\n (col: string) => {\n return columnWidths.get(col) || DEFAULT_CELL_WIDTH;\n },\n [columnWidths]\n );\n\n // Get row height (considering custom sizes)\n const getRowHeight = useCallback(\n (row: number) => {\n return rowHeights.get(row) || DEFAULT_CELL_HEIGHT;\n },\n [rowHeights]\n );\n\n // Convert cell coordinates to base pixel coordinates (without scroll offset, for container transform)\n const cellToPixelBase = useCallback(\n (row: number, col: string) => {\n const colIndex = columnToIndex(col);\n const rowIndex = row - 1;\n\n // Calculate x position considering custom column widths\n let x = HEADER_WIDTH;\n for (let i = 0; i < colIndex; i++) {\n const colKey = indexToColumn(i);\n x += columnWidths.get(colKey) || DEFAULT_CELL_WIDTH;\n }\n\n // Calculate y position considering custom row heights\n let y = HEADER_HEIGHT;\n for (let i = 1; i <= rowIndex; i++) {\n y += rowHeights.get(i) || DEFAULT_CELL_HEIGHT;\n }\n\n return { x, y };\n },\n [columnWidths, rowHeights]\n );\n\n const clampViewportOffsets = useCallback(\n (scrollX: number, scrollY: number, zoom: number) => {\n const bodyWidth = Math.max(0, width - HEADER_WIDTH * zoom);\n const bodyHeight = Math.max(0, height - HEADER_HEIGHT * zoom);\n const maxScrollX =\n finiteColumnCount === undefined\n ? Infinity\n : Math.max(\n 0,\n getColumnEdgePosition(finiteColumnCount, columnWidths) * zoom - bodyWidth\n );\n const maxScrollY =\n finiteRowCount === undefined\n ? Infinity\n : Math.max(\n 0,\n getRowEdgePosition(finiteRowCount, rowHeights) * zoom - bodyHeight\n );\n\n return {\n scrollX: Math.min(Math.max(0, scrollX), maxScrollX),\n scrollY: Math.min(Math.max(0, scrollY), maxScrollY)\n };\n },\n [columnWidths, finiteColumnCount, finiteRowCount, height, rowHeights, width]\n );\n\n const revealRange = useCallback(\n (\n range: SMArea,\n options: {\n rowAlign?: SpreadsheetScrollAlignment;\n columnAlign?: SpreadsheetScrollAlignment;\n } = {}\n ) => {\n if (finiteRowCount === 0 || finiteColumnCount === 0) return;\n const rows = normalizeScrollRangeAxis(range.start.row, range.end.row, finiteRowCount);\n const columns = normalizeScrollRangeAxis(range.start.col, range.end.col, finiteColumnCount);\n if (!rows || !columns) return;\n\n setViewport((previous) => {\n const bodyWidth = Math.max(0, width - HEADER_WIDTH * previous.zoom);\n const bodyHeight = Math.max(0, height - HEADER_HEIGHT * previous.zoom);\n const left = getColumnEdgePosition(columns.start, columnWidths) * previous.zoom;\n const right = getColumnEdgePosition(columns.end + 1, columnWidths) * previous.zoom;\n const top = getRowEdgePosition(rows.start, rowHeights) * previous.zoom;\n const bottom = getRowEdgePosition(rows.end + 1, rowHeights) * previous.zoom;\n const desired = clampViewportOffsets(\n alignScrollOffset(\n previous.scrollX,\n left,\n right,\n bodyWidth,\n options.columnAlign ?? 'nearest'\n ),\n alignScrollOffset(\n previous.scrollY,\n top,\n bottom,\n bodyHeight,\n options.rowAlign ?? 'nearest'\n ),\n previous.zoom\n );\n\n if (\n desired.scrollX === previous.scrollX &&\n desired.scrollY === previous.scrollY\n ) {\n return previous;\n }\n return { ...previous, ...desired };\n });\n },\n [\n clampViewportOffsets,\n columnWidths,\n finiteColumnCount,\n finiteRowCount,\n height,\n rowHeights,\n width\n ]\n );\n\n const revealCell = useCallback(\n (\n cell: SMCell,\n options: {\n rowAlign?: SpreadsheetScrollAlignment;\n columnAlign?: SpreadsheetScrollAlignment;\n } = {}\n ) => {\n revealRange(\n {\n start: { row: cell.row, col: cell.col },\n end: {\n row: { type: 'number', value: cell.row },\n col: { type: 'number', value: cell.col }\n }\n },\n options\n );\n },\n [revealRange]\n );\n\n const scrollToCell = useCallback(\n (cell: SMCell, options: SpreadsheetScrollToCellOptions = {}) => {\n const align = options.align ?? 'nearest';\n revealCell(cell, { rowAlign: align, columnAlign: align });\n },\n [revealCell]\n );\n\n const scrollToRange = useCallback(\n (range: SMArea, options: SpreadsheetScrollToRangeOptions = {}) => {\n const align = options.align ?? 'nearest';\n revealRange(range, { rowAlign: align, columnAlign: align });\n },\n [revealRange]\n );\n\n useEffect(\n () =>\n selectionManager.listenToViewportRequest((request) => {\n if (request.type === 'reveal-range') {\n scrollToRange(request.range, { align: request.align });\n return;\n }\n\n const isVertical = request.direction === 'up' || request.direction === 'down';\n revealCell(request.cell, {\n rowAlign: isVertical ? request.align : 'nearest',\n columnAlign: isVertical ? 'nearest' : request.align\n });\n }),\n [revealCell, scrollToRange, selectionManager]\n );\n\n // Keep an existing viewport valid when finite dimensions or custom sizes shrink.\n useEffect(() => {\n setViewport((previous) => {\n const next = clampViewportOffsets(\n previous.scrollX,\n previous.scrollY,\n previous.zoom\n );\n return next.scrollX === previous.scrollX && next.scrollY === previous.scrollY\n ? previous\n : { ...previous, ...next };\n });\n }, [clampViewportOffsets]);\n\n React.useEffect(() => {\n return selectionManager.listenToUpdateData((updates) => {\n const editingState = selectionManager.isEditing;\n try {\n const { cellData, onCellDataChange } = effectsRef.current;\n const newData = new Map(cellData);\n updates.forEach(({ value, rowIndex, colIndex }) => {\n const key = `${indexToColumn(colIndex)}${rowIndex + 1}`;\n const parseValue = effectsRef.current.parseValue;\n if (value === '') {\n newData.delete(key);\n } else {\n // Apply parse function if provided, otherwise use value as-is\n let parsedValue: number | string = value;\n if (parseValue && typeof value === 'string') {\n // Extract cell info from key (e.g., \"A1\" -> row=1, col=\"A\")\n const match = key.match(/^([A-Z]+)(\\d+)$/);\n const col = match?.[1];\n const rowText = match?.[2];\n if (col && rowText) {\n const row = parseInt(rowText, 10);\n const colIndex = columnToIndex(col);\n const rowIndex = row - 1;\n\n parsedValue = parseValue(value, {\n id: key,\n row,\n col,\n rowIndex,\n colIndex\n });\n }\n }\n newData.set(key, parsedValue);\n }\n });\n onCellDataChange?.(newData);\n setInternalCellData(newData);\n } catch (error) {\n console.error('Failed to update spreadsheet cell data:', error);\n effectsRef.current.onCellDataChangeError?.(error);\n\n const rejectedUpdate = updates.length === 1 ? updates[0] : undefined;\n if (\n editingState.type === 'cell' &&\n rejectedUpdate &&\n rejectedUpdate.rowIndex === editingState.row &&\n rejectedUpdate.colIndex === editingState.col\n ) {\n const rejectedValue = rejectedUpdate.value === undefined ? '' : String(rejectedUpdate.value);\n queueMicrotask(() => {\n retryingEditVersionRef.current += 1;\n setRetryingEdit({\n rowIndex: editingState.row,\n colIndex: editingState.col,\n version: retryingEditVersionRef.current\n });\n selectionManager.editCell(editingState.row, editingState.col, rejectedValue);\n });\n }\n }\n });\n }, [selectionManager]);\n\n const clipboardManager = useMemo(() => {\n return new SpreadsheetClipboardManager(cellDataRef, selectionManager);\n }, [selectionManager]);\n\n React.useEffect(() => {\n if (disableClipboard) return;\n selectionManager.listenToCopy(() => {\n clipboardManager.triggerCopy();\n });\n }, [selectionManager, clipboardManager, disableClipboard]);\n\n React.useEffect(() => {\n if (disableClipboard) return;\n selectionManager.listenToPaste(({ updates }) => {\n clipboardManager.triggerPaste(updates);\n });\n }, [selectionManager, clipboardManager, disableClipboard]);\n\n // Handle wheel events (scroll only, zoom disabled)\n const handleWheel = useCallback(\n (e: WheelEvent) => {\n const target = e.target;\n const currentTarget = e.currentTarget;\n const overlay =\n target instanceof Element ? target.closest(SPREADSHEET_OVERLAY_SELECTOR) : null;\n if (overlay && currentTarget instanceof Node && currentTarget.contains(overlay)) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n // Always scroll, ignore zoom.\n setViewport((previous) => ({\n ...previous,\n ...clampViewportOffsets(\n previous.scrollX + e.deltaX,\n previous.scrollY + e.deltaY,\n previous.zoom\n )\n }));\n },\n [clampViewportOffsets]\n );\n\n // Overlay interaction handlers\n const commitOverlayChildren = useCallback(\n (children: SpreadsheetChild[]) => {\n overlayChildrenRef.current = children;\n\n if (onOverlayChildrenChange) {\n onOverlayChildrenChange(children);\n setTransientOverlayChildren(children);\n return;\n }\n\n setInternalOverlayChildren(children);\n setTransientOverlayChildren(null);\n },\n [onOverlayChildrenChange]\n );\n\n const updateOverlayChildrenLocally = useCallback(\n (updater: (children: SpreadsheetChild[]) => SpreadsheetChild[]) => {\n const nextChildren = updater(overlayChildrenRef.current);\n overlayChildrenRef.current = nextChildren;\n setTransientOverlayChildren(nextChildren);\n\n if (!onOverlayChildrenChange) {\n setInternalOverlayChildren(nextChildren);\n }\n },\n [onOverlayChildrenChange]\n );\n\n const updateSnappedTextBoxRectsLocally = useCallback(\n (nextColumnWidths: Map<string, number>, nextRowHeights: Map<number, number>) => {\n const nextChildren = syncSnappedTextBoxRects(\n overlayChildrenRef.current,\n nextColumnWidths,\n nextRowHeights\n );\n\n if (nextChildren === overlayChildrenRef.current) {\n return;\n }\n\n overlayChildrenRef.current = nextChildren;\n pendingSnappedTextBoxLayoutCommitRef.current = true;\n setTransientOverlayChildren(nextChildren);\n\n if (!onOverlayChildrenChange) {\n setInternalOverlayChildren(nextChildren);\n }\n },\n [onOverlayChildrenChange]\n );\n\n const commitSnappedTextBoxRects = useCallback(\n (nextColumnWidths: Map<string, number>, nextRowHeights: Map<number, number>) => {\n const nextChildren = syncSnappedTextBoxRects(\n overlayChildrenRef.current,\n nextColumnWidths,\n nextRowHeights\n );\n\n if (nextChildren !== overlayChildrenRef.current) {\n commitOverlayChildren(nextChildren);\n pendingSnappedTextBoxLayoutCommitRef.current = false;\n return;\n }\n\n if (pendingSnappedTextBoxLayoutCommitRef.current) {\n commitOverlayChildren(overlayChildrenRef.current);\n pendingSnappedTextBoxLayoutCommitRef.current = false;\n }\n },\n [commitOverlayChildren]\n );\n\n const updateColumnWidthsLocally = useCallback(\n (updater: (columnWidths: Map<string, number>) => Map<string, number>) => {\n const nextColumnWidths = updater(columnWidthsRef.current);\n columnWidthsRef.current = nextColumnWidths;\n setTransientColumnWidths(nextColumnWidths);\n updateSnappedTextBoxRectsLocally(nextColumnWidths, rowHeightsRef.current);\n\n if (!onColumnWidthsChange) {\n setInternalColumnWidths(nextColumnWidths);\n }\n },\n [onColumnWidthsChange, updateSnappedTextBoxRectsLocally]\n );\n\n const commitColumnWidths = useCallback(\n (nextColumnWidths: Map<string, number>) => {\n columnWidthsRef.current = nextColumnWidths;\n\n if (onColumnWidthsChange) {\n onColumnWidthsChange(columnWidthsMapToRecord(nextColumnWidths));\n setTransientColumnWidths(nextColumnWidths);\n commitSnappedTextBoxRects(nextColumnWidths, rowHeightsRef.current);\n return;\n }\n\n setInternalColumnWidths(nextColumnWidths);\n setTransientColumnWidths(null);\n commitSnappedTextBoxRects(nextColumnWidths, rowHeightsRef.current);\n },\n [commitSnappedTextBoxRects, onColumnWidthsChange]\n );\n\n const updateRowHeightsLocally = useCallback(\n (updater: (rowHeights: Map<number, number>) => Map<number, number>) => {\n const nextRowHeights = updater(rowHeightsRef.current);\n rowHeightsRef.current = nextRowHeights;\n setTransientRowHeights(nextRowHeights);\n updateSnappedTextBoxRectsLocally(columnWidthsRef.current, nextRowHeights);\n\n if (!onRowHeightsChange) {\n setInternalRowHeights(nextRowHeights);\n }\n },\n [onRowHeightsChange, updateSnappedTextBoxRectsLocally]\n );\n\n const commitRowHeights = useCallback(\n (nextRowHeights: Map<number, number>) => {\n rowHeightsRef.current = nextRowHeights;\n\n if (onRowHeightsChange) {\n onRowHeightsChange(rowHeightsMapToRecord(nextRowHeights));\n setTransientRowHeights(nextRowHeights);\n commitSnappedTextBoxRects(columnWidthsRef.current, nextRowHeights);\n return;\n }\n\n setInternalRowHeights(nextRowHeights);\n setTransientRowHeights(null);\n commitSnappedTextBoxRects(columnWidthsRef.current, nextRowHeights);\n },\n [commitSnappedTextBoxRects, onRowHeightsChange]\n );\n\n // Handle column resize\n const handleColumnResizeStart = useCallback(\n (e: React.MouseEvent, col: string) => {\n e.preventDefault();\n e.stopPropagation();\n setIsResizingColumn(col);\n setResizeStartX(e.clientX);\n setResizeStartSize(getColumnWidth(col));\n },\n [getColumnWidth]\n );\n\n // Handle row resize\n const handleRowResizeStart = useCallback(\n (e: React.MouseEvent, row: number) => {\n e.preventDefault();\n e.stopPropagation();\n setIsResizingRow(row);\n setResizeStartY(e.clientY);\n setResizeStartSize(getRowHeight(row));\n },\n [getRowHeight]\n );\n\n // Handle resize move\n const handleResizeMove = useCallback(\n (e: MouseEvent) => {\n if (isResizingColumn) {\n const delta = e.clientX - resizeStartX;\n const newWidth = Math.max(20, resizeStartSize + delta / viewport.zoom);\n updateColumnWidthsLocally((prev) => new Map(prev).set(isResizingColumn, newWidth));\n } else if (isResizingRow !== null) {\n const delta = e.clientY - resizeStartY;\n const newHeight = Math.max(20, resizeStartSize + delta / viewport.zoom);\n updateRowHeightsLocally((prev) => new Map(prev).set(isResizingRow, newHeight));\n }\n },\n [\n isResizingColumn,\n isResizingRow,\n resizeStartX,\n resizeStartY,\n resizeStartSize,\n updateColumnWidthsLocally,\n updateRowHeightsLocally,\n viewport.zoom\n ]\n );\n\n // Handle resize end\n const handleResizeEnd = useCallback(() => {\n if (isResizingColumn) {\n commitColumnWidths(columnWidthsRef.current);\n }\n if (isResizingRow !== null) {\n commitRowHeights(rowHeightsRef.current);\n }\n setIsResizingColumn(null);\n setIsResizingRow(null);\n }, [commitColumnWidths, commitRowHeights, isResizingColumn, isResizingRow]);\n\n // Handle resize double click (auto-fit)\n const handleColumnResizeDoubleClick = useCallback(\n (e: React.MouseEvent, col: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n const { viewport, gridDims, height, cellData } = effectsRef.current;\n\n // Measure all visible cells in the column\n let maxWidth = 50; // Minimum width\n\n // Check visible cells\n const startRow = Math.max(0, Math.floor(viewport.scrollY / gridDims.cellHeight));\n const endRow = Math.ceil((viewport.scrollY + height) / gridDims.cellHeight) + 1;\n\n for (let row = startRow; row <= endRow; row++) {\n const cellKey = `${col}${getRowNumber(row)}`;\n const content = cellData.get(cellKey) ?? '';\n if (content) {\n // Estimate text width (rough approximation)\n const estimatedWidth = String(content).length * 8 + 20; // 8px per char + padding\n maxWidth = Math.max(maxWidth, estimatedWidth);\n }\n }\n\n commitColumnWidths(new Map(columnWidthsRef.current).set(col, maxWidth));\n },\n [commitColumnWidths]\n );\n\n // Handle resize double click for rows\n const handleRowResizeDoubleClick = useCallback(\n (e: React.MouseEvent, row: number) => {\n e.preventDefault();\n e.stopPropagation();\n\n // For simplicity, set to a reasonable height\n // In a real implementation, you'd measure the content\n commitRowHeights(new Map(rowHeightsRef.current).set(row, DEFAULT_CELL_HEIGHT));\n },\n [commitRowHeights]\n );\n\n const commitCurrentOverlayChildren = useCallback(() => {\n overlayInteractionDraftRectsRef.current = {};\n commitOverlayChildren(overlayChildrenRef.current);\n }, [commitOverlayChildren]);\n\n const setSelectedOverlay = useCallback(\n (childId: string | null) => {\n if (onOverlaySelect) {\n onOverlaySelect(childId);\n }\n setInternalSelectedOverlayId(childId);\n },\n [onOverlaySelect]\n );\n\n const handleOverlayClick = useCallback(\n (childId: string, e: React.MouseEvent) => {\n e.stopPropagation();\n // Only allow overlay selection if parent is selected\n if (!parentSelected) {\n return;\n }\n // Blur the SelectionManager when selecting an overlay\n selectionManager.blur();\n setSelectedOverlay(childId);\n },\n [setSelectedOverlay, selectionManager, parentSelected]\n );\n\n const handleOverlayBackgroundClick = useCallback(() => {\n setSelectedOverlay(null);\n }, [setSelectedOverlay]);\n\n const getOverlayInteractionDraftRect = useCallback((child: SpreadsheetChild): CellSnapRect => {\n const currentDraft = overlayInteractionDraftRectsRef.current[child.id];\n if (currentDraft) {\n return currentDraft;\n }\n\n const draft = {\n x: child.x,\n y: child.y,\n width: child.width,\n height: child.height\n };\n overlayInteractionDraftRectsRef.current[child.id] = draft;\n return draft;\n }, []);\n\n const handleOverlayMove = useCallback(\n (childId: string, deltaX: number, deltaY: number) => {\n updateOverlayChildrenLocally((children) =>\n children.map((child) => {\n if (child.id !== childId) return child;\n\n if (isSnappedTextBox(child)) {\n const draft = getOverlayInteractionDraftRect(child);\n draft.x = Math.max(0, draft.x + deltaX);\n draft.y = Math.max(0, draft.y + deltaY);\n\n const baseAnchor =\n child.cellAnchor ??\n getCellSnapAnchorFromRect(child, columnWidthsRef.current, rowHeightsRef.current);\n const nextAnchor = moveCellSnapAnchorToNearestOrigin(\n baseAnchor,\n draft,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n\n return applyCellSnapAnchorToTextBox(\n child,\n nextAnchor,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n }\n\n // Constrain overlay position to prevent overlapping with headers\n const newX = Math.max(0, child.x + deltaX);\n const newY = Math.max(0, child.y + deltaY);\n return { ...child, x: newX, y: newY };\n })\n );\n },\n [getOverlayInteractionDraftRect, updateOverlayChildrenLocally]\n );\n\n const handleOverlayResize = useCallback(\n (childId: string, deltaWidth: number, deltaHeight: number, shiftKey: boolean, handle: string) => {\n updateOverlayChildrenLocally((children) =>\n children.map((child) => {\n if (child.id !== childId) return child;\n\n if (isSnappedTextBox(child) && isCellSnapResizeHandle(handle)) {\n const draft = getOverlayInteractionDraftRect(child);\n let nextX = draft.x;\n let nextY = draft.y;\n let nextWidth = draft.width;\n let nextHeight = draft.height;\n\n if (handle === 'left' || handle === 'top-left' || handle === 'bottom-left') {\n nextX = draft.x - deltaWidth;\n nextWidth = draft.width + deltaWidth;\n }\n if (handle === 'right' || handle === 'top-right' || handle === 'bottom-right') {\n nextWidth = draft.width + deltaWidth;\n }\n if (handle === 'top' || handle === 'top-left' || handle === 'top-right') {\n nextY = draft.y - deltaHeight;\n nextHeight = draft.height + deltaHeight;\n }\n if (handle === 'bottom' || handle === 'bottom-left' || handle === 'bottom-right') {\n nextHeight = draft.height + deltaHeight;\n }\n\n if (nextX < 0) {\n nextWidth += nextX;\n nextX = 0;\n }\n if (nextY < 0) {\n nextHeight += nextY;\n nextY = 0;\n }\n\n draft.x = nextX;\n draft.y = nextY;\n draft.width = Math.max(1, nextWidth);\n draft.height = Math.max(1, nextHeight);\n\n const baseAnchor =\n child.cellAnchor ??\n getCellSnapAnchorFromRect(child, columnWidthsRef.current, rowHeightsRef.current);\n const nextAnchor = resizeCellSnapAnchorToNearestEdges(\n baseAnchor,\n draft,\n handle,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n\n return applyCellSnapAnchorToTextBox(\n child,\n nextAnchor,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n }\n\n if (shiftKey && (deltaWidth !== 0 || deltaHeight !== 0)) {\n // Locked aspect ratio mode - adjust zoom\n const currentZoom = child.zoom || 1;\n const currentVisualWidth = child.width;\n const currentVisualHeight = child.height;\n\n const widthScale = deltaWidth !== 0 ? 1 + deltaWidth / currentVisualWidth : 1;\n const heightScale = deltaHeight !== 0 ? 1 + deltaHeight / currentVisualHeight : 1;\n\n let scaleDelta: number;\n if (handle.includes('-')) {\n scaleDelta = Math.abs(widthScale - 1) > Math.abs(heightScale - 1) ? widthScale : heightScale;\n } else if (handle === 'left' || handle === 'right') {\n scaleDelta = widthScale;\n } else if (handle === 'top' || handle === 'bottom') {\n scaleDelta = heightScale;\n } else {\n scaleDelta = Math.max(widthScale, heightScale);\n }\n\n const newZoom = currentZoom * scaleDelta;\n const newWidth = child.width * scaleDelta;\n const newHeight = child.height * scaleDelta;\n const deltaX = newWidth - child.width;\n const deltaY = newHeight - child.height;\n\n let newX = child.x;\n let newY = child.y;\n if (handle === 'left' || handle === 'bottom-left') {\n newX = child.x - deltaX;\n }\n if (handle === 'top' || handle === 'top-right') {\n newY = child.y - deltaY;\n }\n if (handle === 'top-left') {\n newX = child.x - deltaX;\n newY = child.y - deltaY;\n }\n\n // Constrain overlay position to prevent overlapping with headers\n newX = Math.max(0, newX);\n newY = Math.max(0, newY);\n\n return {\n ...child,\n x: newX,\n y: newY,\n width: newWidth,\n height: newHeight,\n zoom: newZoom\n };\n } else {\n // Normal resize mode\n let newX = child.x;\n let newY = child.y;\n if (handle === 'left' || handle === 'bottom-left') {\n newX = child.x - deltaWidth;\n }\n if (handle === 'top' || handle === 'top-right') {\n newY = child.y - deltaHeight;\n }\n if (handle === 'top-left') {\n newX = child.x - deltaWidth;\n newY = child.y - deltaHeight;\n }\n\n // Constrain overlay position to prevent overlapping with headers\n newX = Math.max(0, newX);\n newY = Math.max(0, newY);\n\n return {\n ...child,\n x: newX,\n y: newY,\n width: child.width + deltaWidth,\n height: child.height + deltaHeight,\n zoom: child.zoom\n };\n }\n })\n );\n },\n [getOverlayInteractionDraftRect, updateOverlayChildrenLocally]\n );\n\n const handleOverlaySnapToCellsToggle = useCallback(\n (childId: string, enabled: boolean) => {\n overlayInteractionDraftRectsRef.current = {};\n commitOverlayChildren(\n overlayChildrenRef.current.map((child) => {\n if (child.id !== childId || child.component !== 'RichText') {\n return child;\n }\n\n if (!enabled) {\n return {\n ...child,\n snapToCells: false,\n cellAnchor: undefined\n };\n }\n\n const anchor = getCellSnapAnchorFromRect(child, columnWidthsRef.current, rowHeightsRef.current);\n\n return applyCellSnapAnchorToTextBox(\n child,\n anchor,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n })\n );\n },\n [commitOverlayChildren]\n );\n\n const handleOverlayReset = useCallback(\n (childId: string) => {\n commitOverlayChildren(\n overlayChildrenRef.current.map((child) => {\n if (child.id !== childId || !child.initial) return child;\n return {\n ...child,\n x: child.initial.x,\n y: child.initial.y,\n width: child.initial.width,\n height: child.initial.height,\n zoom: child.initial.zoom || 1,\n minimized: false\n };\n })\n );\n },\n [commitOverlayChildren]\n );\n\n const handleOverlayMinimize = useCallback(\n (childId: string) => {\n commitOverlayChildren(\n overlayChildrenRef.current.map((child) =>\n child.id === childId && child.component !== 'RichText'\n ? { ...child, minimized: !child.minimized }\n : child\n )\n );\n },\n [commitOverlayChildren]\n );\n\n const handleOverlayClose = useCallback(\n (childId: string) => {\n commitOverlayChildren(overlayChildrenRef.current.filter((child) => child.id !== childId));\n },\n [commitOverlayChildren]\n );\n\n useEffect(() => {\n const handleOverlayDeleteKeyDown = (event: KeyboardEvent) => {\n if (!selectedOverlayId || (event.key !== 'Backspace' && event.key !== 'Delete')) {\n return;\n }\n\n if (isEditableKeyboardTarget(event.target)) {\n return;\n }\n\n const selectedOverlay = overlayChildrenRef.current.find((child) => child.id === selectedOverlayId);\n if (selectedOverlay?.component !== 'RichText') {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n setSelectedOverlay(null);\n handleOverlayClose(selectedOverlayId);\n };\n\n document.addEventListener('keydown', handleOverlayDeleteKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleOverlayDeleteKeyDown);\n };\n }, [handleOverlayClose, selectedOverlayId, setSelectedOverlay]);\n\n // Effects\n useEffect(() => {\n drawGrid();\n }, [drawGrid]);\n\n // Handle resize mouse events\n useEffect(() => {\n if (isResizingColumn || isResizingRow !== null) {\n document.addEventListener('mousemove', handleResizeMove);\n document.addEventListener('mouseup', handleResizeEnd);\n document.body.style.cursor = isResizingColumn ? 'col-resize' : 'row-resize';\n\n return () => {\n document.removeEventListener('mousemove', handleResizeMove);\n document.removeEventListener('mouseup', handleResizeEnd);\n document.body.style.cursor = '';\n };\n }\n }, [isResizingColumn, isResizingRow, handleResizeMove, handleResizeEnd]);\n\n // Handle editing state changes and additional keypress events\n useEffect(() => {\n const editingCleanup = selectionManager.observeStateChange(\n (state) => state.isEditing.type,\n (type) => {\n if (type !== 'none') {\n // When editing, set up additional event handlers for paste, etc.\n const handleEditingKeydown = (e: KeyboardEvent) => {\n // Handle paste during editing\n if ((e.metaKey || e.ctrlKey) && e.key === 'v') {\n // Let the browser handle paste into the input naturally\n return;\n }\n\n // Handle delete/backspace during editing\n if (e.key === 'Delete' || e.key === 'Backspace') {\n // Let the browser handle these naturally in the input\n return;\n }\n };\n\n window.addEventListener('keydown', handleEditingKeydown);\n return () => {\n window.removeEventListener('keydown', handleEditingKeydown);\n };\n }\n },\n true\n );\n\n return editingCleanup;\n }, [selectionManager]);\n\n // Listen to SelectionManager focus changes - deselect overlays when cells gain focus\n React.useEffect(() => {\n return selectionManager.observeStateChange(\n (state) => state.hasFocus,\n (hasFocus) => {\n if (hasFocus && selectedOverlayId) {\n // SelectionManager gained focus, deselect overlay\n setSelectedOverlay(null);\n }\n }\n );\n }, [selectionManager, selectedOverlayId, setSelectedOverlay]);\n\n // Get visible column headers (just the column info, no positions)\n const getVisibleColumnHeaders = useCallback(() => {\n if (!width) return [];\n\n const headers: { col: string; colIndex: number }[] = [];\n let x = 0;\n let startCol = 0;\n\n // Find the first visible column\n while (\n x < viewport.scrollX &&\n (finiteColumnCount === undefined || startCol < finiteColumnCount)\n ) {\n const col = indexToColumn(startCol);\n const colWidth = getColumnWidth(col) * viewport.zoom;\n if (x + colWidth > viewport.scrollX) {\n break;\n }\n x += colWidth;\n startCol++;\n }\n\n // Collect visible columns\n while (\n x < viewport.scrollX + width &&\n (finiteColumnCount === undefined || startCol < finiteColumnCount)\n ) {\n const col = indexToColumn(startCol);\n const colWidth = getColumnWidth(col) * viewport.zoom;\n headers.push({\n col,\n colIndex: startCol\n });\n x += colWidth;\n startCol++;\n }\n\n return headers;\n }, [finiteColumnCount, width, viewport, getColumnWidth]);\n\n // Get visible row headers (just the row info, no positions)\n const getVisibleRowHeaders = useCallback(() => {\n if (!height) return [];\n\n const headers: { row: number; rowIndex: number }[] = [];\n let y = 0;\n let rowNum = 1;\n\n // Find the first visible row\n while (\n y < viewport.scrollY &&\n (finiteRowCount === undefined || rowNum <= finiteRowCount)\n ) {\n const rowHeight = getRowHeight(rowNum) * viewport.zoom;\n if (y + rowHeight > viewport.scrollY) {\n break;\n }\n y += rowHeight;\n rowNum++;\n }\n\n // Collect visible rows\n while (\n y < viewport.scrollY + height &&\n (finiteRowCount === undefined || rowNum <= finiteRowCount)\n ) {\n const rowHeight = getRowHeight(rowNum) * viewport.zoom;\n headers.push({\n row: rowNum,\n rowIndex: rowNum - 1\n });\n y += rowHeight;\n rowNum++;\n }\n\n return headers;\n }, [finiteRowCount, height, viewport, getRowHeight]);\n\n // Get visible overlays with culling and persistent tracking\n const { visibleOverlays, overlaysToRender } = useMemo(() => {\n if (!width || !height || !overlayChildren) {\n return { visibleOverlays: [], overlaysToRender: [] };\n }\n\n const visible: SpreadsheetChild[] = [];\n const toRender: SpreadsheetChild[] = [];\n const newMountedPersistentIds = new Set(mountedPersistentOverlayIds);\n\n overlayChildren.forEach((child) => {\n // Calculate child's bounds in screen coordinates\n const childLeft = child.x * viewport.zoom - viewport.scrollX + gridDims.headerWidth;\n const childTop = child.y * viewport.zoom - viewport.scrollY + gridDims.headerHeight;\n const childRight = childLeft + child.width * viewport.zoom;\n const childBottom = childTop + child.height * viewport.zoom;\n\n // Calculate viewport bounds with margin\n const margin = 100;\n const viewportLeft = gridDims.headerWidth - margin;\n const viewportTop = gridDims.headerHeight - margin;\n const viewportRight = width + margin;\n const viewportBottom = height + margin;\n\n // Check if overlay is within viewport\n const isVisible =\n childRight >= viewportLeft &&\n childLeft <= viewportRight &&\n childBottom >= viewportTop &&\n childTop <= viewportBottom;\n\n if (isVisible) {\n visible.push(child);\n toRender.push(child);\n if (child.persistent) {\n newMountedPersistentIds.add(child.id);\n }\n } else if (child.persistent && mountedPersistentOverlayIds.has(child.id)) {\n // Persistent child that was previously mounted but is now invisible\n toRender.push(child);\n }\n });\n\n // Update mounted persistent children if changed\n if (\n newMountedPersistentIds.size !== mountedPersistentOverlayIds.size ||\n [...newMountedPersistentIds].some((id) => !mountedPersistentOverlayIds.has(id))\n ) {\n setMountedPersistentOverlayIds(newMountedPersistentIds);\n }\n\n return { visibleOverlays: visible, overlaysToRender: toRender };\n }, [\n overlayChildren,\n viewport.zoom,\n viewport.scrollX,\n viewport.scrollY,\n width,\n height,\n gridDims.headerWidth,\n gridDims.headerHeight,\n mountedPersistentOverlayIds\n ]);\n\n // Render visible cells\n const visibleCells = React.useMemo(() => getVisibleCells(), [getVisibleCells]);\n const visibleColumnHeaders = React.useMemo(() => getVisibleColumnHeaders(), [getVisibleColumnHeaders]);\n const visibleRowHeaders = React.useMemo(() => getVisibleRowHeaders(), [getVisibleRowHeaders]);\n\n const hasFocus = useSelectionManager(selectionManager, () => selectionManager.hasFocus);\n const referenceSelection = useSelectionManager(\n selectionManager,\n () => selectionManager.referenceSelection\n );\n const referenceSelectionRect = useMemo(() => {\n if (referenceSelection.type === 'none') return undefined;\n if (finiteRowCount === 0 || finiteColumnCount === 0) return undefined;\n\n const range = referenceSelection.range;\n const lastVisibleRow = visibleCells.reduce(\n (maximum, cell) => Math.max(maximum, cell.row - 1),\n range.start.row\n );\n const lastVisibleCol = visibleCells.reduce(\n (maximum, cell) => Math.max(maximum, columnToIndex(cell.col)),\n range.start.col\n );\n const rawEndRow =\n range.end.row.type === 'number'\n ? range.end.row.value\n : finiteRowCount === undefined\n ? lastVisibleRow\n : finiteRowCount - 1;\n const rawEndCol =\n range.end.col.type === 'number'\n ? range.end.col.value\n : finiteColumnCount === undefined\n ? lastVisibleCol\n : finiteColumnCount - 1;\n const maxRow = finiteRowCount === undefined ? Infinity : finiteRowCount - 1;\n const maxCol = finiteColumnCount === undefined ? Infinity : finiteColumnCount - 1;\n const startRow = Math.min(Math.max(0, Math.min(range.start.row, rawEndRow)), maxRow);\n const endRow = Math.min(Math.max(0, Math.max(range.start.row, rawEndRow)), maxRow);\n const startCol = Math.min(Math.max(0, Math.min(range.start.col, rawEndCol)), maxCol);\n const endCol = Math.min(Math.max(0, Math.max(range.start.col, rawEndCol)), maxCol);\n const rect = getRectFromCellSnapAnchor(\n {\n startCol,\n startRow,\n endCol: endCol + 1,\n endRow: endRow + 1\n },\n columnWidths,\n rowHeights\n );\n\n return {\n left: HEADER_WIDTH + rect.x,\n top: HEADER_HEIGHT + rect.y,\n width: rect.width,\n height: rect.height\n };\n }, [\n columnWidths,\n finiteColumnCount,\n finiteRowCount,\n referenceSelection,\n rowHeights,\n visibleCells\n ]);\n\n // Add wheel handler to container\n React.useEffect(() => {\n if (!containerDivRef || !parentSelected) {\n return;\n }\n containerDivRef.addEventListener('wheel', handleWheel, {\n passive: false\n });\n return () => {\n containerDivRef.removeEventListener('wheel', handleWheel);\n };\n }, [containerDivRef, handleWheel, parentSelected]);\n\n // Forward ref\n useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n selectionManager.focus();\n },\n blur: () => {\n selectionManager.blur();\n },\n scrollToCell,\n scrollToRange\n }),\n [scrollToCell, scrollToRange, selectionManager]\n );\n\n return (\n <div\n className={cn('rsp-root', className)}\n // A stylesheet cannot read an ancestor's `color-scheme`, so the resolved\n // value is reflected here to drive the light/dark token switch.\n data-rsp-scheme={colorScheme}\n style={{ position: 'relative', ...style }}\n {...containerProps}\n >\n <div style={{ position: 'absolute', inset: 0 }} ref={containerRef}>\n {Boolean(width && height) && (\n <div\n ref={setContainerDivRef}\n className={cn('rsp-container', { 'rsp-focused': hasFocus })}\n data-testid=\"spreadsheet-container\"\n style={{\n width,\n height\n }}\n tabIndex={0}\n >\n {/* Resolves the themed gridline color for the canvas. Kept in the\n DOM (not `display: none`) so the value stays computable. */}\n <span\n ref={gridLineProbeRef}\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n width: 0,\n height: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n color: 'var(--_rsp-gridline)'\n }}\n />\n\n <canvas\n ref={canvasRef}\n className=\"rsp-canvas\"\n data-testid=\"spreadsheet-canvas\"\n style={{ width, height }}\n />\n\n {/* Column headers */}\n <div\n className=\"rsp-column-headers\"\n data-testid=\"spreadsheet-column-headers\"\n style={{\n left: gridDims.headerWidth,\n right: 0,\n height: gridDims.headerHeight,\n zIndex: 20\n }}\n >\n <div\n style={{\n transform: `translateX(${-viewport.scrollX}px) scale(${viewport.zoom})`,\n transformOrigin: '0 0'\n }}\n >\n {visibleColumnHeaders.map(({ col, colIndex }) => {\n return (\n <HeaderComponent\n key={col}\n index={colIndex}\n type=\"col\"\n selectionManager={selectionManager}\n getColumnWidth={getColumnWidth}\n getRowHeight={getRowHeight}\n handleColumnResizeStart={handleColumnResizeStart}\n handleColumnResizeDoubleClick={handleColumnResizeDoubleClick}\n handleRowResizeStart={handleRowResizeStart}\n handleRowResizeDoubleClick={handleRowResizeDoubleClick}\n />\n );\n })}\n </div>\n </div>\n\n {/* Row headers */}\n <div\n className=\"rsp-row-headers\"\n data-testid=\"spreadsheet-row-headers\"\n style={{\n top: gridDims.headerHeight,\n bottom: 0,\n width: gridDims.headerWidth,\n zIndex: 20\n }}\n >\n <div\n style={{\n transform: `translateY(${-viewport.scrollY}px) scale(${viewport.zoom})`,\n transformOrigin: '0 0'\n }}\n >\n {visibleRowHeaders.map(({ row, rowIndex }) => {\n return (\n <HeaderComponent\n key={row}\n index={rowIndex}\n type=\"row\"\n selectionManager={selectionManager}\n getColumnWidth={getColumnWidth}\n getRowHeight={getRowHeight}\n handleColumnResizeStart={handleColumnResizeStart}\n handleColumnResizeDoubleClick={handleColumnResizeDoubleClick}\n handleRowResizeStart={handleRowResizeStart}\n handleRowResizeDoubleClick={handleRowResizeDoubleClick}\n />\n );\n })}\n </div>\n </div>\n\n {/* Corner header */}\n <div\n className=\"rsp-corner-header\"\n data-testid=\"spreadsheet-corner-header\"\n style={{\n width: gridDims.headerWidth,\n height: gridDims.headerHeight,\n zIndex: 40\n }}\n />\n\n <div\n className=\"rsp-cells\"\n data-testid=\"spreadsheet-cells\"\n style={{\n transform: `translate(${-viewport.scrollX}px, ${-viewport.scrollY}px) scale(${viewport.zoom})`,\n transformOrigin: '0 0'\n }}\n >\n {visibleCells.map((cell) => (\n <CellComponent\n key={`${cell.col}${cell.row}`}\n value={cellData.get(`${cell.col}${cell.row}`) ?? ''}\n row={cell.row}\n col={cell.col}\n selectionManager={selectionManager}\n cellToPixelBase={cellToPixelBase}\n getColumnWidth={getColumnWidth}\n getRowHeight={getRowHeight}\n customCellStyle={customCellStyle}\n customCellRenderer={customCellRenderer}\n inputValue={cellData.get(`${cell.col}${cell.row}`) ?? ''}\n editInputVersion={\n retryingEdit?.rowIndex === cell.row - 1 &&\n retryingEdit?.colIndex === columnToIndex(cell.col)\n ? retryingEdit.version\n : 0\n }\n width={width}\n height={height}\n />\n ))}\n {referenceSelectionRect && referenceSelection.type !== 'none' && (\n <div\n aria-hidden=\"true\"\n className={cn(\n 'rsp-reference-selection',\n `rsp-reference-selection-${referenceSelection.type}`\n )}\n data-testid=\"spreadsheet-reference-selection\"\n data-reference-id={referenceSelection.id}\n data-reference-phase={referenceSelection.type}\n style={referenceSelectionRect}\n />\n )}\n </div>\n\n {/* Overlay components layer */}\n {components && overlayChildren && overlayChildren.length > 0 && (\n <div\n ref={overlayContainerRef}\n className=\"rsp-overlays\"\n data-testid=\"spreadsheet-overlays\"\n onClick={handleOverlayBackgroundClick}\n >\n {overlaysToRender.map((child) => {\n const isChildVisible = visibleOverlays.includes(child);\n const isSelected = selectedOverlayId === child.id;\n const childZoom = child.zoom || 1;\n const isTextBox = child.component === 'RichText';\n const isMinimized = Boolean(child.minimized && !isTextBox);\n\n return (\n <div\n key={child.id}\n data-rsp-overlay={child.id}\n style={{\n position: 'absolute',\n width: child.width,\n height: isMinimized ? 0 : child.height,\n transform: `translate(${\n child.x * viewport.zoom - viewport.scrollX + gridDims.headerWidth\n }px, ${\n child.y * viewport.zoom - viewport.scrollY + gridDims.headerHeight\n }px) scale(${viewport.zoom})`,\n transformOrigin: '0 0',\n display: isChildVisible ? 'block' : 'none',\n pointerEvents: 'auto',\n zIndex: isSelected ? 50 : 5\n }}\n onClick={(e) => handleOverlayClick(child.id, e)}\n >\n <Frame\n child={child}\n isSelected={isSelected}\n zoom={viewport.zoom}\n viewport$={viewportStreamRef.current}\n onMove={(dx, dy) => handleOverlayMove(child.id, dx, dy)}\n onResize={(dw, dh, shift, handle) =>\n handleOverlayResize(child.id, dw, dh, shift, handle)\n }\n onSnapToCellsToggle={(enabled) => handleOverlaySnapToCellsToggle(child.id, enabled)}\n onReset={() => handleOverlayReset(child.id)}\n onMinimize={() => handleOverlayMinimize(child.id)}\n onClose={() => handleOverlayClose(child.id)}\n onInteractionEnd={commitCurrentOverlayChildren}\n />\n {!isMinimized && (\n <div\n style={{\n transform: childZoom !== 1 ? `scale(${childZoom})` : undefined,\n transformOrigin: '0 0',\n width: child.width / childZoom,\n height: child.height / childZoom,\n position: 'absolute',\n overflow: 'hidden',\n top: 0,\n left: 0\n }}\n >\n {components[child.component]?.(child, {\n isSelected,\n isMinimized: !!child.minimized\n })}\n </div>\n )}\n </div>\n );\n })}\n\n {/* Placeholder for overlay placement */}\n {overlayPlaceholder && placeholderPos && (\n <div\n className=\"rsp-overlay-placeholder\"\n style={{\n width: overlayPlaceholder.width,\n height: overlayPlaceholder.height,\n transform: `translate(${\n placeholderPos.x * viewport.zoom - viewport.scrollX + gridDims.headerWidth\n }px, ${\n placeholderPos.y * viewport.zoom - viewport.scrollY + gridDims.headerHeight\n }px) scale(${viewport.zoom})`,\n transformOrigin: '0 0'\n }}\n >\n <div className=\"rsp-overlay-placeholder-label\">\n {overlayPlaceholder.title}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nSpreadsheet.displayName = 'Spreadsheet';\n",
5
+ "import {\n type Format,\n type MaybeInfNumber,\n type NavigationRequest,\n SelectionManager,\n type SelectionNavigationModel,\n type SelectionManagerState,\n type SMArea,\n type SMCell,\n useInitializeSelectionManager,\n useSelectionManager\n} from '@ricsam/selection-manager';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode\n} from 'react';\nimport { useResizeObserver } from '../utils/use-resize-observer';\nimport { useColorScheme } from '../utils/use-color-scheme';\nimport { getContrastingTextColor } from '../utils/contrast-text';\nimport { cn } from '../utils/cn';\nimport { DEFAULT_CELL_HEIGHT, DEFAULT_CELL_WIDTH, HEADER_HEIGHT, HEADER_WIDTH } from './constants';\n\nimport type {\n CellRenderContext,\n SerializedCellValue,\n SpreadsheetColumnWidths,\n SpreadsheetRowHeights\n} from '../types';\nimport { type CellDataUpdate, ClipboardUtils } from '../clipboard/clipboard-manager';\nimport { Frame } from '../grid/frame';\nimport { ViewportStream } from '../grid/types';\nimport { columnToIndex, getRowNumber, indexToColumn, parseCellReference, rowToLetter } from './utils';\nimport { CONTROLLED_ZOOM_FACTOR, MAX_ZOOM, MIN_ZOOM, ZOOM_FACTOR } from './zoom-constants';\nimport {\n getColumnEdgePosition,\n getCellSnapAnchorFromRect,\n getRectFromCellSnapAnchor,\n getRowEdgePosition,\n moveCellSnapAnchorToNearestOrigin,\n normalizeCellSnapAnchor,\n resizeCellSnapAnchorToNearestEdges,\n type CellSnapAnchor,\n type CellSnapRect,\n type CellSnapResizeHandle\n} from './snapping';\n\nconst SPREADSHEET_OVERLAY_SELECTOR = '[data-rsp-overlay]';\n\n/**\n * Resolves the grid line color used for canvas painting.\n *\n * Canvas 2D cannot evaluate CSS, so the themed `--rsp-gridline` value has to be\n * resolved to a concrete color first. Reading the custom property directly is\n * not enough: custom properties compute to an unresolved token sequence, so a\n * `light-dark()` value comes back verbatim and is not paintable.\n *\n * Instead we read a real, inherited property (`color`) from a hidden probe\n * element that declares `color: var(--_rsp-gridline)`. The browser resolves\n * `light-dark()` against the probe's inherited `color-scheme`, which yields a\n * paintable `rgb(...)` string that always matches what the DOM is showing.\n */\nconst resolveGridLineColor = (\n probe: HTMLElement | null,\n colorScheme: 'light' | 'dark'\n): string => {\n const fallback = colorScheme === 'dark' ? '#232c3d' : '#e8ebf1';\n\n if (!probe || typeof getComputedStyle !== 'function') {\n return fallback;\n }\n\n const resolved = getComputedStyle(probe).color?.trim();\n\n // A fully transparent result means the probe never received a usable value.\n if (!resolved || resolved.includes('light-dark(') || resolved === 'rgba(0, 0, 0, 0)') {\n return fallback;\n }\n\n return resolved;\n};\n\n/**\n * Keeps consumer-supplied cell fills readable in both color schemes.\n *\n * A custom `backgroundColor` is normally a literal from the document model and\n * has no dark-mode variant, while the grid's default ink follows the active\n * scheme. Pairing a light literal fill with the dark theme's near-white text\n * produces unreadable cells, so when the consumer set a background but no\n * explicit text color we derive a readable one from that background.\n */\nconst withReadableTextColor = (\n style: React.CSSProperties | undefined\n): React.CSSProperties | undefined => {\n if (!style?.backgroundColor || style.color) return style;\n\n const background = style.backgroundColor;\n if (typeof background !== 'string') return style;\n\n const color = getContrastingTextColor(background);\n if (!color) return style;\n\n return { ...style, color };\n};\n\nconst hasBorderStyle = (style?: React.CSSProperties): boolean =>\n Boolean(\n style?.borderColor ||\n style?.borderTopColor ||\n style?.borderRightColor ||\n style?.borderBottomColor ||\n style?.borderLeftColor\n );\n\nconst normalizeFiniteCount = (count: number | undefined): number | undefined => {\n if (count === undefined || count === Infinity) return undefined;\n if (!Number.isFinite(count)) return 0;\n return Math.max(0, Math.floor(count));\n};\n\nconst countToSelectionBound = (count: number | undefined): MaybeInfNumber =>\n count === undefined ? { type: 'infinity' } : { type: 'number', value: count };\n\nconst alignScrollOffset = (\n current: number,\n itemStart: number,\n itemEnd: number,\n viewportSize: number,\n align: SpreadsheetScrollAlignment\n): number => {\n if (viewportSize <= 0) return current;\n if (align === 'start') return itemStart;\n if (align === 'end') return itemEnd - viewportSize;\n\n // If a range is larger than the viewport, retain an already-visible portion.\n // When it is entirely outside the viewport, reveal its nearest edge instead\n // of jumping across the range to its more distant edge.\n if (itemEnd - itemStart > viewportSize) {\n if (itemEnd <= current) return itemEnd - viewportSize;\n if (itemStart >= current + viewportSize) return itemStart;\n return current;\n }\n\n if (itemStart < current) return itemStart;\n if (itemEnd > current + viewportSize) return itemEnd - viewportSize;\n return current;\n};\n\nconst normalizeScrollRangeAxis = (\n start: number,\n end: MaybeInfNumber,\n finiteCount: number | undefined\n): { start: number; end: number } | undefined => {\n if (!Number.isFinite(start) || (end.type === 'number' && !Number.isFinite(end.value))) {\n return undefined;\n }\n\n const normalizedStart = Math.max(0, Math.floor(start));\n const normalizedEnd =\n end.type === 'infinity'\n ? finiteCount === undefined\n ? normalizedStart\n : Math.max(0, finiteCount - 1)\n : Math.max(0, Math.floor(end.value));\n const lower = Math.min(normalizedStart, normalizedEnd);\n const upper = Math.max(normalizedStart, normalizedEnd);\n\n if (finiteCount === undefined) return { start: lower, end: upper };\n if (finiteCount === 0) return undefined;\n\n const lastIndex = finiteCount - 1;\n return {\n start: Math.min(lower, lastIndex),\n end: Math.min(upper, lastIndex)\n };\n};\n\nconst hasCellData = (value: SerializedCellValue): boolean => value !== undefined && value !== '';\n\nconst getSparseUsedRange = (\n cellData: Map<string, SerializedCellValue>,\n rowCount?: number,\n columnCount?: number\n) => {\n let minRow = Infinity;\n let maxRow = -1;\n let minCol = Infinity;\n let maxCol = -1;\n\n for (const [reference, value] of cellData) {\n if (!hasCellData(value)) continue;\n\n let rowIndex: number;\n let columnIndex: number;\n try {\n ({ rowIndex, columnIndex } = parseCellReference(reference));\n } catch {\n continue;\n }\n\n if (\n rowIndex < 0 ||\n columnIndex < 0 ||\n (rowCount !== undefined && rowIndex >= rowCount) ||\n (columnCount !== undefined && columnIndex >= columnCount)\n ) {\n continue;\n }\n\n minRow = Math.min(minRow, rowIndex);\n maxRow = Math.max(maxRow, rowIndex);\n minCol = Math.min(minCol, columnIndex);\n maxCol = Math.max(maxCol, columnIndex);\n }\n\n if (maxRow < 0 || maxCol < 0) return undefined;\n\n return {\n start: { row: minRow, col: minCol },\n end: {\n row: { type: 'number' as const, value: maxRow },\n col: { type: 'number' as const, value: maxCol }\n }\n };\n};\n\n/**\n * Excel-style sparse jump navigation along the active row or column.\n * Tables remain authoritative and are handled by SelectionManager's fallback.\n */\nconst resolveSparseNavigationTarget = (\n request: NavigationRequest,\n cellData: Map<string, SerializedCellValue>\n): SMCell | undefined => {\n if (request.kind !== 'jump' || request.table) return undefined;\n\n const isVertical = request.direction === 'up' || request.direction === 'down';\n const movingForward = request.direction === 'down' || request.direction === 'right';\n const originAxis = isVertical ? request.origin.row : request.origin.col;\n const fixedAxis = isVertical ? request.origin.col : request.origin.row;\n const occupied = new Set<number>();\n\n for (const [reference, value] of cellData) {\n if (!hasCellData(value)) continue;\n\n let rowIndex: number;\n let columnIndex: number;\n try {\n ({ rowIndex, columnIndex } = parseCellReference(reference));\n } catch {\n continue;\n }\n\n if ((isVertical ? columnIndex : rowIndex) === fixedAxis) {\n occupied.add(isVertical ? rowIndex : columnIndex);\n }\n }\n\n const step = movingForward ? 1 : -1;\n let targetAxis: number | undefined;\n\n // When the adjacent cell contains data, jump to the end of that contiguous run.\n if (occupied.has(originAxis + step)) {\n targetAxis = originAxis + step;\n while (occupied.has(targetAxis + step)) targetAxis += step;\n } else {\n // Otherwise jump across the blank region to the next populated cell.\n const candidates = [...occupied].filter((index) =>\n movingForward ? index > originAxis : index < originAxis\n );\n if (candidates.length > 0) {\n targetAxis = movingForward ? Math.min(...candidates) : Math.max(...candidates);\n }\n }\n\n if (targetAxis === undefined) return undefined;\n return isVertical\n ? { row: targetAxis, col: request.origin.col }\n : { row: request.origin.row, col: targetAxis };\n};\n\n// Cell component with callback ref for optimal performance\nconst CellComponent = React.memo(\n ({\n value,\n row,\n col,\n domId,\n selectionManager,\n cellToPixelBase,\n getColumnWidth,\n getRowHeight,\n customCellStyle,\n customCellRenderer,\n inputValue,\n editInputVersion,\n width,\n height\n }: {\n domId: string;\n selectionManager: SelectionManager;\n cellToPixelBase: (row: number, col: string) => { x: number; y: number };\n getColumnWidth: (col: string) => number;\n getRowHeight: (row: number) => number;\n customCellStyle?: (cell: CellRenderContext) => React.CSSProperties;\n customCellRenderer?: (cell: CellRenderContext) => React.ReactNode;\n width?: number;\n height?: number;\n inputValue: SerializedCellValue;\n editInputVersion: number;\n } & CellData) => {\n const cellRef = useCallback(\n (el: HTMLElement | null) => {\n if (el) {\n const rowIndex = row - 1; // Convert to 0-based\n const colIndex = columnToIndex(col);\n return selectionManager.setupCellElement(el, {\n row: rowIndex,\n col: colIndex\n });\n }\n },\n [row, col, selectionManager]\n );\n\n // Track hook state changes\n const colIndex = columnToIndex(col);\n const rowIndex = row - 1;\n const isSelected = useSelectionManager(selectionManager, () =>\n selectionManager.isSelected({ row: rowIndex, col: colIndex })\n );\n const isBeingEdited = useSelectionManager(selectionManager, () =>\n selectionManager.isEditingCell(rowIndex, colIndex)\n );\n\n const { x, y } = cellToPixelBase(row, col);\n const cellStyleCallbackData: CellRenderContext = {\n id: `${col}${row}`,\n row: getRowNumber(row),\n col,\n rowIndex: row - 1,\n colIndex: columnToIndex(col),\n value,\n isSelected: isSelected,\n isBeingEdited: isBeingEdited || false\n };\n const customStyle = withReadableTextColor(customCellStyle?.(cellStyleCallbackData));\n\n const canHaveFillHandle = useSelectionManager(selectionManager, () => {\n return selectionManager.canCellHaveFillHandle({\n row: rowIndex,\n col: colIndex\n });\n });\n\n const inputRef = useCallback(\n (el: HTMLTextAreaElement | null) => {\n if (el) {\n const rowIndex = row - 1; // Convert to 0-based\n const colIndex = columnToIndex(col);\n return selectionManager.setupInputElement(el as unknown as HTMLInputElement, {\n rowIndex,\n colIndex\n });\n }\n },\n [row, col, selectionManager]\n );\n\n return (\n <div\n ref={cellRef}\n id={domId}\n role=\"gridcell\"\n aria-rowindex={row + 1}\n aria-colindex={colIndex + 2}\n aria-selected={isSelected}\n data-cell-address={`${col}${row}`}\n className={cn('rsp-cell', {\n 'rsp-cell-multiline': typeof value === 'string' && value.includes('\\n'),\n 'rsp-cell-selected': isSelected,\n 'rsp-cell-editing': isBeingEdited,\n // Selection tinting is only applied when the consumer has not taken\n // over the background, so custom borders/fills stay visible.\n 'rsp-cell-plain': !(hasBorderStyle(customStyle) && !customStyle?.backgroundColor)\n })}\n data-testid={`spreadsheet-cell-${col}${row}`}\n style={{\n left: x,\n top: y,\n width: getColumnWidth(col) - 1,\n height: getRowHeight(row) - 1,\n ...customStyle,\n // While editing, the cell must present the plain editor surface. The\n // custom style is applied inline and would otherwise outrank the\n // stylesheet, leaving the typed text on a conditional fill.\n ...(isBeingEdited\n ? { backgroundColor: undefined, color: undefined }\n : null)\n }}\n >\n {isBeingEdited ? (\n <textarea\n key={editInputVersion}\n className=\"rsp-cell-editor\"\n aria-label={`Edit ${col}${row}`}\n data-testid={`spreadsheet-cell-input-${col}${row}`}\n ref={inputRef}\n defaultValue={inputValue?.toString() ?? ''}\n onKeyDownCapture={(event) => {\n if (event.key === 'Enter') event.preventDefault();\n }}\n style={{\n left: x + 4,\n top: y + 4,\n width,\n height\n }}\n />\n ) : customCellRenderer ? (\n customCellRenderer(cellStyleCallbackData)\n ) : (\n value\n )}\n {canHaveFillHandle && (\n <div\n className=\"rsp-fill-handle\"\n data-fill-handle={true}\n data-testid={`spreadsheet-fill-handle-${col}${row}`}\n />\n )}\n </div>\n );\n }\n);\n\nCellComponent.displayName = 'CellComponent';\n\n// Header component with callback ref for optimal performance\nconst HeaderComponent = React.memo(\n ({\n index,\n type,\n selectionManager,\n reverseHeaders,\n getColumnWidth,\n getRowHeight,\n handleColumnResizeStart,\n handleColumnResizeDoubleClick,\n handleRowResizeStart,\n handleRowResizeDoubleClick\n }: {\n index: number;\n type: 'row' | 'col';\n selectionManager: SelectionManager;\n reverseHeaders?: boolean;\n getColumnWidth: (col: string) => number;\n getRowHeight: (row: number) => number;\n handleColumnResizeStart: (e: React.MouseEvent, col: string) => void;\n handleColumnResizeDoubleClick: (e: React.MouseEvent, col: string) => void;\n handleRowResizeStart: (e: React.MouseEvent, row: number) => void;\n handleRowResizeDoubleClick: (e: React.MouseEvent, row: number) => void;\n }) => {\n const headerRef = useCallback(\n (el: HTMLElement | null) => {\n if (el) {\n return selectionManager.setupHeaderElement(el, index, type);\n }\n },\n [index, type, selectionManager]\n );\n\n // Calculate position and size based on index and type\n const { position, size } = React.useMemo(() => {\n if (type === 'col') {\n const col = indexToColumn(index);\n const width = getColumnWidth(col);\n const height = HEADER_HEIGHT;\n\n // Calculate x position\n let x = 0;\n for (let i = 0; i < index; i++) {\n const colKey = indexToColumn(i);\n x += getColumnWidth(colKey);\n }\n\n return {\n position: { x, y: 0 },\n size: { width, height }\n };\n } else {\n // row header\n const row = index + 1;\n const width = HEADER_WIDTH;\n const height = getRowHeight(row);\n\n // Calculate y position\n let y = 0;\n for (let i = 1; i <= index; i++) {\n y += getRowHeight(i);\n }\n\n return {\n position: { x: 0, y },\n size: { width, height }\n };\n }\n }, [index, type, getColumnWidth, getRowHeight]);\n\n // Check if this header is selected\n const isSelected = useSelectionManager(selectionManager, () => {\n if (type === 'col') {\n return selectionManager.isWholeColSelected(index);\n } else {\n return selectionManager.isWholeRowSelected(index);\n }\n });\n\n const content =\n type === 'col'\n ? reverseHeaders\n ? index + 1\n : indexToColumn(index)\n : reverseHeaders\n ? rowToLetter(index + 1)\n : index + 1;\n\n return (\n <div\n ref={headerRef}\n role={type === 'col' ? 'columnheader' : 'rowheader'}\n aria-colindex={type === 'col' ? index + 2 : 1}\n aria-rowindex={type === 'row' ? index + 2 : 1}\n aria-selected={isSelected}\n className={cn('rsp-header', `rsp-header-${type}`, {\n 'rsp-header-selected': isSelected\n })}\n data-testid={`spreadsheet-${type}-header-${type === 'col' ? indexToColumn(index) : index + 1}`}\n style={{\n left: position.x,\n top: position.y,\n width: size.width - 1,\n height: size.height - 1\n }}\n >\n {content}\n {type === 'col' && (\n <div\n className=\"rsp-col-resize-handle\"\n data-testid={`spreadsheet-column-resize-handle-${indexToColumn(index)}`}\n onMouseDown={(e) => handleColumnResizeStart(e, indexToColumn(index))}\n onDoubleClick={(e) => handleColumnResizeDoubleClick(e, indexToColumn(index))}\n />\n )}\n {type === 'row' && (\n <div\n className=\"rsp-row-resize-handle\"\n data-testid={`spreadsheet-row-resize-handle-${index + 1}`}\n onMouseDown={(e) => handleRowResizeStart(e, index + 1)}\n onDoubleClick={(e) => handleRowResizeDoubleClick(e, index + 1)}\n />\n )}\n </div>\n );\n }\n);\n\nHeaderComponent.displayName = 'HeaderComponent';\n\nconst isEditableKeyboardTarget = (target: EventTarget | null): boolean => {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n return Boolean(target.closest('input, textarea, select, [contenteditable=\"true\"]'));\n};\n\n// Types and interfaces\ninterface CellData {\n value: SerializedCellValue;\n /**\n * The row of the cell, e.g. 1, 2, 3, etc.\n */\n row: number;\n /**\n * The column of the cell, e.g. \"A\", \"B\", \"C\", etc.\n */\n col: string;\n}\n\n// Overlay component types (similar to Grid)\nexport interface SpreadsheetChildInitial {\n x: number;\n y: number;\n width: number;\n height: number;\n zoom?: number;\n}\n\nexport interface SpreadsheetChild {\n id: string;\n title: string;\n x: number; // pixel position relative to cell grid (before zoom/scroll applied)\n y: number;\n width: number;\n height: number;\n zoom?: number;\n snapToCells?: boolean;\n cellAnchor?: CellSnapAnchor;\n minimized?: boolean;\n initial?: SpreadsheetChildInitial;\n component: string;\n canClose?: boolean;\n persistent?: boolean;\n props?: any;\n}\n\nexport interface SpreadsheetChildState {\n isSelected: boolean;\n isMinimized: boolean;\n}\n\nexport type SpreadsheetComponent = (child: SpreadsheetChild, state: SpreadsheetChildState) => ReactNode;\n\nconst columnWidthsRecordToMap = (columnWidths?: SpreadsheetColumnWidths): Map<string, number> => {\n return new Map(\n Object.entries(columnWidths || {}).filter((entry): entry is [string, number] => {\n const width = entry[1];\n return typeof width === 'number' && Number.isFinite(width) && width > 0;\n })\n );\n};\n\nconst columnWidthsMapToRecord = (columnWidths: Map<string, number>): SpreadsheetColumnWidths => {\n const result: SpreadsheetColumnWidths = {};\n columnWidths.forEach((width, column) => {\n if (Number.isFinite(width) && width > 0) {\n result[column] = width;\n }\n });\n return result;\n};\n\nconst rowHeightsRecordToMap = (rowHeights?: SpreadsheetRowHeights): Map<number, number> => {\n const entries = Object.entries(rowHeights || {}).flatMap(([row, height]) => {\n const rowNumber = Number(row);\n if (Number.isInteger(rowNumber) && rowNumber > 0 && Number.isFinite(height) && height > 0) {\n return [[rowNumber, height] as [number, number]];\n }\n return [];\n });\n\n return new Map(entries);\n};\n\nconst rowHeightsMapToRecord = (rowHeights: Map<number, number>): SpreadsheetRowHeights => {\n const result: SpreadsheetRowHeights = {};\n rowHeights.forEach((height, row) => {\n if (Number.isInteger(row) && row > 0 && Number.isFinite(height) && height > 0) {\n result[row] = height;\n }\n });\n return result;\n};\n\nconst isSnappedTextBox = (child: SpreadsheetChild): boolean =>\n child.component === 'RichText' && Boolean(child.snapToCells);\n\nconst areCellSnapAnchorsEqual = (a: CellSnapAnchor, b: CellSnapAnchor): boolean =>\n a.startCol === b.startCol && a.startRow === b.startRow && a.endCol === b.endCol && a.endRow === b.endRow;\n\nconst applyCellSnapAnchorToTextBox = (\n child: SpreadsheetChild,\n anchor: CellSnapAnchor,\n columnWidths: Map<string, number>,\n rowHeights: Map<number, number>\n): SpreadsheetChild => {\n const normalizedAnchor = normalizeCellSnapAnchor(anchor);\n const rect = getRectFromCellSnapAnchor(normalizedAnchor, columnWidths, rowHeights);\n\n return {\n ...child,\n snapToCells: true,\n cellAnchor: normalizedAnchor,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n };\n};\n\nconst syncSnappedTextBoxRects = (\n children: SpreadsheetChild[],\n columnWidths: Map<string, number>,\n rowHeights: Map<number, number>\n): SpreadsheetChild[] => {\n let changed = false;\n\n const nextChildren = children.map((child) => {\n if (!isSnappedTextBox(child)) {\n return child;\n }\n\n const fallbackAnchor = getCellSnapAnchorFromRect(child, columnWidths, rowHeights);\n const anchor = child.cellAnchor ? normalizeCellSnapAnchor(child.cellAnchor) : fallbackAnchor;\n const rect = getRectFromCellSnapAnchor(anchor, columnWidths, rowHeights);\n const currentAnchor = child.cellAnchor ? normalizeCellSnapAnchor(child.cellAnchor) : undefined;\n const anchorChanged = !currentAnchor || !areCellSnapAnchorsEqual(currentAnchor, anchor);\n const rectChanged =\n child.x !== rect.x || child.y !== rect.y || child.width !== rect.width || child.height !== rect.height;\n\n if (!anchorChanged && !rectChanged) {\n return child;\n }\n\n changed = true;\n return {\n ...child,\n cellAnchor: anchor,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n };\n });\n\n return changed ? nextChildren : children;\n};\n\nconst isCellSnapResizeHandle = (handle: string): handle is CellSnapResizeHandle => {\n return (\n handle === 'top' ||\n handle === 'right' ||\n handle === 'bottom' ||\n handle === 'left' ||\n handle === 'top-left' ||\n handle === 'top-right' ||\n handle === 'bottom-left' ||\n handle === 'bottom-right'\n );\n};\n\nexport interface SpreadsheetProps {\n style?: React.CSSProperties;\n /** Extra class name applied to the outer `.rsp-root` element. */\n className?: string;\n containerProps?: React.HTMLAttributes<HTMLDivElement>;\n /** Accessible name of the keyboard-interactive grid (not its outer wrapper). */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n cellData?: Map<string, SerializedCellValue>;\n onCellDataChange?: (data: Map<string, SerializedCellValue>) => void;\n onCellDataChangeError?: (error: unknown) => void;\n /** Finite number of rows. Omit for an unbounded sheet. */\n rowCount?: number;\n /** Finite number of columns. Omit for an unbounded sheet. */\n columnCount?: number;\n columnWidths?: SpreadsheetColumnWidths;\n onColumnWidthsChange?: (columnWidths: SpreadsheetColumnWidths) => void;\n rowHeights?: SpreadsheetRowHeights;\n onRowHeightsChange?: (rowHeights: SpreadsheetRowHeights) => void;\n customCellStyle?: (cell: CellRenderContext) => React.CSSProperties;\n customCellRenderer?: (cell: CellRenderContext) => React.ReactNode;\n /**\n * Used for saving the value to the cell data. Most useful for parsing a pasted\n * string value to a number.\n */\n parseValue?: (\n value: string,\n cell: {\n id: string;\n row: number;\n col: string;\n rowIndex: number;\n colIndex: number;\n }\n ) => string | number;\n\n selection?: {\n initialState?: Partial<SelectionManagerState>;\n state?: SelectionManagerState;\n onStateChange?: (state: SelectionManagerState) => void;\n effects?: (selectionManager: SelectionManager) => (() => void) | void;\n formats?: Format[];\n /** Data- and table-aware keyboard navigation hooks. */\n navigation?: SelectionNavigationModel;\n };\n\n // Overlay component props\n components?: Record<string, SpreadsheetComponent>;\n overlayChildren?: SpreadsheetChild[];\n selectedOverlayId?: string | null;\n onOverlaySelect?: (childId: string | null) => void;\n onOverlayChildrenChange?: (children: SpreadsheetChild[]) => void;\n overlayPlaceholder?: {\n componentType: string;\n title: string;\n width: number;\n height: number;\n onPlaced: (x: number, y: number) => void;\n onCancel?: () => void;\n };\n /** Whether the parent component is selected (used to gate overlay selection) */\n parentSelected?: boolean;\n}\n\ninterface ViewportState {\n scrollX: number;\n scrollY: number;\n zoom: number;\n}\n\ninterface GridDimensions {\n cellWidth: number;\n cellHeight: number;\n headerWidth: number;\n headerHeight: number;\n}\n\nexport type SpreadsheetScrollAlignment = 'nearest' | 'start' | 'end';\n\nexport interface SpreadsheetScrollToCellOptions {\n align?: SpreadsheetScrollAlignment;\n}\n\nexport interface SpreadsheetScrollToRangeOptions {\n align?: SpreadsheetScrollAlignment;\n}\n\n// Ref interface for imperative methods\nexport interface SpreadsheetRef {\n focus: () => void;\n blur: () => void;\n /** Reveal a zero-based cell without changing the selection. */\n scrollToCell: (\n cell: SMCell,\n options?: SpreadsheetScrollToCellOptions\n ) => void;\n /** Reveal a zero-based range without changing the selection. */\n scrollToRange: (\n range: SMArea,\n options?: SpreadsheetScrollToRangeOptions\n ) => void;\n}\n\nclass SpreadsheetClipboardManager extends ClipboardUtils {\n constructor(\n private cellDataRef: React.RefObject<Map<string, SerializedCellValue>>,\n private selectionManager: SelectionManager\n ) {\n super();\n }\n public triggerCopy() {\n const extractedCells = this.extractCellsFromSelection(this.selectionManager, this.cellDataRef.current);\n\n if (!extractedCells) return;\n\n const { width, height, cells } = extractedCells;\n\n const exportGrid = this.createExportGrid(width, height);\n\n cells.forEach(({ relative, value }) => {\n const row = exportGrid[relative.rowIndex];\n if (!row) return;\n row[relative.columnIndex] = value === undefined ? '' : String(value);\n });\n\n this.writeToOsClipboard(exportGrid);\n }\n public triggerPaste(updates: CellDataUpdate[]) {\n this.selectionManager.saveCellValues(updates);\n }\n}\n\n// Main component\nexport const Spreadsheet = forwardRef<\n SpreadsheetRef | undefined,\n SpreadsheetProps & {\n disableClipboard?: boolean;\n }\n>(\n (\n {\n style,\n className,\n containerProps,\n 'aria-label': ariaLabel = 'Spreadsheet',\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n cellData: controlledCellData,\n onCellDataChange,\n onCellDataChangeError,\n rowCount,\n columnCount,\n columnWidths: controlledColumnWidths,\n onColumnWidthsChange,\n rowHeights: controlledRowHeights,\n onRowHeightsChange,\n customCellStyle,\n customCellRenderer,\n parseValue,\n selection,\n components,\n overlayChildren: controlledOverlayChildren,\n selectedOverlayId: controlledSelectedOverlayId,\n onOverlaySelect,\n onOverlayChildrenChange,\n overlayPlaceholder,\n parentSelected = true,\n disableClipboard = false\n },\n ref\n ) => {\n const gridId = useId();\n const [{ width, height }, containerRef] = useResizeObserver();\n const [containerDivRef, setContainerDivRef] = useState<HTMLDivElement | null>(null);\n // Resolved from the mounted element so a consumer can pin a subtree to\n // light or dark via `color-scheme` and have canvas gridlines follow.\n const colorScheme = useColorScheme(containerDivRef);\n // Hidden element used to read the browser-resolved `--rsp-gridline` color\n // for canvas painting (see `resolveGridLineColor`).\n const gridLineProbeRef = useRef<HTMLSpanElement | null>(null);\n\n // State management\n const [internalCellData, setInternalCellData] = useState<Map<string, SerializedCellValue>>(new Map());\n const [retryingEdit, setRetryingEdit] = useState<{\n rowIndex: number;\n colIndex: number;\n version: number;\n } | null>(null);\n const retryingEditVersionRef = useRef(0);\n\n // Use controlled cellData if provided, otherwise use internal state\n const cellData = controlledCellData ?? internalCellData;\n\n const cellDataRef = useRef(cellData);\n cellDataRef.current = cellData;\n\n const finiteRowCount = normalizeFiniteCount(rowCount);\n const finiteColumnCount = normalizeFiniteCount(columnCount);\n const gridCountsRef = useRef({ rows: finiteRowCount, columns: finiteColumnCount });\n gridCountsRef.current = { rows: finiteRowCount, columns: finiteColumnCount };\n\n const getNumRows = useCallback(\n () => countToSelectionBound(gridCountsRef.current.rows),\n []\n );\n const getNumCols = useCallback(\n () => countToSelectionBound(gridCountsRef.current.columns),\n []\n );\n const getDefaultUsedRange = useCallback(\n () =>\n getSparseUsedRange(\n cellDataRef.current,\n gridCountsRef.current.rows,\n gridCountsRef.current.columns\n ),\n []\n );\n const defaultResolveTarget = useCallback(\n (request: NavigationRequest) =>\n resolveSparseNavigationTarget(request, cellDataRef.current),\n []\n );\n const consumerNavigation = selection?.navigation;\n const navigation = useMemo<SelectionNavigationModel>(\n () => ({\n getUsedRange: consumerNavigation?.getUsedRange ?? getDefaultUsedRange,\n ...(consumerNavigation?.getTableAt\n ? { getTableAt: consumerNavigation.getTableAt }\n : {}),\n resolveTarget: consumerNavigation?.resolveTarget ?? defaultResolveTarget\n }),\n [consumerNavigation, defaultResolveTarget, getDefaultUsedRange]\n );\n\n const selectionManager = useInitializeSelectionManager({\n getNumCols,\n getNumRows,\n initialState: selection?.initialState,\n state: selection?.state,\n onStateChange: selection?.onStateChange,\n containerElement: containerDivRef,\n formats: selection?.formats,\n navigation,\n disableAutoClipboard: true\n });\n\n const effects = selection?.effects;\n useEffect(() => {\n if (effects) {\n return effects(selectionManager);\n }\n }, [selectionManager, effects]);\n\n const isControlled = controlledCellData !== undefined;\n const prevIsControlledRef = useRef(isControlled);\n\n selectionManager.getCellsWithData = (area) => {\n const cells: { rowIndex: number; colIndex: number }[] = [];\n cellData.forEach((value, key) => {\n const { rowIndex, columnIndex } = parseCellReference(key);\n if (\n columnIndex >= area.start.col &&\n (area.end.col.type === 'infinity' || columnIndex <= area.end.col.value) &&\n rowIndex >= area.start.row &&\n (area.end.row.type === 'infinity' || rowIndex <= area.end.row.value)\n ) {\n cells.push({ rowIndex, colIndex: columnIndex });\n }\n });\n return cells;\n };\n\n React.useEffect(() => {\n if (isControlled !== prevIsControlledRef.current) {\n prevIsControlledRef.current = isControlled;\n console.warn(\n `The component went from ${\n prevIsControlledRef.current ? 'controlled' : 'uncontrolled'\n } to ${isControlled ? 'controlled' : 'uncontrolled'}, this is not supported`\n );\n }\n }, [controlledCellData, isControlled]);\n\n const [viewport, setViewport] = useState<ViewportState>({\n scrollX: 0,\n scrollY: 0,\n zoom: 1\n });\n const controlledColumnWidthsMap = useMemo(\n () => (controlledColumnWidths ? columnWidthsRecordToMap(controlledColumnWidths) : undefined),\n [controlledColumnWidths]\n );\n const [internalColumnWidths, setInternalColumnWidths] = useState<Map<string, number>>(() =>\n columnWidthsRecordToMap(controlledColumnWidths)\n );\n const [transientColumnWidths, setTransientColumnWidths] = useState<Map<string, number> | null>(null);\n const columnWidths = transientColumnWidths ?? controlledColumnWidthsMap ?? internalColumnWidths;\n const columnWidthsRef = useRef(columnWidths);\n columnWidthsRef.current = columnWidths;\n const previousControlledColumnWidthsRef = useRef(controlledColumnWidths);\n useEffect(() => {\n if (controlledColumnWidths !== previousControlledColumnWidthsRef.current) {\n previousControlledColumnWidthsRef.current = controlledColumnWidths;\n setTransientColumnWidths(null);\n }\n }, [controlledColumnWidths]);\n const controlledRowHeightsMap = useMemo(\n () => (controlledRowHeights ? rowHeightsRecordToMap(controlledRowHeights) : undefined),\n [controlledRowHeights]\n );\n const [internalRowHeights, setInternalRowHeights] = useState<Map<number, number>>(() =>\n rowHeightsRecordToMap(controlledRowHeights)\n );\n const [transientRowHeights, setTransientRowHeights] = useState<Map<number, number> | null>(null);\n const rowHeights = transientRowHeights ?? controlledRowHeightsMap ?? internalRowHeights;\n const rowHeightsRef = useRef(rowHeights);\n rowHeightsRef.current = rowHeights;\n const previousControlledRowHeightsRef = useRef(controlledRowHeights);\n useEffect(() => {\n if (controlledRowHeights !== previousControlledRowHeightsRef.current) {\n previousControlledRowHeightsRef.current = controlledRowHeights;\n setTransientRowHeights(null);\n }\n }, [controlledRowHeights]);\n\n const [isResizingColumn, setIsResizingColumn] = useState<string | null>(null);\n const [isResizingRow, setIsResizingRow] = useState<number | null>(null);\n const [resizeStartX, setResizeStartX] = useState(0);\n const [resizeStartY, setResizeStartY] = useState(0);\n const [resizeStartSize, setResizeStartSize] = useState(0);\n\n // Overlay state management\n const [internalOverlayChildren, setInternalOverlayChildren] = useState<SpreadsheetChild[]>([]);\n const [transientOverlayChildren, setTransientOverlayChildren] = useState<SpreadsheetChild[] | null>(null);\n const [internalSelectedOverlayId, setInternalSelectedOverlayId] = useState<string | null>(null);\n const [mountedPersistentOverlayIds, setMountedPersistentOverlayIds] = useState<Set<string>>(new Set());\n\n // Placeholder state for overlay placement\n const [placeholderPos, setPlaceholderPos] = useState<{ x: number; y: number } | null>(null);\n\n // Use transient overlay state while dragging/resizing, then commit once the interaction ends.\n const overlayChildren = transientOverlayChildren ?? controlledOverlayChildren ?? internalOverlayChildren;\n const selectedOverlayId =\n controlledSelectedOverlayId !== undefined ? controlledSelectedOverlayId : internalSelectedOverlayId;\n\n const previousControlledOverlayChildrenRef = useRef(controlledOverlayChildren);\n useEffect(() => {\n if (controlledOverlayChildren !== previousControlledOverlayChildrenRef.current) {\n previousControlledOverlayChildrenRef.current = controlledOverlayChildren;\n setTransientOverlayChildren(null);\n }\n }, [controlledOverlayChildren]);\n\n const overlayChildrenRef = useRef<SpreadsheetChild[]>(overlayChildren);\n overlayChildrenRef.current = overlayChildren;\n const overlayInteractionDraftRectsRef = useRef<Record<string, CellSnapRect>>({});\n const pendingSnappedTextBoxLayoutCommitRef = useRef(false);\n\n // Refs\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayContainerRef = useRef<HTMLDivElement>(null);\n const viewportStreamRef = useRef(\n new ViewportStream({\n x: viewport.scrollX,\n y: viewport.scrollY,\n zoom: viewport.zoom\n })\n );\n\n // Update viewport stream when viewport changes\n React.useEffect(() => {\n viewportStreamRef.current.next({\n x: viewport.scrollX,\n y: viewport.scrollY,\n zoom: viewport.zoom\n });\n }, [viewport.scrollX, viewport.scrollY, viewport.zoom]);\n // Grid dimensions\n const gridDims: GridDimensions = useMemo(\n () => ({\n cellWidth: DEFAULT_CELL_WIDTH * viewport.zoom,\n cellHeight: DEFAULT_CELL_HEIGHT * viewport.zoom,\n headerWidth: HEADER_WIDTH * viewport.zoom,\n headerHeight: HEADER_HEIGHT * viewport.zoom\n }),\n [viewport.zoom]\n );\n\n // Handle mouse movement for placeholder positioning\n React.useEffect(() => {\n if (!overlayPlaceholder || !containerDivRef) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = containerDivRef.getBoundingClientRect();\n const mouseX = e.clientX - rect.left;\n const mouseY = e.clientY - rect.top;\n\n // Check if mouse is within the spreadsheet (after headers)\n if (mouseX >= gridDims.headerWidth && mouseY >= gridDims.headerHeight) {\n // Convert screen coordinates to sheet coordinates (centered on cursor)\n const sheetX =\n (mouseX - gridDims.headerWidth + viewport.scrollX) / viewport.zoom - overlayPlaceholder.width / 2;\n const sheetY =\n (mouseY - gridDims.headerHeight + viewport.scrollY) / viewport.zoom -\n overlayPlaceholder.height / 2;\n\n // Clamp to minimum bounds (can't be negative or overlap headers)\n const clampedX = Math.max(0, sheetX);\n const clampedY = Math.max(0, sheetY);\n\n setPlaceholderPos({ x: clampedX, y: clampedY });\n } else {\n // Clear placeholder position when mouse is over headers\n setPlaceholderPos(null);\n }\n };\n\n const handleClick = (e: MouseEvent) => {\n if (placeholderPos) {\n e.stopPropagation();\n // Final bounds check before placement\n const finalX = Math.max(0, placeholderPos.x);\n const finalY = Math.max(0, placeholderPos.y);\n overlayPlaceholder.onPlaced(finalX, finalY);\n setPlaceholderPos(null);\n }\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n overlayPlaceholder.onCancel?.();\n setPlaceholderPos(null);\n }\n };\n\n const handleContextMenu = (e: MouseEvent) => {\n e.preventDefault();\n overlayPlaceholder.onCancel?.();\n setPlaceholderPos(null);\n };\n\n containerDivRef.addEventListener('mousemove', handleMouseMove);\n containerDivRef.addEventListener('click', handleClick);\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('contextmenu', handleContextMenu);\n\n return () => {\n containerDivRef.removeEventListener('mousemove', handleMouseMove);\n containerDivRef.removeEventListener('click', handleClick);\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('contextmenu', handleContextMenu);\n };\n }, [overlayPlaceholder, containerDivRef, viewport, gridDims, placeholderPos]);\n\n const effectsRefOb = {\n onCellDataChange,\n onCellDataChangeError,\n controlledCellData,\n parseValue,\n cellData,\n viewport,\n gridDims,\n height\n };\n const effectsRef = useRef(effectsRefOb);\n effectsRef.current = effectsRefOb;\n\n // Styles are now imported via CSS module\n\n // Helper function to setup canvas with devicePixelRatio scaling\n const setupCanvas = useCallback((canvas: HTMLCanvasElement, width: number, height: number) => {\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n // Set actual size in memory (scaled for high-DPI)\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n\n // Set display size (CSS pixels)\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n\n // Scale the drawing context so everything draws at the correct size\n ctx.scale(devicePixelRatio, devicePixelRatio);\n\n return ctx;\n }, []);\n\n // Draw main grid on canvas\n const drawGrid = useCallback(() => {\n if (!canvasRef.current || !width || !height) return;\n\n const ctx = setupCanvas(canvasRef.current, width, height);\n if (!ctx) return;\n\n ctx.clearRect(0, 0, width, height);\n // Canvas 2D cannot evaluate CSS, so read the resolved gridline color from\n // a hidden probe element that the browser has already themed for us.\n ctx.strokeStyle = resolveGridLineColor(gridLineProbeRef.current, colorScheme);\n ctx.lineWidth = 1;\n\n // Draw vertical grid lines using custom column widths\n let x = gridDims.headerWidth;\n let colIndex = 0;\n\n // Skip columns before viewport\n while (\n x < viewport.scrollX + gridDims.headerWidth &&\n (finiteColumnCount === undefined || colIndex < finiteColumnCount)\n ) {\n const colWidth = (columnWidths.get(indexToColumn(colIndex)) || DEFAULT_CELL_WIDTH) * viewport.zoom;\n if (x + colWidth > viewport.scrollX + gridDims.headerWidth) {\n break;\n }\n x += colWidth;\n colIndex++;\n }\n\n // Draw visible columns\n while (\n x - viewport.scrollX < width &&\n (finiteColumnCount === undefined || colIndex < finiteColumnCount)\n ) {\n const drawX = x - viewport.scrollX;\n if (drawX >= gridDims.headerWidth && drawX <= width) {\n ctx.beginPath();\n ctx.moveTo(drawX, gridDims.headerHeight);\n ctx.lineTo(drawX, height);\n ctx.stroke();\n }\n const colWidth = (columnWidths.get(indexToColumn(colIndex)) || DEFAULT_CELL_WIDTH) * viewport.zoom;\n x += colWidth;\n colIndex++;\n }\n\n // Draw horizontal grid lines using custom row heights\n let y = gridDims.headerHeight;\n let rowNum = 1;\n\n // Skip rows before viewport\n while (\n y < viewport.scrollY + gridDims.headerHeight &&\n (finiteRowCount === undefined || rowNum <= finiteRowCount)\n ) {\n const rowHeight = (rowHeights.get(rowNum) || DEFAULT_CELL_HEIGHT) * viewport.zoom;\n if (y + rowHeight > viewport.scrollY + gridDims.headerHeight) {\n break;\n }\n y += rowHeight;\n rowNum++;\n }\n\n // Draw visible rows\n while (\n y - viewport.scrollY < height &&\n (finiteRowCount === undefined || rowNum <= finiteRowCount)\n ) {\n const drawY = y - viewport.scrollY;\n if (drawY >= gridDims.headerHeight && drawY <= height) {\n ctx.beginPath();\n ctx.moveTo(gridDims.headerWidth, drawY);\n ctx.lineTo(width, drawY);\n ctx.stroke();\n }\n const rowHeight = (rowHeights.get(rowNum) || DEFAULT_CELL_HEIGHT) * viewport.zoom;\n y += rowHeight;\n rowNum++;\n }\n }, [\n columnWidths,\n finiteColumnCount,\n finiteRowCount,\n gridDims.headerHeight,\n gridDims.headerWidth,\n height,\n rowHeights,\n setupCanvas,\n viewport.scrollX,\n viewport.scrollY,\n viewport.zoom,\n width,\n colorScheme\n ]);\n\n // Get visible cells for rendering - ensure we always render all visible positions\n const getVisibleCells = useCallback(() => {\n if (!width || !height) return [];\n\n const cells: CellData[] = [];\n\n // Find first visible column\n let x = 0;\n let startCol = 0;\n while (\n x < viewport.scrollX &&\n (finiteColumnCount === undefined || startCol < finiteColumnCount)\n ) {\n const colWidth = (columnWidths.get(indexToColumn(startCol)) || DEFAULT_CELL_WIDTH) * viewport.zoom;\n if (x + colWidth > viewport.scrollX) {\n break;\n }\n x += colWidth;\n startCol++;\n }\n\n // Find first visible row\n let y = 0;\n let startRow = 0;\n while (\n y < viewport.scrollY &&\n (finiteRowCount === undefined || startRow < finiteRowCount)\n ) {\n const rowHeight = (rowHeights.get(startRow + 1) || DEFAULT_CELL_HEIGHT) * viewport.zoom;\n if (y + rowHeight > viewport.scrollY) {\n break;\n }\n y += rowHeight;\n startRow++;\n }\n\n // Collect visible cells\n let rowY = y;\n let row = startRow;\n while (\n rowY < viewport.scrollY + height &&\n (finiteRowCount === undefined || row < finiteRowCount)\n ) {\n let colX = x;\n let col = startCol;\n while (\n colX < viewport.scrollX + width &&\n (finiteColumnCount === undefined || col < finiteColumnCount)\n ) {\n const colKey = indexToColumn(col);\n const rowNum = getRowNumber(row);\n const cellKey = `${colKey}${rowNum}`;\n cells.push({\n value: cellData.get(cellKey) ?? '',\n row: rowNum,\n col: colKey\n });\n const colWidth = (columnWidths.get(colKey) || DEFAULT_CELL_WIDTH) * viewport.zoom;\n colX += colWidth;\n col++;\n }\n const rowHeight = (rowHeights.get(row + 1) || DEFAULT_CELL_HEIGHT) * viewport.zoom;\n rowY += rowHeight;\n row++;\n }\n\n return cells;\n }, [\n cellData,\n columnWidths,\n finiteColumnCount,\n finiteRowCount,\n height,\n rowHeights,\n viewport.scrollX,\n viewport.scrollY,\n viewport.zoom,\n width\n ]);\n\n // Get column width (considering custom sizes)\n const getColumnWidth = useCallback(\n (col: string) => {\n return columnWidths.get(col) || DEFAULT_CELL_WIDTH;\n },\n [columnWidths]\n );\n\n // Get row height (considering custom sizes)\n const getRowHeight = useCallback(\n (row: number) => {\n return rowHeights.get(row) || DEFAULT_CELL_HEIGHT;\n },\n [rowHeights]\n );\n\n // Convert cell coordinates to base pixel coordinates (without scroll offset, for container transform)\n const cellToPixelBase = useCallback(\n (row: number, col: string) => {\n const colIndex = columnToIndex(col);\n const rowIndex = row - 1;\n\n // Calculate x position considering custom column widths\n let x = HEADER_WIDTH;\n for (let i = 0; i < colIndex; i++) {\n const colKey = indexToColumn(i);\n x += columnWidths.get(colKey) || DEFAULT_CELL_WIDTH;\n }\n\n // Calculate y position considering custom row heights\n let y = HEADER_HEIGHT;\n for (let i = 1; i <= rowIndex; i++) {\n y += rowHeights.get(i) || DEFAULT_CELL_HEIGHT;\n }\n\n return { x, y };\n },\n [columnWidths, rowHeights]\n );\n\n const clampViewportOffsets = useCallback(\n (scrollX: number, scrollY: number, zoom: number) => {\n const bodyWidth = Math.max(0, width - HEADER_WIDTH * zoom);\n const bodyHeight = Math.max(0, height - HEADER_HEIGHT * zoom);\n const maxScrollX =\n finiteColumnCount === undefined\n ? Infinity\n : Math.max(\n 0,\n getColumnEdgePosition(finiteColumnCount, columnWidths) * zoom - bodyWidth\n );\n const maxScrollY =\n finiteRowCount === undefined\n ? Infinity\n : Math.max(\n 0,\n getRowEdgePosition(finiteRowCount, rowHeights) * zoom - bodyHeight\n );\n\n return {\n scrollX: Math.min(Math.max(0, scrollX), maxScrollX),\n scrollY: Math.min(Math.max(0, scrollY), maxScrollY)\n };\n },\n [columnWidths, finiteColumnCount, finiteRowCount, height, rowHeights, width]\n );\n\n const revealRange = useCallback(\n (\n range: SMArea,\n options: {\n rowAlign?: SpreadsheetScrollAlignment;\n columnAlign?: SpreadsheetScrollAlignment;\n } = {}\n ) => {\n if (finiteRowCount === 0 || finiteColumnCount === 0) return;\n const rows = normalizeScrollRangeAxis(range.start.row, range.end.row, finiteRowCount);\n const columns = normalizeScrollRangeAxis(range.start.col, range.end.col, finiteColumnCount);\n if (!rows || !columns) return;\n\n setViewport((previous) => {\n const bodyWidth = Math.max(0, width - HEADER_WIDTH * previous.zoom);\n const bodyHeight = Math.max(0, height - HEADER_HEIGHT * previous.zoom);\n const left = getColumnEdgePosition(columns.start, columnWidths) * previous.zoom;\n const right = getColumnEdgePosition(columns.end + 1, columnWidths) * previous.zoom;\n const top = getRowEdgePosition(rows.start, rowHeights) * previous.zoom;\n const bottom = getRowEdgePosition(rows.end + 1, rowHeights) * previous.zoom;\n const desired = clampViewportOffsets(\n alignScrollOffset(\n previous.scrollX,\n left,\n right,\n bodyWidth,\n options.columnAlign ?? 'nearest'\n ),\n alignScrollOffset(\n previous.scrollY,\n top,\n bottom,\n bodyHeight,\n options.rowAlign ?? 'nearest'\n ),\n previous.zoom\n );\n\n if (\n desired.scrollX === previous.scrollX &&\n desired.scrollY === previous.scrollY\n ) {\n return previous;\n }\n return { ...previous, ...desired };\n });\n },\n [\n clampViewportOffsets,\n columnWidths,\n finiteColumnCount,\n finiteRowCount,\n height,\n rowHeights,\n width\n ]\n );\n\n const revealCell = useCallback(\n (\n cell: SMCell,\n options: {\n rowAlign?: SpreadsheetScrollAlignment;\n columnAlign?: SpreadsheetScrollAlignment;\n } = {}\n ) => {\n revealRange(\n {\n start: { row: cell.row, col: cell.col },\n end: {\n row: { type: 'number', value: cell.row },\n col: { type: 'number', value: cell.col }\n }\n },\n options\n );\n },\n [revealRange]\n );\n\n const scrollToCell = useCallback(\n (cell: SMCell, options: SpreadsheetScrollToCellOptions = {}) => {\n const align = options.align ?? 'nearest';\n revealCell(cell, { rowAlign: align, columnAlign: align });\n },\n [revealCell]\n );\n\n const scrollToRange = useCallback(\n (range: SMArea, options: SpreadsheetScrollToRangeOptions = {}) => {\n const align = options.align ?? 'nearest';\n revealRange(range, { rowAlign: align, columnAlign: align });\n },\n [revealRange]\n );\n\n useEffect(\n () =>\n selectionManager.listenToViewportRequest((request) => {\n if (request.type === 'reveal-range') {\n scrollToRange(request.range, { align: request.align });\n return;\n }\n\n const isVertical = request.direction === 'up' || request.direction === 'down';\n revealCell(request.cell, {\n rowAlign: isVertical ? request.align : 'nearest',\n columnAlign: isVertical ? 'nearest' : request.align\n });\n }),\n [revealCell, scrollToRange, selectionManager]\n );\n\n // Keep an existing viewport valid when finite dimensions or custom sizes shrink.\n useEffect(() => {\n setViewport((previous) => {\n const next = clampViewportOffsets(\n previous.scrollX,\n previous.scrollY,\n previous.zoom\n );\n return next.scrollX === previous.scrollX && next.scrollY === previous.scrollY\n ? previous\n : { ...previous, ...next };\n });\n }, [clampViewportOffsets]);\n\n React.useEffect(() => {\n return selectionManager.listenToUpdateData((updates) => {\n const editingState = selectionManager.isEditing;\n try {\n const { cellData, onCellDataChange } = effectsRef.current;\n const newData = new Map(cellData);\n updates.forEach(({ value, rowIndex, colIndex }) => {\n const key = `${indexToColumn(colIndex)}${rowIndex + 1}`;\n const parseValue = effectsRef.current.parseValue;\n if (value === '') {\n newData.delete(key);\n } else {\n // Apply parse function if provided, otherwise use value as-is\n let parsedValue: number | string = value;\n if (parseValue && typeof value === 'string') {\n // Extract cell info from key (e.g., \"A1\" -> row=1, col=\"A\")\n const match = key.match(/^([A-Z]+)(\\d+)$/);\n const col = match?.[1];\n const rowText = match?.[2];\n if (col && rowText) {\n const row = parseInt(rowText, 10);\n const colIndex = columnToIndex(col);\n const rowIndex = row - 1;\n\n parsedValue = parseValue(value, {\n id: key,\n row,\n col,\n rowIndex,\n colIndex\n });\n }\n }\n newData.set(key, parsedValue);\n }\n });\n onCellDataChange?.(newData);\n setInternalCellData(newData);\n } catch (error) {\n console.error('Failed to update spreadsheet cell data:', error);\n effectsRef.current.onCellDataChangeError?.(error);\n\n const rejectedUpdate = updates.length === 1 ? updates[0] : undefined;\n if (\n editingState.type === 'cell' &&\n rejectedUpdate &&\n rejectedUpdate.rowIndex === editingState.row &&\n rejectedUpdate.colIndex === editingState.col\n ) {\n const rejectedValue = rejectedUpdate.value === undefined ? '' : String(rejectedUpdate.value);\n queueMicrotask(() => {\n retryingEditVersionRef.current += 1;\n setRetryingEdit({\n rowIndex: editingState.row,\n colIndex: editingState.col,\n version: retryingEditVersionRef.current\n });\n selectionManager.editCell(editingState.row, editingState.col, rejectedValue);\n });\n }\n }\n });\n }, [selectionManager]);\n\n const clipboardManager = useMemo(() => {\n return new SpreadsheetClipboardManager(cellDataRef, selectionManager);\n }, [selectionManager]);\n\n React.useEffect(() => {\n if (disableClipboard) return;\n selectionManager.listenToCopy(() => {\n clipboardManager.triggerCopy();\n });\n }, [selectionManager, clipboardManager, disableClipboard]);\n\n React.useEffect(() => {\n if (disableClipboard) return;\n selectionManager.listenToPaste(({ updates }) => {\n clipboardManager.triggerPaste(updates);\n });\n }, [selectionManager, clipboardManager, disableClipboard]);\n\n // Handle wheel events (scroll only, zoom disabled)\n const handleWheel = useCallback(\n (e: WheelEvent) => {\n const target = e.target;\n const currentTarget = e.currentTarget;\n const overlay =\n target instanceof Element ? target.closest(SPREADSHEET_OVERLAY_SELECTOR) : null;\n if (overlay && currentTarget instanceof Node && currentTarget.contains(overlay)) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n // Always scroll, ignore zoom.\n setViewport((previous) => ({\n ...previous,\n ...clampViewportOffsets(\n previous.scrollX + e.deltaX,\n previous.scrollY + e.deltaY,\n previous.zoom\n )\n }));\n },\n [clampViewportOffsets]\n );\n\n // Overlay interaction handlers\n const commitOverlayChildren = useCallback(\n (children: SpreadsheetChild[]) => {\n overlayChildrenRef.current = children;\n\n if (onOverlayChildrenChange) {\n onOverlayChildrenChange(children);\n setTransientOverlayChildren(children);\n return;\n }\n\n setInternalOverlayChildren(children);\n setTransientOverlayChildren(null);\n },\n [onOverlayChildrenChange]\n );\n\n const updateOverlayChildrenLocally = useCallback(\n (updater: (children: SpreadsheetChild[]) => SpreadsheetChild[]) => {\n const nextChildren = updater(overlayChildrenRef.current);\n overlayChildrenRef.current = nextChildren;\n setTransientOverlayChildren(nextChildren);\n\n if (!onOverlayChildrenChange) {\n setInternalOverlayChildren(nextChildren);\n }\n },\n [onOverlayChildrenChange]\n );\n\n const updateSnappedTextBoxRectsLocally = useCallback(\n (nextColumnWidths: Map<string, number>, nextRowHeights: Map<number, number>) => {\n const nextChildren = syncSnappedTextBoxRects(\n overlayChildrenRef.current,\n nextColumnWidths,\n nextRowHeights\n );\n\n if (nextChildren === overlayChildrenRef.current) {\n return;\n }\n\n overlayChildrenRef.current = nextChildren;\n pendingSnappedTextBoxLayoutCommitRef.current = true;\n setTransientOverlayChildren(nextChildren);\n\n if (!onOverlayChildrenChange) {\n setInternalOverlayChildren(nextChildren);\n }\n },\n [onOverlayChildrenChange]\n );\n\n const commitSnappedTextBoxRects = useCallback(\n (nextColumnWidths: Map<string, number>, nextRowHeights: Map<number, number>) => {\n const nextChildren = syncSnappedTextBoxRects(\n overlayChildrenRef.current,\n nextColumnWidths,\n nextRowHeights\n );\n\n if (nextChildren !== overlayChildrenRef.current) {\n commitOverlayChildren(nextChildren);\n pendingSnappedTextBoxLayoutCommitRef.current = false;\n return;\n }\n\n if (pendingSnappedTextBoxLayoutCommitRef.current) {\n commitOverlayChildren(overlayChildrenRef.current);\n pendingSnappedTextBoxLayoutCommitRef.current = false;\n }\n },\n [commitOverlayChildren]\n );\n\n const updateColumnWidthsLocally = useCallback(\n (updater: (columnWidths: Map<string, number>) => Map<string, number>) => {\n const nextColumnWidths = updater(columnWidthsRef.current);\n columnWidthsRef.current = nextColumnWidths;\n setTransientColumnWidths(nextColumnWidths);\n updateSnappedTextBoxRectsLocally(nextColumnWidths, rowHeightsRef.current);\n\n if (!onColumnWidthsChange) {\n setInternalColumnWidths(nextColumnWidths);\n }\n },\n [onColumnWidthsChange, updateSnappedTextBoxRectsLocally]\n );\n\n const commitColumnWidths = useCallback(\n (nextColumnWidths: Map<string, number>) => {\n columnWidthsRef.current = nextColumnWidths;\n\n if (onColumnWidthsChange) {\n onColumnWidthsChange(columnWidthsMapToRecord(nextColumnWidths));\n setTransientColumnWidths(nextColumnWidths);\n commitSnappedTextBoxRects(nextColumnWidths, rowHeightsRef.current);\n return;\n }\n\n setInternalColumnWidths(nextColumnWidths);\n setTransientColumnWidths(null);\n commitSnappedTextBoxRects(nextColumnWidths, rowHeightsRef.current);\n },\n [commitSnappedTextBoxRects, onColumnWidthsChange]\n );\n\n const updateRowHeightsLocally = useCallback(\n (updater: (rowHeights: Map<number, number>) => Map<number, number>) => {\n const nextRowHeights = updater(rowHeightsRef.current);\n rowHeightsRef.current = nextRowHeights;\n setTransientRowHeights(nextRowHeights);\n updateSnappedTextBoxRectsLocally(columnWidthsRef.current, nextRowHeights);\n\n if (!onRowHeightsChange) {\n setInternalRowHeights(nextRowHeights);\n }\n },\n [onRowHeightsChange, updateSnappedTextBoxRectsLocally]\n );\n\n const commitRowHeights = useCallback(\n (nextRowHeights: Map<number, number>) => {\n rowHeightsRef.current = nextRowHeights;\n\n if (onRowHeightsChange) {\n onRowHeightsChange(rowHeightsMapToRecord(nextRowHeights));\n setTransientRowHeights(nextRowHeights);\n commitSnappedTextBoxRects(columnWidthsRef.current, nextRowHeights);\n return;\n }\n\n setInternalRowHeights(nextRowHeights);\n setTransientRowHeights(null);\n commitSnappedTextBoxRects(columnWidthsRef.current, nextRowHeights);\n },\n [commitSnappedTextBoxRects, onRowHeightsChange]\n );\n\n // Handle column resize\n const handleColumnResizeStart = useCallback(\n (e: React.MouseEvent, col: string) => {\n e.preventDefault();\n e.stopPropagation();\n setIsResizingColumn(col);\n setResizeStartX(e.clientX);\n setResizeStartSize(getColumnWidth(col));\n },\n [getColumnWidth]\n );\n\n // Handle row resize\n const handleRowResizeStart = useCallback(\n (e: React.MouseEvent, row: number) => {\n e.preventDefault();\n e.stopPropagation();\n setIsResizingRow(row);\n setResizeStartY(e.clientY);\n setResizeStartSize(getRowHeight(row));\n },\n [getRowHeight]\n );\n\n // Handle resize move\n const handleResizeMove = useCallback(\n (e: MouseEvent) => {\n if (isResizingColumn) {\n const delta = e.clientX - resizeStartX;\n const newWidth = Math.max(20, resizeStartSize + delta / viewport.zoom);\n updateColumnWidthsLocally((prev) => new Map(prev).set(isResizingColumn, newWidth));\n } else if (isResizingRow !== null) {\n const delta = e.clientY - resizeStartY;\n const newHeight = Math.max(20, resizeStartSize + delta / viewport.zoom);\n updateRowHeightsLocally((prev) => new Map(prev).set(isResizingRow, newHeight));\n }\n },\n [\n isResizingColumn,\n isResizingRow,\n resizeStartX,\n resizeStartY,\n resizeStartSize,\n updateColumnWidthsLocally,\n updateRowHeightsLocally,\n viewport.zoom\n ]\n );\n\n // Handle resize end\n const handleResizeEnd = useCallback(() => {\n if (isResizingColumn) {\n commitColumnWidths(columnWidthsRef.current);\n }\n if (isResizingRow !== null) {\n commitRowHeights(rowHeightsRef.current);\n }\n setIsResizingColumn(null);\n setIsResizingRow(null);\n }, [commitColumnWidths, commitRowHeights, isResizingColumn, isResizingRow]);\n\n // Handle resize double click (auto-fit)\n const handleColumnResizeDoubleClick = useCallback(\n (e: React.MouseEvent, col: string) => {\n e.preventDefault();\n e.stopPropagation();\n\n const { viewport, gridDims, height, cellData } = effectsRef.current;\n\n // Measure all visible cells in the column\n let maxWidth = 50; // Minimum width\n\n // Check visible cells\n const startRow = Math.max(0, Math.floor(viewport.scrollY / gridDims.cellHeight));\n const endRow = Math.ceil((viewport.scrollY + height) / gridDims.cellHeight) + 1;\n\n for (let row = startRow; row <= endRow; row++) {\n const cellKey = `${col}${getRowNumber(row)}`;\n const content = cellData.get(cellKey) ?? '';\n if (content) {\n // Estimate text width (rough approximation)\n const estimatedWidth = String(content).length * 8 + 20; // 8px per char + padding\n maxWidth = Math.max(maxWidth, estimatedWidth);\n }\n }\n\n commitColumnWidths(new Map(columnWidthsRef.current).set(col, maxWidth));\n },\n [commitColumnWidths]\n );\n\n // Handle resize double click for rows\n const handleRowResizeDoubleClick = useCallback(\n (e: React.MouseEvent, row: number) => {\n e.preventDefault();\n e.stopPropagation();\n\n // For simplicity, set to a reasonable height\n // In a real implementation, you'd measure the content\n commitRowHeights(new Map(rowHeightsRef.current).set(row, DEFAULT_CELL_HEIGHT));\n },\n [commitRowHeights]\n );\n\n const commitCurrentOverlayChildren = useCallback(() => {\n overlayInteractionDraftRectsRef.current = {};\n commitOverlayChildren(overlayChildrenRef.current);\n }, [commitOverlayChildren]);\n\n const setSelectedOverlay = useCallback(\n (childId: string | null) => {\n if (onOverlaySelect) {\n onOverlaySelect(childId);\n }\n setInternalSelectedOverlayId(childId);\n },\n [onOverlaySelect]\n );\n\n const handleOverlayClick = useCallback(\n (childId: string, e: React.MouseEvent) => {\n e.stopPropagation();\n // Only allow overlay selection if parent is selected\n if (!parentSelected) {\n return;\n }\n // Blur the SelectionManager when selecting an overlay\n selectionManager.blur();\n setSelectedOverlay(childId);\n },\n [setSelectedOverlay, selectionManager, parentSelected]\n );\n\n const handleOverlayBackgroundClick = useCallback(() => {\n setSelectedOverlay(null);\n }, [setSelectedOverlay]);\n\n const getOverlayInteractionDraftRect = useCallback((child: SpreadsheetChild): CellSnapRect => {\n const currentDraft = overlayInteractionDraftRectsRef.current[child.id];\n if (currentDraft) {\n return currentDraft;\n }\n\n const draft = {\n x: child.x,\n y: child.y,\n width: child.width,\n height: child.height\n };\n overlayInteractionDraftRectsRef.current[child.id] = draft;\n return draft;\n }, []);\n\n const handleOverlayMove = useCallback(\n (childId: string, deltaX: number, deltaY: number) => {\n updateOverlayChildrenLocally((children) =>\n children.map((child) => {\n if (child.id !== childId) return child;\n\n if (isSnappedTextBox(child)) {\n const draft = getOverlayInteractionDraftRect(child);\n draft.x = Math.max(0, draft.x + deltaX);\n draft.y = Math.max(0, draft.y + deltaY);\n\n const baseAnchor =\n child.cellAnchor ??\n getCellSnapAnchorFromRect(child, columnWidthsRef.current, rowHeightsRef.current);\n const nextAnchor = moveCellSnapAnchorToNearestOrigin(\n baseAnchor,\n draft,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n\n return applyCellSnapAnchorToTextBox(\n child,\n nextAnchor,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n }\n\n // Constrain overlay position to prevent overlapping with headers\n const newX = Math.max(0, child.x + deltaX);\n const newY = Math.max(0, child.y + deltaY);\n return { ...child, x: newX, y: newY };\n })\n );\n },\n [getOverlayInteractionDraftRect, updateOverlayChildrenLocally]\n );\n\n const handleOverlayResize = useCallback(\n (childId: string, deltaWidth: number, deltaHeight: number, shiftKey: boolean, handle: string) => {\n updateOverlayChildrenLocally((children) =>\n children.map((child) => {\n if (child.id !== childId) return child;\n\n if (isSnappedTextBox(child) && isCellSnapResizeHandle(handle)) {\n const draft = getOverlayInteractionDraftRect(child);\n let nextX = draft.x;\n let nextY = draft.y;\n let nextWidth = draft.width;\n let nextHeight = draft.height;\n\n if (handle === 'left' || handle === 'top-left' || handle === 'bottom-left') {\n nextX = draft.x - deltaWidth;\n nextWidth = draft.width + deltaWidth;\n }\n if (handle === 'right' || handle === 'top-right' || handle === 'bottom-right') {\n nextWidth = draft.width + deltaWidth;\n }\n if (handle === 'top' || handle === 'top-left' || handle === 'top-right') {\n nextY = draft.y - deltaHeight;\n nextHeight = draft.height + deltaHeight;\n }\n if (handle === 'bottom' || handle === 'bottom-left' || handle === 'bottom-right') {\n nextHeight = draft.height + deltaHeight;\n }\n\n if (nextX < 0) {\n nextWidth += nextX;\n nextX = 0;\n }\n if (nextY < 0) {\n nextHeight += nextY;\n nextY = 0;\n }\n\n draft.x = nextX;\n draft.y = nextY;\n draft.width = Math.max(1, nextWidth);\n draft.height = Math.max(1, nextHeight);\n\n const baseAnchor =\n child.cellAnchor ??\n getCellSnapAnchorFromRect(child, columnWidthsRef.current, rowHeightsRef.current);\n const nextAnchor = resizeCellSnapAnchorToNearestEdges(\n baseAnchor,\n draft,\n handle,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n\n return applyCellSnapAnchorToTextBox(\n child,\n nextAnchor,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n }\n\n if (shiftKey && (deltaWidth !== 0 || deltaHeight !== 0)) {\n // Locked aspect ratio mode - adjust zoom\n const currentZoom = child.zoom || 1;\n const currentVisualWidth = child.width;\n const currentVisualHeight = child.height;\n\n const widthScale = deltaWidth !== 0 ? 1 + deltaWidth / currentVisualWidth : 1;\n const heightScale = deltaHeight !== 0 ? 1 + deltaHeight / currentVisualHeight : 1;\n\n let scaleDelta: number;\n if (handle.includes('-')) {\n scaleDelta = Math.abs(widthScale - 1) > Math.abs(heightScale - 1) ? widthScale : heightScale;\n } else if (handle === 'left' || handle === 'right') {\n scaleDelta = widthScale;\n } else if (handle === 'top' || handle === 'bottom') {\n scaleDelta = heightScale;\n } else {\n scaleDelta = Math.max(widthScale, heightScale);\n }\n\n const newZoom = currentZoom * scaleDelta;\n const newWidth = child.width * scaleDelta;\n const newHeight = child.height * scaleDelta;\n const deltaX = newWidth - child.width;\n const deltaY = newHeight - child.height;\n\n let newX = child.x;\n let newY = child.y;\n if (handle === 'left' || handle === 'bottom-left') {\n newX = child.x - deltaX;\n }\n if (handle === 'top' || handle === 'top-right') {\n newY = child.y - deltaY;\n }\n if (handle === 'top-left') {\n newX = child.x - deltaX;\n newY = child.y - deltaY;\n }\n\n // Constrain overlay position to prevent overlapping with headers\n newX = Math.max(0, newX);\n newY = Math.max(0, newY);\n\n return {\n ...child,\n x: newX,\n y: newY,\n width: newWidth,\n height: newHeight,\n zoom: newZoom\n };\n } else {\n // Normal resize mode\n let newX = child.x;\n let newY = child.y;\n if (handle === 'left' || handle === 'bottom-left') {\n newX = child.x - deltaWidth;\n }\n if (handle === 'top' || handle === 'top-right') {\n newY = child.y - deltaHeight;\n }\n if (handle === 'top-left') {\n newX = child.x - deltaWidth;\n newY = child.y - deltaHeight;\n }\n\n // Constrain overlay position to prevent overlapping with headers\n newX = Math.max(0, newX);\n newY = Math.max(0, newY);\n\n return {\n ...child,\n x: newX,\n y: newY,\n width: child.width + deltaWidth,\n height: child.height + deltaHeight,\n zoom: child.zoom\n };\n }\n })\n );\n },\n [getOverlayInteractionDraftRect, updateOverlayChildrenLocally]\n );\n\n const handleOverlaySnapToCellsToggle = useCallback(\n (childId: string, enabled: boolean) => {\n overlayInteractionDraftRectsRef.current = {};\n commitOverlayChildren(\n overlayChildrenRef.current.map((child) => {\n if (child.id !== childId || child.component !== 'RichText') {\n return child;\n }\n\n if (!enabled) {\n return {\n ...child,\n snapToCells: false,\n cellAnchor: undefined\n };\n }\n\n const anchor = getCellSnapAnchorFromRect(child, columnWidthsRef.current, rowHeightsRef.current);\n\n return applyCellSnapAnchorToTextBox(\n child,\n anchor,\n columnWidthsRef.current,\n rowHeightsRef.current\n );\n })\n );\n },\n [commitOverlayChildren]\n );\n\n const handleOverlayReset = useCallback(\n (childId: string) => {\n commitOverlayChildren(\n overlayChildrenRef.current.map((child) => {\n if (child.id !== childId || !child.initial) return child;\n return {\n ...child,\n x: child.initial.x,\n y: child.initial.y,\n width: child.initial.width,\n height: child.initial.height,\n zoom: child.initial.zoom || 1,\n minimized: false\n };\n })\n );\n },\n [commitOverlayChildren]\n );\n\n const handleOverlayMinimize = useCallback(\n (childId: string) => {\n commitOverlayChildren(\n overlayChildrenRef.current.map((child) =>\n child.id === childId && child.component !== 'RichText'\n ? { ...child, minimized: !child.minimized }\n : child\n )\n );\n },\n [commitOverlayChildren]\n );\n\n const handleOverlayClose = useCallback(\n (childId: string) => {\n commitOverlayChildren(overlayChildrenRef.current.filter((child) => child.id !== childId));\n },\n [commitOverlayChildren]\n );\n\n useEffect(() => {\n const handleOverlayDeleteKeyDown = (event: KeyboardEvent) => {\n if (!selectedOverlayId || (event.key !== 'Backspace' && event.key !== 'Delete')) {\n return;\n }\n\n if (isEditableKeyboardTarget(event.target)) {\n return;\n }\n\n const selectedOverlay = overlayChildrenRef.current.find((child) => child.id === selectedOverlayId);\n if (selectedOverlay?.component !== 'RichText') {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n setSelectedOverlay(null);\n handleOverlayClose(selectedOverlayId);\n };\n\n document.addEventListener('keydown', handleOverlayDeleteKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleOverlayDeleteKeyDown);\n };\n }, [handleOverlayClose, selectedOverlayId, setSelectedOverlay]);\n\n // Effects\n useEffect(() => {\n drawGrid();\n }, [drawGrid]);\n\n // Handle resize mouse events\n useEffect(() => {\n if (isResizingColumn || isResizingRow !== null) {\n document.addEventListener('mousemove', handleResizeMove);\n document.addEventListener('mouseup', handleResizeEnd);\n document.body.style.cursor = isResizingColumn ? 'col-resize' : 'row-resize';\n\n return () => {\n document.removeEventListener('mousemove', handleResizeMove);\n document.removeEventListener('mouseup', handleResizeEnd);\n document.body.style.cursor = '';\n };\n }\n }, [isResizingColumn, isResizingRow, handleResizeMove, handleResizeEnd]);\n\n // Handle editing state changes and additional keypress events\n useEffect(() => {\n const editingCleanup = selectionManager.observeStateChange(\n (state) => state.isEditing.type,\n (type) => {\n if (type !== 'none') {\n // When editing, set up additional event handlers for paste, etc.\n const handleEditingKeydown = (e: KeyboardEvent) => {\n // Handle paste during editing\n if ((e.metaKey || e.ctrlKey) && e.key === 'v') {\n // Let the browser handle paste into the input naturally\n return;\n }\n\n // Handle delete/backspace during editing\n if (e.key === 'Delete' || e.key === 'Backspace') {\n // Let the browser handle these naturally in the input\n return;\n }\n };\n\n window.addEventListener('keydown', handleEditingKeydown);\n return () => {\n window.removeEventListener('keydown', handleEditingKeydown);\n };\n }\n },\n true\n );\n\n return editingCleanup;\n }, [selectionManager]);\n\n // Listen to SelectionManager focus changes - deselect overlays when cells gain focus\n React.useEffect(() => {\n return selectionManager.observeStateChange(\n (state) => state.hasFocus,\n (hasFocus) => {\n if (hasFocus && selectedOverlayId) {\n // SelectionManager gained focus, deselect overlay\n setSelectedOverlay(null);\n }\n }\n );\n }, [selectionManager, selectedOverlayId, setSelectedOverlay]);\n\n // Get visible column headers (just the column info, no positions)\n const getVisibleColumnHeaders = useCallback(() => {\n if (!width) return [];\n\n const headers: { col: string; colIndex: number }[] = [];\n let x = 0;\n let startCol = 0;\n\n // Find the first visible column\n while (\n x < viewport.scrollX &&\n (finiteColumnCount === undefined || startCol < finiteColumnCount)\n ) {\n const col = indexToColumn(startCol);\n const colWidth = getColumnWidth(col) * viewport.zoom;\n if (x + colWidth > viewport.scrollX) {\n break;\n }\n x += colWidth;\n startCol++;\n }\n\n // Collect visible columns\n while (\n x < viewport.scrollX + width &&\n (finiteColumnCount === undefined || startCol < finiteColumnCount)\n ) {\n const col = indexToColumn(startCol);\n const colWidth = getColumnWidth(col) * viewport.zoom;\n headers.push({\n col,\n colIndex: startCol\n });\n x += colWidth;\n startCol++;\n }\n\n return headers;\n }, [finiteColumnCount, width, viewport, getColumnWidth]);\n\n // Get visible row headers (just the row info, no positions)\n const getVisibleRowHeaders = useCallback(() => {\n if (!height) return [];\n\n const headers: { row: number; rowIndex: number }[] = [];\n let y = 0;\n let rowNum = 1;\n\n // Find the first visible row\n while (\n y < viewport.scrollY &&\n (finiteRowCount === undefined || rowNum <= finiteRowCount)\n ) {\n const rowHeight = getRowHeight(rowNum) * viewport.zoom;\n if (y + rowHeight > viewport.scrollY) {\n break;\n }\n y += rowHeight;\n rowNum++;\n }\n\n // Collect visible rows\n while (\n y < viewport.scrollY + height &&\n (finiteRowCount === undefined || rowNum <= finiteRowCount)\n ) {\n const rowHeight = getRowHeight(rowNum) * viewport.zoom;\n headers.push({\n row: rowNum,\n rowIndex: rowNum - 1\n });\n y += rowHeight;\n rowNum++;\n }\n\n return headers;\n }, [finiteRowCount, height, viewport, getRowHeight]);\n\n // Get visible overlays with culling and persistent tracking\n const { visibleOverlays, overlaysToRender } = useMemo(() => {\n if (!width || !height || !overlayChildren) {\n return { visibleOverlays: [], overlaysToRender: [] };\n }\n\n const visible: SpreadsheetChild[] = [];\n const toRender: SpreadsheetChild[] = [];\n const newMountedPersistentIds = new Set(mountedPersistentOverlayIds);\n\n overlayChildren.forEach((child) => {\n // Calculate child's bounds in screen coordinates\n const childLeft = child.x * viewport.zoom - viewport.scrollX + gridDims.headerWidth;\n const childTop = child.y * viewport.zoom - viewport.scrollY + gridDims.headerHeight;\n const childRight = childLeft + child.width * viewport.zoom;\n const childBottom = childTop + child.height * viewport.zoom;\n\n // Calculate viewport bounds with margin\n const margin = 100;\n const viewportLeft = gridDims.headerWidth - margin;\n const viewportTop = gridDims.headerHeight - margin;\n const viewportRight = width + margin;\n const viewportBottom = height + margin;\n\n // Check if overlay is within viewport\n const isVisible =\n childRight >= viewportLeft &&\n childLeft <= viewportRight &&\n childBottom >= viewportTop &&\n childTop <= viewportBottom;\n\n if (isVisible) {\n visible.push(child);\n toRender.push(child);\n if (child.persistent) {\n newMountedPersistentIds.add(child.id);\n }\n } else if (child.persistent && mountedPersistentOverlayIds.has(child.id)) {\n // Persistent child that was previously mounted but is now invisible\n toRender.push(child);\n }\n });\n\n // Update mounted persistent children if changed\n if (\n newMountedPersistentIds.size !== mountedPersistentOverlayIds.size ||\n [...newMountedPersistentIds].some((id) => !mountedPersistentOverlayIds.has(id))\n ) {\n setMountedPersistentOverlayIds(newMountedPersistentIds);\n }\n\n return { visibleOverlays: visible, overlaysToRender: toRender };\n }, [\n overlayChildren,\n viewport.zoom,\n viewport.scrollX,\n viewport.scrollY,\n width,\n height,\n gridDims.headerWidth,\n gridDims.headerHeight,\n mountedPersistentOverlayIds\n ]);\n\n // Render visible cells\n const visibleCells = React.useMemo(() => getVisibleCells(), [getVisibleCells]);\n const visibleColumnHeaders = React.useMemo(() => getVisibleColumnHeaders(), [getVisibleColumnHeaders]);\n const visibleRowHeaders = React.useMemo(() => getVisibleRowHeaders(), [getVisibleRowHeaders]);\n\n const activeAddress = useSelectionManager(selectionManager, () => {\n const cell = selectionManager.getTopLeftCellInSelection();\n return cell ? `${indexToColumn(cell.col)}${cell.row + 1}` : undefined;\n });\n const activeCellId = visibleCells.some((cell) => `${cell.col}${cell.row}` === activeAddress)\n ? `${gridId}-cell-${activeAddress}`\n : undefined;\n // Older supported selection-manager versions do not expose this bridge.\n // Keep the grid semantics useful without requiring an unreleased peer.\n const accessibilityManager = selectionManager as SelectionManager & {\n setInputCaptureAccessibility?: (options: {\n label?: string;\n controls?: string;\n activeDescendant?: string;\n describedBy?: string;\n }) => void;\n };\n useLayoutEffect(() => {\n accessibilityManager.setInputCaptureAccessibility?.({\n label: `${ariaLabel} keyboard input`,\n controls: gridId,\n activeDescendant: activeCellId,\n describedBy: ariaDescribedBy\n });\n return () => accessibilityManager.setInputCaptureAccessibility?.({});\n }, [accessibilityManager, ariaLabel, ariaDescribedBy, gridId, activeCellId]);\n\n const hasFocus = useSelectionManager(selectionManager, () => selectionManager.hasFocus);\n const referenceSelection = useSelectionManager(\n selectionManager,\n () => selectionManager.referenceSelection\n );\n const referenceSelectionRect = useMemo(() => {\n if (referenceSelection.type === 'none') return undefined;\n if (finiteRowCount === 0 || finiteColumnCount === 0) return undefined;\n\n const range = referenceSelection.range;\n const lastVisibleRow = visibleCells.reduce(\n (maximum, cell) => Math.max(maximum, cell.row - 1),\n range.start.row\n );\n const lastVisibleCol = visibleCells.reduce(\n (maximum, cell) => Math.max(maximum, columnToIndex(cell.col)),\n range.start.col\n );\n const rawEndRow =\n range.end.row.type === 'number'\n ? range.end.row.value\n : finiteRowCount === undefined\n ? lastVisibleRow\n : finiteRowCount - 1;\n const rawEndCol =\n range.end.col.type === 'number'\n ? range.end.col.value\n : finiteColumnCount === undefined\n ? lastVisibleCol\n : finiteColumnCount - 1;\n const maxRow = finiteRowCount === undefined ? Infinity : finiteRowCount - 1;\n const maxCol = finiteColumnCount === undefined ? Infinity : finiteColumnCount - 1;\n const startRow = Math.min(Math.max(0, Math.min(range.start.row, rawEndRow)), maxRow);\n const endRow = Math.min(Math.max(0, Math.max(range.start.row, rawEndRow)), maxRow);\n const startCol = Math.min(Math.max(0, Math.min(range.start.col, rawEndCol)), maxCol);\n const endCol = Math.min(Math.max(0, Math.max(range.start.col, rawEndCol)), maxCol);\n const rect = getRectFromCellSnapAnchor(\n {\n startCol,\n startRow,\n endCol: endCol + 1,\n endRow: endRow + 1\n },\n columnWidths,\n rowHeights\n );\n\n return {\n left: HEADER_WIDTH + rect.x,\n top: HEADER_HEIGHT + rect.y,\n width: rect.width,\n height: rect.height\n };\n }, [\n columnWidths,\n finiteColumnCount,\n finiteRowCount,\n referenceSelection,\n rowHeights,\n visibleCells\n ]);\n\n // Add wheel handler to container\n React.useEffect(() => {\n if (!containerDivRef || !parentSelected) {\n return;\n }\n containerDivRef.addEventListener('wheel', handleWheel, {\n passive: false\n });\n return () => {\n containerDivRef.removeEventListener('wheel', handleWheel);\n };\n }, [containerDivRef, handleWheel, parentSelected]);\n\n // Forward ref\n useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n selectionManager.focus();\n },\n blur: () => {\n selectionManager.blur();\n },\n scrollToCell,\n scrollToRange\n }),\n [scrollToCell, scrollToRange, selectionManager]\n );\n\n return (\n <div\n className={cn('rsp-root', className)}\n // A stylesheet cannot read an ancestor's `color-scheme`, so the resolved\n // value is reflected here to drive the light/dark token switch.\n data-rsp-scheme={colorScheme}\n style={{ position: 'relative', ...style }}\n {...containerProps}\n >\n <div style={{ position: 'absolute', inset: 0 }} ref={containerRef}>\n {Boolean(width && height) && (\n <div\n ref={setContainerDivRef}\n className={cn('rsp-container', { 'rsp-focused': hasFocus })}\n data-testid=\"spreadsheet-container\"\n style={{\n width,\n height\n }}\n id={gridId}\n role=\"grid\"\n aria-activedescendant={activeCellId}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n aria-rowcount={finiteRowCount === undefined ? -1 : finiteRowCount + 1}\n aria-colcount={finiteColumnCount === undefined ? -1 : finiteColumnCount + 1}\n aria-multiselectable=\"true\"\n tabIndex={0}\n onFocus={(event) => {\n // Tab must activate keyboard navigation just as a pointer click does.\n // Do not refocus when an inline editor or overlay receives focus.\n if (event.target === event.currentTarget && !selectionManager.hasFocus) {\n selectionManager.focus();\n }\n }}\n >\n {/* Resolves the themed gridline color for the canvas. Kept in the\n DOM (not `display: none`) so the value stays computable. */}\n <span\n ref={gridLineProbeRef}\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n width: 0,\n height: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n color: 'var(--_rsp-gridline)'\n }}\n />\n\n <canvas\n ref={canvasRef}\n aria-hidden=\"true\"\n className=\"rsp-canvas\"\n data-testid=\"spreadsheet-canvas\"\n style={{ width, height }}\n />\n\n {/* Column headers */}\n <div\n className=\"rsp-column-headers\"\n role=\"row\"\n aria-rowindex={1}\n data-testid=\"spreadsheet-column-headers\"\n style={{\n left: gridDims.headerWidth,\n right: 0,\n height: gridDims.headerHeight,\n zIndex: 20\n }}\n >\n <div\n style={{\n transform: `translateX(${-viewport.scrollX}px) scale(${viewport.zoom})`,\n transformOrigin: '0 0'\n }}\n >\n {visibleColumnHeaders.map(({ col, colIndex }) => {\n return (\n <HeaderComponent\n key={col}\n index={colIndex}\n type=\"col\"\n selectionManager={selectionManager}\n getColumnWidth={getColumnWidth}\n getRowHeight={getRowHeight}\n handleColumnResizeStart={handleColumnResizeStart}\n handleColumnResizeDoubleClick={handleColumnResizeDoubleClick}\n handleRowResizeStart={handleRowResizeStart}\n handleRowResizeDoubleClick={handleRowResizeDoubleClick}\n />\n );\n })}\n </div>\n </div>\n\n {/* Row headers */}\n <div\n className=\"rsp-row-headers\"\n data-testid=\"spreadsheet-row-headers\"\n style={{\n top: gridDims.headerHeight,\n bottom: 0,\n width: gridDims.headerWidth,\n zIndex: 20\n }}\n >\n <div\n style={{\n transform: `translateY(${-viewport.scrollY}px) scale(${viewport.zoom})`,\n transformOrigin: '0 0'\n }}\n >\n {visibleRowHeaders.map(({ row, rowIndex }) => {\n return (\n <div\n key={row}\n role=\"row\"\n aria-rowindex={row + 1}\n // Headers and cells use separate clipping/transform layers.\n // Own the mounted cells to expose one logical ARIA row.\n aria-owns={visibleCells.filter((cell) => cell.row === row)\n .map((cell) => `${gridId}-cell-${cell.col}${cell.row}`).join(' ') || undefined}\n >\n <HeaderComponent\n index={rowIndex}\n type=\"row\"\n selectionManager={selectionManager}\n getColumnWidth={getColumnWidth}\n getRowHeight={getRowHeight}\n handleColumnResizeStart={handleColumnResizeStart}\n handleColumnResizeDoubleClick={handleColumnResizeDoubleClick}\n handleRowResizeStart={handleRowResizeStart}\n handleRowResizeDoubleClick={handleRowResizeDoubleClick}\n />\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Corner header */}\n <div\n className=\"rsp-corner-header\"\n data-testid=\"spreadsheet-corner-header\"\n style={{\n width: gridDims.headerWidth,\n height: gridDims.headerHeight,\n zIndex: 40\n }}\n />\n\n <div\n className=\"rsp-cells\"\n data-testid=\"spreadsheet-cells\"\n style={{\n transform: `translate(${-viewport.scrollX}px, ${-viewport.scrollY}px) scale(${viewport.zoom})`,\n transformOrigin: '0 0'\n }}\n >\n {visibleCells.map((cell) => (\n <CellComponent\n key={`${cell.col}${cell.row}`}\n domId={`${gridId}-cell-${cell.col}${cell.row}`}\n value={cellData.get(`${cell.col}${cell.row}`) ?? ''}\n row={cell.row}\n col={cell.col}\n selectionManager={selectionManager}\n cellToPixelBase={cellToPixelBase}\n getColumnWidth={getColumnWidth}\n getRowHeight={getRowHeight}\n customCellStyle={customCellStyle}\n customCellRenderer={customCellRenderer}\n inputValue={cellData.get(`${cell.col}${cell.row}`) ?? ''}\n editInputVersion={\n retryingEdit?.rowIndex === cell.row - 1 &&\n retryingEdit?.colIndex === columnToIndex(cell.col)\n ? retryingEdit.version\n : 0\n }\n width={width}\n height={height}\n />\n ))}\n {referenceSelectionRect && referenceSelection.type !== 'none' && (\n <div\n aria-hidden=\"true\"\n className={cn(\n 'rsp-reference-selection',\n `rsp-reference-selection-${referenceSelection.type}`\n )}\n data-testid=\"spreadsheet-reference-selection\"\n data-reference-id={referenceSelection.id}\n data-reference-phase={referenceSelection.type}\n style={referenceSelectionRect}\n />\n )}\n </div>\n\n {/* Overlay components layer */}\n {components && overlayChildren && overlayChildren.length > 0 && (\n <div\n ref={overlayContainerRef}\n className=\"rsp-overlays\"\n data-testid=\"spreadsheet-overlays\"\n onClick={handleOverlayBackgroundClick}\n >\n {overlaysToRender.map((child) => {\n const isChildVisible = visibleOverlays.includes(child);\n const isSelected = selectedOverlayId === child.id;\n const childZoom = child.zoom || 1;\n const isTextBox = child.component === 'RichText';\n const isMinimized = Boolean(child.minimized && !isTextBox);\n\n return (\n <div\n key={child.id}\n data-rsp-overlay={child.id}\n style={{\n position: 'absolute',\n width: child.width,\n height: isMinimized ? 0 : child.height,\n transform: `translate(${\n child.x * viewport.zoom - viewport.scrollX + gridDims.headerWidth\n }px, ${\n child.y * viewport.zoom - viewport.scrollY + gridDims.headerHeight\n }px) scale(${viewport.zoom})`,\n transformOrigin: '0 0',\n display: isChildVisible ? 'block' : 'none',\n pointerEvents: 'auto',\n zIndex: isSelected ? 50 : 5\n }}\n onClick={(e) => handleOverlayClick(child.id, e)}\n >\n <Frame\n child={child}\n isSelected={isSelected}\n zoom={viewport.zoom}\n viewport$={viewportStreamRef.current}\n onMove={(dx, dy) => handleOverlayMove(child.id, dx, dy)}\n onResize={(dw, dh, shift, handle) =>\n handleOverlayResize(child.id, dw, dh, shift, handle)\n }\n onSnapToCellsToggle={(enabled) => handleOverlaySnapToCellsToggle(child.id, enabled)}\n onReset={() => handleOverlayReset(child.id)}\n onMinimize={() => handleOverlayMinimize(child.id)}\n onClose={() => handleOverlayClose(child.id)}\n onInteractionEnd={commitCurrentOverlayChildren}\n />\n {!isMinimized && (\n <div\n style={{\n transform: childZoom !== 1 ? `scale(${childZoom})` : undefined,\n transformOrigin: '0 0',\n width: child.width / childZoom,\n height: child.height / childZoom,\n position: 'absolute',\n overflow: 'hidden',\n top: 0,\n left: 0\n }}\n >\n {components[child.component]?.(child, {\n isSelected,\n isMinimized: !!child.minimized\n })}\n </div>\n )}\n </div>\n );\n })}\n\n {/* Placeholder for overlay placement */}\n {overlayPlaceholder && placeholderPos && (\n <div\n className=\"rsp-overlay-placeholder\"\n style={{\n width: overlayPlaceholder.width,\n height: overlayPlaceholder.height,\n transform: `translate(${\n placeholderPos.x * viewport.zoom - viewport.scrollX + gridDims.headerWidth\n }px, ${\n placeholderPos.y * viewport.zoom - viewport.scrollY + gridDims.headerHeight\n }px) scale(${viewport.zoom})`,\n transformOrigin: '0 0'\n }}\n >\n <div className=\"rsp-overlay-placeholder-label\">\n {overlayPlaceholder.title}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nSpreadsheet.displayName = 'Spreadsheet';\n",
6
6
  "import { useCallback, useRef, useState } from \"react\";\n\nexport interface ResizeObserverSize {\n width: number;\n height: number;\n}\n\n/**\n * Observes the size of an element via a callback ref.\n *\n * Returns `[size, ref]` so the consumer can spread the ref onto any element.\n * Falls back to `getBoundingClientRect` once on attach so the first paint has\n * usable dimensions even before the observer fires.\n */\nexport function useResizeObserver<T extends HTMLElement = HTMLDivElement>(): [\n ResizeObserverSize,\n (element: T | null) => void,\n] {\n const [size, setSize] = useState<ResizeObserverSize>({\n width: 0,\n height: 0,\n });\n\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const ref = useCallback((element: T | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n\n if (!element) return;\n\n const rect = element.getBoundingClientRect();\n setSize((previous) =>\n previous.width === rect.width && previous.height === rect.height\n ? previous\n : { width: rect.width, height: rect.height },\n );\n\n if (typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n\n // `contentRect` is widely supported and sufficient here; border-box\n // sizing is not needed because the grid measures its own padding.\n const { width, height } = entry.contentRect;\n setSize((previous) =>\n previous.width === width && previous.height === height\n ? previous\n : { width, height },\n );\n });\n\n observer.observe(element);\n observerRef.current = observer;\n }, []);\n\n return [size, ref];\n}\n",
7
7
  "import { useEffect, useState } from \"react\";\n\nexport type ColorScheme = \"light\" | \"dark\";\n\n/**\n * Resolves the effective color scheme for canvas painting.\n *\n * CSS handles theming through `light-dark()`, but the 2D canvas context cannot\n * use it, so grid lines need a concrete resolved value. When an element is\n * supplied we read its computed `color-scheme`, which lets a consumer pin a\n * subtree to one mode; otherwise we fall back to the OS preference.\n */\nexport function useColorScheme(element?: HTMLElement | null): ColorScheme {\n const [scheme, setScheme] = useState<ColorScheme>(\"light\");\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return;\n\n const query = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n const resolve = (): ColorScheme => {\n if (element && typeof getComputedStyle === \"function\") {\n const declared = getComputedStyle(element).colorScheme;\n // Only an explicit single-value declaration overrides the OS setting;\n // \"light dark\" and \"normal\" mean \"follow the user preference\".\n if (declared === \"dark\") return \"dark\";\n if (declared === \"light\") return \"light\";\n }\n return query.matches ? \"dark\" : \"light\";\n };\n\n setScheme(resolve());\n\n const onChange = () => setScheme(resolve());\n query.addEventListener(\"change\", onChange);\n return () => query.removeEventListener(\"change\", onChange);\n }, [element]);\n\n return scheme;\n}\n",
8
8
  "/**\n * Contrast helpers for consumer-supplied cell backgrounds.\n *\n * The grid's default text color is theme-aware (`--rsp-text` resolves through\n * `light-dark()`), but a consumer-supplied `backgroundColor` usually is not —\n * spreadsheet fills typically come from a document model that stores one\n * literal color, e.g. `#f1f5f9`.\n *\n * Without help, a light literal fill combined with the dark theme's near-white\n * text renders as white-on-white and the cell becomes unreadable. These helpers\n * pick a readable ink for a known background instead.\n *\n * Only values we can actually parse are considered. Anything dynamic\n * (`var(...)`, `color-mix(...)`, gradients, `transparent`, unknown keywords)\n * returns `undefined` so the caller keeps the inherited themed color.\n */\n\n/** Text colors used when a background is opaque enough to classify. */\nconst DARK_INK = \"#101828\";\nconst LIGHT_INK = \"#ffffff\";\n\nconst NAMED_COLORS: Record<string, [number, number, number]> = {\n white: [255, 255, 255],\n black: [0, 0, 0],\n red: [255, 0, 0],\n green: [0, 128, 0],\n blue: [0, 0, 255],\n yellow: [255, 255, 0],\n orange: [255, 165, 0],\n purple: [128, 0, 128],\n gray: [128, 128, 128],\n grey: [128, 128, 128],\n silver: [192, 192, 192],\n};\n\ntype Rgba = { r: number; g: number; b: number; a: number };\n\nconst clamp255 = (value: number): number => Math.min(255, Math.max(0, value));\n\n/**\n * Parses hex (#rgb, #rgba, #rrggbb, #rrggbbaa), rgb()/rgba() and a small set of\n * common keywords. Returns `undefined` for anything else.\n */\nexport function parseCssColor(input: string): Rgba | undefined {\n const value = input.trim().toLowerCase();\n\n if (!value || value === \"transparent\" || value === \"currentcolor\" || value === \"inherit\") {\n return undefined;\n }\n\n // Dynamic or computed values cannot be resolved without layout.\n if (value.includes(\"var(\") || value.includes(\"color-mix(\") || value.includes(\"gradient\")) {\n return undefined;\n }\n\n const named = NAMED_COLORS[value];\n if (named) {\n return { r: named[0], g: named[1], b: named[2], a: 1 };\n }\n\n if (value.startsWith(\"#\")) {\n const hex = value.slice(1);\n\n const expand = (part: string): number => parseInt(part + part, 16);\n\n if (hex.length === 3 || hex.length === 4) {\n const r = expand(hex[0]!);\n const g = expand(hex[1]!);\n const b = expand(hex[2]!);\n const a = hex.length === 4 ? expand(hex[3]!) / 255 : 1;\n return Number.isNaN(r + g + b) ? undefined : { r, g, b, a };\n }\n\n if (hex.length === 6 || hex.length === 8) {\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n const a = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1;\n return Number.isNaN(r + g + b) ? undefined : { r, g, b, a };\n }\n\n return undefined;\n }\n\n const rgbMatch = value.match(/^rgba?\\(([^)]+)\\)$/);\n if (rgbMatch) {\n const parts = rgbMatch[1]!.split(/[\\s,/]+/).filter(Boolean);\n if (parts.length < 3) return undefined;\n\n const toChannel = (part: string): number =>\n part.endsWith(\"%\") ? (parseFloat(part) / 100) * 255 : parseFloat(part);\n\n const r = toChannel(parts[0]!);\n const g = toChannel(parts[1]!);\n const b = toChannel(parts[2]!);\n const alphaPart = parts[3];\n const a =\n alphaPart === undefined\n ? 1\n : alphaPart.endsWith(\"%\")\n ? parseFloat(alphaPart) / 100\n : parseFloat(alphaPart);\n\n if ([r, g, b, a].some((channel) => Number.isNaN(channel))) return undefined;\n\n return { r: clamp255(r), g: clamp255(g), b: clamp255(b), a };\n }\n\n return undefined;\n}\n\n/** Relative luminance per WCAG 2.1. */\nexport function relativeLuminance({ r, g, b }: Pick<Rgba, \"r\" | \"g\" | \"b\">): number {\n const channel = (value: number): number => {\n const srgb = value / 255;\n return srgb <= 0.03928 ? srgb / 12.92 : Math.pow((srgb + 0.055) / 1.055, 2.4);\n };\n\n return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);\n}\n\n/**\n * Returns a readable ink for `background`, or `undefined` when the background\n * is unparseable or too translucent to classify (in which case the themed\n * default should keep applying).\n */\nexport function getContrastingTextColor(background: string): string | undefined {\n const color = parseCssColor(background);\n\n // A mostly transparent fill lets the themed surface show through, so the\n // inherited themed text color remains the correct choice.\n if (!color || color.a < 0.5) return undefined;\n\n return relativeLuminance(color) > 0.45 ? DARK_INK : LIGHT_INK;\n}\n",
@@ -19,11 +19,11 @@
19
19
  "import type { CellStyle } from \"@ricsam/formula-engine\";\n\nexport type BorderSides = NonNullable<CellStyle[\"borderSides\"]>;\n\nexport type NormalizedBorderSides = {\n top: boolean;\n right: boolean;\n bottom: boolean;\n left: boolean;\n};\n\n/**\n * Normalizes a partial border-sides record into a fully specified one.\n *\n * When `borderSides` is omitted entirely the style is interpreted as \"all\n * sides\", which matches how a plain `borderColor` is expected to behave.\n *\n * @param sides Partial per-side flags from a `CellStyle`.\n * @param defaultAllWhenUnset Value used for every side when `sides` is undefined.\n */\nexport function normalizeBorderSides(\n sides: BorderSides | undefined,\n defaultAllWhenUnset = false,\n): NormalizedBorderSides {\n if (!sides) {\n return {\n top: defaultAllWhenUnset,\n right: defaultAllWhenUnset,\n bottom: defaultAllWhenUnset,\n left: defaultAllWhenUnset,\n };\n }\n\n return {\n top: Boolean(sides.top),\n right: Boolean(sides.right),\n bottom: Boolean(sides.bottom),\n left: Boolean(sides.left),\n };\n}\n\n/** True when at least one side should be drawn. */\nexport function hasAnyBorderSide(sides: NormalizedBorderSides): boolean {\n return sides.top || sides.right || sides.bottom || sides.left;\n}\n",
20
20
  "import type { CellDataType, SerializedCellValue } from \"@ricsam/formula-engine\";\n\n/**\n * Cell input coercion and display helpers.\n *\n * The grid always hands back raw strings from the editor. These helpers turn\n * that string into the value the engine should store, honouring an explicit\n * per-cell data type when one has been set.\n */\n\nconst TRUE_LITERALS = new Set([\"true\", \"yes\"]);\nconst FALSE_LITERALS = new Set([\"false\", \"no\"]);\n\n/** Parses a numeric string, accepting `,` as a decimal separator. */\nconst parseNumeric = (value: string): number | undefined => {\n const trimmed = value.trim();\n if (trimmed === \"\") return undefined;\n\n // Accept European-style decimals, but only when there is a single comma and\n // no dot, so thousands separators are not silently mangled.\n const normalized =\n trimmed.includes(\",\") && !trimmed.includes(\".\") && trimmed.split(\",\").length === 2\n ? trimmed.replace(\",\", \".\")\n : trimmed;\n\n const parsed = Number(normalized);\n return Number.isFinite(parsed) ? parsed : undefined;\n};\n\n/**\n * Converts raw editor input into the value to store for a cell.\n *\n * - Formulas (leading `=`) are always preserved verbatim.\n * - `\"general\"` infers number/boolean, otherwise keeps the string.\n * - An explicit data type forces that interpretation, falling back to the raw\n * string when the input cannot be represented.\n * - An empty string clears the cell (`undefined`).\n */\nexport function coerceCellInput(\n value: string,\n dataType: CellDataType = \"general\",\n): SerializedCellValue {\n if (value === \"\") return undefined;\n\n // Never reinterpret a formula; the engine owns its parsing.\n if (value.startsWith(\"=\")) return value;\n\n switch (dataType) {\n case \"text\":\n return value;\n\n case \"number\": {\n const parsed = parseNumeric(value);\n return parsed === undefined ? value : parsed;\n }\n\n case \"boolean\": {\n const lower = value.trim().toLowerCase();\n if (TRUE_LITERALS.has(lower)) return true;\n if (FALSE_LITERALS.has(lower)) return false;\n return value;\n }\n\n case \"general\":\n default: {\n const lower = value.trim().toLowerCase();\n if (TRUE_LITERALS.has(lower)) return true;\n if (FALSE_LITERALS.has(lower)) return false;\n\n const parsed = parseNumeric(value);\n // Only treat it as a number when the text round-trips, so values such as\n // \"1abc\" or a leading-zero code like \"007\" stay text.\n if (parsed !== undefined && String(parsed) === value.trim()) {\n return parsed;\n }\n\n return value;\n }\n }\n}\n\n/** Formats an evaluated value for display, with thousands separators. */\nexport function getCellDisplayText(value: SerializedCellValue): string {\n if (value === undefined) return \"\";\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (typeof value === \"number\") {\n return value.toLocaleString(\"en-US\", {\n minimumFractionDigits: 0,\n maximumFractionDigits: 10,\n });\n }\n return String(value);\n}\n\n/** Serializes a value for the clipboard (unformatted, round-trippable). */\nexport function getCellDisplayValue(value: SerializedCellValue): string {\n if (value === undefined) return \"\";\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n return String(value);\n}\n",
21
21
  "/**\n * Cell edit error reporting.\n *\n * The original component reported rejected edits through an app-specific\n * snackbar. A reusable library must not own UI for that, so errors are routed\n * through a subscribable sink instead: by default they are logged, and a host\n * app can subscribe to render them however it likes.\n */\n\nexport type CellEditErrorListener = (error: unknown) => void;\n\nconst listeners = new Set<CellEditErrorListener>();\n\n/**\n * Subscribes to cell edit errors (e.g. the engine rejecting a formula).\n *\n * @returns An unsubscribe function.\n */\nexport function onCellEditError(listener: CellEditErrorListener): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n/**\n * Default `onCellDataChangeError` handler.\n *\n * Notifies subscribers; if there are none it falls back to `console.error` so\n * failures are never silently swallowed during development.\n */\nexport function queueCellEditError(error: unknown): void {\n if (listeners.size === 0) {\n console.error(\"Cell edit rejected:\", error);\n return;\n }\n\n listeners.forEach((listener) => {\n try {\n listener(error);\n } catch (listenerError) {\n console.error(\"Cell edit error listener threw:\", listenerError);\n }\n });\n}\n",
22
- "import type { RangeAddress, SpreadsheetRange, SpreadsheetRangeEnd } from '@ricsam/formula-engine';\nimport { indexToColumn } from '@ricsam/formula-engine';\nimport type {\n SelectionManager,\n SMArea,\n ViewportAlignment\n} from '@ricsam/selection-manager';\n\nexport interface WorkbookSelectionContext {\n workbookName: string;\n sheetName: string;\n /**\n * Stable identity for this rendered workbook view. Supply this when the same\n * workbook/sheet can be mounted more than once, such as in split-screen panes.\n */\n viewId?: string;\n}\n\nexport interface WorkbookRangeFocusOptions {\n /** How the target range should be positioned in the spreadsheet viewport. */\n align?: ViewportAlignment;\n /** Target one mounted copy when the workbook/sheet is rendered more than once. */\n viewId?: string;\n}\n\ninterface PendingRangeFocus {\n address: RangeAddress;\n options: WorkbookRangeFocusOptions;\n}\n\nexport class WorkbookSelectionManager {\n private managers = new Map<SelectionManager, WorkbookSelectionContext>();\n private lastFocusedManager: {\n sm: SelectionManager;\n context: WorkbookSelectionContext;\n } | null = null;\n private lastSelections: RangeAddress[] = [];\n private selectionsByView = new Map<string, SMArea[]>();\n private listeners = new Set<(selections: RangeAddress[]) => void>();\n private cleanupFunctions = new Map<SelectionManager, () => void>();\n private pendingRangeFocus: PendingRangeFocus | null = null;\n private applyingRangeFocus = new Set<SelectionManager>();\n\n private getViewKey(context: WorkbookSelectionContext): string {\n return JSON.stringify([context.workbookName, context.sheetName, context.viewId ?? null]);\n }\n\n private cloneSmArea(area: SMArea): SMArea {\n return {\n start: { row: area.start.row, col: area.start.col },\n end: {\n row:\n area.end.row.type === 'infinity'\n ? { type: 'infinity' }\n : { type: 'number', value: area.end.row.value },\n col:\n area.end.col.type === 'infinity'\n ? { type: 'infinity' }\n : { type: 'number', value: area.end.col.value }\n }\n };\n }\n\n private smAreaToSpreadsheetRange(area: SMArea): SpreadsheetRange {\n const rowEnd: SpreadsheetRangeEnd =\n area.end.row.type === 'infinity'\n ? { type: 'infinity', sign: 'positive' }\n : { type: 'number', value: area.end.row.value };\n\n const colEnd: SpreadsheetRangeEnd =\n area.end.col.type === 'infinity'\n ? { type: 'infinity', sign: 'positive' }\n : { type: 'number', value: area.end.col.value };\n\n return {\n start: {\n col: area.start.col,\n row: area.start.row\n },\n end: {\n row: rowEnd,\n col: colEnd\n }\n };\n }\n\n private spreadsheetRangeToSmArea(range: SpreadsheetRange): SMArea {\n return {\n start: { row: range.start.row, col: range.start.col },\n end: {\n row:\n range.end.row.type === 'infinity'\n ? { type: 'infinity' }\n : { type: 'number', value: range.end.row.value },\n col:\n range.end.col.type === 'infinity'\n ? { type: 'infinity' }\n : { type: 'number', value: range.end.col.value }\n }\n };\n }\n\n private cloneRangeAddress(address: RangeAddress): RangeAddress {\n return {\n workbookName: address.workbookName,\n sheetName: address.sheetName,\n range: this.smAreaToSpreadsheetRange(this.spreadsheetRangeToSmArea(address.range))\n };\n }\n\n private areasToRangeAddresses(\n areas: readonly SMArea[],\n context: WorkbookSelectionContext\n ): RangeAddress[] {\n return areas.map((area) => ({\n workbookName: context.workbookName,\n sheetName: context.sheetName,\n range: this.smAreaToSpreadsheetRange(area)\n }));\n }\n\n private rememberSelections(\n manager: SelectionManager,\n context: WorkbookSelectionContext,\n areas: readonly SMArea[] = manager.getState().selections\n ): void {\n const cachedAreas = areas.map((area) => this.cloneSmArea(area));\n this.selectionsByView.set(this.getViewKey(context), cachedAreas);\n this.lastFocusedManager = { sm: manager, context };\n this.lastSelections = this.areasToRangeAddresses(cachedAreas, context);\n }\n\n private matchesContext(\n address: RangeAddress,\n context: WorkbookSelectionContext,\n viewId?: string\n ): boolean {\n return (\n address.workbookName === context.workbookName &&\n address.sheetName === context.sheetName &&\n (viewId === undefined || context.viewId === viewId)\n );\n }\n\n private applyRangeFocus(\n manager: SelectionManager,\n context: WorkbookSelectionContext,\n request: PendingRangeFocus\n ): void {\n const selection = this.spreadsheetRangeToSmArea(request.address.range);\n\n // SelectionManager notifies render subscribers for replaceSelections even\n // when this grid already has focus. Suppress only this coordinator's own\n // observers so one programmatic action emits one workbook-level update.\n this.applyingRangeFocus.add(manager);\n try {\n manager.replaceSelections([selection]);\n manager.focus();\n } finally {\n this.applyingRangeFocus.delete(manager);\n }\n manager.revealRange(selection, request.options);\n this.rememberSelections(manager, context, [selection]);\n this.emitChange();\n }\n\n private applyPendingRangeFocusOnMount(\n manager: SelectionManager,\n context: WorkbookSelectionContext\n ): void {\n const pending = this.pendingRangeFocus;\n if (!pending || !this.matchesContext(pending.address, context, pending.options.viewId)) return;\n\n // Spreadsheet registers its consumer of SelectionManager viewport requests\n // in a later effect than FormulaSheet registers with this manager. Defer\n // until that listener exists so a queued reveal cannot be lost on mount.\n queueMicrotask(() => {\n if (this.pendingRangeFocus !== pending) return;\n const mountedContext = this.managers.get(manager);\n if (\n !mountedContext ||\n !this.matchesContext(pending.address, mountedContext, pending.options.viewId)\n ) {\n return;\n }\n\n this.pendingRangeFocus = null;\n this.applyRangeFocus(manager, mountedContext, pending);\n });\n }\n\n /**\n * Register a SelectionManager with its workbook/sheet context\n * Returns a cleanup function to unregister\n */\n add(manager: SelectionManager, context: WorkbookSelectionContext): () => void {\n const registeredContext = { ...context };\n this.managers.set(manager, registeredContext);\n\n const cachedSelections = this.selectionsByView.get(this.getViewKey(registeredContext));\n if (cachedSelections && manager.getState().selections.length === 0) {\n manager.replaceSelections(cachedSelections);\n }\n\n // Listen to focus changes\n const focusCleanup = manager.observeStateChange(\n (state) => state.hasFocus,\n (hasFocus) => {\n if (hasFocus && !this.applyingRangeFocus.has(manager)) {\n this.rememberSelections(manager, registeredContext);\n this.emitChange();\n }\n }\n );\n\n // Listen to selection changes\n const selectionCleanup = manager.observeStateChange(\n (state) => JSON.stringify(state.selections),\n (selectionsJson) => {\n if (this.applyingRangeFocus.has(manager)) return;\n const selections = JSON.parse(selectionsJson) as SMArea[];\n if (selections && selections.length > 0) {\n this.rememberSelections(manager, registeredContext, selections);\n this.emitChange();\n }\n }\n );\n\n // Store combined cleanup function\n const cleanup = () => {\n focusCleanup();\n selectionCleanup();\n this.managers.delete(manager);\n this.cleanupFunctions.delete(manager);\n if (this.lastFocusedManager?.sm === manager) {\n // Keep the logical selection while a FormulaWorkbook replaces the grid\n // for a sheet switch. A later mount of this view restores its own cache.\n this.rememberSelections(manager, registeredContext);\n this.lastFocusedManager = null;\n }\n };\n\n this.cleanupFunctions.set(manager, cleanup);\n this.applyPendingRangeFocusOnMount(manager, registeredContext);\n return cleanup;\n }\n\n /**\n * Get the SelectionManager that was last focused or had selection activity\n */\n getLastFocusedSelectionManager(): {\n sm: SelectionManager;\n context: WorkbookSelectionContext;\n } | null {\n return this.lastFocusedManager;\n }\n\n /**\n * Get all current selections from the last focused manager.\n */\n getSelections(): RangeAddress[] {\n return this.lastSelections.map((selection) => this.cloneRangeAddress(selection));\n }\n\n /**\n * Get the last/primary selection from the last focused manager\n */\n getLastSelection(): RangeAddress | null {\n const selections = this.getSelections();\n return selections[selections.length - 1] ?? null;\n }\n\n /**\n * Subscribe to selection changes\n * Returns cleanup function\n */\n onSelectionChange(callback: (selections: RangeAddress[]) => void): () => void {\n this.listeners.add(callback);\n return () => {\n this.listeners.delete(callback);\n };\n }\n\n /**\n * Format the last selection as a range string\n * e.g., \"[Workbook]Sheet!A1:C10\" or \"[Workbook]'My Sheet'!A1:INFINITY\"\n */\n formatLastSelectionAsRange(): string {\n const lastSelection = this.getLastSelection();\n if (!lastSelection) {\n return '';\n }\n\n const { workbookName, sheetName, range } = lastSelection;\n\n // Convert start position to Excel notation\n const startCol = indexToColumn(range.start.col);\n const startRow = range.start.row + 1; // Convert to 1-based\n\n // Convert end position to Excel notation\n let endCol: string;\n let endRow: string;\n\n // Handle end column\n if (range.end.col.type === 'infinity') {\n endCol = '∞';\n } else {\n endCol = indexToColumn(range.end.col.value);\n }\n\n // Handle end row\n if (range.end.row.type === 'infinity') {\n endRow = '∞';\n } else {\n endRow = String(range.end.row.value + 1); // Convert to 1-based\n }\n\n // Build range string based on what's infinite\n let rangeStr: string;\n const isColInfinity = range.end.col.type === 'infinity';\n const isRowInfinity = range.end.row.type === 'infinity';\n\n if (isColInfinity && isRowInfinity) {\n // Both infinite: A5:INFINITY\n rangeStr = `${startCol}${startRow}:INFINITY`;\n } else if (isColInfinity) {\n // Column infinite: A5:10 (row-bounded)\n rangeStr = `${startCol}${startRow}:${endRow}`;\n } else if (isRowInfinity) {\n // Row infinite: A5:C (col-bounded)\n rangeStr = `${startCol}${startRow}:${endCol}`;\n } else {\n // Closed rectangle: A5:C10\n rangeStr = `${startCol}${startRow}:${endCol}${endRow}`;\n }\n\n // Quote sheet name if it contains spaces or special characters\n const needsQuotes = /[ '!]/.test(sheetName);\n const sheetRef = needsQuotes ? `'${sheetName.replace(/'/g, \"''\")}'` : sheetName;\n\n // Return formatted string: [Workbook]Sheet!Range\n return `[${workbookName}]${sheetRef}!${rangeStr}`;\n }\n\n /**\n * Blur all selection managers (remove focus from all)\n * This should be called when the component loses focus\n */\n blur(): void {\n this.managers.forEach((_context, manager) => {\n manager.clearSelections();\n manager.blur();\n });\n // Clear the last focused manager and emit change to notify listeners\n this.selectionsByView.clear();\n this.lastFocusedManager = null;\n this.lastSelections = [];\n this.emitChange();\n }\n\n /**\n * Focus the selection manager for a specific workbook (first sheet found).\n * This is useful when programmatically switching focus, e.g., after maximizing a window.\n */\n focusWorkbook(workbookName: string, viewId?: string): void {\n for (const [manager, context] of this.managers) {\n if (\n context.workbookName === workbookName &&\n (viewId === undefined || context.viewId === viewId)\n ) {\n manager.focus();\n this.rememberSelections(manager, context);\n this.emitChange();\n return;\n }\n }\n }\n\n /**\n * Focus the selection manager for a specific sheet without changing the cell selection.\n */\n focusSheet(workbookName: string, sheetName: string, viewId?: string): boolean {\n for (const [manager, context] of this.managers) {\n if (\n context.workbookName === workbookName &&\n context.sheetName === sheetName &&\n (viewId === undefined || context.viewId === viewId)\n ) {\n manager.focus();\n this.rememberSelections(manager, context);\n this.emitChange();\n return true;\n }\n }\n return false;\n }\n\n /**\n * Focus a specific cell in a specific workbook and sheet.\n * Finds the matching SelectionManager, sets its selection to the given cell,\n * and focuses it.\n *\n * @returns true when focused immediately, false when queued until the target\n * sheet mounts.\n */\n focusCell(\n workbookName: string,\n sheetName: string,\n row: number,\n col: number,\n options: WorkbookRangeFocusOptions = {}\n ): boolean {\n return this.focusRange(\n {\n workbookName,\n sheetName,\n range: {\n start: { row, col },\n end: {\n row: { type: 'number', value: row },\n col: { type: 'number', value: col }\n }\n }\n },\n options\n );\n }\n\n /**\n * Focus, select and reveal a range in its workbook/sheet.\n *\n * If the sheet is not mounted yet, the latest request is queued and applied\n * when that sheet registers. This lets controlled workbooks switch their\n * active sheet before the target grid exists.\n *\n * @returns true when applied immediately, false when queued for a future mount.\n */\n focusRange(address: RangeAddress, options: WorkbookRangeFocusOptions = {}): boolean {\n const request: PendingRangeFocus = {\n address: this.cloneRangeAddress(address),\n options: { ...options }\n };\n\n for (const [manager, context] of this.managers) {\n if (!this.matchesContext(request.address, context, request.options.viewId)) continue;\n this.pendingRangeFocus = null;\n this.applyRangeFocus(manager, context, request);\n return true;\n }\n\n this.pendingRangeFocus = request;\n return false;\n }\n\n /** Cancel the latest queued range focus before its target view mounts. */\n cancelPendingFocusRange(): void {\n this.pendingRangeFocus = null;\n }\n\n /**\n * Notify all listeners of selection change\n */\n private emitChange(): void {\n const currentSelection = this.getLastSelection();\n const selections = currentSelection ? [currentSelection] : [];\n this.listeners.forEach((listener) => {\n listener(selections);\n });\n }\n}\n",
22
+ "import type { RangeAddress, SpreadsheetRange, SpreadsheetRangeEnd } from '@ricsam/formula-engine';\nimport { indexToColumn } from '@ricsam/formula-engine';\nimport type {\n SelectionManager,\n SMArea,\n ViewportAlignment\n} from '@ricsam/selection-manager';\n\nexport interface WorkbookSelectionContext {\n workbookName: string;\n sheetName: string;\n /**\n * Stable identity for this rendered workbook view. Supply this when the same\n * workbook/sheet can be mounted more than once, such as in split-screen panes.\n */\n viewId?: string;\n}\n\nexport interface WorkbookRangeFocusOptions {\n /** How the target range should be positioned in the spreadsheet viewport. */\n align?: ViewportAlignment;\n /** Target one mounted copy when the workbook/sheet is rendered more than once. */\n viewId?: string;\n}\n\ninterface PendingRangeFocus {\n address: RangeAddress;\n options: WorkbookRangeFocusOptions;\n}\n\nexport class WorkbookSelectionManager {\n private managers = new Map<SelectionManager, WorkbookSelectionContext>();\n private lastFocusedManager: {\n sm: SelectionManager;\n context: WorkbookSelectionContext;\n } | null = null;\n private lastSelections: RangeAddress[] = [];\n private selectionsByView = new Map<string, SMArea[]>();\n private listeners = new Set<(selections: RangeAddress[]) => void>();\n private cleanupFunctions = new Map<SelectionManager, () => void>();\n private pendingRangeFocus: PendingRangeFocus | null = null;\n private applyingRangeFocus = new Set<SelectionManager>();\n\n private getViewKey(context: WorkbookSelectionContext): string {\n return JSON.stringify([context.workbookName, context.sheetName, context.viewId ?? null]);\n }\n\n private cloneSmArea(area: SMArea): SMArea {\n return {\n start: { row: area.start.row, col: area.start.col },\n end: {\n row:\n area.end.row.type === 'infinity'\n ? { type: 'infinity' }\n : { type: 'number', value: area.end.row.value },\n col:\n area.end.col.type === 'infinity'\n ? { type: 'infinity' }\n : { type: 'number', value: area.end.col.value }\n }\n };\n }\n\n private smAreaToSpreadsheetRange(area: SMArea): SpreadsheetRange {\n const rowEnd: SpreadsheetRangeEnd =\n area.end.row.type === 'infinity'\n ? { type: 'infinity', sign: 'positive' }\n : { type: 'number', value: area.end.row.value };\n\n const colEnd: SpreadsheetRangeEnd =\n area.end.col.type === 'infinity'\n ? { type: 'infinity', sign: 'positive' }\n : { type: 'number', value: area.end.col.value };\n\n return {\n start: {\n col: area.start.col,\n row: area.start.row\n },\n end: {\n row: rowEnd,\n col: colEnd\n }\n };\n }\n\n private spreadsheetRangeToSmArea(range: SpreadsheetRange): SMArea {\n return {\n start: { row: range.start.row, col: range.start.col },\n end: {\n row:\n range.end.row.type === 'infinity'\n ? { type: 'infinity' }\n : { type: 'number', value: range.end.row.value },\n col:\n range.end.col.type === 'infinity'\n ? { type: 'infinity' }\n : { type: 'number', value: range.end.col.value }\n }\n };\n }\n\n private cloneRangeAddress(address: RangeAddress): RangeAddress {\n return {\n workbookName: address.workbookName,\n sheetName: address.sheetName,\n range: this.smAreaToSpreadsheetRange(this.spreadsheetRangeToSmArea(address.range))\n };\n }\n\n private areasToRangeAddresses(\n areas: readonly SMArea[],\n context: WorkbookSelectionContext\n ): RangeAddress[] {\n return areas.map((area) => ({\n workbookName: context.workbookName,\n sheetName: context.sheetName,\n range: this.smAreaToSpreadsheetRange(area)\n }));\n }\n\n private rememberSelections(\n manager: SelectionManager,\n context: WorkbookSelectionContext,\n areas: readonly SMArea[] = manager.getState().selections\n ): void {\n const cachedAreas = areas.map((area) => this.cloneSmArea(area));\n this.selectionsByView.set(this.getViewKey(context), cachedAreas);\n this.lastFocusedManager = { sm: manager, context };\n this.lastSelections = this.areasToRangeAddresses(cachedAreas, context);\n }\n\n private matchesContext(\n address: RangeAddress,\n context: WorkbookSelectionContext,\n viewId?: string\n ): boolean {\n return (\n address.workbookName === context.workbookName &&\n address.sheetName === context.sheetName &&\n (viewId === undefined || context.viewId === viewId)\n );\n }\n\n private applyRangeFocus(\n manager: SelectionManager,\n context: WorkbookSelectionContext,\n request: PendingRangeFocus\n ): void {\n const selection = this.spreadsheetRangeToSmArea(request.address.range);\n\n // SelectionManager notifies render subscribers for replaceSelections even\n // when this grid already has focus. Suppress only this coordinator's own\n // observers so one programmatic action emits one workbook-level update.\n this.applyingRangeFocus.add(manager);\n try {\n manager.replaceSelections([selection]);\n manager.focus();\n } finally {\n this.applyingRangeFocus.delete(manager);\n }\n manager.revealRange(selection, request.options);\n this.rememberSelections(manager, context, [selection]);\n this.emitChange();\n }\n\n private applyPendingRangeFocusOnMount(\n manager: SelectionManager,\n context: WorkbookSelectionContext\n ): void {\n const pending = this.pendingRangeFocus;\n if (!pending || !this.matchesContext(pending.address, context, pending.options.viewId)) return;\n\n // Spreadsheet registers its consumer of SelectionManager viewport requests\n // in a later effect than FormulaSheet registers with this manager. Defer\n // until that listener exists so a queued reveal cannot be lost on mount.\n queueMicrotask(() => {\n if (this.pendingRangeFocus !== pending) return;\n const mountedContext = this.managers.get(manager);\n if (\n !mountedContext ||\n !this.matchesContext(pending.address, mountedContext, pending.options.viewId)\n ) {\n return;\n }\n\n this.pendingRangeFocus = null;\n this.applyRangeFocus(manager, mountedContext, pending);\n });\n }\n\n /**\n * Register a SelectionManager with its workbook/sheet context\n * Returns a cleanup function to unregister\n */\n add(manager: SelectionManager, context: WorkbookSelectionContext): () => void {\n const registeredContext = { ...context };\n this.managers.set(manager, registeredContext);\n\n const cachedSelections = this.selectionsByView.get(this.getViewKey(registeredContext));\n if (cachedSelections && manager.getState().selections.length === 0) {\n manager.replaceSelections(cachedSelections);\n }\n\n // observeStateChange invokes its first callback on any subsequent update,\n // even if the selected value is unchanged. Seed baselines so unrelated\n // window mouseup/blur events cannot activate a view's saved selection.\n let previousFocus = manager.getState().hasFocus;\n let previousSelections = JSON.stringify(manager.getState().selections);\n const focusCleanup = manager.observeStateChange(\n (state) => state.hasFocus,\n (hasFocus) => {\n if (hasFocus === previousFocus) return;\n previousFocus = hasFocus;\n if (hasFocus && !this.applyingRangeFocus.has(manager)) {\n this.rememberSelections(manager, registeredContext);\n this.emitChange();\n }\n }\n );\n\n // Listen to selection changes\n const selectionCleanup = manager.observeStateChange(\n (state) => JSON.stringify(state.selections),\n (selectionsJson) => {\n if (selectionsJson === previousSelections) return;\n previousSelections = selectionsJson;\n if (this.applyingRangeFocus.has(manager)) return;\n const selections = JSON.parse(selectionsJson) as SMArea[];\n if (selections && selections.length > 0) {\n this.rememberSelections(manager, registeredContext, selections);\n this.emitChange();\n }\n }\n );\n\n // Store combined cleanup function\n const cleanup = () => {\n focusCleanup();\n selectionCleanup();\n this.managers.delete(manager);\n this.cleanupFunctions.delete(manager);\n if (this.lastFocusedManager?.sm === manager) {\n // Keep the logical selection while a FormulaWorkbook replaces the grid\n // for a sheet switch. A later mount of this view restores its own cache.\n this.rememberSelections(manager, registeredContext);\n this.lastFocusedManager = null;\n }\n };\n\n this.cleanupFunctions.set(manager, cleanup);\n this.applyPendingRangeFocusOnMount(manager, registeredContext);\n return cleanup;\n }\n\n /**\n * Get the SelectionManager that was last focused or had selection activity\n */\n getLastFocusedSelectionManager(): {\n sm: SelectionManager;\n context: WorkbookSelectionContext;\n } | null {\n return this.lastFocusedManager;\n }\n\n /**\n * Get all current selections from the last focused manager.\n */\n getSelections(): RangeAddress[] {\n return this.lastSelections.map((selection) => this.cloneRangeAddress(selection));\n }\n\n /**\n * Get the last/primary selection from the last focused manager\n */\n getLastSelection(): RangeAddress | null {\n const selections = this.getSelections();\n return selections[selections.length - 1] ?? null;\n }\n\n /**\n * Subscribe to selection changes\n * Returns cleanup function\n */\n onSelectionChange(callback: (selections: RangeAddress[]) => void): () => void {\n this.listeners.add(callback);\n return () => {\n this.listeners.delete(callback);\n };\n }\n\n /**\n * Format the last selection as a range string\n * e.g., \"[Workbook]Sheet!A1:C10\" or \"[Workbook]'My Sheet'!A1:INFINITY\"\n */\n formatLastSelectionAsRange(): string {\n const lastSelection = this.getLastSelection();\n if (!lastSelection) {\n return '';\n }\n\n const { workbookName, sheetName, range } = lastSelection;\n\n // Convert start position to Excel notation\n const startCol = indexToColumn(range.start.col);\n const startRow = range.start.row + 1; // Convert to 1-based\n\n // Convert end position to Excel notation\n let endCol: string;\n let endRow: string;\n\n // Handle end column\n if (range.end.col.type === 'infinity') {\n endCol = '∞';\n } else {\n endCol = indexToColumn(range.end.col.value);\n }\n\n // Handle end row\n if (range.end.row.type === 'infinity') {\n endRow = '∞';\n } else {\n endRow = String(range.end.row.value + 1); // Convert to 1-based\n }\n\n // Build range string based on what's infinite\n let rangeStr: string;\n const isColInfinity = range.end.col.type === 'infinity';\n const isRowInfinity = range.end.row.type === 'infinity';\n\n if (isColInfinity && isRowInfinity) {\n // Both infinite: A5:INFINITY\n rangeStr = `${startCol}${startRow}:INFINITY`;\n } else if (isColInfinity) {\n // Column infinite: A5:10 (row-bounded)\n rangeStr = `${startCol}${startRow}:${endRow}`;\n } else if (isRowInfinity) {\n // Row infinite: A5:C (col-bounded)\n rangeStr = `${startCol}${startRow}:${endCol}`;\n } else {\n // Closed rectangle: A5:C10\n rangeStr = `${startCol}${startRow}:${endCol}${endRow}`;\n }\n\n // Quote sheet name if it contains spaces or special characters\n const needsQuotes = /[ '!]/.test(sheetName);\n const sheetRef = needsQuotes ? `'${sheetName.replace(/'/g, \"''\")}'` : sheetName;\n\n // Return formatted string: [Workbook]Sheet!Range\n return `[${workbookName}]${sheetRef}!${rangeStr}`;\n }\n\n /**\n * Blur all selection managers (remove focus from all)\n * This should be called when the component loses focus\n */\n blur(): void {\n this.managers.forEach((_context, manager) => {\n manager.clearSelections();\n manager.blur();\n });\n // Clear the last focused manager and emit change to notify listeners\n this.selectionsByView.clear();\n this.lastFocusedManager = null;\n this.lastSelections = [];\n this.emitChange();\n }\n\n /**\n * Focus the selection manager for a specific workbook (first sheet found).\n * This is useful when programmatically switching focus, e.g., after maximizing a window.\n */\n focusWorkbook(workbookName: string, viewId?: string): void {\n for (const [manager, context] of this.managers) {\n if (\n context.workbookName === workbookName &&\n (viewId === undefined || context.viewId === viewId)\n ) {\n manager.focus();\n this.rememberSelections(manager, context);\n this.emitChange();\n return;\n }\n }\n }\n\n /**\n * Focus the selection manager for a specific sheet without changing the cell selection.\n */\n focusSheet(workbookName: string, sheetName: string, viewId?: string): boolean {\n for (const [manager, context] of this.managers) {\n if (\n context.workbookName === workbookName &&\n context.sheetName === sheetName &&\n (viewId === undefined || context.viewId === viewId)\n ) {\n manager.focus();\n this.rememberSelections(manager, context);\n this.emitChange();\n return true;\n }\n }\n return false;\n }\n\n /**\n * Focus a specific cell in a specific workbook and sheet.\n * Finds the matching SelectionManager, sets its selection to the given cell,\n * and focuses it.\n *\n * @returns true when focused immediately, false when queued until the target\n * sheet mounts.\n */\n focusCell(\n workbookName: string,\n sheetName: string,\n row: number,\n col: number,\n options: WorkbookRangeFocusOptions = {}\n ): boolean {\n return this.focusRange(\n {\n workbookName,\n sheetName,\n range: {\n start: { row, col },\n end: {\n row: { type: 'number', value: row },\n col: { type: 'number', value: col }\n }\n }\n },\n options\n );\n }\n\n /**\n * Focus, select and reveal a range in its workbook/sheet.\n *\n * If the sheet is not mounted yet, the latest request is queued and applied\n * when that sheet registers. This lets controlled workbooks switch their\n * active sheet before the target grid exists.\n *\n * @returns true when applied immediately, false when queued for a future mount.\n */\n focusRange(address: RangeAddress, options: WorkbookRangeFocusOptions = {}): boolean {\n const request: PendingRangeFocus = {\n address: this.cloneRangeAddress(address),\n options: { ...options }\n };\n\n for (const [manager, context] of this.managers) {\n if (!this.matchesContext(request.address, context, request.options.viewId)) continue;\n this.pendingRangeFocus = null;\n this.applyRangeFocus(manager, context, request);\n return true;\n }\n\n this.pendingRangeFocus = request;\n return false;\n }\n\n /** Cancel the latest queued range focus before its target view mounts. */\n cancelPendingFocusRange(): void {\n this.pendingRangeFocus = null;\n }\n\n /**\n * Notify all listeners of selection change\n */\n private emitChange(): void {\n const currentSelection = this.getLastSelection();\n const selections = currentSelection ? [currentSelection] : [];\n this.listeners.forEach((listener) => {\n listener(selections);\n });\n }\n}\n",
23
23
  "export const ZOOM_FACTOR = 0.05; // Normal zoom speed\nexport const CONTROLLED_ZOOM_FACTOR = 0.01; // Slower zoom when holding opt/alt\n\nexport const DEFAULT_ZOOM = 1;\nexport const MIN_ZOOM = 0.5;\nexport const MAX_ZOOM = 3;\n",
24
24
  "import { useEffect } from 'react';\n\nexport const useClickAway = (ref: HTMLElement | null, callback: (away: boolean) => void) => {\n useEffect(() => {\n const handleClickAway = (event: MouseEvent) => {\n if (ref) {\n const away = !ref.contains(event.target as Node);\n callback(away);\n }\n };\n\n document.addEventListener('mousedown', handleClickAway);\n return () => {\n document.removeEventListener('mousedown', handleClickAway);\n };\n }, [ref, callback]);\n};\n"
25
25
  ],
26
- "mappings": "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",
27
- "debugId": "7847981F1291DEF064756E2164756E21",
26
+ "mappings": "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",
27
+ "debugId": "A4984B6C177B85D364756E2164756E21",
28
28
  "names": []
29
29
  }