sheet-happens 0.0.35 → 0.0.37

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/props.ts","../src/mouse.ts","../src/scroll.ts","../src/clipboard.ts","../src/layout.ts","../src/style.ts","../src/render.ts","../src/sheet.tsx"],"sourcesContent":["import { XY, Rectangle, Selection, Clickable, Direction, Style } from './types';\n\nexport const INITIAL_MAX_SCROLL: XY = [ 2000, 1000 ];\n\nexport const ORIGIN: XY = [ 0, 0 ];\nexport const ONE_ONE: XY = [ 1, 1 ];\n\nexport const NO_CELL: XY = [ -1, -1 ];\nexport const NO_SELECTION: Rectangle = [NO_CELL, NO_CELL];\nexport const NO_SELECTIONS: Selection[] = [];\nexport const NO_CLICKABLES: Clickable[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 65536;\nexport const MAX_XY: XY = [ MAX_SEARCHABLE_INDEX, MAX_SEARCHABLE_INDEX ];\n\nexport const COLORS = {\n selectionBorder: '#1a66ff',\n selectionBackground: '#e8f0ff',\n\n gridLine: '#0000001f',\n\n dragGhost: '#1a66ff30',\n dropTarget: '#1a66ff',\n knobAreaBorder: '#707070',\n\n headerBackground: '#f6f9fc',\n headerText: '#666666',\n headerActive: '#e8f0ff',\n headerActiveText: '#1a66ff',\n\n headerSelected: '#1a66ff',\n headerSelectedText: '#ffffff',\n};\n\nexport const SIZES = {\n knobArea: 6,\n headerWidth: 50,\n headerHeight: 22,\n minimumWidth: 50,\n minimumHeight: 22,\n resizeZone: 4,\n scrollZone: 50,\n scrollSpeed: 30,\n};\n\nexport const DEFAULT_CELL_STYLE: Required<Style> = {\n textAlign: 'left',\n fontSize: 12,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const HEADER_ACTIVE_STYLE = {\n color: COLORS.headerActiveText,\n};\n\nexport const HEADER_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelected,\n color: COLORS.headerSelectedText,\n};\n\nexport const ARROW_KEYS: Record<string, Direction> = {\n 'ArrowRight': 'right',\n 'ArrowLeft': 'left',\n 'ArrowUp': 'up',\n 'ArrowDown': 'down',\n};\n","export const tail = <T,>(list: T[]): T => list[list.length - 1];\n\nexport const clamp = (x: number, min: number, max: number) => Math.max(Math.min(max, x), min);\n\nexport const seq = (n: number, s: number = 0, d: number = 1): number[] => Array.from({ length: n }).map((_, i: number) => s + d * i);\n\nexport const isInRange = (x: number, min: number, max: number) => min <= x && x <= max;\nexport const isInRangeLeft = (x: number, min: number, max: number) => min <= x && x < max;\nexport const isInRangeRight = (x: number, min: number, max: number) => min < x && x <= max;\nexport const isInRangeCenter = (x: number, min: number, max: number) => min < x && x < max;\n\n","import { XY, Rectangle } from './types';\nimport { clamp } from './util';\n\nexport const addXY = (a: XY, b: XY): XY => [a[0] + b[0], a[1] + b[1]];\nexport const subXY = (a: XY, b: XY): XY => [a[0] - b[0], a[1] - b[1]];\nexport const mulXY = (a: XY, b: XY): XY => [a[0] * b[0], a[1] * b[1]];\nexport const maxXY = (a: XY, b: XY): XY => [Math.max(a[0], b[0]), Math.max(a[1], b[1])];\nexport const minXY = (a: XY, b: XY): XY => [Math.min(a[0], b[0]), Math.min(a[1], b[1])];\nexport const clampXY = (p: XY, min: XY, max: XY = [Infinity, Infinity]): XY => [clamp(p[0], min[0], max[0]), clamp(p[1], min[1], max[1])];\n\nexport const getDirectionStep = (direction: string): XY => {\n if (direction === 'left') return [-1, 0];\n if (direction === 'right') return [1, 0];\n if (direction === 'up') return [0, -1];\n if (direction === 'down') return [0, 1];\n return [0, 0];\n};\n\nexport const isSameXY = (a: XY, b: XY) => a[0] === b[0] && a[1] === b[1];\n\nexport const isSameSelection = (a: Rectangle, b: Rectangle) => {\n const [a1, a2] = a;\n const [b1, b2] = b;\n return isSameXY(a1, b1) && isSameXY(a2, b2);\n};\n\n// Selection is infinite horizontally\nexport const isMaybeRowSelection = (selection: Rectangle) => {\n const [[left], [right]] = selection;\n return (left === -1 && right === -1);\n};\n\n// Selection is infinite vertically\nexport const isMaybeColumnSelection = (selection: Rectangle) => {\n const [[, top], [, bottom]] = selection;\n return (top === -1 && bottom === -1);\n};\n\n// Selection is ONLY infinite horizontally\nexport const isRowSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return (left === -1 && right === -1) && (top !== -1 && bottom !== -1);\n};\n\n// Selection is ONLY infinite vertically\nexport const isColumnSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return (top === -1 && bottom === -1) && (left !== -1 && right !== -1);\n};\n\n// Selection is not infinite\nexport const isCellSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return (left !== -1 && right !== -1) && (top !== -1 && bottom !== -1);\n};\n\n// Selection is null\nexport const isEmptySelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return (left === -1 && right === -1) && (top === -1 && bottom === -1);\n};\n\n// Test cell inside selection (inclusive edges)\nexport const isPointInsideSelection = (selection: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n const [x, y] = point;\n return (x >= left && x <= right) && (y >= top && y <= bottom);\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n let [[left, top], [right, bottom]] = selection;\n if (left > right) {\n [left, right] = [right, left];\n }\n if (top > bottom) {\n [top, bottom] = [bottom, top];\n }\n\n return [[left, top], [right, bottom]];\n};\n","import { Direction, XY, CellContentType, CellProperty, CellPropertyFunction, PropTypes, RowOrColumnProperty, RowOrColumnPropertyFunction } from './types';\nimport { MAX_SEARCHABLE_INDEX, MAX_XY, ORIGIN } from './constants';\nimport { clampXY, addXY, subXY, maxXY, getDirectionStep } from './coordinate';\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnProp = <T extends PropTypes>(\n rowColProp: RowOrColumnProperty<T> | undefined,\n defaultValue: T\n): RowOrColumnPropertyFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n}\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellProp = <T extends PropTypes>(\n cellProp: CellProperty<T> | undefined,\n defaultValue: T\n): CellPropertyFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n}\n\nexport const findApproxMaxEditDataIndex = (editData: CellPropertyFunction<string>): XY => {\n let x = 0;\n let y = 0;\n let howManyEmpty = 0;\n let growthIncrement = 10;\n let growthIncrementFactor = 1.5;\n\n // x\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let yy = 0; yy < 10; yy++) {\n const data = editData(x, yy);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n x += growthIncrement;\n if (x > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n\n howManyEmpty = 0;\n growthIncrement = 10;\n growthIncrementFactor = 1.5;\n\n // y\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let xx = 0; xx < 10; xx++) {\n const data = editData(xx, y);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n y += growthIncrement;\n if (y > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n return [x, y];\n}\n\nexport const findInDisplayData = (\n displayData: CellPropertyFunction<CellContentType>,\n start: XY,\n direction: Direction,\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = clampXY(start, ORIGIN, MAX_XY);\n const first = displayData(...addXY(cell, step));\n const firstFilled = first !== '' && first !== null && first !== undefined;\n\n if (!firstFilled) {\n cell = addXY(cell, step);\n }\n\n let [cellX, cellY] = cell;\n while (cellX <= MAX_SEARCHABLE_INDEX && cellY <= MAX_SEARCHABLE_INDEX && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY);\n\n // if first cell is filled, find the last filled cell, so first look for first unfilled\n if (firstFilled && (data === '' || data === null || data === undefined)) {\n return subXY(cell, step);\n }\n // if first cell is not filled, just find the first filled\n if (!firstFilled && data !== '' && data !== null && data !== undefined) {\n return cell;\n }\n\n [cellX, cellY] = cell = addXY(cell, step);\n }\n\n return maxXY(cell, [0, 0]);\n}\n","import { CellLayout, CellPropertyFunction, Change, Clickable, Rectangle, RowOrColumnPropertyFunction, SheetMouseEvent, SheetStyle, VisibleLayout, XY } from './types';\nimport { MouseEvent, PointerEvent, RefObject, useCallback, useMemo, useRef, useState } from 'react';\nimport { normalizeSelection, isColumnSelection, isRowSelection, isCellSelection, isMaybeRowSelection, isPointInsideSelection, addXY, subXY, maxXY } from './coordinate';\nimport { ONE_ONE, ORIGIN, SIZES } from './constants';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange } from './util';\n\ntype DragOp = {\n anchor: number,\n scroll: number,\n size: number,\n indices: number[],\n};\n\nexport const useMouse = (\n hitmapRef: RefObject<Clickable[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n\n canSizeColumn: RowOrColumnPropertyFunction<boolean | null>,\n canSizeRow: RowOrColumnPropertyFunction<boolean | null>,\n canOrderColumn: RowOrColumnPropertyFunction<boolean | null>,\n canOrderRow: RowOrColumnPropertyFunction<boolean | null>,\n\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n sheetStyle: SheetStyle,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragOffsetChange?: (dragOffset: XY | null) => void,\n onDropTargetChange?: (selection: Rectangle | null) => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n\n onInvalidateColumn?: (column: number) => void,\n onInvalidateRow?: (row: number) => void,\n\n onChange?: (changes: Change[]) => void,\n onColumnOrderChange?: (indices: number[], order: number) => void,\n onRowOrderChange?: (indices: number[], order: number) => void,\n onCellWidthChange?: (indices: number[], value: number) => void,\n onCellHeightChange?: (indices: number[], value: number) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean,\n) => {\n const [hitTarget, setHitTarget] = useState<Clickable | null>(null);\n\n const [columnResize, setColumnResize] = useState<DragOp | null>(null);\n const [rowResize, setRowResize] = useState<DragOp | null>(null);\n const [columnDrag, setColumnDrag] = useState<DragOp | null>(null);\n const [rowDrag, setRowDrag] = useState<DragOp | null>(null);\n\n const [draggingKnob, setDraggingKnob] = useState(false);\n const [draggingSelection, setDraggingSelection] = useState(false);\n const [draggingRowSelection, setDraggingRowSelection] = useState(false);\n const [draggingColumnSelection, setDraggingColumnSelection] = useState(false);\n\n const {hideRowHeaders, hideColumnHeaders} = sheetStyle;\n const {cellToPixel, getVersion} = cellLayout;\n const version = getVersion();\n\n const knobPosition = useMemo((): XY | null => {\n const [, [maxX, maxY]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n return subXY(addXY(cellToPixel([0, maxY], [0, 1]), [SIZES.knobArea * 0.5, 0]), ONE_ONE);\n }\n if (isColumnSelection(selection)) {\n return subXY(addXY(cellToPixel([maxX, 0], [1, 0]), [0, SIZES.knobArea * 0.5]), ONE_ONE);\n }\n if (isCellSelection(selection)) {\n return subXY(cellToPixel([maxX, maxY], ONE_ONE), ONE_ONE);\n }\n return null;\n }, [selection, cellToPixel, version]);\n\n // Pass pointer/dragging state into handlers via ref so they don't need to rebind during resizes/drags\n const refState = {\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\n hitTarget,\n\n knobPosition,\n columnResize,\n rowResize,\n columnDrag,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingRowSelection,\n draggingColumnSelection,\n };\n const ref = useRef(refState);\n ref.current = refState;\n\n // Hit-testing for rendered objects\n const getMousePosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [\n e.clientX - rect.left,\n e.clientY - rect.top,\n ];\n return xy;\n }, []);\n\n const getScrollPosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return [0, 0];\n }\n\n const {scrollLeft, scrollTop} = e.target as any;\n const xy: XY = [scrollLeft, scrollTop];\n\n return xy;\n }, []);\n\n const getMouseHit = useCallback((xy: XY) => {\n const {current: hitmap} = hitmapRef;\n if (!hitmap) return null;\n\n for (const object of hitmap) {\n const {rect} = object;\n if (isPointInsideSelection(rect, xy)) {\n return object;\n }\n }\n\n return null;\n }, [hitmapRef]);\n\n const onPointerLeave = useCallback(() => {\n window.document.body.style.cursor = 'auto';\n }, []);\n\n const onPointerDown = useCallback((e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n cellLayout: {columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY},\n visibleCells: {columns, rows},\n knobPosition,\n },\n } = ref;\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n setHitTarget(hitTarget);\n // Update hitTarget in ref in case there is no re-render between pointerDown and pointerUp\n ref.current.hitTarget = hitTarget;\n return;\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const selectedColumns = [];\n const selectedRows = [];\n for (let i = minX; i <= maxX; i++) selectedColumns.push(i);\n for (let i = minY; i <= maxY; i++) selectedRows.push(i);\n\n // Column header\n if (!hideColumnHeaders && y < getIndentY()) {\n // Grab selected columns in column selection\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end)) {\n\n for (const index of columns) {\n const start = columnToPixel(index, 0);\n const end = columnToPixel(index, 1);\n\n if (\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n isInRange(index, minX, maxX) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n const indices = selectedColumns;\n const size = columnToPixel(maxX, 1) - columnToPixel(minX);\n const [scroll] = getScrollPosition(e);\n\n setColumnDrag({\n anchor: x,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n return;\n }\n }\n }\n }\n\n // Resize columns\n if (onCellWidthChange) {\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if ((Math.abs(edge - x) < SIZES.resizeZone) && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n\n const asGroup = isColumnSelection(selection) && maxX === index;\n const indices = asGroup\n ? selectedColumns\n : [index];\n\n const size = asGroup\n ? columnToPixel(maxX, 1) - columnToPixel(minX)\n : columnToPixel(index, 1) - columnToPixel(index);\n const [scroll] = getScrollPosition(e);\n\n setColumnResize({\n anchor: x,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n // Grab selected rows in row selection\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end)) {\n\n for (const index of rows) {\n const start = rowToPixel(index, 0);\n const end = rowToPixel(index, 1);\n\n if (\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n isInRange(index, minY, maxY) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n const indices = selectedRows;\n const size = rowToPixel(maxY, 1) - rowToPixel(minY);\n const [, scroll] = getScrollPosition(e);\n\n setRowDrag({\n anchor: y,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n return;\n }\n }\n }\n }\n\n // Resize rows\n if (onCellHeightChange) {\n for (const index of rows) {\n const edge = rowToPixel(index, 1);\n\n if ((Math.abs(edge - y) < SIZES.resizeZone) && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n\n const asGroup = isRowSelection(selection) && maxY === index;\n const indices = asGroup\n ? selectedRows\n : [index];\n\n const size = asGroup\n ? rowToPixel(maxY, 1) - rowToPixel(minY)\n : rowToPixel(index, 1) - rowToPixel(index);\n const [, scroll] = getScrollPosition(e);\n\n setRowResize({\n anchor: y,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n // Knob drag mode\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n setDraggingKnob(true);\n onKnobAreaChange?.(selection);\n return;\n }\n }\n\n // Normal cell click\n const head = pixelToCell(xy);\n const anchor: XY = e.shiftKey ? [...selection[0]] : head;\n\n if (editMode) {\n if (!dontCommitEditOnSelectionChange) {\n onCommit?.();\n }\n }\n\n let scrollTo = true;\n\n if (!hideRowHeaders && x < getIndentX()) {\n scrollTo = false;\n setDraggingRowSelection(true);\n anchor[0] = -1;\n head[0] = -1;\n }\n\n if (!hideColumnHeaders && y < getIndentY()) {\n scrollTo = false;\n setDraggingColumnSelection(true);\n anchor[1] = -1;\n head[1] = -1;\n }\n\n setDraggingSelection(true);\n onSelectionChange?.([anchor, head], scrollTo, true);\n }, [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onColumnOrderChange,\n onRowOrderChange,\n onCellWidthChange,\n onCellHeightChange,\n onKnobAreaChange,\n onSelectionChange,\n onCommit,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n ]);\n\n const onPointerUp = useCallback((e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n knobArea,\n selection,\n sourceData,\n editData,\n\n columnDrag,\n rowDrag,\n\n draggingKnob,\n hitTarget,\n\n cellLayout: {pixelToColumn, pixelToRow, getIndentX, getIndentY},\n },\n } = ref;\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, sourceData, editData, cellReadOnly);\n\n onChange?.(changes);\n onSelectionChange?.(knobArea, true, true);\n onKnobAreaChange?.(null);\n }\n\n const xy = getMousePosition(e);\n if (xy && (columnDrag || rowDrag)) {\n window.document.body.style.cursor = 'auto';\n onDragOffsetChange?.(null);\n onDropTargetChange?.(null);\n\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const cellX = pixelToColumn(Math.max(x, getIndentX()), 0.5);\n const cellY = pixelToRow(Math.max(y, getIndentY()), 0.5);\n\n if (columnDrag) {\n const {indices} = columnDrag;\n\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n if (!insideSelection) {\n const order = cellX > minX ? cellX - indices.length : cellX;\n onSelectionChange?.([[order, minY], [order + maxX - minX, maxY]]);\n onColumnOrderChange?.(indices, order);\n onInvalidateColumn?.(Math.min(minX, order));\n }\n }\n if (rowDrag) {\n const {indices} = rowDrag;\n\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n if (!insideSelection) {\n const order = cellY > minY ? cellY - indices.length : cellY;\n onSelectionChange?.([[minX, order], [maxX, order + maxY - minY]]);\n onRowOrderChange?.(indices, order);\n onInvalidateRow?.(Math.min(minY, order));\n }\n }\n }\n\n setDraggingSelection(false);\n setDraggingRowSelection(false);\n setDraggingColumnSelection(false);\n setDraggingKnob(false);\n setColumnResize(null);\n setColumnDrag(null);\n setRowResize(null);\n setRowDrag(null);\n\n if (!xy || !hitTarget) return;\n setHitTarget(null);\n\n // Check hit target rect to see if it is the same as pointerDown\n // (object identity might have changed due to react re-render)\n const previousRect = JSON.stringify(hitTarget.rect);\n const currentRect = JSON.stringify(getMouseHit(xy)?.rect);\n if (previousRect === currentRect) {\n const {obj} = hitTarget;\n obj.onClick?.(e);\n }\n\n }, [\n getMousePosition,\n getMouseHit,\n onChange,\n onSelectionChange,\n onKnobAreaChange,\n onDropTargetChange,\n onColumnOrderChange,\n onRowOrderChange,\n ]);\n\n const onPointerMove = useCallback((e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n visibleCells,\n\n knobPosition,\n columnResize,\n columnDrag,\n rowResize,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingColumnSelection,\n draggingRowSelection,\n\n cellLayout: {columnToPixel, rowToPixel, pixelToCell, pixelToColumn, pixelToRow, getIndentX, getIndentY},\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n window.document.body.style.cursor = 'auto';\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n }\n else if (columnDrag || rowDrag) {\n window.document.body.style.cursor = 'grabbing';\n }\n else if (columnResize) {\n window.document.body.style.cursor = 'col-resize';\n e.preventDefault();\n }\n else if (rowResize) {\n window.document.body.style.cursor = 'row-resize';\n e.preventDefault();\n }\n else if (draggingRowSelection || draggingColumnSelection) {\n e.preventDefault();\n }\n\n const {columns, rows} = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const isDragging = columnResize || columnDrag || rowResize || rowDrag || draggingRowSelection || draggingColumnSelection;\n\n if (!isDragging) {\n if (!hideColumnHeaders && y < getIndentY()) {\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end)) {\n\n for (const index of columns) {\n const start = columnToPixel(index);\n const end = columnToPixel(index, 1);\n\n if (\n !draggingColumnSelection &&\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n isInRange(index, minX, maxX) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellWidthChange) {\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n if ((Math.abs(edge - x) < SIZES.resizeZone) && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end)) {\n\n for (const index of rows) {\n const start = rowToPixel(index);\n const end = rowToPixel(index, 1);\n\n if (\n !draggingRowSelection &&\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n isInRange(index, minY, maxY) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellHeightChange) {\n for (const index of rows) {\n const edge = rowToPixel(index, 1);\n if ((Math.abs(edge - y) < SIZES.resizeZone) && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n return;\n }\n }\n }\n }\n\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n window.document.body.style.cursor = 'crosshair';\n return;\n }\n }\n }\n\n if (columnResize) {\n if (onCellWidthChange) {\n const {size, anchor, scroll, indices} = columnResize;\n const [currentScroll] = getScrollPosition(e);\n const newWidth = Math.max(size + x - anchor + scroll - currentScroll, SIZES.minimumWidth * indices.length);\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(indices, newWidth / indices.length);\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const {size, anchor, scroll, indices} = rowResize;\n const [, currentScroll] = getScrollPosition(e);\n const newHeight = Math.max(size + y - anchor + scroll - currentScroll, SIZES.minimumHeight * indices.length);\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(indices, newHeight / indices.length);\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = pixelToCell(xy);\n\n const [anchorX, anchorY] = anchor;\n const [headX, headY] = head;\n\n if (draggingRowSelection) {\n onSelectionChange?.([[-1, anchorY], [-1, Math.max(0, headY)]], false);\n } else if (draggingColumnSelection) {\n onSelectionChange?.([[anchorX, -1], [Math.max(0, headX), -1]], false);\n } else {\n onSelectionChange?.([\n maxXY(anchor, ORIGIN),\n maxXY(head, ORIGIN),\n ], false);\n }\n }\n\n if (draggingKnob) {\n window.document.body.style.cursor = 'crosshair';\n\n const [cellX, cellY] = pixelToCell(xy);\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // check if vertical or horizontal\n let xCellDiff = Math.min(cellX - minX, maxX - cellX, 0); // zero or less\n let yCellDiff = Math.min(cellY - minY, maxY - cellY, 0); // zero or less\n\n if (isMaybeRowSelection(selection) || xCellDiff > yCellDiff) {\n if (cellY < minY) {\n minY = cellY;\n } else if (cellY > maxY) {\n maxY = cellY;\n }\n } else {\n if (cellX < minX) {\n minX = cellX;\n } else if (cellX > maxX) {\n maxX = cellX;\n }\n }\n\n onKnobAreaChange?.([[minX, minY], [maxX, maxY]]);\n }\n\n if (columnDrag || rowDrag) {\n const [x, y] = xy;\n if (columnDrag) {\n const cellX = pixelToColumn(Math.max(x, getIndentX()), 0.5);\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n\n const {anchor, scroll} = columnDrag;\n const shift = x - anchor;\n const [currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([shift + currentScroll - scroll, 0]);\n onDropTargetChange?.(insideSelection ? null : [[cellX, -1], [cellX, -1]]);\n }\n if (rowDrag) {\n const cellY = pixelToRow(Math.max(y, getIndentY()), 0.5);\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n\n const {anchor, scroll} = rowDrag;\n const shift = y - anchor;\n const [, currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([0, shift + currentScroll - scroll]);\n onDropTargetChange?.(insideSelection ? null : [[-1, cellY], [-1, cellY]]);\n }\n }\n }, [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onCellWidthChange,\n onCellHeightChange,\n ]);\n\n const onDoubleClick = useCallback((e: MouseEvent) => {\n const {\n current: {\n cellLayout: {pixelToCell},\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n return;\n }\n\n const editCell = pixelToCell(xy);\n if (editMode) onCommit?.();\n onEdit?.(editCell);\n }, [getMousePosition, getMouseHit, onCommit, onEdit]);\n\n const onContextMenu = useCallback((e: MouseEvent) => {\n const {\n current: {\n cellLayout: {pixelToCell, getIndentX, getIndentY},\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n if (x <= getIndentX() || y <= getIndentY()) {\n return;\n }\n\n // If click is not inside of selection, select the right clicked cell\n const cell = pixelToCell(xy);\n if (!isPointInsideSelection(selection, cell)) {\n onSelectionChange?.([cell, cell]);\n }\n\n onPointerMove(e as any);\n\n const [cellX, cellY] = cell;\n const event: SheetMouseEvent = {\n ...e,\n cellX,\n cellY,\n };\n onRightClick?.(event);\n }, [getMousePosition, onSelectionChange, onPointerMove, onRightClick]);\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onDoubleClick,\n onContextMenu,\n };\n\n return {knobPosition, mouseHandlers};\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n sourceData: CellPropertyFunction<string | number | null>,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n): Change[] => {\n const [[kx1, ky1], [kx2, ky2]] = normalizeSelection(knobArea);\n const [[sx1, sy1], [sx2, sy2]] = normalizeSelection(selection);\n\n let fx1 = kx1;\n let fy1 = ky1;\n let fx2 = kx2;\n let fy2 = ky2;\n\n const changes: Change[] = [];\n\n // TODO: this should be made less cryptic, using logical selection ops/fns\n\n if (fx2 - fx1 === sx2 - sx1) {\n // vertical\n if (fy1 === sy1) {\n fy1 = sy2 + 1;\n } else {\n fy2 = sy1 - 1;\n }\n if (fx1 === -1 && fx2 === -1) {\n const [maxX] = findApproxMaxEditDataIndex(editData);\n fx1 = 0;\n fx2 = maxX;\n }\n let srcY = sy1;\n for (let y = fy1; y <= fy2; y++) {\n for (let x = fx1; x <= fx2; x++) {\n const value = sourceData(x, srcY);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: x, y: srcY } });\n }\n }\n srcY = srcY + 1;\n if (srcY > sy2) {\n srcY = sy1;\n }\n }\n } else {\n // horizontal\n if (fx1 === sx1) {\n fx1 = sx2 + 1;\n } else {\n fx2 = sx1 - 1;\n }\n if (fy1 === -1 && fy2 === -1) {\n const [, maxY] = findApproxMaxEditDataIndex(editData);\n fy1 = 0;\n fy2 = maxY;\n }\n let srcX = sx1;\n for (let x = fx1; x <= fx2; x++) {\n for (let y = fy1; y <= fy2; y++) {\n const value = sourceData(srcX, y);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: srcX, y: y } });\n }\n }\n srcX = srcX + 1;\n if (srcX > sx2) {\n srcX = sx1;\n }\n }\n }\n\n return changes;\n}","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY } from './coordinate';\nimport { ONE_ONE } from './constants';\n\nexport const useScroll = (\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n onOffsetChange?: (offset: XY) => void,\n onMaxScrollChange?: (maxScroll: XY) => void,\n) => {\n return useCallback((e: UIEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const {absoluteToCell, cellToAbsolute} = cellLayout;\n\n // Zero scroll position is considered in the center of the top/left cell\n const [nudgeX, nudgeY] = cellToAbsolute([0, 0], [0.5, 0.5]);\n\n const xy: XY = [\n e.target.scrollLeft + nudgeX,\n e.target.scrollTop + nudgeY,\n ];\n\n const cell = absoluteToCell(xy);\n if (!isSameXY(cell, offset)) {\n onOffsetChange?.(cell);\n }\n\n // TODO: smooth scrolling\n // const pixel = subXY(cellToAbsolute(cell), xy);\n //if (!isSameXY(pixel, pixelOffset)) {\n // setPixelOffset(pixel);\n //}\n\n const [x, y] = xy;\n const [maxScrollX, maxScrollY] = maxScroll;\n const growX = (maxScrollX < x + 1) ? 1.5 : 1;\n const growY = (maxScrollY < y + 1) ? 1.5 : 1;\n if (growX > 1 || growY > 1) {\n onMaxScrollChange?.(mulXY(maxScroll, [growX, growY]));\n }\n }, [cellLayout, onOffsetChange, onMaxScrollChange]);\n};\n\nexport const scrollToCell = (\n element: HTMLDivElement,\n cell: XY,\n view: XY,\n freeze: XY,\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n callback: (offset: XY, maxScroll: XY) => void,\n) => {\n const [x, y] = cell;\n const [w, h] = view;\n const [offsetX, offsetY] = offset;\n\n const {cellToAbsolute, cellToPixel, columnToPixel, rowToPixel} = cellLayout;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n const [left, top] = cellToPixel(cell);\n const [right, bottom] = cellToPixel(cell, ONE_ONE);\n\n let [newX, newY] = offset;\n \n // If moving left/up, scroll to head\n if (left <= frozenX) {\n newX = x - freeze[0];\n }\n if (top <= frozenY) {\n newY = y - freeze[1];\n }\n\n // If moving right/down, scroll cell by cell until right/bottom of cell is visible\n if (right > w) {\n let edge = right - w + columnToPixel(newX);\n while (columnToPixel(++newX) < edge) {};\n }\n if (bottom > h) {\n let edge = bottom - h + rowToPixel(newY);\n while (rowToPixel(++newY) < edge) {};\n }\n\n // Don't scroll on infinite axis\n const newOffset: XY = [\n newX >= 0 ? newX : offsetX,\n newY >= 0 ? newY : offsetY,\n ];\n\n if (!isSameXY(newOffset, offset)) {\n const scroll = cellToAbsolute(newOffset);\n const [nudgeX, nudgeY] = cellToAbsolute([0, 0], [0.5, 0.5]);\n\n callback(newOffset, maxXY(maxScroll, scroll));\n setTimeout(() => {\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX - nudgeX;\n element.scrollTop = scrollY - nudgeY;\n });\n }\n};\n","import { CellPropertyFunction, Change, ParsedChange, Rectangle } from './types';\nimport { RefObject, useLayoutEffect, useEffect } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { normalizeSelection, isMaybeRowSelection, isMaybeColumnSelection, isEmptySelection } from './coordinate';\n\nexport const useClipboardCopy = (\n textAreaRef: RefObject<HTMLTextAreaElement>,\n selection: Rectangle,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n) => {\n useLayoutEffect(() => {\n const {current: textArea} = textAreaRef;\n if (!textArea) return;\n\n if (editMode) return;\n if (isEmptySelection(selection)) return;\n\n let v = formatSelectionAsTSV(selection, editData);\n\n // Bizarre: having only TAB/RETURN characters inside the textarea\n // prevents native auto-scroll. Also bizarre: auto-scroll doesn't work\n // if we don't focus the textarea at all.\n if (v.match(/^[\\t\\n]*$/)) { v = ' ' + v; }\n textArea.value = v;\n }, [selection, editMode, editData, textAreaRef]);\n\n useLayoutEffect(() => {\n const {current: textArea} = textAreaRef;\n if (!textArea) return;\n\n const focus = () => {\n textArea.focus({ preventScroll: true });\n textArea.select();\n };\n\n if (editMode) return;\n if (document.activeElement === textArea) return;\n\n const activeTagName = (document as any).activeElement.tagName.toLowerCase();\n if (\n !(\n (activeTagName === 'div' && (document as any).activeElement.contentEditable === 'true') ||\n activeTagName === 'input' ||\n activeTagName === 'textarea' ||\n activeTagName === 'select'\n )\n ) {\n focus();\n }\n });\n}\n\nexport const useClipboardPaste = (\n textAreaRef: RefObject<HTMLTextAreaElement>,\n selection: Rectangle,\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Array<Change>) => void,\n) => {\n useEffect(() => {\n const onPaste = (e: any) => {\n const {current: textArea} = textAreaRef;\n if (!textArea) return;\n\n if (e.target !== textArea) return;\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const types = clipboardData.types;\n\n let parsed;\n if (types.includes('text/html')) {\n const pastedHtml = clipboardData.getData('text/html');\n parsed = parsePastedHtml(selection, pastedHtml);\n } else if (types.includes('text/plain')) {\n const text = clipboardData.getData('text/plain');\n parsed = parsePastedText(selection, text);\n }\n if (!parsed) return;\n\n const {selection: s, changes} = parsed;\n onChange?.(changes);\n onSelectionChange?.(s);\n };\n\n window.document.addEventListener('paste', onPaste);\n return () => {\n window.document.removeEventListener('paste', onPaste);\n };\n }, [textAreaRef, selection]);\n}\n\nconst formatTSV = (rows: string[][]) => rows.map(row => row.join('\\t')).join('\\n');\n\nconst formatSelectionAsTSV = (\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n) => {\n if (isEmptySelection(selection)) return '';\n\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n if (isMaybeRowSelection(selection)) {\n const [cellX] = findApproxMaxEditDataIndex(editData);\n minX = 0;\n maxX = cellX;\n }\n if (isMaybeColumnSelection(selection)) {\n const [, cellY] = findApproxMaxEditDataIndex(editData);\n minY = 0;\n maxY = cellY;\n }\n\n const rows: string[][] = [];\n\n for (let y = minY; y <= maxY; y++) {\n const row: string[] = [];\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value != null ? value : '');\n }\n }\n\n rows.push(row);\n }\n\n return formatTSV(rows);\n}\n\nconst findTable = (element: any): any => {\n for (const child of element.children) {\n if (child.nodeName === 'TABLE') {\n return child;\n }\n const maybeTable = findTable(child);\n if (maybeTable) {\n return maybeTable;\n }\n }\n};\n\nconst parsePastedHtml = (selection: Rectangle, html: string): ParsedChange | null => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const [[minX, minY]] = normalizeSelection(selection);\n let left = isMaybeRowSelection(selection) ? 0 : minX;\n let top = isMaybeColumnSelection(selection) ? 0 : minY;\n\n const changes = [];\n\n const tableNode = findTable(div);\n if (!tableNode) {\n return null;\n }\n\n let right = left;\n let bottom = top;\n\n let y = top;\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n let x = left;\n if (tr.nodeName === 'TR') {\n for (const td of tr.children) {\n if (td.nodeName === 'TD') {\n let str: string = '';\n if (td.children.length !== 0 && td.children[0].nodeName === 'P') {\n const p = td.children[0];\n if (p.children.length !== 0 && p.children[0].nodeName === 'FONT') {\n str = p.children[0].textContent.trim();\n } else {\n str = p.textContent.trim();\n }\n } else {\n str = td.textContent.trim();\n }\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n changes.push({ x, y, value: str });\n x++;\n }\n }\n y++;\n }\n right = Math.max(right, x - 1);\n }\n }\n }\n bottom = Math.max(top, y - 1);\n\n return {\n selection: [[left, top], [right, bottom]],\n changes,\n };\n};\n\nconst parsePastedText = (selection: Rectangle, text: string): ParsedChange => {\n const [[minX, minY]] = normalizeSelection(selection);\n let left = isMaybeRowSelection(selection) ? 0 : minX;\n let top = isMaybeColumnSelection(selection) ? 0 : minY;\n\n const rows = text.split(/\\r?\\n/);\n let right = left;\n let bottom = top + rows.length - 1;\n\n const changes = [];\n for (let y = 0; y < rows.length; y++) {\n const cols = rows[y].split('\\t');\n right = Math.max(right, left + cols.length - 1);\n\n for (let x = 0; x < cols.length; x++) {\n changes.push({ x: left + x, y: top + y, value: cols[x] });\n }\n }\n\n return {\n selection: [[left, top], [right, bottom]],\n changes,\n };\n};\n","import { XY, CellLayout, VisibleLayout, LayoutCache } from './types';\nimport { seq } from './util';\nimport { ORIGIN } from './constants';\n\nconst INITIAL_SIZE = 256;\n\n// Local cell layout (virtualized with frozen columns/rows)\n//\n// - converts cell indices to (x, y) canvas pixels for any cell, including off-screen\n// - maps (x, y) canvas pixels back to cell index for any visible cell\n// - can also generate absolute, unscrolled offsets relative to (0,0) to drive scrolling\n// - generates list of visible cols/rows in view\n//\n// Note that adjacent column indices are not necessarily adjacent, i.e. end of [i] != start of [i + 1].\nexport const makeCellLayout = (\n freeze: XY,\n indent: XY,\n offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache,\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [indentX, indentY] = indent;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => indentX;\n const getIndentY = () => indentY;\n\n // Origin for cell, frozen or relative\n const getBaseOriginFor = (index: number, freeze: number, offset: number) => {\n return index < freeze ? 0 : offset + freeze;\n };\n \n // Get visible pixel x of cell\n const columnToPixel = (column: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(column, freezeX, offsetX);\n const relative = columns.getStart(column) - columns.getStart(base);\n const adjust = column < freezeX ? 0 : columns.getStart(freezeX) - columns.getStart(0);\n const size = column < 0 ? indentX : columns.getSize(column);\n\n return column < 0 ? 0 : indentX + relative + adjust + anchor * size;\n };\n\n // Get visible pixel y of cell\n const rowToPixel = (row: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(row, freezeY, offsetY);\n const relative = rows.getStart(row) - rows.getStart(base);\n const adjust = row < freezeY ? 0 : rows.getStart(freezeY) - rows.getStart(0);\n const size = row < 0 ? indentY : rows.getSize(row);\n\n return row < 0 ? 0 : indentY + relative + adjust + anchor * size;\n };\n\n // Get visible pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToPixel = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [\n columnToPixel(cellX, anchorX),\n rowToPixel(cellY, anchorY),\n ];\n };\n\n // Get absolute / unscrolled pixel x of cell\n const columnToAbsolute = (column: number, anchorX: number = 0): number => {\n const relative = columns.getStart(column);\n const size = column < 0 ? 0 : columns.getSize(column);\n\n return relative + anchorX * size;\n };\n\n // Get absolute / unscrolled pixel y of cell\n const rowToAbsolute = (row: number, anchorY: number = 0): number => {\n const relative = rows.getStart(row);\n const size = row < 0 ? 0 : rows.getSize(row);\n\n return relative + anchorY * size;\n };\n\n // Get absolute / unscrolled pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToAbsolute = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [\n columnToAbsolute(cellX, anchorX),\n rowToAbsolute(cellY, anchorY),\n ];\n };\n\n // Lookup pixel X or Y in cell layout\n const pixelToIndex = (pixel: number, anchor: number, indent: number, freeze: number, offset: number, layout: LayoutCache) => {\n const relative = pixel - indent;\n if (relative < 0) return -1;\n\n const {getStart, lookupIndex} = layout;\n const frozen = getStart(freeze);\n if (relative < frozen) {\n return lookupIndex(relative, anchor);\n }\n else {\n const base = getStart(offset + freeze);\n const adjust = getStart(freeze) - getStart(0);\n return lookupIndex(base + relative - adjust, anchor);\n }\n };\n\n // Lookup pixel X or Y in cell layout (helpers)\n const pixelToColumn = (pixelX: number, anchorX: number = 0) => pixelToIndex(pixelX, anchorX, indentX, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) => pixelToIndex(pixelY, anchorY, indentY, freezeY, offsetY, rows);\n\n // Lookup pixel XY in cell layout\n const pixelToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [\n pixelToColumn(pixelX, anchorX),\n pixelToRow(pixelY, anchorY),\n ];\n };\n\n // Lookup absolute / unscrolled pixel X or Y in cell layout\n const absoluteToIndex = (pixel: number, anchor: number, layout: LayoutCache) => {\n if (pixel < 0) return -1;\n\n const {lookupIndex} = layout;\n return lookupIndex(pixel, anchor);\n };\n\n // Lookup absolute / unscrolled X or Y in cell layout (helpers)\n const absoluteToColumn = (pixelX: number, anchorX: number = 0) => absoluteToIndex(pixelX, anchorX, columns);\n const absoluteToRow = (pixelY: number, anchorY: number = 0) => absoluteToIndex(pixelY, anchorY, rows);\n\n // Lookup absolute / unscrolled XY in cell layout\n const absoluteToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [\n absoluteToColumn(pixelX, anchorX),\n absoluteToRow(pixelY, anchorY),\n ];\n };\n\n // Get visible range of columns or rows\n const getVisibleIndices = (view: number, indent: number, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const {getStart} = layout;\n const relative = view - indent + getStart(offset);\n for (let i = offset + freeze; getStart(i) <= relative; ++i) {\n indices.push(i);\n }\n\n return indices;\n };\n\n // Get visible range for an XY viewport\n const getVisibleCells = (view: XY): VisibleLayout => {\n const [viewX, viewY] = view;\n return {\n columns: getVisibleIndices(viewX, indentX, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, indentY, freezeY, offsetY, rows),\n };\n };\n\n const getVersion = () => columns.getVersion() + rows.getVersion();\n\n return {\n columnToPixel,\n rowToPixel,\n cellToPixel,\n\n columnToAbsolute,\n rowToAbsolute,\n cellToAbsolute,\n\n pixelToColumn,\n pixelToRow,\n pixelToCell,\n\n absoluteToColumn,\n absoluteToRow,\n absoluteToCell,\n\n getVisibleCells,\n getIndentX,\n getIndentY,\n\n getVersion,\n };\n}\n\n// Offset cache in 1 dimension.\n//\n// Allows O(1) queries of distance between any two points, once warmed up.\n// Can do reverse lookup back to index with binary search, once warmed up.\n//\n// - caches sizer(i), each is only called once\n// - offset[0] = 0\n// - adds up offset[i] = sizer(0) + sizer(1) + ... + sizer(i - 1)\n// - cache can be truncated during resizing ops at split\n// - to replace sizer function, cache must be destroyed\nexport const makeLayoutCache = (\n sizer: (index: number) => number,\n): LayoutCache => {\n const offsets = makeIntMap(INITIAL_SIZE);\n const sizes = makeIntMap(INITIAL_SIZE);\n\n let version = 0;\n offsets.set(0, 0);\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return 0;\n if (sizes.has(i)) return sizes.get(i)!;\n\n const size = sizer(i) || 0;\n sizes.set(i, size);\n return size;\n };\n\n // Cache offset sum recursively\n const getOffset = (i: number): number => {\n if (i < 0) return 0;\n if (offsets.has(i)) return offsets.get(i)!;\n\n let j = (offsets.tail() || 0);\n\n // Use a while loop to avoid stack overflow\n while (j < i) {\n const size = getSize(j);\n const offset = (offsets.get(j) || 0) + size;\n offsets.set(++j, offset);\n }\n\n return offsets.get(i)!;\n };\n\n // Boundary points\n const getStart = (i: number) => getOffset(i);\n const getEnd = (i: number) => getOffset(i + 1);\n\n // Reverse lookup from offset to index\n const lookupIndex = (x: number, anchor: number = 0) => {\n // Get end of offsets array\n let last = offsets.tail() || 0;\n\n // Extend cache if value exceeds current end\n while (getOffset(last) < x && getSize(last)) last += 64;\n\n // Do binary search for exact position\n let start = 0;\n let end = last;\n while (start < end) {\n let mid = start + Math.floor((end - start) / 2) + 1;\n let value = getOffset(mid) - (anchor ? anchor * getSize(mid - 1) : 0);\n if (value <= x) start = mid;\n else end = mid - 1;\n }\n\n return start;\n };\n\n const clearAfter = (index: number) => {\n index = Math.max(0, index);\n offsets.truncate(index);\n sizes.truncate(index);\n version++;\n };\n\n const setSizer = (s: (index: number) => number) => {\n sizer = s;\n };\n const getVersion = () => version;\n\n return {getSize, getStart, getEnd, getVersion, lookupIndex, setSizer, clearAfter};\n};\n\n// Fast map<integer, integer> that is mostly filled in from start to end.\n// Elements are only removed by truncating all indices > n.\nconst makeIntMap = (initialSize: number = 128) => {\n let used: Uint8Array;\n let values: Uint32Array;\n let last = 0;\n\n const GROW = 1.2; // 20% growth at a time\n\n const allocate = (size: number) => {\n let newUsed = new Uint8Array(size);\n let newValues = new Uint32Array(size);\n if (used) copy(used, newUsed);\n if (values) copy(values, newValues);\n used = newUsed;\n values = newValues;\n };\n allocate(initialSize);\n\n const copy = (from: Uint8Array | Uint32Array, to: Uint8Array | Uint32Array) => {\n let n = Math.min(from.length, to.length);\n for (let i = 0; i < n; ++i) {\n to[i] = from[i];\n }\n };\n\n const ensure = (size: number) => {\n const l = values.length;\n const grow = Math.round(l * GROW);\n if (l < size) allocate(Math.max(grow, size));\n };\n\n const truncate = (size: number) => {\n const l = values.length;\n\n // Do nothing if smaller\n if (l < size) return;\n\n // If more than 20% bigger, shrink to exact size\n const shrink = Math.round(size * GROW);\n if (l > shrink) allocate(size);\n // Else zero out tail\n else for (let i = size; i < l; ++i) used[i] = 0;\n\n // Track last filled element\n last = Math.min(last, size);\n while (last > 0 && !used[last]) last--;\n };\n\n const getTail = () => used[last] ? last : null;\n\n const setValue = (i: number, value: number) => {\n ensure(i + 1);\n values[i] = value;\n used[i] = 1;\n last = Math.max(last, i);\n };\n\n const getValue = (i: number) => used[i] ? values[i] : null;\n const hasValue = (i: number) => !!used[i];\n\n return {truncate, set: setValue, get: getValue, has: hasValue, tail: getTail};\n};\n","import { InternalSheetStyle, SheetStyle, Style } from './types';\nimport { SIZES } from './constants';\n\nexport const resolveSheetStyle = (sheetStyle?: SheetStyle): InternalSheetStyle => {\n return {\n freezeColumns: sheetStyle?.freezeColumns || 0,\n freezeRows: sheetStyle?.freezeRows || 0,\n hideColumnHeaders: sheetStyle?.hideColumnHeaders || false,\n hideRowHeaders: sheetStyle?.hideRowHeaders || false,\n hideGridlines: sheetStyle?.hideGridlines || false,\n hideScrollBars: sheetStyle?.hideScrollBars || false,\n columnHeaderHeight: sheetStyle?.hideColumnHeaders ? 1 : SIZES.headerHeight,\n rowHeaderWidth: sheetStyle?.hideRowHeaders ? 1 : SIZES.headerWidth,\n };\n};\n\nexport const resolveCellStyle = (optionalStyle: Style, defaultStyle: Required<Style>): Required<Style> => {\n return {\n ...defaultStyle,\n ...optionalStyle,\n };\n};\n\nexport const applyAlignment = (\n start: number,\n cellSize: number,\n style: Required<Style>,\n imageWidth: number,\n alignment: 'left' | 'center' | 'right' = style.textAlign,\n): number => {\n if (alignment === 'left') {\n return start + style.marginLeft;\n } else if (alignment === 'center') {\n return start + cellSize * 0.5 - imageWidth / 2;\n } else if (alignment === 'right') {\n return start + (cellSize - style.marginRight - imageWidth);\n }\n return start;\n};\n","import { CellLayout, CellPropertyFunction, RowOrColumnPropertyFunction, InternalSheetStyle, Rectangle, Selection, Clickable, Style, CellContentType, VisibleLayout, XY } from './types';\nimport { applyAlignment, resolveCellStyle } from './style';\nimport { normalizeSelection, isEmptySelection, isRowSelection, isColumnSelection } from './coordinate';\nimport { isInRange, isInRangeLeft, isInRangeCenter } from './util';\nimport { COLORS, SIZES, DEFAULT_CELL_STYLE, DEFAULT_COLUMN_HEADER_STYLE, HEADER_SELECTED_STYLE, HEADER_ACTIVE_STYLE, NO_STYLE, ONE_ONE } from './constants';\n\nexport const renderSheet = (\n context: CanvasRenderingContext2D,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n\n knobPosition: XY | null,\n knobArea: Rectangle | null,\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyFunction<CellContentType>,\n\n dataOffset: XY,\n): Clickable[] => {\n const {canvas} = context;\n const {width, height} = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\n rowHeaderWidth,\n columnHeaderHeight,\n freezeColumns,\n freezeRows,\n } = sheetStyle;\n const {columns, rows} = visibleCells;\n const {\n columnToPixel,\n rowToPixel,\n } = cellLayout;\n\n const clickables: Clickable[] = [];\n\n const freeze: XY = [freezeColumns, freezeRows];\n const indent: XY = [rowHeaderWidth, columnHeaderHeight];\n\n resizeCanvas(canvas);\n context.clearRect(0, 0, width, height);\n context.fillStyle = 'white';\n context.fillRect(0, 0, width, height);\n\n // Cell fill\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const {fillColor} = cellStyle(x, y);\n if (fillColor) {\n context.fillStyle = fillColor;\n context.fillRect(left, top, right - left, bottom - top);\n }\n }\n }\n\n const selectionActive = !isEmptySelection(selection);\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [selected, hideKnob] = resolveFrozenSelection(\n selection,\n cellLayout,\n freeze,\n indent,\n dataOffset,\n );\n\n // Selection fill\n if (selectionActive) {\n const [[left, top], [right, bottom]] = selected;\n context.fillStyle = COLORS.selectionBackground;\n context.fillRect(left, top, right - left, bottom - top);\n }\n\n if (!hideRowHeaders) {\n // Row header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, rowHeaderWidth, context.canvas.height);\n\n // Row header selection shadow\n if (selectionActive && !columnSelectionActive) {\n const [[, top], [, bottom]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(0, top, rowHeaderWidth, bottom - top);\n }\n }\n\n if (!hideColumnHeaders) {\n // Column header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, context.canvas.width, columnHeaderHeight);\n\n // Column header selection shadow\n if (selectionActive && !rowSelectionActive) {\n const [[left], [right]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(left, 0, right - left, columnHeaderHeight);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? rowHeaderWidth : context.canvas.width;\n const gridBottom = hideGridlines ? columnHeaderHeight : context.canvas.height;\n\n const drawGridLineX = (x: number, height: number) => {\n context.beginPath();\n context.moveTo(x - .5, 0);\n context.lineTo(x - .5, height);\n context.stroke();\n };\n\n const drawGridLineY = (y: number, width: number) => {\n context.beginPath();\n context.moveTo(0, y - .5);\n context.lineTo(width, y - .5);\n context.stroke();\n };\n\n drawGridLineX(rowHeaderWidth, context.canvas.height);\n drawGridLineY(columnHeaderHeight, context.canvas.width);\n\n for (const column of columns) {\n const right = columnToPixel(column, 1);\n drawGridLineX(right, gridBottom);\n }\n\n for (const row of rows) {\n const bottom = rowToPixel(row, 1);\n drawGridLineY(bottom, gridRight);\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // Row header text\n if (!hideRowHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n context.font = DEFAULT_CELL_STYLE.fontSize + 'px ' + DEFAULT_CELL_STYLE.fontFamily;\n context.fillStyle = COLORS.headerText;\n\n for (const row of rows) {\n const content = `${row + 1}`;\n\n // Row selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(row, minY, maxY);\n const isSelected = (rowSelectionActive && !columnSelectionActive) && isActive;\n const style = isSelected ? HEADER_SELECTED_STYLE : isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n clickables.push(...renderCell(\n context,\n content,\n style,\n DEFAULT_COLUMN_HEADER_STYLE,\n 0,\n top,\n rowHeaderWidth,\n bottom - top,\n ));\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n\n for (const column of columns) {\n const content = columnHeaders(column) ?? excelHeaderString(column + 1);\n\n // Column selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(column, minX, maxX);\n const selectedStyle = (columnSelectionActive && !rowSelectionActive) && isActive\n ? HEADER_SELECTED_STYLE : NO_STYLE;\n const activeStyle = isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n const style = {\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n clickables.push(...renderCell(\n context,\n content,\n style,\n DEFAULT_COLUMN_HEADER_STYLE,\n left,\n 0,\n right - left,\n columnHeaderHeight\n ));\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(\n left,\n top,\n right - left - 1,\n bottom - top - 1,\n );\n }\n\n for (const secondarySelection of secondarySelections) {\n const selection = secondarySelection.span;\n if (isEmptySelection(selection)) continue;\n\n const [selected] = resolveFrozenSelection(\n selection,\n cellLayout,\n freeze,\n indent,\n dataOffset,\n );\n const [[left, top], [right, bottom]] = selected;\n\n context.strokeStyle = secondarySelection.color;\n context.lineWidth = 1;\n context.beginPath();\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n }\n\n // Knob drag outline\n if (knobArea) {\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(knobArea);\n const left = columnToPixel(minX);\n const top = rowToPixel(minY);\n const right = columnToPixel(maxX, 1);\n const bottom = rowToPixel(maxY, 1);\n\n context.strokeStyle = COLORS.knobAreaBorder;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n context.setLineDash([]);\n }\n\n // Selection knob\n if (knobPosition && !hideKnob) {\n const [knobX, knobY] = knobPosition;\n context.fillStyle = COLORS.selectionBorder;\n context.fillRect(knobX - SIZES.knobArea * 0.5, knobY - SIZES.knobArea * 0.5, SIZES.knobArea, SIZES.knobArea);\n }\n\n // Drag ghost (pixels)\n if (dragOffset) {\n const [shiftX, shiftY] = dragOffset;\n const [[left, top], [right, bottom]] = resolveSelection(selection, cellLayout);\n\n context.fillStyle = COLORS.dragGhost;\n context.fillRect(left + shiftX, top + shiftY, right - left, bottom - top);\n }\n\n // Drop target\n if (dropTarget) {\n let [[left, top], [right, bottom]] = resolveSelection(dropTarget, cellLayout);\n\n context.strokeStyle = COLORS.dropTarget;\n context.lineWidth = 2;\n\n if (isColumnSelection(dropTarget)) {\n right = left;\n }\n if (isRowSelection(dropTarget)) {\n bottom = top;\n }\n context.strokeRect(left - 1, top - 1, right - left, bottom - top);\n }\n\n // Cell contents\n context.textBaseline = 'middle';\n\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const cellContent = displayData(x, y);\n if (cellContent !== null && cellContent !== undefined) {\n const style = cellStyle(x, y);\n clickables.push(...renderCell(context, cellContent, style, DEFAULT_CELL_STYLE, left, top, right - left, bottom - top));\n }\n }\n }\n\n return clickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentType,\n style: Style,\n defaultCellStyle: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number\n): Clickable[] => {\n const clickables: Clickable[] = [];\n\n if (cellContent === null) {\n return clickables;\n }\n\n const finalStyle = resolveCellStyle(style, defaultCellStyle);\n context.fillStyle = finalStyle.color;\n context.font = finalStyle.weight + ' ' + finalStyle.fontSize + 'px ' + finalStyle.fontFamily;\n context.textAlign = finalStyle.textAlign;\n\n const yy = Math.floor(yCoord + cellHeight * 0.5);\n\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n\n if (finalStyle.backgroundColor !== '') {\n context.fillStyle = finalStyle.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = finalStyle.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const xx = applyAlignment(xCoord, cellWidth, finalStyle, 0);\n const text = '' + cellContent;\n context.fillText(text, xx, yy);\n } else if (typeof cellContent === 'object') {\n for (const obj of cellContent.items) {\n let x = 0;\n let y = 0;\n let w = 0;\n let h = 0;\n\n if (obj.content instanceof HTMLImageElement) {\n w = obj.width || cellWidth;\n h = obj.height || cellHeight;\n\n const finalX = applyAlignment(xCoord, cellWidth, finalStyle, w, obj.horizontalAlign);\n x = finalX + obj.x;\n y = yy + obj.y;\n\n context.drawImage(obj.content, x, y, w, h);\n } else if (typeof obj.content === 'string' || typeof obj.content === 'number') {\n if (obj.horizontalAlign) {\n context.textAlign = obj.horizontalAlign;\n }\n const finalX = applyAlignment(xCoord, cellWidth, finalStyle, 0, obj.horizontalAlign);\n const text = '' + obj.content;\n\n const left = finalX + obj.x;\n const top = yy + obj.y;\n context.fillText(text, left, top);\n\n const measure = context.measureText(text);\n x = left - measure.actualBoundingBoxLeft;\n y = top - measure.actualBoundingBoxAscent;\n w = left + measure.actualBoundingBoxRight - x;\n h = top + measure.actualBoundingBoxDescent - y;\n }\n if (obj.onClick) {\n clickables.push({\n rect: [[x, y], [x + w, y + h]],\n obj,\n });\n }\n }\n }\n context.restore();\n\n return clickables;\n};\n\n// Resolve selection into a consistent rectangle, without dealing with frozen rows/columns\nconst resolveSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n) => {\n const {cellToPixel} = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [[left, top], [right, bottom]];\n};\n\n// Resolve selection into a consistent rectangle, handling edge cases around frozen rows/columns.\nconst resolveFrozenSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n\n freeze: XY,\n indent: XY,\n offset: XY,\n) => {\n const {cellToPixel, columnToAbsolute, rowToAbsolute} = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n const [freezeX, freezeY] = freeze;\n const [indentX, indentY] = indent;\n const [offsetX, offsetY] = offset;\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n const [maxX, maxY] = max;\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Get frozen edge\n const frozenX = columnToAbsolute(freezeX);\n const frozenY = rowToAbsolute(freezeY);\n\n let hideKnob = false;\n\n // If the selection crosses the frozen edge, it needs to always cover the entire frozen area.\n if (isInRangeCenter(freezeX, minX, maxX + 1)) {\n const edge = indentX + frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = indentY + frozenY;\n if (bottom <= edge) {\n bottom = edge;\n hideKnob = true;\n }\n }\n\n // If the selection starts/ends under the frozen area, treat as off-screen\n if (isInRangeLeft(minX, freezeX, offsetX + freezeX)) {\n left = -1e5;\n\n const lastInvisibleX = offsetX + freezeX - 1;\n if (maxX <= lastInvisibleX) {\n if (maxX === lastInvisibleX) right = indentX;\n else right = -1e5;\n hideKnob = true;\n }\n }\n if (isInRangeLeft(minY, freezeY, offsetY + freezeY)) {\n top = -1e5;\n\n const lastInvisibleY = offsetY + freezeY - 1;\n if (maxY <= lastInvisibleY) {\n if (maxY === lastInvisibleY) bottom = indentY;\n else bottom = -1e5;\n hideKnob = true;\n }\n }\n\n if (rowSelectionActive && offsetX > 0) {\n hideKnob = true;\n }\n if (columnSelectionActive && offsetY > 0) {\n hideKnob = true;\n }\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [[left, top], [right, bottom]],\n hideKnob,\n ] as [Rectangle, boolean];\n};\n\nconst resizeCanvas = (canvas: HTMLCanvasElement) => {\n const { width, height } = canvas.getBoundingClientRect();\n let { devicePixelRatio: ratio = 1 } = window;\n if (ratio < 1) {\n ratio = 1;\n }\n const newCanvasWidth = Math.round(width * ratio);\n const newCanvasHeight = Math.round(height * ratio);\n\n if (canvas.width !== newCanvasWidth || canvas.height !== newCanvasHeight) {\n const context = canvas.getContext('2d');\n if (context) {\n canvas.width = newCanvasWidth;\n canvas.height = newCanvasHeight;\n context.scale(ratio, ratio);\n }\n return true;\n }\n\n return false;\n};\n\nconst excelHeaderString = (num: number) => {\n let s = '';\n let t = 0;\n while (num > 0) {\n t = (num - 1) % 26;\n s = String.fromCharCode(65 + t) + s;\n num = ((num - t) / 26) | 0;\n }\n return s || '';\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEvent,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellLayout,\n CellProperty,\n CellContentType,\n RowOrColumnProperty,\n Selection,\n Clickable,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n VisibleLayout,\n} from './types';\n\nimport {\n ARROW_KEYS,\n\tMAX_SEARCHABLE_INDEX,\n\tDEFAULT_CELL_STYLE,\n\tINITIAL_MAX_SCROLL,\n\tNO_CELL,\n NO_CLICKABLES,\n\tNO_SELECTION,\n NO_SELECTIONS,\n\tORIGIN,\n ONE_ONE,\n} from './constants';\nimport {\n normalizeSelection,\n isSameSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\nimport { useMouse } from './mouse';\nimport { useScroll, scrollToCell } from './scroll';\nimport { useClipboardCopy, useClipboardPaste } from './clipboard';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createRowOrColumnProp, findInDisplayData } from './props';\nimport { renderSheet } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string,\n autoFocus: boolean,\n onKeyDown: KeyboardEventHandler<HTMLElement>,\n onChange: (value: string) => void,\n style: InputStyle,\n};\n\nexport type SheetRenderProps = {\n visibleCells: VisibleLayout,\n cellLayout: CellLayout,\n selection: Rectangle,\n editMode: boolean,\n};\n\nexport type SheetProps = {\n cellWidth?: RowOrColumnProperty<number>;\n cellHeight?: RowOrColumnProperty<number>;\n columnHeaders?: RowOrColumnProperty<CellContentType>;\n columnHeaderStyle?: RowOrColumnProperty<Style>;\n cellStyle?: CellProperty<Style>;\n readOnly?: CellProperty<boolean>;\n canSizeColumn?: RowOrColumnProperty<boolean>;\n canSizeRow?: RowOrColumnProperty<boolean>;\n canOrderColumn?: RowOrColumnProperty<boolean>;\n canOrderRow?: RowOrColumnProperty<boolean>;\n sourceData?: CellProperty<string | number | null>;\n displayData?: CellProperty<CellContentType>;\n editData?: CellProperty<string>;\n editKeys?: CellProperty<string>;\n sheetStyle?: SheetStyle;\n selection?: Rectangle,\n secondarySelections?: Selection[];\n\n cacheLayout?: boolean,\n dontCommitEditOnSelectionChange?: boolean;\n\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell?: (value?: string | number | null) => void\n ) => ReactElement | undefined;\n\n renderInside?: (props: SheetRenderProps) => React.ReactNode,\n renderOutside?: (props: SheetRenderProps) => React.ReactNode,\n\n onSelectionChanged?: (minX: number, minY: number, maxX: number, maxY: number) => void;\n onRightClick?: (e: SheetPointerEvent) => void;\n onChange?: (changes: Array<Change>) => void;\n onColumnOrderChange?: (indices: number[], order: number) => void;\n onRowOrderChange?: (indices: number[], order: number) => void;\n onCellWidthChange?: (indices: number[], value: number) => void;\n onCellHeightChange?: (indices: number[], value: number) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n};\n\nexport type SheetRef = CellLayout & {\n startEditingCell: (editCell: XY, arrowKeyCommitMode?: boolean) => void,\n};\n\nconst Sheet = forwardRef<SheetRef, SheetProps>((props, ref) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const [maxScroll, setMaxScroll] = useState<XY>(INITIAL_MAX_SCROLL);\n const [dataOffset, setDataOffset] = useState<XY>(ORIGIN);\n // TODO: smooth scrolling\n // const [pixelOffset, setPixelOffset] = useState<XY>(ORIGIN);\n\n const selectionProp = props.selection ?? NO_SELECTION;\n\n const [selection, setSelection] = useState<Rectangle>(selectionProp);\n const [knobArea, setKnobArea] = useState<Rectangle | null>(null);\n const [dragOffset, setDragOffset] = useState<XY | null>(null);\n const [dropTarget, setDropTarget] = useState<Rectangle | null>(null);\n const [editCell, setEditCell] = useState<XY>(NO_CELL);\n\n const [lastSelectionProp, setLastSelectionProp] = useState<Rectangle>(selectionProp);\n if (lastSelectionProp !== selectionProp) {\n setLastSelectionProp(selectionProp);\n setSelection(selectionProp);\n }\n\n const [editValue, setEditValue] = useState<string | number>('');\n const [arrowKeyCommitMode, setArrowKeyCommitMode] = useState(false);\n\n const { width: canvasWidth = 3000, height: canvasHeight = 3000 } = useResizeObserver({ ref: canvasRef });\n\n const cellWidth = useMemo(() => createRowOrColumnProp(props.cellWidth, 100), [props.cellWidth]);\n const cellHeight = useMemo(() => createRowOrColumnProp(props.cellHeight, 22), [props.cellHeight]);\n const columnHeaders = useMemo(() => createRowOrColumnProp(props.columnHeaders, null), [\n props.columnHeaders,\n ]);\n const columnHeaderStyle = useMemo(() => createRowOrColumnProp(props.columnHeaderStyle, {}), [\n props.columnHeaderStyle,\n ]);\n\n const canSizeColumn = useMemo(() => createRowOrColumnProp(props.canSizeColumn, true), [props.canSizeColumn]);\n const canSizeRow = useMemo(() => createRowOrColumnProp(props.canSizeRow, true), [props.canSizeRow]);\n const canOrderColumn = useMemo(() => createRowOrColumnProp(props.canOrderColumn, true), [props.canOrderColumn]);\n const canOrderRow = useMemo(() => createRowOrColumnProp(props.canOrderRow, true), [props.canOrderRow]);\n\n const cellReadOnly = useMemo(() => createCellProp(props.readOnly, false), [props.readOnly]);\n\n const sourceData = useMemo(() => createCellProp(props.sourceData, null), [props.sourceData]);\n const displayData = useMemo(() => createCellProp(props.displayData, ''), [props.displayData]);\n const editData = useMemo(() => createCellProp(props.editData, ''), [props.editData]);\n const editKeys = useMemo(() => createCellProp(props.editKeys, ''), [props.editKeys]);\n const cellStyle = useMemo(() => createCellProp(props.cellStyle, DEFAULT_CELL_STYLE), [props.cellStyle]);\n\n const sheetStyle: InternalSheetStyle = useMemo(() => resolveSheetStyle(props.sheetStyle), [props.sheetStyle]);\n const secondarySelections = props.secondarySelections ?? NO_SELECTIONS;\n\n const [maxScrollX, maxScrollY] = maxScroll;\n\n const [editCellX, editCellY] = editCell;\n const editMode = editCellX !== -1 && editCellY !== -1;\n\n // Global layout for unscrolled/unfrozen grid\n // Cached either per width/height pair, or permanently with invalidation on resize/reorder.\n const columnLayout = useMemo(() => makeLayoutCache(cellWidth), [props.cacheLayout ? null : cellWidth]);\n const rowLayout = useMemo(() => makeLayoutCache(cellHeight), [props.cacheLayout ? null : cellHeight]);\n useMemo(() => {\n if (!props.cacheLayout) return;\n columnLayout.setSizer(cellWidth);\n rowLayout.setSizer(cellHeight);\n }, [props.cacheLayout, cellWidth, cellHeight])\n\n // Virtual layout for indented/scrolled/frozen grid\n const {freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight} = sheetStyle;\n const cellLayout = useMemo(\n () => makeCellLayout(\n [freezeColumns, freezeRows],\n [rowHeaderWidth, columnHeaderHeight],\n dataOffset,\n columnLayout,\n rowLayout,\n ),\n [freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight, dataOffset, columnLayout, rowLayout]\n );\n\n // Build range of visible cells\n const {getVisibleCells, cellToPixel, getVersion} = cellLayout;\n const visibleCells = useMemo(\n () => getVisibleCells([canvasWidth, canvasHeight]),\n // Need to invalidate view if cached layout version changed\n // eslint-disable-next-line\n [getVisibleCells, canvasWidth, canvasHeight, getVersion()]\n );\n\n // Notify of viewport change\n useLayoutEffect(() => {\n if (props.onScrollChange) {\n props.onScrollChange([...visibleCells.rows], [...visibleCells.columns]);\n }\n }, [visibleCells, props.onScrollChange]);\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollTo = true, toHead = false) => {\n if (!isSameSelection(selection, newSelection)) {\n setSelection(newSelection);\n }\n\n const {current: overlay} = overlayRef;\n if (!overlay) return;\n\n if (scrollTo) {\n const [anchor, head] = newSelection;\n scrollToCell(\n overlay,\n toHead ? head : anchor,\n [canvasWidth, canvasHeight],\n [freezeColumns, freezeRows],\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n },\n );\n }\n\n if (props.onSelectionChanged) {\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(newSelection);\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const commitEditingCell = (value?: string) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n props.onChange([{ x: cellX, y: cellY, value: value !== undefined ? value : editValue }]);\n }\n setEditCell(NO_CELL);\n };\n\n const startEditingCell = (editCell: XY, arrowKeyCommitMode = false) => {\n const [cellX, cellY] = editCell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n const editDataValue = editData(cellX, cellY);\n let val = '';\n if (editDataValue !== null && editDataValue !== undefined) {\n val = editDataValue;\n }\n setEditCell(editCell);\n setEditValue(val);\n setArrowKeyCommitMode(arrowKeyCommitMode);\n setLastEditKey(editKeys(...editCell));\n };\n\n // Output from rendered layout is used to drive events on user content\n const hitmapRef = useRef<Clickable[]>(NO_CLICKABLES);\n\n // Textarea is used to hold text to copy, and receives pastes\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n useClipboardCopy(textAreaRef, selection, editMode, editData);\n useClipboardPaste(textAreaRef, selection, changeSelection, props.onChange);\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);\n\n const {mouseHandlers, knobPosition} = useMouse(\n hitmapRef,\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellReadOnly,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n cellLayout,\n visibleCells,\n sheetStyle,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragOffset,\n setDropTarget,\n changeSelection,\n\n props.cacheLayout ? columnLayout.clearAfter : undefined,\n props.cacheLayout ? rowLayout.clearAfter : undefined,\n\n props.onChange,\n props.onColumnOrderChange,\n props.onRowOrderChange,\n props.onCellWidthChange,\n props.onCellHeightChange,\n props.onRightClick,\n props.dontCommitEditOnSelectionChange,\n );\n\n useLayoutEffect(() => {\n const {current: canvas} = canvasRef;\n if (!canvas) {\n return;\n }\n\n const context = canvas.getContext('2d');\n if (!context) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n hitmapRef.current = renderSheet(\n context,\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n dataOffset,\n );\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n dataOffset,\n ]);\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setEditCell(NO_CELL);\n return;\n }\n\n const direction = \n e.key === 'Enter' ? 'down' : \n e.key === 'Tab' ? 'right' : \n arrowKeyCommitMode ? ARROW_KEYS[e.key] : \n null;\n\n if (direction) {\n e.preventDefault();\n const step = getDirectionStep(direction);\n const head = maxXY(addXY(editCell, step), ORIGIN);\n commitEditingCell();\n changeSelection([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && (e.key in ARROW_KEYS)) {\n commitEditingCell();\n return;\n }\n\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'v') {\n return;\n }\n\n // copy\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'c') {\n const {current: textArea} = textAreaRef;\n textArea?.select();\n return;\n }\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n let [[x1, y1], [x2, y2]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n x1 = 0;\n x2 = MAX_SEARCHABLE_INDEX;\n }\n if (isColumnSelection(selection)) {\n y1 = 0;\n y2 = MAX_SEARCHABLE_INDEX;\n }\n\n const changes: Change[] = [];\n for (let y = y1; y <= y2; y++) {\n for (let x = x1; x <= x2; x++) {\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: null });\n }\n }\n }\n if (props.onChange) {\n props.onChange(changes);\n }\n return;\n }\n\n // nothing selected\n if (isEmptySelection(selection)) {\n return;\n }\n\n if (\n (e.keyCode >= 48 && e.keyCode <= 57) ||\n (e.keyCode >= 96 && e.keyCode <= 105) ||\n (e.keyCode >= 65 && e.keyCode <= 90) ||\n e.key === 'Enter' ||\n e.key === '-' ||\n e.key === '.' ||\n e.key === ','\n ) {\n const [cell] = selection;\n const [cellX, cellY] = cell;\n if (cellReadOnly(cellX, cellY)) {\n e.preventDefault(); // so we dont get keystrokes inside the text area\n return;\n }\n\n startEditingCell(cell, e.key !== 'Enter');\n return;\n }\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = selection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n }\n else {\n head = maxXY(addXY(head, step), ORIGIN);\n }\n if (!e.shiftKey) {\n anchor = head;\n }\n changeSelection([anchor, head], true, true);\n return;\n }\n\n e.preventDefault();\n };\n\n const [lastEditKey, setLastEditKey] = useState('');\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextTextAlign: 'right' | 'left' | 'center' = 'right';\n if (editMode) {\n const style = cellStyle(...editCell);\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextTextAlign = style.textAlign || DEFAULT_CELL_STYLE.textAlign || 'left';\n const editKey = editKeys(...editCell);\n if (editKey !== lastEditKey) {\n setLastEditKey('');\n setEditCell(NO_CELL);\n }\n }\n\n const [textX, textY] = editTextPosition;\n const inputProps = {\n value: editValue,\n autoFocus: true,\n onKeyDown: onKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: '0px 4px',\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextTextAlign,\n color: 'black',\n fontSize: DEFAULT_CELL_STYLE.fontSize,\n fontFamily: 'sans-serif',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setEditValue } as SheetInputProps,\n commitEditingCell\n );\n\n let overlayDivClassName = styles.sheetscroll;\n const overlayDivStyles: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n overflow: 'scroll',\n borderBottom: '1px solid #ddd',\n };\n const canvasStyles: React.CSSProperties = {\n width: 'calc(100% - 14px)',\n height: 'calc(100% - 15px)',\n outline: '1px solid #ddd', // find another better solution ?\n };\n\n if (sheetStyle.hideScrollBars) {\n delete canvasStyles['outline'];\n delete overlayDivStyles['borderBottom'];\n overlayDivClassName = '';\n canvasStyles.width = 'calc(100%)';\n }\n\n const renderedInside = useMemo(\n () => props.renderInside?.({visibleCells, cellLayout, selection, editMode}),\n [props.renderInside, visibleCells, cellLayout, selection, editMode]\n );\n\n const renderedOutside = useMemo(\n () => props.renderOutside?.({visibleCells, cellLayout, selection, editMode}),\n [props.renderOutside, visibleCells, cellLayout, selection, editMode]\n );\n\n // External component API\n useImperativeHandle(ref, () => ({\n ...cellLayout,\n startEditingCell,\n }), [cellLayout, startEditingCell]);\n\n return (\n <div style={{ position: 'relative', height: '100%', overflow: 'hidden' }}>\n <canvas style={canvasStyles} ref={canvasRef} />\n <div\n ref={overlayRef}\n {...mouseHandlers}\n onScroll={onScroll}\n className={overlayDivClassName}\n style={overlayDivStyles}\n >\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: 1,\n height: maxScrollY + 2000,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: maxScrollX + 5000,\n height: 1,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n {renderedInside ? (\n <div\n style={{\n position: 'sticky',\n left: 0,\n top: 0,\n }}\n >\n {renderedInside}\n </div>\n ) : null}\n </div>\n {renderedOutside ? (\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n {renderedOutside}\n </div>\n ) : null}\n <textarea\n style={{ position: 'absolute', top: 0, left: 0, width: 1, height: 1, opacity: 0.01 }}\n ref={textAreaRef}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onFocus={(e) => e.target.select()}\n tabIndex={0}\n onKeyDown={onGridKeyDown}\n ></textarea>\n {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <input\n {...inputProps}\n type=\"text\"\n onFocus={(e) => e.target.select()}\n onChange={(e) => setEditValue(e.target.value)}\n />\n ))}\n </div>\n );\n});\n\nexport default Sheet;\n"],"names":["INITIAL_MAX_SCROLL","ORIGIN","ONE_ONE","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","MAX_XY","COLORS","selectionBorder","selectionBackground","gridLine","dragGhost","dropTarget","knobAreaBorder","headerBackground","headerText","headerActive","headerActiveText","headerSelected","headerSelectedText","SIZES","knobArea","headerWidth","headerHeight","minimumWidth","minimumHeight","resizeZone","scrollZone","scrollSpeed","DEFAULT_CELL_STYLE","textAlign","fontSize","marginRight","marginLeft","color","fontFamily","weight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","ARROW_KEYS","clamp","x","min","max","Math","seq","n","s","d","Array","from","length","map","_","i","isInRange","isInRangeLeft","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","clampXY","p","Infinity","getDirectionStep","direction","isSameXY","isSameSelection","a1","a2","b1","b2","isMaybeRowSelection","selection","left","right","isMaybeColumnSelection","top","bottom","isRowSelection","isColumnSelection","isCellSelection","isEmptySelection","isPointInsideSelection","point","normalizeSelection","y","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","data","floor","xx","findInDisplayData","displayData","start","step","cell","first","firstFilled","cellX","cellY","useMouse","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","onEdit","onCommit","onKnobAreaChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","useState","hitTarget","setHitTarget","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","rowDrag","setRowDrag","draggingKnob","setDraggingKnob","draggingSelection","setDraggingSelection","draggingRowSelection","setDraggingRowSelection","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","useMemo","maxX","maxY","refState","ref","useRef","current","getMousePosition","useCallback","e","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","getScrollPosition","scrollLeft","scrollTop","getMouseHit","hitmap","object","onPointerLeave","window","document","body","style","cursor","onPointerDown","columnToPixel","rowToPixel","pixelToCell","getIndentX","getIndentY","columns","rows","button","setPointerCapture","pointerId","minX","minY","selectedColumns","selectedRows","push","end","index","indices","size","scroll","anchor","edge","abs","asGroup","knobX","knobY","head","shiftKey","scrollTo","onPointerUp","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","order","previousRect","JSON","stringify","currentRect","obj","onClick","onPointerMove","preventDefault","isDragging","currentScroll","newWidth","newHeight","anchorX","anchorY","headX","headY","xCellDiff","yCellDiff","shift","onDoubleClick","editCell","onContextMenu","event","mouseHandlers","kx1","ky1","kx2","ky2","sx1","sy1","sx2","sy2","fx1","fy1","fx2","fy2","srcY","value","source","srcX","useScroll","offset","maxScroll","onOffsetChange","onMaxScrollChange","absoluteToCell","cellToAbsolute","nudgeX","nudgeY","maxScrollX","maxScrollY","growX","growY","scrollToCell","element","view","freeze","callback","w","h","offsetX","offsetY","frozenX","frozenY","newX","newY","newOffset","setTimeout","scrollX","scrollY","useClipboardCopy","textAreaRef","useLayoutEffect","textArea","v","formatSelectionAsTSV","match","focus","preventScroll","select","activeElement","activeTagName","tagName","toLowerCase","contentEditable","useClipboardPaste","useEffect","onPaste","clipboardData","types","parsed","includes","pastedHtml","getData","parsePastedHtml","text","parsePastedText","addEventListener","removeEventListener","formatTSV","row","join","findTable","children","child","nodeName","maybeTable","html","div","createElement","innerHTML","trim","tableNode","tableChild","tr","td","str","textContent","replaceAll","split","cols","INITIAL_SIZE","makeCellLayout","indent","freezeX","freezeY","indentX","indentY","getBaseOriginFor","column","base","relative","getStart","adjust","getSize","columnToAbsolute","rowToAbsolute","pixelToIndex","pixel","layout","lookupIndex","frozen","pixelX","pixelY","absoluteToIndex","absoluteToColumn","absoluteToRow","getVisibleIndices","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","sizes","set","has","get","getOffset","j","tail","getEnd","last","mid","clearAfter","truncate","setSizer","initialSize","used","values","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","to","ensure","l","grow","round","shrink","getTail","setValue","getValue","hasValue","resolveSheetStyle","freezeColumns","freezeRows","hideGridlines","hideScrollBars","columnHeaderHeight","rowHeaderWidth","resolveCellStyle","optionalStyle","defaultStyle","applyAlignment","cellSize","imageWidth","alignment","renderSheet","context","cellStyle","secondarySelections","dragOffset","columnHeaders","columnHeaderStyle","dataOffset","canvas","width","height","clickables","resizeCanvas","clearRect","fillStyle","fillRect","selectionActive","rowSelectionActive","columnSelectionActive","resolveFrozenSelection","selected","hideKnob","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","font","content","isActive","isSelected","renderCell","excelHeaderString","selectedStyle","activeStyle","strokeRect","secondarySelection","span","setLineDash","shiftX","shiftY","resolveSelection","cellContent","defaultCellStyle","xCoord","yCoord","cellWidth","cellHeight","finalStyle","save","clip","fillText","items","HTMLImageElement","finalX","horizontalAlign","drawImage","measure","measureText","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","actualBoundingBoxDescent","restore","lastInvisibleX","lastInvisibleY","devicePixelRatio","ratio","newCanvasWidth","newCanvasHeight","getContext","scale","num","t","String","fromCharCode","Sheet","forwardRef","props","canvasRef","overlayRef","setMaxScroll","setDataOffset","selectionProp","setSelection","setKnobArea","setDragOffset","setDropTarget","setEditCell","lastSelectionProp","setLastSelectionProp","editValue","setEditValue","arrowKeyCommitMode","setArrowKeyCommitMode","useResizeObserver","canvasWidth","canvasHeight","readOnly","editKeys","editCellX","editCellY","columnLayout","cacheLayout","rowLayout","onScrollChange","changeSelection","newSelection","toHead","overlay","onSelectionChanged","commitEditingCell","startEditingCell","editDataValue","val","setLastEditKey","onScroll","animationFrameId","requestAnimationFrame","cancelAnimationFrame","onKeyDown","key","onGridKeyDown","metaKey","ctrlKey","which","x1","y1","x2","y2","keyCode","lastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextTextAlign","editKey","textX","textY","inputProps","autoFocus","position","padding","outline","border","input","inputComponent","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","renderedInside","renderInside","renderedOutside","renderOutside","useImperativeHandle","React","className","pointerEvents","opacity","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","tabIndex","type"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/group.ts","../src/props.ts","../src/mouse.ts","../src/scroll.ts","../src/clipboard.ts","../src/layout.ts","../src/style.ts","../src/render.ts","../src/sheet.tsx"],"sourcesContent":["import { XY, Rectangle, Selection, Clickable, Direction, Style } from './types';\n\nexport const INITIAL_MAX_SCROLL: XY = [2000, 1000];\n\nexport const ORIGIN: XY = [0, 0];\nexport const ONE_ONE: XY = [1, 1];\n\nexport const NO_CELL: XY = [-1, -1];\nexport const NO_SELECTION: Rectangle = [NO_CELL, NO_CELL];\nexport const NO_SELECTIONS: Selection[] = [];\nexport const NO_CLICKABLES: Clickable[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 65536;\nexport const MAX_XY: XY = [MAX_SEARCHABLE_INDEX, MAX_SEARCHABLE_INDEX];\n\nexport const COLORS = {\n selectionBorder: '#1a66ff',\n selectionBackground: '#d8e6ff80',\n\n gridLine: '#0000001f',\n\n dragGhost: '#1a66ff30',\n dropTarget: '#1a66ff',\n knobAreaBorder: '#707070',\n\n headerBackground: '#f6f9fc',\n headerText: '#666666',\n headerActive: '#e8f0ff',\n headerActiveText: '#1a66ff',\n\n headerSelected: '#1a66ff',\n headerSelectedText: '#ffffff',\n\n shadowColor: '#000000',\n};\n\nexport const SIZES = {\n knobArea: 6,\n headerWidth: 50,\n headerHeight: 22,\n minimumWidth: 50,\n minimumHeight: 22,\n resizeZone: 4,\n scrollZone: 50,\n scrollSpeed: 30,\n\n shadowBlur: 12,\n shadowOpacity: 0.05,\n};\n\nexport const DEFAULT_CELL_STYLE: Required<Style> = {\n textAlign: 'left',\n fontSize: 12,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const HEADER_ACTIVE_STYLE = {\n color: COLORS.headerActiveText,\n};\n\nexport const HEADER_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelected,\n color: COLORS.headerSelectedText,\n};\n\nexport const ARROW_KEYS: Record<string, Direction> = {\n ArrowRight: 'right',\n ArrowLeft: 'left',\n ArrowUp: 'up',\n ArrowDown: 'down',\n};\n","export const tail = <T>(list: T[]): T => list[list.length - 1];\n\nexport const clamp = (x: number, min: number, max: number) => Math.max(Math.min(max, x), min);\n\nexport const seq = (n: number, s: number = 0, d: number = 1): number[] =>\n Array.from({ length: n }).map((_, i: number) => s + d * i);\n\nexport const isInRange = (x: number, min: number, max: number) => min <= x && x <= max;\nexport const isInRangeLeft = (x: number, min: number, max: number) => min <= x && x < max;\nexport const isInRangeRight = (x: number, min: number, max: number) => min < x && x <= max;\nexport const isInRangeCenter = (x: number, min: number, max: number) => min < x && x < max;\n","import { XY, Rectangle } from './types';\nimport { clamp } from './util';\n\nexport const addXY = (a: XY, b: XY): XY => [a[0] + b[0], a[1] + b[1]];\nexport const subXY = (a: XY, b: XY): XY => [a[0] - b[0], a[1] - b[1]];\nexport const mulXY = (a: XY, b: XY): XY => [a[0] * b[0], a[1] * b[1]];\nexport const maxXY = (a: XY, b: XY): XY => [Math.max(a[0], b[0]), Math.max(a[1], b[1])];\nexport const minXY = (a: XY, b: XY): XY => [Math.min(a[0], b[0]), Math.min(a[1], b[1])];\nexport const clampXY = (p: XY, min: XY, max: XY = [Infinity, Infinity]): XY => [\n clamp(p[0], min[0], max[0]),\n clamp(p[1], min[1], max[1]),\n];\n\nexport const getDirectionStep = (direction: string): XY => {\n if (direction === 'left') return [-1, 0];\n if (direction === 'right') return [1, 0];\n if (direction === 'up') return [0, -1];\n if (direction === 'down') return [0, 1];\n return [0, 0];\n};\n\nexport const isSameXY = (a: XY, b: XY) => a[0] === b[0] && a[1] === b[1];\n\nexport const isSameSelection = (a: Rectangle, b: Rectangle) => {\n const [a1, a2] = a;\n const [b1, b2] = b;\n return isSameXY(a1, b1) && isSameXY(a2, b2);\n};\n\n// Selection is infinite horizontally\nexport const isMaybeRowSelection = (selection: Rectangle) => {\n const [[left], [right]] = selection;\n return left === -1 && right === -1;\n};\n\n// Selection is infinite vertically\nexport const isMaybeColumnSelection = (selection: Rectangle) => {\n const [[, top], [, bottom]] = selection;\n return top === -1 && bottom === -1;\n};\n\n// Selection is ONLY infinite horizontally\nexport const isRowSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is ONLY infinite vertically\nexport const isColumnSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return top === -1 && bottom === -1 && left !== -1 && right !== -1;\n};\n\n// Selection is not infinite\nexport const isCellSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left !== -1 && right !== -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is null\nexport const isEmptySelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top === -1 && bottom === -1;\n};\n\n// Test cell inside selection (inclusive edges)\nexport const isPointInsideSelection = (selection: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n const [x, y] = point;\n return x >= left && x <= right && y >= top && y <= bottom;\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n const [anchor, head] = selection;\n const [ax, ay] = anchor;\n const [hx, hy] = head;\n\n const left = Math.min(ax, hx);\n const right = Math.max(ax, hx);\n const top = Math.min(ay, hy);\n const bottom = Math.max(ay, hy);\n\n return [\n [left, top],\n [right, bottom],\n ];\n};\n\n// Orient normalized rectangle to match existing orientation\nexport const orientSelection = (normalized: Rectangle, to: Rectangle): Rectangle => {\n const [[left, top], [right, bottom]] = normalized;\n\n const [anchor, head] = to;\n const [ax, ay] = anchor;\n const [hx, hy] = head;\n\n const swapX = (ax - hx || 1) * (left - right || 1) < 0;\n const swapY = (ay - hy || 1) * (top - bottom || 1) < 0;\n\n return [\n [swapX ? right : left, swapY ? bottom : top],\n [swapX ? left : right, swapY ? top : bottom],\n ];\n};\n","import { Rectangle, RowOrColumnPropertyFunction } from './types';\nimport { normalizeSelection, orientSelection } from './coordinate';\n\nconst LIMIT = 1000;\n\nconst scanGroup = (\n keys: RowOrColumnPropertyFunction<string | number | null>,\n index: number,\n direction: number,\n match: string | number | null\n) => {\n if (match == null) return index;\n\n let i = 0;\n const limit = direction > 0 ? LIMIT : Math.min(LIMIT, index + 1);\n for (; i < limit; i++) {\n if (keys(index + i * direction) !== match) break;\n }\n return index + (i - 1) * direction;\n};\n\nexport const expandSelectionToColumnGroups = (\n selection: Rectangle,\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>\n) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n\n const leftKey = columnGroupKeys(left);\n const rightKey = columnGroupKeys(right);\n\n const startColumn = scanGroup(columnGroupKeys, left, -1, leftKey);\n const endColumn = scanGroup(columnGroupKeys, right, 1, rightKey);\n\n const expanded: Rectangle = [\n [startColumn, top],\n [endColumn, bottom],\n ];\n const oriented = orientSelection(expanded, selection);\n\n return oriented;\n};\n\nexport const expandSelectionToRowGroups = (\n selection: Rectangle,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>\n) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n\n const topKey = rowGroupKeys(top);\n const bottomKey = rowGroupKeys(bottom);\n\n const startRow = scanGroup(rowGroupKeys, top, -1, topKey);\n const endRow = scanGroup(rowGroupKeys, bottom, 1, bottomKey);\n\n const expanded: Rectangle = [\n [left, startRow],\n [right, endRow],\n ];\n const oriented = orientSelection(expanded, selection);\n\n return oriented;\n};\n\nexport const isBoundaryInsideGroup = (\n index: number,\n rowOrColumnGroupKeys: RowOrColumnPropertyFunction<string | number | null>\n) => {\n const before = rowOrColumnGroupKeys(index - 1);\n const after = rowOrColumnGroupKeys(index);\n return before != null && after != null && before === after;\n};\n","import {\n Direction,\n XY,\n CellContentType,\n CellProperty,\n CellPropertyFunction,\n PropTypes,\n RowOrColumnProperty,\n RowOrColumnPropertyFunction,\n} from './types';\nimport { MAX_SEARCHABLE_INDEX, MAX_XY, ORIGIN } from './constants';\nimport { clampXY, addXY, subXY, maxXY, getDirectionStep } from './coordinate';\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnProp = <T extends PropTypes>(\n rowColProp: RowOrColumnProperty<T> | undefined,\n defaultValue: T\n): RowOrColumnPropertyFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellProp = <T extends PropTypes>(\n cellProp: CellProperty<T> | undefined,\n defaultValue: T\n): CellPropertyFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\nexport const findApproxMaxEditDataIndex = (editData: CellPropertyFunction<string>): XY => {\n let x = 0;\n let y = 0;\n let howManyEmpty = 0;\n let growthIncrement = 10;\n let growthIncrementFactor = 1.5;\n\n // x\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let yy = 0; yy < 10; yy++) {\n const data = editData(x, yy);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n x += growthIncrement;\n if (x > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n\n howManyEmpty = 0;\n growthIncrement = 10;\n growthIncrementFactor = 1.5;\n\n // y\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let xx = 0; xx < 10; xx++) {\n const data = editData(xx, y);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n y += growthIncrement;\n if (y > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n return [x, y];\n};\n\nexport const findInDisplayData = (\n displayData: CellPropertyFunction<CellContentType>,\n start: XY,\n direction: Direction\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = clampXY(start, ORIGIN, MAX_XY);\n const first = displayData(...addXY(cell, step));\n const firstFilled = first !== '' && first !== null && first !== undefined;\n\n if (!firstFilled) {\n cell = addXY(cell, step);\n }\n\n let [cellX, cellY] = cell;\n while (cellX <= MAX_SEARCHABLE_INDEX && cellY <= MAX_SEARCHABLE_INDEX && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY);\n\n // if first cell is filled, find the last filled cell, so first look for first unfilled\n if (firstFilled && (data === '' || data === null || data === undefined)) {\n return subXY(cell, step);\n }\n // if first cell is not filled, just find the first filled\n if (!firstFilled && data !== '' && data !== null && data !== undefined) {\n return cell;\n }\n\n [cellX, cellY] = cell = addXY(cell, step);\n }\n\n return maxXY(cell, [0, 0]);\n};\n","import {\n CellLayout,\n CellPropertyFunction,\n Change,\n Clickable,\n Rectangle,\n RowOrColumnPropertyFunction,\n SheetMouseEvent,\n SheetStyle,\n VisibleLayout,\n XY,\n} from './types';\nimport { MouseEvent, PointerEvent, RefObject, useCallback, useMemo, useRef, useState } from 'react';\nimport {\n normalizeSelection,\n isColumnSelection,\n isRowSelection,\n isCellSelection,\n isMaybeRowSelection,\n isPointInsideSelection,\n addXY,\n subXY,\n maxXY,\n} from './coordinate';\nimport { ONE_ONE, ORIGIN, SIZES } from './constants';\nimport { isBoundaryInsideGroup } from './group';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange } from './util';\n\ntype DragOp = {\n anchor: number;\n scroll: number;\n size: number;\n indices: number[];\n};\n\nexport const useMouse = (\n hitmapRef: RefObject<Clickable[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n\n canSizeColumn: RowOrColumnPropertyFunction<boolean | null>,\n canSizeRow: RowOrColumnPropertyFunction<boolean | null>,\n canOrderColumn: RowOrColumnPropertyFunction<boolean | null>,\n canOrderRow: RowOrColumnPropertyFunction<boolean | null>,\n\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n sheetStyle: SheetStyle,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragOffsetChange?: (dragOffset: XY | null) => void,\n onDropTargetChange?: (selection: Rectangle | null) => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean, dragOperation?: boolean) => void,\n\n onInvalidateColumn?: (column: number) => void,\n onInvalidateRow?: (row: number) => void,\n\n onChange?: (changes: Change[]) => void,\n onColumnOrderChange?: (indices: number[], order: number) => void,\n onRowOrderChange?: (indices: number[], order: number) => void,\n onCellWidthChange?: (indices: number[], value: number) => void,\n onCellHeightChange?: (indices: number[], value: number) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean\n) => {\n const [hitTarget, setHitTarget] = useState<Clickable | null>(null);\n\n const [columnResize, setColumnResize] = useState<DragOp | null>(null);\n const [rowResize, setRowResize] = useState<DragOp | null>(null);\n const [columnDrag, setColumnDrag] = useState<DragOp | null>(null);\n const [rowDrag, setRowDrag] = useState<DragOp | null>(null);\n\n const [draggingKnob, setDraggingKnob] = useState(false);\n const [draggingSelection, setDraggingSelection] = useState(false);\n const [draggingRowSelection, setDraggingRowSelection] = useState(false);\n const [draggingColumnSelection, setDraggingColumnSelection] = useState(false);\n\n const { hideRowHeaders, hideColumnHeaders } = sheetStyle;\n const { cellToPixel, getVersion } = cellLayout;\n const version = getVersion();\n\n const knobPosition = useMemo((): XY | null => {\n const [, [maxX, maxY]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n return subXY(addXY(cellToPixel([0, maxY], [0, 1]), [SIZES.knobArea * 0.5, 0]), ONE_ONE);\n }\n if (isColumnSelection(selection)) {\n return subXY(addXY(cellToPixel([maxX, 0], [1, 0]), [0, SIZES.knobArea * 0.5]), ONE_ONE);\n }\n if (isCellSelection(selection)) {\n return subXY(cellToPixel([maxX, maxY], ONE_ONE), ONE_ONE);\n }\n return null;\n }, [selection, cellToPixel, version]);\n\n // Pass pointer/dragging state into handlers via ref so they don't need to rebind during resizes/drags\n const refState = {\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\n hitTarget,\n\n knobPosition,\n columnResize,\n rowResize,\n columnDrag,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingRowSelection,\n draggingColumnSelection,\n };\n const ref = useRef(refState);\n ref.current = refState;\n\n // Hit-testing for rendered objects\n const getMousePosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [e.clientX - rect.left, e.clientY - rect.top];\n return xy;\n }, []);\n\n const getScrollPosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return [0, 0];\n }\n\n const { scrollLeft, scrollTop } = e.target as any;\n const xy: XY = [scrollLeft, scrollTop];\n\n return xy;\n }, []);\n\n const getMouseHit = useCallback(\n (xy: XY) => {\n const { current: hitmap } = hitmapRef;\n if (!hitmap) return null;\n\n for (const object of hitmap) {\n const { rect } = object;\n if (isPointInsideSelection(rect, xy)) {\n return object;\n }\n }\n\n return null;\n },\n [hitmapRef]\n );\n\n const onPointerLeave = useCallback(() => {\n window.document.body.style.cursor = 'auto';\n }, []);\n\n const onPointerDown = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n cellLayout: { columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY },\n visibleCells: { columns, rows },\n knobPosition,\n },\n } = ref;\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n setHitTarget(hitTarget);\n // Update hitTarget in ref in case there is no re-render between pointerDown and pointerUp\n ref.current.hitTarget = hitTarget;\n return;\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const selectedColumns = [];\n const selectedRows = [];\n for (let i = minX; i <= maxX; i++) selectedColumns.push(i);\n for (let i = minY; i <= maxY; i++) selectedRows.push(i);\n\n // Column header\n if (!hideColumnHeaders && y < getIndentY()) {\n // Grab selected columns in column selection\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end)) {\n for (const index of columns) {\n const start = columnToPixel(index, 0);\n const end = columnToPixel(index, 1);\n\n if (\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n isInRange(index, minX, maxX) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n const indices = selectedColumns;\n const size = columnToPixel(maxX, 1) - columnToPixel(minX);\n const [scroll] = getScrollPosition(e);\n\n setColumnDrag({\n anchor: x,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n return;\n }\n }\n }\n }\n\n // Resize columns\n if (onCellWidthChange) {\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n\n const asGroup = isColumnSelection(selection) && maxX === index;\n const indices = asGroup ? selectedColumns : [index];\n\n const size = asGroup\n ? columnToPixel(maxX, 1) - columnToPixel(minX)\n : columnToPixel(index, 1) - columnToPixel(index);\n const [scroll] = getScrollPosition(e);\n\n setColumnResize({\n anchor: x,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n // Grab selected rows in row selection\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end)) {\n for (const index of rows) {\n const start = rowToPixel(index, 0);\n const end = rowToPixel(index, 1);\n\n if (\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n isInRange(index, minY, maxY) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n const indices = selectedRows;\n const size = rowToPixel(maxY, 1) - rowToPixel(minY);\n const [, scroll] = getScrollPosition(e);\n\n setRowDrag({\n anchor: y,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n return;\n }\n }\n }\n }\n\n // Resize rows\n if (onCellHeightChange) {\n for (const index of rows) {\n const edge = rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n\n const asGroup = isRowSelection(selection) && maxY === index;\n const indices = asGroup ? selectedRows : [index];\n\n const size = asGroup\n ? rowToPixel(maxY, 1) - rowToPixel(minY)\n : rowToPixel(index, 1) - rowToPixel(index);\n const [, scroll] = getScrollPosition(e);\n\n setRowResize({\n anchor: y,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n // Knob drag mode\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n setDraggingKnob(true);\n onKnobAreaChange?.(selection);\n return;\n }\n }\n\n // Normal cell click\n const head = pixelToCell(xy);\n const anchor: XY = e.shiftKey ? [...selection[0]] : head;\n\n if (editMode) {\n if (!dontCommitEditOnSelectionChange) {\n onCommit?.();\n }\n }\n\n let scrollTo = true;\n\n if (!hideRowHeaders && x < getIndentX()) {\n scrollTo = false;\n setDraggingRowSelection(true);\n anchor[0] = -1;\n head[0] = -1;\n }\n\n if (!hideColumnHeaders && y < getIndentY()) {\n scrollTo = false;\n setDraggingColumnSelection(true);\n anchor[1] = -1;\n head[1] = -1;\n }\n\n setDraggingSelection(true);\n onSelectionChange?.([anchor, head], scrollTo, true);\n },\n [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onColumnOrderChange,\n onRowOrderChange,\n onCellWidthChange,\n onCellHeightChange,\n onKnobAreaChange,\n onSelectionChange,\n onCommit,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n dontCommitEditOnSelectionChange,\n ]\n );\n\n const onPointerUp = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n knobArea,\n selection,\n sourceData,\n editData,\n\n columnDrag,\n rowDrag,\n\n draggingKnob,\n hitTarget,\n\n cellLayout: { pixelToColumn, pixelToRow, getIndentX, getIndentY },\n },\n } = ref;\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, sourceData, editData, cellReadOnly);\n\n onChange?.(changes);\n onSelectionChange?.(knobArea, true, true);\n onKnobAreaChange?.(null);\n }\n\n const xy = getMousePosition(e);\n if (xy && (columnDrag || rowDrag)) {\n window.document.body.style.cursor = 'auto';\n onDragOffsetChange?.(null);\n onDropTargetChange?.(null);\n\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const cellX = pixelToColumn(Math.max(x, getIndentX()), 0.5);\n const cellY = pixelToRow(Math.max(y, getIndentY()), 0.5);\n\n if (columnDrag) {\n const { indices } = columnDrag;\n\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n if (!insideSelection) {\n const order = cellX > minX ? cellX - indices.length : cellX;\n onSelectionChange?.(\n [\n [order, minY],\n [order + maxX - minX, maxY],\n ],\n false,\n false,\n true\n );\n onColumnOrderChange?.(indices, order);\n onInvalidateColumn?.(Math.min(minX, order));\n }\n }\n if (rowDrag) {\n const { indices } = rowDrag;\n\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n if (!insideSelection) {\n const order = cellY > minY ? cellY - indices.length : cellY;\n onSelectionChange?.(\n [\n [minX, order],\n [maxX, order + maxY - minY],\n ],\n false,\n false,\n true\n );\n onRowOrderChange?.(indices, order);\n onInvalidateRow?.(Math.min(minY, order));\n }\n }\n }\n\n setDraggingSelection(false);\n setDraggingRowSelection(false);\n setDraggingColumnSelection(false);\n setDraggingKnob(false);\n setColumnResize(null);\n setColumnDrag(null);\n setRowResize(null);\n setRowDrag(null);\n\n if (!xy || !hitTarget) return;\n setHitTarget(null);\n\n // Check hit target rect to see if it is the same as pointerDown\n // (object identity might have changed due to react re-render)\n const previousRect = JSON.stringify(hitTarget.rect);\n const currentRect = JSON.stringify(getMouseHit(xy)?.rect);\n if (previousRect === currentRect) {\n const { obj } = hitTarget;\n obj.onClick?.(e);\n }\n },\n [\n getMousePosition,\n getMouseHit,\n onChange,\n onSelectionChange,\n onKnobAreaChange,\n onDropTargetChange,\n onColumnOrderChange,\n onRowOrderChange,\n ]\n );\n\n const onPointerMove = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n visibleCells,\n\n knobPosition,\n columnResize,\n columnDrag,\n rowResize,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingColumnSelection,\n draggingRowSelection,\n\n cellLayout: {\n columnToPixel,\n rowToPixel,\n pixelToCell,\n pixelToColumn,\n pixelToRow,\n getIndentX,\n getIndentY,\n },\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n window.document.body.style.cursor = 'auto';\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n } else if (columnDrag || rowDrag) {\n window.document.body.style.cursor = 'grabbing';\n } else if (columnResize) {\n window.document.body.style.cursor = 'col-resize';\n e.preventDefault();\n } else if (rowResize) {\n window.document.body.style.cursor = 'row-resize';\n e.preventDefault();\n } else if (draggingRowSelection || draggingColumnSelection) {\n e.preventDefault();\n }\n\n const { columns, rows } = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const isDragging =\n columnResize || columnDrag || rowResize || rowDrag || draggingRowSelection || draggingColumnSelection;\n\n if (!isDragging) {\n if (!hideColumnHeaders && y < getIndentY()) {\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end)) {\n for (const index of columns) {\n const start = columnToPixel(index);\n const end = columnToPixel(index, 1);\n\n if (\n !draggingColumnSelection &&\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n isInRange(index, minX, maxX) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellWidthChange) {\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end)) {\n for (const index of rows) {\n const start = rowToPixel(index);\n const end = rowToPixel(index, 1);\n\n if (\n !draggingRowSelection &&\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n isInRange(index, minY, maxY) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellHeightChange) {\n for (const index of rows) {\n const edge = rowToPixel(index, 1);\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n return;\n }\n }\n }\n }\n\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n window.document.body.style.cursor = 'crosshair';\n return;\n }\n }\n }\n\n if (columnResize) {\n if (onCellWidthChange) {\n const { size, anchor, scroll, indices } = columnResize;\n const [currentScroll] = getScrollPosition(e);\n const newWidth = Math.max(\n size + x - anchor + scroll - currentScroll,\n SIZES.minimumWidth * indices.length\n );\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(indices, newWidth / indices.length);\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const { size, anchor, scroll, indices } = rowResize;\n const [, currentScroll] = getScrollPosition(e);\n const newHeight = Math.max(\n size + y - anchor + scroll - currentScroll,\n SIZES.minimumHeight * indices.length\n );\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(indices, newHeight / indices.length);\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = pixelToCell(xy);\n\n const [anchorX, anchorY] = anchor;\n const [headX, headY] = head;\n\n if (draggingRowSelection) {\n onSelectionChange?.(\n [\n [-1, anchorY],\n [-1, Math.max(0, headY)],\n ],\n false\n );\n } else if (draggingColumnSelection) {\n onSelectionChange?.(\n [\n [anchorX, -1],\n [Math.max(0, headX), -1],\n ],\n false\n );\n } else {\n onSelectionChange?.([maxXY(anchor, ORIGIN), maxXY(head, ORIGIN)], false);\n }\n }\n\n if (draggingKnob) {\n window.document.body.style.cursor = 'crosshair';\n\n const [cellX, cellY] = pixelToCell(xy);\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // check if vertical or horizontal\n let xCellDiff = Math.min(cellX - minX, maxX - cellX, 0); // zero or less\n let yCellDiff = Math.min(cellY - minY, maxY - cellY, 0); // zero or less\n\n if (isMaybeRowSelection(selection) || xCellDiff > yCellDiff) {\n if (cellY < minY) {\n minY = cellY;\n } else if (cellY > maxY) {\n maxY = cellY;\n }\n } else {\n if (cellX < minX) {\n minX = cellX;\n } else if (cellX > maxX) {\n maxX = cellX;\n }\n }\n\n onKnobAreaChange?.([\n [minX, minY],\n [maxX, maxY],\n ]);\n }\n\n if (columnDrag || rowDrag) {\n const [x, y] = xy;\n if (columnDrag) {\n const cellX = pixelToColumn(Math.max(x, getIndentX()), 0.5);\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = isBoundaryInsideGroup(cellX, columnGroupKeys);\n\n const { anchor, scroll } = columnDrag;\n const shift = x - anchor;\n const [currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([shift + currentScroll - scroll, 0]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [cellX, -1],\n [cellX, -1],\n ]\n );\n }\n if (rowDrag) {\n const cellY = pixelToRow(Math.max(y, getIndentY()), 0.5);\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = isBoundaryInsideGroup(cellY, rowGroupKeys);\n\n const { anchor, scroll } = rowDrag;\n const shift = y - anchor;\n const [, currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([0, shift + currentScroll - scroll]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [-1, cellY],\n [-1, cellY],\n ]\n );\n }\n }\n },\n [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onCellWidthChange,\n onCellHeightChange,\n onDragOffsetChange,\n onDropTargetChange,\n onSelectionChange,\n onKnobAreaChange,\n onInvalidateRow,\n onInvalidateColumn,\n ]\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n cellLayout: { pixelToCell },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n return;\n }\n\n const editCell = pixelToCell(xy);\n if (editMode) onCommit?.();\n onEdit?.(editCell);\n },\n [getMousePosition, getMouseHit, onCommit, onEdit]\n );\n\n const onContextMenu = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n cellLayout: { pixelToCell, getIndentX, getIndentY },\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n if (x <= getIndentX() || y <= getIndentY()) {\n return;\n }\n\n // If click is not inside of selection, select the right clicked cell\n const cell = pixelToCell(xy);\n if (!isPointInsideSelection(selection, cell)) {\n onSelectionChange?.([cell, cell]);\n }\n\n onPointerMove(e as any);\n\n const [cellX, cellY] = cell;\n const event: SheetMouseEvent = {\n ...e,\n cellX,\n cellY,\n };\n onRightClick?.(event);\n },\n [getMousePosition, onSelectionChange, onPointerMove, onRightClick]\n );\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onDoubleClick,\n onContextMenu,\n };\n\n return { knobPosition, mouseHandlers };\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n sourceData: CellPropertyFunction<string | number | null>,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean | null>\n): Change[] => {\n const [[kx1, ky1], [kx2, ky2]] = normalizeSelection(knobArea);\n const [[sx1, sy1], [sx2, sy2]] = normalizeSelection(selection);\n\n let fx1 = kx1;\n let fy1 = ky1;\n let fx2 = kx2;\n let fy2 = ky2;\n\n const changes: Change[] = [];\n\n // TODO: this should be made less cryptic, using logical selection ops/fns\n\n if (fx2 - fx1 === sx2 - sx1) {\n // vertical\n if (fy1 === sy1) {\n fy1 = sy2 + 1;\n } else {\n fy2 = sy1 - 1;\n }\n if (fx1 === -1 && fx2 === -1) {\n const [maxX] = findApproxMaxEditDataIndex(editData);\n fx1 = 0;\n fx2 = maxX;\n }\n let srcY = sy1;\n for (let y = fy1; y <= fy2; y++) {\n for (let x = fx1; x <= fx2; x++) {\n const value = sourceData(x, srcY);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: x, y: srcY } });\n }\n }\n srcY = srcY + 1;\n if (srcY > sy2) {\n srcY = sy1;\n }\n }\n } else {\n // horizontal\n if (fx1 === sx1) {\n fx1 = sx2 + 1;\n } else {\n fx2 = sx1 - 1;\n }\n if (fy1 === -1 && fy2 === -1) {\n const [, maxY] = findApproxMaxEditDataIndex(editData);\n fy1 = 0;\n fy2 = maxY;\n }\n let srcX = sx1;\n for (let x = fx1; x <= fx2; x++) {\n for (let y = fy1; y <= fy2; y++) {\n const value = sourceData(srcX, y);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: srcX, y: y } });\n }\n }\n srcX = srcX + 1;\n if (srcX > sx2) {\n srcX = sx1;\n }\n }\n }\n\n return changes;\n};\n","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY } from './coordinate';\nimport { ONE_ONE } from './constants';\n\nexport const useScroll = (\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n onOffsetChange?: (offset: XY) => void,\n onMaxScrollChange?: (maxScroll: XY) => void\n) => {\n return useCallback(\n (e: UIEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const { absoluteToCell, cellToAbsolute } = cellLayout;\n\n // Zero scroll position is considered in the center of the top/left cell\n const [nudgeX, nudgeY] = cellToAbsolute([0, 0], [0.5, 0.5]);\n\n const xy: XY = [e.target.scrollLeft + nudgeX, e.target.scrollTop + nudgeY];\n\n const cell = absoluteToCell(xy);\n if (!isSameXY(cell, offset)) {\n onOffsetChange?.(cell);\n }\n\n // TODO: smooth scrolling\n // const pixel = subXY(cellToAbsolute(cell), xy);\n //if (!isSameXY(pixel, pixelOffset)) {\n // setPixelOffset(pixel);\n //}\n\n const [x, y] = xy;\n const [maxScrollX, maxScrollY] = maxScroll;\n const growX = maxScrollX < x + 1 ? 1.5 : 1;\n const growY = maxScrollY < y + 1 ? 1.5 : 1;\n if (growX > 1 || growY > 1) {\n onMaxScrollChange?.(mulXY(maxScroll, [growX, growY]));\n }\n },\n [cellLayout, onOffsetChange, onMaxScrollChange]\n );\n};\n\nexport const scrollToCell = (\n element: HTMLDivElement,\n cell: XY,\n view: XY,\n freeze: XY,\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n callback: (offset: XY, maxScroll: XY) => void\n) => {\n const [x, y] = cell;\n const [w, h] = view;\n const [offsetX, offsetY] = offset;\n\n const { cellToAbsolute, cellToPixel, columnToPixel, rowToPixel } = cellLayout;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n const [left, top] = cellToPixel(cell);\n const [right, bottom] = cellToPixel(cell, ONE_ONE);\n\n let [newX, newY] = offset;\n\n // If moving left/up, scroll to head\n if (left <= frozenX) {\n newX = x - freeze[0];\n }\n if (top <= frozenY) {\n newY = y - freeze[1];\n }\n\n // If moving right/down, scroll cell by cell until right/bottom of cell is visible\n if (right > w) {\n let edge = right - w + columnToPixel(newX);\n while (columnToPixel(++newX) < edge) {}\n }\n if (bottom > h) {\n let edge = bottom - h + rowToPixel(newY);\n while (rowToPixel(++newY) < edge) {}\n }\n\n // Don't scroll on infinite axis\n const newOffset: XY = [newX >= 0 ? newX : offsetX, newY >= 0 ? newY : offsetY];\n\n if (!isSameXY(newOffset, offset)) {\n const scroll = cellToAbsolute(newOffset);\n const [nudgeX, nudgeY] = cellToAbsolute([0, 0], [0.5, 0.5]);\n\n callback(newOffset, maxXY(maxScroll, scroll));\n setTimeout(() => {\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX - nudgeX;\n element.scrollTop = scrollY - nudgeY;\n });\n }\n};\n","import { CellPropertyFunction, Change, ParsedChange, Rectangle } from './types';\nimport { RefObject, useLayoutEffect, useEffect } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { normalizeSelection, isMaybeRowSelection, isMaybeColumnSelection, isEmptySelection } from './coordinate';\n\nexport const useClipboardCopy = (\n textAreaRef: RefObject<HTMLTextAreaElement>,\n selection: Rectangle,\n editMode: boolean,\n editData: CellPropertyFunction<string>\n) => {\n useLayoutEffect(() => {\n const { current: textArea } = textAreaRef;\n if (!textArea) return;\n\n if (editMode) return;\n if (isEmptySelection(selection)) return;\n\n let v = formatSelectionAsTSV(selection, editData);\n\n // Bizarre: having only TAB/RETURN characters inside the textarea\n // prevents native auto-scroll. Also bizarre: auto-scroll doesn't work\n // if we don't focus the textarea at all.\n if (v.match(/^[\\t\\n]*$/)) {\n v = ' ' + v;\n }\n textArea.value = v;\n }, [selection, editMode, editData, textAreaRef]);\n\n useLayoutEffect(() => {\n const { current: textArea } = textAreaRef;\n if (!textArea) return;\n\n const focus = () => {\n textArea.focus({ preventScroll: true });\n textArea.select();\n };\n\n if (editMode) return;\n if (document.activeElement === textArea) return;\n\n const activeTagName = (document as any).activeElement.tagName.toLowerCase();\n if (\n !(\n (activeTagName === 'div' && (document as any).activeElement.contentEditable === 'true') ||\n activeTagName === 'input' ||\n activeTagName === 'textarea' ||\n activeTagName === 'select'\n )\n ) {\n focus();\n }\n });\n};\n\nexport const useClipboardPaste = (\n textAreaRef: RefObject<HTMLTextAreaElement>,\n selection: Rectangle,\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Array<Change>) => void,\n isReadOnly?: CellPropertyFunction<boolean>\n) => {\n useEffect(() => {\n const onPaste = (e: any) => {\n const { current: textArea } = textAreaRef;\n if (!textArea) return;\n\n if (e.target !== textArea) return;\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const types = clipboardData.types;\n\n let parsed;\n if (types.includes('text/html')) {\n const pastedHtml = clipboardData.getData('text/html');\n parsed = parsePastedHtml(selection, pastedHtml, isReadOnly);\n } else if (types.includes('text/plain')) {\n const text = clipboardData.getData('text/plain');\n parsed = parsePastedText(selection, text, isReadOnly);\n }\n if (!parsed) return;\n\n const { selection: s, changes } = parsed;\n onChange?.(changes);\n onSelectionChange?.(s);\n };\n\n window.document.addEventListener('paste', onPaste);\n return () => {\n window.document.removeEventListener('paste', onPaste);\n };\n }, [textAreaRef, selection]);\n};\n\nconst formatTSV = (rows: string[][]) => rows.map((row) => row.join('\\t')).join('\\n');\n\nconst formatSelectionAsTSV = (selection: Rectangle, editData: CellPropertyFunction<string>) => {\n if (isEmptySelection(selection)) return '';\n\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n if (isMaybeRowSelection(selection)) {\n const [cellX] = findApproxMaxEditDataIndex(editData);\n minX = 0;\n maxX = cellX;\n }\n if (isMaybeColumnSelection(selection)) {\n const [, cellY] = findApproxMaxEditDataIndex(editData);\n minY = 0;\n maxY = cellY;\n }\n\n const rows: string[][] = [];\n\n for (let y = minY; y <= maxY; y++) {\n const row: string[] = [];\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value != null ? value : '');\n }\n }\n\n rows.push(row);\n }\n\n return formatTSV(rows);\n};\n\nconst findTable = (element: any): any => {\n for (const child of element.children) {\n if (child.nodeName === 'TABLE') {\n return child;\n }\n const maybeTable = findTable(child);\n if (maybeTable) {\n return maybeTable;\n }\n }\n};\n\nconst parsePastedHtml = (\n selection: Rectangle,\n html: string,\n isReadOnly?: CellPropertyFunction<boolean>\n): ParsedChange | null => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const [[minX, minY]] = normalizeSelection(selection);\n let left = isMaybeRowSelection(selection) ? 0 : minX;\n let top = isMaybeColumnSelection(selection) ? 0 : minY;\n\n const changes = [];\n\n const tableNode = findTable(div);\n if (!tableNode) {\n return null;\n }\n\n let right = left;\n let bottom = top;\n\n let y = top;\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n let x = left;\n if (tr.nodeName === 'TR') {\n for (const td of tr.children) {\n if (td.nodeName === 'TD') {\n let str: string = '';\n if (td.children.length !== 0 && td.children[0].nodeName === 'P') {\n const p = td.children[0];\n if (p.children.length !== 0 && p.children[0].nodeName === 'FONT') {\n str = p.children[0].textContent.trim();\n } else {\n str = p.textContent.trim();\n }\n } else {\n str = td.textContent.trim();\n }\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n\n if (!isReadOnly?.(x, y)) changes.push({ x, y, value: str });\n x++;\n }\n }\n y++;\n }\n right = Math.max(right, x - 1);\n }\n }\n }\n bottom = Math.max(top, y - 1);\n\n return {\n selection: [\n [left, top],\n [right, bottom],\n ],\n changes,\n };\n};\n\nconst parsePastedText = (\n selection: Rectangle,\n text: string,\n isReadOnly?: CellPropertyFunction<boolean>\n): ParsedChange => {\n const [[minX, minY]] = normalizeSelection(selection);\n let left = isMaybeRowSelection(selection) ? 0 : minX;\n let top = isMaybeColumnSelection(selection) ? 0 : minY;\n\n const rows = text.split(/\\r?\\n/);\n let right = left;\n let bottom = top + rows.length - 1;\n\n const changes = [];\n for (let y = 0; y < rows.length; y++) {\n const cols = rows[y].split('\\t');\n right = Math.max(right, left + cols.length - 1);\n\n for (let x = 0; x < cols.length; x++) {\n const X = left + x;\n const Y = top + y;\n\n if (!isReadOnly?.(X, Y)) changes.push({ x: X, y: Y, value: cols[x] });\n }\n }\n\n return {\n selection: [\n [left, top],\n [right, bottom],\n ],\n changes,\n };\n};\n","import { XY, CellLayout, VisibleLayout, LayoutCache } from './types';\nimport { seq } from './util';\nimport { ORIGIN } from './constants';\n\nconst INITIAL_SIZE = 256;\n\n// Local cell layout (virtualized with frozen columns/rows)\n//\n// - converts cell indices to (x, y) canvas pixels for any cell, including off-screen\n// - maps (x, y) canvas pixels back to cell index for any visible cell\n// - can also generate absolute, unscrolled offsets relative to (0,0) to drive scrolling\n// - generates list of visible cols/rows in view\n//\n// Note that adjacent column indices are not necessarily adjacent, i.e. end of [i] != start of [i + 1].\nexport const makeCellLayout = (\n freeze: XY,\n indent: XY,\n offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [indentX, indentY] = indent;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => indentX;\n const getIndentY = () => indentY;\n\n // Origin for cell, frozen or relative\n const getBaseOriginFor = (index: number, freeze: number, offset: number) => {\n return index < freeze ? 0 : offset + freeze;\n };\n\n // Get visible pixel x of cell\n const columnToPixel = (column: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(column, freezeX, offsetX);\n const relative = columns.getStart(column) - columns.getStart(base);\n const adjust = column < freezeX ? 0 : columns.getStart(freezeX) - columns.getStart(0);\n const size = column < 0 ? indentX : columns.getSize(column);\n\n return column < 0 ? 0 : indentX + relative + adjust + anchor * size;\n };\n\n // Get visible pixel y of cell\n const rowToPixel = (row: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(row, freezeY, offsetY);\n const relative = rows.getStart(row) - rows.getStart(base);\n const adjust = row < freezeY ? 0 : rows.getStart(freezeY) - rows.getStart(0);\n const size = row < 0 ? indentY : rows.getSize(row);\n\n return row < 0 ? 0 : indentY + relative + adjust + anchor * size;\n };\n\n // Get visible pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToPixel = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToPixel(cellX, anchorX), rowToPixel(cellY, anchorY)];\n };\n\n // Get absolute / unscrolled pixel x of cell\n const columnToAbsolute = (column: number, anchorX: number = 0): number => {\n const relative = columns.getStart(column);\n const size = column < 0 ? 0 : columns.getSize(column);\n\n return relative + anchorX * size;\n };\n\n // Get absolute / unscrolled pixel y of cell\n const rowToAbsolute = (row: number, anchorY: number = 0): number => {\n const relative = rows.getStart(row);\n const size = row < 0 ? 0 : rows.getSize(row);\n\n return relative + anchorY * size;\n };\n\n // Get absolute / unscrolled pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToAbsolute = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToAbsolute(cellX, anchorX), rowToAbsolute(cellY, anchorY)];\n };\n\n // Lookup pixel X or Y in cell layout\n const pixelToIndex = (\n pixel: number,\n anchor: number,\n indent: number,\n freeze: number,\n offset: number,\n layout: LayoutCache\n ) => {\n const relative = pixel - indent;\n if (relative < 0) return -1;\n\n const { getStart, lookupIndex } = layout;\n const frozen = getStart(freeze);\n if (relative < frozen) {\n return lookupIndex(relative, anchor);\n } else {\n const base = getStart(offset + freeze);\n const adjust = getStart(freeze) - getStart(0);\n return lookupIndex(base + relative - adjust, anchor);\n }\n };\n\n // Lookup pixel X or Y in cell layout (helpers)\n const pixelToColumn = (pixelX: number, anchorX: number = 0) =>\n pixelToIndex(pixelX, anchorX, indentX, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) =>\n pixelToIndex(pixelY, anchorY, indentY, freezeY, offsetY, rows);\n\n // Lookup pixel XY in cell layout\n const pixelToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [pixelToColumn(pixelX, anchorX), pixelToRow(pixelY, anchorY)];\n };\n\n // Lookup absolute / unscrolled pixel X or Y in cell layout\n const absoluteToIndex = (pixel: number, anchor: number, layout: LayoutCache) => {\n if (pixel < 0) return -1;\n\n const { lookupIndex } = layout;\n return lookupIndex(pixel, anchor);\n };\n\n // Lookup absolute / unscrolled X or Y in cell layout (helpers)\n const absoluteToColumn = (pixelX: number, anchorX: number = 0) => absoluteToIndex(pixelX, anchorX, columns);\n const absoluteToRow = (pixelY: number, anchorY: number = 0) => absoluteToIndex(pixelY, anchorY, rows);\n\n // Lookup absolute / unscrolled XY in cell layout\n const absoluteToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [absoluteToColumn(pixelX, anchorX), absoluteToRow(pixelY, anchorY)];\n };\n\n // Get visible range of columns or rows\n const getVisibleIndices = (view: number, indent: number, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const { getStart } = layout;\n const relative = view - indent + getStart(offset);\n for (let i = offset + freeze; getStart(i) <= relative; ++i) {\n indices.push(i);\n }\n\n return indices;\n };\n\n // Get visible range for an XY viewport\n const getVisibleCells = (view: XY): VisibleLayout => {\n const [viewX, viewY] = view;\n return {\n columns: getVisibleIndices(viewX, indentX, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, indentY, freezeY, offsetY, rows),\n };\n };\n\n const getVersion = () => columns.getVersion() + rows.getVersion();\n\n return {\n columnToPixel,\n rowToPixel,\n cellToPixel,\n\n columnToAbsolute,\n rowToAbsolute,\n cellToAbsolute,\n\n pixelToColumn,\n pixelToRow,\n pixelToCell,\n\n absoluteToColumn,\n absoluteToRow,\n absoluteToCell,\n\n getVisibleCells,\n getIndentX,\n getIndentY,\n\n getVersion,\n };\n};\n\n// Offset cache in 1 dimension.\n//\n// Allows O(1) queries of distance between any two points, once warmed up.\n// Can do reverse lookup back to index with binary search, once warmed up.\n//\n// - caches sizer(i), each is only called once\n// - offset[0] = 0\n// - adds up offset[i] = sizer(0) + sizer(1) + ... + sizer(i - 1)\n// - cache can be truncated during resizing ops at split\n// - to replace sizer function, cache must be destroyed\nexport const makeLayoutCache = (sizer: (index: number) => number): LayoutCache => {\n const offsets = makeIntMap(INITIAL_SIZE);\n const sizes = makeIntMap(INITIAL_SIZE);\n\n let version = 0;\n offsets.set(0, 0);\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return 0;\n if (sizes.has(i)) return sizes.get(i)!;\n\n const size = sizer(i) || 0;\n sizes.set(i, size);\n return size;\n };\n\n // Cache offset sum recursively\n const getOffset = (i: number): number => {\n if (i < 0) return 0;\n if (offsets.has(i)) return offsets.get(i)!;\n\n let j = offsets.tail() || 0;\n\n // Use a while loop to avoid stack overflow\n while (j < i) {\n const size = getSize(j);\n const offset = (offsets.get(j) || 0) + size;\n offsets.set(++j, offset);\n }\n\n return offsets.get(i)!;\n };\n\n // Boundary points\n const getStart = (i: number) => getOffset(i);\n const getEnd = (i: number) => getOffset(i + 1);\n\n // Reverse lookup from offset to index\n const lookupIndex = (x: number, anchor: number = 0) => {\n // Get end of offsets array\n let last = offsets.tail() || 0;\n\n // Extend cache if value exceeds current end\n while (getOffset(last) < x && getSize(last)) last += 64;\n\n // Do binary search for exact position\n let start = 0;\n let end = last;\n while (start < end) {\n let mid = start + Math.floor((end - start) / 2) + 1;\n let value = getOffset(mid) - (anchor ? anchor * getSize(mid - 1) : 0);\n if (value <= x) start = mid;\n else end = mid - 1;\n }\n\n return start;\n };\n\n const clearAfter = (index: number) => {\n index = Math.max(0, index);\n offsets.truncate(index);\n sizes.truncate(index);\n version++;\n };\n\n const setSizer = (s: (index: number) => number) => {\n sizer = s;\n };\n const getVersion = () => version;\n\n return { getSize, getStart, getEnd, getVersion, lookupIndex, setSizer, clearAfter };\n};\n\n// Fast map<integer, integer> that is mostly filled in from start to end.\n// Elements are only removed by truncating all indices > n.\nconst makeIntMap = (initialSize: number = 128) => {\n let used: Uint8Array;\n let values: Uint32Array;\n let last = 0;\n\n const GROW = 1.2; // 20% growth at a time\n\n const allocate = (size: number) => {\n let newUsed = new Uint8Array(size);\n let newValues = new Uint32Array(size);\n if (used) copy(used, newUsed);\n if (values) copy(values, newValues);\n used = newUsed;\n values = newValues;\n };\n allocate(initialSize);\n\n const copy = (from: Uint8Array | Uint32Array, to: Uint8Array | Uint32Array) => {\n let n = Math.min(from.length, to.length);\n for (let i = 0; i < n; ++i) {\n to[i] = from[i];\n }\n };\n\n const ensure = (size: number) => {\n const l = values.length;\n const grow = Math.round(l * GROW);\n if (l < size) allocate(Math.max(grow, size));\n };\n\n const truncate = (size: number) => {\n const l = values.length;\n\n // Do nothing if smaller\n if (l < size) return;\n\n // If more than 20% bigger, shrink to exact size\n const shrink = Math.round(size * GROW);\n if (l > shrink) allocate(size);\n // Else zero out tail\n else for (let i = size; i < l; ++i) used[i] = 0;\n\n // Track last filled element\n last = Math.min(last, size);\n while (last > 0 && !used[last]) last--;\n };\n\n const getTail = () => (used[last] ? last : null);\n\n const setValue = (i: number, value: number) => {\n ensure(i + 1);\n values[i] = value;\n used[i] = 1;\n last = Math.max(last, i);\n };\n\n const getValue = (i: number) => (used[i] ? values[i] : null);\n const hasValue = (i: number) => !!used[i];\n\n return { truncate, set: setValue, get: getValue, has: hasValue, tail: getTail };\n};\n","import { InternalSheetStyle, SheetStyle, Style } from './types';\nimport { COLORS, SIZES } from './constants';\n\nexport const resolveSheetStyle = (sheetStyle?: SheetStyle): InternalSheetStyle => {\n return {\n freezeColumns: sheetStyle?.freezeColumns || 0,\n freezeRows: sheetStyle?.freezeRows || 0,\n hideColumnHeaders: sheetStyle?.hideColumnHeaders || false,\n hideRowHeaders: sheetStyle?.hideRowHeaders || false,\n hideGridlines: sheetStyle?.hideGridlines || false,\n hideScrollBars: sheetStyle?.hideScrollBars || false,\n columnHeaderHeight: sheetStyle?.hideColumnHeaders ? 1 : SIZES.headerHeight,\n rowHeaderWidth: sheetStyle?.hideRowHeaders ? 1 : SIZES.headerWidth,\n shadowBlur: sheetStyle?.shadowBlur ?? SIZES.shadowBlur,\n shadowOpacity: sheetStyle?.shadowOpacity ?? SIZES.shadowOpacity,\n shadowColor: sheetStyle?.shadowColor ?? COLORS.shadowColor,\n };\n};\n\nexport const resolveCellStyle = (optionalStyle: Style, defaultStyle: Required<Style>): Required<Style> => {\n return {\n ...defaultStyle,\n ...optionalStyle,\n };\n};\n\nexport const applyAlignment = (\n start: number,\n cellSize: number,\n style: Required<Style>,\n imageWidth: number,\n alignment: 'left' | 'center' | 'right' = style.textAlign\n): number => {\n if (alignment === 'left') {\n return start + style.marginLeft;\n } else if (alignment === 'center') {\n return start + cellSize * 0.5 - imageWidth / 2;\n } else if (alignment === 'right') {\n return start + (cellSize - style.marginRight - imageWidth);\n }\n return start;\n};\n","import {\n CellLayout,\n CellPropertyFunction,\n RowOrColumnPropertyFunction,\n InternalSheetStyle,\n Rectangle,\n Selection,\n Clickable,\n Style,\n CellContentType,\n VisibleLayout,\n XY,\n} from './types';\nimport { applyAlignment, resolveCellStyle } from './style';\nimport { normalizeSelection, isEmptySelection, isRowSelection, isColumnSelection } from './coordinate';\nimport { isInRange, isInRangeLeft, isInRangeCenter } from './util';\nimport {\n COLORS,\n SIZES,\n DEFAULT_CELL_STYLE,\n DEFAULT_COLUMN_HEADER_STYLE,\n HEADER_SELECTED_STYLE,\n HEADER_ACTIVE_STYLE,\n NO_STYLE,\n ONE_ONE,\n} from './constants';\n\nexport const renderSheet = (\n context: CanvasRenderingContext2D,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n\n knobPosition: XY | null,\n knobArea: Rectangle | null,\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyFunction<CellContentType>,\n\n dataOffset: XY\n): Clickable[] => {\n const { canvas } = context;\n const { width, height } = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\n rowHeaderWidth,\n columnHeaderHeight,\n freezeColumns,\n freezeRows,\n shadowBlur,\n shadowColor,\n shadowOpacity,\n } = sheetStyle;\n const { columns, rows } = visibleCells;\n const { columnToPixel, rowToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const clickables: Clickable[] = [];\n\n const freeze: XY = [freezeColumns, freezeRows];\n const indent: XY = [rowHeaderWidth, columnHeaderHeight];\n\n resizeCanvas(canvas);\n context.clearRect(0, 0, width, height);\n context.fillStyle = 'white';\n context.fillRect(0, 0, width, height);\n context.shadowColor = '#00000080';\n\n // Cell fill\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const { fillColor } = cellStyle(x, y);\n if (fillColor) {\n context.fillStyle = fillColor;\n context.fillRect(left, top, right - left, bottom - top);\n }\n }\n }\n\n const selectionActive = !isEmptySelection(selection);\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [selected, hideKnob] = resolveFrozenSelection(selection, cellLayout, freeze, indent, dataOffset);\n\n // Selection fill\n if (selectionActive) {\n const [[left, top], [right, bottom]] = selected;\n context.fillStyle = COLORS.selectionBackground;\n context.fillRect(left, top, right - left, bottom - top);\n }\n\n if (!hideRowHeaders) {\n // Row header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, rowHeaderWidth, context.canvas.height);\n\n // Row header selection shadow\n if (selectionActive && !columnSelectionActive) {\n const [[, top], [, bottom]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(0, top, rowHeaderWidth, bottom - top);\n }\n }\n\n if (!hideColumnHeaders) {\n // Column header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, context.canvas.width, columnHeaderHeight);\n\n // Column header selection shadow\n if (selectionActive && !rowSelectionActive) {\n const [[left], [right]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(left, 0, right - left, columnHeaderHeight);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? rowHeaderWidth : context.canvas.width;\n const gridBottom = hideGridlines ? columnHeaderHeight : context.canvas.height;\n\n const drawGridLineX = (x: number, height: number) => {\n context.beginPath();\n context.moveTo(x - 0.5, 0);\n context.lineTo(x - 0.5, height);\n context.stroke();\n };\n\n const drawGridLineY = (y: number, width: number) => {\n context.beginPath();\n context.moveTo(0, y - 0.5);\n context.lineTo(width, y - 0.5);\n context.stroke();\n };\n\n drawGridLineX(rowHeaderWidth, context.canvas.height);\n drawGridLineY(columnHeaderHeight, context.canvas.width);\n\n for (const column of columns) {\n const right = columnToPixel(column, 1);\n drawGridLineX(right, gridBottom);\n }\n\n for (const row of rows) {\n const bottom = rowToPixel(row, 1);\n drawGridLineY(bottom, gridRight);\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // Row header text\n if (!hideRowHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n context.font = DEFAULT_CELL_STYLE.fontSize + 'px ' + DEFAULT_CELL_STYLE.fontFamily;\n context.fillStyle = COLORS.headerText;\n\n for (const row of rows) {\n const content = `${row + 1}`;\n\n // Row selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(row, minY, maxY);\n const isSelected = rowSelectionActive && !columnSelectionActive && isActive;\n const style = isSelected ? HEADER_SELECTED_STYLE : isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n clickables.push(\n ...renderCell(\n context,\n content,\n style,\n DEFAULT_COLUMN_HEADER_STYLE,\n 0,\n top,\n rowHeaderWidth,\n bottom - top\n )\n );\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n\n for (const column of columns) {\n const content = columnHeaders(column) ?? excelHeaderString(column + 1);\n\n // Column selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(column, minX, maxX);\n const selectedStyle =\n columnSelectionActive && !rowSelectionActive && isActive ? HEADER_SELECTED_STYLE : NO_STYLE;\n const activeStyle = isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n const style = {\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n clickables.push(\n ...renderCell(\n context,\n content,\n style,\n DEFAULT_COLUMN_HEADER_STYLE,\n left,\n 0,\n right - left,\n columnHeaderHeight\n )\n );\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(left, top, right - left - 1, bottom - top - 1);\n }\n\n for (const secondarySelection of secondarySelections) {\n const selection = secondarySelection.span;\n if (isEmptySelection(selection)) continue;\n\n const [selected] = resolveFrozenSelection(selection, cellLayout, freeze, indent, dataOffset);\n const [[left, top], [right, bottom]] = selected;\n\n context.strokeStyle = secondarySelection.color;\n context.lineWidth = 1;\n context.beginPath();\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n }\n\n // Knob drag outline\n if (knobArea) {\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(knobArea);\n const left = columnToPixel(minX);\n const top = rowToPixel(minY);\n const right = columnToPixel(maxX, 1);\n const bottom = rowToPixel(maxY, 1);\n\n context.strokeStyle = COLORS.knobAreaBorder;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n context.setLineDash([]);\n }\n\n // Selection knob\n if (knobPosition && !hideKnob) {\n const [knobX, knobY] = knobPosition;\n context.fillStyle = COLORS.selectionBorder;\n context.fillRect(knobX - SIZES.knobArea * 0.5, knobY - SIZES.knobArea * 0.5, SIZES.knobArea, SIZES.knobArea);\n }\n\n // Drag ghost (pixels)\n if (dragOffset) {\n const [shiftX, shiftY] = dragOffset;\n const [[left, top], [right, bottom]] = resolveSelection(selection, cellLayout);\n\n context.fillStyle = COLORS.dragGhost;\n context.fillRect(left + shiftX, top + shiftY, right - left, bottom - top);\n }\n\n // Drop target\n if (dropTarget) {\n let [[left, top], [right, bottom]] = resolveSelection(dropTarget, cellLayout);\n\n context.strokeStyle = COLORS.dropTarget;\n context.lineWidth = 2;\n\n if (isColumnSelection(dropTarget)) {\n right = left;\n }\n if (isRowSelection(dropTarget)) {\n bottom = top;\n }\n context.strokeRect(left - 1, top - 1, right - left, bottom - top);\n }\n\n // Draw frozen row/col shadow\n const [scrollX, scrollY] = dataOffset;\n const hasRowShadow = freezeRows > 0 && scrollY > 0;\n const hasColumnShadow = freezeColumns > 0 && scrollX > 0;\n if (hasRowShadow || hasColumnShadow) {\n if (hasRowShadow) {\n const h = columnHeaderHeight + rowToAbsolute(freezeRows);\n const gradient = context.createLinearGradient(0, h, 0, h + shadowBlur);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(0, h, width, shadowBlur);\n }\n if (hasColumnShadow) {\n const w = rowHeaderWidth + columnToAbsolute(freezeColumns);\n const gradient = context.createLinearGradient(w, 0, w + shadowBlur, 0);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(w, 0, shadowBlur, height);\n }\n }\n\n // Cell contents\n context.textBaseline = 'middle';\n\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const cellContent = displayData(x, y);\n if (cellContent !== null && cellContent !== undefined) {\n const style = cellStyle(x, y);\n clickables.push(\n ...renderCell(\n context,\n cellContent,\n style,\n DEFAULT_CELL_STYLE,\n left,\n top,\n right - left,\n bottom - top\n )\n );\n }\n }\n }\n\n return clickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentType,\n style: Style,\n defaultCellStyle: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number\n): Clickable[] => {\n const clickables: Clickable[] = [];\n\n if (cellContent === null) {\n return clickables;\n }\n\n const finalStyle = resolveCellStyle(style, defaultCellStyle);\n context.fillStyle = finalStyle.color;\n context.font = finalStyle.weight + ' ' + finalStyle.fontSize + 'px ' + finalStyle.fontFamily;\n context.textAlign = finalStyle.textAlign;\n\n const yy = Math.floor(yCoord + cellHeight * 0.5);\n\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n\n if (finalStyle.backgroundColor !== '') {\n context.fillStyle = finalStyle.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = finalStyle.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const xx = applyAlignment(xCoord, cellWidth, finalStyle, 0);\n const text = '' + cellContent;\n context.fillText(text, xx, yy);\n } else if (typeof cellContent === 'object') {\n for (const obj of cellContent.items) {\n let x = 0;\n let y = 0;\n let w = 0;\n let h = 0;\n\n if (obj.content instanceof HTMLImageElement) {\n w = obj.width || cellWidth;\n h = obj.height || cellHeight;\n\n const finalX = applyAlignment(xCoord, cellWidth, finalStyle, w, obj.horizontalAlign);\n x = finalX + obj.x;\n y = yy + obj.y;\n\n context.drawImage(obj.content, x, y, w, h);\n } else if (typeof obj.content === 'string' || typeof obj.content === 'number') {\n if (obj.horizontalAlign) {\n context.textAlign = obj.horizontalAlign;\n }\n const finalX = applyAlignment(xCoord, cellWidth, finalStyle, 0, obj.horizontalAlign);\n const text = '' + obj.content;\n\n const left = finalX + obj.x;\n const top = yy + obj.y;\n context.fillText(text, left, top);\n\n const measure = context.measureText(text);\n x = left - measure.actualBoundingBoxLeft;\n y = top - measure.actualBoundingBoxAscent;\n w = left + measure.actualBoundingBoxRight - x;\n h = top + measure.actualBoundingBoxDescent - y;\n }\n if (obj.onClick) {\n clickables.push({\n rect: [\n [x, y],\n [x + w, y + h],\n ],\n obj,\n });\n }\n }\n }\n context.restore();\n\n return clickables;\n};\n\n// Resolve selection into a consistent rectangle, without dealing with frozen rows/columns\nconst resolveSelection = (selection: Rectangle, cellLayout: CellLayout) => {\n const { cellToPixel } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [left, top],\n [right, bottom],\n ];\n};\n\n// Resolve selection into a consistent rectangle, handling edge cases around frozen rows/columns.\nconst resolveFrozenSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n\n freeze: XY,\n indent: XY,\n offset: XY\n) => {\n const { cellToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n const [freezeX, freezeY] = freeze;\n const [indentX, indentY] = indent;\n const [offsetX, offsetY] = offset;\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n const [maxX, maxY] = max;\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Get frozen edge\n const frozenX = columnToAbsolute(freezeX);\n const frozenY = rowToAbsolute(freezeY);\n\n let hideKnob = false;\n\n // If the selection crosses the frozen edge, it needs to always cover the entire frozen area.\n if (isInRangeCenter(freezeX, minX, maxX + 1)) {\n const edge = indentX + frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = indentY + frozenY;\n if (bottom <= edge) {\n bottom = edge;\n hideKnob = true;\n }\n }\n\n // If the selection starts/ends under the frozen area, treat as off-screen\n if (isInRangeLeft(minX, freezeX, offsetX + freezeX)) {\n left = -1e5;\n\n const lastInvisibleX = offsetX + freezeX - 1;\n if (maxX <= lastInvisibleX) {\n if (maxX === lastInvisibleX) right = indentX;\n else right = -1e5;\n hideKnob = true;\n }\n }\n if (isInRangeLeft(minY, freezeY, offsetY + freezeY)) {\n top = -1e5;\n\n const lastInvisibleY = offsetY + freezeY - 1;\n if (maxY <= lastInvisibleY) {\n if (maxY === lastInvisibleY) bottom = indentY;\n else bottom = -1e5;\n hideKnob = true;\n }\n }\n\n if (rowSelectionActive && offsetX > 0) {\n hideKnob = true;\n }\n if (columnSelectionActive && offsetY > 0) {\n hideKnob = true;\n }\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [\n [left, top],\n [right, bottom],\n ],\n hideKnob,\n ] as [Rectangle, boolean];\n};\n\nconst resizeCanvas = (canvas: HTMLCanvasElement) => {\n const { width, height } = canvas.getBoundingClientRect();\n let { devicePixelRatio: ratio = 1 } = window;\n if (ratio < 1) {\n ratio = 1;\n }\n const newCanvasWidth = Math.round(width * ratio);\n const newCanvasHeight = Math.round(height * ratio);\n\n if (canvas.width !== newCanvasWidth || canvas.height !== newCanvasHeight) {\n const context = canvas.getContext('2d');\n if (context) {\n canvas.width = newCanvasWidth;\n canvas.height = newCanvasHeight;\n context.scale(ratio, ratio);\n }\n return true;\n }\n\n return false;\n};\n\nconst excelHeaderString = (num: number) => {\n let s = '';\n let t = 0;\n while (num > 0) {\n t = (num - 1) % 26;\n s = String.fromCharCode(65 + t) + s;\n num = ((num - t) / 26) | 0;\n }\n return s || '';\n};\n\nconst halfShadowGradient = (gradient: CanvasGradient, rgb: string, opacity: number) => {\n const hex = (x: number) => ('0' + Math.round(x).toString(16)).slice(-2);\n // Half-sine ease\n const ease = (x: number) => 1.0 - Math.sin((x * Math.PI) / 2);\n // Gamma adjustment assuming blend on white\n const adjust = (x: number) => 1.0 - Math.pow(1.0 - x, 2.2);\n for (let i = 0; i <= 16; ++i) {\n const f = i / 16;\n gradient.addColorStop(f, rgb + hex(adjust(opacity * ease(f) * 0.5) * 255));\n }\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEvent,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellLayout,\n CellProperty,\n CellContentType,\n RowOrColumnProperty,\n Selection,\n Clickable,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n VisibleLayout,\n} from './types';\n\nimport {\n ARROW_KEYS,\n MAX_SEARCHABLE_INDEX,\n DEFAULT_CELL_STYLE,\n INITIAL_MAX_SCROLL,\n NO_CELL,\n NO_CLICKABLES,\n NO_SELECTION,\n NO_SELECTIONS,\n ORIGIN,\n ONE_ONE,\n} from './constants';\nimport {\n normalizeSelection,\n isSameSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\nimport { useMouse } from './mouse';\nimport { useScroll, scrollToCell } from './scroll';\nimport { useClipboardCopy, useClipboardPaste } from './clipboard';\nimport { expandSelectionToColumnGroups, expandSelectionToRowGroups } from './group';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createRowOrColumnProp, findInDisplayData } from './props';\nimport { renderSheet } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string;\n autoFocus: boolean;\n onKeyDown: KeyboardEventHandler<HTMLElement>;\n onChange: (value: string) => void;\n style: InputStyle;\n};\n\nexport type SheetRenderProps = {\n visibleCells: VisibleLayout;\n cellLayout: CellLayout;\n selection: Rectangle;\n editMode: boolean;\n};\n\nexport type SheetProps = {\n cellWidth?: RowOrColumnProperty<number>;\n cellHeight?: RowOrColumnProperty<number>;\n columnHeaders?: RowOrColumnProperty<CellContentType>;\n columnHeaderStyle?: RowOrColumnProperty<Style>;\n cellStyle?: CellProperty<Style>;\n readOnly?: CellProperty<boolean>;\n canSizeColumn?: RowOrColumnProperty<boolean>;\n canSizeRow?: RowOrColumnProperty<boolean>;\n canOrderColumn?: RowOrColumnProperty<boolean>;\n canOrderRow?: RowOrColumnProperty<boolean>;\n columnGroupKeys?: RowOrColumnProperty<string | number | null>;\n rowGroupKeys?: RowOrColumnProperty<string | number | null>;\n sourceData?: CellProperty<string | number | null>;\n displayData?: CellProperty<CellContentType>;\n editData?: CellProperty<string>;\n editKeys?: CellProperty<string>;\n sheetStyle?: SheetStyle;\n selection?: Rectangle;\n secondarySelections?: Selection[];\n\n cacheLayout?: boolean | number;\n dontCommitEditOnSelectionChange?: boolean;\n\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell?: (value?: string | number | null) => void\n ) => ReactElement | undefined;\n\n renderInside?: (props: SheetRenderProps) => React.ReactNode;\n renderOutside?: (props: SheetRenderProps) => React.ReactNode;\n\n onSelectionChanged?: (minX: number, minY: number, maxX: number, maxY: number) => void;\n onRightClick?: (e: SheetPointerEvent) => void;\n onChange?: (changes: Array<Change>) => void;\n onColumnOrderChange?: (indices: number[], order: number) => void;\n onRowOrderChange?: (indices: number[], order: number) => void;\n onCellWidthChange?: (indices: number[], value: number) => void;\n onCellHeightChange?: (indices: number[], value: number) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n};\n\nexport type SheetRef = CellLayout & {\n startEditingCell: (editCell: XY, arrowKeyCommitMode?: boolean) => void;\n};\n\nconst Sheet = forwardRef<SheetRef, SheetProps>((props, ref) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const [maxScroll, setMaxScroll] = useState<XY>(INITIAL_MAX_SCROLL);\n const [dataOffset, setDataOffset] = useState<XY>(ORIGIN);\n // TODO: smooth scrolling\n // const [pixelOffset, setPixelOffset] = useState<XY>(ORIGIN);\n\n const selectionProp = props.selection ?? NO_SELECTION;\n\n const [selection, setSelection] = useState<Rectangle>(selectionProp);\n const [knobArea, setKnobArea] = useState<Rectangle | null>(null);\n const [dragOffset, setDragOffset] = useState<XY | null>(null);\n const [dropTarget, setDropTarget] = useState<Rectangle | null>(null);\n const [editCell, setEditCell] = useState<XY>(NO_CELL);\n\n const [lastSelectionProp, setLastSelectionProp] = useState<Rectangle>(selectionProp);\n if (lastSelectionProp !== selectionProp) {\n setLastSelectionProp(selectionProp);\n setSelection(selectionProp);\n }\n\n const [editValue, setEditValue] = useState<string | number>('');\n const [arrowKeyCommitMode, setArrowKeyCommitMode] = useState(false);\n\n const { width: canvasWidth = 3000, height: canvasHeight = 3000 } = useResizeObserver({ ref: canvasRef });\n\n const cellWidth = useMemo(() => createRowOrColumnProp(props.cellWidth, 100), [props.cellWidth]);\n const cellHeight = useMemo(() => createRowOrColumnProp(props.cellHeight, 22), [props.cellHeight]);\n const columnHeaders = useMemo(() => createRowOrColumnProp(props.columnHeaders, null), [props.columnHeaders]);\n const columnHeaderStyle = useMemo(() => createRowOrColumnProp(props.columnHeaderStyle, {}), [\n props.columnHeaderStyle,\n ]);\n\n const canSizeColumn = useMemo(() => createRowOrColumnProp(props.canSizeColumn, true), [props.canSizeColumn]);\n const canSizeRow = useMemo(() => createRowOrColumnProp(props.canSizeRow, true), [props.canSizeRow]);\n const canOrderColumn = useMemo(() => createRowOrColumnProp(props.canOrderColumn, true), [props.canOrderColumn]);\n const canOrderRow = useMemo(() => createRowOrColumnProp(props.canOrderRow, true), [props.canOrderRow]);\n\n const rowGroupKeys = useMemo(() => createRowOrColumnProp(props.rowGroupKeys, null), [props.rowGroupKeys]);\n const columnGroupKeys = useMemo(() => createRowOrColumnProp(props.columnGroupKeys, null), [props.columnGroupKeys]);\n\n const cellReadOnly = useMemo(() => createCellProp(props.readOnly, false), [props.readOnly]);\n\n const sourceData = useMemo(() => createCellProp(props.sourceData, null), [props.sourceData]);\n const displayData = useMemo(() => createCellProp(props.displayData, ''), [props.displayData]);\n const editData = useMemo(() => createCellProp(props.editData, ''), [props.editData]);\n const editKeys = useMemo(() => createCellProp(props.editKeys, ''), [props.editKeys]);\n const cellStyle = useMemo(() => createCellProp(props.cellStyle, DEFAULT_CELL_STYLE), [props.cellStyle]);\n\n const sheetStyle: InternalSheetStyle = useMemo(() => resolveSheetStyle(props.sheetStyle), [props.sheetStyle]);\n const secondarySelections = props.secondarySelections ?? NO_SELECTIONS;\n\n const [maxScrollX, maxScrollY] = maxScroll;\n\n const [editCellX, editCellY] = editCell;\n const editMode = editCellX !== -1 && editCellY !== -1;\n\n // Global layout for unscrolled/unfrozen grid\n // Cached either per width/height pair, or permanently with invalidation on resize/reorder.\n const shouldCacheLayout = (props.cacheLayout ?? false) !== false;\n const layoutVersion = typeof props.cacheLayout === 'number' ? props.cacheLayout : 0;\n const columnLayout = useMemo(() => makeLayoutCache(cellWidth), [shouldCacheLayout ? layoutVersion : cellWidth]);\n const rowLayout = useMemo(() => makeLayoutCache(cellHeight), [shouldCacheLayout ? layoutVersion : cellHeight]);\n useMemo(() => {\n if (!shouldCacheLayout) return;\n\n columnLayout.setSizer(cellWidth);\n rowLayout.setSizer(cellHeight);\n\n // Depend on layoutVersion to allow for controlled external invalidation\n // eslint-disable-next-line\n }, [shouldCacheLayout, layoutVersion, cellWidth, cellHeight]);\n\n // Virtual layout for indented/scrolled/frozen grid\n const { freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight } = sheetStyle;\n const cellLayout = useMemo(\n () =>\n makeCellLayout(\n [freezeColumns, freezeRows],\n [rowHeaderWidth, columnHeaderHeight],\n dataOffset,\n columnLayout,\n rowLayout\n ),\n [freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight, dataOffset, columnLayout, rowLayout]\n );\n\n // Build range of visible cells\n const { getVisibleCells, cellToPixel, getVersion } = cellLayout;\n const visibleCells = useMemo(\n () => getVisibleCells([canvasWidth, canvasHeight]),\n // Need to invalidate view if cached layout version changed\n // eslint-disable-next-line\n [getVisibleCells, canvasWidth, canvasHeight, getVersion()]\n );\n\n // Notify of viewport change\n useLayoutEffect(() => {\n if (props.onScrollChange) {\n props.onScrollChange([...visibleCells.rows], [...visibleCells.columns]);\n }\n }, [visibleCells, props.onScrollChange]);\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollTo = true, toHead = false, dragOperation = false) => {\n if (!dragOperation) {\n if (isColumnSelection(newSelection) && columnGroupKeys) {\n newSelection = expandSelectionToColumnGroups(newSelection, columnGroupKeys);\n }\n if (isRowSelection(newSelection) && rowGroupKeys) {\n newSelection = expandSelectionToRowGroups(newSelection, rowGroupKeys);\n }\n }\n\n if (!isSameSelection(selection, newSelection)) {\n setSelection(newSelection);\n }\n\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n if (scrollTo) {\n const [anchor, head] = newSelection;\n scrollToCell(\n overlay,\n toHead ? head : anchor,\n [canvasWidth, canvasHeight],\n [freezeColumns, freezeRows],\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n }\n );\n }\n\n if (props.onSelectionChanged) {\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(newSelection);\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const commitEditingCell = (value?: string) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n props.onChange([{ x: cellX, y: cellY, value: value !== undefined ? value : editValue }]);\n }\n setEditCell(NO_CELL);\n };\n\n const startEditingCell = (editCell: XY, arrowKeyCommitMode = false) => {\n const [cellX, cellY] = editCell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n const editDataValue = editData(cellX, cellY);\n let val = '';\n if (editDataValue !== null && editDataValue !== undefined) {\n val = editDataValue;\n }\n setEditCell(editCell);\n setEditValue(val);\n setArrowKeyCommitMode(arrowKeyCommitMode);\n setLastEditKey(editKeys(...editCell));\n };\n\n // Output from rendered layout is used to drive events on user content\n const hitmapRef = useRef<Clickable[]>(NO_CLICKABLES);\n\n // Textarea is used to hold text to copy, and receives pastes\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n useClipboardCopy(textAreaRef, selection, editMode, editData);\n useClipboardPaste(textAreaRef, selection, changeSelection, props.onChange, cellReadOnly);\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);\n\n const { mouseHandlers, knobPosition } = useMouse(\n hitmapRef,\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellReadOnly,\n\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n\n columnGroupKeys,\n rowGroupKeys,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragOffset,\n setDropTarget,\n changeSelection,\n\n props.cacheLayout ? columnLayout.clearAfter : undefined,\n props.cacheLayout ? rowLayout.clearAfter : undefined,\n\n props.onChange,\n props.onColumnOrderChange,\n props.onRowOrderChange,\n props.onCellWidthChange,\n props.onCellHeightChange,\n props.onRightClick,\n props.dontCommitEditOnSelectionChange\n );\n\n useLayoutEffect(() => {\n const { current: canvas } = canvasRef;\n if (!canvas) {\n return;\n }\n\n const context = canvas.getContext('2d');\n if (!context) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n hitmapRef.current = renderSheet(\n context,\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n dataOffset\n );\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n dataOffset,\n ]);\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setEditCell(NO_CELL);\n return;\n }\n\n const direction =\n e.key === 'Enter' ? 'down' : e.key === 'Tab' ? 'right' : arrowKeyCommitMode ? ARROW_KEYS[e.key] : null;\n\n if (direction) {\n e.preventDefault();\n const step = getDirectionStep(direction);\n const head = maxXY(addXY(editCell, step), ORIGIN);\n commitEditingCell();\n changeSelection([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && e.key in ARROW_KEYS) {\n commitEditingCell();\n return;\n }\n\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'v') {\n return;\n }\n\n // copy\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'c') {\n const { current: textArea } = textAreaRef;\n textArea?.select();\n return;\n }\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n let [[x1, y1], [x2, y2]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n x1 = 0;\n x2 = MAX_SEARCHABLE_INDEX;\n }\n if (isColumnSelection(selection)) {\n y1 = 0;\n y2 = MAX_SEARCHABLE_INDEX;\n }\n\n const changes: Change[] = [];\n for (let y = y1; y <= y2; y++) {\n for (let x = x1; x <= x2; x++) {\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: null });\n }\n }\n }\n if (props.onChange) {\n props.onChange(changes);\n }\n return;\n }\n\n // nothing selected\n if (isEmptySelection(selection)) {\n return;\n }\n\n if (\n (e.keyCode >= 48 && e.keyCode <= 57) ||\n (e.keyCode >= 96 && e.keyCode <= 105) ||\n (e.keyCode >= 65 && e.keyCode <= 90) ||\n e.key === 'Enter' ||\n e.key === '-' ||\n e.key === '.' ||\n e.key === ','\n ) {\n const [cell] = selection;\n const [cellX, cellY] = cell;\n if (cellReadOnly(cellX, cellY)) {\n e.preventDefault(); // so we dont get keystrokes inside the text area\n return;\n }\n\n startEditingCell(cell, e.key !== 'Enter');\n return;\n }\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = selection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n } else {\n head = maxXY(addXY(head, step), ORIGIN);\n }\n if (!e.shiftKey) {\n anchor = head;\n }\n changeSelection([anchor, head], true, true);\n return;\n }\n\n e.preventDefault();\n };\n\n const [lastEditKey, setLastEditKey] = useState('');\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextTextAlign: 'right' | 'left' | 'center' = 'right';\n if (editMode) {\n const style = cellStyle(...editCell);\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextTextAlign = style.textAlign || DEFAULT_CELL_STYLE.textAlign || 'left';\n const editKey = editKeys(...editCell);\n if (editKey !== lastEditKey) {\n setLastEditKey('');\n setEditCell(NO_CELL);\n }\n }\n\n const [textX, textY] = editTextPosition;\n const inputProps = {\n value: editValue,\n autoFocus: true,\n onKeyDown: onKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: '0px 4px',\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextTextAlign,\n color: 'black',\n fontSize: DEFAULT_CELL_STYLE.fontSize,\n fontFamily: 'sans-serif',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setEditValue } as SheetInputProps,\n commitEditingCell\n );\n\n let overlayDivClassName = styles.sheetscroll;\n const overlayDivStyles: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n overflow: 'scroll',\n borderBottom: '1px solid #ddd',\n };\n const canvasStyles: React.CSSProperties = {\n width: canvasWidth,\n height: canvasHeight,\n outline: '1px solid #ddd', // find another better solution ?\n };\n\n if (sheetStyle.hideScrollBars) {\n delete canvasStyles['outline'];\n delete overlayDivStyles['borderBottom'];\n overlayDivClassName = '';\n }\n\n const renderedInside = useMemo(() => props.renderInside?.({ visibleCells, cellLayout, selection, editMode }), [\n props.renderInside,\n visibleCells,\n cellLayout,\n selection,\n editMode,\n ]);\n\n const renderedOutside = useMemo(() => props.renderOutside?.({ visibleCells, cellLayout, selection, editMode }), [\n props.renderOutside,\n visibleCells,\n cellLayout,\n selection,\n editMode,\n ]);\n\n // External component API\n useImperativeHandle(\n ref,\n () => ({\n ...cellLayout,\n startEditingCell,\n }),\n [cellLayout, startEditingCell]\n );\n\n return (\n <div style={{ position: 'relative', height: '100%', overflow: 'hidden' }}>\n <canvas style={canvasStyles} ref={canvasRef} />\n <div\n ref={overlayRef}\n {...mouseHandlers}\n onScroll={onScroll}\n className={overlayDivClassName}\n style={overlayDivStyles}\n >\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: 1,\n height: maxScrollY + 2000,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: maxScrollX + 5000,\n height: 1,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n {renderedInside ? (\n <div\n style={{\n position: 'sticky',\n left: 0,\n top: 0,\n }}\n >\n {renderedInside}\n </div>\n ) : null}\n </div>\n {renderedOutside ? (\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n {renderedOutside}\n </div>\n ) : null}\n <textarea\n style={{ position: 'absolute', top: 0, left: 0, width: 1, height: 1, opacity: 0.01 }}\n ref={textAreaRef}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onFocus={(e) => e.target.select()}\n tabIndex={0}\n onKeyDown={onGridKeyDown}\n ></textarea>\n {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <input\n {...inputProps}\n type=\"text\"\n onFocus={(e) => e.target.select()}\n onChange={(e) => setEditValue(e.target.value)}\n />\n ))}\n </div>\n );\n});\n\nexport default Sheet;\n"],"names":["INITIAL_MAX_SCROLL","ORIGIN","ONE_ONE","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","MAX_XY","COLORS","selectionBorder","selectionBackground","gridLine","dragGhost","dropTarget","knobAreaBorder","headerBackground","headerText","headerActive","headerActiveText","headerSelected","headerSelectedText","shadowColor","SIZES","knobArea","headerWidth","headerHeight","minimumWidth","minimumHeight","resizeZone","scrollZone","scrollSpeed","shadowBlur","shadowOpacity","DEFAULT_CELL_STYLE","textAlign","fontSize","marginRight","marginLeft","color","fontFamily","weight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","ARROW_KEYS","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","clamp","x","min","max","Math","seq","n","s","d","Array","from","length","map","_","i","isInRange","isInRangeLeft","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","clampXY","p","Infinity","getDirectionStep","direction","isSameXY","isSameSelection","a1","a2","b1","b2","isMaybeRowSelection","selection","left","right","isMaybeColumnSelection","top","bottom","isRowSelection","isColumnSelection","isCellSelection","isEmptySelection","isPointInsideSelection","point","normalizeSelection","y","anchor","head","ax","ay","hx","hy","orientSelection","normalized","to","swapX","swapY","LIMIT","scanGroup","keys","index","match","limit","expandSelectionToColumnGroups","columnGroupKeys","leftKey","rightKey","startColumn","endColumn","expanded","oriented","expandSelectionToRowGroups","rowGroupKeys","topKey","bottomKey","startRow","endRow","isBoundaryInsideGroup","rowOrColumnGroupKeys","before","after","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","data","floor","xx","findInDisplayData","displayData","start","step","cell","first","firstFilled","cellX","cellY","useMouse","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","onEdit","onCommit","onKnobAreaChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","useState","hitTarget","setHitTarget","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","rowDrag","setRowDrag","draggingKnob","setDraggingKnob","draggingSelection","setDraggingSelection","draggingRowSelection","setDraggingRowSelection","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","useMemo","maxX","maxY","refState","ref","useRef","current","getMousePosition","useCallback","e","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","getScrollPosition","scrollLeft","scrollTop","getMouseHit","hitmap","object","onPointerLeave","window","document","body","style","cursor","onPointerDown","columnToPixel","rowToPixel","pixelToCell","getIndentX","getIndentY","columns","rows","button","setPointerCapture","pointerId","minX","minY","selectedColumns","selectedRows","push","end","indices","size","scroll","edge","abs","asGroup","knobX","knobY","shiftKey","scrollTo","onPointerUp","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","order","previousRect","JSON","stringify","currentRect","obj","onClick","onPointerMove","preventDefault","isDragging","currentScroll","newWidth","newHeight","anchorX","anchorY","headX","headY","xCellDiff","yCellDiff","insideGroup","shift","onDoubleClick","editCell","onContextMenu","event","mouseHandlers","kx1","ky1","kx2","ky2","sx1","sy1","sx2","sy2","fx1","fy1","fx2","fy2","srcY","value","source","srcX","useScroll","offset","maxScroll","onOffsetChange","onMaxScrollChange","absoluteToCell","cellToAbsolute","nudgeX","nudgeY","maxScrollX","maxScrollY","growX","growY","scrollToCell","element","view","freeze","callback","w","h","offsetX","offsetY","frozenX","frozenY","newX","newY","newOffset","setTimeout","scrollX","scrollY","useClipboardCopy","textAreaRef","useLayoutEffect","textArea","v","formatSelectionAsTSV","focus","preventScroll","select","activeElement","activeTagName","tagName","toLowerCase","contentEditable","useClipboardPaste","isReadOnly","useEffect","onPaste","clipboardData","types","parsed","includes","pastedHtml","getData","parsePastedHtml","text","parsePastedText","addEventListener","removeEventListener","formatTSV","row","join","findTable","children","child","nodeName","maybeTable","html","div","createElement","innerHTML","trim","tableNode","tableChild","tr","td","str","textContent","replaceAll","split","cols","X","Y","INITIAL_SIZE","makeCellLayout","indent","freezeX","freezeY","indentX","indentY","getBaseOriginFor","column","base","relative","getStart","adjust","getSize","columnToAbsolute","rowToAbsolute","pixelToIndex","pixel","layout","lookupIndex","frozen","pixelX","pixelY","absoluteToIndex","absoluteToColumn","absoluteToRow","getVisibleIndices","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","sizes","set","has","get","getOffset","j","tail","getEnd","last","mid","clearAfter","truncate","setSizer","initialSize","used","values","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","l","grow","round","shrink","getTail","setValue","getValue","hasValue","resolveSheetStyle","freezeColumns","freezeRows","hideGridlines","hideScrollBars","columnHeaderHeight","rowHeaderWidth","resolveCellStyle","optionalStyle","defaultStyle","applyAlignment","cellSize","imageWidth","alignment","renderSheet","context","cellStyle","secondarySelections","dragOffset","columnHeaders","columnHeaderStyle","dataOffset","canvas","width","height","clickables","resizeCanvas","clearRect","fillStyle","fillRect","selectionActive","rowSelectionActive","columnSelectionActive","resolveFrozenSelection","selected","hideKnob","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","font","content","isActive","isSelected","renderCell","excelHeaderString","selectedStyle","activeStyle","strokeRect","secondarySelection","span","setLineDash","shiftX","shiftY","resolveSelection","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","cellContent","defaultCellStyle","xCoord","yCoord","cellWidth","cellHeight","finalStyle","save","clip","fillText","items","HTMLImageElement","finalX","horizontalAlign","drawImage","measure","measureText","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","actualBoundingBoxDescent","restore","lastInvisibleX","lastInvisibleY","devicePixelRatio","ratio","newCanvasWidth","newCanvasHeight","getContext","scale","num","t","String","fromCharCode","rgb","opacity","hex","toString","slice","ease","sin","PI","pow","f","addColorStop","Sheet","forwardRef","props","canvasRef","overlayRef","setMaxScroll","setDataOffset","selectionProp","setSelection","setKnobArea","setDragOffset","setDropTarget","setEditCell","lastSelectionProp","setLastSelectionProp","editValue","setEditValue","arrowKeyCommitMode","setArrowKeyCommitMode","useResizeObserver","canvasWidth","canvasHeight","readOnly","editKeys","editCellX","editCellY","shouldCacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","changeSelection","newSelection","toHead","dragOperation","overlay","onSelectionChanged","commitEditingCell","startEditingCell","editDataValue","val","setLastEditKey","onScroll","animationFrameId","requestAnimationFrame","cancelAnimationFrame","onKeyDown","key","onGridKeyDown","metaKey","ctrlKey","which","x1","y1","x2","y2","keyCode","lastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextTextAlign","editKey","textX","textY","inputProps","autoFocus","position","padding","outline","border","input","inputComponent","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","renderedInside","renderInside","renderedOutside","renderOutside","useImperativeHandle","React","className","pointerEvents","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","tabIndex","type"],"mappings":"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"}