sheet-happens 0.0.41 → 0.0.42

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/group.ts","../src/props.ts","../src/mouse.ts","../src/scroll.ts","../src/style.ts","../src/autosize.ts","../src/clipboard.ts","../src/layout.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 headerSelectedGroup: '#1a66ff70',\n headerSelectedText: '#ffffff',\n headerSelectedGroupText: '#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 HEADER_GROUP_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelectedGroup,\n color: COLORS.headerSelectedGroupText,\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\nexport const forRange = (min: number, max: number, callback: (i: number) => void) => {\n for (let i = min; i <= max; ++i) callback(i);\n};\n\nexport const forSelectionColumns = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[left], [right]] = normalizeSelection(selection);\n forRange(left, right, callback);\n};\n\nexport const forSelectionRows = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[, top], [, bottom]] = normalizeSelection(selection);\n forRange(top, bottom, callback);\n};\n\nconst forToMap = <A extends Array<any>>(forLoop: (callback: (...args: A) => void) => void) => <B>(\n map: (...args: A) => B\n) => {\n const out: B[] = [];\n forLoop((...args: A) => out.push(map(...args)));\n return out;\n};\n\nexport const mapSelectionColumns = (selection: Rectangle) => forToMap(forSelectionColumns(selection));\nexport const mapSelectionRows = (selection: Rectangle) => forToMap(forSelectionRows(selection));\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// Validate selections to avoid half-infinite anchor/head\nexport const validateSelection = (selection: Rectangle): Rectangle => {\n let [anchor, head] = selection;\n anchor = anchor.slice() as XY;\n head = head.slice() as XY;\n\n const min = minXY(anchor, head);\n if (min[0] === -1) anchor[0] = head[0] = -1;\n if (min[1] === -1) anchor[1] = head[1] = -1;\n\n return [anchor, head];\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, head), maxXY(anchor, head)];\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) * (right - left || 1) < 0;\n const swapY = (ay - hy || 1) * (bottom - top || 1) < 0;\n\n return [\n [swapX ? right : left, swapY ? bottom : top],\n [swapX ? left : right, swapY ? top : bottom],\n ];\n};\n\n// Clip rectangle to max range\nexport const clipSelection = (selection: Rectangle, max: XY): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, max), minXY(head, max)];\n};\n","import { XY, 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 matchKeys: Set<string | number | null>\n) => {\n let i = 1;\n const limit = direction > 0 ? LIMIT : Math.min(LIMIT, index + 1);\n for (; i < limit; i++) {\n const key = keys(index + i * direction);\n if (key == null || !matchKeys.has(key)) break;\n }\n return index + (i - 1) * direction;\n};\n\n// Expand a selection to its adjacent row or column group\nexport const expandSelectionToRowOrColumnGroups = (\n selection: Rectangle,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n matchKeys: Set<string | number | null> | null,\n coordinate: number // 0/1 for X/Y\n) => {\n if (!matchKeys) return selection;\n\n const [first, second] = normalizeSelection(selection);\n\n const start = first[coordinate];\n const end = second[coordinate];\n\n const startIndex = scanGroup(groupKeys, start, -1, matchKeys);\n const endIndex = scanGroup(groupKeys, end, 1, matchKeys);\n\n const expanded: Rectangle = [first.slice() as XY, second.slice() as XY];\n expanded[0][coordinate] = startIndex;\n expanded[1][coordinate] = endIndex;\n\n const oriented = orientSelection(expanded, selection);\n return oriented;\n};\n\nexport const isBoundaryInsideGroup = (\n index: number,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>\n) => {\n const before = groupKeys(index - 1);\n const after = groupKeys(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 mapSelectionColumns,\n mapSelectionRows,\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, expandSelectionToRowOrColumnGroups } from './group';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange, seq } 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 selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n getAutoSizeWidth: (column: number) => number,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragIndicesChange?: (indices: [number[] | null, number[] | 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 dontChangeSelectionOnOrderChange?: 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\n // Ignore clicks on scrollbar\n if (xy[0] > e.target.clientWidth || xy[1] > e.target.clientHeight) {\n return null;\n }\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(\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 normalized = normalizeSelection(selection);\n const [[minX, minY], [maxX, maxY]] = normalized;\n\n const selectedColumns = mapSelectionColumns(selection)((i) => i);\n const selectedRows = mapSelectionRows(selection)((i) => 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) || selectedColumnGroups) {\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) || selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedColumns,\n ...(selectedColumnGroups\n ? columns.filter((index) =>\n selectedColumnGroups.has(columnGroupKeys(index))\n )\n : []),\n ]).values()\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedColumnGroups) {\n const clickSelection: Rectangle = [\n [index, -1],\n [index, -1],\n ];\n const [[left], [right]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n columnGroupKeys,\n selectedColumnGroups,\n 0\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minX > right || maxX < left);\n const dragStart = connected ? Math.min(minX, left) : left;\n const dragEnd = connected ? Math.max(maxX, right) : right;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\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 onDragIndicesChange?.([dragIndices, null]);\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\n if (isInRange(y, start, end) || selectedRowGroups) {\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) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedRows,\n ...(selectedRowGroups\n ? rows\n .map((_, i) => i)\n .filter((index) => selectedRowGroups.has(rowGroupKeys(index)))\n : []),\n ]).values()\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedRowGroups) {\n const clickSelection: Rectangle = [\n [-1, index],\n [-1, index],\n ];\n const [[, top], [, bottom]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n rowGroupKeys,\n selectedRowGroups,\n 1\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minY > bottom || maxY < top);\n const dragStart = connected ? Math.min(minY, top) : top;\n const dragEnd = connected ? Math.max(maxY, bottom) : bottom;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\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 onDragIndicesChange?.([null, dragIndices]);\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 columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\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 onDragIndicesChange?.([null, null]);\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 const insideGroup = selectedColumnGroups?.has(columnGroupKeys(x));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellX);\n const order = cellX - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [order, minY],\n [order + indices.length - 1, maxY],\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 const insideGroup = selectedRowGroups?.has(rowGroupKeys(y));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellY);\n const order = cellY - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [minX, order],\n [maxX, order + indices.length - 1],\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 dontChangeSelectionOnOrderChange,\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 window.document.body.style.cursor = 'auto';\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 } 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) || selectedColumnGroups) {\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 selectedColumnGroups?.has(columnGroupKeys(index))) &&\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) || selectedRowGroups) {\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) || selectedRowGroups?.has(rowGroupKeys(index))) &&\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 onDragIndicesChange,\n onDragOffsetChange,\n onDropTargetChange,\n onSelectionChange,\n onKnobAreaChange,\n onInvalidateRow,\n onInvalidateColumn,\n columnGroupKeys,\n rowGroupKeys,\n ]\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n selection,\n cellLayout: { pixelToCell, columnToPixel },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n // Double click column divider to autosize\n const [x] = xy;\n const { columns } = visibleCells;\n if (onCellWidthChange) {\n const autosized = [];\n\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n const [[minX], [maxX]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isColumnSelection(selection) && index >= minX && index <= maxX\n ? mapSelectionColumns(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const column of autosized) {\n onInvalidateColumn?.(column - 1);\n onCellWidthChange([column], getAutoSizeWidth(column));\n }\n if (autosized.length) return;\n }\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 [\n getMousePosition,\n getMouseHit,\n onCommit,\n onEdit,\n onInvalidateColumn,\n onCellWidthChange,\n getAutoSizeWidth,\n visibleCells,\n canSizeColumn,\n ]\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 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\n// If view extends past end of table\n// Limit view to table contents\nexport const clipDataOffset = (view: XY, offset: XY, freeze: XY, maxCells: XY, cellLayout: CellLayout): XY => {\n let [newX, newY] = offset;\n const [maxColumns, maxRows] = maxCells;\n\n const { absoluteToColumn, columnToAbsolute, absoluteToRow, rowToAbsolute } = cellLayout;\n\n const {\n edge: [rightEdge, bottomEdge],\n viewport: [scrollW, scrollH],\n } = getViewExtent(view, [newX, newY], freeze, cellLayout);\n\n // Move extra space on the right/bottom to equivalent on the left/top\n if (rightEdge > maxColumns) {\n const remainder = columnToAbsolute(maxColumns) - columnToAbsolute(newX);\n newX = absoluteToColumn(columnToAbsolute(newX) - scrollW + remainder) + 1;\n }\n if (bottomEdge > maxRows) {\n const remainder = rowToAbsolute(maxRows) - rowToAbsolute(newY);\n newY = absoluteToRow(rowToAbsolute(newY) - scrollH + remainder) + 1;\n }\n\n return [newX, newY];\n};\n\n// Get bottom-right corner cell + non-frozen viewport size\nexport const getViewExtent = (\n view: XY,\n offset: XY,\n freeze: XY,\n cellLayout: CellLayout\n): {\n edge: XY;\n viewport: XY;\n} => {\n const {\n cellToAbsolute,\n absoluteToColumn,\n columnToAbsolute,\n absoluteToRow,\n rowToAbsolute,\n getIndentX,\n getIndentY,\n } = cellLayout;\n\n const [x, y] = offset;\n const [w, h] = view;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n\n const scrollW = w - frozenX - getIndentX();\n const scrollH = h - frozenY - getIndentY();\n\n const leftEdge = x + freeze[0];\n const topEdge = y + freeze[1];\n const rightEdge = absoluteToColumn(columnToAbsolute(leftEdge) + scrollW);\n const bottomEdge = absoluteToRow(rowToAbsolute(topEdge) + scrollH);\n\n return {\n edge: [rightEdge, bottomEdge],\n viewport: [scrollW, scrollH],\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\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 { 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 { useCallback, useMemo } from 'react';\nimport { DEFAULT_CELL_STYLE } from './constants';\nimport { resolveCellStyle } from './style';\nimport { CellPropertyFunction, CellContentType, Style } from './types';\n\nexport const useAutoSizeColumn = (\n rows: number[],\n displayData: CellPropertyFunction<CellContentType>,\n cellStyle: CellPropertyFunction<Style>\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeWidth = useCallback(\n (x: number) => {\n if (!context) return 0;\n\n let maxWidth = 0;\n for (const y of rows) {\n const cellContent = displayData(x, y);\n if (cellContent != null) {\n const style = cellStyle(x, y);\n\n const finalStyle = resolveCellStyle(style, DEFAULT_CELL_STYLE);\n context.fillStyle = finalStyle.color;\n context.font = finalStyle.weight + ' ' + finalStyle.fontSize + 'px ' + finalStyle.fontFamily;\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const { width } = context.measureText(cellContent.toString());\n maxWidth = Math.max(maxWidth, width + finalStyle.marginLeft + finalStyle.marginRight);\n } else if (typeof cellContent === 'object') {\n for (const obj of cellContent.items) {\n if (typeof obj.content === 'string' || typeof obj.content === 'number') {\n const { width } = context.measureText(obj.content.toString());\n maxWidth = Math.max(maxWidth, obj.x + width);\n }\n }\n }\n }\n }\n\n return Math.ceil(maxWidth);\n },\n [context]\n );\n\n return getAutoSizeWidth;\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 {\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, isColumnSelection, isRowSelection } 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_GROUP_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 dragIndices: [number[] | null, number[] | null],\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyFunction<CellContentType>,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\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\n const groupKey = rowGroupKeys(row);\n const isInRowGroup = groupKey != null && selectedRowGroups?.has(groupKey);\n\n const isSelfSelected = rowSelectionActive && isActive;\n const isGroupSelected = rowSelectionActive && isInRowGroup;\n\n const style = isSelfSelected\n ? HEADER_SELECTED_STYLE\n : isGroupSelected\n ? HEADER_GROUP_SELECTED_STYLE\n : isActive\n ? HEADER_ACTIVE_STYLE\n : 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\n const groupKey = columnGroupKeys(column);\n const isInColumnGroup = groupKey != null && selectedColumnGroups?.has(groupKey);\n\n const isSelected = columnSelectionActive && !rowSelectionActive && (isActive || isInColumnGroup);\n const selectedStyle = isSelected ? 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 [dragColumns, dragRows] = dragIndices;\n\n context.fillStyle = COLORS.dragGhost;\n\n if (dragColumns) {\n for (const column of dragColumns) {\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n context.fillRect(left + shiftX, 0, right - left, height);\n }\n }\n if (dragRows) {\n for (const row of dragRows) {\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n context.fillRect(0, top + shiftY, width, bottom - top);\n }\n }\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 = 4;\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 validateSelection,\n isSameSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n mapSelectionColumns,\n mapSelectionRows,\n maxXY,\n addXY,\n} from './coordinate';\nimport { useMouse } from './mouse';\nimport { useScroll, scrollToCell, clipDataOffset } from './scroll';\nimport { useAutoSizeColumn } from './autosize';\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 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 maxRows?: number;\n maxColumns?: number;\n cacheLayout?: boolean | number;\n dontCommitEditOnSelectionChange?: boolean;\n dontChangeSelectionOnOrderChange?: 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\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 [dragIndices, setDragIndices] = useState<[number[] | null, number[] | null]>([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: overlayRef });\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 selectedColumnGroups = useMemo(\n () =>\n props.columnGroupKeys\n ? new Set(mapSelectionColumns(selection)((x: number) => columnGroupKeys(x)).filter((x) => x != null))\n : null,\n [props.columnGroupKeys, columnGroupKeys, selection]\n );\n const selectedRowGroups = useMemo(\n () =>\n props.rowGroupKeys\n ? new Set(mapSelectionRows(selection)((y: number) => rowGroupKeys(y)).filter((x) => x != null))\n : null,\n [props.rowGroupKeys, rowGroupKeys, selection]\n );\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 const scrollToSelection = (selection: Rectangle, toHead = false) => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const [anchor, head] = selection;\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n scrollToCell(\n overlay,\n toHead ? head : anchor,\n view,\n freeze,\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n }\n );\n };\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollTo = true, toHead = false) => {\n if (!isSameSelection(selection, newSelection)) {\n setSelection(validateSelection(newSelection));\n }\n\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n if (scrollTo) {\n scrollToSelection(newSelection, toHead);\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 // If max row or column count changes, keep sheet in view\n const { maxColumns = Infinity, maxRows = Infinity } = props;\n useLayoutEffect(() => {\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n setDataOffset(clipDataOffset(view, dataOffset, freeze, [maxColumns, maxRows], cellLayout));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [maxRows, maxColumns]);\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 getAutoSizeWidth = useAutoSizeColumn(visibleCells.rows, displayData, cellStyle);\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 selectedColumnGroups,\n selectedRowGroups,\n\n getAutoSizeWidth,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragIndices,\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 props.dontChangeSelectionOnOrderChange\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\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n\n knobPosition,\n knobArea,\n dragIndices,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\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 columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\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","headerSelectedGroup","headerSelectedText","headerSelectedGroupText","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","HEADER_GROUP_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","minXY","clampXY","p","Infinity","getDirectionStep","direction","isSameXY","isSameSelection","a1","a2","b1","b2","forRange","callback","forSelectionColumns","selection","normalizeSelection","left","right","forSelectionRows","top","bottom","forToMap","forLoop","out","push","mapSelectionColumns","mapSelectionRows","isMaybeRowSelection","isMaybeColumnSelection","isRowSelection","isColumnSelection","isCellSelection","isEmptySelection","isPointInsideSelection","point","y","validateSelection","anchor","head","slice","orientSelection","normalized","to","ax","ay","hx","hy","swapX","swapY","LIMIT","scanGroup","keys","index","matchKeys","limit","key","has","expandSelectionToRowOrColumnGroups","groupKeys","coordinate","first","second","start","end","startIndex","endIndex","expanded","oriented","isBoundaryInsideGroup","before","after","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","data","floor","xx","findInDisplayData","displayData","step","cell","firstFilled","cellX","cellY","useMouse","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","columnGroupKeys","rowGroupKeys","selectedColumnGroups","selectedRowGroups","getAutoSizeWidth","onEdit","onCommit","onKnobAreaChange","onDragIndicesChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","dontChangeSelectionOnOrderChange","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","clientWidth","clientHeight","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","indices","Set","filter","values","sort","dragIndices","clickSelection","connected","dragStart","dragEnd","size","scroll","edge","abs","asGroup","knobX","knobY","shiftKey","scrollTo","onPointerUp","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","insideGroup","preceding","order","previousRect","JSON","stringify","currentRect","obj","onClick","onPointerMove","preventDefault","isDragging","currentScroll","newWidth","newHeight","anchorX","anchorY","headX","headY","xCellDiff","yCellDiff","shift","onDoubleClick","autosized","column","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","clipDataOffset","view","freeze","maxCells","newX","newY","maxColumns","maxRows","absoluteToColumn","columnToAbsolute","absoluteToRow","rowToAbsolute","getViewExtent","rightEdge","bottomEdge","viewport","scrollW","scrollH","remainder","w","h","frozenX","frozenY","leftEdge","topEdge","scrollToCell","element","offsetX","offsetY","newOffset","setTimeout","scrollX","scrollY","resolveSheetStyle","freezeColumns","freezeRows","hideGridlines","hideScrollBars","columnHeaderHeight","rowHeaderWidth","resolveCellStyle","optionalStyle","defaultStyle","applyAlignment","cellSize","imageWidth","alignment","useAutoSizeColumn","cellStyle","context","createElement","getContext","maxWidth","cellContent","finalStyle","fillStyle","font","measureText","toString","width","items","content","ceil","useClipboardCopy","textAreaRef","useLayoutEffect","textArea","v","formatSelectionAsTSV","match","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","innerHTML","trim","tableNode","tableChild","tr","td","str","textContent","replaceAll","split","cols","X","Y","INITIAL_SIZE","makeCellLayout","indent","freezeX","freezeY","indentX","indentY","getBaseOriginFor","base","relative","getStart","adjust","getSize","pixelToIndex","pixel","layout","lookupIndex","frozen","pixelX","pixelY","absoluteToIndex","getVisibleIndices","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","sizes","set","get","getOffset","j","tail","getEnd","last","mid","clearAfter","truncate","setSizer","initialSize","used","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","l","grow","round","shrink","getTail","setValue","getValue","hasValue","renderSheet","secondarySelections","dragOffset","columnHeaders","columnHeaderStyle","dataOffset","canvas","height","clickables","resizeCanvas","clearRect","fillRect","selectionActive","rowSelectionActive","columnSelectionActive","resolveFrozenSelection","selected","hideKnob","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","isActive","groupKey","isInRowGroup","isSelfSelected","isGroupSelected","renderCell","excelHeaderString","isInColumnGroup","isSelected","selectedStyle","activeStyle","strokeRect","secondarySelection","span","setLineDash","shiftX","shiftY","dragColumns","dragRows","resolveSelection","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","defaultCellStyle","xCoord","yCoord","cellWidth","cellHeight","save","clip","fillText","HTMLImageElement","finalX","horizontalAlign","drawImage","measure","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","actualBoundingBoxDescent","restore","lastInvisibleX","lastInvisibleY","devicePixelRatio","ratio","newCanvasWidth","newCanvasHeight","scale","num","t","String","fromCharCode","rgb","opacity","hex","ease","sin","PI","pow","f","addColorStop","Sheet","forwardRef","props","canvasRef","overlayRef","setMaxScroll","setDataOffset","selectionProp","setSelection","setKnobArea","setDragOffset","setDragIndices","setDropTarget","setEditCell","lastSelectionProp","setLastSelectionProp","editValue","setEditValue","arrowKeyCommitMode","setArrowKeyCommitMode","useResizeObserver","canvasWidth","canvasHeight","readOnly","editKeys","editCellX","editCellY","shouldCacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","scrollToSelection","toHead","overlay","changeSelection","newSelection","onSelectionChanged","commitEditingCell","startEditingCell","editDataValue","val","setLastEditKey","onScroll","animationFrameId","requestAnimationFrame","cancelAnimationFrame","onKeyDown","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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"}
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/style.ts","../src/autosize.ts","../src/clipboard.ts","../src/layout.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 headerSelectedGroup: '#1a66ff70',\n headerSelectedText: '#ffffff',\n headerSelectedGroupText: '#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 HEADER_GROUP_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelectedGroup,\n color: COLORS.headerSelectedGroupText,\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\nexport const forRange = (min: number, max: number, callback: (i: number) => void) => {\n for (let i = min; i <= max; ++i) callback(i);\n};\n\nexport const forSelectionColumns = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[left], [right]] = normalizeSelection(selection);\n forRange(left, right, callback);\n};\n\nexport const forSelectionRows = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[, top], [, bottom]] = normalizeSelection(selection);\n forRange(top, bottom, callback);\n};\n\nconst forToMap = <A extends Array<any>>(forLoop: (callback: (...args: A) => void) => void) => <B>(\n map: (...args: A) => B\n) => {\n const out: B[] = [];\n forLoop((...args: A) => out.push(map(...args)));\n return out;\n};\n\nexport const mapSelectionColumns = (selection: Rectangle) => forToMap(forSelectionColumns(selection));\nexport const mapSelectionRows = (selection: Rectangle) => forToMap(forSelectionRows(selection));\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// Validate selections to avoid half-infinite anchor/head\nexport const validateSelection = (selection: Rectangle): Rectangle => {\n let [anchor, head] = selection;\n anchor = anchor.slice() as XY;\n head = head.slice() as XY;\n\n const min = minXY(anchor, head);\n if (min[0] === -1) anchor[0] = head[0] = -1;\n if (min[1] === -1) anchor[1] = head[1] = -1;\n\n return [anchor, head];\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, head), maxXY(anchor, head)];\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) * (right - left || 1) < 0;\n const swapY = (ay - hy || 1) * (bottom - top || 1) < 0;\n\n return [\n [swapX ? right : left, swapY ? bottom : top],\n [swapX ? left : right, swapY ? top : bottom],\n ];\n};\n\n// Clip rectangle to max range\nexport const clipSelection = (selection: Rectangle, max: XY): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, max), minXY(head, max)];\n};\n","import { XY, 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 matchKeys: Set<string | number | null>\n) => {\n let i = 1;\n const limit = direction > 0 ? LIMIT : Math.min(LIMIT, index + 1);\n for (; i < limit; i++) {\n const key = keys(index + i * direction);\n if (key == null || !matchKeys.has(key)) break;\n }\n return index + (i - 1) * direction;\n};\n\n// Expand a selection to its adjacent row or column group\nexport const expandSelectionToRowOrColumnGroups = (\n selection: Rectangle,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n matchKeys: Set<string | number | null> | null,\n coordinate: number // 0/1 for X/Y\n) => {\n if (!matchKeys) return selection;\n\n const [first, second] = normalizeSelection(selection);\n\n const start = first[coordinate];\n const end = second[coordinate];\n\n const startIndex = scanGroup(groupKeys, start, -1, matchKeys);\n const endIndex = scanGroup(groupKeys, end, 1, matchKeys);\n\n const expanded: Rectangle = [first.slice() as XY, second.slice() as XY];\n expanded[0][coordinate] = startIndex;\n expanded[1][coordinate] = endIndex;\n\n const oriented = orientSelection(expanded, selection);\n return oriented;\n};\n\nexport const isBoundaryInsideGroup = (\n index: number,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>\n) => {\n const before = groupKeys(index - 1);\n const after = groupKeys(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 mapSelectionColumns,\n mapSelectionRows,\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, expandSelectionToRowOrColumnGroups } from './group';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange, seq } 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 selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n getAutoSizeWidth: (column: number) => number,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragIndicesChange?: (indices: [number[] | null, number[] | 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 dontChangeSelectionOnOrderChange?: 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\n // Ignore clicks on scrollbar\n if (xy[0] > e.target.clientWidth || xy[1] > e.target.clientHeight) {\n return null;\n }\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(\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 normalized = normalizeSelection(selection);\n const [[minX, minY], [maxX, maxY]] = normalized;\n\n const selectedColumns = mapSelectionColumns(selection)((i) => i);\n const selectedRows = mapSelectionRows(selection)((i) => 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) || selectedColumnGroups) {\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) || selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedColumns,\n ...(selectedColumnGroups\n ? columns.filter((index) =>\n selectedColumnGroups.has(columnGroupKeys(index))\n )\n : []),\n ]).values()\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedColumnGroups) {\n const clickSelection: Rectangle = [\n [index, -1],\n [index, -1],\n ];\n const [[left], [right]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n columnGroupKeys,\n selectedColumnGroups,\n 0\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minX > right || maxX < left);\n const dragStart = connected ? Math.min(minX, left) : left;\n const dragEnd = connected ? Math.max(maxX, right) : right;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\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 onDragIndicesChange?.([dragIndices, null]);\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\n if (isInRange(y, start, end) || selectedRowGroups) {\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) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedRows,\n ...(selectedRowGroups\n ? rows\n .map((_, i) => i)\n .filter((index) => selectedRowGroups.has(rowGroupKeys(index)))\n : []),\n ]).values()\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedRowGroups) {\n const clickSelection: Rectangle = [\n [-1, index],\n [-1, index],\n ];\n const [[, top], [, bottom]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n rowGroupKeys,\n selectedRowGroups,\n 1\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minY > bottom || maxY < top);\n const dragStart = connected ? Math.min(minY, top) : top;\n const dragEnd = connected ? Math.max(maxY, bottom) : bottom;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\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 onDragIndicesChange?.([null, dragIndices]);\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 columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\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 onDragIndicesChange?.([null, null]);\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 const insideGroup = selectedColumnGroups?.has(columnGroupKeys(x));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellX);\n const order = cellX - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [order, minY],\n [order + indices.length - 1, maxY],\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 const insideGroup = selectedRowGroups?.has(rowGroupKeys(y));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellY);\n const order = cellY - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [minX, order],\n [maxX, order + indices.length - 1],\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 dontChangeSelectionOnOrderChange,\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 window.document.body.style.cursor = 'auto';\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 } 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) || selectedColumnGroups) {\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 selectedColumnGroups?.has(columnGroupKeys(index))) &&\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) || selectedRowGroups) {\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) || selectedRowGroups?.has(rowGroupKeys(index))) &&\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 onDragIndicesChange,\n onDragOffsetChange,\n onDropTargetChange,\n onSelectionChange,\n onKnobAreaChange,\n onInvalidateRow,\n onInvalidateColumn,\n columnGroupKeys,\n rowGroupKeys,\n ]\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n selection,\n cellLayout: { pixelToCell, columnToPixel },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n // Double click column divider to autosize\n const [x] = xy;\n const { columns } = visibleCells;\n if (onCellWidthChange) {\n const autosized = [];\n\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n const [[minX], [maxX]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isColumnSelection(selection) && index >= minX && index <= maxX\n ? mapSelectionColumns(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const column of autosized) {\n onInvalidateColumn?.(column - 1);\n onCellWidthChange([column], getAutoSizeWidth(column));\n }\n if (autosized.length) return;\n }\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 [\n getMousePosition,\n getMouseHit,\n onCommit,\n onEdit,\n onInvalidateColumn,\n onCellWidthChange,\n getAutoSizeWidth,\n visibleCells,\n canSizeColumn,\n ]\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 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\n// If view extends past end of table\n// Limit view to table contents\nexport const clipDataOffset = (view: XY, offset: XY, freeze: XY, maxCells: XY, cellLayout: CellLayout): XY => {\n let [newX, newY] = offset;\n const [maxColumns, maxRows] = maxCells;\n\n const { absoluteToColumn, columnToAbsolute, absoluteToRow, rowToAbsolute } = cellLayout;\n\n const {\n edge: [rightEdge, bottomEdge],\n viewport: [scrollW, scrollH],\n } = getViewExtent(view, [newX, newY], freeze, cellLayout);\n\n // Move extra space on the right/bottom to equivalent on the left/top\n if (rightEdge > maxColumns) {\n const remainder = columnToAbsolute(maxColumns) - columnToAbsolute(newX);\n newX = absoluteToColumn(columnToAbsolute(newX) - scrollW + remainder) + 1;\n }\n if (bottomEdge > maxRows) {\n const remainder = rowToAbsolute(maxRows) - rowToAbsolute(newY);\n newY = absoluteToRow(rowToAbsolute(newY) - scrollH + remainder) + 1;\n }\n\n return [newX, newY];\n};\n\n// Get bottom-right corner cell + non-frozen viewport size\nexport const getViewExtent = (\n view: XY,\n offset: XY,\n freeze: XY,\n cellLayout: CellLayout\n): {\n edge: XY;\n viewport: XY;\n} => {\n const {\n cellToAbsolute,\n absoluteToColumn,\n columnToAbsolute,\n absoluteToRow,\n rowToAbsolute,\n getIndentX,\n getIndentY,\n } = cellLayout;\n\n const [x, y] = offset;\n const [w, h] = view;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n\n const scrollW = w - frozenX - getIndentX();\n const scrollH = h - frozenY - getIndentY();\n\n const leftEdge = x + freeze[0];\n const topEdge = y + freeze[1];\n const rightEdge = absoluteToColumn(columnToAbsolute(leftEdge) + scrollW);\n const bottomEdge = absoluteToRow(rowToAbsolute(topEdge) + scrollH);\n\n return {\n edge: [rightEdge, bottomEdge],\n viewport: [scrollW, scrollH],\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\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 { 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 { useCallback, useMemo } from 'react';\nimport { DEFAULT_CELL_STYLE, SIZES } from './constants';\nimport { resolveCellStyle } from './style';\nimport { RowOrColumnPropertyFunction, CellPropertyFunction, CellContentType, Style } from './types';\n\nexport const useAutoSizeColumn = (\n rows: number[],\n displayData: CellPropertyFunction<CellContentType>,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n canvasWidth: number\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeWidth = useCallback(\n (x: number) => {\n if (!context) return 0;\n\n const getWidth = (cellContent: Exclude<CellContentType, null>, style: Style) => {\n const finalStyle = resolveCellStyle(style, DEFAULT_CELL_STYLE);\n context.font = finalStyle.weight + ' ' + finalStyle.fontSize + 'px ' + finalStyle.fontFamily;\n\n const inlineMargin = finalStyle.marginLeft + finalStyle.marginRight;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const { width } = context.measureText(cellContent.toString());\n return width + inlineMargin;\n } else if (typeof cellContent === 'object') {\n let maxWidth = 0;\n let extraWidth = 0;\n\n for (const obj of cellContent.items) {\n let width = 0;\n if (typeof obj.content === 'string' || typeof obj.content === 'number') {\n const { width: w } = context.measureText(obj.content.toString());\n width = obj.x + w + inlineMargin;\n } else if (obj.width) {\n width = obj.width;\n }\n\n if (obj.horizontalAlign === 'right') {\n extraWidth += width;\n } else {\n maxWidth = Math.max(maxWidth, width);\n }\n }\n\n return maxWidth + extraWidth;\n }\n return 0;\n };\n\n let maxWidth = SIZES.minimumWidth;\n\n const headerContent = columnHeaders(x);\n if (headerContent) {\n const headerStyle = columnHeaderStyle(x);\n maxWidth = Math.max(maxWidth, getWidth(headerContent, headerStyle));\n }\n\n for (const y of rows) {\n const cellContent = displayData(x, y);\n if (cellContent != null) {\n const style = cellStyle(x, y);\n maxWidth = Math.max(maxWidth, getWidth(cellContent, style));\n }\n }\n\n return Math.ceil(Math.min(canvasWidth, maxWidth));\n },\n [context, displayData, cellStyle, columnHeaders, columnHeaderStyle]\n );\n\n return getAutoSizeWidth;\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 {\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, isColumnSelection, isRowSelection } 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_GROUP_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 dragIndices: [number[] | null, number[] | null],\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyFunction<CellContentType>,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\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\n const groupKey = rowGroupKeys(row);\n const isInRowGroup = groupKey != null && selectedRowGroups?.has(groupKey);\n\n const isSelfSelected = rowSelectionActive && isActive;\n const isGroupSelected = rowSelectionActive && isInRowGroup;\n\n const style = isSelfSelected\n ? HEADER_SELECTED_STYLE\n : isGroupSelected\n ? HEADER_GROUP_SELECTED_STYLE\n : isActive\n ? HEADER_ACTIVE_STYLE\n : 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\n const groupKey = columnGroupKeys(column);\n const isInColumnGroup = groupKey != null && selectedColumnGroups?.has(groupKey);\n\n const isSelected = columnSelectionActive && !rowSelectionActive && (isActive || isInColumnGroup);\n const selectedStyle = isSelected ? 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 [dragColumns, dragRows] = dragIndices;\n\n context.fillStyle = COLORS.dragGhost;\n\n if (dragColumns) {\n for (const column of dragColumns) {\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n context.fillRect(left + shiftX, 0, right - left, height);\n }\n }\n if (dragRows) {\n for (const row of dragRows) {\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n context.fillRect(0, top + shiftY, width, bottom - top);\n }\n }\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 = 4;\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 validateSelection,\n isSameSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n mapSelectionColumns,\n mapSelectionRows,\n maxXY,\n addXY,\n} from './coordinate';\nimport { useMouse } from './mouse';\nimport { useScroll, scrollToCell, clipDataOffset } from './scroll';\nimport { useAutoSizeColumn } from './autosize';\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 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 maxRows?: number;\n maxColumns?: number;\n cacheLayout?: boolean | number;\n dontCommitEditOnSelectionChange?: boolean;\n dontChangeSelectionOnOrderChange?: 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\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 [dragIndices, setDragIndices] = useState<[number[] | null, number[] | null]>([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: overlayRef });\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 selectedColumnGroups = useMemo(\n () =>\n props.columnGroupKeys\n ? new Set(mapSelectionColumns(selection)((x: number) => columnGroupKeys(x)).filter((x) => x != null))\n : null,\n [props.columnGroupKeys, columnGroupKeys, selection]\n );\n const selectedRowGroups = useMemo(\n () =>\n props.rowGroupKeys\n ? new Set(mapSelectionRows(selection)((y: number) => rowGroupKeys(y)).filter((x) => x != null))\n : null,\n [props.rowGroupKeys, rowGroupKeys, selection]\n );\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 const scrollToSelection = (selection: Rectangle, toHead = false) => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const [anchor, head] = selection;\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n scrollToCell(\n overlay,\n toHead ? head : anchor,\n view,\n freeze,\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n }\n );\n };\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollTo = true, toHead = false) => {\n if (!isSameSelection(selection, newSelection)) {\n setSelection(validateSelection(newSelection));\n }\n\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n if (scrollTo) {\n scrollToSelection(newSelection, toHead);\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 // If max row or column count changes, keep sheet in view\n const { maxColumns = Infinity, maxRows = Infinity } = props;\n useLayoutEffect(() => {\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n setDataOffset(clipDataOffset(view, dataOffset, freeze, [maxColumns, maxRows], cellLayout));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [maxRows, maxColumns]);\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 getAutoSizeWidth = useAutoSizeColumn(\n visibleCells.rows,\n displayData,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth\n );\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 selectedColumnGroups,\n selectedRowGroups,\n\n getAutoSizeWidth,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragIndices,\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 props.dontChangeSelectionOnOrderChange\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\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n\n knobPosition,\n knobArea,\n dragIndices,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\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 columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\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","headerSelectedGroup","headerSelectedText","headerSelectedGroupText","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","HEADER_GROUP_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","minXY","clampXY","p","Infinity","getDirectionStep","direction","isSameXY","isSameSelection","a1","a2","b1","b2","forRange","callback","forSelectionColumns","selection","normalizeSelection","left","right","forSelectionRows","top","bottom","forToMap","forLoop","out","push","mapSelectionColumns","mapSelectionRows","isMaybeRowSelection","isMaybeColumnSelection","isRowSelection","isColumnSelection","isCellSelection","isEmptySelection","isPointInsideSelection","point","y","validateSelection","anchor","head","slice","orientSelection","normalized","to","ax","ay","hx","hy","swapX","swapY","LIMIT","scanGroup","keys","index","matchKeys","limit","key","has","expandSelectionToRowOrColumnGroups","groupKeys","coordinate","first","second","start","end","startIndex","endIndex","expanded","oriented","isBoundaryInsideGroup","before","after","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","data","floor","xx","findInDisplayData","displayData","step","cell","firstFilled","cellX","cellY","useMouse","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","columnGroupKeys","rowGroupKeys","selectedColumnGroups","selectedRowGroups","getAutoSizeWidth","onEdit","onCommit","onKnobAreaChange","onDragIndicesChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","dontChangeSelectionOnOrderChange","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","clientWidth","clientHeight","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","indices","Set","filter","values","sort","dragIndices","clickSelection","connected","dragStart","dragEnd","size","scroll","edge","abs","asGroup","knobX","knobY","shiftKey","scrollTo","onPointerUp","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","insideGroup","preceding","order","previousRect","JSON","stringify","currentRect","obj","onClick","onPointerMove","preventDefault","isDragging","currentScroll","newWidth","newHeight","anchorX","anchorY","headX","headY","xCellDiff","yCellDiff","shift","onDoubleClick","autosized","column","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","clipDataOffset","view","freeze","maxCells","newX","newY","maxColumns","maxRows","absoluteToColumn","columnToAbsolute","absoluteToRow","rowToAbsolute","getViewExtent","rightEdge","bottomEdge","viewport","scrollW","scrollH","remainder","w","h","frozenX","frozenY","leftEdge","topEdge","scrollToCell","element","offsetX","offsetY","newOffset","setTimeout","scrollX","scrollY","resolveSheetStyle","freezeColumns","freezeRows","hideGridlines","hideScrollBars","columnHeaderHeight","rowHeaderWidth","resolveCellStyle","optionalStyle","defaultStyle","applyAlignment","cellSize","imageWidth","alignment","useAutoSizeColumn","cellStyle","columnHeaders","columnHeaderStyle","canvasWidth","context","createElement","getContext","getWidth","cellContent","finalStyle","font","inlineMargin","measureText","toString","width","maxWidth","extraWidth","items","content","horizontalAlign","headerContent","headerStyle","ceil","useClipboardCopy","textAreaRef","useLayoutEffect","textArea","v","formatSelectionAsTSV","match","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","innerHTML","trim","tableNode","tableChild","tr","td","str","textContent","replaceAll","split","cols","X","Y","INITIAL_SIZE","makeCellLayout","indent","freezeX","freezeY","indentX","indentY","getBaseOriginFor","base","relative","getStart","adjust","getSize","pixelToIndex","pixel","layout","lookupIndex","frozen","pixelX","pixelY","absoluteToIndex","getVisibleIndices","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","sizes","set","get","getOffset","j","tail","getEnd","last","mid","clearAfter","truncate","setSizer","initialSize","used","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","l","grow","round","shrink","getTail","setValue","getValue","hasValue","renderSheet","secondarySelections","dragOffset","dataOffset","canvas","height","clickables","resizeCanvas","clearRect","fillStyle","fillRect","selectionActive","rowSelectionActive","columnSelectionActive","resolveFrozenSelection","selected","hideKnob","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","isActive","groupKey","isInRowGroup","isSelfSelected","isGroupSelected","renderCell","excelHeaderString","isInColumnGroup","isSelected","selectedStyle","activeStyle","strokeRect","secondarySelection","span","setLineDash","shiftX","shiftY","dragColumns","dragRows","resolveSelection","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","defaultCellStyle","xCoord","yCoord","cellWidth","cellHeight","save","clip","fillText","HTMLImageElement","finalX","drawImage","measure","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","actualBoundingBoxDescent","restore","lastInvisibleX","lastInvisibleY","devicePixelRatio","ratio","newCanvasWidth","newCanvasHeight","scale","num","t","String","fromCharCode","rgb","opacity","hex","ease","sin","PI","pow","f","addColorStop","Sheet","forwardRef","props","canvasRef","overlayRef","setMaxScroll","setDataOffset","selectionProp","setSelection","setKnobArea","setDragOffset","setDragIndices","setDropTarget","setEditCell","lastSelectionProp","setLastSelectionProp","editValue","setEditValue","arrowKeyCommitMode","setArrowKeyCommitMode","useResizeObserver","canvasHeight","readOnly","editKeys","editCellX","editCellY","shouldCacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","scrollToSelection","toHead","overlay","changeSelection","newSelection","onSelectionChanged","commitEditingCell","startEditingCell","editDataValue","val","setLastEditKey","onScroll","animationFrameId","requestAnimationFrame","cancelAnimationFrame","onKeyDown","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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"}