@ricsam/react-spreadsheets 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/dist/cjs/lib.cjs +103 -49
- package/dist/cjs/lib.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/mjs/lib.mjs +102 -46
- package/dist/mjs/lib.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/types/spreadsheet/spreadsheet.d.ts +4 -0
- package/package.json +2 -2
package/dist/cjs/lib.cjs.map
CHANGED
|
@@ -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",
|
|
@@ -23,7 +23,7 @@
|
|
|
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": "
|
|
26
|
+
"mappings": "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",
|
|
27
|
+
"debugId": "95BAABDC3CCBBC2364756E2164756E21",
|
|
28
28
|
"names": []
|
|
29
29
|
}
|