sheet-happens 0.0.57 → 0.0.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/image.ts","../src/group.ts","../src/props.ts","../src/mouse.ts","../src/keyboard.ts","../src/scroll.ts","../src/cell.ts","../src/text.ts","../src/autosize.ts","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/clipboard.ts","../src/layout.ts","../src/render.ts","../src/style.ts","../src/sheet.tsx"],"sourcesContent":["import { CellContentRender, XY, Rectangle, Selection, 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];\nexport const NEG_NEG: 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: CellContentRender[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 100000;\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 lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginLeft: 5,\n marginRight: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\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 isSameRectangle = (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 isPointInsideRectangle = (rectangle: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = rectangle;\n const [x, y] = point;\n return x >= left && x < right && y >= top && y < bottom;\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 =\n <A extends Array<any>>(forLoop: (callback: (...args: A) => void) => void) =>\n <B>(map: (...args: A) => B) => {\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 { ReactElement, useCallback, useMemo, useState } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport toRGBA from 'color-rgba';\nimport { CellContentItem, Rectangle, Style } from './types';\n\nconst DEFAULT_ICON_SIZE = 32;\n\nexport const svgToImage = (icon: ReactElement | string): HTMLImageElement => {\n const image = new Image();\n try {\n const iconAsString = typeof icon === 'string' ? icon : renderToString(icon);\n const base64String = window.btoa(iconAsString);\n image.src = `data:image/svg+xml;base64,${base64String}`;\n } catch (err) {\n console.log(err);\n }\n return image;\n};\n\nexport const useImageRenderer = () => {\n const [, setVersion] = useState(0);\n\n const [canvasWidth, setCanvasWidth] = useState(DEFAULT_ICON_SIZE);\n const [canvasHeight, setCanvasHeight] = useState(DEFAULT_ICON_SIZE);\n\n const imageMap = useMemo(() => new Map<string, HTMLImageElement>(), []);\n const loadImage = useCallback(\n (src: string): HTMLImageElement => {\n let image = imageMap.get(src);\n if (image) return image;\n\n image = new Image();\n image.src = src;\n imageMap.set(src, image!);\n return image!;\n },\n [imageMap],\n );\n\n const dpi = window.devicePixelRatio;\n const iconContext = useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth * dpi;\n canvas.height = canvasHeight * dpi;\n\n const context = canvas.getContext('2d', { willReadFrequently: true }) as any as CanvasRenderingContext2D;\n return context;\n }, [canvasWidth, canvasHeight, dpi]);\n\n return (\n renderContext: CanvasRenderingContext2D,\n item: CellContentItem & { display: 'image' | 'icon' },\n style: Required<Style>,\n box: Rectangle,\n ) => {\n if (!iconContext) return;\n\n const { display } = item;\n\n const image = 'image' in item ? item.image : 'src' in item ? loadImage(item.src) : null;\n if (!image) return;\n\n if (!image.complete) {\n if (!image.onload) {\n image.onload = () => {\n setVersion((v) => v + 1);\n setCanvasWidth((w) => Math.max(w, image.width));\n setCanvasHeight((h) => Math.max(h, image.height));\n };\n }\n return;\n } else {\n if (canvasWidth < image.width) setCanvasWidth((w) => Math.max(w, image.width));\n if (canvasHeight < image.height) setCanvasHeight((h) => Math.max(h, image.height));\n }\n\n const [[left, top], [right, bottom]] = box;\n const width = right - left;\n const height = bottom - top;\n\n if (display === 'image') {\n // Draw image directly\n renderContext.drawImage(image, 0, 0, image.width, image.height, left, top, width, height);\n } else if (display === 'icon') {\n // Recolor icon according to text color style\n const color = item.color ?? style.color;\n const rgba = toRGBA(color);\n const [r = 0, g = 0, b = 0, a = 1] = rgba;\n\n try {\n const wDpi = width * dpi;\n const hDpi = height * dpi;\n\n iconContext.clearRect(0, 0, wDpi, hDpi);\n iconContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, wDpi, hDpi);\n\n const imageData = iconContext.getImageData(0, 0, wDpi, hDpi);\n const { data } = imageData;\n const n = data.length;\n\n for (let i = 0; i < n; i += 4) {\n data[i] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = data[i + 3] * a;\n }\n\n iconContext.putImageData(imageData, 0, 0, 0, 0, wDpi, hDpi);\n renderContext.drawImage(iconContext.canvas, 0, 0, wDpi, hDpi, left, top, width, height);\n } catch (e) {\n console.error(e);\n }\n }\n };\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 CellPropertyStyled,\n CellPropertyStyledFunction,\n PropTypes,\n RowOrColumnProperty,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyled,\n RowOrColumnPropertyStyledFunction,\n} from './types';\nimport { MAX_SEARCHABLE_INDEX, ORIGIN, DEFAULT_CELL_STYLE } from './constants';\nimport { 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\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnStyledProp = <T extends PropTypes>(\n rowColProp: RowOrColumnPropertyStyled<T> | undefined,\n defaultValue: T,\n): RowOrColumnPropertyStyledFunction<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 createCellStyledProp = <T extends PropTypes>(\n cellProp: CellPropertyStyled<T> | undefined,\n defaultValue: T,\n): CellPropertyStyledFunction<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: CellPropertyStyledFunction<CellContentType>,\n start: XY,\n direction: Direction,\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = maxXY(start, ORIGIN);\n const [x, y] = addXY(cell, step);\n const first = displayData(x, y, DEFAULT_CELL_STYLE);\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 const maxX = cellX + MAX_SEARCHABLE_INDEX - 1;\n const maxY = cellY + MAX_SEARCHABLE_INDEX - 1;\n\n while (cellX < maxX && cellY < maxY && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY, DEFAULT_CELL_STYLE);\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 { MouseEvent, PointerEvent, RefObject, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport {\n CellContentRender,\n CellLayout,\n CellPropertyFunction,\n Change,\n Rectangle,\n RowOrColumnPropertyFunction,\n SheetMouseEvent,\n SheetStyle,\n VisibleLayout,\n XY,\n} from './types';\nimport {\n normalizeSelection,\n mapSelectionColumns,\n mapSelectionRows,\n isColumnSelection,\n isRowSelection,\n isCellSelection,\n isMaybeRowSelection,\n isPointInsideRectangle,\n isPointInsideSelection,\n isSameRectangle,\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: XY;\n offset: XY;\n size: number;\n indices: number[];\n};\n\nexport const useMouse = (\n elementRef: RefObject<HTMLDivElement>,\n dataOffset: XY,\n\n hitmapRef: RefObject<CellContentRender[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<object | 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 getAutoSizeHeight: (row: 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 onFocusChange?: (focus: 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[], values: number[]) => void,\n onCellHeightChange?: (indices: number[], values: number[]) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean,\n dontChangeSelectionOnOrderChange?: boolean,\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 [hitTestDown, setHitTestDown] = useState<CellContentRender | null>(null);\n const [autoScroll, setAutoScroll] = useState<XY | 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 dataOffset,\n\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\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>, strict?: boolean) => {\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 (strict && (xy[0] > e.target.clientWidth || xy[1] > e.target.clientHeight)) {\n return null;\n }\n\n return xy;\n }, []);\n\n // Check if mouse is out of bounds and in what direction\n const getMouseOutOfBounds = useCallback(\n (e: PointerEvent<any> | MouseEvent<any>, allowX: boolean, allowY: boolean) => {\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 const indentX = cellLayout.getIndentX();\n const indentY = cellLayout.getIndentY();\n\n const xSign = allowX ? (xy[0] < indentX ? -1 : xy[0] > e.target.clientWidth ? 1 : 0) : 0;\n const ySign = allowY ? (xy[1] < indentY ? -1 : xy[1] > e.target.clientHeight ? 1 : 0) : 0;\n\n return xSign || ySign ? ([xSign, ySign] as XY) : null;\n },\n [cellLayout],\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 { box } = object;\n if (isPointInsideRectangle(box, 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 dataOffset,\n cellLayout: { columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY },\n visibleCells: { columns, rows },\n knobPosition,\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e, true);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n setHitTestDown(hitTarget);\n\n const [x, y] = xy;\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\n setColumnDrag({\n anchor: xy,\n offset: dataOffset,\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 [-1, ...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\n setColumnResize({\n anchor: xy,\n offset: dataOffset,\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\n setRowDrag({\n anchor: xy,\n offset: dataOffset,\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 [-1, ...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\n setRowResize({\n anchor: xy,\n offset: dataOffset,\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 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\n cellLayout: { pixelToColumn, pixelToRow },\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, editData, sourceData, 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(x, 0.5);\n const cellY = pixelToRow(y, 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 setAutoScroll(null);\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 dataOffset,\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 cellToPixel,\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 isDraggingX =\n !!columnResize || !!columnDrag || draggingColumnSelection || draggingSelection || draggingKnob;\n\n const isDraggingY = !!rowResize || !!rowDrag || draggingRowSelection || draggingSelection || draggingKnob;\n\n const isDragging = isDraggingX || isDraggingY;\n\n const outOfBounds = getMouseOutOfBounds(e, isDraggingX, isDraggingY);\n if (isDragging) setAutoScroll(outOfBounds);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n\n 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 } else if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n }\n\n const { columns, rows } = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const getDragScrollOffset = (startOffset: XY): XY => {\n return subXY(cellToPixel(dataOffset), cellToPixel(startOffset));\n };\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 [-1, ...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 [-1, ...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, offset, indices } = columnResize;\n const [scrollOffset] = getDragScrollOffset(offset);\n const newWidth = Math.round(\n Math.max(size + x - anchor[0] + scrollOffset, SIZES.minimumWidth * indices.length),\n );\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(\n indices,\n indices.map((_) => Math.round(newWidth / indices.length)),\n );\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const { size, anchor, offset, indices } = rowResize;\n const [, scrollOffset] = getDragScrollOffset(offset);\n const newHeight = Math.round(\n Math.max(size + y - anchor[1] + scrollOffset, SIZES.minimumHeight * indices.length),\n );\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(\n indices,\n indices.map((_) => newHeight / indices.length),\n );\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = maxXY(dataOffset, 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(x, 0.5);\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = isBoundaryInsideGroup(cellX, columnGroupKeys);\n\n const { anchor, offset } = columnDrag;\n const shift = x - anchor[0];\n const [scrollOffset] = getDragScrollOffset(offset);\n\n onDragOffsetChange?.([shift + scrollOffset, 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(y, 0.5);\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = isBoundaryInsideGroup(cellY, rowGroupKeys);\n\n const { anchor, offset } = rowDrag;\n const shift = y - anchor[1];\n const [, scrollOffset] = getDragScrollOffset(offset);\n\n onDragOffsetChange?.([0, shift + scrollOffset]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [-1, cellY],\n [-1, cellY],\n ],\n );\n }\n }\n },\n [\n getMousePosition,\n getMouseOutOfBounds,\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 onClick = useCallback(\n (e: MouseEvent) => {\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const mouseHit = getMouseHit(xy);\n\n // Verify if same object was clicked down and up to avoid false clicks due to drags\n if (hitTestDown && mouseHit) {\n if (isSameRectangle(hitTestDown.box, mouseHit.box)) {\n mouseHit?.item?.onClick?.(e);\n }\n }\n\n setHitTestDown(null);\n },\n [getMousePosition, getMouseHit, hitTestDown],\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n selection,\n cellLayout: { pixelToCell, columnToPixel, rowToPixel, getIndentX, getIndentY },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n\n // Double click column divider to autosize\n const indentY = getIndentY();\n const { columns } = visibleCells;\n if (onCellWidthChange && y < indentY) {\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 }\n onCellWidthChange(\n autosized,\n autosized.map((column) => getAutoSizeWidth(column)),\n );\n if (autosized.length) return;\n }\n\n // Double click row divider to autosize\n const indentX = getIndentX();\n const { rows } = visibleCells;\n if (onCellHeightChange && x < indentX) {\n const autosized = [];\n\n for (const index of [-1, ...rows]) {\n const edge = index < 0 ? rowToPixel(0) : rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n const [[, minY], [, maxY]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isRowSelection(selection) && index >= minY && index <= maxY\n ? mapSelectionRows(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const row of autosized) {\n onInvalidateRow?.(row - 1);\n }\n onCellHeightChange(\n autosized,\n autosized.map((row) => getAutoSizeHeight(row)),\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 useLayoutEffect(() => {\n if (!autoScroll) return;\n\n const loop = () => {\n const { current: element } = elementRef;\n if (!element) return;\n\n const [x, y] = autoScroll;\n const speed = 4;\n element.scrollLeft += x * speed * 2;\n element.scrollTop += y * speed;\n };\n\n const timer = setInterval(loop, 33);\n loop();\n\n return () => {\n clearInterval(timer);\n };\n }, [elementRef, autoScroll]);\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onClick,\n onDoubleClick,\n onContextMenu,\n };\n\n return { knobPosition, mouseHandlers };\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<object | string | number | null>,\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 = editData(x, srcY);\n const data = sourceData(x, srcY);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value, data, 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 = editData(srcX, y);\n const data = sourceData(srcX, y);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value, data, 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 { RefObject, KeyboardEvent, useLayoutEffect } from 'react';\n\nimport { ARROW_KEYS, MAX_SEARCHABLE_INDEX, ORIGIN, NEG_NEG } from './constants';\n\nimport { findInDisplayData } from './props';\n\nimport { CellContentType, CellPropertyFunction, CellPropertyStyledFunction, Change, Rectangle, XY } from './types';\n\nimport {\n normalizeSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\n\nexport const useKeyboard = (\n arrowKeyCommitMode: boolean,\n overlayRef: RefObject<HTMLDivElement>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n editCell: XY,\n editMode: boolean,\n focused: boolean,\n rawSelection: Rectangle,\n selection: Rectangle,\n\n onEdit?: (cell: XY, arrowKeyCommitMode?: boolean) => void,\n onCommit?: () => void,\n onCancel?: () => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n onClipboardCopy?: (cut: boolean) => void,\n onChange?: (changes: Change[]) => void,\n) => {\n const onInputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel?.();\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 onCommit?.();\n onSelectionChange?.([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && e.key in ARROW_KEYS) {\n onCommit?.();\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 onClipboardCopy?.(false);\n return;\n }\n // cut\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'x') {\n onClipboardCopy?.(true);\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\n onChange?.(changes);\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 return;\n }\n\n if (e.key === 'Enter') e.preventDefault();\n onEdit?.(cell, e.key !== 'Enter');\n return;\n }\n\n e.preventDefault();\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = rawSelection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n const shift = e.shiftKey;\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n } else {\n // Allow stepping into row/column headers with shift\n const limit: XY = shift\n ? isRowSelection(selection)\n ? [-1, 0]\n : isColumnSelection(selection)\n ? [0, -1]\n : NEG_NEG\n : ORIGIN;\n head = maxXY(addXY(head, step), limit);\n }\n\n if (!shift) {\n anchor = head;\n }\n\n onSelectionChange?.([anchor, head], true, true);\n return;\n }\n };\n\n const onGridFocus = () => {\n onFocusChange?.(true);\n };\n\n const onGridBlur = () => {\n onFocusChange?.(false);\n };\n\n // Focus canvas for keyboard\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) {\n return;\n }\n if (editMode || !focused) {\n return;\n }\n if (document.activeElement === overlay) {\n return;\n }\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 overlay.focus({ preventScroll: true });\n }\n }, [editMode, focused]);\n\n return { onInputKeyDown, onGridFocus, onGridBlur, onGridKeyDown };\n};\n","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY, subXY } 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] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\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 [freezeX, freezeY] = freeze;\n const [maxColumns, maxRows] = maxCells;\n\n const { absoluteToColumn, columnToAbsolute, absoluteToRow, rowToAbsolute } = cellLayout;\n\n const {\n edge: [leftEdge, topEdge],\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 (leftEdge >= maxColumns) {\n const remainder = columnToAbsolute(maxColumns) - columnToAbsolute(newX + freezeX);\n newX = Math.max(0, absoluteToColumn(columnToAbsolute(newX + freezeX) - scrollW + remainder) - freezeX + 1);\n }\n if (topEdge >= maxRows) {\n const remainder = rowToAbsolute(maxRows) - rowToAbsolute(newY + freezeY);\n newY = Math.max(0, absoluteToRow(rowToAbsolute(newY + freezeY) - scrollH + remainder) - freezeY + 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 { cellToAbsolute } = cellLayout;\n\n const [x, y] = offset;\n const [w, h] = view;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n\n const scrollW = w - frozenX;\n const scrollH = h - frozenY;\n\n const leftEdge = x + freeze[0];\n const topEdge = y + freeze[1];\n\n return {\n edge: [leftEdge, topEdge],\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 origin = cellToAbsolute([0, 0]);\n const frozen = cellToAbsolute(freeze);\n const [frozenX, frozenY] = frozen;\n\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 = subXY(cellToAbsolute(newOffset), origin);\n\n callback(newOffset, maxXY(maxScroll, scroll));\n\n setTimeout(() => {\n updateScrollPosition(element, newOffset, cellLayout);\n });\n }\n};\n\nexport const updateScrollPosition = (element: HTMLDivElement, dataOffset: XY, cellLayout: CellLayout) => {\n const { cellToAbsolute } = cellLayout;\n\n const scroll = cellToAbsolute(dataOffset);\n const [nudgeX, nudgeY] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\n\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX - nudgeX;\n element.scrollTop = scrollY - nudgeY;\n};\n","import type {\n Align,\n Anchor,\n CellContentContainer,\n CellContentItem,\n CellContentRender,\n Justify,\n Rectangle,\n} from './types';\n\nexport const getInlineAlignment = (cellWidth: number, contentWidth: number, align: Align): number => {\n if (align === 'left') return 0;\n if (align === 'right') return cellWidth - contentWidth;\n\n return Math.round((cellWidth - contentWidth) / 2);\n};\n\nexport const measureFlexWidth = (context: CanvasRenderingContext2D, item: CellContentItem): number => {\n const { width } = item;\n if (width != null) return width;\n\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n const { actualBoundingBoxLeft, actualBoundingBoxRight } = context.measureText(text.toString());\n const w = actualBoundingBoxRight + actualBoundingBoxLeft;\n return width ?? w;\n }\n } else {\n throw new Error('Image or JSX content must have dimension specified');\n }\n return 0;\n};\n\nexport const resolveCellFlexLayout = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { flexJustify = 'start', flexAlign = 'center', flexGap = 0, items } = cellContent;\n\n // Gather flex items\n const flexItems = items.filter((item) => !item.absolute);\n\n // Measure natural size without wrapping\n const measuredWidths = cellContent.items.map((item) => measureFlexWidth(context, item));\n\n // Gather flex box horizontal info\n const sizes: number[] = [];\n const grows: number[] = [];\n const shrinks: number[] = [];\n\n let x = 0;\n flexItems.forEach((item, i) => {\n const defaultGrow = item.display === 'inline' ? 1 : 0;\n const defaultShrink = defaultGrow || (item.display === 'space' ? 1 : 0);\n const {\n width = measuredWidths[i],\n flexGrow = defaultGrow,\n flexShrink = defaultShrink,\n marginLeft = 0,\n marginRight = 0,\n } = item;\n\n sizes.push(width);\n grows.push(flexGrow);\n shrinks.push(flexShrink);\n\n x += width + marginLeft + marginRight + flexGap;\n });\n\n // Horizontal slack: leave space for n-1 gaps, without last extra\n let slackX = cellWidth - x + flexGap;\n\n // Flex horizontally\n if (slackX > 0 && growRow(slackX, grows, sizes)) slackX = 0;\n if (slackX < 0 && shrinkRow(slackX, shrinks, sizes)) slackX = 0;\n\n const [gapX, leadX] = getAlignmentSpacing(slackX, flexItems.length, flexJustify);\n const combinedGapX = gapX + flexGap;\n\n // Gather flex box vertical info\n const maxHeight = flexItems\n .map(({ height, marginTop = 0, marginBottom = 0 }) => (height ?? cellHeight) + marginTop + marginBottom)\n .reduce((a, b) => Math.max(a, b));\n\n const slackY = Math.max(0, cellHeight - maxHeight);\n const offsetY = getAlignmentAnchor(flexAlign) * slackY;\n\n // Resolve flex boxes\n let leftCursor = leadX;\n return flexItems.map((item, i) => {\n const {\n height: fixedHeight,\n marginLeft = 0,\n marginRight = 0,\n marginTop = 0,\n marginBottom = 0,\n flexAlignSelf = flexAlign,\n } = item;\n\n const marginX = marginLeft + marginRight;\n const marginY = marginTop + marginBottom;\n\n const height = fixedHeight ?? maxHeight - marginY;\n\n const slackSelfY = maxHeight - height - marginY;\n const offsetSelfY = getAlignmentAnchor(flexAlignSelf) * slackSelfY;\n\n const x = Math.round(cellLeft + marginLeft + leftCursor);\n const y = Math.round(cellTop + marginTop + offsetY + offsetSelfY);\n leftCursor += combinedGapX + marginX + sizes[i];\n\n const boxW = sizes[i];\n const boxH = height;\n const box: Rectangle = [\n [x, y],\n [x + boxW, y + boxH],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\nexport const resolveCellAbsoluteLayout = (\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { items } = cellContent;\n\n // Gather absolute items\n const absoluteItems = items.filter((item) => item.absolute);\n\n const resolvePosition = (\n container: number,\n size: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (start != null) return start + marginStart;\n if (end != null) return container - end - marginEnd - size;\n return 0;\n };\n\n const resolveSize = (\n container: number,\n span?: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (span != null) return span;\n if (start != null && end != null) return container - start - end - marginStart - marginEnd;\n return 0;\n };\n\n // Resolve absolute boxes\n return absoluteItems.map((item) => {\n const { left, top, right, bottom, width, height, marginLeft, marginTop, marginRight, marginBottom } = item;\n\n const w = resolveSize(cellWidth, width, left, right, marginLeft, marginRight);\n const h = resolveSize(cellHeight, height, top, bottom, marginTop, marginBottom);\n\n const l = cellLeft + resolvePosition(cellWidth, w, left, right, marginLeft, marginRight);\n const t = cellTop + resolvePosition(cellHeight, h, top, bottom, marginTop, marginBottom);\n\n const box: Rectangle = [\n [l, t],\n [l + w, t + h],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\n// Grow all applicable blocks in a row to add extra slack.\nexport const growRow = (slack: number, grow: number[], sizes: number[]) => {\n const n = grow.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (grow[i] > 0) weight += grow[i];\n\n if (weight > 0) {\n for (let i = 0; i < n; ++i) {\n if (grow[i] > 0) {\n sizes[i] += (slack * grow[i]) / weight;\n }\n }\n return true;\n }\n return false;\n};\n\n// Shrink all applicable blocks in a row to remove excess slack.\nexport const shrinkRow = (slack: number, shrink: number[], sizes: number[]): boolean => {\n const n = shrink.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (shrink[i]) weight += shrink[i] * sizes[i];\n\n if (weight > 0) {\n let negative = 0;\n for (let i = 0; i < n; ++i) {\n if (shrink[i] > 0 && sizes[i]) {\n sizes[i] += (slack * shrink[i] * sizes[i]) / weight;\n if (sizes[i] < 0) {\n negative += sizes[i];\n sizes[i] = 0;\n }\n }\n }\n if (negative) {\n shrinkRow(negative, shrink, sizes);\n }\n return true;\n }\n return false;\n};\n\n// Alignment to relative anchor position [0...1]\nexport const getAlignmentAnchor = (x: Anchor): number => {\n const isStart = x === 'start';\n const isEnd = x === 'end';\n\n const align = isStart ? 0 : isEnd ? 1 : 0.5;\n return align;\n};\n\n// Alignment/justification spacing and indent\nexport const getAlignmentSpacing = (slack: number, n: number, justify: Justify) => {\n let gap = 0;\n let lead = 0;\n\n const isJustify = justify === 'justify';\n const isBetween = justify === 'between';\n const isEvenly = justify === 'evenly';\n\n if (slack > 0) {\n if (isEvenly || isBetween || isJustify) {\n if (n === 1) {\n lead = slack / 2;\n } else if (isEvenly) {\n gap = Math.max(0, slack / (n + 1));\n lead = gap;\n } else if (isBetween) {\n gap = Math.max(0, slack / n);\n lead = gap / 2;\n } else if (isJustify) {\n gap = Math.max(0, slack / Math.max(1, n - 1));\n }\n } else {\n lead = getAlignmentAnchor(justify as Anchor) * slack;\n }\n }\n\n return [gap, lead];\n};\n","import LineBreak from 'linebreak';\nimport { getInlineAlignment } from './cell';\nimport { Align, Style } from './types';\n\nexport const wrapText = (\n context: CanvasRenderingContext2D,\n text: string | number,\n style: Required<Style>,\n itemAlign: Align | undefined,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n emit: (text: string, x: number, y: number) => void,\n) => {\n const { textAlign, lineHeight, fontSize, marginBottom } = style;\n\n const align = itemAlign ?? textAlign;\n context.textAlign = align;\n\n const x = xCoord + getInlineAlignment(cellWidth, 0, align);\n const y = yCoord;\n const s = text.toString();\n const n = s.length;\n\n let xCursor = 0;\n let yCursor = 0;\n let wordsPerLine = 0;\n let startOfLine = 0;\n const newline = (endOfLine: number, ellipsis: boolean = false, endsInSpace: boolean = false) => {\n const line = s.slice(startOfLine, endOfLine - +endsInSpace);\n emit(ellipsis ? line + '…' : line, x, y + yCursor);\n\n startOfLine = endOfLine;\n wordsPerLine = 0;\n xCursor = 0;\n yCursor += lineHeight;\n };\n\n const breaker = new LineBreak(s);\n\n let lastPosition = 0;\n let bk;\n while ((bk = breaker.nextBreak())) {\n const { position, required } = bk;\n const word = s.slice(lastPosition, position);\n\n const { width } = context.measureText(word);\n\n const canNewLine = yCursor + lineHeight + marginBottom < cellHeight;\n const hasMoreText = position < n;\n const endsInSpace = word[word.length - 1] === ' ';\n const ellipsisSpace = !canNewLine && hasMoreText ? (endsInSpace ? 0.5 : 1) * fontSize : 0;\n\n const nextX = xCursor + width + ellipsisSpace;\n if (wordsPerLine && nextX >= cellWidth) {\n if (canNewLine) newline(lastPosition);\n else {\n if (endsInSpace) {\n const { width } = context.measureText(' ');\n xCursor -= width;\n }\n newline(lastPosition, true, endsInSpace);\n return;\n }\n }\n\n xCursor += width;\n wordsPerLine++;\n\n if (required) newline(position);\n\n lastPosition = position;\n }\n\n newline(n);\n};\n","import { useCallback, useMemo } from 'react';\nimport { DEFAULT_COLUMN_HEADER_STYLE, DEFAULT_CELL_STYLE, SIZES } from './constants';\nimport { resolveCellFlexLayout } from './cell';\nimport { wrapText } from './text';\nimport {\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n CellContentType,\n Style,\n} from './types';\n\nexport const useAutoSizeColumn = (\n rows: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellLayout: CellLayout,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n canvasWidth: number,\n frozenColumns: 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 viewWidth = canvasWidth - cellLayout.columnToAbsolute(x < frozenColumns ? 0 : frozenColumns);\n\n const getWidth = (cellContent: Exclude<CellContentType, null>, style: Required<Style>) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const inlineMargin = style.marginLeft + style.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 totalWidth = inlineMargin;\n\n const { flexGap = 0, items } = cellContent;\n for (const item of items) {\n if (item.absolute) continue;\n\n if (item.width != null) {\n totalWidth += item.width;\n } else if (item.display === 'inline' && item.text != null) {\n const { width } = context.measureText(item.text.toString());\n totalWidth += width;\n }\n totalWidth += flexGap;\n }\n totalWidth -= flexGap;\n\n return totalWidth;\n }\n return 0;\n };\n\n let maxWidth = SIZES.minimumWidth;\n\n const headerStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) };\n const headerContent = columnHeaders(x, headerStyle);\n if (headerContent) {\n maxWidth = Math.max(maxWidth, getWidth(headerContent, headerStyle));\n }\n\n for (const y of rows) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n const cellContent = displayData(x, y, style);\n if (cellContent != null) {\n maxWidth = Math.max(maxWidth, getWidth(cellContent, style));\n }\n }\n\n return Math.ceil(Math.min(viewWidth, maxWidth));\n },\n [\n context,\n rows,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n frozenColumns,\n ],\n );\n\n return getAutoSizeWidth;\n};\n\nexport const useAutoSizeRow = (\n columns: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellLayout: CellLayout,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n cellWidth: RowOrColumnPropertyFunction<number>,\n canvasHeight: number,\n frozenRows: number,\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeHeight = useCallback(\n (y: number) => {\n if (!context) return 0;\n\n const viewHeight = canvasHeight - cellLayout.rowToAbsolute(y < frozenRows ? 0 : frozenRows);\n\n const measureTextHeight = (text: string, style: Required<Style>, columnWidth: number) => {\n let maxY = 0;\n const measureY = (_t: string, _x: number, y: number) => {\n maxY = y + style.lineHeight;\n };\n wrapText(context, text, style, undefined, 0, 0, columnWidth, viewHeight, measureY);\n return maxY;\n };\n\n const getHeight = (\n cellContent: Exclude<CellContentType, null>,\n style: Required<Style>,\n columnWidth: number,\n ) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const verticalMargin = style.marginTop + style.marginBottom;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const height = measureTextHeight(cellContent.toString(), style, columnWidth);\n return height + verticalMargin;\n } else if (typeof cellContent === 'object') {\n let maxHeight = 0;\n\n const flexLayout = resolveCellFlexLayout(context, cellContent, 0, 0, columnWidth, 0);\n\n for (const { box, item } of flexLayout) {\n if (item.height != null) {\n maxHeight = Math.max(maxHeight, item.height);\n } else if (item.display === 'inline' && item.text != null) {\n const [[left], [right]] = box;\n const height = measureTextHeight(item.text.toString(), style, right - left);\n maxHeight = Math.max(maxHeight, height);\n }\n }\n\n return maxHeight + verticalMargin;\n }\n return 0;\n };\n\n const isHeader = y === -1;\n let maxHeight = SIZES.minimumHeight;\n\n for (const x of columns) {\n const style = isHeader\n ? { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) }\n : { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n\n const cellContent = isHeader ? columnHeaders(x, style) : displayData(x, y, style);\n\n if (cellContent != null) {\n const columnWidth = cellWidth(x) - style.marginLeft - style.marginRight;\n maxHeight = Math.max(maxHeight, getHeight(cellContent, style, columnWidth));\n }\n }\n\n return Math.ceil(Math.min(viewHeight, maxHeight));\n },\n [\n context,\n columns,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n frozenRows,\n ],\n );\n\n return getAutoSizeHeight;\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import {\n ClipboardPayload,\n ClipboardRawTable,\n ClipboardTable,\n ClipboardTableCells,\n CellPropertyFunction,\n Change,\n Rectangle,\n} from './types';\nimport { useCallback, useLayoutEffect, useMemo, useState } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport {\n normalizeSelection,\n isMaybeRowSelection,\n isMaybeColumnSelection,\n isEmptySelection,\n addXY,\n subXY,\n mulXY,\n forSelectionRows,\n forSelectionColumns,\n} from './coordinate';\n\nconst NON_BREAKING_SPACE = ' ';\n\n// Type missing from TS <=4.3\ninterface ClipboardItem {\n readonly types: string[];\n readonly presentationStyle: 'unspecified' | 'inline' | 'attachment';\n getType(): Promise<Blob>;\n}\n\ndeclare var ClipboardItem: {\n prototype: ClipboardItem;\n new (itemData: any): ClipboardItem;\n};\n\nconst EMPTY_TABLE: ClipboardTable<any> = { rows: [] };\n\n// Access clipboard as HTML table + JSON payload.\n// Provide peek access to clipboard if permission granted.\n// Ask permission on first copy.\nexport const useClipboardTable = <T extends ClipboardTableCells>(clipboardOrigin: string) => {\n const [peek, setPeek] = useState<ClipboardTable<T> | null>();\n\n useLayoutEffect(() => {\n const softRefresh = async () => {\n try {\n const status = await navigator.permissions.query({ name: 'clipboard-read' as any });\n if (status.state !== 'granted') return;\n\n hardRefresh();\n } catch (e) {}\n };\n\n const hardRefresh = async () => {\n try {\n const pasted = await pasteClipboardTable<T>();\n if (pasted) {\n const peek = validateClipboardTable<T>(pasted, clipboardOrigin);\n setPeek(peek);\n } else {\n setPeek(EMPTY_TABLE);\n }\n } catch (e) {}\n };\n\n const delayedRefresh = () => setTimeout(hardRefresh);\n\n window.document.addEventListener('cut', delayedRefresh);\n window.document.addEventListener('copy', delayedRefresh);\n window.document.addEventListener('focus', softRefresh);\n\n softRefresh();\n\n return () => {\n window.document.removeEventListener('cut', delayedRefresh);\n window.document.removeEventListener('copy', delayedRefresh);\n window.document.removeEventListener('focus', softRefresh);\n };\n }, []);\n\n const canPaste = useCallback(\n // Peek may not be available, allow paste attempt.\n () => !!(peek == null || peek.rows?.length),\n [peek],\n );\n\n return {\n peek,\n canPaste,\n copyTable: ({ rows, ...rest }: ClipboardTable<T>) =>\n copyClipboardTable(rows, { origin: clipboardOrigin, ...rest }),\n pasteTable: async (): Promise<ClipboardTable<T> | null> => {\n const pasted = await pasteClipboardTable<T>();\n if (!pasted) return null;\n\n return validateClipboardTable<T>(pasted, clipboardOrigin);\n },\n };\n};\n\n// Sheet clipboard with payload-handler injected\nexport const useClipboardAPI = <T extends ClipboardTableCells = ClipboardTableCells>(\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<object | string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean>,\n addListener: boolean,\n\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Change[]) => void,\n onCopy?: (selection: Rectangle, cut: boolean) => ClipboardTable<T> | null | undefined,\n onPaste?: (\n selection: Rectangle,\n table?: ClipboardTable<T>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>,\n clipboardOrigin: string = '',\n) => {\n const { canPaste, copyTable, pasteTable } = useClipboardTable<T>(clipboardOrigin);\n\n const pasteIntoSelection = useCallback(\n async (selection: Rectangle, table: ClipboardTable<T>) => {\n const { rows, data } = table;\n\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n\n const left = Math.max(0, minX);\n const top = Math.max(0, minY);\n\n const width = rows.reduce((a, b) => Math.max(a, b.length), 0);\n const height = rows.length;\n\n const selectionSize = mulXY(addXY(subXY(max, min), [1, 1]), [1 / width, 1 / height]);\n const repeatX = Math.max(1, Math.floor(selectionSize[0]));\n const repeatY = Math.max(1, Math.floor(selectionSize[1]));\n\n const newSelection: Rectangle = [min, addXY(min, [width * repeatX - 1, height * repeatY - 1])];\n\n const shouldPaste = await onPaste?.(newSelection, table);\n if (shouldPaste !== false) {\n const changes = rows\n .flatMap((row, j) =>\n row.flatMap((value, i) => {\n const cells: Change[] = [];\n for (let rx = 0; rx < repeatX; ++rx) {\n for (let ry = 0; ry < repeatY; ++ry) {\n const x = left + i + rx * width;\n const y = top + j + ry * height;\n const v = data?.cells?.[j]?.[i];\n if (!cellReadOnly?.(x, y)) cells.push({ x, y, value, data: v });\n }\n }\n return cells;\n }),\n )\n .filter((change) => !!change) as Change[];\n\n onChange?.(changes);\n onSelectionChange?.(newSelection);\n }\n },\n [onChange, onSelectionChange, cellReadOnly],\n );\n\n // Imperative API\n const copySelection = useCallback(\n async (selection: Rectangle, cut: boolean = false) => {\n const table =\n onCopy?.(selection, cut) ??\n (formatSelectionAsRows(selection, editData, sourceData) as ClipboardTable<T>);\n copyTable(table);\n\n if (table?.cut ?? cut) {\n const changes: Change[] = [];\n forSelectionRows(selection)((y: number) => {\n forSelectionColumns(selection)((x: number) => {\n if (!cellReadOnly?.(x, y)) {\n const change = { x, y, value: '', data: null };\n changes.push(change);\n }\n });\n });\n onChange?.(changes);\n }\n },\n [onCopy, onChange, cellReadOnly],\n );\n\n const pasteSelection = useCallback(\n async (selection: Rectangle) => {\n const table = await pasteTable();\n if (table) pasteIntoSelection(selection, table);\n },\n [pasteIntoSelection],\n );\n\n // Event handlers\n const onClipboardCopy = (cut: boolean) => {\n if (isEmptySelection(selection)) return;\n return copySelection(selection, cut);\n };\n\n const onClipboardPaste = async (e: any) => {\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const parsed = await parseClipboardTable<T>(clipboardData);\n if (parsed) {\n const table = validateClipboardTable<T>(parsed, clipboardOrigin);\n if (table) pasteIntoSelection(selection, table);\n }\n };\n\n useLayoutEffect(() => {\n if (!addListener) return;\n\n // Use onpaste event when we can because it has more browser support\n window.document.addEventListener('paste', onClipboardPaste);\n return () => {\n window.document.removeEventListener('paste', onClipboardPaste);\n };\n });\n\n const clipboardApi = useMemo(\n () => ({\n copySelection,\n pasteSelection,\n canPasteSelection: canPaste,\n }),\n [copySelection, pasteSelection, canPaste],\n );\n\n return { clipboardApi, onClipboardCopy, onClipboardPaste };\n};\n\nconst validateClipboardTable = <T extends ClipboardTableCells>(\n parsed: ClipboardRawTable<T>,\n clipboardOrigin: string,\n): ClipboardTable<T> => {\n const { rows, payload } = parsed;\n if (!payload) return { rows };\n\n const { origin, ...rest } = payload;\n if (origin === clipboardOrigin) return { rows, ...rest };\n return { rows };\n};\n\nconst copyClipboardTable = async (rows: string[][], payload?: ClipboardPayload<any> | null) => {\n const text = formatRowsAsTSV(rows);\n const html = formatRowsAsHTML(rows, payload ?? undefined);\n\n await (navigator.clipboard as any).write([\n new ClipboardItem({\n 'text/html': new Blob([html], { type: 'text/html' }),\n 'text/plain': new Blob([text], { type: 'text/plain' }),\n }),\n ]);\n\n const event = new Event('copy');\n document.dispatchEvent(event);\n};\n\nconst pasteClipboardTable = async <T extends ClipboardTableCells>(): Promise<ClipboardTable<T> | null> => {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (!item) return null;\n\n return await parseClipboardTable(item);\n};\n\nconst parseClipboardTable = async <T extends ClipboardTableCells>(\n item: ClipboardItem | DataTransfer,\n): Promise<ClipboardRawTable<T> | null> => {\n // Work with both clipboard API (ClipboardItem) and onpaste event (DataTransfer)\n const has = (type: string) => {\n return item.types.includes(type);\n };\n\n const get = (type: string) => {\n if ('getData' in item) return item.getData(type);\n else if ('getType' in item) return (item as any).getType(type).then((blob: Blob) => blob.text());\n return '';\n };\n\n let rows, payload;\n if (has('text/html')) {\n const pastedHtml = await get('text/html');\n ({ rows, payload } = parsePastedHtml(pastedHtml));\n } else if (has('text/plain')) {\n const text = await get('text/plain');\n rows = parsePastedText(text);\n }\n if (!rows) return { rows: [] };\n\n return { rows, payload };\n};\n\nconst formatRowsAsTSV = (rows: string[][]) => rows.map((row) => row.join('\\t')).join('\\n');\n\nconst formatRowsAsHTML = (rows: string[][], payload?: ClipboardPayload<any>) => {\n const trs = rows\n .map((row) => {\n const tds = row\n .map(formatTextAsHTML)\n .map(\n (cell) =>\n `<td>${cell.replaceAll(/ +/g, (x) => ' ' + NON_BREAKING_SPACE.repeat(x.length - 1))}</td>`,\n );\n return tds.join('');\n })\n .map((row) => `<tr>${row}</tr>`)\n .join('\\n');\n\n const table = `<table>${trs}</table>`;\n\n if (payload) {\n const extra = `<SheetHappens payload=\"${formatTextAsHTML(JSON.stringify(payload))}\"></SheetHappens>`;\n return extra + table;\n }\n\n return table;\n};\n\nconst formatTextAsHTML = (s: string) => s?.toString().replace(/[&\"'<>]/g, (i) => `&#${i.charCodeAt(0)};`) ?? '';\n\nconst formatSelectionAsRows = (\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<object | string | number | null>,\n): ClipboardTable => {\n if (isEmptySelection(selection)) return { rows: [] };\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 texts: string[][] = [];\n const datas: Record<string, Record<string, any>> = {};\n\n for (let y = minY; y <= maxY; y++) {\n const textRow: string[] = [];\n const dataRow: Record<string, any> = {};\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y) ?? '';\n const data = sourceData(x, y) ?? null;\n dataRow[textRow.length] = data;\n textRow.push(value);\n }\n\n datas[texts.length] = dataRow;\n texts.push(textRow);\n }\n\n return { rows: texts, data: { cells: datas } };\n};\n\nconst findTag = (element: any, tagName: string): any => {\n for (const child of element.children) {\n if (child.nodeName === tagName) {\n return child;\n }\n const maybeTag = findTag(child, tagName);\n if (maybeTag) {\n return maybeTag;\n }\n }\n};\n\nconst parsePastedHtml = (\n html: string,\n): {\n rows: string[][];\n payload: any;\n} => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const rows = [];\n let payload: any = undefined;\n\n const sheetNode = findTag(div, 'SHEETHAPPENS');\n if (sheetNode) {\n const json = sheetNode.getAttribute('payload');\n try {\n payload = JSON.parse(json);\n if (!payload || typeof payload !== 'object') payload = null;\n } catch (e) {}\n }\n\n const tableNode = findTag(div, 'TABLE');\n const spanNode = findTag(div, 'SPAN');\n\n if (tableNode) {\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n if (tr.nodeName === 'TR') {\n const row = [];\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(/[\\r\\n\\t ]+/g, ' ');\n str = str.replaceAll(NON_BREAKING_SPACE, ' ');\n\n row.push(str);\n }\n }\n rows.push(row);\n }\n }\n }\n }\n } else if (spanNode) {\n let str: string = '';\n\n str = spanNode.textContent.trim();\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n\n rows.push([str]);\n }\n\n return {\n rows,\n payload,\n };\n};\n\nconst parsePastedText = (text: string): string[][] => {\n return text.split(/\\r?\\n/).map((line) => line.split('\\t'));\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 offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache,\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => columns.getStart(0);\n const getIndentY = () => rows.getStart(0);\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 = columns.getSize(column);\n\n return getIndentX() + 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 = rows.getSize(row);\n\n return getIndentY() + 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 = (pixel: number, anchor: number, freeze: number, offset: number, layout: LayoutCache) => {\n const { getStart, lookupIndex } = layout;\n\n const indent = getStart(0);\n if (pixel < indent) return 0;\n\n const frozen = getStart(freeze);\n if (pixel < frozen) {\n return lookupIndex(pixel, anchor);\n } else {\n const relative = pixel - indent;\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, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) => pixelToIndex(pixelY, anchorY, 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, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const { getStart, getEnd } = layout;\n\n const frozen = getEnd(freeze - 1);\n const notFrozen = getStart(offset + freeze);\n\n const relative = view - frozen;\n for (let i = offset + freeze; getStart(i) - notFrozen <= 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, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, 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] = sizer(-1)\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, sizer(-1));\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return sizer(i);\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() || -1;\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 CellContentRender,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n ImageRenderer,\n InternalSheetStyle,\n Rectangle,\n Selection,\n Style,\n CellContentType,\n VisibleLayout,\n XY,\n} from './types';\nimport { resolveCellFlexLayout, resolveCellAbsoluteLayout } from './cell';\nimport { normalizeSelection, isEmptySelection, isColumnSelection, isRowSelection } from './coordinate';\nimport { wrapText } from './text';\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 imageRenderer: ImageRenderer,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n isFocused: boolean,\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: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyStyledFunction<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): CellContentRender[] => {\n const { canvas } = context;\n const { width, height } = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\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 allClickables: CellContentRender[] = [];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\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, 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, indentX, 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, indentX, 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, indentY);\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, indentY);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? indentX : context.canvas.width;\n const gridBottom = hideGridlines ? indentY : 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(indentX, context.canvas.height);\n drawGridLineY(indentY, 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 resolvedStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...style };\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n const clickables = renderCell(\n context,\n imageRenderer,\n content,\n resolvedStyle,\n 0,\n top,\n indentX,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n\n for (const column of columns) {\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 ...DEFAULT_COLUMN_HEADER_STYLE,\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n const content = columnHeaders(column, style) ?? excelHeaderString(column + 1);\n\n const clickables = renderCell(context, imageRenderer, content, style, left, 0, right - left, indentY);\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n context.globalAlpha = isFocused ? 1 : 0.5;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(left, top, right - left - 1, bottom - top - 1);\n\n context.globalAlpha = 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, 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 = 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 = 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 style = {\n ...DEFAULT_CELL_STYLE,\n ...cellStyle(x, y),\n };\n const cellContent = displayData(x, y, style);\n if (cellContent !== null && cellContent !== undefined) {\n const clickables = renderCell(\n context,\n imageRenderer,\n cellContent,\n style,\n left,\n top,\n right - left,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n }\n\n return allClickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n imageRenderer: ImageRenderer,\n cellContent: CellContentType,\n style: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] | null => {\n if (cellContent === null) {\n return null;\n }\n\n const fillText = context.fillText.bind(context);\n const fontString = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n context.font = fontString;\n context.fillStyle = style.color;\n\n // Apply cell margins\n const { marginTop, marginBottom, marginLeft, marginRight, lineHeight } = style;\n\n const innerX = Math.round(xCoord + marginLeft);\n const innerY = Math.round(yCoord + marginTop);\n const innerWidth = Math.round(cellWidth - marginRight - marginLeft);\n const innerHeight = Math.round(cellHeight - marginTop - marginBottom);\n\n // Snap to device-pixels for better alignment\n const middleY = roundDpi(yCoord + marginTop + lineHeight / 2);\n\n if (style.backgroundColor !== '') {\n context.fillStyle = style.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = style.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n wrapText(context, cellContent, style, undefined, innerX, middleY, innerWidth, innerHeight, fillText);\n });\n return null;\n } else if (typeof cellContent === 'object') {\n const renderedFlex = resolveCellFlexLayout(context, cellContent, innerX, innerY, innerWidth, innerHeight);\n const renderedAbsolute = resolveCellAbsoluteLayout(cellContent, innerX, innerY, innerWidth, innerHeight);\n const rendered = [...renderedFlex, ...renderedAbsolute];\n\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n for (const [i, render] of rendered.entries()) {\n const { box, item } = render;\n\n const [[left, top], [right, bottom]] = box;\n\n const width = right - left;\n const height = bottom - top;\n\n if (cellContent.inspect) {\n context.lineWidth = 1;\n context.strokeStyle = '#ff00ff';\n context.strokeRect(left + 0.5, top + 0.5, width - 0.5, height - 0.5);\n }\n\n const clipLeft = i > 0 ? left : xCoord;\n const clipRight = i < rendered.length ? right : yCoord + cellWidth;\n const clipWidth = clipRight - clipLeft;\n\n clipToBox(context, clipLeft, yCoord, clipWidth, cellHeight, () => {\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n wrapText(\n context,\n text,\n style,\n item.textAlign,\n left,\n roundDpi(top + lineHeight / 2),\n width,\n height,\n fillText,\n );\n }\n }\n if (item.display === 'image' || item.display === 'icon') {\n imageRenderer(context, item, style, box);\n }\n });\n }\n });\n\n return rendered.filter(({ item }) => item?.onClick);\n }\n return null;\n};\n\nconst clipToBox = (\n context: CanvasRenderingContext2D,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n callback: () => void,\n) => {\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n callback();\n context.restore();\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 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 [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 fixed indent\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\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 = frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = 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 }\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\n// Move down half a logical pixel on high-dpi\nexport const getDpiNudge = () => {\n const { devicePixelRatio } = window;\n return (devicePixelRatio - 1) / devicePixelRatio;\n};\n\n// Round to device pixels instead of logical pixels, and nudge downwards on high-dpi for baseline alignment\nexport const roundDpi = (y: number) => {\n const { devicePixelRatio } = window;\n return Math.round((y + getDpiNudge()) * devicePixelRatio) / devicePixelRatio;\n};\n","import { InternalSheetStyle, SheetStyle } 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 shadowBlur: sheetStyle?.shadowBlur ?? SIZES.shadowBlur,\n shadowOpacity: sheetStyle?.shadowOpacity ?? SIZES.shadowOpacity,\n shadowColor: sheetStyle?.shadowColor ?? COLORS.shadowColor,\n };\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellContentRender,\n CellLayout,\n CellProperty,\n CellPropertyStyled,\n CellContentType,\n ClipboardTable,\n RowOrColumnPropertyStyled,\n RowOrColumnProperty,\n Selection,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n VisibleLayout,\n} from './types';\n\nimport {\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 isSameRectangle,\n mapSelectionColumns,\n mapSelectionRows,\n addXY,\n} from './coordinate';\nimport { useImageRenderer } from './image';\nimport { useMouse } from './mouse';\nimport { useKeyboard } from './keyboard';\nimport { useScroll, scrollToCell, clipDataOffset, updateScrollPosition } from './scroll';\nimport { useAutoSizeColumn, useAutoSizeRow } from './autosize';\nimport { useClipboardAPI } from './clipboard';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createCellStyledProp, createRowOrColumnProp, createRowOrColumnStyledProp } from './props';\nimport { renderSheet, getDpiNudge } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string;\n autoFocus: boolean;\n onKeyDown: KeyboardEventHandler<HTMLElement>;\n onChange: (value: object | string | number | null) => 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?: RowOrColumnPropertyStyled<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<object | string | number | null>;\n displayData?: CellPropertyStyled<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 autoFocus?: boolean;\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell: (value?: object | 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[], values: number[]) => void;\n onCellHeightChange?: (indices: number[], values: number[]) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n\n onCopy?: (selection: Rectangle, cut: boolean) => ClipboardTable<any> | null | undefined;\n onPaste?: (\n selection: Rectangle,\n table: ClipboardTable<any>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>;\n clipboardOrigin?: string;\n};\n\nexport type SheetRef = CellLayout & {\n startEditingCell: (editCell: XY, arrowKeyCommitMode?: boolean) => void;\n copySelection: (selection: Rectangle, cut?: boolean) => Promise<void>;\n pasteSelection: (selection: Rectangle) => Promise<void>;\n canPasteSelection: () => boolean;\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 [rawSelection, setRawSelection] = 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 [focused, setFocused] = useState(!!props.autoFocus);\n\n const [lastSelectionProp, setLastSelectionProp] = useState<Rectangle>(selectionProp);\n if (lastSelectionProp !== selectionProp) {\n setLastSelectionProp(selectionProp);\n setRawSelection(selectionProp);\n }\n\n const [editValue, setEditValue] = useState<string | null>('');\n const [sourceValue, setSourceValue] = useState<object | string | number | null>(null);\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(() => createRowOrColumnStyledProp(props.columnHeaders, null), [props.columnHeaders]);\n const columnHeaderStyle = useMemo(\n () => 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(() => createCellStyledProp(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 selection = useMemo(() => validateSelection(rawSelection), [rawSelection]);\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 } = sheetStyle;\n const cellLayout = useMemo(\n () => makeCellLayout([freezeColumns, freezeRows], dataOffset, columnLayout, rowLayout),\n [freezeColumns, freezeRows, 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 (!isSameRectangle(selection, newSelection)) {\n setRawSelection(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(validateSelection(newSelection));\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const cancelEditingCell = () => {\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const commitEditingCell = (value?: object | string | number | null) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n\n const hasData = !!input;\n const v = hasData ? null : (value as string | number | null);\n const d = hasData ? value : null;\n\n props.onChange([\n {\n x: cellX,\n y: cellY,\n value: value !== undefined ? v : editValue,\n data: value !== undefined ? d : sourceValue,\n },\n ]);\n }\n setEditCell(NO_CELL);\n setFocused(true);\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 hasData = !!props.inputComponent?.(cellX, cellY, { ...inputProps, onChange: () => {} }, () => {});\n\n const editValue = editData(cellX, cellY) ?? '';\n const sourceValue = sourceData(cellX, cellY) ?? null;\n\n if (hasData) {\n setEditValue(null);\n setSourceValue(sourceValue);\n } else {\n setEditValue(editValue);\n }\n\n setEditCell(editCell);\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 { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const newOffset = clipDataOffset(view, dataOffset, freeze, [maxColumns, maxRows], cellLayout);\n setDataOffset(newOffset);\n updateScrollPosition(overlay, newOffset, cellLayout);\n\n // Only fire if extents change\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<CellContentRender[]>(NO_CLICKABLES);\n\n // Detect focus on canvas\n const isFocused = focused || editMode;\n\n const { clipboardApi, onClipboardCopy } = useClipboardAPI(\n selection,\n editData,\n sourceData,\n cellReadOnly,\n isFocused && !editMode,\n changeSelection,\n props.onChange,\n props.onCopy,\n props.onPaste,\n props.clipboardOrigin ?? location.origin,\n );\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);\n\n const getAutoSizeWidth = useAutoSizeColumn(\n visibleCells.rows,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n freezeColumns,\n );\n\n const getAutoSizeHeight = useAutoSizeRow(\n visibleCells.columns,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n freezeRows,\n );\n\n const { mouseHandlers, knobPosition } = useMouse(\n overlayRef,\n dataOffset,\n\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 getAutoSizeHeight,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragIndices,\n setDragOffset,\n setDropTarget,\n changeSelection,\n setFocused,\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 const { onInputKeyDown, onGridKeyDown, onGridFocus, onGridBlur } = useKeyboard(\n arrowKeyCommitMode,\n overlayRef,\n cellReadOnly,\n displayData,\n editCell,\n editMode,\n focused,\n rawSelection,\n selection,\n\n startEditingCell,\n commitEditingCell,\n cancelEditingCell,\n changeSelection,\n setFocused,\n onClipboardCopy,\n\n props.onChange,\n );\n\n const imageRenderer = useImageRenderer();\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 imageRenderer,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\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 isFocused,\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 [lastEditKey, setLastEditKey] = useState('');\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextAlign: 'right' | 'left' | 'center' = 'right';\n let editTextLineHeight = '';\n let editTextMargin = '';\n let editTextFontSize = DEFAULT_CELL_STYLE.fontSize;\n let editTextFontFamily = DEFAULT_CELL_STYLE.fontFamily;\n let editTextFontWeight = DEFAULT_CELL_STYLE.fontWeight;\n if (editMode) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(...editCell) };\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextAlign = style.textAlign;\n editTextLineHeight = `${style.lineHeight}px`;\n editTextFontSize = style.fontSize;\n editTextFontFamily = style.fontFamily;\n editTextFontWeight = style.fontWeight;\n\n // Deduct border + apply high-dpi nudge to line up with render\n const yNudge = getDpiNudge();\n editTextMargin = `${style.marginTop - 1 + yNudge}px ${style.marginRight - 2}px ${style.marginBottom - 2}px ${style.marginLeft - 1}px`;\n\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: onInputKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: editTextMargin,\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextAlign,\n lineHeight: editTextLineHeight,\n color: 'black',\n fontSize: editTextFontSize,\n fontFamily: editTextFontFamily,\n fontWeight: editTextFontWeight,\n resize: 'none',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setSourceValue } 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 outline: 0,\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(\n () => props.renderInside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderInside, visibleCells, cellLayout, selection, editMode],\n );\n\n const renderedOutside = useMemo(\n () => props.renderOutside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderOutside, visibleCells, cellLayout, selection, editMode],\n );\n\n // External component API\n useImperativeHandle(\n ref,\n () => ({\n ...cellLayout,\n ...clipboardApi,\n startEditingCell,\n }),\n [cellLayout, clipboardApi, 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 onKeyDown={onGridKeyDown}\n onFocus={onGridFocus}\n onBlur={onGridBlur}\n tabIndex={0}\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 {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <textarea\n {...inputProps}\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","NEG_NEG","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","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","lineHeight","marginTop","marginBottom","marginLeft","marginRight","color","fontFamily","fontWeight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","HEADER_GROUP_SELECTED_STYLE","ARROW_KEYS","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","seq","n","s","d","Array","from","length","map","_","i","isInRange","x","min","max","isInRangeLeft","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","Math","minXY","getDirectionStep","direction","isSameXY","isSameRectangle","a1","a2","b1","b2","isPointInsideRectangle","rectangle","point","_rectangle$","left","top","_rectangle$2","right","bottom","y","forRange","callback","forSelectionColumns","selection","_normalizeSelection","normalizeSelection","_normalizeSelection$","_normalizeSelection$2","forSelectionRows","_normalizeSelection2","_normalizeSelection2$","_normalizeSelection2$2","forToMap","forLoop","out","push","apply","arguments","mapSelectionColumns","mapSelectionRows","isMaybeRowSelection","_selection$","_selection$2","isMaybeColumnSelection","_selection$3","_selection$4","isRowSelection","_selection$5","_selection$6","isColumnSelection","_selection$7","_selection$8","isCellSelection","_selection$9","_selection$10","isEmptySelection","_selection$11","_selection$12","isPointInsideSelection","_normalizeSelection3","_normalizeSelection3$","_normalizeSelection3$2","validateSelection","anchor","head","slice","orientSelection","normalized","to","_normalized$","_normalized$2","ax","ay","hx","hy","swapX","swapY","DEFAULT_ICON_SIZE","svgToImage","icon","image","Image","iconAsString","renderToString","base64String","window","btoa","src","err","console","log","useImageRenderer","_useState","useState","setVersion","_useState2","canvasWidth","setCanvasWidth","_useState3","canvasHeight","setCanvasHeight","imageMap","useMemo","Map","loadImage","useCallback","get","set","dpi","devicePixelRatio","iconContext","canvas","document","createElement","width","height","context","getContext","willReadFrequently","renderContext","item","style","box","display","complete","onload","v","w","h","_box$","_box$2","drawImage","_item$color","rgba","toRGBA","_rgba$","r","_rgba$2","g","_rgba$3","_rgba$4","wDpi","hDpi","clearRect","imageData","getImageData","data","putImageData","e","error","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","createRowOrColumnStyledProp","createCellStyledProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","floor","xx","findInDisplayData","displayData","step","cell","_addXY","firstFilled","_cell","cellX","cellY","maxX","maxY","_cell2","useMouse","elementRef","dataOffset","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","columnGroupKeys","rowGroupKeys","selectedColumnGroups","selectedRowGroups","getAutoSizeWidth","getAutoSizeHeight","onEdit","onCommit","onKnobAreaChange","onDragIndicesChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onFocusChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","dontChangeSelectionOnOrderChange","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","_useState4","rowDrag","setRowDrag","_useState5","hitTestDown","setHitTestDown","_useState6","autoScroll","setAutoScroll","_useState7","draggingKnob","setDraggingKnob","_useState8","draggingSelection","setDraggingSelection","_useState9","draggingRowSelection","setDraggingRowSelection","_useState10","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","refState","ref","useRef","current","getMousePosition","strict","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","clientWidth","clientHeight","getMouseOutOfBounds","allowX","allowY","indentX","getIndentX","indentY","getIndentY","xSign","ySign","getMouseHit","hitmap","_iterator","_createForOfIteratorHelperLoose","_step","done","object","value","onPointerLeave","body","cursor","onPointerDown","_ref$current","_ref$current$cellLayo","columnToPixel","rowToPixel","pixelToCell","_ref$current$visibleC","columns","rows","button","_e$target","_e$target$setPointerC","setPointerCapture","call","pointerId","hitTarget","minX","minY","selectedColumns","selectedRows","_iterator2","_step2","indices","Set","concat","filter","values","sort","dragIndices","clickSelection","_expandSelectionToRow","_expandSelectionToRow2","_expandSelectionToRow3","connected","dragStart","dragEnd","size","offset","_i","_arr","edge","abs","asGroup","_iterator3","_step3","_expandSelectionToRow4","_expandSelectionToRow5","_expandSelectionToRow6","_i2","_arr2","knobX","knobY","shiftKey","scrollTo","onPointerUp","_ref$current2","_ref$current2$cellLay","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","insideGroup","preceding","order","onPointerMove","_ref$current3","_ref$current3$cellLay","isDraggingX","isDraggingY","isDragging","outOfBounds","preventDefault","getDragScrollOffset","startOffset","_iterator4","_step4","_i3","_arr3","_iterator5","_step5","_i4","_arr4","_getDragScrollOffset","scrollOffset","newWidth","round","_getDragScrollOffset2","newHeight","anchorX","anchorY","headX","headY","_pixelToCell","_normalizeSelection4","_normalizeSelection4$","_normalizeSelection4$2","xCellDiff","yCellDiff","shift","_getDragScrollOffset3","_getDragScrollOffset4","onClick","mouseHit","_mouseHit$item","_mouseHit$item$onClic","onDoubleClick","_ref$current4","_ref$current4$cellLay","autosized","_iterator6","_step6","_normalizeSelection5","_normalizeSelection5$","_normalizeSelection5$2","_i5","_autosized","column","_i6","_arr5","_normalizeSelection6","_normalizeSelection6$","_normalizeSelection6$2","_i7","_autosized3","row","editCell","onContextMenu","_ref$current$cellLayo2","event","_extends","useLayoutEffect","loop","element","speed","scrollLeft","scrollTop","timer","setInterval","clearInterval","mouseHandlers","_normalizeSelection7","_normalizeSelection7$","kx1","ky1","_normalizeSelection7$2","kx2","ky2","_normalizeSelection8","_normalizeSelection8$","sx1","sy1","_normalizeSelection8$2","sx2","sy2","fx1","fy1","fx2","fy2","_findApproxMaxEditDat","srcY","source","_findApproxMaxEditDat2","srcX","useKeyboard","arrowKeyCommitMode","overlayRef","focused","rawSelection","onCancel","onClipboardCopy","onInputKeyDown","onGridKeyDown","metaKey","ctrlKey","String","fromCharCode","which","toLowerCase","x1","y1","x2","y2","keyCode","onGridFocus","onGridBlur","overlay","activeElement","activeTagName","tagName","contentEditable","focus","preventScroll","useScroll","maxScroll","onOffsetChange","onMaxScrollChange","absoluteToCell","cellToAbsolute","_subXY","nudgeX","nudgeY","maxScrollX","maxScrollY","growX","growY","clipDataOffset","view","freeze","maxCells","newX","newY","freezeX","freezeY","maxColumns","maxRows","absoluteToColumn","columnToAbsolute","absoluteToRow","rowToAbsolute","_getViewExtent","getViewExtent","_getViewExtent$edge","leftEdge","topEdge","_getViewExtent$viewpo","viewport","scrollW","scrollH","remainder","_cellToAbsolute","frozenX","frozenY","scrollToCell","offsetX","offsetY","origin","frozen","_cellToPixel","_cellToPixel2","newOffset","scroll","setTimeout","updateScrollPosition","_subXY2","scrollX","scrollY","getInlineAlignment","cellWidth","contentWidth","align","measureFlexWidth","text","_context$measureText","measureText","toString","actualBoundingBoxLeft","actualBoundingBoxRight","Error","resolveCellFlexLayout","cellContent","cellLeft","cellTop","cellHeight","_cellContent$flexJust","flexJustify","_cellContent$flexAlig","flexAlign","_cellContent$flexGap","flexGap","items","flexItems","absolute","measuredWidths","sizes","grows","shrinks","forEach","defaultGrow","defaultShrink","_item$width","_item$flexGrow","flexGrow","_item$flexShrink","flexShrink","_item$marginLeft","_item$marginRight","slackX","growRow","shrinkRow","_getAlignmentSpacing","getAlignmentSpacing","gapX","leadX","combinedGapX","maxHeight","_ref","_ref$marginTop","_ref$marginBottom","reduce","slackY","getAlignmentAnchor","leftCursor","fixedHeight","_item$marginLeft2","_item$marginRight2","_item$marginTop","_item$marginBottom","_item$flexAlignSelf","flexAlignSelf","marginX","marginY","slackSelfY","offsetSelfY","boxW","boxH","resolveCellAbsoluteLayout","absoluteItems","resolvePosition","container","marginStart","marginEnd","resolveSize","span","l","t","slack","grow","weight","shrink","negative","isStart","isEnd","justify","gap","lead","isJustify","isBetween","isEvenly","wrapText","itemAlign","xCoord","yCoord","emit","xCursor","yCursor","wordsPerLine","startOfLine","newline","endOfLine","ellipsis","endsInSpace","line","breaker","LineBreak","lastPosition","bk","nextBreak","_bk","position","required","word","canNewLine","hasMoreText","ellipsisSpace","nextX","_context$measureText2","useAutoSizeColumn","cellStyle","columnHeaders","columnHeaderStyle","frozenColumns","viewWidth","getWidth","font","inlineMargin","totalWidth","maxWidth","headerStyle","headerContent","ceil","useAutoSizeRow","frozenRows","viewHeight","measureTextHeight","columnWidth","measureY","_t","_x","getHeight","verticalMargin","flexLayout","_step3$value","isHeader","NON_BREAKING_SPACE","EMPTY_TABLE","useClipboardTable","clipboardOrigin","peek","setPeek","softRefresh","Promise","resolve","navigator","permissions","query","name","then","status","state","hardRefresh","pasteClipboardTable","pasted","validateClipboardTable","_temp","reject","delayedRefresh","addEventListener","removeEventListener","canPaste","_peek$rows","copyTable","rest","_objectWithoutPropertiesLoose","_excluded","copyClipboardTable","pasteTable","useClipboardAPI","addListener","onCopy","onPaste","_useClipboardTable","pasteIntoSelection","table","selectionSize","repeatX","repeatY","newSelection","shouldPaste","flatMap","j","cells","rx","ry","_data$cells","_data$cells$j","change","copySelection","cut","_onCopy","formatSelectionAsRows","_table$cut","pasteSelection","onClipboardPaste","clipboardData","parseClipboardTable","parsed","clipboardApi","canPasteSelection","payload","_excluded2","formatRowsAsTSV","html","formatRowsAsHTML","clipboard","write","ClipboardItem","Blob","type","Event","dispatchEvent","read","types","includes","getData","getType","blob","_temp3","pastedHtml","_parsePastedHtml","parsePastedHtml","_temp5","parsePastedText","_temp4","join","trs","tds","formatTextAsHTML","replaceAll","repeat","extra","JSON","stringify","_s$toString$replace","replace","charCodeAt","texts","datas","textRow","dataRow","_editData","_sourceData","findTag","children","child","nodeName","maybeTag","div","innerHTML","trim","sheetNode","json","getAttribute","parse","tableNode","spanNode","tableChild","tr","td","str","p","textContent","split","INITIAL_SIZE","makeCellLayout","getStart","getBaseOriginFor","base","relative","adjust","getSize","_anchor","_anchor2","pixelToIndex","pixel","layout","lookupIndex","indent","pixelX","pixelY","_anchor3","absoluteToIndex","_anchor4","getVisibleIndices","getEnd","notFrozen","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","getOffset","tail","last","mid","clearAfter","truncate","setSizer","initialSize","used","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","getTail","setValue","getValue","hasValue","renderSheet","imageRenderer","secondarySelections","isFocused","dragOffset","hideGridlines","freezeColumns","freezeRows","allClickables","resizeCanvas","fillStyle","fillRect","_iterator10","_step10","_cellStyle","selectionActive","rowSelectionActive","columnSelectionActive","_resolveFrozenSelecti","resolveFrozenSelection","selected","hideKnob","_selected$","_selected$2","_selected$3","_selected$4","_selected$5","_selected$6","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","content","isActive","groupKey","isInRowGroup","isSelfSelected","isGroupSelected","resolvedStyle","clickables","renderCell","_columnHeaders","isInColumnGroup","isSelected","selectedStyle","activeStyle","excelHeaderString","globalAlpha","_selected$7","_selected$8","strokeRect","secondarySelection","_resolveFrozenSelecti2","_selected$9","_selected$10","setLineDash","shiftX","shiftY","dragColumns","dragRows","_iterator7","_step7","_iterator8","_step8","_resolveSelection","resolveSelection","_resolveSelection$","_resolveSelection$2","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","_iterator9","_step9","_iterator11","_step11","fillText","bind","fontString","innerX","innerY","innerWidth","innerHeight","middleY","roundDpi","clipToBox","renderedFlex","renderedAbsolute","rendered","_step12$value","_step12","render","inspect","clipLeft","clipRight","clipWidth","_iterator12","entries","_loop","save","clip","restore","_cellToPixel3","_cellToPixel4","lastInvisibleX","lastInvisibleY","_canvas$getBoundingCl","_window","_window$devicePixelRa","ratio","newCanvasWidth","newCanvasHeight","scale","num","rgb","opacity","hex","ease","sin","PI","pow","f","addColorStop","getDpiNudge","_window2","_window3","resolveSheetStyle","hideScrollBars","_sheetStyle$shadowBlu","_sheetStyle$shadowOpa","_sheetStyle$shadowCol","Sheet","forwardRef","props","canvasRef","setMaxScroll","setDataOffset","selectionProp","_props$selection","setRawSelection","setKnobArea","setDragOffset","setDragIndices","setDropTarget","setEditCell","autoFocus","setFocused","lastSelectionProp","setLastSelectionProp","_useState11","editValue","setEditValue","_useState12","sourceValue","setSourceValue","_useState13","setArrowKeyCommitMode","_useResizeObserver","useResizeObserver","_useResizeObserver$wi","_useResizeObserver$he","readOnly","editKeys","_props$secondarySelec","editCellX","editCellY","shouldCacheLayout","_props$cacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","scrollToSelection","toHead","changeSelection","onSelectionChanged","cancelEditingCell","commitEditingCell","hasData","input","startEditingCell","_props$inputComponent","inputComponent","inputProps","setLastEditKey","_props$maxColumns","Infinity","_props$maxRows","_useClipboardAPI","_props$clipboardOrigi","location","onScroll","_useMouse","_useKeyboard","animationFrameId","requestAnimationFrame","cancelAnimationFrame","_useState14","lastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextAlign","editTextLineHeight","editTextMargin","editTextFontSize","editTextFontFamily","editTextFontWeight","yNudge","editKey","_editTextPosition","textX","textY","onKeyDown","padding","outline","border","resize","_props$inputComponent2","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","renderedInside","_props$renderInside","renderInside","renderedOutside","_props$renderOutside","renderOutside","useImperativeHandle","React","onFocus","onBlur","tabIndex","className","pointerEvents","select"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/image.ts","../src/group.ts","../src/props.ts","../src/mouse.ts","../src/keyboard.ts","../src/scroll.ts","../src/cell.ts","../src/text.ts","../src/autosize.ts","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/clipboard.ts","../src/layout.ts","../src/render.ts","../src/style.ts","../src/sheet.tsx"],"sourcesContent":["import { CellContentRender, XY, Rectangle, Selection, 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];\nexport const NEG_NEG: 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: CellContentRender[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 100000;\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 lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginLeft: 5,\n marginRight: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\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 isSameRectangle = (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 isPointInsideRectangle = (rectangle: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = rectangle;\n const [x, y] = point;\n return x >= left && x < right && y >= top && y < bottom;\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 =\n <A extends Array<any>>(forLoop: (callback: (...args: A) => void) => void) =>\n <B>(map: (...args: A) => B) => {\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 { ReactElement, useCallback, useMemo, useState } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport toRGBA from 'color-rgba';\nimport { CellContentItem, Rectangle, Style } from './types';\n\nconst DEFAULT_ICON_SIZE = 32;\n\nexport const svgToImage = (icon: ReactElement | string): HTMLImageElement => {\n const image = new Image();\n try {\n const iconAsString = typeof icon === 'string' ? icon : renderToString(icon);\n const base64String = window.btoa(iconAsString);\n image.src = `data:image/svg+xml;base64,${base64String}`;\n } catch (err) {\n console.log(err);\n }\n return image;\n};\n\nexport const useImageRenderer = () => {\n const [, setVersion] = useState(0);\n\n const [canvasWidth, setCanvasWidth] = useState(DEFAULT_ICON_SIZE);\n const [canvasHeight, setCanvasHeight] = useState(DEFAULT_ICON_SIZE);\n\n const imageMap = useMemo(() => new Map<string, HTMLImageElement>(), []);\n const loadImage = useCallback(\n (src: string): HTMLImageElement => {\n let image = imageMap.get(src);\n if (image) return image;\n\n image = new Image();\n image.src = src;\n imageMap.set(src, image!);\n return image!;\n },\n [imageMap],\n );\n\n const dpi = window.devicePixelRatio;\n const iconContext = useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth * dpi;\n canvas.height = canvasHeight * dpi;\n\n const context = canvas.getContext('2d', { willReadFrequently: true }) as any as CanvasRenderingContext2D;\n return context;\n }, [canvasWidth, canvasHeight, dpi]);\n\n return (\n renderContext: CanvasRenderingContext2D,\n item: CellContentItem & { display: 'image' | 'icon' },\n style: Required<Style>,\n box: Rectangle,\n ) => {\n if (!iconContext) return;\n\n const { display } = item;\n\n const image = 'image' in item ? item.image : 'src' in item ? loadImage(item.src) : null;\n if (!image) return;\n\n if (!image.complete) {\n if (!image.onload) {\n image.onload = () => {\n setVersion((v) => v + 1);\n setCanvasWidth((w) => Math.max(w, image.width));\n setCanvasHeight((h) => Math.max(h, image.height));\n };\n }\n return;\n } else {\n if (canvasWidth < image.width) setCanvasWidth((w) => Math.max(w, image.width));\n if (canvasHeight < image.height) setCanvasHeight((h) => Math.max(h, image.height));\n }\n\n const [[left, top], [right, bottom]] = box;\n const width = right - left;\n const height = bottom - top;\n\n if (display === 'image') {\n // Draw image directly\n renderContext.drawImage(image, 0, 0, image.width, image.height, left, top, width, height);\n } else if (display === 'icon') {\n // Recolor icon according to text color style\n const color = item.color ?? style.color;\n const rgba = toRGBA(color);\n const [r = 0, g = 0, b = 0, a = 1] = rgba;\n\n try {\n const wDpi = width * dpi;\n const hDpi = height * dpi;\n\n iconContext.clearRect(0, 0, wDpi, hDpi);\n iconContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, wDpi, hDpi);\n\n const imageData = iconContext.getImageData(0, 0, wDpi, hDpi);\n const { data } = imageData;\n const n = data.length;\n\n for (let i = 0; i < n; i += 4) {\n data[i] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = data[i + 3] * a;\n }\n\n iconContext.putImageData(imageData, 0, 0, 0, 0, wDpi, hDpi);\n renderContext.drawImage(iconContext.canvas, 0, 0, wDpi, hDpi, left, top, width, height);\n } catch (e) {\n console.error(e);\n }\n }\n };\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 CellPropertyStyled,\n CellPropertyStyledFunction,\n PropTypes,\n RowOrColumnProperty,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyled,\n RowOrColumnPropertyStyledFunction,\n} from './types';\nimport { MAX_SEARCHABLE_INDEX, ORIGIN, DEFAULT_CELL_STYLE } from './constants';\nimport { 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\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnStyledProp = <T extends PropTypes>(\n rowColProp: RowOrColumnPropertyStyled<T> | undefined,\n defaultValue: T,\n): RowOrColumnPropertyStyledFunction<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 createCellStyledProp = <T extends PropTypes>(\n cellProp: CellPropertyStyled<T> | undefined,\n defaultValue: T,\n): CellPropertyStyledFunction<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: CellPropertyStyledFunction<CellContentType>,\n start: XY,\n direction: Direction,\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = maxXY(start, ORIGIN);\n const [x, y] = addXY(cell, step);\n const first = displayData(x, y, DEFAULT_CELL_STYLE);\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 const maxX = cellX + MAX_SEARCHABLE_INDEX - 1;\n const maxY = cellY + MAX_SEARCHABLE_INDEX - 1;\n\n while (cellX < maxX && cellY < maxY && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY, DEFAULT_CELL_STYLE);\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 { MouseEvent, PointerEvent, RefObject, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport {\n CellContentRender,\n CellLayout,\n CellPropertyFunction,\n Change,\n Rectangle,\n RowOrColumnPropertyFunction,\n SheetMouseEvent,\n SheetStyle,\n VisibleLayout,\n XY,\n} from './types';\nimport {\n normalizeSelection,\n mapSelectionColumns,\n mapSelectionRows,\n isColumnSelection,\n isRowSelection,\n isCellSelection,\n isMaybeRowSelection,\n isPointInsideRectangle,\n isPointInsideSelection,\n isSameRectangle,\n addXY,\n subXY,\n maxXY,\n} from './coordinate';\nimport { MAX_SEARCHABLE_INDEX, 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: XY;\n offset: XY;\n size: number;\n indices: number[];\n};\n\nexport const useMouse = (\n elementRef: RefObject<HTMLDivElement>,\n dataOffset: XY,\n\n hitmapRef: RefObject<CellContentRender[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<object | string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n maxColumns: number,\n maxRows: number,\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 getAutoSizeHeight: (row: 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 onFocusChange?: (focus: 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[], values: number[]) => void,\n onCellHeightChange?: (indices: number[], values: number[]) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean,\n dontChangeSelectionOnOrderChange?: boolean,\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 [hitTestDown, setHitTestDown] = useState<CellContentRender | null>(null);\n const [autoScroll, setAutoScroll] = useState<XY | 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 dataOffset,\n\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\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>, strict?: boolean) => {\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 (strict && (xy[0] > e.target.clientWidth || xy[1] > e.target.clientHeight)) {\n return null;\n }\n\n return xy;\n }, []);\n\n // Check if mouse is out of bounds and in what direction\n const getMouseOutOfBounds = useCallback(\n (e: PointerEvent<any> | MouseEvent<any>, allowX: boolean, allowY: boolean) => {\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 const indentX = cellLayout.getIndentX();\n const indentY = cellLayout.getIndentY();\n\n const xSign = allowX ? (xy[0] < indentX ? -1 : xy[0] > e.target.clientWidth ? 1 : 0) : 0;\n const ySign = allowY ? (xy[1] < indentY ? -1 : xy[1] > e.target.clientHeight ? 1 : 0) : 0;\n\n return xSign || ySign ? ([xSign, ySign] as XY) : null;\n },\n [cellLayout],\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 { box } = object;\n if (isPointInsideRectangle(box, 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 dataOffset,\n cellLayout: { columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY },\n visibleCells: { columns, rows },\n knobPosition,\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e, true);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n setHitTestDown(hitTarget);\n\n const [x, y] = xy;\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\n setColumnDrag({\n anchor: xy,\n offset: dataOffset,\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 [-1, ...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\n setColumnResize({\n anchor: xy,\n offset: dataOffset,\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\n setRowDrag({\n anchor: xy,\n offset: dataOffset,\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 [-1, ...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\n setRowResize({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n // Top-left corner click\n if (\n !hideColumnHeaders &&\n !hideRowHeaders &&\n y < getIndentY() &&\n x < getIndentX()\n ) {\n const lastCol = (Number.isFinite(maxColumns) ? maxColumns : MAX_SEARCHABLE_INDEX) - 1;\n const lastRow = (Number.isFinite(maxRows) ? maxRows : MAX_SEARCHABLE_INDEX) - 1;\n if (lastCol >= 0 && lastRow >= 0) {\n onSelectionChange?.(\n [\n [0, 0],\n [lastCol, lastRow],\n ],\n false,\n true,\n );\n }\n return;\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 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\n cellLayout: { pixelToColumn, pixelToRow },\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, editData, sourceData, 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(x, 0.5);\n const cellY = pixelToRow(y, 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 setAutoScroll(null);\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 dataOffset,\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 cellToPixel,\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 isDraggingX =\n !!columnResize || !!columnDrag || draggingColumnSelection || draggingSelection || draggingKnob;\n\n const isDraggingY = !!rowResize || !!rowDrag || draggingRowSelection || draggingSelection || draggingKnob;\n\n const isDragging = isDraggingX || isDraggingY;\n\n const outOfBounds = getMouseOutOfBounds(e, isDraggingX, isDraggingY);\n if (isDragging) setAutoScroll(outOfBounds);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n\n 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 } else if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n }\n\n const { columns, rows } = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const getDragScrollOffset = (startOffset: XY): XY => {\n return subXY(cellToPixel(dataOffset), cellToPixel(startOffset));\n };\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 [-1, ...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 [-1, ...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, offset, indices } = columnResize;\n const [scrollOffset] = getDragScrollOffset(offset);\n const newWidth = Math.round(\n Math.max(size + x - anchor[0] + scrollOffset, SIZES.minimumWidth * indices.length),\n );\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(\n indices,\n indices.map((_) => Math.round(newWidth / indices.length)),\n );\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const { size, anchor, offset, indices } = rowResize;\n const [, scrollOffset] = getDragScrollOffset(offset);\n const newHeight = Math.round(\n Math.max(size + y - anchor[1] + scrollOffset, SIZES.minimumHeight * indices.length),\n );\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(\n indices,\n indices.map((_) => newHeight / indices.length),\n );\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = maxXY(dataOffset, 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(x, 0.5);\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = isBoundaryInsideGroup(cellX, columnGroupKeys);\n\n const { anchor, offset } = columnDrag;\n const shift = x - anchor[0];\n const [scrollOffset] = getDragScrollOffset(offset);\n\n onDragOffsetChange?.([shift + scrollOffset, 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(y, 0.5);\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = isBoundaryInsideGroup(cellY, rowGroupKeys);\n\n const { anchor, offset } = rowDrag;\n const shift = y - anchor[1];\n const [, scrollOffset] = getDragScrollOffset(offset);\n\n onDragOffsetChange?.([0, shift + scrollOffset]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [-1, cellY],\n [-1, cellY],\n ],\n );\n }\n }\n },\n [\n getMousePosition,\n getMouseOutOfBounds,\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 onClick = useCallback(\n (e: MouseEvent) => {\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const mouseHit = getMouseHit(xy);\n\n // Verify if same object was clicked down and up to avoid false clicks due to drags\n if (hitTestDown && mouseHit) {\n if (isSameRectangle(hitTestDown.box, mouseHit.box)) {\n mouseHit?.item?.onClick?.(e);\n }\n }\n\n setHitTestDown(null);\n },\n [getMousePosition, getMouseHit, hitTestDown],\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n selection,\n cellLayout: { pixelToCell, columnToPixel, rowToPixel, getIndentX, getIndentY },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n\n // Double click column divider to autosize\n const indentY = getIndentY();\n const { columns } = visibleCells;\n if (onCellWidthChange && y < indentY) {\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 }\n onCellWidthChange(\n autosized,\n autosized.map((column) => getAutoSizeWidth(column)),\n );\n if (autosized.length) return;\n }\n\n // Double click row divider to autosize\n const indentX = getIndentX();\n const { rows } = visibleCells;\n if (onCellHeightChange && x < indentX) {\n const autosized = [];\n\n for (const index of [-1, ...rows]) {\n const edge = index < 0 ? rowToPixel(0) : rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n const [[, minY], [, maxY]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isRowSelection(selection) && index >= minY && index <= maxY\n ? mapSelectionRows(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const row of autosized) {\n onInvalidateRow?.(row - 1);\n }\n onCellHeightChange(\n autosized,\n autosized.map((row) => getAutoSizeHeight(row)),\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 useLayoutEffect(() => {\n if (!autoScroll) return;\n\n const loop = () => {\n const { current: element } = elementRef;\n if (!element) return;\n\n const [x, y] = autoScroll;\n const speed = 4;\n element.scrollLeft += x * speed * 2;\n element.scrollTop += y * speed;\n };\n\n const timer = setInterval(loop, 33);\n loop();\n\n return () => {\n clearInterval(timer);\n };\n }, [elementRef, autoScroll]);\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onClick,\n onDoubleClick,\n onContextMenu,\n };\n\n return { knobPosition, mouseHandlers };\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<object | string | number | null>,\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 = editData(x, srcY);\n const data = sourceData(x, srcY);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value, data, 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 = editData(srcX, y);\n const data = sourceData(srcX, y);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value, data, 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 { RefObject, KeyboardEvent, useLayoutEffect } from 'react';\n\nimport { ARROW_KEYS, MAX_SEARCHABLE_INDEX, ORIGIN, NEG_NEG } from './constants';\n\nimport { findInDisplayData } from './props';\n\nimport { CellContentType, CellPropertyFunction, CellPropertyStyledFunction, Change, Rectangle, XY } from './types';\n\nimport {\n normalizeSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\n\nexport const useKeyboard = (\n arrowKeyCommitMode: boolean,\n overlayRef: RefObject<HTMLDivElement>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n editCell: XY,\n editMode: boolean,\n focused: boolean,\n rawSelection: Rectangle,\n selection: Rectangle,\n\n onEdit?: (cell: XY, arrowKeyCommitMode?: boolean) => void,\n onCommit?: () => void,\n onCancel?: () => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n onClipboardCopy?: (cut: boolean) => void,\n onChange?: (changes: Change[]) => void,\n) => {\n const onInputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel?.();\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 onCommit?.();\n onSelectionChange?.([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && e.key in ARROW_KEYS) {\n onCommit?.();\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 onClipboardCopy?.(false);\n return;\n }\n // cut\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'x') {\n onClipboardCopy?.(true);\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\n onChange?.(changes);\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 return;\n }\n\n if (e.key === 'Enter') e.preventDefault();\n onEdit?.(cell, e.key !== 'Enter');\n return;\n }\n\n e.preventDefault();\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = rawSelection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n const shift = e.shiftKey;\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n } else {\n // Allow stepping into row/column headers with shift\n const limit: XY = shift\n ? isRowSelection(selection)\n ? [-1, 0]\n : isColumnSelection(selection)\n ? [0, -1]\n : NEG_NEG\n : ORIGIN;\n head = maxXY(addXY(head, step), limit);\n }\n\n if (!shift) {\n anchor = head;\n }\n\n onSelectionChange?.([anchor, head], true, true);\n return;\n }\n };\n\n const onGridFocus = () => {\n onFocusChange?.(true);\n };\n\n const onGridBlur = () => {\n onFocusChange?.(false);\n };\n\n // Focus canvas for keyboard\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) {\n return;\n }\n if (editMode || !focused) {\n return;\n }\n if (document.activeElement === overlay) {\n return;\n }\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 overlay.focus({ preventScroll: true });\n }\n }, [editMode, focused]);\n\n return { onInputKeyDown, onGridFocus, onGridBlur, onGridKeyDown };\n};\n","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY, subXY } 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 onScrollAction?: () => 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] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\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 onScrollAction?.();\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 [freezeX, freezeY] = freeze;\n const [maxColumns, maxRows] = maxCells;\n\n const { absoluteToColumn, columnToAbsolute, absoluteToRow, rowToAbsolute } = cellLayout;\n\n const {\n edge: [leftEdge, topEdge],\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 (leftEdge >= maxColumns) {\n const remainder = columnToAbsolute(maxColumns) - columnToAbsolute(newX + freezeX);\n newX = Math.max(0, absoluteToColumn(columnToAbsolute(newX + freezeX) - scrollW + remainder) - freezeX + 1);\n }\n if (topEdge >= maxRows) {\n const remainder = rowToAbsolute(maxRows) - rowToAbsolute(newY + freezeY);\n newY = Math.max(0, absoluteToRow(rowToAbsolute(newY + freezeY) - scrollH + remainder) - freezeY + 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 { cellToAbsolute } = cellLayout;\n\n const [x, y] = offset;\n const [w, h] = view;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n\n const scrollW = w - frozenX;\n const scrollH = h - frozenY;\n\n const leftEdge = x + freeze[0];\n const topEdge = y + freeze[1];\n\n return {\n edge: [leftEdge, topEdge],\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 origin = cellToAbsolute([0, 0]);\n const frozen = cellToAbsolute(freeze);\n const [frozenX, frozenY] = frozen;\n\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 = subXY(cellToAbsolute(newOffset), origin);\n\n callback(newOffset, maxXY(maxScroll, scroll));\n\n setTimeout(() => {\n updateScrollPosition(element, newOffset, cellLayout);\n });\n }\n};\n\nexport const updateScrollPosition = (element: HTMLDivElement, dataOffset: XY, cellLayout: CellLayout) => {\n const { cellToAbsolute } = cellLayout;\n\n const scroll = cellToAbsolute(dataOffset);\n const [nudgeX, nudgeY] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\n\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX - nudgeX;\n element.scrollTop = scrollY - nudgeY;\n};\n","import type {\n Align,\n Anchor,\n CellContentContainer,\n CellContentItem,\n CellContentRender,\n Justify,\n Rectangle,\n} from './types';\n\nexport const getInlineAlignment = (cellWidth: number, contentWidth: number, align: Align): number => {\n if (align === 'left') return 0;\n if (align === 'right') return cellWidth - contentWidth;\n\n return Math.round((cellWidth - contentWidth) / 2);\n};\n\nexport const measureFlexWidth = (context: CanvasRenderingContext2D, item: CellContentItem): number => {\n const { width } = item;\n if (width != null) return width;\n\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n const { actualBoundingBoxLeft, actualBoundingBoxRight } = context.measureText(text.toString());\n const w = actualBoundingBoxRight + actualBoundingBoxLeft;\n return width ?? w;\n }\n } else {\n throw new Error('Image or JSX content must have dimension specified');\n }\n return 0;\n};\n\nexport const resolveCellFlexLayout = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { flexJustify = 'start', flexAlign = 'center', flexGap = 0, items } = cellContent;\n\n // Gather flex items\n const flexItems = items.filter((item) => !item.absolute);\n\n // Measure natural size without wrapping\n const measuredWidths = cellContent.items.map((item) => measureFlexWidth(context, item));\n\n // Gather flex box horizontal info\n const sizes: number[] = [];\n const grows: number[] = [];\n const shrinks: number[] = [];\n\n let x = 0;\n flexItems.forEach((item, i) => {\n const defaultGrow = item.display === 'inline' ? 1 : 0;\n const defaultShrink = defaultGrow || (item.display === 'space' ? 1 : 0);\n const {\n width = measuredWidths[i],\n flexGrow = defaultGrow,\n flexShrink = defaultShrink,\n marginLeft = 0,\n marginRight = 0,\n } = item;\n\n sizes.push(width);\n grows.push(flexGrow);\n shrinks.push(flexShrink);\n\n x += width + marginLeft + marginRight + flexGap;\n });\n\n // Horizontal slack: leave space for n-1 gaps, without last extra\n let slackX = cellWidth - x + flexGap;\n\n // Flex horizontally\n if (slackX > 0 && growRow(slackX, grows, sizes)) slackX = 0;\n if (slackX < 0 && shrinkRow(slackX, shrinks, sizes)) slackX = 0;\n\n const [gapX, leadX] = getAlignmentSpacing(slackX, flexItems.length, flexJustify);\n const combinedGapX = gapX + flexGap;\n\n // Gather flex box vertical info\n const maxHeight = flexItems\n .map(({ height, marginTop = 0, marginBottom = 0 }) => (height ?? cellHeight) + marginTop + marginBottom)\n .reduce((a, b) => Math.max(a, b));\n\n const slackY = Math.max(0, cellHeight - maxHeight);\n const offsetY = getAlignmentAnchor(flexAlign) * slackY;\n\n // Resolve flex boxes\n let leftCursor = leadX;\n return flexItems.map((item, i) => {\n const {\n height: fixedHeight,\n marginLeft = 0,\n marginRight = 0,\n marginTop = 0,\n marginBottom = 0,\n flexAlignSelf = flexAlign,\n } = item;\n\n const marginX = marginLeft + marginRight;\n const marginY = marginTop + marginBottom;\n\n const height = fixedHeight ?? maxHeight - marginY;\n\n const slackSelfY = maxHeight - height - marginY;\n const offsetSelfY = getAlignmentAnchor(flexAlignSelf) * slackSelfY;\n\n const x = Math.round(cellLeft + marginLeft + leftCursor);\n const y = Math.round(cellTop + marginTop + offsetY + offsetSelfY);\n leftCursor += combinedGapX + marginX + sizes[i];\n\n const boxW = sizes[i];\n const boxH = height;\n const box: Rectangle = [\n [x, y],\n [x + boxW, y + boxH],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\nexport const resolveCellAbsoluteLayout = (\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { items } = cellContent;\n\n // Gather absolute items\n const absoluteItems = items.filter((item) => item.absolute);\n\n const resolvePosition = (\n container: number,\n size: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (start != null) return start + marginStart;\n if (end != null) return container - end - marginEnd - size;\n return 0;\n };\n\n const resolveSize = (\n container: number,\n span?: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (span != null) return span;\n if (start != null && end != null) return container - start - end - marginStart - marginEnd;\n return 0;\n };\n\n // Resolve absolute boxes\n return absoluteItems.map((item) => {\n const { left, top, right, bottom, width, height, marginLeft, marginTop, marginRight, marginBottom } = item;\n\n const w = resolveSize(cellWidth, width, left, right, marginLeft, marginRight);\n const h = resolveSize(cellHeight, height, top, bottom, marginTop, marginBottom);\n\n const l = cellLeft + resolvePosition(cellWidth, w, left, right, marginLeft, marginRight);\n const t = cellTop + resolvePosition(cellHeight, h, top, bottom, marginTop, marginBottom);\n\n const box: Rectangle = [\n [l, t],\n [l + w, t + h],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\n// Grow all applicable blocks in a row to add extra slack.\nexport const growRow = (slack: number, grow: number[], sizes: number[]) => {\n const n = grow.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (grow[i] > 0) weight += grow[i];\n\n if (weight > 0) {\n for (let i = 0; i < n; ++i) {\n if (grow[i] > 0) {\n sizes[i] += (slack * grow[i]) / weight;\n }\n }\n return true;\n }\n return false;\n};\n\n// Shrink all applicable blocks in a row to remove excess slack.\nexport const shrinkRow = (slack: number, shrink: number[], sizes: number[]): boolean => {\n const n = shrink.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (shrink[i]) weight += shrink[i] * sizes[i];\n\n if (weight > 0) {\n let negative = 0;\n for (let i = 0; i < n; ++i) {\n if (shrink[i] > 0 && sizes[i]) {\n sizes[i] += (slack * shrink[i] * sizes[i]) / weight;\n if (sizes[i] < 0) {\n negative += sizes[i];\n sizes[i] = 0;\n }\n }\n }\n if (negative) {\n shrinkRow(negative, shrink, sizes);\n }\n return true;\n }\n return false;\n};\n\n// Alignment to relative anchor position [0...1]\nexport const getAlignmentAnchor = (x: Anchor): number => {\n const isStart = x === 'start';\n const isEnd = x === 'end';\n\n const align = isStart ? 0 : isEnd ? 1 : 0.5;\n return align;\n};\n\n// Alignment/justification spacing and indent\nexport const getAlignmentSpacing = (slack: number, n: number, justify: Justify) => {\n let gap = 0;\n let lead = 0;\n\n const isJustify = justify === 'justify';\n const isBetween = justify === 'between';\n const isEvenly = justify === 'evenly';\n\n if (slack > 0) {\n if (isEvenly || isBetween || isJustify) {\n if (n === 1) {\n lead = slack / 2;\n } else if (isEvenly) {\n gap = Math.max(0, slack / (n + 1));\n lead = gap;\n } else if (isBetween) {\n gap = Math.max(0, slack / n);\n lead = gap / 2;\n } else if (isJustify) {\n gap = Math.max(0, slack / Math.max(1, n - 1));\n }\n } else {\n lead = getAlignmentAnchor(justify as Anchor) * slack;\n }\n }\n\n return [gap, lead];\n};\n","import LineBreak from 'linebreak';\nimport { getInlineAlignment } from './cell';\nimport { Align, Style } from './types';\n\nexport const wrapText = (\n context: CanvasRenderingContext2D,\n text: string | number,\n style: Required<Style>,\n itemAlign: Align | undefined,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n emit: (text: string, x: number, y: number) => void,\n) => {\n const { textAlign, lineHeight, fontSize, marginBottom } = style;\n\n const align = itemAlign ?? textAlign;\n context.textAlign = align;\n\n const x = xCoord + getInlineAlignment(cellWidth, 0, align);\n const y = yCoord;\n const s = text.toString();\n const n = s.length;\n\n let xCursor = 0;\n let yCursor = 0;\n let wordsPerLine = 0;\n let startOfLine = 0;\n const newline = (endOfLine: number, ellipsis: boolean = false, endsInSpace: boolean = false) => {\n const line = s.slice(startOfLine, endOfLine - +endsInSpace);\n emit(ellipsis ? line + '…' : line, x, y + yCursor);\n\n startOfLine = endOfLine;\n wordsPerLine = 0;\n xCursor = 0;\n yCursor += lineHeight;\n };\n\n const breaker = new LineBreak(s);\n\n let lastPosition = 0;\n let bk;\n while ((bk = breaker.nextBreak())) {\n const { position, required } = bk;\n const word = s.slice(lastPosition, position);\n\n const { width } = context.measureText(word);\n\n const canNewLine = yCursor + lineHeight + marginBottom < cellHeight;\n const hasMoreText = position < n;\n const endsInSpace = word[word.length - 1] === ' ';\n const ellipsisSpace = !canNewLine && hasMoreText ? (endsInSpace ? 0.5 : 1) * fontSize : 0;\n\n const nextX = xCursor + width + ellipsisSpace;\n if (wordsPerLine && nextX >= cellWidth) {\n if (canNewLine) newline(lastPosition);\n else {\n if (endsInSpace) {\n const { width } = context.measureText(' ');\n xCursor -= width;\n }\n newline(lastPosition, true, endsInSpace);\n return;\n }\n }\n\n xCursor += width;\n wordsPerLine++;\n\n if (required) newline(position);\n\n lastPosition = position;\n }\n\n newline(n);\n};\n","import { useCallback, useMemo } from 'react';\nimport { DEFAULT_COLUMN_HEADER_STYLE, DEFAULT_CELL_STYLE, SIZES } from './constants';\nimport { resolveCellFlexLayout } from './cell';\nimport { wrapText } from './text';\nimport {\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n CellContentType,\n Style,\n} from './types';\n\nexport const useAutoSizeColumn = (\n rows: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellLayout: CellLayout,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n canvasWidth: number,\n frozenColumns: 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 viewWidth = canvasWidth - cellLayout.columnToAbsolute(x < frozenColumns ? 0 : frozenColumns);\n\n const getWidth = (cellContent: Exclude<CellContentType, null>, style: Required<Style>) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const inlineMargin = style.marginLeft + style.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 totalWidth = inlineMargin;\n\n const { flexGap = 0, items } = cellContent;\n for (const item of items) {\n if (item.absolute) continue;\n\n if (item.width != null) {\n totalWidth += item.width;\n } else if (item.display === 'inline' && item.text != null) {\n const { width } = context.measureText(item.text.toString());\n totalWidth += width;\n }\n totalWidth += flexGap;\n }\n totalWidth -= flexGap;\n\n return totalWidth;\n }\n return 0;\n };\n\n let maxWidth = SIZES.minimumWidth;\n\n const headerStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) };\n const headerContent = columnHeaders(x, headerStyle);\n if (headerContent) {\n maxWidth = Math.max(maxWidth, getWidth(headerContent, headerStyle));\n }\n\n for (const y of rows) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n const cellContent = displayData(x, y, style);\n if (cellContent != null) {\n maxWidth = Math.max(maxWidth, getWidth(cellContent, style));\n }\n }\n\n return Math.ceil(Math.min(viewWidth, maxWidth));\n },\n [\n context,\n rows,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n frozenColumns,\n ],\n );\n\n return getAutoSizeWidth;\n};\n\nexport const useAutoSizeRow = (\n columns: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellLayout: CellLayout,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n cellWidth: RowOrColumnPropertyFunction<number>,\n canvasHeight: number,\n frozenRows: number,\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeHeight = useCallback(\n (y: number) => {\n if (!context) return 0;\n\n const viewHeight = canvasHeight - cellLayout.rowToAbsolute(y < frozenRows ? 0 : frozenRows);\n\n const measureTextHeight = (text: string, style: Required<Style>, columnWidth: number) => {\n let maxY = 0;\n const measureY = (_t: string, _x: number, y: number) => {\n maxY = y + style.lineHeight;\n };\n wrapText(context, text, style, undefined, 0, 0, columnWidth, viewHeight, measureY);\n return maxY;\n };\n\n const getHeight = (\n cellContent: Exclude<CellContentType, null>,\n style: Required<Style>,\n columnWidth: number,\n ) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const verticalMargin = style.marginTop + style.marginBottom;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const height = measureTextHeight(cellContent.toString(), style, columnWidth);\n return height + verticalMargin;\n } else if (typeof cellContent === 'object') {\n let maxHeight = 0;\n\n const flexLayout = resolveCellFlexLayout(context, cellContent, 0, 0, columnWidth, 0);\n\n for (const { box, item } of flexLayout) {\n if (item.height != null) {\n maxHeight = Math.max(maxHeight, item.height);\n } else if (item.display === 'inline' && item.text != null) {\n const [[left], [right]] = box;\n const height = measureTextHeight(item.text.toString(), style, right - left);\n maxHeight = Math.max(maxHeight, height);\n }\n }\n\n return maxHeight + verticalMargin;\n }\n return 0;\n };\n\n const isHeader = y === -1;\n let maxHeight = SIZES.minimumHeight;\n\n for (const x of columns) {\n const style = isHeader\n ? { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) }\n : { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n\n const cellContent = isHeader ? columnHeaders(x, style) : displayData(x, y, style);\n\n if (cellContent != null) {\n const columnWidth = cellWidth(x) - style.marginLeft - style.marginRight;\n maxHeight = Math.max(maxHeight, getHeight(cellContent, style, columnWidth));\n }\n }\n\n return Math.ceil(Math.min(viewHeight, maxHeight));\n },\n [\n context,\n columns,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n frozenRows,\n ],\n );\n\n return getAutoSizeHeight;\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import {\n ClipboardPayload,\n ClipboardRawTable,\n ClipboardTable,\n ClipboardTableCells,\n CellPropertyFunction,\n Change,\n Rectangle,\n} from './types';\nimport { useCallback, useLayoutEffect, useMemo, useState } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport {\n normalizeSelection,\n isMaybeRowSelection,\n isMaybeColumnSelection,\n isEmptySelection,\n addXY,\n subXY,\n mulXY,\n forSelectionRows,\n forSelectionColumns,\n} from './coordinate';\n\nconst NON_BREAKING_SPACE = ' ';\n\n// Type missing from TS <=4.3\ninterface ClipboardItem {\n readonly types: string[];\n readonly presentationStyle: 'unspecified' | 'inline' | 'attachment';\n getType(): Promise<Blob>;\n}\n\ndeclare var ClipboardItem: {\n prototype: ClipboardItem;\n new (itemData: any): ClipboardItem;\n};\n\nconst EMPTY_TABLE: ClipboardTable<any> = { rows: [] };\n\n// Access clipboard as HTML table + JSON payload.\n// Provide peek access to clipboard if permission granted.\n// Ask permission on first copy.\nexport const useClipboardTable = <T extends ClipboardTableCells>(clipboardOrigin: string) => {\n const [peek, setPeek] = useState<ClipboardTable<T> | null>();\n\n useLayoutEffect(() => {\n const softRefresh = async () => {\n try {\n const status = await navigator.permissions.query({ name: 'clipboard-read' as any });\n if (status.state !== 'granted') return;\n\n hardRefresh();\n } catch (e) {}\n };\n\n const hardRefresh = async () => {\n try {\n const pasted = await pasteClipboardTable<T>();\n if (pasted) {\n const peek = validateClipboardTable<T>(pasted, clipboardOrigin);\n setPeek(peek);\n } else {\n setPeek(EMPTY_TABLE);\n }\n } catch (e) {}\n };\n\n const delayedRefresh = () => setTimeout(hardRefresh);\n\n window.document.addEventListener('cut', delayedRefresh);\n window.document.addEventListener('copy', delayedRefresh);\n window.document.addEventListener('focus', softRefresh);\n\n softRefresh();\n\n return () => {\n window.document.removeEventListener('cut', delayedRefresh);\n window.document.removeEventListener('copy', delayedRefresh);\n window.document.removeEventListener('focus', softRefresh);\n };\n }, []);\n\n const canPaste = useCallback(\n // Peek may not be available, allow paste attempt.\n () => !!(peek == null || peek.rows?.length),\n [peek],\n );\n\n return {\n peek,\n canPaste,\n copyTable: ({ rows, ...rest }: ClipboardTable<T>) =>\n copyClipboardTable(rows, { origin: clipboardOrigin, ...rest }),\n pasteTable: async (): Promise<ClipboardTable<T> | null> => {\n const pasted = await pasteClipboardTable<T>();\n if (!pasted) return null;\n\n return validateClipboardTable<T>(pasted, clipboardOrigin);\n },\n };\n};\n\n// Sheet clipboard with payload-handler injected\nexport const useClipboardAPI = <T extends ClipboardTableCells = ClipboardTableCells>(\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<object | string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean>,\n addListener: boolean,\n\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Change[]) => void,\n onCopy?: (selection: Rectangle, cut: boolean) => ClipboardTable<T> | null | undefined,\n onPaste?: (\n selection: Rectangle,\n table?: ClipboardTable<T>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>,\n clipboardOrigin: string = '',\n) => {\n const { canPaste, copyTable, pasteTable } = useClipboardTable<T>(clipboardOrigin);\n\n const pasteIntoSelection = useCallback(\n async (selection: Rectangle, table: ClipboardTable<T>) => {\n const { rows, data } = table;\n\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n\n const left = Math.max(0, minX);\n const top = Math.max(0, minY);\n\n const width = rows.reduce((a, b) => Math.max(a, b.length), 0);\n const height = rows.length;\n\n const selectionSize = mulXY(addXY(subXY(max, min), [1, 1]), [1 / width, 1 / height]);\n const repeatX = Math.max(1, Math.floor(selectionSize[0]));\n const repeatY = Math.max(1, Math.floor(selectionSize[1]));\n\n const newSelection: Rectangle = [min, addXY(min, [width * repeatX - 1, height * repeatY - 1])];\n\n const shouldPaste = await onPaste?.(newSelection, table);\n if (shouldPaste !== false) {\n const changes = rows\n .flatMap((row, j) =>\n row.flatMap((value, i) => {\n const cells: Change[] = [];\n for (let rx = 0; rx < repeatX; ++rx) {\n for (let ry = 0; ry < repeatY; ++ry) {\n const x = left + i + rx * width;\n const y = top + j + ry * height;\n const v = data?.cells?.[j]?.[i];\n if (!cellReadOnly?.(x, y)) cells.push({ x, y, value, data: v });\n }\n }\n return cells;\n }),\n )\n .filter((change) => !!change) as Change[];\n\n onChange?.(changes);\n onSelectionChange?.(newSelection);\n }\n },\n [onChange, onSelectionChange, cellReadOnly],\n );\n\n // Imperative API\n const copySelection = useCallback(\n async (selection: Rectangle, cut: boolean = false) => {\n const table =\n onCopy?.(selection, cut) ??\n (formatSelectionAsRows(selection, editData, sourceData) as ClipboardTable<T>);\n copyTable(table);\n\n if (table?.cut ?? cut) {\n const changes: Change[] = [];\n forSelectionRows(selection)((y: number) => {\n forSelectionColumns(selection)((x: number) => {\n if (!cellReadOnly?.(x, y)) {\n const change = { x, y, value: '', data: null };\n changes.push(change);\n }\n });\n });\n onChange?.(changes);\n }\n },\n [onCopy, onChange, cellReadOnly],\n );\n\n const pasteSelection = useCallback(\n async (selection: Rectangle) => {\n const table = await pasteTable();\n if (table) pasteIntoSelection(selection, table);\n },\n [pasteIntoSelection],\n );\n\n // Event handlers\n const onClipboardCopy = (cut: boolean) => {\n if (isEmptySelection(selection)) return;\n return copySelection(selection, cut);\n };\n\n const onClipboardPaste = async (e: any) => {\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const parsed = await parseClipboardTable<T>(clipboardData);\n if (parsed) {\n const table = validateClipboardTable<T>(parsed, clipboardOrigin);\n if (table) pasteIntoSelection(selection, table);\n }\n };\n\n useLayoutEffect(() => {\n if (!addListener) return;\n\n // Use onpaste event when we can because it has more browser support\n window.document.addEventListener('paste', onClipboardPaste);\n return () => {\n window.document.removeEventListener('paste', onClipboardPaste);\n };\n });\n\n const clipboardApi = useMemo(\n () => ({\n copySelection,\n pasteSelection,\n canPasteSelection: canPaste,\n }),\n [copySelection, pasteSelection, canPaste],\n );\n\n return { clipboardApi, onClipboardCopy, onClipboardPaste };\n};\n\nconst validateClipboardTable = <T extends ClipboardTableCells>(\n parsed: ClipboardRawTable<T>,\n clipboardOrigin: string,\n): ClipboardTable<T> => {\n const { rows, payload } = parsed;\n if (!payload) return { rows };\n\n const { origin, ...rest } = payload;\n if (origin === clipboardOrigin) return { rows, ...rest };\n return { rows };\n};\n\nconst copyClipboardTable = async (rows: string[][], payload?: ClipboardPayload<any> | null) => {\n const text = formatRowsAsTSV(rows);\n const html = formatRowsAsHTML(rows, payload ?? undefined);\n\n await (navigator.clipboard as any).write([\n new ClipboardItem({\n 'text/html': new Blob([html], { type: 'text/html' }),\n 'text/plain': new Blob([text], { type: 'text/plain' }),\n }),\n ]);\n\n const event = new Event('copy');\n document.dispatchEvent(event);\n};\n\nconst pasteClipboardTable = async <T extends ClipboardTableCells>(): Promise<ClipboardTable<T> | null> => {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (!item) return null;\n\n return await parseClipboardTable(item);\n};\n\nconst parseClipboardTable = async <T extends ClipboardTableCells>(\n item: ClipboardItem | DataTransfer,\n): Promise<ClipboardRawTable<T> | null> => {\n // Work with both clipboard API (ClipboardItem) and onpaste event (DataTransfer)\n const has = (type: string) => {\n return item.types.includes(type);\n };\n\n const get = (type: string) => {\n if ('getData' in item) return item.getData(type);\n else if ('getType' in item) return (item as any).getType(type).then((blob: Blob) => blob.text());\n return '';\n };\n\n let rows, payload;\n if (has('text/html')) {\n const pastedHtml = await get('text/html');\n ({ rows, payload } = parsePastedHtml(pastedHtml));\n } else if (has('text/plain')) {\n const text = await get('text/plain');\n rows = parsePastedText(text);\n }\n if (!rows) return { rows: [] };\n\n return { rows, payload };\n};\n\nconst formatRowsAsTSV = (rows: string[][]) => rows.map((row) => row.join('\\t')).join('\\n');\n\nconst formatRowsAsHTML = (rows: string[][], payload?: ClipboardPayload<any>) => {\n const trs = rows\n .map((row) => {\n const tds = row\n .map(formatTextAsHTML)\n .map(\n (cell) =>\n `<td>${cell.replaceAll(/ +/g, (x) => ' ' + NON_BREAKING_SPACE.repeat(x.length - 1))}</td>`,\n );\n return tds.join('');\n })\n .map((row) => `<tr>${row}</tr>`)\n .join('\\n');\n\n const table = `<table>${trs}</table>`;\n\n if (payload) {\n const extra = `<SheetHappens payload=\"${formatTextAsHTML(JSON.stringify(payload))}\"></SheetHappens>`;\n return extra + table;\n }\n\n return table;\n};\n\nconst formatTextAsHTML = (s: string) => s?.toString().replace(/[&\"'<>]/g, (i) => `&#${i.charCodeAt(0)};`) ?? '';\n\nconst formatSelectionAsRows = (\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<object | string | number | null>,\n): ClipboardTable => {\n if (isEmptySelection(selection)) return { rows: [] };\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 texts: string[][] = [];\n const datas: Record<string, Record<string, any>> = {};\n\n for (let y = minY; y <= maxY; y++) {\n const textRow: string[] = [];\n const dataRow: Record<string, any> = {};\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y) ?? '';\n const data = sourceData(x, y) ?? null;\n dataRow[textRow.length] = data;\n textRow.push(value);\n }\n\n datas[texts.length] = dataRow;\n texts.push(textRow);\n }\n\n return { rows: texts, data: { cells: datas } };\n};\n\nconst findTag = (element: any, tagName: string): any => {\n for (const child of element.children) {\n if (child.nodeName === tagName) {\n return child;\n }\n const maybeTag = findTag(child, tagName);\n if (maybeTag) {\n return maybeTag;\n }\n }\n};\n\nconst parsePastedHtml = (\n html: string,\n): {\n rows: string[][];\n payload: any;\n} => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const rows = [];\n let payload: any = undefined;\n\n const sheetNode = findTag(div, 'SHEETHAPPENS');\n if (sheetNode) {\n const json = sheetNode.getAttribute('payload');\n try {\n payload = JSON.parse(json);\n if (!payload || typeof payload !== 'object') payload = null;\n } catch (e) {}\n }\n\n const tableNode = findTag(div, 'TABLE');\n const spanNode = findTag(div, 'SPAN');\n\n if (tableNode) {\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n if (tr.nodeName === 'TR') {\n const row = [];\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(/[\\r\\n\\t ]+/g, ' ');\n str = str.replaceAll(NON_BREAKING_SPACE, ' ');\n\n row.push(str);\n }\n }\n rows.push(row);\n }\n }\n }\n }\n } else if (spanNode) {\n let str: string = '';\n\n str = spanNode.textContent.trim();\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n\n rows.push([str]);\n }\n\n return {\n rows,\n payload,\n };\n};\n\nconst parsePastedText = (text: string): string[][] => {\n return text.split(/\\r?\\n/).map((line) => line.split('\\t'));\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 offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache,\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => columns.getStart(0);\n const getIndentY = () => rows.getStart(0);\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 = columns.getSize(column);\n\n return getIndentX() + 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 = rows.getSize(row);\n\n return getIndentY() + 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 = (pixel: number, anchor: number, freeze: number, offset: number, layout: LayoutCache) => {\n const { getStart, lookupIndex } = layout;\n\n const indent = getStart(0);\n if (pixel < indent) return 0;\n\n const frozen = getStart(freeze);\n if (pixel < frozen) {\n return lookupIndex(pixel, anchor);\n } else {\n const relative = pixel - indent;\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, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) => pixelToIndex(pixelY, anchorY, 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, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const { getStart, getEnd } = layout;\n\n const frozen = getEnd(freeze - 1);\n const notFrozen = getStart(offset + freeze);\n\n const relative = view - frozen;\n for (let i = offset + freeze; getStart(i) - notFrozen <= 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, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, 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] = sizer(-1)\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, sizer(-1));\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return sizer(i);\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() || -1;\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 CellContentRender,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n ImageRenderer,\n InternalSheetStyle,\n Rectangle,\n Selection,\n Style,\n CellContentType,\n VisibleLayout,\n XY,\n} from './types';\nimport { resolveCellFlexLayout, resolveCellAbsoluteLayout } from './cell';\nimport { normalizeSelection, isEmptySelection, isColumnSelection, isRowSelection } from './coordinate';\nimport { wrapText } from './text';\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 imageRenderer: ImageRenderer,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n isFocused: boolean,\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: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyStyledFunction<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): CellContentRender[] => {\n const { canvas } = context;\n const { width, height } = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\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 allClickables: CellContentRender[] = [];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\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, 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, indentX, 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, indentX, 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, indentY);\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, indentY);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? indentX : context.canvas.width;\n const gridBottom = hideGridlines ? indentY : 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(indentX, context.canvas.height);\n drawGridLineY(indentY, 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 resolvedStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...style };\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n const clickables = renderCell(\n context,\n imageRenderer,\n content,\n resolvedStyle,\n 0,\n top,\n indentX,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n\n for (const column of columns) {\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 ...DEFAULT_COLUMN_HEADER_STYLE,\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n const content = columnHeaders(column, style) ?? excelHeaderString(column + 1);\n\n const clickables = renderCell(context, imageRenderer, content, style, left, 0, right - left, indentY);\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n context.globalAlpha = isFocused ? 1 : 0.5;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(left, top, right - left - 1, bottom - top - 1);\n\n context.globalAlpha = 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, 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 = 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 = 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 style = {\n ...DEFAULT_CELL_STYLE,\n ...cellStyle(x, y),\n };\n const cellContent = displayData(x, y, style);\n if (cellContent !== null && cellContent !== undefined) {\n const clickables = renderCell(\n context,\n imageRenderer,\n cellContent,\n style,\n left,\n top,\n right - left,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n }\n\n return allClickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n imageRenderer: ImageRenderer,\n cellContent: CellContentType,\n style: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] | null => {\n if (cellContent === null) {\n return null;\n }\n\n const fillText = context.fillText.bind(context);\n const fontString = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n context.font = fontString;\n context.fillStyle = style.color;\n\n // Apply cell margins\n const { marginTop, marginBottom, marginLeft, marginRight, lineHeight } = style;\n\n const innerX = Math.round(xCoord + marginLeft);\n const innerY = Math.round(yCoord + marginTop);\n const innerWidth = Math.round(cellWidth - marginRight - marginLeft);\n const innerHeight = Math.round(cellHeight - marginTop - marginBottom);\n\n // Snap to device-pixels for better alignment\n const middleY = roundDpi(yCoord + marginTop + lineHeight / 2);\n\n if (style.backgroundColor !== '') {\n context.fillStyle = style.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = style.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n wrapText(context, cellContent, style, undefined, innerX, middleY, innerWidth, innerHeight, fillText);\n });\n return null;\n } else if (typeof cellContent === 'object') {\n const renderedFlex = resolveCellFlexLayout(context, cellContent, innerX, innerY, innerWidth, innerHeight);\n const renderedAbsolute = resolveCellAbsoluteLayout(cellContent, innerX, innerY, innerWidth, innerHeight);\n const rendered = [...renderedFlex, ...renderedAbsolute];\n\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n for (const [i, render] of rendered.entries()) {\n const { box, item } = render;\n\n const [[left, top], [right, bottom]] = box;\n\n const width = right - left;\n const height = bottom - top;\n\n if (cellContent.inspect) {\n context.lineWidth = 1;\n context.strokeStyle = '#ff00ff';\n context.strokeRect(left + 0.5, top + 0.5, width - 0.5, height - 0.5);\n }\n\n const clipLeft = i > 0 ? left : xCoord;\n const clipRight = i < rendered.length ? right : yCoord + cellWidth;\n const clipWidth = clipRight - clipLeft;\n\n clipToBox(context, clipLeft, yCoord, clipWidth, cellHeight, () => {\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n wrapText(\n context,\n text,\n style,\n item.textAlign,\n left,\n roundDpi(top + lineHeight / 2),\n width,\n height,\n fillText,\n );\n }\n }\n if (item.display === 'image' || item.display === 'icon') {\n imageRenderer(context, item, style, box);\n }\n });\n }\n });\n\n return rendered.filter(({ item }) => item?.onClick);\n }\n return null;\n};\n\nconst clipToBox = (\n context: CanvasRenderingContext2D,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n callback: () => void,\n) => {\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n callback();\n context.restore();\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 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 [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 fixed indent\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\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 = frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = 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 }\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\n// Move down half a logical pixel on high-dpi\nexport const getDpiNudge = () => {\n const { devicePixelRatio } = window;\n return (devicePixelRatio - 1) / devicePixelRatio;\n};\n\n// Round to device pixels instead of logical pixels, and nudge downwards on high-dpi for baseline alignment\nexport const roundDpi = (y: number) => {\n const { devicePixelRatio } = window;\n return Math.round((y + getDpiNudge()) * devicePixelRatio) / devicePixelRatio;\n};\n","import { InternalSheetStyle, SheetStyle } 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 shadowBlur: sheetStyle?.shadowBlur ?? SIZES.shadowBlur,\n shadowOpacity: sheetStyle?.shadowOpacity ?? SIZES.shadowOpacity,\n shadowColor: sheetStyle?.shadowColor ?? COLORS.shadowColor,\n };\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellContentRender,\n CellLayout,\n CellProperty,\n CellPropertyStyled,\n CellContentType,\n ClipboardTable,\n RowOrColumnPropertyStyled,\n RowOrColumnProperty,\n Selection,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n VisibleLayout,\n} from './types';\n\nimport {\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 isSameRectangle,\n mapSelectionColumns,\n mapSelectionRows,\n addXY,\n} from './coordinate';\nimport { useImageRenderer } from './image';\nimport { useMouse } from './mouse';\nimport { useKeyboard } from './keyboard';\nimport { useScroll, scrollToCell, clipDataOffset, updateScrollPosition } from './scroll';\nimport { useAutoSizeColumn, useAutoSizeRow } from './autosize';\nimport { useClipboardAPI } from './clipboard';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createCellStyledProp, createRowOrColumnProp, createRowOrColumnStyledProp } from './props';\nimport { renderSheet, getDpiNudge } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string;\n autoFocus: boolean;\n onKeyDown: KeyboardEventHandler<HTMLElement>;\n onChange: (value: object | string | number | null) => 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?: RowOrColumnPropertyStyled<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<object | string | number | null>;\n displayData?: CellPropertyStyled<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 autoFocus?: boolean;\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell: (value?: object | 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[], values: number[]) => void;\n onCellHeightChange?: (indices: number[], values: number[]) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n onScrollAction?: () => void;\n\n onCopy?: (selection: Rectangle, cut: boolean) => ClipboardTable<any> | null | undefined;\n onPaste?: (\n selection: Rectangle,\n table: ClipboardTable<any>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>;\n clipboardOrigin?: string;\n};\n\nexport type SheetRef = CellLayout & {\n startEditingCell: (editCell: XY, arrowKeyCommitMode?: boolean) => void;\n copySelection: (selection: Rectangle, cut?: boolean) => Promise<void>;\n pasteSelection: (selection: Rectangle) => Promise<void>;\n canPasteSelection: () => boolean;\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 [rawSelection, setRawSelection] = 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 [focused, setFocused] = useState(!!props.autoFocus);\n\n const [lastSelectionProp, setLastSelectionProp] = useState<Rectangle>(selectionProp);\n if (lastSelectionProp !== selectionProp) {\n setLastSelectionProp(selectionProp);\n setRawSelection(selectionProp);\n }\n\n const [editValue, setEditValue] = useState<string | null>('');\n const [sourceValue, setSourceValue] = useState<object | string | number | null>(null);\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(() => createRowOrColumnStyledProp(props.columnHeaders, null), [props.columnHeaders]);\n const columnHeaderStyle = useMemo(\n () => 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(() => createCellStyledProp(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 selection = useMemo(() => validateSelection(rawSelection), [rawSelection]);\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 } = sheetStyle;\n const cellLayout = useMemo(\n () => makeCellLayout([freezeColumns, freezeRows], dataOffset, columnLayout, rowLayout),\n [freezeColumns, freezeRows, 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 (!isSameRectangle(selection, newSelection)) {\n setRawSelection(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(validateSelection(newSelection));\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const cancelEditingCell = () => {\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const commitEditingCell = (value?: object | string | number | null) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n\n const hasData = !!input;\n const v = hasData ? null : (value as string | number | null);\n const d = hasData ? value : null;\n\n props.onChange([\n {\n x: cellX,\n y: cellY,\n value: value !== undefined ? v : editValue,\n data: value !== undefined ? d : sourceValue,\n },\n ]);\n }\n setEditCell(NO_CELL);\n setFocused(true);\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 hasCustomComponent = !!props.inputComponent?.(cellX, cellY, { ...inputProps, onChange: () => {} }, () => {});\n\n const editValue = editData(cellX, cellY) ?? '';\n const sourceValue = sourceData(cellX, cellY) ?? null;\n\n // `editValue` and `sourceValue` are a pair representing one edit; both must be\n // (re)set on each start, otherwise the unset slot keeps its value from the\n // previous edit and gets emitted by `commitEditingCell` as if it belonged to\n // this one.\n if (hasCustomComponent) {\n setEditValue(null);\n setSourceValue(sourceValue);\n } else {\n setEditValue(editValue);\n setSourceValue(null);\n }\n\n setEditCell(editCell);\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 { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const newOffset = clipDataOffset(view, dataOffset, freeze, [maxColumns, maxRows], cellLayout);\n setDataOffset(newOffset);\n updateScrollPosition(overlay, newOffset, cellLayout);\n\n // Only fire if extents change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [maxRows, maxColumns]);\n\n // If selection prop changes, adjust scroll position\n useLayoutEffect(() => {\n scrollToSelection(selectionProp, true);\n }, [selectionProp]);\n\n // Output from rendered layout is used to drive events on user content\n const hitmapRef = useRef<CellContentRender[]>(NO_CLICKABLES);\n\n // Detect focus on canvas\n const isFocused = focused || editMode;\n\n const { clipboardApi, onClipboardCopy } = useClipboardAPI(\n selection,\n editData,\n sourceData,\n cellReadOnly,\n isFocused && !editMode,\n changeSelection,\n props.onChange,\n props.onCopy,\n props.onPaste,\n props.clipboardOrigin ?? location.origin,\n );\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll, props.onScrollAction);\n\n const getAutoSizeWidth = useAutoSizeColumn(\n visibleCells.rows,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n freezeColumns,\n );\n\n const getAutoSizeHeight = useAutoSizeRow(\n visibleCells.columns,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n freezeRows,\n );\n\n const { mouseHandlers, knobPosition } = useMouse(\n overlayRef,\n dataOffset,\n\n hitmapRef,\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellReadOnly,\n maxColumns,\n maxRows,\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 getAutoSizeHeight,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragIndices,\n setDragOffset,\n setDropTarget,\n changeSelection,\n setFocused,\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 const { onInputKeyDown, onGridKeyDown, onGridFocus, onGridBlur } = useKeyboard(\n arrowKeyCommitMode,\n overlayRef,\n cellReadOnly,\n displayData,\n editCell,\n editMode,\n focused,\n rawSelection,\n selection,\n\n startEditingCell,\n commitEditingCell,\n cancelEditingCell,\n changeSelection,\n setFocused,\n onClipboardCopy,\n\n props.onChange,\n );\n\n const imageRenderer = useImageRenderer();\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 imageRenderer,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\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 isFocused,\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 [lastEditKey, setLastEditKey] = useState('');\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextAlign: 'right' | 'left' | 'center' = 'right';\n let editTextLineHeight = '';\n let editTextMargin = '';\n let editTextFontSize = DEFAULT_CELL_STYLE.fontSize;\n let editTextFontFamily = DEFAULT_CELL_STYLE.fontFamily;\n let editTextFontWeight = DEFAULT_CELL_STYLE.fontWeight;\n if (editMode) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(...editCell) };\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextAlign = style.textAlign;\n editTextLineHeight = `${style.lineHeight}px`;\n editTextFontSize = style.fontSize;\n editTextFontFamily = style.fontFamily;\n editTextFontWeight = style.fontWeight;\n\n // Deduct border + apply high-dpi nudge to line up with render\n const yNudge = getDpiNudge();\n editTextMargin = `${style.marginTop - 1 + yNudge}px ${style.marginRight - 2}px ${style.marginBottom - 2}px ${style.marginLeft - 1}px`;\n\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: onInputKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: editTextMargin,\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextAlign,\n lineHeight: editTextLineHeight,\n color: 'black',\n fontSize: editTextFontSize,\n fontFamily: editTextFontFamily,\n fontWeight: editTextFontWeight,\n resize: 'none',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setSourceValue } 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 outline: 0,\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(\n () => props.renderInside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderInside, visibleCells, cellLayout, selection, editMode],\n );\n\n const renderedOutside = useMemo(\n () => props.renderOutside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderOutside, visibleCells, cellLayout, selection, editMode],\n );\n\n // External component API\n useImperativeHandle(\n ref,\n () => ({\n ...cellLayout,\n ...clipboardApi,\n startEditingCell,\n }),\n [cellLayout, clipboardApi, 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 onKeyDown={onGridKeyDown}\n onFocus={onGridFocus}\n onBlur={onGridBlur}\n tabIndex={0}\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 {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <textarea\n {...inputProps}\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","NEG_NEG","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","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","lineHeight","marginTop","marginBottom","marginLeft","marginRight","color","fontFamily","fontWeight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","HEADER_GROUP_SELECTED_STYLE","ARROW_KEYS","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","seq","n","s","d","Array","from","length","map","_","i","isInRange","x","min","max","isInRangeLeft","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","Math","minXY","getDirectionStep","direction","isSameXY","isSameRectangle","a1","a2","b1","b2","isPointInsideRectangle","rectangle","point","_rectangle$","left","top","_rectangle$2","right","bottom","y","forRange","callback","forSelectionColumns","selection","_normalizeSelection","normalizeSelection","_normalizeSelection$","_normalizeSelection$2","forSelectionRows","_normalizeSelection2","_normalizeSelection2$","_normalizeSelection2$2","forToMap","forLoop","out","push","apply","arguments","mapSelectionColumns","mapSelectionRows","isMaybeRowSelection","_selection$","_selection$2","isMaybeColumnSelection","_selection$3","_selection$4","isRowSelection","_selection$5","_selection$6","isColumnSelection","_selection$7","_selection$8","isCellSelection","_selection$9","_selection$10","isEmptySelection","_selection$11","_selection$12","isPointInsideSelection","_normalizeSelection3","_normalizeSelection3$","_normalizeSelection3$2","validateSelection","anchor","head","slice","orientSelection","normalized","to","_normalized$","_normalized$2","ax","ay","hx","hy","swapX","swapY","DEFAULT_ICON_SIZE","svgToImage","icon","image","Image","iconAsString","renderToString","base64String","window","btoa","src","err","console","log","useImageRenderer","_useState","useState","setVersion","_useState2","canvasWidth","setCanvasWidth","_useState3","canvasHeight","setCanvasHeight","imageMap","useMemo","Map","loadImage","useCallback","get","set","dpi","devicePixelRatio","iconContext","canvas","document","createElement","width","height","context","getContext","willReadFrequently","renderContext","item","style","box","display","complete","onload","v","w","h","_box$","_box$2","drawImage","_item$color","rgba","toRGBA","_rgba$","r","_rgba$2","g","_rgba$3","_rgba$4","wDpi","hDpi","clearRect","imageData","getImageData","data","putImageData","e","error","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","createRowOrColumnStyledProp","createCellStyledProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","floor","xx","findInDisplayData","displayData","step","cell","_addXY","firstFilled","_cell","cellX","cellY","maxX","maxY","_cell2","useMouse","elementRef","dataOffset","hitmapRef","editMode","sourceData","cellReadOnly","maxColumns","maxRows","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","columnGroupKeys","rowGroupKeys","selectedColumnGroups","selectedRowGroups","getAutoSizeWidth","getAutoSizeHeight","onEdit","onCommit","onKnobAreaChange","onDragIndicesChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onFocusChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","dontChangeSelectionOnOrderChange","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","_useState4","rowDrag","setRowDrag","_useState5","hitTestDown","setHitTestDown","_useState6","autoScroll","setAutoScroll","_useState7","draggingKnob","setDraggingKnob","_useState8","draggingSelection","setDraggingSelection","_useState9","draggingRowSelection","setDraggingRowSelection","_useState10","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","refState","ref","useRef","current","getMousePosition","strict","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","clientWidth","clientHeight","getMouseOutOfBounds","allowX","allowY","indentX","getIndentX","indentY","getIndentY","xSign","ySign","getMouseHit","hitmap","_iterator","_createForOfIteratorHelperLoose","_step","done","object","value","onPointerLeave","body","cursor","onPointerDown","_ref$current","_ref$current$cellLayo","columnToPixel","rowToPixel","pixelToCell","_ref$current$visibleC","columns","rows","button","_e$target","_e$target$setPointerC","setPointerCapture","call","pointerId","hitTarget","minX","minY","selectedColumns","selectedRows","_iterator2","_step2","indices","Set","concat","filter","values","sort","dragIndices","clickSelection","_expandSelectionToRow","_expandSelectionToRow2","_expandSelectionToRow3","connected","dragStart","dragEnd","size","offset","_i","_arr","edge","abs","asGroup","_iterator3","_step3","_expandSelectionToRow4","_expandSelectionToRow5","_expandSelectionToRow6","_i2","_arr2","lastCol","Number","isFinite","lastRow","knobX","knobY","shiftKey","scrollTo","onPointerUp","_ref$current2","_ref$current2$cellLay","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","insideGroup","preceding","order","onPointerMove","_ref$current3","_ref$current3$cellLay","isDraggingX","isDraggingY","isDragging","outOfBounds","preventDefault","getDragScrollOffset","startOffset","_iterator4","_step4","_i3","_arr3","_iterator5","_step5","_i4","_arr4","_getDragScrollOffset","scrollOffset","newWidth","round","_getDragScrollOffset2","newHeight","anchorX","anchorY","headX","headY","_pixelToCell","_normalizeSelection4","_normalizeSelection4$","_normalizeSelection4$2","xCellDiff","yCellDiff","shift","_getDragScrollOffset3","_getDragScrollOffset4","onClick","mouseHit","_mouseHit$item","_mouseHit$item$onClic","onDoubleClick","_ref$current4","_ref$current4$cellLay","autosized","_iterator6","_step6","_normalizeSelection5","_normalizeSelection5$","_normalizeSelection5$2","_i5","_autosized","column","_i6","_arr5","_normalizeSelection6","_normalizeSelection6$","_normalizeSelection6$2","_i7","_autosized3","row","editCell","onContextMenu","_ref$current$cellLayo2","event","_extends","useLayoutEffect","loop","element","speed","scrollLeft","scrollTop","timer","setInterval","clearInterval","mouseHandlers","_normalizeSelection7","_normalizeSelection7$","kx1","ky1","_normalizeSelection7$2","kx2","ky2","_normalizeSelection8","_normalizeSelection8$","sx1","sy1","_normalizeSelection8$2","sx2","sy2","fx1","fy1","fx2","fy2","_findApproxMaxEditDat","srcY","source","_findApproxMaxEditDat2","srcX","useKeyboard","arrowKeyCommitMode","overlayRef","focused","rawSelection","onCancel","onClipboardCopy","onInputKeyDown","onGridKeyDown","metaKey","ctrlKey","String","fromCharCode","which","toLowerCase","x1","y1","x2","y2","keyCode","onGridFocus","onGridBlur","overlay","activeElement","activeTagName","tagName","contentEditable","focus","preventScroll","useScroll","maxScroll","onOffsetChange","onMaxScrollChange","onScrollAction","absoluteToCell","cellToAbsolute","_subXY","nudgeX","nudgeY","maxScrollX","maxScrollY","growX","growY","clipDataOffset","view","freeze","maxCells","newX","newY","freezeX","freezeY","absoluteToColumn","columnToAbsolute","absoluteToRow","rowToAbsolute","_getViewExtent","getViewExtent","_getViewExtent$edge","leftEdge","topEdge","_getViewExtent$viewpo","viewport","scrollW","scrollH","remainder","_cellToAbsolute","frozenX","frozenY","scrollToCell","offsetX","offsetY","origin","frozen","_cellToPixel","_cellToPixel2","newOffset","scroll","setTimeout","updateScrollPosition","_subXY2","scrollX","scrollY","getInlineAlignment","cellWidth","contentWidth","align","measureFlexWidth","text","_context$measureText","measureText","toString","actualBoundingBoxLeft","actualBoundingBoxRight","Error","resolveCellFlexLayout","cellContent","cellLeft","cellTop","cellHeight","_cellContent$flexJust","flexJustify","_cellContent$flexAlig","flexAlign","_cellContent$flexGap","flexGap","items","flexItems","absolute","measuredWidths","sizes","grows","shrinks","forEach","defaultGrow","defaultShrink","_item$width","_item$flexGrow","flexGrow","_item$flexShrink","flexShrink","_item$marginLeft","_item$marginRight","slackX","growRow","shrinkRow","_getAlignmentSpacing","getAlignmentSpacing","gapX","leadX","combinedGapX","maxHeight","_ref","_ref$marginTop","_ref$marginBottom","reduce","slackY","getAlignmentAnchor","leftCursor","fixedHeight","_item$marginLeft2","_item$marginRight2","_item$marginTop","_item$marginBottom","_item$flexAlignSelf","flexAlignSelf","marginX","marginY","slackSelfY","offsetSelfY","boxW","boxH","resolveCellAbsoluteLayout","absoluteItems","resolvePosition","container","marginStart","marginEnd","resolveSize","span","l","t","slack","grow","weight","shrink","negative","isStart","isEnd","justify","gap","lead","isJustify","isBetween","isEvenly","wrapText","itemAlign","xCoord","yCoord","emit","xCursor","yCursor","wordsPerLine","startOfLine","newline","endOfLine","ellipsis","endsInSpace","line","breaker","LineBreak","lastPosition","bk","nextBreak","_bk","position","required","word","canNewLine","hasMoreText","ellipsisSpace","nextX","_context$measureText2","useAutoSizeColumn","cellStyle","columnHeaders","columnHeaderStyle","frozenColumns","viewWidth","getWidth","font","inlineMargin","totalWidth","maxWidth","headerStyle","headerContent","ceil","useAutoSizeRow","frozenRows","viewHeight","measureTextHeight","columnWidth","measureY","_t","_x","getHeight","verticalMargin","flexLayout","_step3$value","isHeader","NON_BREAKING_SPACE","EMPTY_TABLE","useClipboardTable","clipboardOrigin","peek","setPeek","softRefresh","Promise","resolve","navigator","permissions","query","name","then","status","state","hardRefresh","pasteClipboardTable","pasted","validateClipboardTable","_temp","reject","delayedRefresh","addEventListener","removeEventListener","canPaste","_peek$rows","copyTable","rest","_objectWithoutPropertiesLoose","_excluded","copyClipboardTable","pasteTable","useClipboardAPI","addListener","onCopy","onPaste","_useClipboardTable","pasteIntoSelection","table","selectionSize","repeatX","repeatY","newSelection","shouldPaste","flatMap","j","cells","rx","ry","_data$cells","_data$cells$j","change","copySelection","cut","_onCopy","formatSelectionAsRows","_table$cut","pasteSelection","onClipboardPaste","clipboardData","parseClipboardTable","parsed","clipboardApi","canPasteSelection","payload","_excluded2","formatRowsAsTSV","html","formatRowsAsHTML","clipboard","write","ClipboardItem","Blob","type","Event","dispatchEvent","read","types","includes","getData","getType","blob","_temp3","pastedHtml","_parsePastedHtml","parsePastedHtml","_temp5","parsePastedText","_temp4","join","trs","tds","formatTextAsHTML","replaceAll","repeat","extra","JSON","stringify","_s$toString$replace","replace","charCodeAt","texts","datas","textRow","dataRow","_editData","_sourceData","findTag","children","child","nodeName","maybeTag","div","innerHTML","trim","sheetNode","json","getAttribute","parse","tableNode","spanNode","tableChild","tr","td","str","p","textContent","split","INITIAL_SIZE","makeCellLayout","getStart","getBaseOriginFor","base","relative","adjust","getSize","_anchor","_anchor2","pixelToIndex","pixel","layout","lookupIndex","indent","pixelX","pixelY","_anchor3","absoluteToIndex","_anchor4","getVisibleIndices","getEnd","notFrozen","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","getOffset","tail","last","mid","clearAfter","truncate","setSizer","initialSize","used","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","getTail","setValue","getValue","hasValue","renderSheet","imageRenderer","secondarySelections","isFocused","dragOffset","hideGridlines","freezeColumns","freezeRows","allClickables","resizeCanvas","fillStyle","fillRect","_iterator10","_step10","_cellStyle","selectionActive","rowSelectionActive","columnSelectionActive","_resolveFrozenSelecti","resolveFrozenSelection","selected","hideKnob","_selected$","_selected$2","_selected$3","_selected$4","_selected$5","_selected$6","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","content","isActive","groupKey","isInRowGroup","isSelfSelected","isGroupSelected","resolvedStyle","clickables","renderCell","_columnHeaders","isInColumnGroup","isSelected","selectedStyle","activeStyle","excelHeaderString","globalAlpha","_selected$7","_selected$8","strokeRect","secondarySelection","_resolveFrozenSelecti2","_selected$9","_selected$10","setLineDash","shiftX","shiftY","dragColumns","dragRows","_iterator7","_step7","_iterator8","_step8","_resolveSelection","resolveSelection","_resolveSelection$","_resolveSelection$2","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","_iterator9","_step9","_iterator11","_step11","fillText","bind","fontString","innerX","innerY","innerWidth","innerHeight","middleY","roundDpi","clipToBox","renderedFlex","renderedAbsolute","rendered","_step12$value","_step12","render","inspect","clipLeft","clipRight","clipWidth","_iterator12","entries","_loop","save","clip","restore","_cellToPixel3","_cellToPixel4","lastInvisibleX","lastInvisibleY","_canvas$getBoundingCl","_window","_window$devicePixelRa","ratio","newCanvasWidth","newCanvasHeight","scale","num","rgb","opacity","hex","ease","sin","PI","pow","f","addColorStop","getDpiNudge","_window2","_window3","resolveSheetStyle","hideScrollBars","_sheetStyle$shadowBlu","_sheetStyle$shadowOpa","_sheetStyle$shadowCol","Sheet","forwardRef","props","canvasRef","setMaxScroll","setDataOffset","selectionProp","_props$selection","setRawSelection","setKnobArea","setDragOffset","setDragIndices","setDropTarget","setEditCell","autoFocus","setFocused","lastSelectionProp","setLastSelectionProp","_useState11","editValue","setEditValue","_useState12","sourceValue","setSourceValue","_useState13","setArrowKeyCommitMode","_useResizeObserver","useResizeObserver","_useResizeObserver$wi","_useResizeObserver$he","readOnly","editKeys","_props$secondarySelec","editCellX","editCellY","shouldCacheLayout","_props$cacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","scrollToSelection","toHead","changeSelection","onSelectionChanged","cancelEditingCell","commitEditingCell","hasData","input","startEditingCell","hasCustomComponent","_props$inputComponent","inputComponent","inputProps","setLastEditKey","_props$maxColumns","Infinity","_props$maxRows","_useClipboardAPI","_props$clipboardOrigi","location","onScroll","_useMouse","_useKeyboard","animationFrameId","requestAnimationFrame","cancelAnimationFrame","_useState14","lastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextAlign","editTextLineHeight","editTextMargin","editTextFontSize","editTextFontFamily","editTextFontWeight","yNudge","editKey","_editTextPosition","textX","textY","onKeyDown","padding","outline","border","resize","_props$inputComponent2","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","renderedInside","_props$renderInside","renderInside","renderedOutside","_props$renderOutside","renderOutside","useImperativeHandle","React","onFocus","onBlur","tabIndex","className","pointerEvents","select"],"mappings":"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"}