sheet-happens 0.0.22 → 0.0.24

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/index.tsx"],"sourcesContent":["import styles from './styles.module.css';\nimport React, {\n useRef,\n useEffect,\n useState,\n useMemo,\n MouseEvent,\n KeyboardEvent,\n UIEvent,\n CSSProperties,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nconst selBorderColor = '#1b73e7';\nconst selBackColor = '#e9f0fd';\nconst knobSize = 6;\nconst gridColor = '#e2e3e3';\nconst knobAreaBorderColor = '#707070';\nconst kRowHeaderWidth = 50;\nconst rowHeaderBackgroundColor = '#f8f9fa';\nconst rowHeaderTextColor = '#666666';\nconst rowHeaderSelectedBackgroundColor = '#e8eaed';\nconst kColumnHeaderHeight = 22;\nconst columnHeaderBackgroundColor = rowHeaderBackgroundColor;\nconst columnHeaderSelectedBackgroundColor = rowHeaderSelectedBackgroundColor;\nconst xBinSize = 10;\nconst yBinSize = 10;\nconst scrollSpeed = 30;\nconst resizeColumnRowMouseThreshold = 4;\nconst minimumColumnWidth = 50;\nconst minimumRowHeight = 22;\nconst rowColHeaderSelectionColor = '#cccccc';\nconst maxSearchableRowOrCol = 65536;\n\nconst defaultCellStyle: Required<Style> = {\n textAlign: 'left',\n fontSize: 13,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nconst defaultColumnHeaderStyle: Required<Style> = {\n textAlign: 'center',\n fontSize: 13,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\ntype PropTypes = string | number | boolean | Style | CellContentType;\ntype RowOrColumnProperty<T extends PropTypes> = T | Array<T> | ((index: number) => T);\ntype CellProperty<T extends PropTypes> = T | Array<Array<T>> | ((x: number, y: number) => T);\ntype CellContentType = null | number | string | CellContent;\ntype RowOrColumnPropertyFunction<T extends PropTypes> = (rowOrColIndex: number) => T;\ntype CellPropertyFunction<T extends PropTypes> = (x: number, y: number) => T;\ntype InputStyle = Pick<\n CSSProperties,\n | 'position'\n | 'top'\n | 'left'\n | 'width'\n | 'height'\n | 'outline'\n | 'border'\n | 'textAlign'\n | 'color'\n | 'fontSize'\n | 'fontFamily'\n>;\nexport interface SheetInputProps {\n value: string;\n autoFocus: boolean;\n onKeyDown: React.KeyboardEventHandler<HTMLElement>;\n onChange: (valiue: string) => void;\n style: InputStyle;\n}\ninterface CellCoordinate {\n x: number;\n y: number;\n}\n\ninterface SelectionSpan {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\ninterface Selection {\n span: SelectionSpan;\n color: string;\n}\n\nexport interface Change {\n x: number;\n y: number;\n value: string | number | null;\n source?: { x: number; y: number };\n}\n\nexport interface CellContentItem {\n content: HTMLImageElement | string | number;\n x: number;\n y: number;\n width?: number;\n height?: number;\n horiozntalAlign?: 'left' | 'right' | 'center';\n onClick?: (e: MouseEvent) => void;\n}\n\nexport interface CellContent {\n items: Array<CellContentItem>;\n}\n\nexport interface SheetMouseEvent extends MouseEvent {\n cellX: number;\n cellY: number;\n}\n\ninterface InternalSheetStyle {\n hideGridlines: boolean;\n hideColumnHeaders: boolean;\n hideRowHeaders: boolean;\n freezeColumns: number;\n freezeRows: number;\n columnHeaderHeight: number;\n rowHeaderWidth: number;\n hideScrollBars: boolean;\n}\n\nexport interface SheetStyle {\n hideGridlines?: boolean;\n hideColumnHeaders?: boolean;\n hideRowHeaders?: boolean;\n freezeColumns?: number;\n freezeRows?: number;\n hideScrollBars?: boolean;\n}\n\nexport interface SheetProps {\n cellWidth?: RowOrColumnProperty<number>;\n cellHeight?: RowOrColumnProperty<number>;\n columnHeaders?: RowOrColumnProperty<CellContentType>;\n columnHeaderStyle?: RowOrColumnProperty<Style>;\n cellStyle?: CellProperty<Style>;\n readOnly?: CellProperty<boolean>;\n sourceData?: CellProperty<string | number | null>;\n displayData?: CellProperty<CellContentType>;\n editData?: CellProperty<string>;\n editKeys?: CellProperty<string>;\n sheetStyle?: SheetStyle;\n dontCommitEditOnSelectionChange?: boolean;\n secondarySelections?: Selection[];\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell?: () => void\n ) => ReactElement | undefined;\n onSelectionChanged?: (x1: number, y1: number, x2: number, y2: number) => void;\n onRightClick?: (e: SheetMouseEvent) => void;\n onChange?: (changes: Array<Change>) => void;\n onCellWidthChange?: (indices: number[], value: number) => void;\n onCellHeightChange?: (indices: number[], value: number) => void;\n onScrollChange?: (scrollX: number, scrolLY: number) => void;\n}\n\nexport interface Style {\n color?: string;\n fontSize?: number;\n fontFamily?: string;\n textAlign?: 'right' | 'left' | 'center';\n marginRight?: number;\n marginLeft?: number;\n weight?: string;\n fillColor?: string;\n backgroundColor?: string;\n}\n\ninterface RowOrColumnSize {\n index: number[];\n start: number[];\n end: number[];\n}\n\nfunction resizeCanvas(canvas: HTMLCanvasElement) {\n const { width, height } = canvas.getBoundingClientRect();\n let { devicePixelRatio: ratio = 1 } = window;\n if (ratio < 1) {\n ratio = 1;\n }\n const newCanvasWidth = Math.round(width * ratio);\n const newCanvasHeight = Math.round(height * ratio);\n\n if (canvas.width !== newCanvasWidth || canvas.height !== newCanvasHeight) {\n const context = canvas.getContext('2d');\n if (context) {\n canvas.width = newCanvasWidth;\n canvas.height = newCanvasHeight;\n context.scale(ratio, ratio);\n }\n return true;\n }\n\n return false;\n}\n\n// todo first figure out the function\nfunction createRowOrColumnPropFunction<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\nfunction createCellPropFunction<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\nfunction applyAlignment(\n start: number,\n cellSize: number,\n style: Required<Style>,\n imageWidth: number,\n alignment?: 'left' | 'center' | 'right'\n): number {\n if (!alignment) {\n alignment = style.textAlign;\n }\n if (alignment === 'left') {\n return start + style.marginLeft;\n } else if (alignment === 'center') {\n return start + cellSize * 0.5 - imageWidth / 2;\n } else if (alignment === 'right') {\n return start + (cellSize - style.marginRight - imageWidth);\n }\n return start;\n}\n\nfunction drawCell(\n context: CanvasRenderingContext2D,\n cellContent: CellContentType,\n style: Style,\n defaultCellStyle: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number\n) {\n if (cellContent === null) {\n return;\n }\n const finalStyle = createStyleObject(style, defaultCellStyle);\n context.fillStyle = finalStyle.color;\n context.font = finalStyle.weight + ' ' + finalStyle.fontSize + 'px ' + finalStyle.fontFamily;\n context.textAlign = finalStyle.textAlign;\n\n const yy = yCoord + cellHeight * 0.5;\n\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n\n if (finalStyle.backgroundColor !== '') {\n context.fillStyle = finalStyle.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = finalStyle.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const xx = applyAlignment(xCoord, cellWidth, finalStyle, 0);\n context.fillText('' + cellContent, xx, yy);\n } else if (typeof cellContent === 'object') {\n for (const obj of cellContent.items) {\n if (obj.content instanceof HTMLImageElement) {\n const w = obj.width || cellWidth;\n const finalX = applyAlignment(xCoord, cellWidth, finalStyle, w, obj.horiozntalAlign);\n context.drawImage(\n obj.content,\n finalX + obj.x,\n yy + obj.y,\n obj.width || cellWidth,\n obj.height || cellHeight\n );\n } else if (typeof obj.content === 'string' || typeof obj.content === 'number') {\n if (obj.horiozntalAlign) {\n context.textAlign = obj.horiozntalAlign;\n }\n const finalX = applyAlignment(xCoord, cellWidth, finalStyle, 0, obj.horiozntalAlign);\n context.fillText('' + obj.content, finalX + obj.x, yy + obj.y);\n }\n }\n }\n context.restore();\n}\n\nfunction calculateRowsOrColsSizes(\n freezeCount: number,\n size: (index: number) => number,\n startingSize: number,\n startingIndex: number,\n visibleArea: number\n): RowOrColumnSize {\n const visible = [];\n const start = [];\n const end = [];\n let prev = 0;\n\n start.push(startingSize);\n visible.push(freezeCount > 0 ? 0 : startingIndex);\n let firstSize = freezeCount > 0 ? size(0) : size(startingIndex);\n prev = startingSize + firstSize;\n end.push(prev);\n\n let ind = freezeCount > 0 ? 1 : startingIndex + 1;\n\n if (freezeCount > 0) {\n for (; ind < freezeCount; ind++) {\n visible.push(ind);\n start.push(prev);\n prev = prev + size(ind);\n end.push(prev);\n }\n ind = Math.max(startingIndex, freezeCount);\n }\n\n while (true) {\n visible.push(ind);\n start.push(prev);\n prev = prev + size(ind);\n end.push(prev);\n if (end[end.length - 1] >= visibleArea) {\n break;\n }\n ind++;\n }\n return {\n index: visible,\n start,\n end,\n };\n}\n\nfunction createStyleObject(optionalStyle: Style, defaultStyle: Required<Style>): Required<Style> {\n return {\n ...defaultStyle,\n ...optionalStyle,\n };\n}\n\nfunction 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\nfunction absCoordianteToCell(\n absX: number,\n absY: number,\n rowSizes: RowOrColumnSize,\n columnSizes: RowOrColumnSize\n): CellCoordinate {\n let cellX = 0;\n let cellY = 0;\n\n for (let i = 0; i < columnSizes.index.length; i++) {\n if (absX >= columnSizes.start[i] && absX <= columnSizes.end[i]) {\n cellX = columnSizes.index[i];\n break;\n }\n }\n for (let i = 0; i < rowSizes.index.length; i++) {\n if (absY >= rowSizes.start[i] && absY <= rowSizes.end[i]) {\n cellY = rowSizes.index[i];\n break;\n }\n }\n\n return { x: cellX, y: cellY };\n}\n\nfunction normalizeSelection(selection: SelectionSpan) {\n let selx1 = selection.x1;\n let selx2 = selection.x2;\n\n if (selection.x1 > selection.x2) {\n selx1 = selection.x2;\n selx2 = selection.x1;\n }\n\n let sely1 = selection.y1;\n let sely2 = selection.y2;\n\n if (selection.y1 > selection.y2) {\n sely1 = selection.y2;\n sely2 = selection.y1;\n }\n return [selx1, sely1, selx2, sely2];\n}\n\nfunction cellToAbsCoordinate(\n cellX: number,\n cellY: number,\n rowSizes: RowOrColumnSize,\n columnSizes: RowOrColumnSize,\n dataOffset: CellCoordinate,\n cellWidth: RowOrColumnPropertyFunction<number>,\n cellHeight: RowOrColumnPropertyFunction<number>,\n sheetStyle: InternalSheetStyle\n): CellCoordinate {\n let absX = sheetStyle.rowHeaderWidth;\n const indX = columnSizes.index.findIndex((i) => i === cellX);\n if (indX !== -1) {\n absX = columnSizes.start[indX];\n } else {\n for (let i = 0; i < dataOffset.x; i++) {\n absX -= cellWidth(i);\n }\n for (let i = 0; i < cellX; i++) {\n absX += cellWidth(i);\n }\n }\n\n let absY = sheetStyle.columnHeaderHeight;\n const indY = rowSizes.index.findIndex((i) => i === cellY);\n if (indY !== -1) {\n absY = rowSizes.start[indY];\n } else {\n for (let i = 0; i < dataOffset.y; i++) {\n absY -= cellHeight(i);\n }\n for (let i = 0; i < cellY; i++) {\n absY += cellHeight(i);\n }\n }\n return { x: absX, y: absY };\n}\n\nfunction findApproxMaxEditDataIndex(editData: CellPropertyFunction<string>) {\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 > maxSearchableRowOrCol) {\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 > maxSearchableRowOrCol) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n return { x, y };\n}\n\nfunction findInDisplayData(\n displayData: CellPropertyFunction<CellContentType>,\n start: { x: number; y: number },\n direction: 'up' | 'down' | 'left' | 'right'\n) {\n let i = { ...start };\n let increment = { x: 0, y: 0 };\n if (direction === 'up') {\n increment.y = -1;\n } else if (direction === 'down') {\n increment.y = 1;\n } else if (direction === 'left') {\n increment.x = -1;\n } else if (direction === 'right') {\n increment.x = 1;\n }\n const max = { x: maxSearchableRowOrCol, y: maxSearchableRowOrCol };\n if (i.x > max.x) {\n i.x = max.x;\n }\n if (i.y > max.y) {\n i.y = max.y;\n }\n\n const first = displayData(i.x + increment.x, i.y + increment.y);\n const firstFilled = first !== '' && first !== null && first !== undefined;\n\n if (!firstFilled) {\n i.x += increment.x;\n i.y += increment.y;\n }\n\n while (i.x <= max.x && i.y <= max.y && i.x >= 0 && i.y >= 0) {\n const data = displayData(i.x, i.y);\n\n // if first cell is filled, find the latest filled cell, so first look for first unfilled\n if (firstFilled && (data === '' || data === null || data === undefined)) {\n return {\n x: i.x - increment.x,\n y: i.y - increment.y,\n };\n }\n // if first cell is not filled, just find the first filled\n if (!firstFilled && data !== '' && data !== null && data !== undefined) {\n return { ...i };\n }\n\n i.x += increment.x;\n i.y += increment.y;\n }\n return i;\n}\n\nfunction renderOnCanvas(\n context: CanvasRenderingContext2D,\n rowSizes: RowOrColumnSize,\n columnSizes: RowOrColumnSize,\n cellStyle: CellPropertyFunction<Style>,\n cellWidth: RowOrColumnPropertyFunction<number>,\n cellHeight: RowOrColumnPropertyFunction<number>,\n selection: SelectionSpan,\n secondarySelections: Selection[],\n knobDragInProgress: boolean,\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n knobArea: SelectionSpan,\n displayData: CellPropertyFunction<CellContentType>,\n dataOffset: CellCoordinate,\n knobCoordinates: { x: number; y: number },\n sheetStyle: InternalSheetStyle\n) {\n resizeCanvas(context.canvas);\n context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n context.fillStyle = 'white';\n context.fillRect(0, 0, context.canvas.width, context.canvas.height);\n\n // apply cell fill color\n let yCoord1 = sheetStyle.columnHeaderHeight;\n for (const y of rowSizes.index) {\n let xCoord1 = sheetStyle.rowHeaderWidth;\n for (const x of columnSizes.index) {\n const style = cellStyle(x, y);\n if (style.fillColor) {\n context.fillStyle = style.fillColor;\n context.fillRect(xCoord1, yCoord1, cellWidth(x), cellHeight(y));\n }\n xCoord1 += cellWidth(x);\n }\n yCoord1 += cellHeight(y);\n }\n\n let hideKnob = false;\n\n const [selx1, sely1, selx2, sely2] = normalizeSelection(selection);\n\n const selectionActive = (selx1 !== -1 && selx2 !== -1) || (sely1 !== -1 && sely2 !== -1);\n\n const rowSelectionActive = selx1 === -1 && selx2 === -1 && sely1 !== -1 && sely2 !== -1;\n const colSelectionActive = selx1 !== -1 && selx2 !== -1 && sely1 === -1 && sely2 === -1;\n\n const p1 = cellToAbsCoordinate(selx1, sely1, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight, sheetStyle);\n const p2 = cellToAbsCoordinate(selx2, sely2, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight, sheetStyle);\n p2.x += cellWidth(selx2);\n p2.y += cellHeight(sely2);\n\n if (p1.x >= p2.x) {\n // recalculate if the selection span covers both frozen and unfrozen columns\n p2.x = p1.x;\n let currentCol = selx1;\n while (columnSizes.index.includes(currentCol)) {\n p2.x += cellWidth(currentCol);\n currentCol++;\n }\n hideKnob = true;\n }\n\n if (p1.y >= p2.y) {\n // recalculate if the selection span covers both frozen and unfrozen rows\n p2.y = p1.y;\n let currentRow = sely1;\n while (rowSizes.index.includes(currentRow)) {\n p2.y += cellHeight(currentRow);\n currentRow++;\n }\n hideKnob = true;\n }\n\n // selection fill\n if (selectionActive) {\n context.fillStyle = selBackColor;\n if (rowSelectionActive) {\n const p1x = Math.max(-100, p1.x);\n context.fillRect(p1x, p1.y, 100000, p2.y - p1.y);\n } else if (colSelectionActive) {\n const p1y = Math.max(0, p1.y);\n context.fillRect(p1.x, p1y, p2.x - p1.x, 100000);\n } else {\n context.fillRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n }\n }\n\n if (!sheetStyle.hideRowHeaders) {\n // row header background\n context.fillStyle = rowHeaderBackgroundColor;\n context.fillRect(0, 0, sheetStyle.rowHeaderWidth, context.canvas.height);\n\n // row header selection\n if (selectionActive) {\n context.fillStyle = rowHeaderSelectedBackgroundColor;\n context.fillRect(0, p1.y, sheetStyle.rowHeaderWidth, p2.y - p1.y);\n }\n }\n\n if (!sheetStyle.hideColumnHeaders) {\n // column header background\n context.fillStyle = columnHeaderBackgroundColor;\n context.fillRect(0, 0, context.canvas.width, sheetStyle.columnHeaderHeight);\n\n // column header selection\n if (selectionActive) {\n context.fillStyle = columnHeaderSelectedBackgroundColor;\n context.fillRect(p1.x, 0, p2.x - p1.x, sheetStyle.columnHeaderHeight);\n }\n }\n\n // grid\n context.strokeStyle = gridColor;\n context.lineWidth = 1;\n let startX = sheetStyle.rowHeaderWidth;\n let startY = sheetStyle.columnHeaderHeight;\n\n let first = true;\n const yGridlineEnd = sheetStyle.hideGridlines ? sheetStyle.columnHeaderHeight : context.canvas.height;\n for (const col of columnSizes.index) {\n context.beginPath();\n context.moveTo(startX, 0);\n if (first) {\n if (!sheetStyle.hideRowHeaders) {\n context.lineTo(startX, context.canvas.height);\n }\n first = false;\n } else {\n context.lineTo(startX, yGridlineEnd);\n }\n context.stroke();\n startX += cellWidth(col);\n }\n\n const xGridlineEnd = sheetStyle.hideGridlines ? sheetStyle.rowHeaderWidth : context.canvas.width;\n first = true;\n for (const row of rowSizes.index) {\n context.beginPath();\n context.moveTo(0, startY);\n if (first) {\n if (!sheetStyle.hideColumnHeaders) {\n context.lineTo(context.canvas.width, startY);\n }\n first = false;\n } else {\n context.lineTo(xGridlineEnd, startY);\n }\n context.stroke();\n startY += cellHeight(row);\n }\n\n if (!sheetStyle.hideRowHeaders) {\n // row header text\n startY = sheetStyle.columnHeaderHeight;\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n context.font = defaultCellStyle.fontSize + 'px ' + defaultCellStyle.fontFamily;\n context.fillStyle = rowHeaderTextColor;\n for (const row of rowSizes.index) {\n const cellContent = row + 1;\n let chStyle = {};\n if (rowSelectionActive && sely1 <= row && sely2 >= row) {\n chStyle = { ...chStyle, backgroundColor: rowColHeaderSelectionColor };\n }\n drawCell(\n context,\n '' + cellContent,\n chStyle,\n defaultColumnHeaderStyle,\n 0,\n startY,\n sheetStyle.rowHeaderWidth,\n cellHeight(row)\n );\n startY += cellHeight(row);\n }\n }\n\n if (!sheetStyle.hideColumnHeaders) {\n // column header text\n startX = sheetStyle.rowHeaderWidth;\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n for (const col of columnSizes.index) {\n const cw = cellWidth(col);\n const ch = columnHeaders(col);\n const chcontent = ch !== null ? ch : excelHeaderString(col + 1);\n let chStyle = columnHeaderStyle(col);\n if (colSelectionActive && selx1 <= col && selx2 >= col) {\n chStyle = { ...chStyle, backgroundColor: rowColHeaderSelectionColor };\n }\n drawCell(\n context,\n chcontent,\n chStyle,\n defaultColumnHeaderStyle,\n startX,\n 0,\n cw,\n sheetStyle.columnHeaderHeight\n );\n startX += cw;\n }\n }\n\n // selection outline\n if (selectionActive) {\n context.strokeStyle = selBorderColor;\n context.lineWidth = 1;\n context.beginPath();\n if (rowSelectionActive) {\n const p1x = Math.max(-100, p1.x);\n context.rect(p1x, p1.y, 100000, p2.y - p1.y);\n } else if (colSelectionActive) {\n const p1y = Math.max(-100, p1.y);\n context.rect(p1.x, p1y, p2.x - p1.x, 100000);\n } else {\n context.rect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n }\n context.stroke();\n }\n\n for (const secondarySelection of secondarySelections) {\n const [selx1, sely1, selx2, sely2] = normalizeSelection(secondarySelection.span);\n\n const secondarySelectionActive = (selx1 !== -1 && selx2 !== -1) || (sely1 !== -1 && sely2 !== -1);\n if (!secondarySelectionActive) {\n continue;\n }\n const rowSecondarySelectionActive = selx1 === -1 && selx2 === -1 && sely1 !== -1 && sely2 !== -1;\n const colSecondarySelectionActive = selx1 !== -1 && selx2 !== -1 && sely1 === -1 && sely2 === -1;\n\n const p1 = cellToAbsCoordinate(\n selx1,\n sely1,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight,\n sheetStyle\n );\n const p2 = cellToAbsCoordinate(\n selx2,\n sely2,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight,\n sheetStyle\n );\n p2.x += cellWidth(selx2);\n p2.y += cellHeight(sely2);\n\n if (p1.x >= p2.x) {\n // recalculate if the selection span covers both frozen and unfrozen columns\n p2.x = p1.x;\n let currentCol = selx1;\n while (columnSizes.index.includes(currentCol)) {\n p2.x += cellWidth(currentCol);\n currentCol++;\n }\n }\n\n if (p1.y >= p2.y) {\n // recalculate if the selection span covers both frozen and unfrozen rows\n p2.y = p1.y;\n let currentRow = sely1;\n while (rowSizes.index.includes(currentRow)) {\n p2.y += cellHeight(currentRow);\n currentRow++;\n }\n }\n\n context.strokeStyle = secondarySelection.color;\n context.lineWidth = 1;\n context.beginPath();\n\n if (rowSecondarySelectionActive) {\n const p1x = Math.max(-100, p1.x);\n context.rect(p1x, p1.y, 100000, p2.y - p1.y);\n } else if (colSecondarySelectionActive) {\n const p1y = Math.max(-100, p1.y);\n context.rect(p1.x, p1y, p2.x - p1.x, 100000);\n } else {\n context.rect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n }\n context.stroke();\n }\n\n // knob drag outline\n if (knobDragInProgress) {\n let kx1 = knobArea.x1;\n let kx2 = knobArea.x2;\n if (knobArea.x1 > knobArea.x2) {\n kx1 = knobArea.x2;\n kx2 = knobArea.x1;\n }\n\n let ky1 = knobArea.y1;\n let ky2 = knobArea.y2;\n if (knobArea.y1 > knobArea.y2) {\n ky1 = knobArea.y2;\n ky2 = knobArea.y1;\n }\n const knobPoint1 = cellToAbsCoordinate(\n kx1,\n ky1,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight,\n sheetStyle\n );\n const knobPoint2 = cellToAbsCoordinate(\n kx2 + 1,\n ky2 + 1,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight,\n sheetStyle\n );\n context.strokeStyle = knobAreaBorderColor;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n context.beginPath();\n if (rowSelectionActive) {\n context.rect(knobPoint1.x, knobPoint1.y - 1, 100000, knobPoint2.y - knobPoint1.y);\n } else if (colSelectionActive) {\n context.rect(knobPoint1.x, knobPoint1.y - 1, knobPoint2.x - knobPoint1.x, 100000);\n } else {\n context.rect(knobPoint1.x, knobPoint1.y - 1, knobPoint2.x - knobPoint1.x, knobPoint2.y - knobPoint1.y);\n }\n context.stroke();\n context.setLineDash([]);\n }\n\n // selection knob\n if (selectionActive && !hideKnob) {\n context.fillStyle = selBorderColor;\n context.fillRect(knobCoordinates.x - knobSize * 0.5, knobCoordinates.y - knobSize * 0.5, knobSize, knobSize);\n }\n\n // content\n context.textBaseline = 'middle';\n\n // draw content\n let yCoord = sheetStyle.columnHeaderHeight;\n for (const y of rowSizes.index) {\n let xCoord = sheetStyle.rowHeaderWidth;\n const ch = cellHeight(y);\n for (const x of columnSizes.index) {\n const cellContent = displayData(x, y);\n const cw = cellWidth(x);\n if (cellContent !== null && cellContent !== undefined) {\n const style = cellStyle(x, y);\n drawCell(context, cellContent, style, defaultCellStyle, xCoord, yCoord, cw, ch);\n }\n xCoord += cw;\n }\n yCoord += ch;\n }\n}\n\nfunction Sheet(props: SheetProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const copyPasteTextAreaRef = useRef<HTMLTextAreaElement>(null);\n const [maxScroll, setMaxScroll] = useState({ x: 5000, y: 5000 });\n const [dataOffset, setDataOffset] = useState({ x: 0, y: 0 });\n const [selection, setSelection] = useState<SelectionSpan>({ x1: -1, y1: -1, x2: -1, y2: -1 });\n const [knobArea, setKnobArea] = useState<SelectionSpan>({ x1: -1, y1: -1, x2: -1, y2: -1 });\n const [editCell, setEditCell] = useState({ x: -1, y: -1 });\n const [editValue, setEditValue] = useState<string | number>('');\n const [editKey, setEditKey] = useState<string>('');\n const [arrowKeyCommitMode, setArrowKeyCommitMode] = useState(false);\n const [shiftKeyDown, setShiftKeyDown] = useState(false);\n const [knobDragInProgress, setKnobDragInProgress] = useState(false);\n const [selectionInProgress, setSelectionInProgress] = useState(false);\n const [columnResize, setColumnResize] = useState<{ startX: number; colIndices: number[]; oldWidth: number } | null>(\n null\n );\n const [rowResize, setRowResize] = useState<{ startY: number; rowIndices: number[]; oldHeight: number } | null>(\n null\n );\n const [rowSelectionInProgress, setRowSelectionInProgress] = useState(false);\n const [columnSelectionInProgress, setColumnSelectionInProgress] = useState(false);\n const [buttonClickMouseDownCoordinates, setButtonClickMouseDownCoordinates] = useState<any>({\n x: -1,\n y: -1,\n hitTarget: null,\n });\n const { width: canvasWidth = 3000, height: canvasHeight = 3000 } = useResizeObserver({ ref: canvasRef });\n\n // const freezeColumns = props.freezeColumns || 0;\n // const freezeRows = props.freezeRows || 0;\n\n const cellWidth = useMemo(() => createRowOrColumnPropFunction(props.cellWidth, 100), [props.cellWidth]);\n const cellHeight = useMemo(() => createRowOrColumnPropFunction(props.cellHeight, 22), [props.cellHeight]);\n const columnHeaders = useMemo(() => createRowOrColumnPropFunction(props.columnHeaders, null), [\n props.columnHeaders,\n ]);\n const columnHeaderStyle = useMemo(() => createRowOrColumnPropFunction(props.columnHeaderStyle, {}), [\n props.columnHeaderStyle,\n ]);\n\n const cellReadOnly = useMemo(() => createCellPropFunction(props.readOnly, false), [props.readOnly]);\n\n const sourceData = useMemo(() => createCellPropFunction(props.sourceData, null), [props.sourceData]);\n const displayData = useMemo(() => createCellPropFunction(props.displayData, ''), [props.displayData]);\n const editData = useMemo(() => createCellPropFunction(props.editData, ''), [props.editData]);\n const editKeys = useMemo(() => createCellPropFunction(props.editKeys, ''), [props.editKeys]);\n const cellStyle = useMemo(() => createCellPropFunction(props.cellStyle, defaultCellStyle), [props.cellStyle]);\n\n const sheetStyle: InternalSheetStyle = useMemo(() => {\n return {\n freezeColumns: props.sheetStyle?.freezeColumns || 0,\n freezeRows: props.sheetStyle?.freezeRows || 0,\n hideColumnHeaders: props.sheetStyle?.hideColumnHeaders || false,\n hideRowHeaders: props.sheetStyle?.hideRowHeaders || false,\n hideGridlines: props.sheetStyle?.hideGridlines || false,\n columnHeaderHeight: props.sheetStyle?.hideColumnHeaders ? 1 : kColumnHeaderHeight,\n rowHeaderWidth: props.sheetStyle?.hideRowHeaders ? 1 : kRowHeaderWidth,\n hideScrollBars: props.sheetStyle?.hideScrollBars || false,\n };\n }, [\n props.sheetStyle?.freezeColumns,\n props.sheetStyle?.freezeRows,\n props.sheetStyle?.hideColumnHeaders,\n props.sheetStyle?.hideGridlines,\n props.sheetStyle?.hideRowHeaders,\n props.sheetStyle?.hideScrollBars,\n ]);\n\n useEffect(() => {\n const currEditKey = editKeys ? editKeys(editCell.x, editCell.y) : '';\n if (currEditKey !== editKey) {\n setEditCell({ x: -1, y: -1 });\n setEditKey('');\n }\n }, [editKeys]);\n\n const columnSizes = useMemo(\n () =>\n calculateRowsOrColsSizes(\n sheetStyle.freezeColumns,\n cellWidth,\n sheetStyle.rowHeaderWidth,\n dataOffset.x,\n canvasWidth\n ),\n [sheetStyle, cellWidth, dataOffset.x, canvasWidth]\n );\n\n const rowSizes = useMemo(\n () =>\n calculateRowsOrColsSizes(\n sheetStyle.freezeRows,\n cellHeight,\n sheetStyle.columnHeaderHeight,\n dataOffset.y,\n canvasHeight\n ),\n [sheetStyle, cellHeight, dataOffset.y, canvasHeight]\n );\n\n const changeSelection = (x1: number, y1: number, x2: number, y2: number, scrollToP2 = true) => {\n if (selection.x1 !== x1 || selection.x2 !== x2 || selection.y1 !== y1 || selection.y2 !== y2) {\n setSelection({ x1, y1, x2, y2 });\n }\n\n if (scrollToP2) {\n const newDataOffset = { x: dataOffset.x, y: dataOffset.y };\n let newScrollLeft = -1;\n let newScrollTop = -1;\n\n if (\n x2 !== -1 &&\n (!columnSizes.index.includes(x2) || columnSizes.index[columnSizes.index.length - 1] === x2)\n ) {\n const lastVisibleColumnIndex = columnSizes.index[columnSizes.index.length - 1];\n const firstVisibleColumnIndex = columnSizes.index[sheetStyle.freezeColumns];\n let increment = 0;\n if (x2 >= lastVisibleColumnIndex) {\n increment = 1 + x2 - lastVisibleColumnIndex;\n } else if (x2 < firstVisibleColumnIndex) {\n increment = x2 - firstVisibleColumnIndex;\n }\n const newX = Math.max(dataOffset.x, sheetStyle.freezeColumns) + increment;\n newDataOffset.x = newX;\n newScrollLeft = newX * scrollSpeed;\n }\n\n if (y2 !== -1 && (!rowSizes.index.includes(y2) || rowSizes.index[rowSizes.index.length - 1] === y2)) {\n const firstVisibleRowIndex = rowSizes.index[sheetStyle.freezeRows];\n const lastVisibleRowIndex = rowSizes.index[rowSizes.index.length - 1];\n let increment = 0;\n if (y2 >= lastVisibleRowIndex) {\n increment = 1 + y2 - lastVisibleRowIndex;\n } else if (y2 < firstVisibleRowIndex) {\n increment = y2 - firstVisibleRowIndex;\n }\n const newY = Math.max(dataOffset.y, sheetStyle.freezeRows) + increment;\n newDataOffset.y = newY;\n newScrollTop = newY * scrollSpeed;\n }\n\n if (newDataOffset.x !== dataOffset.x || dataOffset.y !== newDataOffset.y) {\n setDataOffset({ x: newDataOffset.x, y: newDataOffset.y });\n const newMaxScroll = { ...maxScroll };\n newMaxScroll.x = Math.max(newMaxScroll.x, newScrollLeft);\n newMaxScroll.y = Math.max(newMaxScroll.y, newScrollTop);\n setMaxScroll(newMaxScroll);\n setTimeout(() => {\n if (overlayRef.current) {\n if (newScrollLeft !== -1) {\n overlayRef.current.scrollLeft = newScrollLeft;\n }\n if (newScrollTop !== -1) {\n overlayRef.current.scrollTop = newScrollTop;\n }\n }\n }, 0);\n }\n }\n\n if (props.onSelectionChanged) {\n let sx1 = x1;\n let sy1 = y1;\n let sx2 = x2;\n let sy2 = y2;\n if (sx1 > sx2) {\n sx1 = x2;\n sx2 = x1;\n }\n if (sy1 > sy2) {\n sy1 = y2;\n sy2 = y1;\n }\n props.onSelectionChanged(sx1, sy1, sx2, sy2);\n }\n };\n\n const knobCoordinates = useMemo(() => {\n if (selection.x1 === -1 && selection.x2 === -1 && selection.y1 !== -1 && selection.y2 !== -1) {\n let sely2 = selection.y2;\n if (selection.y1 > selection.y2) {\n sely2 = selection.y1;\n }\n const c = cellToAbsCoordinate(\n 0,\n sely2,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight,\n sheetStyle\n );\n return { x: c.x + knobSize * 0.5, y: c.y + cellHeight(sely2) };\n }\n if (selection.x1 !== -1 && selection.x2 !== -1 && selection.y1 === -1 && selection.y2 === -1) {\n let selx2 = selection.x2;\n if (selection.x1 > selection.x2) {\n selx2 = selection.x1;\n }\n\n const c = cellToAbsCoordinate(\n selx2,\n 0,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight,\n sheetStyle\n );\n return { x: c.x + cellWidth(selx2), y: c.y + knobSize * 0.5 };\n }\n if (selection.x2 !== -1 && selection.y2 !== -1) {\n let selx2 = selection.x2;\n if (selection.x1 > selection.x2) {\n selx2 = selection.x1;\n }\n\n let sely2 = selection.y2;\n if (selection.y1 > selection.y2) {\n sely2 = selection.y1;\n }\n const c = cellToAbsCoordinate(\n selx2,\n sely2,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight,\n sheetStyle\n );\n return { x: c.x + cellWidth(selx2), y: c.y + cellHeight(sely2) };\n }\n return { x: -1, y: -1 };\n }, [selection, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight, sheetStyle]);\n\n const hitMap = useMemo(() => {\n const hitM = {};\n const canvas = canvasRef.current;\n if (!canvas) {\n return hitM;\n }\n resizeCanvas(canvas);\n let yCoord = sheetStyle.columnHeaderHeight;\n let xCoord = sheetStyle.rowHeaderWidth;\n\n for (const x of columnSizes.index) {\n const ch = columnHeaders(x);\n const cellW = cellWidth(x);\n if (ch && typeof ch === 'object' && ch.items) {\n let finalStyle;\n for (const obj of ch.items) {\n if (obj.onClick) {\n if (!finalStyle) {\n finalStyle = createStyleObject(columnHeaderStyle(x), defaultCellStyle);\n }\n const w = obj.content instanceof HTMLImageElement ? obj.width || cellW : 0;\n const absX1 = applyAlignment(xCoord, cellW, finalStyle, w, obj.horiozntalAlign) + obj.x;\n const absY1 = sheetStyle.columnHeaderHeight * 0.5 + obj.y;\n const absX2 = absX1 + (obj.width || 0);\n const absY2 = absY1 + (obj.height || 0);\n\n const hitTarget = {\n x: absX1,\n y: absY1,\n w: obj.width,\n h: obj.height,\n onClick: obj.onClick,\n };\n\n // add to hit map\n const x1key = Math.floor(absX1 / xBinSize);\n const x2key = Math.floor(absX2 / xBinSize);\n\n const y1key = Math.floor(absY1 / yBinSize);\n const y2key = Math.floor(absY2 / yBinSize);\n\n for (let xkey = x1key; xkey <= x2key; xkey++) {\n if (!hitM[xkey]) {\n hitM[xkey] = {};\n }\n const xbin = hitM[xkey];\n for (let ykey = y1key; ykey <= y2key; ykey++) {\n if (!xbin[ykey]) {\n xbin[ykey] = [];\n }\n xbin[ykey].push(hitTarget);\n }\n }\n }\n }\n }\n xCoord += cellW;\n }\n\n for (const y of rowSizes.index) {\n xCoord = sheetStyle.rowHeaderWidth;\n for (const x of columnSizes.index) {\n const cellContent = displayData(x, y);\n const cellW = cellWidth(x);\n if (cellContent === null || cellContent === undefined) {\n xCoord += cellW;\n continue;\n }\n\n const xx = xCoord;\n const yy = yCoord + cellHeight(y) * 0.5;\n\n if (typeof cellContent === 'object' && cellContent.items) {\n let finalStyle;\n for (const obj of cellContent.items) {\n if (obj.onClick) {\n if (!finalStyle) {\n finalStyle = createStyleObject(cellStyle(x, y), defaultCellStyle);\n }\n const w = obj.content instanceof HTMLImageElement ? obj.width || cellW : 0;\n const absX1 = applyAlignment(xx, cellW, finalStyle, w, obj.horiozntalAlign) + obj.x;\n const absY1 = yy + obj.y;\n const absX2 = absX1 + (obj.width || 0);\n const absY2 = absY1 + (obj.height || 0);\n\n const hitTarget = {\n x: absX1,\n y: absY1,\n w: obj.width,\n h: obj.height,\n onClick: obj.onClick,\n };\n\n // add to hit map\n const x1key = Math.floor(absX1 / xBinSize);\n const x2key = Math.floor(absX2 / xBinSize);\n\n const y1key = Math.floor(absY1 / yBinSize);\n const y2key = Math.floor(absY2 / yBinSize);\n\n for (let xkey = x1key; xkey <= x2key; xkey++) {\n if (!hitM[xkey]) {\n hitM[xkey] = {};\n }\n const xbin = hitM[xkey];\n for (let ykey = y1key; ykey <= y2key; ykey++) {\n if (!xbin[ykey]) {\n xbin[ykey] = [];\n }\n xbin[ykey].push(hitTarget);\n }\n }\n }\n }\n }\n xCoord += cellW;\n }\n yCoord += cellHeight(y);\n }\n return hitM;\n }, [\n displayData,\n props.cellWidth,\n props.cellHeight,\n canvasRef,\n columnSizes,\n rowSizes,\n dataOffset.x,\n dataOffset.y,\n sheetStyle,\n ]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n const context = canvas.getContext('2d');\n if (!context) {\n return;\n }\n let animationFrameId = window.requestAnimationFrame(() => {\n renderOnCanvas(\n context,\n rowSizes,\n columnSizes,\n cellStyle,\n cellWidth,\n cellHeight,\n selection,\n props.secondarySelections || [],\n knobDragInProgress,\n columnHeaders,\n columnHeaderStyle,\n knobArea,\n displayData,\n dataOffset,\n knobCoordinates,\n sheetStyle\n );\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [\n canvasRef,\n rowSizes,\n columnSizes,\n cellStyle,\n cellWidth,\n cellHeight,\n selection,\n props.secondarySelections,\n knobDragInProgress,\n columnHeaders,\n columnHeaderStyle,\n knobArea,\n displayData,\n dataOffset,\n knobCoordinates,\n sheetStyle,\n ]);\n\n const setFocusToTextArea = () => {\n if (copyPasteTextAreaRef.current) {\n copyPasteTextAreaRef.current.focus({ preventScroll: true });\n copyPasteTextAreaRef.current.select();\n }\n };\n\n useEffect(() => {\n if (!editMode) {\n setCopyPasteText();\n }\n }, [selection, editData]);\n\n useEffect(() => {\n if (!editMode) {\n if (document.activeElement === copyPasteTextAreaRef.current) {\n setFocusToTextArea();\n } else {\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 setFocusToTextArea();\n }\n }\n }\n });\n\n const onPaste = (e: any) => {\n if (!copyPasteTextAreaRef) {\n return;\n }\n if (e.target !== copyPasteTextAreaRef.current) {\n return;\n }\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const types = clipboardData.types;\n\n if (types.includes('text/html')) {\n const pastedHtml = clipboardData.getData('text/html');\n parsePastedHtml(pastedHtml);\n } else if (types.includes('text/plain')) {\n const text = clipboardData.getData('text/plain');\n parsePastedText(text);\n }\n };\n\n useEffect(() => {\n window.document.addEventListener('paste', onPaste);\n return () => {\n window.document.removeEventListener('paste', onPaste);\n };\n });\n\n const findTable = (element: any): any => {\n for (const child of element.children) {\n if (child.nodeName === 'TABLE') {\n return child;\n }\n const maybeTable = findTable(child);\n if (maybeTable) {\n return maybeTable;\n }\n }\n };\n\n const parsePastedHtml = (html: string) => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n let pasteLocX = -1;\n let pasteLocY = -1;\n if (selection.x1 !== -1 && selection.x2 === -1) {\n pasteLocX = selection.x1;\n }\n if (selection.y1 !== -1 && selection.y2 === -1) {\n pasteLocY = selection.y1;\n }\n if (selection.x1 !== -1 && selection.x2 !== -1) {\n pasteLocX = Math.min(selection.x1, selection.x2);\n }\n if (selection.y1 !== -1 && selection.y2 !== -1) {\n pasteLocY = Math.min(selection.y1, selection.y2);\n }\n if (pasteLocX === -1 || pasteLocY === -1) {\n return;\n }\n\n let x = pasteLocX;\n let y = pasteLocY;\n const changes = [];\n\n const tableNode = findTable(div);\n if (!tableNode) {\n return;\n }\n\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n x = pasteLocX;\n if (tr.nodeName === 'TR') {\n for (const td of tr.children) {\n if (td.nodeName === 'TD') {\n let str: string = '';\n if (td.children.length !== 0 && td.children[0].nodeName === 'P') {\n const p = td.children[0];\n if (p.children.length !== 0 && p.children[0].nodeName === 'FONT') {\n str = p.children[0].textContent.trim();\n } else {\n str = p.textContent.trim();\n }\n } else {\n str = td.textContent.trim();\n }\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n changes.push({ y: y, x: x, value: str });\n x++;\n }\n }\n y++;\n }\n }\n }\n }\n\n if (props.onChange) {\n props.onChange(changes);\n }\n let pasteX2 = x - 1;\n let pasteY2 = y - 1;\n changeSelection(pasteLocX, pasteLocY, pasteX2, pasteY2, false);\n };\n\n const parsePastedText = (text: string) => {\n let pasteLocX = -1;\n let pasteLocY = -1;\n if (selection.x1 !== -1 && selection.x2 === -1) {\n pasteLocX = selection.x1;\n }\n if (selection.x1 !== -1 && selection.x2 !== -1) {\n pasteLocX = Math.min(selection.x1, selection.x2);\n }\n if (selection.x1 === -1 && selection.x2 === -1 && selection.y1 !== -1 && selection.y2 !== -1) {\n pasteLocX = 0;\n }\n\n if (selection.y1 !== -1 && selection.y2 === -1) {\n pasteLocY = selection.y1;\n }\n if (selection.y1 !== -1 && selection.y2 !== -1) {\n pasteLocY = Math.min(selection.y1, selection.y2);\n }\n if (selection.y1 === -1 && selection.y2 === -1 && selection.x2 !== -1 && selection.x2 !== -1) {\n pasteLocY = 0;\n }\n\n if (pasteLocX === -1 || pasteLocY === -1) {\n return;\n }\n\n const rows = text.split(/\\r?\\n/);\n let pasteX2 = pasteLocX;\n let pasteY2 = pasteLocY + rows.length - 1;\n const changes = [];\n for (let y = 0; y < rows.length; y++) {\n const cols = rows[y].split('\\t');\n\n if (pasteLocX + cols.length - 1 > pasteX2) {\n pasteX2 = pasteLocX + cols.length - 1;\n }\n for (let x = 0; x < cols.length; x++) {\n changes.push({ y: pasteLocY + y, x: pasteLocX + x, value: cols[x] });\n }\n }\n\n if (props.onChange) {\n props.onChange(changes);\n }\n changeSelection(pasteLocX, pasteLocY, pasteX2, pasteY2, false);\n };\n\n const setCopyPasteText = () => {\n if (selection.x1 === -1 && selection.y1 === -1 && selection.x2 === -1 && selection.y2 === -1) {\n return;\n }\n\n let dy1 = selection.y1;\n let dy2 = selection.y2;\n if (dy1 > dy2) {\n dy1 = selection.y2;\n dy2 = selection.y1;\n }\n\n let dx1 = selection.x1;\n let dx2 = selection.x2;\n if (dx1 > dx2) {\n dx1 = selection.x2;\n dx2 = selection.x1;\n }\n\n if (dx1 === -1 && dx2 === -1) {\n const max = findApproxMaxEditDataIndex(editData);\n dx1 = 0;\n dx2 = max.x;\n }\n if (dy1 === -1 && dy2 === -1) {\n const max = findApproxMaxEditDataIndex(editData);\n dy1 = 0;\n dy2 = max.y;\n }\n\n let cptext = '';\n let cptextTemp = '';\n for (let y = dy1; y <= dy2; y++) {\n let nonEmpty = false;\n for (let x = dx1; x <= dx2; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n cptextTemp += value;\n nonEmpty = true;\n }\n if (x !== dx2) {\n cptextTemp += '\\t';\n }\n }\n if (y !== dy2) {\n cptextTemp += '\\n';\n }\n if (nonEmpty) {\n cptext += cptextTemp;\n cptextTemp = '';\n }\n }\n if (copyPasteTextAreaRef.current) {\n copyPasteTextAreaRef.current.value = cptext;\n }\n };\n\n const commitEditingCell = (value?: string) => {\n if (props.onChange) {\n props.onChange([{ x: editCell.x, y: editCell.y, value: value !== undefined ? value : editValue }]);\n }\n\n setEditCell({ x: -1, y: -1 });\n setEditKey('');\n };\n\n const startEditingCell = (editCell: CellCoordinate) => {\n if (cellReadOnly(editCell.x, editCell.y)) {\n return;\n }\n\n const editDataValue = editData(editCell.x, editCell.y);\n let val = '';\n if (editDataValue !== null && editDataValue !== undefined) {\n val = editDataValue;\n }\n const editDataKey = editKeys ? editKeys(editCell.x, editCell.y) : '';\n setEditCell(editCell);\n setEditKey(editDataKey);\n setEditValue(val);\n setShiftKeyDown(false);\n };\n\n const onScroll = (e: UIEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const absX = e.target.scrollLeft;\n const absY = e.target.scrollTop;\n\n const cellX = Math.floor(absX / scrollSpeed);\n const cellY = Math.floor(absY / scrollSpeed);\n if (cellX !== dataOffset.x || cellY !== dataOffset.y) {\n setDataOffset({ x: cellX, y: cellY });\n if (props.onScrollChange) {\n props.onScrollChange(cellX, cellY);\n }\n }\n\n let newMaxScroll = { ...maxScroll };\n if (maxScroll.x / (absX + 0.5) < 1) {\n newMaxScroll.x *= 1.5;\n }\n if (maxScroll.y / (absY + 0.5) < 1) {\n newMaxScroll.y *= 1.5;\n }\n if (newMaxScroll.x !== maxScroll.x || maxScroll.y !== newMaxScroll.y) {\n setMaxScroll({ ...newMaxScroll });\n }\n };\n\n const onMouseLeave = () => {\n window.document.body.style.cursor = 'auto';\n };\n\n const onMouseDown = (e: MouseEvent) => {\n if (e.button !== 0) {\n return;\n }\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n\n // cancel selection\n setSelectionInProgress(false);\n\n const rect = e.target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n if (x > canvasWidth || y > canvasHeight) {\n return;\n }\n\n const hitTargetKeyX = Math.floor(x / xBinSize);\n const hitTargetKeyY = Math.floor(y / yBinSize);\n\n if (hitMap[hitTargetKeyX] && hitMap[hitTargetKeyX][hitTargetKeyY]) {\n for (const hitTarget of hitMap[hitTargetKeyX][hitTargetKeyY]) {\n if (\n hitTarget.x <= x &&\n x <= hitTarget.x + hitTarget.w &&\n hitTarget.y <= y &&\n y <= hitTarget.y + hitTarget.h\n ) {\n setButtonClickMouseDownCoordinates({ x, y, hitTarget });\n return;\n }\n }\n }\n\n if (!sheetStyle.hideColumnHeaders && y < sheetStyle.columnHeaderHeight) {\n for (let colIdx = 0; colIdx < columnSizes.index.length; colIdx++) {\n const start = columnSizes.start[colIdx];\n const end = columnSizes.end[colIdx];\n const index = columnSizes.index[colIdx];\n if (\n Math.abs(start - x) < resizeColumnRowMouseThreshold ||\n Math.abs(end - x) < resizeColumnRowMouseThreshold\n ) {\n window.document.body.style.cursor = 'col-resize';\n const indices: number[] = [];\n if (selection.x1 !== -1 && selection.x2 !== -1 && selection.y1 === -1 && selection.y2 === -1) {\n const min = Math.min(selection.x1, selection.x2);\n const max = Math.max(selection.x1, selection.x2);\n for (let i = min; i <= max; i++) {\n indices.push(i);\n }\n }\n if (indices.length === 0) {\n indices.push(index);\n }\n setColumnResize({\n startX: end,\n oldWidth: cellWidth(index),\n colIndices: indices,\n });\n return;\n }\n }\n }\n if (!sheetStyle.hideRowHeaders && x < sheetStyle.rowHeaderWidth) {\n for (let rowIdx = 0; rowIdx < rowSizes.index.length; rowIdx++) {\n const start = rowSizes.start[rowIdx];\n const end = rowSizes.end[rowIdx];\n const index = rowSizes.index[rowIdx];\n if (\n Math.abs(start - y) < resizeColumnRowMouseThreshold ||\n Math.abs(end - y) < resizeColumnRowMouseThreshold\n ) {\n window.document.body.style.cursor = 'row-resize';\n const indices: number[] = [];\n if (selection.x1 === -1 && selection.x2 === -1 && selection.y1 !== -1 && selection.y2 !== -1) {\n const min = Math.min(selection.y1, selection.y2);\n const max = Math.max(selection.y1, selection.y2);\n for (let i = min; i <= max; i++) {\n indices.push(i);\n }\n }\n if (indices.length === 0) {\n indices.push(index);\n }\n setRowResize({\n startY: end,\n oldHeight: cellHeight(index),\n rowIndices: indices,\n });\n return;\n }\n }\n }\n\n // knob drag mode\n if (Math.abs(x - knobCoordinates.x) < knobSize && Math.abs(y - knobCoordinates.y) < knobSize) {\n setKnobDragInProgress(true);\n setKnobArea({ x1: selection.x1, y1: selection.y1, x2: selection.x2, y2: selection.y2 });\n return;\n }\n\n const sel2 = absCoordianteToCell(x, y, rowSizes, columnSizes);\n const sel1 = shiftKeyDown ? { x: selection.x1, y: selection.y1 } : { ...sel2 };\n\n if (editMode) {\n if (!props.dontCommitEditOnSelectionChange) {\n commitEditingCell();\n }\n }\n\n let scrollToP2 = true;\n\n if (!sheetStyle.hideRowHeaders && x < sheetStyle.rowHeaderWidth) {\n scrollToP2 = false;\n setRowSelectionInProgress(true);\n sel1.x = -1;\n sel2.x = -1;\n } else {\n setRowSelectionInProgress(false);\n }\n\n if (!sheetStyle.hideColumnHeaders && y < sheetStyle.columnHeaderHeight) {\n scrollToP2 = false;\n setColumnSelectionInProgress(true);\n sel1.y = -1;\n sel2.y = -1;\n } else {\n setColumnSelectionInProgress(false);\n }\n\n setSelectionInProgress(true);\n changeSelection(sel1.x, sel1.y, sel2.x, sel2.y, scrollToP2);\n if (!props.dontCommitEditOnSelectionChange) {\n setEditCell({ x: -1, y: -1 });\n setEditKey('');\n }\n };\n\n const onMouseUp = (e: MouseEvent) => {\n if (knobDragInProgress) {\n let sx1 = selection.x1;\n let sx2 = selection.x2;\n if (selection.x1 > selection.x2) {\n sx1 = selection.x2;\n sx2 = selection.x1;\n }\n let sy1 = selection.y1;\n let sy2 = selection.y2;\n if (selection.y1 > selection.y2) {\n sy1 = selection.y2;\n sy2 = selection.y1;\n }\n let kx1 = knobArea.x1;\n let kx2 = knobArea.x2;\n if (knobArea.x1 > knobArea.x2) {\n kx1 = knobArea.x2;\n kx2 = knobArea.x1;\n }\n let ky1 = knobArea.y1;\n let ky2 = knobArea.y2;\n if (knobArea.y1 > knobArea.y2) {\n ky1 = knobArea.y2;\n ky2 = knobArea.y1;\n }\n\n let fx1 = kx1;\n let fy1 = ky1;\n let fx2 = kx2;\n let fy2 = ky2;\n\n const changes: Array<Change> = [];\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 max = findApproxMaxEditDataIndex(editData);\n fx1 = 0;\n fx2 = max.x;\n }\n let srcY = sy1;\n for (let y = fy1; y <= fy2; y++) {\n for (let x = fx1; x <= fx2; x++) {\n const value = sourceData(x, srcY);\n changes.push({ x: x, y: y, value: value, source: { x: x, y: srcY } });\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 max = findApproxMaxEditDataIndex(editData);\n fy1 = 0;\n fy2 = max.y;\n }\n let srcX = sx1;\n for (let x = fx1; x <= fx2; x++) {\n for (let y = fy1; y <= fy2; y++) {\n const value = sourceData(srcX, y);\n changes.push({ x: x, y: y, value: value, source: { x: srcX, y: y } });\n }\n srcX = srcX + 1;\n if (srcX > sx2) {\n srcX = sx1;\n }\n }\n }\n\n if (props.onChange) {\n props.onChange(changes);\n }\n\n changeSelection(knobArea.x1, knobArea.y1, knobArea.x2, knobArea.y2);\n }\n setSelectionInProgress(false);\n setRowSelectionInProgress(false);\n setColumnSelectionInProgress(false);\n setKnobDragInProgress(false);\n setColumnResize(null);\n setRowResize(null);\n\n if (\n buttonClickMouseDownCoordinates.x !== -1 &&\n buttonClickMouseDownCoordinates.y !== -1 &&\n buttonClickMouseDownCoordinates.hitTarget !== null\n ) {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const rect = e.target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const hitTarget = buttonClickMouseDownCoordinates.hitTarget;\n if (\n hitTarget.x <= x &&\n x <= hitTarget.x + hitTarget.w &&\n hitTarget.y <= y &&\n y <= hitTarget.y + hitTarget.h\n ) {\n hitTarget.onClick(e);\n }\n setButtonClickMouseDownCoordinates({ x: -1, y: -1, hitTarget: null });\n }\n };\n\n useEffect(() => {\n window.addEventListener('mouseup', onMouseUp as any);\n return () => {\n window.removeEventListener('mouseup', onMouseUp as any);\n };\n });\n\n const onMouseMove = (e: MouseEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const rect = e.target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n window.document.body.style.cursor = 'auto';\n\n const hitTargetKeyX = Math.floor(x / xBinSize);\n const hitTargetKeyY = Math.floor(y / yBinSize);\n\n if (hitMap[hitTargetKeyX] && hitMap[hitTargetKeyX][hitTargetKeyY]) {\n for (const hitTarget of hitMap[hitTargetKeyX][hitTargetKeyY]) {\n if (\n hitTarget.x <= x &&\n x <= hitTarget.x + hitTarget.w &&\n hitTarget.y <= y &&\n y <= hitTarget.y + hitTarget.h\n ) {\n window.document.body.style.cursor = 'pointer';\n }\n }\n }\n\n if (!sheetStyle.hideColumnHeaders && props.onCellWidthChange && y < sheetStyle.columnHeaderHeight) {\n let xx = sheetStyle.rowHeaderWidth;\n for (const col of columnSizes.index) {\n if (Math.abs(xx - x) < resizeColumnRowMouseThreshold) {\n window.document.body.style.cursor = 'col-resize';\n break;\n }\n xx += cellWidth(col);\n }\n }\n\n if (!sheetStyle.hideRowHeaders && props.onCellHeightChange && x < sheetStyle.rowHeaderWidth) {\n let yy = sheetStyle.columnHeaderHeight;\n for (const row of rowSizes.index) {\n if (Math.abs(yy - y) < resizeColumnRowMouseThreshold) {\n window.document.body.style.cursor = 'row-resize';\n break;\n }\n yy += cellHeight(row);\n }\n }\n\n if (Math.abs(x - knobCoordinates.x) < knobSize && Math.abs(y - knobCoordinates.y) < knobSize) {\n window.document.body.style.cursor = 'crosshair';\n }\n\n if (columnResize) {\n if (props.onCellWidthChange) {\n const newWidth = Math.max(columnResize.oldWidth + x - columnResize.startX, minimumColumnWidth);\n props.onCellWidthChange(columnResize.colIndices, newWidth);\n }\n return;\n }\n\n if (rowResize) {\n if (props.onCellHeightChange) {\n const newHeight = Math.max(rowResize.oldHeight + y - rowResize.startY, minimumRowHeight);\n props.onCellHeightChange(rowResize.rowIndices, newHeight);\n }\n return;\n }\n\n if (selectionInProgress) {\n const sel2 = absCoordianteToCell(x, y, rowSizes, columnSizes);\n if (rowSelectionInProgress) {\n changeSelection(-1, selection.y1, -1, sel2.y, false);\n } else if (columnSelectionInProgress) {\n changeSelection(selection.x1, -1, sel2.x, -1, false);\n } else {\n changeSelection(selection.x1, selection.y1, sel2.x, sel2.y);\n }\n }\n\n if (knobDragInProgress) {\n window.document.body.style.cursor = 'crosshair';\n const cell = absCoordianteToCell(x, y, rowSizes, columnSizes);\n\n let x1 = selection.x1;\n let y1 = selection.y1;\n let x2 = selection.x2;\n let y2 = selection.y2;\n if (x1 > x2) {\n x1 = selection.x2;\n x2 = selection.x1;\n }\n if (y1 > y2) {\n y1 = selection.y2;\n y2 = selection.y1;\n }\n\n // check if vertical or horizontal\n let xCellDiff = 0; // zero or less\n if (cell.x < x1) xCellDiff = cell.x - x1;\n if (cell.x > x2) xCellDiff = x2 - cell.x;\n let yCellDiff = 0; // zero or less\n if (cell.y < y1) yCellDiff = cell.y - y1;\n if (cell.y > y2) yCellDiff = y2 - cell.y;\n\n if ((x1 === -1 && x2 === -1) || xCellDiff > yCellDiff) {\n if (cell.y < y1) {\n y1 = cell.y;\n } else {\n y2 = cell.y;\n }\n } else {\n if (cell.x < x1) {\n x1 = cell.x;\n } else {\n x2 = cell.x;\n }\n }\n setKnobArea({ x1: x1, y1: y1, x2: x2, y2: y2 });\n }\n };\n\n const onDoubleClick = (e: MouseEvent) => {\n e.preventDefault();\n if (!e.target || !(e.target instanceof Element) || shiftKeyDown) {\n return;\n }\n\n const rect = e.target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n // check if we clicked on a button and don't start editing if we did\n const hitTargetKeyX = Math.floor(x / xBinSize);\n const hitTargetKeyY = Math.floor(y / yBinSize);\n\n if (hitMap[hitTargetKeyX] && hitMap[hitTargetKeyX][hitTargetKeyY]) {\n for (const hitTarget of hitMap[hitTargetKeyX][hitTargetKeyY]) {\n if (\n hitTarget.x <= x &&\n x <= hitTarget.x + hitTarget.w &&\n hitTarget.y <= y &&\n y <= hitTarget.y + hitTarget.h\n ) {\n return;\n }\n }\n }\n const editCell = absCoordianteToCell(x, y, rowSizes, columnSizes);\n setArrowKeyCommitMode(false);\n if (editMode) {\n commitEditingCell();\n }\n startEditingCell(editCell);\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setEditCell({ x: -1, y: -1 });\n setEditKey('');\n return;\n }\n if (e.key === 'Enter') {\n commitEditingCell();\n changeSelection(selection.x1, selection.y1 + 1, selection.x1, selection.y1 + 1);\n }\n if (e.key === 'Tab') {\n e.preventDefault();\n commitEditingCell();\n changeSelection(selection.x1 + 1, selection.y1, selection.x1 + 1, selection.y1);\n }\n if (arrowKeyCommitMode && ['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown'].includes(e.key)) {\n e.preventDefault();\n commitEditingCell();\n let x1 = selection.x1;\n let y1 = selection.y1;\n let x2 = selection.x1;\n let y2 = selection.y1;\n if (e.key === 'ArrowRight') {\n x1 = selection.x1 + 1;\n x2 = selection.x1 + 1;\n } else if (e.key === 'ArrowLeft') {\n x1 = selection.x1 - 1;\n x2 = selection.x1 - 1;\n } else if (e.key === 'ArrowUp') {\n y1 = selection.y1 - 1;\n y2 = selection.y1 - 1;\n } else if (e.key === 'ArrowDown') {\n y1 = selection.y1 + 1;\n y2 = selection.y1 + 1;\n }\n changeSelection(x1, y1, x2, y2);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && ['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown'].includes(e.key)) {\n commitEditingCell();\n return;\n }\n\n if (e.key === 'Shift') {\n setShiftKeyDown(true);\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 return;\n }\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n let x1 = selection.x1;\n let y1 = selection.y1;\n let x2 = selection.x2;\n let y2 = selection.y2;\n if (x1 > x2) {\n x1 = selection.x2;\n x2 = selection.x1;\n }\n if (y1 > y2) {\n y1 = selection.y2;\n y2 = selection.y1;\n }\n if (x1 === -1 && x2 === -1 && y1 !== -1 && y2 !== -1) {\n x1 = 0;\n x2 = maxSearchableRowOrCol;\n }\n if (x1 !== -1 && x2 !== -1 && y1 === -1 && y2 === -1) {\n y1 = 0;\n y2 = maxSearchableRowOrCol;\n }\n const changes: Change[] = [];\n for (let y = y1; y <= y2; y++) {\n for (let x = x1; x <= x2; x++) {\n changes.push({ x: x, y: y, value: null });\n }\n }\n if (props.onChange) {\n props.onChange(changes);\n }\n return;\n }\n\n // nothing selected\n if (selection.x1 === -1 || selection.x2 === -1 || selection.y1 === -1 || selection.y2 === -1) {\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 if (cellReadOnly(selection.x1, selection.y1)) {\n e.preventDefault(); // so we dont get keystrokes inside the text area\n return;\n }\n\n startEditingCell({ x: selection.x1, y: selection.y1 });\n setArrowKeyCommitMode(e.key !== 'Enter');\n return;\n }\n\n if (['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown'].includes(e.key)) {\n let sel1 = { x: selection.x1, y: selection.y1 };\n let sel2 = { x: selection.x2, y: selection.y2 };\n\n let incr = { x: 0, y: 0 };\n let direction: 'up' | 'down' | 'left' | 'right' = 'right';\n if (e.key === 'ArrowRight' || e.key === 'Tab') {\n incr.x = 1;\n direction = 'right';\n } else if (e.key === 'ArrowLeft') {\n incr.x = -1;\n direction = 'left';\n } else if (e.key === 'ArrowUp') {\n incr.y = -1;\n direction = 'up';\n } else if (e.key === 'ArrowDown') {\n incr.y = 1;\n direction = 'down';\n }\n\n if (e.metaKey || e.ctrlKey) {\n const val = findInDisplayData(displayData, sel2, direction);\n incr.x = val.x - sel2.x;\n incr.y = val.y - sel2.y;\n }\n\n sel2.x += incr.x;\n sel2.y += incr.y;\n\n if (sel2.x < 0) {\n sel2.x = 0;\n }\n if (sel2.y < 0) {\n sel2.y = 0;\n }\n if (!e.shiftKey) {\n sel1 = { ...sel2 };\n }\n changeSelection(sel1.x, sel1.y, sel2.x, sel2.y);\n return;\n }\n e.preventDefault();\n };\n\n const onGridKeyUp = (e: KeyboardEvent) => {\n setShiftKeyDown(e.shiftKey);\n };\n\n const onContextMenu = (e: MouseEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n\n const rect = e.target.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const cell = absCoordianteToCell(x, y, rowSizes, columnSizes);\n const cellX = cell.x;\n const cellY = cell.y;\n let { x1, x2, y1, y2 } = selection;\n if (x1 > x2) [x1, x2] = [x2, x1];\n if (y1 > y2) [y1, y2] = [y2, y1];\n\n if (!(y > sheetStyle.columnHeaderHeight && x > sheetStyle.rowHeaderWidth)) {\n return;\n }\n //if click is not inside of selection, select the right clicked cell\n if (!(cellX >= x1 && cellX <= x2) || !(cellY >= y1 && cellY <= y2)) {\n changeSelection(cellX, cellY, cellX, cellY);\n }\n\n onMouseMove(e);\n const ev: SheetMouseEvent = {\n ...e,\n cellX,\n cellY,\n };\n props.onRightClick?.(ev);\n };\n\n const editMode = editCell.x !== -1 && editCell.y !== -1;\n let editTextPosition = { x: 0, y: 0 };\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextTextAlign: 'right' | 'left' | 'center' = 'right';\n if (editMode) {\n editTextPosition = cellToAbsCoordinate(\n editCell.x,\n editCell.y,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight,\n sheetStyle\n );\n const style = cellStyle(editCell.x, editCell.y);\n // add 1 so it doesnt cover the selection border\n editTextPosition.x += 1;\n editTextPosition.y += 1;\n editTextWidth = cellWidth(editCell.x) - 2;\n editTextHeight = cellHeight(editCell.y) - 2;\n editTextTextAlign = style.textAlign || defaultCellStyle.textAlign || 'left';\n }\n\n const inputProps = {\n value: editValue,\n autoFocus: true,\n onKeyDown: onKeyDown,\n style: {\n position: 'absolute',\n top: editTextPosition.y,\n left: editTextPosition.x,\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextTextAlign,\n color: 'black',\n fontSize: defaultCellStyle.fontSize,\n fontFamily: 'sans-serif',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCell.x,\n editCell.y,\n { ...inputProps, onChange: setEditValue } as SheetInputProps,\n commitEditingCell\n );\n\n let overlayDivClassName = styles.sheetscroll;\n const overlayDivStyles: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n overflow: 'scroll',\n borderBottom: '1px solid #ddd',\n };\n const canvasStyles: React.CSSProperties = {\n width: 'calc(100% - 14px)',\n height: 'calc(100% - 15px)',\n outline: '1px solid #ddd', // find another better solution ?\n };\n\n if (sheetStyle.hideScrollBars) {\n delete canvasStyles['outline'];\n delete overlayDivStyles['borderBottom'];\n overlayDivClassName = '';\n canvasStyles.width = 'calc(100%)';\n }\n\n return (\n <div style={{ position: 'relative', height: '100%' }}>\n <canvas style={canvasStyles} ref={canvasRef} />\n <div\n ref={overlayRef}\n onDoubleClick={onDoubleClick}\n onMouseDown={onMouseDown}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n onContextMenu={onContextMenu}\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: maxScroll.y + 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: maxScroll.x + 5000,\n height: 1,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n </div>\n <textarea\n style={{ position: 'absolute', top: 0, left: 0, width: 1, height: 1, opacity: 0.01 }}\n ref={copyPasteTextAreaRef}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onFocus={(e) => e.target.select()}\n tabIndex={0}\n onKeyDown={onGridKeyDown}\n onKeyUp={onGridKeyUp}\n ></textarea>\n {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <input\n {...inputProps}\n type=\"text\"\n onFocus={(e) => e.target.select()}\n onChange={(e) => setEditValue(e.target.value)}\n />\n ))}\n </div>\n );\n}\n\nexport default Sheet;\n"],"names":["selBorderColor","selBackColor","knobSize","gridColor","knobAreaBorderColor","kRowHeaderWidth","rowHeaderBackgroundColor","rowHeaderTextColor","rowHeaderSelectedBackgroundColor","kColumnHeaderHeight","columnHeaderBackgroundColor","columnHeaderSelectedBackgroundColor","xBinSize","yBinSize","scrollSpeed","resizeColumnRowMouseThreshold","minimumColumnWidth","minimumRowHeight","rowColHeaderSelectionColor","maxSearchableRowOrCol","defaultCellStyle","textAlign","fontSize","marginRight","marginLeft","color","fontFamily","weight","fillColor","backgroundColor","defaultColumnHeaderStyle","resizeCanvas","canvas","getBoundingClientRect","width","height","window","devicePixelRatio","ratio","newCanvasWidth","Math","round","newCanvasHeight","context","getContext","scale","createRowOrColumnPropFunction","rowColProp","defaultValue","Array","isArray","rowOrColIndex","length","undefined","createCellPropFunction","cellProp","x","y","applyAlignment","start","cellSize","style","imageWidth","alignment","drawCell","cellContent","xCoord","yCoord","cellWidth","cellHeight","finalStyle","createStyleObject","fillStyle","font","yy","save","beginPath","rect","clip","fillRect","xx","fillText","items","obj","content","HTMLImageElement","w","finalX","horiozntalAlign","drawImage","restore","calculateRowsOrColsSizes","freezeCount","size","startingSize","startingIndex","visibleArea","visible","end","prev","push","firstSize","ind","max","index","optionalStyle","defaultStyle","excelHeaderString","num","s","t","String","fromCharCode","absCoordianteToCell","absX","absY","rowSizes","columnSizes","cellX","cellY","i","normalizeSelection","selection","selx1","x1","selx2","x2","sely1","y1","sely2","y2","cellToAbsCoordinate","dataOffset","sheetStyle","rowHeaderWidth","indX","findIndex","columnHeaderHeight","indY","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","data","floor","findInDisplayData","displayData","direction","increment","first","firstFilled","renderOnCanvas","cellStyle","secondarySelections","knobDragInProgress","columnHeaders","columnHeaderStyle","knobArea","knobCoordinates","clearRect","yCoord1","xCoord1","hideKnob","selectionActive","rowSelectionActive","colSelectionActive","p1","p2","currentCol","includes","currentRow","p1x","p1y","hideRowHeaders","hideColumnHeaders","strokeStyle","lineWidth","startX","startY","yGridlineEnd","hideGridlines","col","moveTo","lineTo","stroke","xGridlineEnd","row","textBaseline","chStyle","cw","ch","chcontent","secondarySelection","span","secondarySelectionActive","rowSecondarySelectionActive","colSecondarySelectionActive","kx1","kx2","ky1","ky2","knobPoint1","knobPoint2","setLineDash","Sheet","props","canvasRef","useRef","overlayRef","copyPasteTextAreaRef","useState","maxScroll","setMaxScroll","setDataOffset","setSelection","setKnobArea","editCell","setEditCell","editValue","setEditValue","editKey","setEditKey","arrowKeyCommitMode","setArrowKeyCommitMode","shiftKeyDown","setShiftKeyDown","setKnobDragInProgress","selectionInProgress","setSelectionInProgress","columnResize","setColumnResize","rowResize","setRowResize","rowSelectionInProgress","setRowSelectionInProgress","columnSelectionInProgress","setColumnSelectionInProgress","hitTarget","buttonClickMouseDownCoordinates","setButtonClickMouseDownCoordinates","useResizeObserver","ref","canvasWidth","canvasHeight","useMemo","cellReadOnly","readOnly","sourceData","editKeys","freezeColumns","freezeRows","hideScrollBars","useEffect","currEditKey","changeSelection","scrollToP2","newDataOffset","newScrollLeft","newScrollTop","lastVisibleColumnIndex","firstVisibleColumnIndex","newX","firstVisibleRowIndex","lastVisibleRowIndex","newY","newMaxScroll","setTimeout","current","scrollLeft","scrollTop","onSelectionChanged","sx1","sy1","sx2","sy2","c","hitMap","hitM","cellW","onClick","absX1","absY1","absX2","absY2","h","x1key","x2key","y1key","y2key","xkey","xbin","ykey","animationFrameId","requestAnimationFrame","cancelAnimationFrame","setFocusToTextArea","focus","preventScroll","select","editMode","setCopyPasteText","document","activeElement","activeTagName","tagName","toLowerCase","contentEditable","onPaste","e","target","preventDefault","clipboardData","types","pastedHtml","getData","parsePastedHtml","text","parsePastedText","addEventListener","removeEventListener","findTable","element","children","child","nodeName","maybeTable","html","div","createElement","innerHTML","trim","pasteLocX","pasteLocY","min","changes","tableNode","tableChild","tr","td","str","p","textContent","replaceAll","value","onChange","pasteX2","pasteY2","rows","split","cols","dy1","dy2","dx1","dx2","cptext","cptextTemp","nonEmpty","commitEditingCell","startEditingCell","editDataValue","val","editDataKey","onScroll","Element","onScrollChange","onMouseLeave","body","cursor","onMouseDown","button","clientX","left","clientY","top","hitTargetKeyX","hitTargetKeyY","colIdx","abs","indices","oldWidth","colIndices","rowIdx","oldHeight","rowIndices","sel2","sel1","dontCommitEditOnSelectionChange","onMouseUp","fx1","fy1","fx2","fy2","srcY","source","srcX","onMouseMove","onCellWidthChange","onCellHeightChange","newWidth","newHeight","cell","xCellDiff","yCellDiff","onDoubleClick","onKeyDown","key","onGridKeyDown","metaKey","ctrlKey","which","keyCode","incr","shiftKey","onGridKeyUp","onContextMenu","ev","onRightClick","editTextPosition","editTextWidth","editTextHeight","editTextTextAlign","inputProps","autoFocus","position","outline","border","input","inputComponent","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","React","className","opacity","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","tabIndex","onKeyUp","type"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/props.ts","../src/mouse.ts","../src/scroll.ts","../src/clipboard.ts","../src/layout.ts","../src/style.ts","../src/render.ts","../src/index.tsx"],"sourcesContent":["import { XY, Rectangle, Selection, Clickable, Direction, Style } from './types';\n\nexport const INITIAL_MAX_SCROLL: XY = [ 2000, 1000 ];\n\nexport const ORIGIN: XY = [ 0, 0 ];\nexport const ONE_ONE: XY = [ 1, 1 ];\n\nexport const NO_CELL: XY = [ -1, -1 ];\nexport const NO_SELECTION: Rectangle = [NO_CELL, NO_CELL];\nexport const NO_SELECTIONS: Selection[] = [];\nexport const NO_CLICKABLES: Clickable[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 65536;\nexport const MAX_XY: XY = [ MAX_SEARCHABLE_INDEX, MAX_SEARCHABLE_INDEX ];\n\nexport const COLORS = {\n selectionBorder: '#1a66ff',\n selectionBackground: '#e8f0ff',\n\n gridLine: '#0000001f',\n\n dragGhost: '#1a66ff30',\n dropTarget: '#1a66ff',\n knobAreaBorder: '#707070',\n\n headerBackground: '#f6f9fc',\n headerText: '#666666',\n headerActive: '#e8f0ff',\n headerActiveText: '#1a66ff',\n\n headerSelected: '#1a66ff',\n headerSelectedText: '#ffffff',\n};\n\nexport const SIZES = {\n knobArea: 6,\n headerWidth: 50,\n headerHeight: 22,\n minimumWidth: 50,\n minimumHeight: 22,\n resizeZone: 4,\n scrollZone: 50,\n scrollSpeed: 30,\n};\n\nexport const DEFAULT_CELL_STYLE: Required<Style> = {\n textAlign: 'left',\n fontSize: 12,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n weight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const HEADER_ACTIVE_STYLE = {\n color: COLORS.headerActiveText,\n};\n\nexport const HEADER_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelected,\n color: COLORS.headerSelectedText,\n};\n\nexport const ARROW_KEYS: Record<string, Direction> = {\n 'ArrowRight': 'right',\n 'ArrowLeft': 'left',\n 'ArrowUp': 'up',\n 'ArrowDown': 'down',\n};\n","export const tail = <T,>(list: T[]): T => list[list.length - 1];\n\nexport const clamp = (x: number, min: number, max: number) => Math.max(Math.min(max, x), min);\n\nexport const seq = (n: number, s: number = 0, d: number = 1): number[] => Array.from({ length: n }).map((_, i: number) => s + d * i);\n\nexport const isInRange = (x: number, min: number, max: number) => min <= x && x <= max;\nexport const isInRangeLeft = (x: number, min: number, max: number) => min <= x && x < max;\nexport const isInRangeRight = (x: number, min: number, max: number) => min < x && x <= max;\nexport const isInRangeCenter = (x: number, min: number, max: number) => min < x && x < max;\n\n","import { XY, Rectangle } from './types';\nimport { clamp } from './util';\n\nexport const addXY = (a: XY, b: XY): XY => [a[0] + b[0], a[1] + b[1]];\nexport const subXY = (a: XY, b: XY): XY => [a[0] - b[0], a[1] - b[1]];\nexport const mulXY = (a: XY, b: XY): XY => [a[0] * b[0], a[1] * b[1]];\nexport const maxXY = (a: XY, b: XY): XY => [Math.max(a[0], b[0]), Math.max(a[1], b[1])];\nexport const minXY = (a: XY, b: XY): XY => [Math.min(a[0], b[0]), Math.min(a[1], b[1])];\nexport const clampXY = (p: XY, min: XY, max: XY = [Infinity, Infinity]): XY => [clamp(p[0], min[0], max[0]), clamp(p[1], min[1], max[1])];\n\nexport const getDirectionStep = (direction: string): XY => {\n if (direction === 'left') return [-1, 0];\n if (direction === 'right') return [1, 0];\n if (direction === 'up') return [0, -1];\n if (direction === 'down') return [0, 1];\n return [0, 0];\n};\n\nexport const isSameXY = (a: XY, b: XY) => a[0] === b[0] && a[1] === b[1];\n\nexport const isSameSelection = (a: Rectangle, b: Rectangle) => {\n const [a1, a2] = a;\n const [b1, b2] = b;\n return isSameXY(a1, b1) && isSameXY(a2, b2);\n};\n\n// Selection is infinite horizontally\nexport const isMaybeRowSelection = (selection: Rectangle) => {\n const [[left], [right]] = selection;\n return (left === -1 && right === -1);\n};\n\n// Selection is infinite vertically\nexport const isMaybeColumnSelection = (selection: Rectangle) => {\n const [[, top], [, bottom]] = selection;\n return (top === -1 && bottom === -1);\n};\n\n// Selection is ONLY infinite horizontally\nexport const isRowSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return (left === -1 && right === -1) && (top !== -1 && bottom !== -1);\n};\n\n// Selection is ONLY infinite vertically\nexport const isColumnSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return (top === -1 && bottom === -1) && (left !== -1 && right !== -1);\n};\n\n// Selection is not infinite\nexport const isCellSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return (left !== -1 && right !== -1) && (top !== -1 && bottom !== -1);\n};\n\n// Selection is null\nexport const isEmptySelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return (left === -1 && right === -1) && (top === -1 && bottom === -1);\n};\n\n// Test cell inside selection (inclusive edges)\nexport const isPointInsideSelection = (selection: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n const [x, y] = point;\n return (x >= left && x <= right) && (y >= top && y <= bottom);\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n let [[left, top], [right, bottom]] = selection;\n if (left > right) {\n [left, right] = [right, left];\n }\n if (top > bottom) {\n [top, bottom] = [bottom, top];\n }\n\n return [[left, top], [right, bottom]];\n};\n","import { Direction, XY, CellContentType, CellProperty, CellPropertyFunction, PropTypes, RowOrColumnProperty, RowOrColumnPropertyFunction } from './types';\nimport { MAX_SEARCHABLE_INDEX, MAX_XY, ORIGIN } from './constants';\nimport { clampXY, addXY, subXY, maxXY, getDirectionStep } from './coordinate';\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnProp = <T extends PropTypes>(\n rowColProp: RowOrColumnProperty<T> | undefined,\n defaultValue: T\n): RowOrColumnPropertyFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n}\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellProp = <T extends PropTypes>(\n cellProp: CellProperty<T> | undefined,\n defaultValue: T\n): CellPropertyFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n}\n\nexport const findApproxMaxEditDataIndex = (editData: CellPropertyFunction<string>): XY => {\n let x = 0;\n let y = 0;\n let howManyEmpty = 0;\n let growthIncrement = 10;\n let growthIncrementFactor = 1.5;\n\n // x\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let yy = 0; yy < 10; yy++) {\n const data = editData(x, yy);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n x += growthIncrement;\n if (x > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n\n howManyEmpty = 0;\n growthIncrement = 10;\n growthIncrementFactor = 1.5;\n\n // y\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let xx = 0; xx < 10; xx++) {\n const data = editData(xx, y);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n y += growthIncrement;\n if (y > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n return [x, y];\n}\n\nexport const findInDisplayData = (\n displayData: CellPropertyFunction<CellContentType>,\n start: XY,\n direction: Direction,\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = clampXY(start, ORIGIN, MAX_XY);\n const first = displayData(...addXY(cell, step));\n const firstFilled = first !== '' && first !== null && first !== undefined;\n\n if (!firstFilled) {\n cell = addXY(cell, step);\n }\n\n let [cellX, cellY] = cell;\n while (cellX <= MAX_SEARCHABLE_INDEX && cellY <= MAX_SEARCHABLE_INDEX && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY);\n\n // if first cell is filled, find the last filled cell, so first look for first unfilled\n if (firstFilled && (data === '' || data === null || data === undefined)) {\n return subXY(cell, step);\n }\n // if first cell is not filled, just find the first filled\n if (!firstFilled && data !== '' && data !== null && data !== undefined) {\n return cell;\n }\n\n [cellX, cellY] = cell = addXY(cell, step);\n }\n\n return maxXY(cell, [0, 0]);\n}\n","import { CellLayout, CellPropertyFunction, Change, Clickable, Rectangle, RowOrColumnPropertyFunction, SheetMouseEvent, SheetStyle, VisibleLayout, XY } from './types';\nimport { MouseEvent, PointerEvent, RefObject, useCallback, useMemo, useRef, useState } from 'react';\nimport { normalizeSelection, isColumnSelection, isRowSelection, isCellSelection, isMaybeRowSelection, isPointInsideSelection, addXY, subXY, maxXY } from './coordinate';\nimport { ONE_ONE, ORIGIN, SIZES } from './constants';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange } from './util';\n\ntype DragOp = {\n anchor: number,\n scroll: number,\n size: number,\n indices: number[],\n};\n\nexport const useMouse = (\n hitmapRef: RefObject<Clickable[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<string | number | null>,\n\n canSizeColumn: RowOrColumnPropertyFunction<boolean | null>,\n canSizeRow: RowOrColumnPropertyFunction<boolean | null>,\n canOrderColumn: RowOrColumnPropertyFunction<boolean | null>,\n canOrderRow: RowOrColumnPropertyFunction<boolean | null>,\n\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n sheetStyle: SheetStyle,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragOffsetChange?: (dragOffset: XY | null) => void,\n onDropTargetChange?: (selection: Rectangle | null) => void,\n onSelectionChange?: (selection: Rectangle, scrollToHead?: boolean) => void,\n\n onInvalidateColumn?: (column: number) => void,\n onInvalidateRow?: (row: number) => void,\n\n onChange?: (changes: Change[]) => void,\n onColumnOrderChange?: (indices: number[], order: number) => void,\n onRowOrderChange?: (indices: number[], order: number) => void,\n onCellWidthChange?: (indices: number[], value: number) => void,\n onCellHeightChange?: (indices: number[], value: number) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean,\n) => {\n const [hitTarget, setHitTarget] = useState<Clickable | null>(null);\n\n const [columnResize, setColumnResize] = useState<DragOp | null>(null);\n const [rowResize, setRowResize] = useState<DragOp | null>(null);\n const [columnDrag, setColumnDrag] = useState<DragOp | null>(null);\n const [rowDrag, setRowDrag] = useState<DragOp | null>(null);\n\n const [draggingKnob, setDraggingKnob] = useState(false);\n const [draggingSelection, setDraggingSelection] = useState(false);\n const [draggingRowSelection, setDraggingRowSelection] = useState(false);\n const [draggingColumnSelection, setDraggingColumnSelection] = useState(false);\n\n const {hideRowHeaders, hideColumnHeaders} = sheetStyle;\n const {cellToPixel, getVersion} = cellLayout;\n const version = getVersion();\n\n const knobPosition = useMemo((): XY | null => {\n const [, [maxX, maxY]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n return subXY(addXY(cellToPixel([0, maxY], [0, 1]), [SIZES.knobArea * 0.5, 0]), ONE_ONE);\n }\n if (isColumnSelection(selection)) {\n return subXY(addXY(cellToPixel([maxX, 0], [1, 0]), [0, SIZES.knobArea * 0.5]), ONE_ONE);\n }\n if (isCellSelection(selection)) {\n return subXY(cellToPixel([maxX, maxY], ONE_ONE), ONE_ONE);\n }\n return null;\n }, [selection, cellToPixel, version]);\n\n // Pass dragging state into handlers via ref so they don't need to rebind during resizes/drags\n const refState = {\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\n\n knobPosition,\n columnResize,\n rowResize,\n columnDrag,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingRowSelection,\n draggingColumnSelection,\n };\n const ref = useRef(refState);\n ref.current = refState;\n\n // Hit-testing for rendered objects\n const getMousePosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [\n e.clientX - rect.left,\n e.clientY - rect.top,\n ];\n return xy;\n }, []);\n\n const getScrollPosition = useCallback((e: PointerEvent<any> | MouseEvent<any>) => {\n if (!e.target || !(e.target instanceof Element)) {\n return [0, 0];\n }\n\n const {scrollLeft, scrollTop} = e.target as any;\n const xy: XY = [scrollLeft, scrollTop];\n\n return xy;\n }, []);\n\n const getMouseHit = useCallback((xy: XY) => {\n const {current: hitmap} = hitmapRef;\n if (!hitmap) return null;\n\n for (const object of hitmap) {\n const {rect} = object;\n if (isPointInsideSelection(rect, xy)) {\n return object;\n }\n }\n\n return null;\n }, [hitmapRef]);\n\n const onPointerLeave = useCallback(() => {\n window.document.body.style.cursor = 'auto';\n }, []);\n\n const onPointerDown = useCallback((e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n cellLayout: {columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY},\n visibleCells: {columns, rows},\n knobPosition,\n },\n } = ref;\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n setHitTarget(hitTarget);\n return;\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const selectedColumns = [];\n const selectedRows = [];\n for (let i = minX; i <= maxX; i++) selectedColumns.push(i);\n for (let i = minY; i <= maxY; i++) selectedRows.push(i);\n\n // Column header\n if (!hideColumnHeaders && y < getIndentY()) {\n // Grab selected columns in column selection\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end)) {\n\n for (const index of columns) {\n const start = columnToPixel(index, 0);\n const end = columnToPixel(index, 1);\n\n if (\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n isInRange(index, minX, maxX) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n const indices = selectedColumns;\n const size = columnToPixel(maxX, 1) - columnToPixel(minX);\n const [scroll] = getScrollPosition(e);\n\n setColumnDrag({\n anchor: x,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n return;\n }\n }\n }\n }\n\n // Resize columns\n if (onCellWidthChange) {\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if ((Math.abs(edge - x) < SIZES.resizeZone) && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n\n const asGroup = isColumnSelection(selection) && maxX === index;\n const indices = asGroup\n ? selectedColumns\n : [index];\n\n const size = asGroup\n ? columnToPixel(maxX, 1) - columnToPixel(minX)\n : columnToPixel(index, 1) - columnToPixel(index);\n const [scroll] = getScrollPosition(e);\n\n setColumnResize({\n anchor: x,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n // Grab selected rows in row selection\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end)) {\n\n for (const index of rows) {\n const start = rowToPixel(index, 0);\n const end = rowToPixel(index, 1);\n\n if (\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n isInRange(index, minY, maxY) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n const indices = selectedRows;\n const size = rowToPixel(maxY, 1) - rowToPixel(minY);\n const [, scroll] = getScrollPosition(e);\n\n setRowDrag({\n anchor: y,\n scroll,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n return;\n }\n }\n }\n }\n\n // Resize rows\n if (onCellHeightChange) {\n for (const index of rows) {\n const edge = rowToPixel(index, 1);\n\n if ((Math.abs(edge - y) < SIZES.resizeZone) && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n\n const asGroup = isRowSelection(selection) && maxY === index;\n const indices = asGroup\n ? selectedRows\n : [index];\n\n const size = asGroup\n ? rowToPixel(maxY, 1) - rowToPixel(minY)\n : rowToPixel(index, 1) - rowToPixel(index);\n const [, scroll] = getScrollPosition(e);\n\n setRowResize({\n anchor: y,\n scroll,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n // Knob drag mode\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n setDraggingKnob(true);\n onKnobAreaChange?.(selection);\n return;\n }\n }\n\n // Normal cell click\n const head = pixelToCell(xy);\n const anchor: XY = e.shiftKey ? [...selection[0]] : head;\n\n if (editMode) {\n if (!dontCommitEditOnSelectionChange) {\n onCommit?.();\n }\n }\n\n let scrollToHead = true;\n\n if (!hideRowHeaders && x < getIndentX()) {\n scrollToHead = false;\n setDraggingRowSelection(true);\n anchor[0] = -1;\n head[0] = -1;\n }\n\n if (!hideColumnHeaders && y < getIndentY()) {\n scrollToHead = false;\n setDraggingColumnSelection(true);\n anchor[1] = -1;\n head[1] = -1;\n }\n\n setDraggingSelection(true);\n onSelectionChange?.([anchor, head], scrollToHead);\n }, [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onColumnOrderChange,\n onRowOrderChange,\n onCellWidthChange,\n onCellHeightChange,\n onKnobAreaChange,\n onSelectionChange,\n onCommit,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n ]);\n\n const onPointerUp = useCallback((e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n knobArea,\n selection,\n sourceData,\n editData,\n\n columnDrag,\n rowDrag,\n\n draggingKnob,\n\n cellLayout: {pixelToColumn, pixelToRow, getIndentX, getIndentY},\n },\n } = ref;\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, sourceData, editData);\n\n onChange?.(changes);\n onSelectionChange?.(knobArea);\n onKnobAreaChange?.(null);\n }\n\n const xy = getMousePosition(e);\n if (xy && (columnDrag || rowDrag)) {\n window.document.body.style.cursor = 'auto';\n onDragOffsetChange?.(null);\n onDropTargetChange?.(null);\n\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const cellX = pixelToColumn(Math.max(x, getIndentX()), 0.5);\n const cellY = pixelToRow(Math.max(y, getIndentY()), 0.5);\n\n if (columnDrag) {\n const {indices} = columnDrag;\n\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n if (!insideSelection) {\n const order = cellX > minX ? cellX - indices.length : cellX;\n onSelectionChange?.([[order, minY], [order + maxX - minX, maxY]]);\n onColumnOrderChange?.(indices, order);\n onInvalidateColumn?.(Math.min(minX, order));\n }\n }\n if (rowDrag) {\n const {indices} = rowDrag;\n\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n if (!insideSelection) {\n const order = cellY > minY ? cellY - indices.length : cellY;\n onSelectionChange?.([[minX, order], [maxX, order + maxY - minY]]);\n onRowOrderChange?.(indices, order);\n onInvalidateRow?.(Math.min(minY, order));\n }\n }\n }\n\n setDraggingSelection(false);\n setDraggingRowSelection(false);\n setDraggingColumnSelection(false);\n setDraggingKnob(false);\n setColumnResize(null);\n setColumnDrag(null);\n setRowResize(null);\n setRowDrag(null);\n\n if (!xy || !hitTarget) return;\n setHitTarget(null);\n\n if (hitTarget === getMouseHit(xy)) {\n const {obj} = hitTarget;\n obj.onClick?.(e);\n }\n\n }, [\n getMousePosition,\n getMouseHit,\n onChange,\n onSelectionChange,\n onKnobAreaChange,\n onDropTargetChange,\n onColumnOrderChange,\n onRowOrderChange,\n ]);\n\n const onPointerMove = useCallback((e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n visibleCells,\n\n knobPosition,\n columnResize,\n columnDrag,\n rowResize,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingColumnSelection,\n draggingRowSelection,\n\n cellLayout: {columnToPixel, rowToPixel, pixelToCell, pixelToColumn, pixelToRow, getIndentX, getIndentY},\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n window.document.body.style.cursor = 'auto';\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n }\n else if (columnDrag || rowDrag) {\n window.document.body.style.cursor = 'grabbing';\n }\n else if (columnResize) {\n window.document.body.style.cursor = 'col-resize';\n e.preventDefault();\n }\n else if (rowResize) {\n window.document.body.style.cursor = 'row-resize';\n e.preventDefault();\n }\n else if (draggingRowSelection || draggingColumnSelection) {\n e.preventDefault();\n }\n\n const {columns, rows} = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const isDragging = columnResize || columnDrag || rowResize || rowDrag || draggingRowSelection || draggingColumnSelection;\n\n if (!isDragging) {\n if (!hideColumnHeaders && y < getIndentY()) {\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end)) {\n\n for (const index of columns) {\n const start = columnToPixel(index);\n const end = columnToPixel(index, 1);\n\n if (\n !draggingColumnSelection &&\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n isInRange(index, minX, maxX) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellWidthChange) {\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n if ((Math.abs(edge - x) < SIZES.resizeZone) && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end)) {\n\n for (const index of rows) {\n const start = rowToPixel(index);\n const end = rowToPixel(index, 1);\n\n if (\n !draggingRowSelection &&\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n isInRange(index, minY, maxY) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellHeightChange) {\n for (const index of rows) {\n const edge = rowToPixel(index, 1);\n if ((Math.abs(edge - y) < SIZES.resizeZone) && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n return;\n }\n }\n }\n }\n\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n window.document.body.style.cursor = 'crosshair';\n return;\n }\n }\n }\n\n if (columnResize) {\n if (onCellWidthChange) {\n const {size, anchor, scroll, indices} = columnResize;\n const [currentScroll] = getScrollPosition(e);\n const newWidth = Math.max(size + x - anchor + scroll - currentScroll, SIZES.minimumWidth * indices.length);\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(indices, newWidth / indices.length);\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const {size, anchor, scroll, indices} = rowResize;\n const [, currentScroll] = getScrollPosition(e);\n const newHeight = Math.max(size + y - anchor + scroll - currentScroll, SIZES.minimumHeight * indices.length);\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(indices, newHeight / indices.length);\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = pixelToCell(xy);\n\n const [anchorX, anchorY] = anchor;\n const [headX, headY] = head;\n\n if (draggingRowSelection) {\n onSelectionChange?.([[-1, anchorY], [-1, Math.max(0, headY)]], false);\n } else if (draggingColumnSelection) {\n onSelectionChange?.([[anchorX, -1], [Math.max(0, headX), -1]], false);\n } else {\n onSelectionChange?.([\n maxXY(anchor, ORIGIN),\n maxXY(head, ORIGIN),\n ], false);\n }\n }\n\n if (draggingKnob) {\n window.document.body.style.cursor = 'crosshair';\n\n const [cellX, cellY] = pixelToCell(xy);\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // check if vertical or horizontal\n let xCellDiff = Math.min(cellX - minX, maxX - cellX, 0); // zero or less\n let yCellDiff = Math.min(cellY - minY, maxY - cellY, 0); // zero or less\n\n if (isMaybeRowSelection(selection) || xCellDiff > yCellDiff) {\n if (cellY < minY) {\n minY = cellY;\n } else if (cellY > maxY) {\n maxY = cellY;\n }\n } else {\n if (cellX < minX) {\n minX = cellX;\n } else if (cellX > maxX) {\n maxX = cellX;\n }\n }\n\n onKnobAreaChange?.([[minX, minY], [maxX, maxY]]);\n }\n\n if (columnDrag || rowDrag) {\n const [x, y] = xy;\n if (columnDrag) {\n const cellX = pixelToColumn(Math.max(x, getIndentX()), 0.5);\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n\n const {anchor, scroll} = columnDrag;\n const shift = x - anchor;\n const [currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([shift + currentScroll - scroll, 0]);\n onDropTargetChange?.(insideSelection ? null : [[cellX, -1], [cellX, -1]]);\n }\n if (rowDrag) {\n const cellY = pixelToRow(Math.max(y, getIndentY()), 0.5);\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n\n const {anchor, scroll} = rowDrag;\n const shift = y - anchor;\n const [, currentScroll] = getScrollPosition(e);\n\n onDragOffsetChange?.([0, shift + currentScroll - scroll]);\n onDropTargetChange?.(insideSelection ? null : [[-1, cellY], [-1, cellY]]);\n }\n }\n }, [\n getMousePosition,\n getScrollPosition,\n getMouseHit,\n onCellWidthChange,\n onCellHeightChange,\n ]);\n\n const onDoubleClick = useCallback((e: MouseEvent) => {\n const {\n current: {\n cellLayout: {pixelToCell},\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n return;\n }\n\n const editCell = pixelToCell(xy);\n if (editMode) onCommit?.();\n onEdit?.(editCell);\n }, [getMousePosition, getMouseHit, onCommit, onEdit]);\n\n const onContextMenu = useCallback((e: MouseEvent) => {\n const {\n current: {\n cellLayout: {pixelToCell, getIndentX, getIndentY},\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n if (x <= getIndentX() || y <= getIndentY()) {\n return;\n }\n\n // If click is not inside of selection, select the right clicked cell\n const cell = pixelToCell(xy);\n if (!isPointInsideSelection(selection, cell)) {\n onSelectionChange?.([cell, cell]);\n }\n\n onPointerMove(e as any);\n\n const [cellX, cellY] = cell;\n const event: SheetMouseEvent = {\n ...e,\n cellX,\n cellY,\n };\n onRightClick?.(event);\n }, [getMousePosition, onSelectionChange, onPointerMove, onRightClick]);\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onDoubleClick,\n onContextMenu,\n };\n\n return {knobPosition, mouseHandlers};\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n sourceData: CellPropertyFunction<string | number | null>,\n editData: CellPropertyFunction<string>,\n): Change[] => {\n const [[kx1, ky1], [kx2, ky2]] = normalizeSelection(knobArea);\n const [[sx1, sy1], [sx2, sy2]] = normalizeSelection(selection);\n\n let fx1 = kx1;\n let fy1 = ky1;\n let fx2 = kx2;\n let fy2 = ky2;\n\n const changes: Change[] = [];\n\n // TODO: this should be made less cryptic, using logical selection ops/fns\n\n if (fx2 - fx1 === sx2 - sx1) {\n // vertical\n if (fy1 === sy1) {\n fy1 = sy2 + 1;\n } else {\n fy2 = sy1 - 1;\n }\n if (fx1 === -1 && fx2 === -1) {\n const [maxX] = findApproxMaxEditDataIndex(editData);\n fx1 = 0;\n fx2 = maxX;\n }\n let srcY = sy1;\n for (let y = fy1; y <= fy2; y++) {\n for (let x = fx1; x <= fx2; x++) {\n const value = sourceData(x, srcY);\n changes.push({ x: x, y: y, value: value, source: { x: x, y: srcY } });\n }\n srcY = srcY + 1;\n if (srcY > sy2) {\n srcY = sy1;\n }\n }\n } else {\n // horizontal\n if (fx1 === sx1) {\n fx1 = sx2 + 1;\n } else {\n fx2 = sx1 - 1;\n }\n if (fy1 === -1 && fy2 === -1) {\n const [, maxY] = findApproxMaxEditDataIndex(editData);\n fy1 = 0;\n fy2 = maxY;\n }\n let srcX = sx1;\n for (let x = fx1; x <= fx2; x++) {\n for (let y = fy1; y <= fy2; y++) {\n const value = sourceData(srcX, y);\n changes.push({ x: x, y: y, value: value, source: { x: srcX, y: y } });\n }\n srcX = srcX + 1;\n if (srcX > sx2) {\n srcX = sx1;\n }\n }\n }\n\n return changes;\n}","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY } from './coordinate';\nimport { ONE_ONE } from './constants';\n\nexport const useScroll = (\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n onOffsetChange?: (offset: XY) => void,\n onMaxScrollChange?: (maxScroll: XY) => void,\n) => {\n return useCallback((e: UIEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n\n const xy: XY = [\n e.target.scrollLeft,\n e.target.scrollTop,\n ];\n\n const {absoluteToCell} = cellLayout;\n const cell = absoluteToCell(xy);\n if (!isSameXY(cell, offset)) {\n onOffsetChange?.(cell);\n }\n\n // TODO: smooth scrolling\n // const pixel = subXY(cellToAbsolute(cell), xy);\n //if (!isSameXY(pixel, pixelOffset)) {\n // setPixelOffset(pixel);\n //}\n\n const [x, y] = xy;\n const [maxScrollX, maxScrollY] = maxScroll;\n const growX = (maxScrollX < x + 1) ? 1.5 : 1;\n const growY = (maxScrollY < y + 1) ? 1.5 : 1;\n if (growX > 1 || growY > 1) {\n onMaxScrollChange?.(mulXY(maxScroll, [growX, growY]));\n }\n }, [cellLayout, onOffsetChange, onMaxScrollChange]);\n};\n\nexport const scrollToCell = (\n element: HTMLDivElement,\n cell: XY,\n view: XY,\n freeze: XY,\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n callback: (offset: XY, maxScroll: XY) => void,\n) => {\n const [x, y] = cell;\n const [w, h] = view;\n const [offsetX, offsetY] = offset;\n\n const {cellToAbsolute, cellToPixel, columnToPixel, rowToPixel} = cellLayout;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n const [left, top] = cellToPixel(cell);\n const [right, bottom] = cellToPixel(cell, ONE_ONE);\n\n let [newX, newY] = offset;\n\n // If moving left/up, scroll to head\n if (left <= frozenX) {\n newX = x;\n }\n if (top <= frozenY) {\n newY = y;\n }\n\n // If moving right/down, scroll cell by cell until right/bottom of cell is visible\n if (right > w) {\n let edge = right - w + columnToPixel(newX);\n while (columnToPixel(++newX) < edge) {};\n }\n if (bottom > h) {\n let edge = bottom - h + rowToPixel(newY);\n while (rowToPixel(++newY) < edge) {};\n }\n\n // Don't scroll on infinite axis\n const newOffset: XY = [\n newX >= 0 ? newX : offsetX,\n newY >= 0 ? newY : offsetY,\n ];\n\n if (!isSameXY(newOffset, offset)) {\n const scroll = cellToAbsolute(newOffset);\n\n callback(newOffset, maxXY(maxScroll, scroll));\n setTimeout(() => {\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX;\n element.scrollTop = scrollY;\n });\n }\n};\n","import { CellPropertyFunction, Change, ParsedChange, Rectangle } from './types';\nimport { RefObject, useLayoutEffect, useEffect } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { normalizeSelection, isMaybeRowSelection, isMaybeColumnSelection, isEmptySelection } from './coordinate';\n\nexport const useClipboardCopy = (\n textAreaRef: RefObject<HTMLTextAreaElement>,\n selection: Rectangle,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n) => {\n useLayoutEffect(() => {\n const {current: textArea} = textAreaRef;\n if (!textArea) return;\n\n if (editMode) return;\n if (isEmptySelection(selection)) return;\n\n textArea.value = formatSelectionAsTSV(selection, editData);\n }, [selection, editMode, editData, textAreaRef]);\n\n useLayoutEffect(() => {\n const {current: textArea} = textAreaRef;\n if (!textArea) return;\n\n const focus = () => {\n textArea.focus({ preventScroll: true });\n textArea.select();\n };\n\n if (editMode) return;\n if (document.activeElement === textArea) return;\n\n const activeTagName = (document as any).activeElement.tagName.toLowerCase();\n if (\n !(\n (activeTagName === 'div' && (document as any).activeElement.contentEditable === 'true') ||\n activeTagName === 'input' ||\n activeTagName === 'textarea' ||\n activeTagName === 'select'\n )\n ) {\n focus();\n }\n });\n}\n\nexport const useClipboardPaste = (\n textAreaRef: RefObject<HTMLTextAreaElement>,\n selection: Rectangle,\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Array<Change>) => void,\n) => {\n useEffect(() => {\n const onPaste = (e: any) => {\n const {current: textArea} = textAreaRef;\n if (!textArea) return;\n\n if (e.target !== textArea) return;\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const types = clipboardData.types;\n\n let parsed;\n if (types.includes('text/html')) {\n const pastedHtml = clipboardData.getData('text/html');\n parsed = parsePastedHtml(selection, pastedHtml);\n } else if (types.includes('text/plain')) {\n const text = clipboardData.getData('text/plain');\n parsed = parsePastedText(selection, text);\n }\n if (!parsed) return;\n\n const {selection: s, changes} = parsed;\n onChange?.(changes);\n onSelectionChange?.(s);\n };\n\n window.document.addEventListener('paste', onPaste);\n return () => {\n window.document.removeEventListener('paste', onPaste);\n };\n }, [textAreaRef, selection]);\n}\n\nconst formatTSV = (rows: string[][]) => rows.map(row => row.join('\\t')).join('\\n');\n\nconst formatSelectionAsTSV = (\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n) => {\n if (isEmptySelection(selection)) return '';\n\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n if (isMaybeRowSelection(selection)) {\n const [cellX] = findApproxMaxEditDataIndex(editData);\n minX = 0;\n maxX = cellX;\n }\n if (isMaybeColumnSelection(selection)) {\n const [, cellY] = findApproxMaxEditDataIndex(editData);\n minY = 0;\n maxY = cellY;\n }\n\n const rows: string[][] = [];\n\n for (let y = minY; y <= maxY; y++) {\n const row: string[] = [];\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value != null ? value : '');\n }\n }\n\n rows.push(row);\n }\n\n return formatTSV(rows);\n}\n\nconst findTable = (element: any): any => {\n for (const child of element.children) {\n if (child.nodeName === 'TABLE') {\n return child;\n }\n const maybeTable = findTable(child);\n if (maybeTable) {\n return maybeTable;\n }\n }\n};\n\nconst parsePastedHtml = (selection: Rectangle, html: string): ParsedChange | null => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const [[minX, minY]] = normalizeSelection(selection);\n let left = isMaybeRowSelection(selection) ? 0 : minX;\n let top = isMaybeColumnSelection(selection) ? 0 : minY;\n\n const changes = [];\n\n const tableNode = findTable(div);\n if (!tableNode) {\n return null;\n }\n\n let right = left;\n let bottom = top;\n\n let y = top;\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n let x = left;\n if (tr.nodeName === 'TR') {\n for (const td of tr.children) {\n if (td.nodeName === 'TD') {\n let str: string = '';\n if (td.children.length !== 0 && td.children[0].nodeName === 'P') {\n const p = td.children[0];\n if (p.children.length !== 0 && p.children[0].nodeName === 'FONT') {\n str = p.children[0].textContent.trim();\n } else {\n str = p.textContent.trim();\n }\n } else {\n str = td.textContent.trim();\n }\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n changes.push({ x, y, value: str });\n x++;\n }\n }\n y++;\n }\n right = Math.max(right, x);\n }\n }\n }\n bottom = y;\n\n return {\n selection: [[left, top], [right, bottom]],\n changes,\n };\n};\n\nconst parsePastedText = (selection: Rectangle, text: string): ParsedChange => {\n const [[minX, minY]] = normalizeSelection(selection);\n let left = isMaybeRowSelection(selection) ? 0 : minX;\n let top = isMaybeColumnSelection(selection) ? 0 : minY;\n\n const rows = text.split(/\\r?\\n/);\n let right = left;\n let bottom = top + rows.length - 1;\n\n const changes = [];\n for (let y = 0; y < rows.length; y++) {\n const cols = rows[y].split('\\t');\n right = Math.max(right, left + cols.length - 1);\n\n for (let x = 0; x < cols.length; x++) {\n changes.push({ x: left + x, y: top + y, value: cols[x] });\n }\n }\n\n return {\n selection: [[left, top], [right, bottom]],\n changes,\n };\n};\n","import { XY, CellLayout, VisibleLayout, LayoutCache } from './types';\nimport { seq } from './util';\nimport { ORIGIN } from './constants';\n\nconst INITIAL_SIZE = 256;\n\n// Local cell layout (virtualized with frozen columns/rows)\n//\n// - converts cell indices to (x, y) canvas pixels for any cell, including off-screen\n// - maps (x, y) canvas pixels back to cell index for any visible cell\n// - can also generate absolute, unscrolled offsets relative to (0,0) to drive scrolling\n// - generates list of visible cols/rows in view\n//\n// Note that adjacent column indices are not necessarily adjacent, i.e. end of [i] != start of [i + 1].\nexport const makeCellLayout = (\n freeze: XY,\n indent: XY,\n offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache,\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [indentX, indentY] = indent;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => indentX;\n const getIndentY = () => indentY;\n\n // Origin for cell, frozen or relative\n const getBaseOriginFor = (index: number, freeze: number, offset: number) => {\n return index < freeze ? 0 : offset;\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 size = column < 0 ? indentX : columns.getSize(column);\n\n return column < 0 ? 0 : indentX + relative + 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 size = row < 0 ? indentY : rows.getSize(row);\n\n return row < 0 ? 0 : indentY + relative + anchor * size;\n };\n\n // Get visible pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToPixel = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [\n columnToPixel(cellX, anchorX),\n rowToPixel(cellY, anchorY),\n ];\n };\n\n // Get absolute / unscrolled pixel x of cell\n const columnToAbsolute = (column: number, anchorX: number = 0): number => {\n const relative = columns.getStart(column);\n const size = column < 0 ? 0 : columns.getSize(column);\n\n return relative + anchorX * size;\n };\n\n // Get absolute / unscrolled pixel y of cell\n const rowToAbsolute = (row: number, anchorY: number = 0): number => {\n const relative = rows.getStart(row);\n const size = row < 0 ? 0 : rows.getSize(row);\n\n return relative + anchorY * size;\n };\n\n // Get absolute / unscrolled pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToAbsolute = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [\n columnToAbsolute(cellX, anchorX),\n rowToAbsolute(cellY, anchorY),\n ];\n };\n\n // Lookup pixel X or Y in cell layout\n const pixelToIndex = (pixel: number, anchor: number, indent: number, freeze: number, offset: number, layout: LayoutCache) => {\n const relative = pixel - indent;\n if (relative < 0) return -1;\n\n const {getStart, lookupIndex} = layout;\n const frozen = getStart(freeze);\n if (relative < frozen) {\n return lookupIndex(relative, anchor);\n }\n else {\n const base = getStart(offset);\n return lookupIndex(base + relative, anchor);\n }\n };\n\n // Lookup pixel X or Y in cell layout (helpers)\n const pixelToColumn = (pixelX: number, anchorX: number = 0) => pixelToIndex(pixelX, anchorX, indentX, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) => pixelToIndex(pixelY, anchorY, indentY, freezeY, offsetY, rows);\n\n // Lookup pixel XY in cell layout\n const pixelToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [\n pixelToColumn(pixelX, anchorX),\n pixelToRow(pixelY, anchorY),\n ];\n };\n\n // Lookup absolute / unscrolled pixel X or Y in cell layout\n const absoluteToIndex = (pixel: number, anchor: number, layout: LayoutCache) => {\n if (pixel < 0) return -1;\n\n const {lookupIndex} = layout;\n return lookupIndex(pixel, anchor);\n };\n\n // Lookup absolute / unscrolled X or Y in cell layout (helpers)\n const absoluteToColumn = (pixelX: number, anchorX: number = 0) => absoluteToIndex(pixelX, anchorX, columns);\n const absoluteToRow = (pixelY: number, anchorY: number = 0) => absoluteToIndex(pixelY, anchorY, rows);\n\n // Lookup absolute / unscrolled XY in cell layout\n const absoluteToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [\n absoluteToColumn(pixelX, anchorX),\n absoluteToRow(pixelY, anchorY),\n ];\n };\n\n // Get visible range of columns or rows\n const getVisibleIndices = (view: number, indent: number, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const {getStart} = layout;\n const relative = view - indent + getStart(offset);\n for (let i = offset + freeze; getStart(i) <= relative; ++i) {\n indices.push(i);\n }\n\n return indices;\n };\n\n // Get visible range for an XY viewport\n const getVisibleCells = (view: XY): VisibleLayout => {\n const [viewX, viewY] = view;\n return {\n columns: getVisibleIndices(viewX, indentX, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, indentY, freezeY, offsetY, rows),\n };\n };\n\n const getVersion = () => columns.getVersion() + rows.getVersion();\n\n return {\n columnToPixel,\n rowToPixel,\n cellToPixel,\n\n columnToAbsolute,\n rowToAbsolute,\n cellToAbsolute,\n\n pixelToColumn,\n pixelToRow,\n pixelToCell,\n\n absoluteToColumn,\n absoluteToRow,\n absoluteToCell,\n\n getVisibleCells,\n getIndentX,\n getIndentY,\n\n getVersion,\n };\n}\n\n// Offset cache in 1 dimension.\n//\n// Allows O(1) queries of distance between any two points, once warmed up.\n// Can do reverse lookup back to index with binary search, once warmed up.\n//\n// - caches sizer(i), each is only called once\n// - offset[0] = 0\n// - adds up offset[i] = sizer(0) + sizer(1) + ... + sizer(i - 1)\n// - cache can be truncated during resizing ops at split\n// - to replace sizer function, cache must be destroyed\nexport const makeLayoutCache = (\n sizer: (index: number) => number,\n): LayoutCache => {\n const offsets = makeIntMap(INITIAL_SIZE);\n const sizes = makeIntMap(INITIAL_SIZE);\n\n let version = 0;\n offsets.set(0, 0);\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return 0;\n if (sizes.has(i)) return sizes.get(i)!;\n\n const size = sizer(i) || 0;\n sizes.set(i, size);\n return size;\n };\n\n // Cache offset sum recursively\n const getOffset = (i: number): number => {\n if (i < 0) return 0;\n if (offsets.has(i)) return offsets.get(i)!;\n\n let j = (offsets.tail() || 0);\n\n // Use a while loop to avoid stack overflow\n while (j < i) {\n const size = getSize(j);\n const offset = (offsets.get(j) || 0) + size;\n offsets.set(++j, offset);\n }\n\n return offsets.get(i)!;\n };\n\n // Boundary points\n const getStart = (i: number) => getOffset(i);\n const getEnd = (i: number) => getOffset(i + 1);\n\n // Reverse lookup from offset to index\n const lookupIndex = (x: number, anchor: number = 0) => {\n // Get end of offsets array\n let last = offsets.tail() || 0;\n\n // Extend cache if value exceeds current end\n while (getOffset(last) < x && getSize(last)) last += 64;\n\n // Do binary search for exact position\n let start = 0;\n let end = last;\n while (start < end) {\n let mid = start + Math.floor((end - start) / 2) + 1;\n let value = getOffset(mid) - (anchor ? anchor * getSize(mid - 1) : 0);\n if (value <= x) start = mid;\n else end = mid - 1;\n }\n\n return start;\n };\n\n const clearAfter = (index: number) => {\n index = Math.max(0, index);\n offsets.truncate(index);\n sizes.truncate(index);\n version++;\n };\n\n const setSizer = (s: (index: number) => number) => {\n sizer = s;\n };\n const getVersion = () => version;\n\n return {getSize, getStart, getEnd, getVersion, lookupIndex, setSizer, clearAfter};\n};\n\n// Fast map<integer, integer> that is mostly filled in from start to end.\n// Elements are only removed by truncating all indices > n.\nconst makeIntMap = (initialSize: number = 128) => {\n let used: Uint8Array;\n let values: Uint32Array;\n let last = 0;\n\n const GROW = 1.2; // 20% growth at a time\n\n const allocate = (size: number) => {\n let newUsed = new Uint8Array(size);\n let newValues = new Uint32Array(size);\n if (used) copy(used, newUsed);\n if (values) copy(values, newValues);\n used = newUsed;\n values = newValues;\n };\n allocate(initialSize);\n\n const copy = (from: Uint8Array | Uint32Array, to: Uint8Array | Uint32Array) => {\n let n = Math.min(from.length, to.length);\n for (let i = 0; i < n; ++i) {\n to[i] = from[i];\n }\n };\n\n const ensure = (size: number) => {\n const l = values.length;\n const grow = Math.round(l * GROW);\n if (l < size) allocate(Math.max(grow, size));\n };\n\n const truncate = (size: number) => {\n const l = values.length;\n\n // Do nothing if smaller\n if (l < size) return;\n\n // If more than 20% bigger, shrink to exact size\n const shrink = Math.round(size * GROW);\n if (l > shrink) allocate(size);\n // Else zero out tail\n else for (let i = size; i < l; ++i) used[i] = 0;\n\n // Track last filled element\n last = Math.min(last, size);\n while (last > 0 && !used[last]) last--;\n };\n\n const getTail = () => used[last] ? last : null;\n\n const setValue = (i: number, value: number) => {\n ensure(i + 1);\n values[i] = value;\n used[i] = 1;\n last = Math.max(last, i);\n };\n\n const getValue = (i: number) => used[i] ? values[i] : null;\n const hasValue = (i: number) => !!used[i];\n\n return {truncate, set: setValue, get: getValue, has: hasValue, tail: getTail};\n};\n","import { InternalSheetStyle, SheetStyle, Style } from './types';\nimport { SIZES } from './constants';\n\nexport const resolveSheetStyle = (sheetStyle?: SheetStyle): InternalSheetStyle => {\n return {\n freezeColumns: sheetStyle?.freezeColumns || 0,\n freezeRows: sheetStyle?.freezeRows || 0,\n hideColumnHeaders: sheetStyle?.hideColumnHeaders || false,\n hideRowHeaders: sheetStyle?.hideRowHeaders || false,\n hideGridlines: sheetStyle?.hideGridlines || false,\n hideScrollBars: sheetStyle?.hideScrollBars || false,\n columnHeaderHeight: sheetStyle?.hideColumnHeaders ? 1 : SIZES.headerHeight,\n rowHeaderWidth: sheetStyle?.hideRowHeaders ? 1 : SIZES.headerWidth,\n };\n};\n\nexport const resolveCellStyle = (optionalStyle: Style, defaultStyle: Required<Style>): Required<Style> => {\n return {\n ...defaultStyle,\n ...optionalStyle,\n };\n};\n\nexport const applyAlignment = (\n start: number,\n cellSize: number,\n style: Required<Style>,\n imageWidth: number,\n alignment: 'left' | 'center' | 'right' = style.textAlign,\n): number => {\n if (alignment === 'left') {\n return start + style.marginLeft;\n } else if (alignment === 'center') {\n return start + cellSize * 0.5 - imageWidth / 2;\n } else if (alignment === 'right') {\n return start + (cellSize - style.marginRight - imageWidth);\n }\n return start;\n};\n","import { CellLayout, CellPropertyFunction, RowOrColumnPropertyFunction, InternalSheetStyle, Rectangle, Selection, Clickable, Style, CellContentType, VisibleLayout, XY } from './types';\nimport { applyAlignment, resolveCellStyle } from './style';\nimport { normalizeSelection, isEmptySelection, isRowSelection, isColumnSelection } from './coordinate';\nimport { isInRange, isInRangeLeft, isInRangeRight, isInRangeCenter } from './util';\nimport { COLORS, SIZES, DEFAULT_CELL_STYLE, DEFAULT_COLUMN_HEADER_STYLE, HEADER_SELECTED_STYLE, HEADER_ACTIVE_STYLE, NO_STYLE, ONE_ONE } from './constants';\n\nexport const renderSheet = (\n context: CanvasRenderingContext2D,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n\n knobPosition: XY | null,\n knobArea: Rectangle | null,\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyFunction<CellContentType>,\n\n dataOffset: XY,\n): Clickable[] => {\n const {canvas} = context;\n const {width, height} = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\n rowHeaderWidth,\n columnHeaderHeight,\n freezeColumns,\n freezeRows,\n } = sheetStyle;\n const {columns, rows} = visibleCells;\n const {\n columnToPixel,\n rowToPixel,\n } = cellLayout;\n\n const clickables: Clickable[] = [];\n\n const freeze: XY = [freezeColumns, freezeRows];\n const indent: XY = [rowHeaderWidth, columnHeaderHeight];\n\n resizeCanvas(canvas);\n context.clearRect(0, 0, width, height);\n context.fillStyle = 'white';\n context.fillRect(0, 0, width, height);\n\n // Cell fill\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const {fillColor} = cellStyle(x, y);\n if (fillColor) {\n context.fillStyle = fillColor;\n context.fillRect(left, top, right - left, bottom - top);\n }\n }\n }\n\n const selectionActive = !isEmptySelection(selection);\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [selected, hideKnob] = resolveFrozenSelection(\n selection,\n cellLayout,\n freeze,\n indent,\n dataOffset,\n );\n\n // Selection fill\n if (selectionActive) {\n const [[left, top], [right, bottom]] = selected;\n context.fillStyle = COLORS.selectionBackground;\n context.fillRect(left, top, right - left, bottom - top);\n }\n\n if (!hideRowHeaders) {\n // Row header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, rowHeaderWidth, context.canvas.height);\n\n // Row header selection shadow\n if (selectionActive && !columnSelectionActive) {\n const [[, top], [, bottom]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(0, top, rowHeaderWidth, bottom - top);\n }\n }\n\n if (!hideColumnHeaders) {\n // Column header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, context.canvas.width, columnHeaderHeight);\n\n // Column header selection shadow\n if (selectionActive && !rowSelectionActive) {\n const [[left], [right]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(left, 0, right - left, columnHeaderHeight);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? rowHeaderWidth : context.canvas.width;\n const gridBottom = hideGridlines ? columnHeaderHeight : context.canvas.height;\n\n const drawGridLineX = (x: number, height: number) => {\n context.beginPath();\n context.moveTo(x - .5, 0);\n context.lineTo(x - .5, height);\n context.stroke();\n };\n\n const drawGridLineY = (y: number, width: number) => {\n context.beginPath();\n context.moveTo(0, y - .5);\n context.lineTo(width, y - .5);\n context.stroke();\n };\n\n drawGridLineX(rowHeaderWidth, context.canvas.height);\n drawGridLineY(columnHeaderHeight, context.canvas.width);\n\n for (const column of columns) {\n const right = columnToPixel(column, 1);\n drawGridLineX(right, gridBottom);\n }\n\n for (const row of rows) {\n const bottom = rowToPixel(row, 1);\n drawGridLineY(bottom, gridRight);\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // Row header text\n if (!hideRowHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n context.font = DEFAULT_CELL_STYLE.fontSize + 'px ' + DEFAULT_CELL_STYLE.fontFamily;\n context.fillStyle = COLORS.headerText;\n\n for (const row of rows) {\n const content = `${row + 1}`;\n\n // Row selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(row, minY, maxY);\n const isSelected = (rowSelectionActive && !columnSelectionActive) && isActive;\n const style = isSelected ? HEADER_SELECTED_STYLE : isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n clickables.push(...renderCell(\n context,\n content,\n style,\n DEFAULT_COLUMN_HEADER_STYLE,\n 0,\n top,\n rowHeaderWidth,\n bottom - top,\n ));\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n\n for (const column of columns) {\n const content = columnHeaders(column) ?? excelHeaderString(column + 1);\n\n // Column selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(column, minX, maxX);\n const selectedStyle = (columnSelectionActive && !rowSelectionActive) && isActive\n ? HEADER_SELECTED_STYLE : NO_STYLE;\n const activeStyle = isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n const style = {\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n clickables.push(...renderCell(\n context,\n content,\n style,\n DEFAULT_COLUMN_HEADER_STYLE,\n left,\n 0,\n right - left,\n columnHeaderHeight\n ));\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(\n left,\n top,\n right - left - 1,\n bottom - top - 1,\n );\n }\n\n for (const secondarySelection of secondarySelections) {\n const selection = secondarySelection.span;\n if (isEmptySelection(selection)) continue;\n\n const [selected] = resolveFrozenSelection(\n selection,\n cellLayout,\n freeze,\n indent,\n dataOffset,\n );\n const [[left, top], [right, bottom]] = selected;\n\n context.strokeStyle = secondarySelection.color;\n context.lineWidth = 1;\n context.beginPath();\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n }\n\n // Knob drag outline\n if (knobArea) {\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(knobArea);\n const left = columnToPixel(minX);\n const top = rowToPixel(minY);\n const right = columnToPixel(maxX, 1);\n const bottom = rowToPixel(maxY, 1);\n\n context.strokeStyle = COLORS.knobAreaBorder;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n context.setLineDash([]);\n }\n\n // Selection knob\n if (knobPosition && !hideKnob) {\n const [knobX, knobY] = knobPosition;\n context.fillStyle = COLORS.selectionBorder;\n context.fillRect(knobX - SIZES.knobArea * 0.5, knobY - SIZES.knobArea * 0.5, SIZES.knobArea, SIZES.knobArea);\n }\n\n // Drag ghost (pixels)\n if (dragOffset) {\n const [shiftX, shiftY] = dragOffset;\n const [[left, top], [right, bottom]] = resolveSelection(selection, cellLayout);\n\n context.fillStyle = COLORS.dragGhost;\n context.fillRect(left + shiftX, top + shiftY, right - left, bottom - top);\n }\n\n // Drop target\n if (dropTarget) {\n let [[left, top], [right, bottom]] = resolveSelection(dropTarget, cellLayout);\n\n context.strokeStyle = COLORS.dropTarget;\n context.lineWidth = 2;\n\n if (isColumnSelection(dropTarget)) {\n right = left;\n }\n if (isRowSelection(dropTarget)) {\n bottom = top;\n }\n context.strokeRect(left - 1, top - 1, right - left, bottom - top);\n }\n\n // Cell contents\n context.textBaseline = 'middle';\n\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const cellContent = displayData(x, y);\n if (cellContent !== null && cellContent !== undefined) {\n const style = cellStyle(x, y);\n clickables.push(...renderCell(context, cellContent, style, DEFAULT_CELL_STYLE, left, top, right - left, bottom - top));\n }\n }\n }\n\n return clickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentType,\n style: Style,\n defaultCellStyle: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number\n): Clickable[] => {\n const clickables: Clickable[] = [];\n\n if (cellContent === null) {\n return clickables;\n }\n\n const finalStyle = resolveCellStyle(style, defaultCellStyle);\n context.fillStyle = finalStyle.color;\n context.font = finalStyle.weight + ' ' + finalStyle.fontSize + 'px ' + finalStyle.fontFamily;\n context.textAlign = finalStyle.textAlign;\n\n const yy = Math.floor(yCoord + cellHeight * 0.5);\n\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n\n if (finalStyle.backgroundColor !== '') {\n context.fillStyle = finalStyle.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = finalStyle.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const xx = applyAlignment(xCoord, cellWidth, finalStyle, 0);\n const text = '' + cellContent;\n context.fillText(text, xx, yy);\n } else if (typeof cellContent === 'object') {\n for (const obj of cellContent.items) {\n let x = 0;\n let y = 0;\n let w = 0;\n let h = 0;\n\n if (obj.content instanceof HTMLImageElement) {\n w = obj.width || cellWidth;\n h = obj.height || cellHeight;\n\n const finalX = applyAlignment(xCoord, cellWidth, finalStyle, w, obj.horizontalAlign);\n x = finalX + obj.x;\n y = yy + obj.y;\n\n context.drawImage(obj.content, x, y, w, h);\n } else if (typeof obj.content === 'string' || typeof obj.content === 'number') {\n if (obj.horizontalAlign) {\n context.textAlign = obj.horizontalAlign;\n }\n const finalX = applyAlignment(xCoord, cellWidth, finalStyle, 0, obj.horizontalAlign);\n const text = '' + obj.content;\n\n const left = finalX + obj.x;\n const top = yy + obj.y;\n context.fillText(text, left, top);\n\n const measure = context.measureText(text);\n x = left - measure.actualBoundingBoxLeft;\n y = top - measure.actualBoundingBoxAscent;\n w = left + measure.actualBoundingBoxRight - x;\n h = top + measure.actualBoundingBoxDescent - y;\n }\n if (obj.onClick) {\n clickables.push({\n rect: [[x, y], [x + w, y + h]],\n obj,\n });\n }\n }\n }\n context.restore();\n\n return clickables;\n};\n\n// Resolve selection into a consistent rectangle, without dealing with frozen rows/columns\nconst resolveSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n) => {\n const {cellToPixel} = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [[left, top], [right, bottom]];\n};\n\n// Resolve selection into a consistent rectangle, handling edge cases around frozen rows/columns.\nconst resolveFrozenSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n\n freeze: XY,\n indent: XY,\n offset: XY,\n) => {\n const {cellToPixel, columnToAbsolute, rowToAbsolute} = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n const [freezeX, freezeY] = freeze;\n const [indentX, indentY] = indent;\n const [offsetX, offsetY] = offset;\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n const [maxX, maxY] = max;\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Get frozen edge\n const frozenX = columnToAbsolute(freezeX);\n const frozenY = rowToAbsolute(freezeY);\n\n let hideKnob = false;\n\n // If the selection crosses the frozen edge, it needs to always cover the entire frozen area.\n if (isInRangeCenter(freezeX, minX, maxX + 1)) {\n const edge = indentX + frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = indentY + frozenY;\n if (bottom <= edge) {\n bottom = edge;\n hideKnob = true;\n }\n }\n\n // If the selection starts/ends under the frozen area, treat as off-screen\n if (isInRangeLeft(minX, freezeX, offsetX + freezeX)) {\n left = -1e5;\n if (isInRangeRight(maxX + 1, freezeX, offsetX + freezeX)) {\n right = indentX;\n hideKnob = true;\n }\n }\n if (isInRangeLeft(minY, freezeY, offsetY + freezeY)) {\n top = -1e5;\n if (isInRangeRight(maxY + 1, freezeY, offsetY + freezeY)) {\n bottom = indentY;\n hideKnob = true;\n }\n }\n\n if (rowSelectionActive && offsetX > 0) {\n hideKnob = true;\n }\n if (columnSelectionActive && offsetY > 0) {\n hideKnob = true;\n }\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [[left, top], [right, bottom]],\n hideKnob,\n ] as [Rectangle, boolean];\n};\n\nconst resizeCanvas = (canvas: HTMLCanvasElement) => {\n const { width, height } = canvas.getBoundingClientRect();\n let { devicePixelRatio: ratio = 1 } = window;\n if (ratio < 1) {\n ratio = 1;\n }\n const newCanvasWidth = Math.round(width * ratio);\n const newCanvasHeight = Math.round(height * ratio);\n\n if (canvas.width !== newCanvasWidth || canvas.height !== newCanvasHeight) {\n const context = canvas.getContext('2d');\n if (context) {\n canvas.width = newCanvasWidth;\n canvas.height = newCanvasHeight;\n context.scale(ratio, ratio);\n }\n return true;\n }\n\n return false;\n};\n\nconst excelHeaderString = (num: number) => {\n let s = '';\n let t = 0;\n while (num > 0) {\n t = (num - 1) % 26;\n s = String.fromCharCode(65 + t) + s;\n num = ((num - t) / 26) | 0;\n }\n return s || '';\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEvent,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellLayout,\n CellProperty,\n CellContentType,\n RowOrColumnProperty,\n Selection,\n Clickable,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n} from './types';\n\nimport {\n ARROW_KEYS,\n\tMAX_SEARCHABLE_INDEX,\n\tDEFAULT_CELL_STYLE,\n\tINITIAL_MAX_SCROLL,\n\tNO_CELL,\n NO_CLICKABLES,\n\tNO_SELECTION,\n NO_SELECTIONS,\n\tORIGIN,\n ONE_ONE,\n} from './constants';\nimport {\n normalizeSelection,\n isSameSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\nimport { useMouse } from './mouse';\nimport { useScroll, scrollToCell } from './scroll';\nimport { useClipboardCopy, useClipboardPaste } from './clipboard';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createRowOrColumnProp, findInDisplayData } from './props';\nimport { renderSheet } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string,\n autoFocus: boolean,\n onKeyDown: KeyboardEventHandler<HTMLElement>,\n onChange: (value: string) => void,\n style: InputStyle,\n};\n\nexport type SheetProps = {\n cellWidth?: RowOrColumnProperty<number>;\n cellHeight?: RowOrColumnProperty<number>;\n columnHeaders?: RowOrColumnProperty<CellContentType>;\n columnHeaderStyle?: RowOrColumnProperty<Style>;\n cellStyle?: CellProperty<Style>;\n readOnly?: CellProperty<boolean>;\n canSizeColumn?: RowOrColumnProperty<boolean>;\n canSizeRow?: RowOrColumnProperty<boolean>;\n canOrderColumn?: RowOrColumnProperty<boolean>;\n canOrderRow?: RowOrColumnProperty<boolean>;\n sourceData?: CellProperty<string | number | null>;\n displayData?: CellProperty<CellContentType>;\n editData?: CellProperty<string>;\n editKeys?: CellProperty<string>;\n sheetStyle?: SheetStyle;\n secondarySelections?: Selection[];\n\n cacheLayout?: boolean,\n dontCommitEditOnSelectionChange?: boolean;\n\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell?: () => void\n ) => ReactElement | undefined;\n\n onSelectionChanged?: (minX: number, minY: number, maxX: number, maxY: number) => void;\n onRightClick?: (e: SheetPointerEvent) => void;\n onChange?: (changes: Array<Change>) => void;\n onColumnOrderChange?: (indices: number[], order: number) => void;\n onRowOrderChange?: (indices: number[], order: number) => void;\n onCellWidthChange?: (indices: number[], value: number) => void;\n onCellHeightChange?: (indices: number[], value: number) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n};\n\nexport type SheetRef = CellLayout;\n\nconst Sheet = forwardRef<SheetRef, SheetProps>((props, ref) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const [maxScroll, setMaxScroll] = useState<XY>(INITIAL_MAX_SCROLL);\n const [dataOffset, setDataOffset] = useState<XY>(ORIGIN);\n // TODO: smooth scrolling\n // const [pixelOffset, setPixelOffset] = useState<XY>(ORIGIN);\n\n const [selection, setSelection] = useState<Rectangle>(NO_SELECTION);\n const [knobArea, setKnobArea] = useState<Rectangle | null>(null);\n const [dragOffset, setDragOffset] = useState<XY | null>(null);\n const [dropTarget, setDropTarget] = useState<Rectangle | null>(null);\n const [editCell, setEditCell] = useState<XY>(NO_CELL);\n\n const [editValue, setEditValue] = useState<string | number>('');\n const [arrowKeyCommitMode, setArrowKeyCommitMode] = useState(false);\n\n const { width: canvasWidth = 3000, height: canvasHeight = 3000 } = useResizeObserver({ ref: canvasRef });\n\n // const freezeColumns = props.freezeColumns || 0;\n // const freezeRows = props.freezeRows || 0;\n\n const cellWidth = useMemo(() => createRowOrColumnProp(props.cellWidth, 100), [props.cellWidth]);\n const cellHeight = useMemo(() => createRowOrColumnProp(props.cellHeight, 22), [props.cellHeight]);\n const columnHeaders = useMemo(() => createRowOrColumnProp(props.columnHeaders, null), [\n props.columnHeaders,\n ]);\n const columnHeaderStyle = useMemo(() => createRowOrColumnProp(props.columnHeaderStyle, {}), [\n props.columnHeaderStyle,\n ]);\n\n const canSizeColumn = useMemo(() => createRowOrColumnProp(props.canSizeColumn, true), [props.canSizeColumn]);\n const canSizeRow = useMemo(() => createRowOrColumnProp(props.canSizeRow, true), [props.canSizeRow]);\n const canOrderColumn = useMemo(() => createRowOrColumnProp(props.canOrderColumn, true), [props.canOrderColumn]);\n const canOrderRow = useMemo(() => createRowOrColumnProp(props.canOrderRow, true), [props.canOrderRow]);\n\n const cellReadOnly = useMemo(() => createCellProp(props.readOnly, false), [props.readOnly]);\n\n const sourceData = useMemo(() => createCellProp(props.sourceData, null), [props.sourceData]);\n const displayData = useMemo(() => createCellProp(props.displayData, ''), [props.displayData]);\n const editData = useMemo(() => createCellProp(props.editData, ''), [props.editData]);\n const editKeys = useMemo(() => createCellProp(props.editKeys, ''), [props.editKeys]);\n const cellStyle = useMemo(() => createCellProp(props.cellStyle, DEFAULT_CELL_STYLE), [props.cellStyle]);\n\n const sheetStyle: InternalSheetStyle = useMemo(() => resolveSheetStyle(props.sheetStyle), [props.sheetStyle]);\n const secondarySelections = props.secondarySelections ?? NO_SELECTIONS;\n\n const [maxScrollX, maxScrollY] = maxScroll;\n\n const [editCellX, editCellY] = editCell;\n const editMode = editCellX !== -1 && editCellY !== -1;\n\n // Global layout for unscrolled/unfrozen grid\n // Cached either per width/height pair, or permanently with invalidation on resize/reorder.\n const columnLayout = useMemo(() => makeLayoutCache(cellWidth), [props.cacheLayout ? null : cellWidth]);\n const rowLayout = useMemo(() => makeLayoutCache(cellHeight), [props.cacheLayout ? null : cellHeight]);\n useMemo(() => {\n if (!props.cacheLayout) return;\n columnLayout.setSizer(cellWidth);\n rowLayout.setSizer(cellHeight);\n }, [props.cacheLayout, cellWidth, cellHeight])\n\n // Virtual layout for indented/scrolled/frozen grid\n const {freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight} = sheetStyle;\n const cellLayout = useMemo(\n () => makeCellLayout(\n [freezeColumns, freezeRows],\n [rowHeaderWidth, columnHeaderHeight],\n dataOffset,\n columnLayout,\n rowLayout,\n ),\n [freezeColumns, freezeRows, rowHeaderWidth, columnHeaderHeight, dataOffset, columnLayout, rowLayout]\n );\n\n // External component API\n useImperativeHandle(ref, () => cellLayout, [cellLayout]);\n\n // Build range of visible cells\n const {getVisibleCells, cellToPixel, getVersion} = cellLayout;\n const visibleCells = useMemo(\n () => getVisibleCells([canvasWidth, canvasHeight]),\n // Need to invalidate view if cached layout version changed\n // eslint-disable-next-line\n [getVisibleCells, canvasWidth, canvasHeight, getVersion()]\n );\n\n // Notify of viewport change\n useLayoutEffect(() => {\n if (props.onScrollChange) {\n props.onScrollChange([...visibleCells.rows], [...visibleCells.columns]);\n }\n }, [visibleCells, props.onScrollChange]);\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollToAnchor = true) => {\n if (!isSameSelection(selection, newSelection)) {\n setSelection(newSelection);\n }\n\n const {current: overlay} = overlayRef;\n if (!overlay) return;\n\n if (scrollToAnchor) {\n const [anchor] = newSelection;\n scrollToCell(\n overlay,\n anchor,\n [canvasWidth, canvasHeight],\n [freezeColumns, freezeRows],\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n },\n );\n }\n\n if (props.onSelectionChanged) {\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(newSelection);\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const commitEditingCell = (value?: string) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n props.onChange([{ x: cellX, y: cellY, value: value !== undefined ? value : editValue }]);\n }\n setEditCell(NO_CELL);\n };\n\n const startEditingCell = (editCell: XY, arrowKeyCommitMode = false) => {\n const [cellX, cellY] = editCell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n const editDataValue = editData(cellX, cellY);\n let val = '';\n if (editDataValue !== null && editDataValue !== undefined) {\n val = editDataValue;\n }\n setEditCell(editCell);\n setEditValue(val);\n setArrowKeyCommitMode(arrowKeyCommitMode);\n };\n\n // Output from rendered layout is used to drive events on user content\n const hitmapRef = useRef<Clickable[]>(NO_CLICKABLES);\n\n // Textarea is used to hold text to copy, and receives pastes\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n useClipboardCopy(textAreaRef, selection, editMode, editData);\n useClipboardPaste(textAreaRef, selection, changeSelection, props.onChange);\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);\n\n const {mouseHandlers, knobPosition} = useMouse(\n hitmapRef,\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n cellLayout,\n visibleCells,\n sheetStyle,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragOffset,\n setDropTarget,\n changeSelection,\n\n props.cacheLayout ? columnLayout.clearAfter : undefined,\n props.cacheLayout ? rowLayout.clearAfter : undefined,\n\n props.onChange,\n props.onColumnOrderChange,\n props.onRowOrderChange,\n props.onCellWidthChange,\n props.onCellHeightChange,\n props.onRightClick,\n props.dontCommitEditOnSelectionChange,\n );\n\n useLayoutEffect(() => {\n const {current: canvas} = canvasRef;\n if (!canvas) {\n return;\n }\n\n const context = canvas.getContext('2d');\n if (!context) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n hitmapRef.current = renderSheet(\n context,\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n dataOffset,\n );\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n dataOffset,\n ]);\n\n const onKeyDown = (e: KeyboardEvent) => {\n console.log('onKeyDown', e.key, e)\n if (e.key === 'Escape') {\n setEditCell(NO_CELL);\n return;\n }\n\n const direction = (e.key === 'Enter' || e.key === 'TAB')\n ? 'right'\n : arrowKeyCommitMode\n ? ARROW_KEYS[e.key]\n : null;\n\n if (direction) {\n e.preventDefault();\n const step = getDirectionStep(direction);\n const head = maxXY(addXY(editCell, step), ORIGIN);\n commitEditingCell();\n changeSelection([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n console.log('onGridKeydown', e.key, e)\n if (editMode && arrowKeyCommitMode && (e.key in ARROW_KEYS)) {\n commitEditingCell();\n return;\n }\n\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'v') {\n return;\n }\n\n // copy\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'c') {\n const {current: textArea} = textAreaRef;\n textArea?.select();\n return;\n }\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n let [[x1, y1], [x2, y2]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n x1 = 0;\n x2 = MAX_SEARCHABLE_INDEX;\n }\n if (isColumnSelection(selection)) {\n y1 = 0;\n y2 = MAX_SEARCHABLE_INDEX;\n }\n\n const changes: Change[] = [];\n for (let y = y1; y <= y2; y++) {\n for (let x = x1; x <= x2; x++) {\n changes.push({ x: x, y: y, value: null });\n }\n }\n if (props.onChange) {\n props.onChange(changes);\n }\n return;\n }\n\n // nothing selected\n if (isEmptySelection(selection)) {\n return;\n }\n\n if (\n (e.keyCode >= 48 && e.keyCode <= 57) ||\n (e.keyCode >= 96 && e.keyCode <= 105) ||\n (e.keyCode >= 65 && e.keyCode <= 90) ||\n e.key === 'Enter' ||\n e.key === '-' ||\n e.key === '.' ||\n e.key === ','\n ) {\n const [cell] = selection;\n const [cellX, cellY] = cell;\n if (cellReadOnly(cellX, cellY)) {\n e.preventDefault(); // so we dont get keystrokes inside the text area\n return;\n }\n\n startEditingCell(cell, e.key !== 'Enter');\n return;\n }\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = selection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n }\n else {\n head = maxXY(addXY(head, step), ORIGIN);\n }\n if (!e.shiftKey) {\n anchor = head;\n }\n changeSelection([anchor, head]);\n return;\n }\n\n e.preventDefault();\n };\n\n const editKey = editKeys ? editKeys(...editCell) : '';\n const [lastEditKey, setLastEditKey] = useState(editKey);\n if (lastEditKey !== editKey) {\n setLastEditKey(editKey);\n setEditCell(NO_CELL);\n }\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextTextAlign: 'right' | 'left' | 'center' = 'right';\n if (editMode) {\n const style = cellStyle(...editCell);\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextTextAlign = style.textAlign || DEFAULT_CELL_STYLE.textAlign || 'left';\n }\n\n const [textX, textY] = editTextPosition;\n const inputProps = {\n value: editValue,\n autoFocus: true,\n onKeyDown: onKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: '0px 4px',\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextTextAlign,\n color: 'black',\n fontSize: DEFAULT_CELL_STYLE.fontSize,\n fontFamily: 'sans-serif',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setEditValue } as SheetInputProps,\n commitEditingCell\n );\n\n let overlayDivClassName = styles.sheetscroll;\n const overlayDivStyles: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n overflow: 'scroll',\n borderBottom: '1px solid #ddd',\n };\n const canvasStyles: React.CSSProperties = {\n width: 'calc(100% - 14px)',\n height: 'calc(100% - 15px)',\n outline: '1px solid #ddd', // find another better solution ?\n };\n\n if (sheetStyle.hideScrollBars) {\n delete canvasStyles['outline'];\n delete overlayDivStyles['borderBottom'];\n overlayDivClassName = '';\n canvasStyles.width = 'calc(100%)';\n }\n\n return (\n <div style={{ position: 'relative', height: '100%' }}>\n <canvas style={canvasStyles} ref={canvasRef} />\n <div\n ref={overlayRef}\n {...mouseHandlers}\n onScroll={onScroll}\n className={overlayDivClassName}\n style={overlayDivStyles}\n >\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: 1,\n height: maxScrollY + 2000,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: maxScrollX + 5000,\n height: 1,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n </div>\n <textarea\n style={{ position: 'absolute', top: 0, left: 0, width: 1, height: 1, opacity: 0.01 }}\n ref={textAreaRef}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onFocus={(e) => e.target.select()}\n tabIndex={0}\n onKeyDown={onGridKeyDown}\n ></textarea>\n {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <input\n {...inputProps}\n type=\"text\"\n onFocus={(e) => e.target.select()}\n onChange={(e) => setEditValue(e.target.value)}\n />\n ))}\n </div>\n );\n});\n\nexport default Sheet;\n"],"names":["INITIAL_MAX_SCROLL","ORIGIN","ONE_ONE","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","MAX_XY","COLORS","selectionBorder","selectionBackground","gridLine","dragGhost","dropTarget","knobAreaBorder","headerBackground","headerText","headerActive","headerActiveText","headerSelected","headerSelectedText","SIZES","knobArea","headerWidth","headerHeight","minimumWidth","minimumHeight","resizeZone","scrollZone","scrollSpeed","DEFAULT_CELL_STYLE","textAlign","fontSize","marginRight","marginLeft","color","fontFamily","weight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","ARROW_KEYS","clamp","x","min","max","Math","seq","n","s","d","Array","from","length","map","_","i","isInRange","isInRangeLeft","isInRangeRight","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","clampXY","p","Infinity","getDirectionStep","direction","isSameXY","isSameSelection","a1","a2","b1","b2","isMaybeRowSelection","selection","left","right","isMaybeColumnSelection","top","bottom","isRowSelection","isColumnSelection","isCellSelection","isEmptySelection","isPointInsideSelection","point","normalizeSelection","y","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","data","floor","xx","findInDisplayData","displayData","start","step","cell","first","firstFilled","cellX","cellY","useMouse","hitmapRef","editMode","sourceData","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","onEdit","onCommit","onKnobAreaChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","useState","hitTarget","setHitTarget","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","rowDrag","setRowDrag","draggingKnob","setDraggingKnob","draggingSelection","setDraggingSelection","draggingRowSelection","setDraggingRowSelection","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","useMemo","maxX","maxY","refState","ref","useRef","current","getMousePosition","useCallback","e","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","getScrollPosition","scrollLeft","scrollTop","getMouseHit","hitmap","object","onPointerLeave","window","document","body","style","cursor","onPointerDown","columnToPixel","rowToPixel","pixelToCell","getIndentX","getIndentY","columns","rows","button","setPointerCapture","pointerId","minX","minY","selectedColumns","selectedRows","push","end","index","indices","size","scroll","anchor","edge","abs","asGroup","knobX","knobY","head","shiftKey","scrollToHead","onPointerUp","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","order","obj","onClick","onPointerMove","preventDefault","isDragging","currentScroll","newWidth","newHeight","anchorX","anchorY","headX","headY","xCellDiff","yCellDiff","shift","onDoubleClick","editCell","onContextMenu","event","mouseHandlers","kx1","ky1","kx2","ky2","sx1","sy1","sx2","sy2","fx1","fy1","fx2","fy2","srcY","value","source","srcX","useScroll","offset","maxScroll","onOffsetChange","onMaxScrollChange","absoluteToCell","maxScrollX","maxScrollY","growX","growY","scrollToCell","element","view","freeze","callback","w","h","offsetX","offsetY","cellToAbsolute","frozenX","frozenY","newX","newY","newOffset","setTimeout","scrollX","scrollY","useClipboardCopy","textAreaRef","useLayoutEffect","textArea","formatSelectionAsTSV","focus","preventScroll","select","activeElement","activeTagName","tagName","toLowerCase","contentEditable","useClipboardPaste","useEffect","onPaste","clipboardData","types","parsed","includes","pastedHtml","getData","parsePastedHtml","text","parsePastedText","addEventListener","removeEventListener","formatTSV","row","join","findTable","children","child","nodeName","maybeTable","html","div","createElement","innerHTML","trim","tableNode","tableChild","tr","td","str","textContent","replaceAll","split","cols","INITIAL_SIZE","makeCellLayout","indent","freezeX","freezeY","indentX","indentY","getBaseOriginFor","column","base","relative","getStart","getSize","columnToAbsolute","rowToAbsolute","pixelToIndex","pixel","layout","lookupIndex","frozen","pixelX","pixelY","absoluteToIndex","absoluteToColumn","absoluteToRow","getVisibleIndices","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","sizes","set","has","get","getOffset","j","tail","getEnd","last","mid","clearAfter","truncate","setSizer","initialSize","used","values","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","to","ensure","l","grow","round","shrink","getTail","setValue","getValue","hasValue","resolveSheetStyle","freezeColumns","freezeRows","hideGridlines","hideScrollBars","columnHeaderHeight","rowHeaderWidth","resolveCellStyle","optionalStyle","defaultStyle","applyAlignment","cellSize","imageWidth","alignment","renderSheet","context","cellStyle","secondarySelections","dragOffset","columnHeaders","columnHeaderStyle","dataOffset","canvas","width","height","clickables","resizeCanvas","clearRect","fillStyle","fillRect","selectionActive","rowSelectionActive","columnSelectionActive","resolveFrozenSelection","selected","hideKnob","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","font","content","isActive","isSelected","renderCell","excelHeaderString","selectedStyle","activeStyle","strokeRect","secondarySelection","span","setLineDash","shiftX","shiftY","resolveSelection","cellContent","defaultCellStyle","xCoord","yCoord","cellWidth","cellHeight","finalStyle","save","clip","fillText","items","HTMLImageElement","finalX","horizontalAlign","drawImage","measure","measureText","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxRight","actualBoundingBoxDescent","restore","devicePixelRatio","ratio","newCanvasWidth","newCanvasHeight","getContext","scale","num","t","String","fromCharCode","Sheet","forwardRef","props","canvasRef","overlayRef","setMaxScroll","setDataOffset","setSelection","setKnobArea","setDragOffset","setDropTarget","setEditCell","editValue","setEditValue","arrowKeyCommitMode","setArrowKeyCommitMode","useResizeObserver","canvasWidth","canvasHeight","cellReadOnly","readOnly","editKeys","editCellX","editCellY","columnLayout","cacheLayout","rowLayout","useImperativeHandle","onScrollChange","changeSelection","newSelection","scrollToAnchor","overlay","onSelectionChanged","commitEditingCell","startEditingCell","editDataValue","val","onScroll","animationFrameId","requestAnimationFrame","cancelAnimationFrame","onKeyDown","console","log","key","onGridKeyDown","metaKey","ctrlKey","which","x1","y1","x2","y2","keyCode","editKey","lastEditKey","setLastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextTextAlign","textX","textY","inputProps","autoFocus","position","padding","outline","border","input","inputComponent","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","React","className","opacity","autoComplete","autoCorrect","autoCapitalize","spellCheck","onFocus","tabIndex","type"],"mappings":"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"}