sheet-happens 0.0.12 → 0.0.13
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.d.ts +1 -0
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +8 -4
- package/dist/index.modern.js.map +1 -1
- package/package.json +1 -1
package/dist/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.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 rowHeaderWidth = 50;\nconst rowHeaderBackgroundColor = '#f8f9fa';\nconst rowHeaderTextColor = '#666666';\nconst rowHeaderSelectedBackgroundColor = '#e8eaed';\nconst columnHeaderHeight = 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;\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 Selection {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface Change {\n x: number;\n y: number;\n value: string | number | null;\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\nexport interface SheetProps {\n freezeColumns?: number;\n freezeRows?: number;\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 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?: (index: number, value: number) => void;\n onCellHeightChange?: (index: number, value: 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 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): CellCoordinate {\n let absX = 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 = 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 renderOnCanvas(\n context: CanvasRenderingContext2D,\n rowSizes: RowOrColumnSize,\n columnSizes: RowOrColumnSize,\n cellStyle: CellPropertyFunction<Style>,\n cellWidth: RowOrColumnPropertyFunction<number>,\n cellHeight: RowOrColumnPropertyFunction<number>,\n selection: Selection,\n knobDragInProgress: boolean,\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n knobArea: Selection,\n displayData: CellPropertyFunction<CellContentType>,\n dataOffset: CellCoordinate\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 = columnHeaderHeight;\n for (const y of rowSizes.index) {\n let xCoord1 = 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 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\n const selectionActive = selx1 !== -1 && selx2 !== -1 && sely1 !== -1 && sely2 !== -1;\n\n const p1 = cellToAbsCoordinate(selx1, sely1, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight);\n const p2 = cellToAbsCoordinate(selx2, sely2, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight);\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 context.fillRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n }\n\n // row header background\n context.fillStyle = rowHeaderBackgroundColor;\n context.fillRect(0, 0, rowHeaderWidth, context.canvas.height);\n\n // row header selection\n if (selectionActive) {\n context.fillStyle = rowHeaderSelectedBackgroundColor;\n context.fillRect(0, p1.y, rowHeaderWidth, p2.y - p1.y);\n }\n\n // column header background\n context.fillStyle = columnHeaderBackgroundColor;\n context.fillRect(0, 0, context.canvas.width, columnHeaderHeight);\n\n // column header selection\n if (selectionActive) {\n context.fillStyle = columnHeaderSelectedBackgroundColor;\n context.fillRect(p1.x, 0, p2.x - p1.x, columnHeaderHeight);\n }\n\n // grid\n context.strokeStyle = gridColor;\n context.lineWidth = 1;\n let startX = rowHeaderWidth;\n\n for (const col of columnSizes.index) {\n context.beginPath();\n context.moveTo(startX, 0);\n context.lineTo(startX, context.canvas.height);\n context.stroke();\n startX += cellWidth(col);\n }\n\n let startY = columnHeaderHeight;\n for (const row of rowSizes.index) {\n context.beginPath();\n context.moveTo(0, startY);\n context.lineTo(context.canvas.width, startY);\n context.stroke();\n startY += cellHeight(row);\n }\n\n // row header text\n startY = 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 xx = rowHeaderWidth * 0.5;\n const yy = startY + cellHeight(row) * 0.5;\n const cellContent = row + 1;\n context.fillText('' + cellContent, xx, yy);\n startY += cellHeight(row);\n }\n\n // column header text\n startX = 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 const chStyle = columnHeaderStyle(col);\n drawCell(context, chcontent, chStyle, defaultColumnHeaderStyle, startX, 0, cw, columnHeaderHeight);\n startX += cw;\n }\n\n // selection outline\n if (selectionActive) {\n context.strokeStyle = selBorderColor;\n context.lineWidth = 1;\n context.beginPath();\n context.rect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\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(kx1, ky1, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight);\n const knobPoint2 = cellToAbsCoordinate(\n kx2 + 1,\n ky2 + 1,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight\n );\n context.strokeStyle = knobAreaBorderColor;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n context.beginPath();\n context.rect(knobPoint1.x, knobPoint1.y - 1, knobPoint2.x - knobPoint1.x, knobPoint2.y - knobPoint1.y);\n context.stroke();\n context.setLineDash([]);\n }\n\n // selection knob\n if (selectionActive && !hideKnob) {\n context.fillStyle = selBorderColor;\n context.fillRect(p2.x - knobSize * 0.5, p2.y - knobSize * 0.5, knobSize, knobSize);\n }\n\n // content\n context.textBaseline = 'middle';\n\n // draw content\n let yCoord = columnHeaderHeight;\n for (const y of rowSizes.index) {\n let xCoord = 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({ x1: -1, y1: -1, x2: -1, y2: -1 });\n const [knobArea, setKnobArea] = useState({ 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<any>(null);\n const [rowResize, setRowResize] = useState<any>(null);\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(\n () => createRowOrColumnPropFunction(props.columnHeaders, null),\n [props.columnHeaders]\n );\n const columnHeaderStyle = useMemo(\n () => 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 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 () => calculateRowsOrColsSizes(freezeColumns, cellWidth, rowHeaderWidth, dataOffset.x, canvasWidth),\n [props.freezeColumns, cellWidth, dataOffset.x, canvasWidth]\n );\n\n const rowSizes = useMemo(\n () => calculateRowsOrColsSizes(freezeRows, cellHeight, columnHeaderHeight, dataOffset.y, canvasHeight),\n [props.freezeRows, cellHeight, dataOffset.y, canvasHeight]\n );\n\n const changeSelection = (x1: number, y1: number, x2: number, y2: number, scrollToP2 = true) => {\n setSelection({ x1, y1, x2, y2 });\n\n if (scrollToP2) {\n const newDataOffset = { x: dataOffset.x, y: dataOffset.y };\n let newScrollLeft = -1;\n let newScrollTop = -1;\n\n if (!columnSizes.index.includes(x2) || columnSizes.index[columnSizes.index.length - 1] === x2) {\n const increment = columnSizes.index[columnSizes.index.length - 1] <= x2 ? 1 : -1;\n const newX = Math.max(dataOffset.x, freezeColumns) + increment;\n newDataOffset.x = newX;\n newScrollLeft = newX * scrollSpeed;\n }\n\n if (!rowSizes.index.includes(y2) || rowSizes.index[rowSizes.index.length - 1] === y2) {\n const increment = rowSizes.index[rowSizes.index.length - 1] <= y2 ? 1 : -1;\n const newY = Math.max(dataOffset.y, 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 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.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(selx2, sely2, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight);\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]);\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 = columnHeaderHeight;\n let xCoord = 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 = 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 = 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 }, [displayData, props.cellWidth, props.cellHeight, canvasRef, columnSizes, rowSizes, dataOffset.x, dataOffset.y]);\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 knobDragInProgress,\n columnHeaders,\n columnHeaderStyle,\n knobArea,\n displayData,\n dataOffset\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 knobDragInProgress,\n columnHeaders,\n columnHeaderStyle,\n knobArea,\n displayData,\n dataOffset,\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 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 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].innerHTML;\n } else {\n str = p.innerHTML;\n }\n } else {\n str = td.innerHTML;\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.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 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 const rows = [];\n for (let y = dy1; y <= dy2; y++) {\n const row = [];\n for (let x = dx1; x <= dx2; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value);\n } else {\n row.push('');\n }\n }\n rows.push(row.join('\\t'));\n }\n const cptext = rows.join('\\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 ?? 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 };\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 }\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 (y < 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 setColumnResize({\n startX: end,\n oldWidth: cellWidth(index),\n colIdx: index,\n });\n return;\n }\n }\n }\n if (x < 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 setRowResize({\n startY: end,\n oldHeight: cellHeight(index),\n rowIdx: index,\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 commitEditingCell();\n }\n\n let scrollToP2 = true;\n\n if (x < rowHeaderWidth) {\n sel2.x = dataOffset.x + 100;\n scrollToP2 = false;\n setRowSelectionInProgress(true);\n } else {\n setRowSelectionInProgress(false);\n }\n\n if (y < columnHeaderHeight) {\n sel2.y = dataOffset.y + 100;\n scrollToP2 = false;\n setColumnSelectionInProgress(true);\n } else {\n setColumnSelectionInProgress(false);\n }\n\n setSelectionInProgress(true);\n changeSelection(sel1.x, sel1.y, sel2.x, sel2.y, scrollToP2);\n setEditCell({ x: -1, y: -1 });\n setEditKey('');\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\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 });\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 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 });\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 (props.onCellWidthChange && y < columnHeaderHeight) {\n let xx = 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 (props.onCellHeightChange && x < rowHeaderWidth) {\n let yy = 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.colIdx, 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.rowIdx, newHeight);\n }\n return;\n }\n\n if (selectionInProgress) {\n const sel2 = absCoordianteToCell(x, y, rowSizes, columnSizes);\n if (rowSelectionInProgress) {\n changeSelection(selection.x1, selection.y1, selection.x2, sel2.y, false);\n } else if (columnSelectionInProgress) {\n changeSelection(selection.x1, selection.y1, sel2.x, selection.y2, 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 (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 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 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 if (e.key === 'ArrowRight' || e.key === 'Tab') {\n sel2.x += 1;\n } else if (e.key === 'ArrowLeft') {\n sel2.x -= 1;\n } else if (e.key === 'ArrowUp') {\n sel2.y -= 1;\n } else if (e.key === 'ArrowDown') {\n sel2.y += 1;\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 > columnHeaderHeight && x > 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 );\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 return (\n <div style={{ position: 'relative', height: '100%' }}>\n <canvas\n style={{\n width: 'calc(100% - 14px)',\n height: 'calc(100% - 15px)',\n outline: '1px solid #ddd', // find another better solution ?\n }}\n ref={canvasRef}\n />\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={styles.sheetscroll}\n style={{\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 >\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 onFocus={(e) => e.target.select()}\n tabIndex={0}\n onKeyDown={onGridKeyDown}\n onKeyUp={onGridKeyUp}\n ></textarea>\n {editMode &&\n (input ?? (\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","rowHeaderWidth","rowHeaderBackgroundColor","rowHeaderTextColor","rowHeaderSelectedBackgroundColor","columnHeaderHeight","columnHeaderBackgroundColor","columnHeaderSelectedBackgroundColor","xBinSize","yBinSize","scrollSpeed","resizeColumnRowMouseThreshold","minimumColumnWidth","minimumRowHeight","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","cellToAbsCoordinate","dataOffset","indX","findIndex","indY","renderOnCanvas","cellStyle","selection","knobDragInProgress","columnHeaders","columnHeaderStyle","knobArea","displayData","clearRect","yCoord1","xCoord1","hideKnob","selx1","x1","selx2","x2","sely1","y1","sely2","y2","selectionActive","p1","p2","currentCol","includes","currentRow","strokeStyle","lineWidth","startX","col","moveTo","lineTo","stroke","startY","row","textBaseline","cw","ch","chcontent","chStyle","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","freezeColumns","freezeRows","useMemo","cellReadOnly","readOnly","sourceData","editData","editKeys","useEffect","currEditKey","changeSelection","scrollToP2","newDataOffset","newScrollLeft","newScrollTop","increment","newX","newY","setTimeout","current","scrollLeft","scrollTop","onSelectionChanged","sx1","sy1","sx2","sy2","knobCoordinates","c","hitMap","hitM","cellW","onClick","absX1","absY1","absX2","absY2","h","x1key","floor","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","replaceAll","value","onChange","pasteX2","pasteY2","rows","split","cols","dy1","dy2","dx1","dx2","join","cptext","commitEditingCell","startEditingCell","editDataValue","val","editDataKey","onScroll","Element","newMaxScroll","onMouseLeave","body","cursor","onMouseDown","button","clientX","left","clientY","top","hitTargetKeyX","hitTargetKeyY","colIdx","abs","oldWidth","rowIdx","oldHeight","sel2","sel1","onMouseUp","fx1","fy1","fx2","fy2","srcY","srcX","onMouseMove","onCellWidthChange","onCellHeightChange","newWidth","newHeight","cell","xCellDiff","yCellDiff","onDoubleClick","onKeyDown","key","onGridKeyDown","metaKey","ctrlKey","which","keyCode","shiftKey","onGridKeyUp","onContextMenu","ev","onRightClick","editTextPosition","editTextWidth","editTextHeight","editTextTextAlign","inputProps","autoFocus","position","outline","border","input","inputComponent","React","className","styles","sheetscroll","overflow","borderBottom","opacity","onFocus","tabIndex","onKeyUp","type"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,IAAMA,cAAc,GAAG,SAAvB;AACA,IAAMC,YAAY,GAAG,SAArB;AACA,IAAMC,QAAQ,GAAG,CAAjB;AACA,IAAMC,SAAS,GAAG,SAAlB;AACA,IAAMC,mBAAmB,GAAG,SAA5B;AACA,IAAMC,cAAc,GAAG,EAAvB;AACA,IAAMC,wBAAwB,GAAG,SAAjC;AACA,IAAMC,kBAAkB,GAAG,SAA3B;AACA,IAAMC,gCAAgC,GAAG,SAAzC;AACA,IAAMC,kBAAkB,GAAG,EAA3B;AACA,IAAMC,2BAA2B,GAAGJ,wBAApC;AACA,IAAMK,mCAAmC,GAAGH,gCAA5C;AACA,IAAMI,QAAQ,GAAG,EAAjB;AACA,IAAMC,QAAQ,GAAG,EAAjB;AACA,IAAMC,WAAW,GAAG,EAApB;AACA,IAAMC,6BAA6B,GAAG,CAAtC;AACA,IAAMC,kBAAkB,GAAG,EAA3B;AACA,IAAMC,gBAAgB,GAAG,EAAzB;AAEA,IAAMC,gBAAgB,GAAoB;AACtCC,EAAAA,SAAS,EAAE,MAD2B;AAEtCC,EAAAA,QAAQ,EAAE,EAF4B;AAGtCC,EAAAA,WAAW,EAAE,CAHyB;AAItCC,EAAAA,UAAU,EAAE,CAJ0B;AAKtCC,EAAAA,KAAK,EAAE,MAL+B;AAMtCC,EAAAA,UAAU,EAAE,YAN0B;AAOtCC,EAAAA,MAAM,EAAE,EAP8B;AAQtCC,EAAAA,SAAS,EAAE,EAR2B;AAStCC,EAAAA,eAAe,EAAE;AATqB,CAA1C;AAYA,IAAMC,wBAAwB,GAAoB;AAC9CT,EAAAA,SAAS,EAAE,QADmC;AAE9CC,EAAAA,QAAQ,EAAE,EAFoC;AAG9CC,EAAAA,WAAW,EAAE,CAHiC;AAI9CC,EAAAA,UAAU,EAAE,CAJkC;AAK9CC,EAAAA,KAAK,EAAE,MALuC;AAM9CC,EAAAA,UAAU,EAAE,YANkC;AAO9CC,EAAAA,MAAM,EAAE,EAPsC;AAQ9CC,EAAAA,SAAS,EAAE,EARmC;AAS9CC,EAAAA,eAAe,EAAE;AAT6B,CAAlD;;AAwHA,SAASE,YAAT,CAAsBC,MAAtB;8BAC8BA,MAAM,CAACC,qBAAP;MAAlBC,8BAAAA;MAAOC,+BAAAA;;gBACuBC;sCAAhCC;MAAkBC,2CAAQ;;AAChC,MAAIA,KAAK,GAAG,CAAZ,EAAe;AACXA,IAAAA,KAAK,GAAG,CAAR;AACH;;AACD,MAAMC,cAAc,GAAGC,IAAI,CAACC,KAAL,CAAWP,KAAK,GAAGI,KAAnB,CAAvB;AACA,MAAMI,eAAe,GAAGF,IAAI,CAACC,KAAL,CAAWN,MAAM,GAAGG,KAApB,CAAxB;;AAEA,MAAIN,MAAM,CAACE,KAAP,KAAiBK,cAAjB,IAAmCP,MAAM,CAACG,MAAP,KAAkBO,eAAzD,EAA0E;AACtE,QAAMC,OAAO,GAAGX,MAAM,CAACY,UAAP,CAAkB,IAAlB,CAAhB;;AACA,QAAID,OAAJ,EAAa;AACTX,MAAAA,MAAM,CAACE,KAAP,GAAeK,cAAf;AACAP,MAAAA,MAAM,CAACG,MAAP,GAAgBO,eAAhB;AACAC,MAAAA,OAAO,CAACE,KAAR,CAAcP,KAAd,EAAqBA,KAArB;AACH;;AACD,WAAO,IAAP;AACH;;AAED,SAAO,KAAP;AACH;;AAGD,SAASQ,6BAAT,CACIC,UADJ,EAEIC,YAFJ;AAII,MAAIC,KAAK,CAACC,OAAN,CAAcH,UAAd,CAAJ,EAA+B;AAC3B,WAAO,UAACI,aAAD;AACH,UAAIA,aAAa,IAAI,CAAjB,IAAsBA,aAAa,GAAGJ,UAAU,CAACK,MAArD,EAA6D;AACzD,eAAOL,UAAU,CAACI,aAAD,CAAjB;AACH,OAFD,MAEO;AACH,eAAOH,YAAP;AACH;AACJ,KAND;AAOH,GARD,MAQO,IAAI,OAAOD,UAAP,KAAsB,UAA1B,EAAsC;AACzC,WAAOA,UAAP;AACH,GAFM,MAEA,IAAIA,UAAU,KAAK,IAAf,IAAuBA,UAAU,KAAKM,SAA1C,EAAqD;AACxD,WAAO;AAAA,aAAMN,UAAN;AAAA,KAAP;AACH,GAFM,MAEA;AACH,WAAO;AAAA,aAAMC,YAAN;AAAA,KAAP;AACH;AACJ;;AAED,SAASM,sBAAT,CACIC,QADJ,EAEIP,YAFJ;AAII,MAAIC,KAAK,CAACC,OAAN,CAAcK,QAAd,CAAJ,EAA6B;AACzB,WAAO,UAACC,CAAD,EAAYC,CAAZ;AACH,UAAIA,CAAC,IAAI,CAAL,IAAUA,CAAC,GAAGF,QAAQ,CAACH,MAA3B,EAAmC;AAC/B,YAAII,CAAC,IAAI,CAAL,IAAUA,CAAC,GAAGD,QAAQ,CAACE,CAAD,CAAR,CAAYL,MAA9B,EAAsC;AAClC,iBAAOG,QAAQ,CAACE,CAAD,CAAR,CAAYD,CAAZ,CAAP;AACH,SAFD,MAEO;AACH,iBAAOR,YAAP;AACH;AACJ,OAND,MAMO;AACH,eAAOA,YAAP;AACH;AACJ,KAVD;AAWH,GAZD,MAYO,IAAI,OAAOO,QAAP,KAAoB,UAAxB,EAAoC;AACvC,WAAOA,QAAP;AACH,GAFM,MAEA,IAAIA,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,KAAKF,SAAtC,EAAiD;AACpD,WAAO;AAAA,aAAME,QAAN;AAAA,KAAP;AACH,GAFM,MAEA;AACH,WAAO;AAAA,aAAMP,YAAN;AAAA,KAAP;AACH;AACJ;;AAED,SAASU,cAAT,CACIC,KADJ,EAEIC,QAFJ,EAGIC,KAHJ,EAIIC,UAJJ,EAKIC,SALJ;AAOI,MAAI,CAACA,SAAL,EAAgB;AACZA,IAAAA,SAAS,GAAGF,KAAK,CAACxC,SAAlB;AACH;;AACD,MAAI0C,SAAS,KAAK,MAAlB,EAA0B;AACtB,WAAOJ,KAAK,GAAGE,KAAK,CAACrC,UAArB;AACH,GAFD,MAEO,IAAIuC,SAAS,KAAK,QAAlB,EAA4B;AAC/B,WAAOJ,KAAK,GAAGC,QAAQ,GAAG,GAAnB,GAAyBE,UAAU,GAAG,CAA7C;AACH,GAFM,MAEA,IAAIC,SAAS,KAAK,OAAlB,EAA2B;AAC9B,WAAOJ,KAAK,IAAIC,QAAQ,GAAGC,KAAK,CAACtC,WAAjB,GAA+BuC,UAAnC,CAAZ;AACH;;AACD,SAAOH,KAAP;AACH;;AAED,SAASK,QAAT,CACIrB,OADJ,EAEIsB,WAFJ,EAGIJ,KAHJ,EAIIzC,gBAJJ,EAKI8C,MALJ,EAMIC,MANJ,EAOIC,SAPJ,EAQIC,UARJ;AAUI,MAAIJ,WAAW,KAAK,IAApB,EAA0B;AACtB;AACH;;AACD,MAAMK,UAAU,GAAGC,iBAAiB,CAACV,KAAD,EAAQzC,gBAAR,CAApC;AACAuB,EAAAA,OAAO,CAAC6B,SAAR,GAAoBF,UAAU,CAAC7C,KAA/B;AACAkB,EAAAA,OAAO,CAAC8B,IAAR,GAAeH,UAAU,CAAC3C,MAAX,GAAoB,GAApB,GAA0B2C,UAAU,CAAChD,QAArC,GAAgD,KAAhD,GAAwDgD,UAAU,CAAC5C,UAAlF;AACAiB,EAAAA,OAAO,CAACtB,SAAR,GAAoBiD,UAAU,CAACjD,SAA/B;AAEA,MAAMqD,EAAE,GAAGP,MAAM,GAAGE,UAAU,GAAG,GAAjC;AAEA1B,EAAAA,OAAO,CAACgC,IAAR;AACAhC,EAAAA,OAAO,CAACiC,SAAR;AACAjC,EAAAA,OAAO,CAACkC,IAAR,CAAaX,MAAb,EAAqBC,MAArB,EAA6BC,SAA7B,EAAwCC,UAAxC;AACA1B,EAAAA,OAAO,CAACmC,IAAR;;AAEA,MAAIR,UAAU,CAACzC,eAAX,KAA+B,EAAnC,EAAuC;AACnCc,IAAAA,OAAO,CAAC6B,SAAR,GAAoBF,UAAU,CAACzC,eAA/B;AACAc,IAAAA,OAAO,CAACoC,QAAR,CAAiBb,MAAjB,EAAyBC,MAAzB,EAAiCC,SAAjC,EAA4CC,UAA5C;AACA1B,IAAAA,OAAO,CAAC6B,SAAR,GAAoBF,UAAU,CAAC7C,KAA/B;AACH;;AAED,MAAI,OAAOwC,WAAP,KAAuB,QAAvB,IAAmC,OAAOA,WAAP,KAAuB,QAA9D,EAAwE;AACpE,QAAMe,EAAE,GAAGtB,cAAc,CAACQ,MAAD,EAASE,SAAT,EAAoBE,UAApB,EAAgC,CAAhC,CAAzB;AACA3B,IAAAA,OAAO,CAACsC,QAAR,CAAiB,KAAKhB,WAAtB,EAAmCe,EAAnC,EAAuCN,EAAvC;AACH,GAHD,MAGO,IAAI,OAAOT,WAAP,KAAuB,QAA3B,EAAqC;AACxC,yDAAkBA,WAAW,CAACiB,KAA9B,wCAAqC;AAAA,UAA1BC,GAA0B;;AACjC,UAAIA,GAAG,CAACC,OAAJ,YAAuBC,gBAA3B,EAA6C;AACzC,YAAMC,CAAC,GAAGH,GAAG,CAACjD,KAAJ,IAAakC,SAAvB;AACA,YAAMmB,MAAM,GAAG7B,cAAc,CAACQ,MAAD,EAASE,SAAT,EAAoBE,UAApB,EAAgCgB,CAAhC,EAAmCH,GAAG,CAACK,eAAvC,CAA7B;AACA7C,QAAAA,OAAO,CAAC8C,SAAR,CACIN,GAAG,CAACC,OADR,EAEIG,MAAM,GAAGJ,GAAG,CAAC3B,CAFjB,EAGIkB,EAAE,GAAGS,GAAG,CAAC1B,CAHb,EAII0B,GAAG,CAACjD,KAAJ,IAAakC,SAJjB,EAKIe,GAAG,CAAChD,MAAJ,IAAckC,UALlB;AAOH,OAVD,MAUO,IAAI,OAAOc,GAAG,CAACC,OAAX,KAAuB,QAAvB,IAAmC,OAAOD,GAAG,CAACC,OAAX,KAAuB,QAA9D,EAAwE;AAC3E,YAAID,GAAG,CAACK,eAAR,EAAyB;AACrB7C,UAAAA,OAAO,CAACtB,SAAR,GAAoB8D,GAAG,CAACK,eAAxB;AACH;;AACD,YAAMD,OAAM,GAAG7B,cAAc,CAACQ,MAAD,EAASE,SAAT,EAAoBE,UAApB,EAAgC,CAAhC,EAAmCa,GAAG,CAACK,eAAvC,CAA7B;;AACA7C,QAAAA,OAAO,CAACsC,QAAR,CAAiB,KAAKE,GAAG,CAACC,OAA1B,EAAmCG,OAAM,GAAGJ,GAAG,CAAC3B,CAAhD,EAAmDkB,EAAE,GAAGS,GAAG,CAAC1B,CAA5D;AACH;AACJ;AACJ;;AACDd,EAAAA,OAAO,CAAC+C,OAAR;AACH;;AAED,SAASC,wBAAT,CACIC,WADJ,EAEIC,IAFJ,EAGIC,YAHJ,EAIIC,aAJJ,EAKIC,WALJ;AAOI,MAAMC,OAAO,GAAG,EAAhB;AACA,MAAMtC,KAAK,GAAG,EAAd;AACA,MAAMuC,GAAG,GAAG,EAAZ;AACA,MAAIC,IAAI,GAAG,CAAX;AAEAxC,EAAAA,KAAK,CAACyC,IAAN,CAAWN,YAAX;AACAG,EAAAA,OAAO,CAACG,IAAR,CAAaR,WAAW,GAAG,CAAd,GAAkB,CAAlB,GAAsBG,aAAnC;AACA,MAAIM,SAAS,GAAGT,WAAW,GAAG,CAAd,GAAkBC,IAAI,CAAC,CAAD,CAAtB,GAA4BA,IAAI,CAACE,aAAD,CAAhD;AACAI,EAAAA,IAAI,GAAGL,YAAY,GAAGO,SAAtB;AACAH,EAAAA,GAAG,CAACE,IAAJ,CAASD,IAAT;AAEA,MAAIG,GAAG,GAAGV,WAAW,GAAG,CAAd,GAAkB,CAAlB,GAAsBG,aAAa,GAAG,CAAhD;;AAEA,MAAIH,WAAW,GAAG,CAAlB,EAAqB;AACjB,WAAOU,GAAG,GAAGV,WAAb,EAA0BU,GAAG,EAA7B,EAAiC;AAC7BL,MAAAA,OAAO,CAACG,IAAR,CAAaE,GAAb;AACA3C,MAAAA,KAAK,CAACyC,IAAN,CAAWD,IAAX;AACAA,MAAAA,IAAI,GAAGA,IAAI,GAAGN,IAAI,CAACS,GAAD,CAAlB;AACAJ,MAAAA,GAAG,CAACE,IAAJ,CAASD,IAAT;AACH;;AACDG,IAAAA,GAAG,GAAG9D,IAAI,CAAC+D,GAAL,CAASR,aAAT,EAAwBH,WAAxB,CAAN;AACH;;AAED,SAAO,IAAP,EAAa;AACTK,IAAAA,OAAO,CAACG,IAAR,CAAaE,GAAb;AACA3C,IAAAA,KAAK,CAACyC,IAAN,CAAWD,IAAX;AACAA,IAAAA,IAAI,GAAGA,IAAI,GAAGN,IAAI,CAACS,GAAD,CAAlB;AACAJ,IAAAA,GAAG,CAACE,IAAJ,CAASD,IAAT;;AACA,QAAID,GAAG,CAACA,GAAG,CAAC9C,MAAJ,GAAa,CAAd,CAAH,IAAuB4C,WAA3B,EAAwC;AACpC;AACH;;AACDM,IAAAA,GAAG;AACN;;AACD,SAAO;AACHE,IAAAA,KAAK,EAAEP,OADJ;AAEHtC,IAAAA,KAAK,EAALA,KAFG;AAGHuC,IAAAA,GAAG,EAAHA;AAHG,GAAP;AAKH;;AAED,SAAS3B,iBAAT,CAA2BkC,aAA3B,EAAiDC,YAAjD;AACI,sBACOA,YADP,EAEOD,aAFP;AAIH;;AAED,SAASE,iBAAT,CAA2BC,GAA3B;AACI,MAAIC,CAAC,GAAG,EAAR;AACA,MAAIC,CAAC,GAAG,CAAR;;AACA,SAAOF,GAAG,GAAG,CAAb,EAAgB;AACZE,IAAAA,CAAC,GAAG,CAACF,GAAG,GAAG,CAAP,IAAY,EAAhB;AACAC,IAAAA,CAAC,GAAGE,MAAM,CAACC,YAAP,CAAoB,KAAKF,CAAzB,IAA8BD,CAAlC;AACAD,IAAAA,GAAG,GAAI,CAACA,GAAG,GAAGE,CAAP,IAAY,EAAb,GAAmB,CAAzB;AACH;;AACD,SAAOD,CAAC,IAAI,EAAZ;AACH;;AAED,SAASI,mBAAT,CACIC,IADJ,EAEIC,IAFJ,EAGIC,QAHJ,EAIIC,WAJJ;AAMI,MAAIC,KAAK,GAAG,CAAZ;AACA,MAAIC,KAAK,GAAG,CAAZ;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,WAAW,CAACb,KAAZ,CAAkBpD,MAAtC,EAA8CoE,CAAC,EAA/C,EAAmD;AAC/C,QAAIN,IAAI,IAAIG,WAAW,CAAC1D,KAAZ,CAAkB6D,CAAlB,CAAR,IAAgCN,IAAI,IAAIG,WAAW,CAACnB,GAAZ,CAAgBsB,CAAhB,CAA5C,EAAgE;AAC5DF,MAAAA,KAAK,GAAGD,WAAW,CAACb,KAAZ,CAAkBgB,CAAlB,CAAR;AACA;AACH;AACJ;;AACD,OAAK,IAAIA,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGJ,QAAQ,CAACZ,KAAT,CAAepD,MAAnC,EAA2CoE,EAAC,EAA5C,EAAgD;AAC5C,QAAIL,IAAI,IAAIC,QAAQ,CAACzD,KAAT,CAAe6D,EAAf,CAAR,IAA6BL,IAAI,IAAIC,QAAQ,CAAClB,GAAT,CAAasB,EAAb,CAAzC,EAA0D;AACtDD,MAAAA,KAAK,GAAGH,QAAQ,CAACZ,KAAT,CAAegB,EAAf,CAAR;AACA;AACH;AACJ;;AAED,SAAO;AAAEhE,IAAAA,CAAC,EAAE8D,KAAL;AAAY7D,IAAAA,CAAC,EAAE8D;AAAf,GAAP;AACH;;AAED,SAASE,mBAAT,CACIH,KADJ,EAEIC,KAFJ,EAGIH,QAHJ,EAIIC,WAJJ,EAKIK,UALJ,EAMItD,SANJ,EAOIC,UAPJ;AASI,MAAI6C,IAAI,GAAG3G,cAAX;AACA,MAAMoH,IAAI,GAAGN,WAAW,CAACb,KAAZ,CAAkBoB,SAAlB,CAA4B,UAACJ,CAAD;AAAA,WAAOA,CAAC,KAAKF,KAAb;AAAA,GAA5B,CAAb;;AACA,MAAIK,IAAI,KAAK,CAAC,CAAd,EAAiB;AACbT,IAAAA,IAAI,GAAGG,WAAW,CAAC1D,KAAZ,CAAkBgE,IAAlB,CAAP;AACH,GAFD,MAEO;AACH,SAAK,IAAIH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGE,UAAU,CAAClE,CAA/B,EAAkCgE,CAAC,EAAnC,EAAuC;AACnCN,MAAAA,IAAI,IAAI9C,SAAS,CAACoD,CAAD,CAAjB;AACH;;AACD,SAAK,IAAIA,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGF,KAApB,EAA2BE,GAAC,EAA5B,EAAgC;AAC5BN,MAAAA,IAAI,IAAI9C,SAAS,CAACoD,GAAD,CAAjB;AACH;AACJ;;AAED,MAAIL,IAAI,GAAGxG,kBAAX;AACA,MAAMkH,IAAI,GAAGT,QAAQ,CAACZ,KAAT,CAAeoB,SAAf,CAAyB,UAACJ,CAAD;AAAA,WAAOA,CAAC,KAAKD,KAAb;AAAA,GAAzB,CAAb;;AACA,MAAIM,IAAI,KAAK,CAAC,CAAd,EAAiB;AACbV,IAAAA,IAAI,GAAGC,QAAQ,CAACzD,KAAT,CAAekE,IAAf,CAAP;AACH,GAFD,MAEO;AACH,SAAK,IAAIL,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGE,UAAU,CAACjE,CAA/B,EAAkC+D,GAAC,EAAnC,EAAuC;AACnCL,MAAAA,IAAI,IAAI9C,UAAU,CAACmD,GAAD,CAAlB;AACH;;AACD,SAAK,IAAIA,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGD,KAApB,EAA2BC,GAAC,EAA5B,EAAgC;AAC5BL,MAAAA,IAAI,IAAI9C,UAAU,CAACmD,GAAD,CAAlB;AACH;AACJ;;AACD,SAAO;AAAEhE,IAAAA,CAAC,EAAE0D,IAAL;AAAWzD,IAAAA,CAAC,EAAE0D;AAAd,GAAP;AACH;;AAED,SAASW,cAAT,CACInF,OADJ,EAEIyE,QAFJ,EAGIC,WAHJ,EAIIU,SAJJ,EAKI3D,SALJ,EAMIC,UANJ,EAOI2D,SAPJ,EAQIC,kBARJ,EASIC,aATJ,EAUIC,iBAVJ,EAWIC,QAXJ,EAYIC,WAZJ,EAaIX,UAbJ;AAeI3F,EAAAA,YAAY,CAACY,OAAO,CAACX,MAAT,CAAZ;AACAW,EAAAA,OAAO,CAAC2F,SAAR,CAAkB,CAAlB,EAAqB,CAArB,EAAwB3F,OAAO,CAACX,MAAR,CAAeE,KAAvC,EAA8CS,OAAO,CAACX,MAAR,CAAeG,MAA7D;AACAQ,EAAAA,OAAO,CAAC6B,SAAR,GAAoB,OAApB;AACA7B,EAAAA,OAAO,CAACoC,QAAR,CAAiB,CAAjB,EAAoB,CAApB,EAAuBpC,OAAO,CAACX,MAAR,CAAeE,KAAtC,EAA6CS,OAAO,CAACX,MAAR,CAAeG,MAA5D;AAGA,MAAIoG,OAAO,GAAG5H,kBAAd;;AACA,wDAAgByG,QAAQ,CAACZ,KAAzB,2CAAgC;AAAA,QAArB/C,CAAqB;AAC5B,QAAI+E,OAAO,GAAGjI,cAAd;;AACA,0DAAgB8G,WAAW,CAACb,KAA5B,2CAAmC;AAAA,UAAxBhD,CAAwB;AAC/B,UAAMK,KAAK,GAAGkE,SAAS,CAACvE,CAAD,EAAIC,CAAJ,CAAvB;;AACA,UAAII,KAAK,CAACjC,SAAV,EAAqB;AACjBe,QAAAA,OAAO,CAAC6B,SAAR,GAAoBX,KAAK,CAACjC,SAA1B;AACAe,QAAAA,OAAO,CAACoC,QAAR,CAAiByD,OAAjB,EAA0BD,OAA1B,EAAmCnE,SAAS,CAACZ,CAAD,CAA5C,EAAiDa,UAAU,CAACZ,CAAD,CAA3D;AACH;;AACD+E,MAAAA,OAAO,IAAIpE,SAAS,CAACZ,CAAD,CAApB;AACH;;AACD+E,IAAAA,OAAO,IAAIlE,UAAU,CAACZ,CAAD,CAArB;AACH;;AAED,MAAIgF,QAAQ,GAAG,KAAf;AAEA,MAAIC,KAAK,GAAGV,SAAS,CAACW,EAAtB;AACA,MAAIC,KAAK,GAAGZ,SAAS,CAACa,EAAtB;;AAEA,MAAIb,SAAS,CAACW,EAAV,GAAeX,SAAS,CAACa,EAA7B,EAAiC;AAC7BH,IAAAA,KAAK,GAAGV,SAAS,CAACa,EAAlB;AACAD,IAAAA,KAAK,GAAGZ,SAAS,CAACW,EAAlB;AACH;;AAED,MAAIG,KAAK,GAAGd,SAAS,CAACe,EAAtB;AACA,MAAIC,KAAK,GAAGhB,SAAS,CAACiB,EAAtB;;AAEA,MAAIjB,SAAS,CAACe,EAAV,GAAef,SAAS,CAACiB,EAA7B,EAAiC;AAC7BH,IAAAA,KAAK,GAAGd,SAAS,CAACiB,EAAlB;AACAD,IAAAA,KAAK,GAAGhB,SAAS,CAACe,EAAlB;AACH;;AAED,MAAMG,eAAe,GAAGR,KAAK,KAAK,CAAC,CAAX,IAAgBE,KAAK,KAAK,CAAC,CAA3B,IAAgCE,KAAK,KAAK,CAAC,CAA3C,IAAgDE,KAAK,KAAK,CAAC,CAAnF;AAEA,MAAMG,EAAE,GAAG1B,mBAAmB,CAACiB,KAAD,EAAQI,KAAR,EAAe1B,QAAf,EAAyBC,WAAzB,EAAsCK,UAAtC,EAAkDtD,SAAlD,EAA6DC,UAA7D,CAA9B;AACA,MAAM+E,EAAE,GAAG3B,mBAAmB,CAACmB,KAAD,EAAQI,KAAR,EAAe5B,QAAf,EAAyBC,WAAzB,EAAsCK,UAAtC,EAAkDtD,SAAlD,EAA6DC,UAA7D,CAA9B;AACA+E,EAAAA,EAAE,CAAC5F,CAAH,IAAQY,SAAS,CAACwE,KAAD,CAAjB;AACAQ,EAAAA,EAAE,CAAC3F,CAAH,IAAQY,UAAU,CAAC2E,KAAD,CAAlB;;AAEA,MAAIG,EAAE,CAAC3F,CAAH,IAAQ4F,EAAE,CAAC5F,CAAf,EAAkB;AAEd4F,IAAAA,EAAE,CAAC5F,CAAH,GAAO2F,EAAE,CAAC3F,CAAV;AACA,QAAI6F,UAAU,GAAGX,KAAjB;;AACA,WAAOrB,WAAW,CAACb,KAAZ,CAAkB8C,QAAlB,CAA2BD,UAA3B,CAAP,EAA+C;AAC3CD,MAAAA,EAAE,CAAC5F,CAAH,IAAQY,SAAS,CAACiF,UAAD,CAAjB;AACAA,MAAAA,UAAU;AACb;;AACDZ,IAAAA,QAAQ,GAAG,IAAX;AACH;;AAED,MAAIU,EAAE,CAAC1F,CAAH,IAAQ2F,EAAE,CAAC3F,CAAf,EAAkB;AAEd2F,IAAAA,EAAE,CAAC3F,CAAH,GAAO0F,EAAE,CAAC1F,CAAV;AACA,QAAI8F,UAAU,GAAGT,KAAjB;;AACA,WAAO1B,QAAQ,CAACZ,KAAT,CAAe8C,QAAf,CAAwBC,UAAxB,CAAP,EAA4C;AACxCH,MAAAA,EAAE,CAAC3F,CAAH,IAAQY,UAAU,CAACkF,UAAD,CAAlB;AACAA,MAAAA,UAAU;AACb;;AACDd,IAAAA,QAAQ,GAAG,IAAX;AACH;;AAGD,MAAIS,eAAJ,EAAqB;AACjBvG,IAAAA,OAAO,CAAC6B,SAAR,GAAoBrE,YAApB;AACAwC,IAAAA,OAAO,CAACoC,QAAR,CAAiBoE,EAAE,CAAC3F,CAApB,EAAuB2F,EAAE,CAAC1F,CAA1B,EAA6B2F,EAAE,CAAC5F,CAAH,GAAO2F,EAAE,CAAC3F,CAAvC,EAA0C4F,EAAE,CAAC3F,CAAH,GAAO0F,EAAE,CAAC1F,CAApD;AACH;;AAGDd,EAAAA,OAAO,CAAC6B,SAAR,GAAoBhE,wBAApB;AACAmC,EAAAA,OAAO,CAACoC,QAAR,CAAiB,CAAjB,EAAoB,CAApB,EAAuBxE,cAAvB,EAAuCoC,OAAO,CAACX,MAAR,CAAeG,MAAtD;;AAGA,MAAI+G,eAAJ,EAAqB;AACjBvG,IAAAA,OAAO,CAAC6B,SAAR,GAAoB9D,gCAApB;AACAiC,IAAAA,OAAO,CAACoC,QAAR,CAAiB,CAAjB,EAAoBoE,EAAE,CAAC1F,CAAvB,EAA0BlD,cAA1B,EAA0C6I,EAAE,CAAC3F,CAAH,GAAO0F,EAAE,CAAC1F,CAApD;AACH;;AAGDd,EAAAA,OAAO,CAAC6B,SAAR,GAAoB5D,2BAApB;AACA+B,EAAAA,OAAO,CAACoC,QAAR,CAAiB,CAAjB,EAAoB,CAApB,EAAuBpC,OAAO,CAACX,MAAR,CAAeE,KAAtC,EAA6CvB,kBAA7C;;AAGA,MAAIuI,eAAJ,EAAqB;AACjBvG,IAAAA,OAAO,CAAC6B,SAAR,GAAoB3D,mCAApB;AACA8B,IAAAA,OAAO,CAACoC,QAAR,CAAiBoE,EAAE,CAAC3F,CAApB,EAAuB,CAAvB,EAA0B4F,EAAE,CAAC5F,CAAH,GAAO2F,EAAE,CAAC3F,CAApC,EAAuC7C,kBAAvC;AACH;;AAGDgC,EAAAA,OAAO,CAAC6G,WAAR,GAAsBnJ,SAAtB;AACAsC,EAAAA,OAAO,CAAC8G,SAAR,GAAoB,CAApB;AACA,MAAIC,MAAM,GAAGnJ,cAAb;;AAEA,wDAAkB8G,WAAW,CAACb,KAA9B,2CAAqC;AAAA,QAA1BmD,GAA0B;AACjChH,IAAAA,OAAO,CAACiC,SAAR;AACAjC,IAAAA,OAAO,CAACiH,MAAR,CAAeF,MAAf,EAAuB,CAAvB;AACA/G,IAAAA,OAAO,CAACkH,MAAR,CAAeH,MAAf,EAAuB/G,OAAO,CAACX,MAAR,CAAeG,MAAtC;AACAQ,IAAAA,OAAO,CAACmH,MAAR;AACAJ,IAAAA,MAAM,IAAItF,SAAS,CAACuF,GAAD,CAAnB;AACH;;AAED,MAAII,MAAM,GAAGpJ,kBAAb;;AACA,wDAAkByG,QAAQ,CAACZ,KAA3B,2CAAkC;AAAA,QAAvBwD,GAAuB;AAC9BrH,IAAAA,OAAO,CAACiC,SAAR;AACAjC,IAAAA,OAAO,CAACiH,MAAR,CAAe,CAAf,EAAkBG,MAAlB;AACApH,IAAAA,OAAO,CAACkH,MAAR,CAAelH,OAAO,CAACX,MAAR,CAAeE,KAA9B,EAAqC6H,MAArC;AACApH,IAAAA,OAAO,CAACmH,MAAR;AACAC,IAAAA,MAAM,IAAI1F,UAAU,CAAC2F,GAAD,CAApB;AACH;;AAGDD,EAAAA,MAAM,GAAGpJ,kBAAT;AACAgC,EAAAA,OAAO,CAACsH,YAAR,GAAuB,QAAvB;AACAtH,EAAAA,OAAO,CAACtB,SAAR,GAAoB,QAApB;AACAsB,EAAAA,OAAO,CAAC8B,IAAR,GAAerD,gBAAgB,CAACE,QAAjB,GAA4B,KAA5B,GAAoCF,gBAAgB,CAACM,UAApE;AACAiB,EAAAA,OAAO,CAAC6B,SAAR,GAAoB/D,kBAApB;;AACA,wDAAkB2G,QAAQ,CAACZ,KAA3B,2CAAkC;AAAA,QAAvBwD,IAAuB;AAC9B,QAAMhF,EAAE,GAAGzE,cAAc,GAAG,GAA5B;AACA,QAAMmE,EAAE,GAAGqF,MAAM,GAAG1F,UAAU,CAAC2F,IAAD,CAAV,GAAkB,GAAtC;AACA,QAAM/F,WAAW,GAAG+F,IAAG,GAAG,CAA1B;AACArH,IAAAA,OAAO,CAACsC,QAAR,CAAiB,KAAKhB,WAAtB,EAAmCe,EAAnC,EAAuCN,EAAvC;AACAqF,IAAAA,MAAM,IAAI1F,UAAU,CAAC2F,IAAD,CAApB;AACH;;AAGDN,EAAAA,MAAM,GAAGnJ,cAAT;AACAoC,EAAAA,OAAO,CAACsH,YAAR,GAAuB,QAAvB;AACAtH,EAAAA,OAAO,CAACtB,SAAR,GAAoB,QAApB;;AACA,wDAAkBgG,WAAW,CAACb,KAA9B,2CAAqC;AAAA,QAA1BmD,IAA0B;AACjC,QAAMO,EAAE,GAAG9F,SAAS,CAACuF,IAAD,CAApB;AACA,QAAMQ,EAAE,GAAGjC,aAAa,CAACyB,IAAD,CAAxB;AACA,QAAMS,SAAS,GAAGD,EAAE,KAAK,IAAP,GAAcA,EAAd,GAAmBxD,iBAAiB,CAACgD,IAAG,GAAG,CAAP,CAAtD;AACA,QAAMU,OAAO,GAAGlC,iBAAiB,CAACwB,IAAD,CAAjC;AACA3F,IAAAA,QAAQ,CAACrB,OAAD,EAAUyH,SAAV,EAAqBC,OAArB,EAA8BvI,wBAA9B,EAAwD4H,MAAxD,EAAgE,CAAhE,EAAmEQ,EAAnE,EAAuEvJ,kBAAvE,CAAR;AACA+I,IAAAA,MAAM,IAAIQ,EAAV;AACH;;AAGD,MAAIhB,eAAJ,EAAqB;AACjBvG,IAAAA,OAAO,CAAC6G,WAAR,GAAsBtJ,cAAtB;AACAyC,IAAAA,OAAO,CAAC8G,SAAR,GAAoB,CAApB;AACA9G,IAAAA,OAAO,CAACiC,SAAR;AACAjC,IAAAA,OAAO,CAACkC,IAAR,CAAasE,EAAE,CAAC3F,CAAhB,EAAmB2F,EAAE,CAAC1F,CAAtB,EAAyB2F,EAAE,CAAC5F,CAAH,GAAO2F,EAAE,CAAC3F,CAAnC,EAAsC4F,EAAE,CAAC3F,CAAH,GAAO0F,EAAE,CAAC1F,CAAhD;AACAd,IAAAA,OAAO,CAACmH,MAAR;AACH;;AAGD,MAAI7B,kBAAJ,EAAwB;AACpB,QAAIqC,GAAG,GAAGlC,QAAQ,CAACO,EAAnB;AACA,QAAI4B,GAAG,GAAGnC,QAAQ,CAACS,EAAnB;;AACA,QAAIT,QAAQ,CAACO,EAAT,GAAcP,QAAQ,CAACS,EAA3B,EAA+B;AAC3ByB,MAAAA,GAAG,GAAGlC,QAAQ,CAACS,EAAf;AACA0B,MAAAA,GAAG,GAAGnC,QAAQ,CAACO,EAAf;AACH;;AAED,QAAI6B,GAAG,GAAGpC,QAAQ,CAACW,EAAnB;AACA,QAAI0B,GAAG,GAAGrC,QAAQ,CAACa,EAAnB;;AACA,QAAIb,QAAQ,CAACW,EAAT,GAAcX,QAAQ,CAACa,EAA3B,EAA+B;AAC3BuB,MAAAA,GAAG,GAAGpC,QAAQ,CAACa,EAAf;AACAwB,MAAAA,GAAG,GAAGrC,QAAQ,CAACW,EAAf;AACH;;AACD,QAAM2B,UAAU,GAAGjD,mBAAmB,CAAC6C,GAAD,EAAME,GAAN,EAAWpD,QAAX,EAAqBC,WAArB,EAAkCK,UAAlC,EAA8CtD,SAA9C,EAAyDC,UAAzD,CAAtC;AACA,QAAMsG,UAAU,GAAGlD,mBAAmB,CAClC8C,GAAG,GAAG,CAD4B,EAElCE,GAAG,GAAG,CAF4B,EAGlCrD,QAHkC,EAIlCC,WAJkC,EAKlCK,UALkC,EAMlCtD,SANkC,EAOlCC,UAPkC,CAAtC;AASA1B,IAAAA,OAAO,CAAC6G,WAAR,GAAsBlJ,mBAAtB;AACAqC,IAAAA,OAAO,CAACiI,WAAR,CAAoB,CAAC,CAAD,EAAI,CAAJ,CAApB;AACAjI,IAAAA,OAAO,CAAC8G,SAAR,GAAoB,CAApB;AACA9G,IAAAA,OAAO,CAACiC,SAAR;AACAjC,IAAAA,OAAO,CAACkC,IAAR,CAAa6F,UAAU,CAAClH,CAAxB,EAA2BkH,UAAU,CAACjH,CAAX,GAAe,CAA1C,EAA6CkH,UAAU,CAACnH,CAAX,GAAekH,UAAU,CAAClH,CAAvE,EAA0EmH,UAAU,CAAClH,CAAX,GAAeiH,UAAU,CAACjH,CAApG;AACAd,IAAAA,OAAO,CAACmH,MAAR;AACAnH,IAAAA,OAAO,CAACiI,WAAR,CAAoB,EAApB;AACH;;AAGD,MAAI1B,eAAe,IAAI,CAACT,QAAxB,EAAkC;AAC9B9F,IAAAA,OAAO,CAAC6B,SAAR,GAAoBtE,cAApB;AACAyC,IAAAA,OAAO,CAACoC,QAAR,CAAiBqE,EAAE,CAAC5F,CAAH,GAAOpD,QAAQ,GAAG,GAAnC,EAAwCgJ,EAAE,CAAC3F,CAAH,GAAOrD,QAAQ,GAAG,GAA1D,EAA+DA,QAA/D,EAAyEA,QAAzE;AACH;;AAGDuC,EAAAA,OAAO,CAACsH,YAAR,GAAuB,QAAvB;AAGA,MAAI9F,MAAM,GAAGxD,kBAAb;;AACA,wDAAgByG,QAAQ,CAACZ,KAAzB,2CAAgC;AAAA,QAArB/C,EAAqB;AAC5B,QAAIS,MAAM,GAAG3D,cAAb;;AACA,QAAM4J,GAAE,GAAG9F,UAAU,CAACZ,EAAD,CAArB;;AACA,0DAAgB4D,WAAW,CAACb,KAA5B,2CAAmC;AAAA,UAAxBhD,EAAwB;;AAC/B,UAAMS,YAAW,GAAGoE,WAAW,CAAC7E,EAAD,EAAIC,EAAJ,CAA/B;;AACA,UAAMyG,GAAE,GAAG9F,SAAS,CAACZ,EAAD,CAApB;;AACA,UAAIS,YAAW,KAAK,IAAhB,IAAwBA,YAAW,KAAKZ,SAA5C,EAAuD;AACnD,YAAMQ,MAAK,GAAGkE,SAAS,CAACvE,EAAD,EAAIC,EAAJ,CAAvB;;AACAO,QAAAA,QAAQ,CAACrB,OAAD,EAAUsB,YAAV,EAAuBJ,MAAvB,EAA8BzC,gBAA9B,EAAgD8C,MAAhD,EAAwDC,MAAxD,EAAgE+F,GAAhE,EAAoEC,GAApE,CAAR;AACH;;AACDjG,MAAAA,MAAM,IAAIgG,GAAV;AACH;;AACD/F,IAAAA,MAAM,IAAIgG,GAAV;AACH;AACJ;;AAED,SAASU,KAAT,CAAeC,KAAf;;;AACI,MAAMC,SAAS,GAAGC,MAAM,CAAoB,IAApB,CAAxB;AACA,MAAMC,UAAU,GAAGD,MAAM,CAAiB,IAAjB,CAAzB;AACA,MAAME,oBAAoB,GAAGF,MAAM,CAAsB,IAAtB,CAAnC;;kBACkCG,QAAQ,CAAC;AAAE3H,IAAAA,CAAC,EAAE,IAAL;AAAWC,IAAAA,CAAC,EAAE;AAAd,GAAD;MAAnC2H;MAAWC;;mBACkBF,QAAQ,CAAC;AAAE3H,IAAAA,CAAC,EAAE,CAAL;AAAQC,IAAAA,CAAC,EAAE;AAAX,GAAD;MAArCiE;MAAY4D;;mBACeH,QAAQ,CAAC;AAAExC,IAAAA,EAAE,EAAE,CAAC,CAAP;AAAUI,IAAAA,EAAE,EAAE,CAAC,CAAf;AAAkBF,IAAAA,EAAE,EAAE,CAAC,CAAvB;AAA0BI,IAAAA,EAAE,EAAE,CAAC;AAA/B,GAAD;MAAnCjB;MAAWuD;;mBACcJ,QAAQ,CAAC;AAAExC,IAAAA,EAAE,EAAE,CAAC,CAAP;AAAUI,IAAAA,EAAE,EAAE,CAAC,CAAf;AAAkBF,IAAAA,EAAE,EAAE,CAAC,CAAvB;AAA0BI,IAAAA,EAAE,EAAE,CAAC;AAA/B,GAAD;MAAjCb;MAAUoD;;mBACeL,QAAQ,CAAC;AAAE3H,IAAAA,CAAC,EAAE,CAAC,CAAN;AAASC,IAAAA,CAAC,EAAE,CAAC;AAAb,GAAD;MAAjCgI;MAAUC;;mBACiBP,QAAQ,CAAkB,EAAlB;MAAnCQ;MAAWC;;mBACYT,QAAQ,CAAS,EAAT;MAA/BU;MAASC;;mBACoCX,QAAQ,CAAC,KAAD;MAArDY;MAAoBC;;mBACab,QAAQ,CAAC,KAAD;MAAzCc;MAAcC;;oBAC+Bf,QAAQ,CAAC,KAAD;MAArDlD;MAAoBkE;;oBAC2BhB,QAAQ,CAAC,KAAD;MAAvDiB;MAAqBC;;oBACYlB,QAAQ,CAAM,IAAN;MAAzCmB;MAAcC;;oBACapB,QAAQ,CAAM,IAAN;MAAnCqB;MAAWC;;oBAC0CtB,QAAQ,CAAC,KAAD;MAA7DuB;MAAwBC;;oBACmCxB,QAAQ,CAAC,KAAD;MAAnEyB;MAA2BC;;oBAC4C1B,QAAQ,CAAM;AACxF3H,IAAAA,CAAC,EAAE,CAAC,CADoF;AAExFC,IAAAA,CAAC,EAAE,CAAC,CAFoF;AAGxFqJ,IAAAA,SAAS,EAAE;AAH6E,GAAN;MAA/EC;MAAiCC;;2BAK2BC,iBAAiB,CAAC;AAAEC,IAAAA,GAAG,EAAEnC;AAAP,GAAD;iDAA5E7I;MAAOiL,iDAAc;iDAAMhL;MAAQiL,kDAAe;;AAE1D,MAAMC,aAAa,GAAGvC,KAAK,CAACuC,aAAN,IAAuB,CAA7C;AACA,MAAMC,UAAU,GAAGxC,KAAK,CAACwC,UAAN,IAAoB,CAAvC;AAEA,MAAMlJ,SAAS,GAAGmJ,OAAO,CAAC;AAAA,WAAMzK,6BAA6B,CAACgI,KAAK,CAAC1G,SAAP,EAAkB,GAAlB,CAAnC;AAAA,GAAD,EAA4D,CAAC0G,KAAK,CAAC1G,SAAP,CAA5D,CAAzB;AACA,MAAMC,UAAU,GAAGkJ,OAAO,CAAC;AAAA,WAAMzK,6BAA6B,CAACgI,KAAK,CAACzG,UAAP,EAAmB,EAAnB,CAAnC;AAAA,GAAD,EAA4D,CAACyG,KAAK,CAACzG,UAAP,CAA5D,CAA1B;AACA,MAAM6D,aAAa,GAAGqF,OAAO,CACzB;AAAA,WAAMzK,6BAA6B,CAACgI,KAAK,CAAC5C,aAAP,EAAsB,IAAtB,CAAnC;AAAA,GADyB,EAEzB,CAAC4C,KAAK,CAAC5C,aAAP,CAFyB,CAA7B;AAIA,MAAMC,iBAAiB,GAAGoF,OAAO,CAC7B;AAAA,WAAMzK,6BAA6B,CAACgI,KAAK,CAAC3C,iBAAP,EAA0B,EAA1B,CAAnC;AAAA,GAD6B,EAE7B,CAAC2C,KAAK,CAAC3C,iBAAP,CAF6B,CAAjC;AAKA,MAAMqF,YAAY,GAAGD,OAAO,CAAC;AAAA,WAAMjK,sBAAsB,CAACwH,KAAK,CAAC2C,QAAP,EAAiB,KAAjB,CAA5B;AAAA,GAAD,EAAsD,CAAC3C,KAAK,CAAC2C,QAAP,CAAtD,CAA5B;AAEA,MAAMC,UAAU,GAAGH,OAAO,CAAC;AAAA,WAAMjK,sBAAsB,CAACwH,KAAK,CAAC4C,UAAP,EAAmB,IAAnB,CAA5B;AAAA,GAAD,EAAuD,CAAC5C,KAAK,CAAC4C,UAAP,CAAvD,CAA1B;AACA,MAAMrF,WAAW,GAAGkF,OAAO,CAAC;AAAA,WAAMjK,sBAAsB,CAACwH,KAAK,CAACzC,WAAP,EAAoB,EAApB,CAA5B;AAAA,GAAD,EAAsD,CAACyC,KAAK,CAACzC,WAAP,CAAtD,CAA3B;AACA,MAAMsF,QAAQ,GAAGJ,OAAO,CAAC;AAAA,WAAMjK,sBAAsB,CAACwH,KAAK,CAAC6C,QAAP,EAAiB,EAAjB,CAA5B;AAAA,GAAD,EAAmD,CAAC7C,KAAK,CAAC6C,QAAP,CAAnD,CAAxB;AACA,MAAMC,QAAQ,GAAGL,OAAO,CAAC;AAAA,WAAMjK,sBAAsB,CAACwH,KAAK,CAAC8C,QAAP,EAAiB,EAAjB,CAA5B;AAAA,GAAD,EAAmD,CAAC9C,KAAK,CAAC8C,QAAP,CAAnD,CAAxB;AACA,MAAM7F,SAAS,GAAGwF,OAAO,CAAC;AAAA,WAAMjK,sBAAsB,CAACwH,KAAK,CAAC/C,SAAP,EAAkB3G,gBAAlB,CAA5B;AAAA,GAAD,EAAkE,CAAC0J,KAAK,CAAC/C,SAAP,CAAlE,CAAzB;AAEA8F,EAAAA,SAAS,CAAC;AACN,QAAMC,WAAW,GAAGF,QAAQ,GAAGA,QAAQ,CAACnC,QAAQ,CAACjI,CAAV,EAAaiI,QAAQ,CAAChI,CAAtB,CAAX,GAAsC,EAAlE;;AACA,QAAIqK,WAAW,KAAKjC,OAApB,EAA6B;AACzBH,MAAAA,WAAW,CAAC;AAAElI,QAAAA,CAAC,EAAE,CAAC,CAAN;AAASC,QAAAA,CAAC,EAAE,CAAC;AAAb,OAAD,CAAX;AACAqI,MAAAA,UAAU,CAAC,EAAD,CAAV;AACH;AACJ,GANQ,EAMN,CAAC8B,QAAD,CANM,CAAT;AAQA,MAAMvG,WAAW,GAAGkG,OAAO,CACvB;AAAA,WAAM5H,wBAAwB,CAAC0H,aAAD,EAAgBjJ,SAAhB,EAA2B7D,cAA3B,EAA2CmH,UAAU,CAAClE,CAAtD,EAAyD2J,WAAzD,CAA9B;AAAA,GADuB,EAEvB,CAACrC,KAAK,CAACuC,aAAP,EAAsBjJ,SAAtB,EAAiCsD,UAAU,CAAClE,CAA5C,EAA+C2J,WAA/C,CAFuB,CAA3B;AAKA,MAAM/F,QAAQ,GAAGmG,OAAO,CACpB;AAAA,WAAM5H,wBAAwB,CAAC2H,UAAD,EAAajJ,UAAb,EAAyB1D,kBAAzB,EAA6C+G,UAAU,CAACjE,CAAxD,EAA2D2J,YAA3D,CAA9B;AAAA,GADoB,EAEpB,CAACtC,KAAK,CAACwC,UAAP,EAAmBjJ,UAAnB,EAA+BqD,UAAU,CAACjE,CAA1C,EAA6C2J,YAA7C,CAFoB,CAAxB;;AAKA,MAAMW,eAAe,GAAG,SAAlBA,eAAkB,CAACpF,EAAD,EAAaI,EAAb,EAAyBF,EAAzB,EAAqCI,EAArC,EAAiD+E,UAAjD;QAAiDA;AAAAA,MAAAA,aAAa;;;AAClFzC,IAAAA,YAAY,CAAC;AAAE5C,MAAAA,EAAE,EAAFA,EAAF;AAAMI,MAAAA,EAAE,EAAFA,EAAN;AAAUF,MAAAA,EAAE,EAAFA,EAAV;AAAcI,MAAAA,EAAE,EAAFA;AAAd,KAAD,CAAZ;;AAEA,QAAI+E,UAAJ,EAAgB;AACZ,UAAMC,aAAa,GAAG;AAAEzK,QAAAA,CAAC,EAAEkE,UAAU,CAAClE,CAAhB;AAAmBC,QAAAA,CAAC,EAAEiE,UAAU,CAACjE;AAAjC,OAAtB;AACA,UAAIyK,aAAa,GAAG,CAAC,CAArB;AACA,UAAIC,YAAY,GAAG,CAAC,CAApB;;AAEA,UAAI,CAAC9G,WAAW,CAACb,KAAZ,CAAkB8C,QAAlB,CAA2BT,EAA3B,CAAD,IAAmCxB,WAAW,CAACb,KAAZ,CAAkBa,WAAW,CAACb,KAAZ,CAAkBpD,MAAlB,GAA2B,CAA7C,MAAoDyF,EAA3F,EAA+F;AAC3F,YAAMuF,SAAS,GAAG/G,WAAW,CAACb,KAAZ,CAAkBa,WAAW,CAACb,KAAZ,CAAkBpD,MAAlB,GAA2B,CAA7C,KAAmDyF,EAAnD,GAAwD,CAAxD,GAA4D,CAAC,CAA/E;AACA,YAAMwF,IAAI,GAAG7L,IAAI,CAAC+D,GAAL,CAASmB,UAAU,CAAClE,CAApB,EAAuB6J,aAAvB,IAAwCe,SAArD;AACAH,QAAAA,aAAa,CAACzK,CAAd,GAAkB6K,IAAlB;AACAH,QAAAA,aAAa,GAAGG,IAAI,GAAGrN,WAAvB;AACH;;AAED,UAAI,CAACoG,QAAQ,CAACZ,KAAT,CAAe8C,QAAf,CAAwBL,EAAxB,CAAD,IAAgC7B,QAAQ,CAACZ,KAAT,CAAeY,QAAQ,CAACZ,KAAT,CAAepD,MAAf,GAAwB,CAAvC,MAA8C6F,EAAlF,EAAsF;AAClF,YAAMmF,UAAS,GAAGhH,QAAQ,CAACZ,KAAT,CAAeY,QAAQ,CAACZ,KAAT,CAAepD,MAAf,GAAwB,CAAvC,KAA6C6F,EAA7C,GAAkD,CAAlD,GAAsD,CAAC,CAAzE;;AACA,YAAMqF,IAAI,GAAG9L,IAAI,CAAC+D,GAAL,CAASmB,UAAU,CAACjE,CAApB,EAAuB6J,UAAvB,IAAqCc,UAAlD;;AACAH,QAAAA,aAAa,CAACxK,CAAd,GAAkB6K,IAAlB;AACAH,QAAAA,YAAY,GAAGG,IAAI,GAAGtN,WAAtB;AACH;;AAED,UAAIiN,aAAa,CAACzK,CAAd,KAAoBkE,UAAU,CAAClE,CAA/B,IAAoCkE,UAAU,CAACjE,CAAX,KAAiBwK,aAAa,CAACxK,CAAvE,EAA0E;AACtE6H,QAAAA,aAAa,CAAC;AAAE9H,UAAAA,CAAC,EAAEyK,aAAa,CAACzK,CAAnB;AAAsBC,UAAAA,CAAC,EAAEwK,aAAa,CAACxK;AAAvC,SAAD,CAAb;AACA8K,QAAAA,UAAU,CAAC;AACP,cAAItD,UAAU,CAACuD,OAAf,EAAwB;AACpB,gBAAIN,aAAa,KAAK,CAAC,CAAvB,EAA0B;AACtBjD,cAAAA,UAAU,CAACuD,OAAX,CAAmBC,UAAnB,GAAgCP,aAAhC;AACH;;AACD,gBAAIC,YAAY,KAAK,CAAC,CAAtB,EAAyB;AACrBlD,cAAAA,UAAU,CAACuD,OAAX,CAAmBE,SAAnB,GAA+BP,YAA/B;AACH;AACJ;AACJ,SATS,EASP,CATO,CAAV;AAUH;AACJ;;AAED,QAAIrD,KAAK,CAAC6D,kBAAV,EAA8B;AAC1B,UAAIC,GAAG,GAAGjG,EAAV;AACA,UAAIkG,GAAG,GAAG9F,EAAV;AACA,UAAI+F,GAAG,GAAGjG,EAAV;AACA,UAAIkG,GAAG,GAAG9F,EAAV;;AACA,UAAI2F,GAAG,GAAGE,GAAV,EAAe;AACXF,QAAAA,GAAG,GAAG/F,EAAN;AACAiG,QAAAA,GAAG,GAAGnG,EAAN;AACH;;AACD,UAAIkG,GAAG,GAAGE,GAAV,EAAe;AACXF,QAAAA,GAAG,GAAG5F,EAAN;AACA8F,QAAAA,GAAG,GAAGhG,EAAN;AACH;;AACD+B,MAAAA,KAAK,CAAC6D,kBAAN,CAAyBC,GAAzB,EAA8BC,GAA9B,EAAmCC,GAAnC,EAAwCC,GAAxC;AACH;AACJ,GApDD;;AAsDA,MAAMC,eAAe,GAAGzB,OAAO,CAAC;AAC5B,QAAIvF,SAAS,CAACa,EAAV,KAAiB,CAAC,CAAlB,IAAuBb,SAAS,CAACiB,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C,UAAIL,KAAK,GAAGZ,SAAS,CAACa,EAAtB;;AACA,UAAIb,SAAS,CAACW,EAAV,GAAeX,SAAS,CAACa,EAA7B,EAAiC;AAC7BD,QAAAA,KAAK,GAAGZ,SAAS,CAACW,EAAlB;AACH;;AAED,UAAIK,KAAK,GAAGhB,SAAS,CAACiB,EAAtB;;AACA,UAAIjB,SAAS,CAACe,EAAV,GAAef,SAAS,CAACiB,EAA7B,EAAiC;AAC7BD,QAAAA,KAAK,GAAGhB,SAAS,CAACe,EAAlB;AACH;;AACD,UAAMkG,CAAC,GAAGxH,mBAAmB,CAACmB,KAAD,EAAQI,KAAR,EAAe5B,QAAf,EAAyBC,WAAzB,EAAsCK,UAAtC,EAAkDtD,SAAlD,EAA6DC,UAA7D,CAA7B;AACA,aAAO;AAAEb,QAAAA,CAAC,EAAEyL,CAAC,CAACzL,CAAF,GAAMY,SAAS,CAACwE,KAAD,CAApB;AAA6BnF,QAAAA,CAAC,EAAEwL,CAAC,CAACxL,CAAF,GAAMY,UAAU,CAAC2E,KAAD;AAAhD,OAAP;AACH;;AACD,WAAO;AAAExF,MAAAA,CAAC,EAAE,CAAC,CAAN;AAASC,MAAAA,CAAC,EAAE,CAAC;AAAb,KAAP;AACH,GAf8B,EAe5B,CAACuE,SAAD,EAAYZ,QAAZ,EAAsBC,WAAtB,EAAmCK,UAAnC,EAA+CtD,SAA/C,EAA0DC,UAA1D,CAf4B,CAA/B;AAiBA,MAAM6K,MAAM,GAAG3B,OAAO,CAAC;AACnB,QAAM4B,IAAI,GAAG,EAAb;AACA,QAAMnN,MAAM,GAAG+I,SAAS,CAACyD,OAAzB;;AACA,QAAI,CAACxM,MAAL,EAAa;AACT,aAAOmN,IAAP;AACH;;AACDpN,IAAAA,YAAY,CAACC,MAAD,CAAZ;AACA,QAAImC,MAAM,GAAGxD,kBAAb;AACA,QAAIuD,MAAM,GAAG3D,cAAb;;AAEA,2DAAgB8G,WAAW,CAACb,KAA5B,8CAAmC;AAAA,UAAxBhD,CAAwB;AAC/B,UAAM2G,EAAE,GAAGjC,aAAa,CAAC1E,CAAD,CAAxB;AACA,UAAM4L,KAAK,GAAGhL,SAAS,CAACZ,CAAD,CAAvB;;AACA,UAAI2G,EAAE,IAAI,OAAOA,EAAP,KAAc,QAApB,IAAgCA,EAAE,CAACjF,KAAvC,EAA8C;AAC1C,YAAIZ,UAAU,SAAd;;AACA,+DAAkB6F,EAAE,CAACjF,KAArB,8CAA4B;AAAA,cAAjBC,GAAiB;;AACxB,cAAIA,GAAG,CAACkK,OAAR,EAAiB;AACb,gBAAI,CAAC/K,UAAL,EAAiB;AACbA,cAAAA,UAAU,GAAGC,iBAAiB,CAAC4D,iBAAiB,CAAC3E,CAAD,CAAlB,EAAuBpC,gBAAvB,CAA9B;AACH;;AACD,gBAAMkE,CAAC,GAAGH,GAAG,CAACC,OAAJ,YAAuBC,gBAAvB,GAA0CF,GAAG,CAACjD,KAAJ,IAAakN,KAAvD,GAA+D,CAAzE;AACA,gBAAME,KAAK,GAAG5L,cAAc,CAACQ,MAAD,EAASkL,KAAT,EAAgB9K,UAAhB,EAA4BgB,CAA5B,EAA+BH,GAAG,CAACK,eAAnC,CAAd,GAAoEL,GAAG,CAAC3B,CAAtF;AACA,gBAAM+L,KAAK,GAAG5O,kBAAkB,GAAG,GAArB,GAA2BwE,GAAG,CAAC1B,CAA7C;AACA,gBAAM+L,KAAK,GAAGF,KAAK,IAAInK,GAAG,CAACjD,KAAJ,IAAa,CAAjB,CAAnB;AACA,gBAAMuN,KAAK,GAAGF,KAAK,IAAIpK,GAAG,CAAChD,MAAJ,IAAc,CAAlB,CAAnB;AAEA,gBAAM2K,SAAS,GAAG;AACdtJ,cAAAA,CAAC,EAAE8L,KADW;AAEd7L,cAAAA,CAAC,EAAE8L,KAFW;AAGdjK,cAAAA,CAAC,EAAEH,GAAG,CAACjD,KAHO;AAIdwN,cAAAA,CAAC,EAAEvK,GAAG,CAAChD,MAJO;AAKdkN,cAAAA,OAAO,EAAElK,GAAG,CAACkK;AALC,aAAlB;AASA,gBAAMM,KAAK,GAAGnN,IAAI,CAACoN,KAAL,CAAWN,KAAK,GAAGxO,QAAnB,CAAd;AACA,gBAAM+O,KAAK,GAAGrN,IAAI,CAACoN,KAAL,CAAWJ,KAAK,GAAG1O,QAAnB,CAAd;AAEA,gBAAMgP,KAAK,GAAGtN,IAAI,CAACoN,KAAL,CAAWL,KAAK,GAAGxO,QAAnB,CAAd;AACA,gBAAMgP,KAAK,GAAGvN,IAAI,CAACoN,KAAL,CAAWH,KAAK,GAAG1O,QAAnB,CAAd;;AAEA,iBAAK,IAAIiP,IAAI,GAAGL,KAAhB,EAAuBK,IAAI,IAAIH,KAA/B,EAAsCG,IAAI,EAA1C,EAA8C;AAC1C,kBAAI,CAACb,IAAI,CAACa,IAAD,CAAT,EAAiB;AACbb,gBAAAA,IAAI,CAACa,IAAD,CAAJ,GAAa,EAAb;AACH;;AACD,kBAAMC,IAAI,GAAGd,IAAI,CAACa,IAAD,CAAjB;;AACA,mBAAK,IAAIE,IAAI,GAAGJ,KAAhB,EAAuBI,IAAI,IAAIH,KAA/B,EAAsCG,IAAI,EAA1C,EAA8C;AAC1C,oBAAI,CAACD,IAAI,CAACC,IAAD,CAAT,EAAiB;AACbD,kBAAAA,IAAI,CAACC,IAAD,CAAJ,GAAa,EAAb;AACH;;AACDD,gBAAAA,IAAI,CAACC,IAAD,CAAJ,CAAW9J,IAAX,CAAgB0G,SAAhB;AACH;AACJ;AACJ;AACJ;AACJ;;AACD5I,MAAAA,MAAM,IAAIkL,KAAV;AACH;;AAED,2DAAgBhI,QAAQ,CAACZ,KAAzB,8CAAgC;AAAA,UAArB/C,CAAqB;AAC5BS,MAAAA,MAAM,GAAG3D,cAAT;;AACA,6DAAgB8G,WAAW,CAACb,KAA5B,8CAAmC;AAAA,YAAxBhD,GAAwB;AAC/B,YAAMS,WAAW,GAAGoE,WAAW,CAAC7E,GAAD,EAAIC,CAAJ,CAA/B;;AACA,YAAM2L,MAAK,GAAGhL,SAAS,CAACZ,GAAD,CAAvB;;AACA,YAAIS,WAAW,KAAK,IAAhB,IAAwBA,WAAW,KAAKZ,SAA5C,EAAuD;AACnDa,UAAAA,MAAM,IAAIkL,MAAV;AACA;AACH;;AAED,YAAMpK,EAAE,GAAGd,MAAX;AACA,YAAMQ,EAAE,GAAGP,MAAM,GAAGE,UAAU,CAACZ,CAAD,CAAV,GAAgB,GAApC;;AAEA,YAAI,OAAOQ,WAAP,KAAuB,QAAvB,IAAmCA,WAAW,CAACiB,KAAnD,EAA0D;AACtD,cAAIZ,WAAU,SAAd;;AACA,iEAAkBL,WAAW,CAACiB,KAA9B,8CAAqC;AAAA,gBAA1BC,IAA0B;;AACjC,gBAAIA,IAAG,CAACkK,OAAR,EAAiB;AACb,kBAAI,CAAC/K,WAAL,EAAiB;AACbA,gBAAAA,WAAU,GAAGC,iBAAiB,CAACwD,SAAS,CAACvE,GAAD,EAAIC,CAAJ,CAAV,EAAkBrC,gBAAlB,CAA9B;AACH;;AACD,kBAAMkE,EAAC,GAAGH,IAAG,CAACC,OAAJ,YAAuBC,gBAAvB,GAA0CF,IAAG,CAACjD,KAAJ,IAAakN,MAAvD,GAA+D,CAAzE;;AACA,kBAAME,KAAK,GAAG5L,cAAc,CAACsB,EAAD,EAAKoK,MAAL,EAAY9K,WAAZ,EAAwBgB,EAAxB,EAA2BH,IAAG,CAACK,eAA/B,CAAd,GAAgEL,IAAG,CAAC3B,CAAlF;;AACA,kBAAM+L,KAAK,GAAG7K,EAAE,GAAGS,IAAG,CAAC1B,CAAvB;;AACA,kBAAM+L,MAAK,GAAGF,KAAK,IAAInK,IAAG,CAACjD,KAAJ,IAAa,CAAjB,CAAnB;;AACA,kBAAMuN,MAAK,GAAGF,KAAK,IAAIpK,IAAG,CAAChD,MAAJ,IAAc,CAAlB,CAAnB;;AAEA,kBAAM2K,UAAS,GAAG;AACdtJ,gBAAAA,CAAC,EAAE8L,KADW;AAEd7L,gBAAAA,CAAC,EAAE8L,KAFW;AAGdjK,gBAAAA,CAAC,EAAEH,IAAG,CAACjD,KAHO;AAIdwN,gBAAAA,CAAC,EAAEvK,IAAG,CAAChD,MAJO;AAKdkN,gBAAAA,OAAO,EAAElK,IAAG,CAACkK;AALC,eAAlB;;AASA,kBAAMM,MAAK,GAAGnN,IAAI,CAACoN,KAAL,CAAWN,KAAK,GAAGxO,QAAnB,CAAd;;AACA,kBAAM+O,MAAK,GAAGrN,IAAI,CAACoN,KAAL,CAAWJ,MAAK,GAAG1O,QAAnB,CAAd;;AAEA,kBAAMgP,MAAK,GAAGtN,IAAI,CAACoN,KAAL,CAAWL,KAAK,GAAGxO,QAAnB,CAAd;;AACA,kBAAMgP,MAAK,GAAGvN,IAAI,CAACoN,KAAL,CAAWH,MAAK,GAAG1O,QAAnB,CAAd;;AAEA,mBAAK,IAAIiP,KAAI,GAAGL,MAAhB,EAAuBK,KAAI,IAAIH,MAA/B,EAAsCG,KAAI,EAA1C,EAA8C;AAC1C,oBAAI,CAACb,IAAI,CAACa,KAAD,CAAT,EAAiB;AACbb,kBAAAA,IAAI,CAACa,KAAD,CAAJ,GAAa,EAAb;AACH;;AACD,oBAAMC,KAAI,GAAGd,IAAI,CAACa,KAAD,CAAjB;;AACA,qBAAK,IAAIE,KAAI,GAAGJ,MAAhB,EAAuBI,KAAI,IAAIH,MAA/B,EAAsCG,KAAI,EAA1C,EAA8C;AAC1C,sBAAI,CAACD,KAAI,CAACC,KAAD,CAAT,EAAiB;AACbD,oBAAAA,KAAI,CAACC,KAAD,CAAJ,GAAa,EAAb;AACH;;AACDD,kBAAAA,KAAI,CAACC,KAAD,CAAJ,CAAW9J,IAAX,CAAgB0G,UAAhB;AACH;AACJ;AACJ;AACJ;AACJ;;AACD5I,QAAAA,MAAM,IAAIkL,MAAV;AACH;;AACDjL,MAAAA,MAAM,IAAIE,UAAU,CAACZ,CAAD,CAApB;AACH;;AACD,WAAO0L,IAAP;AACH,GAxHqB,EAwHnB,CAAC9G,WAAD,EAAcyC,KAAK,CAAC1G,SAApB,EAA+B0G,KAAK,CAACzG,UAArC,EAAiD0G,SAAjD,EAA4D1D,WAA5D,EAAyED,QAAzE,EAAmFM,UAAU,CAAClE,CAA9F,EAAiGkE,UAAU,CAACjE,CAA5G,CAxHmB,CAAtB;AA0HAoK,EAAAA,SAAS,CAAC;AACN,QAAM7L,MAAM,GAAG+I,SAAS,CAACyD,OAAzB;;AACA,QAAI,CAACxM,MAAL,EAAa;AACT;AACH;;AACD,QAAMW,OAAO,GAAGX,MAAM,CAACY,UAAP,CAAkB,IAAlB,CAAhB;;AACA,QAAI,CAACD,OAAL,EAAc;AACV;AACH;;AACD,QAAIwN,gBAAgB,GAAG/N,MAAM,CAACgO,qBAAP,CAA6B;AAChDtI,MAAAA,cAAc,CACVnF,OADU,EAEVyE,QAFU,EAGVC,WAHU,EAIVU,SAJU,EAKV3D,SALU,EAMVC,UANU,EAOV2D,SAPU,EAQVC,kBARU,EASVC,aATU,EAUVC,iBAVU,EAWVC,QAXU,EAYVC,WAZU,EAaVX,UAbU,CAAd;AAeH,KAhBsB,CAAvB;AAkBA,WAAO;AACHtF,MAAAA,MAAM,CAACiO,oBAAP,CAA4BF,gBAA5B;AACH,KAFD;AAGH,GA9BQ,EA8BN,CACCpF,SADD,EAEC3D,QAFD,EAGCC,WAHD,EAICU,SAJD,EAKC3D,SALD,EAMCC,UAND,EAOC2D,SAPD,EAQCC,kBARD,EASCC,aATD,EAUCC,iBAVD,EAWCC,QAXD,EAYCC,WAZD,EAaCX,UAbD,CA9BM,CAAT;;AA8CA,MAAM4I,kBAAkB,GAAG,SAArBA,kBAAqB;AACvB,QAAIpF,oBAAoB,CAACsD,OAAzB,EAAkC;AAC9BtD,MAAAA,oBAAoB,CAACsD,OAArB,CAA6B+B,KAA7B,CAAmC;AAAEC,QAAAA,aAAa,EAAE;AAAjB,OAAnC;AACAtF,MAAAA,oBAAoB,CAACsD,OAArB,CAA6BiC,MAA7B;AACH;AACJ,GALD;;AAOA5C,EAAAA,SAAS,CAAC;AACN,QAAI,CAAC6C,QAAL,EAAe;AACXC,MAAAA,gBAAgB;;AAChB,UAAIC,QAAQ,CAACC,aAAT,KAA2B3F,oBAAoB,CAACsD,OAApD,EAA6D;AACzD8B,QAAAA,kBAAkB;AACrB,OAFD,MAEO;AACH,YAAMQ,aAAa,GAAIF,QAAgB,CAACC,aAAjB,CAA+BE,OAA/B,CAAuCC,WAAvC,EAAvB;;AACA,YACI,EACKF,aAAa,KAAK,KAAlB,IAA4BF,QAAgB,CAACC,aAAjB,CAA+BI,eAA/B,KAAmD,MAAhF,IACAH,aAAa,KAAK,OADlB,IAEAA,aAAa,KAAK,UAFlB,IAGAA,aAAa,KAAK,QAJtB,CADJ,EAOE;AACER,UAAAA,kBAAkB;AACrB;AACJ;AACJ;AACJ,GAnBQ,CAAT;;AAqBA,MAAMY,OAAO,GAAG,SAAVA,OAAU,CAACC,CAAD;AACZ,QAAI,CAACjG,oBAAL,EAA2B;AACvB;AACH;;AACD,QAAIiG,CAAC,CAACC,MAAF,KAAalG,oBAAoB,CAACsD,OAAtC,EAA+C;AAC3C;AACH;;AACD2C,IAAAA,CAAC,CAACE,cAAF;AAEA,QAAMC,aAAa,GAAGH,CAAC,CAACG,aAAF,IAAoBlP,MAAc,CAACkP,aAAzD;AACA,QAAMC,KAAK,GAAGD,aAAa,CAACC,KAA5B;;AACA,QAAIA,KAAK,CAACjI,QAAN,CAAe,WAAf,CAAJ,EAAiC;AAC7B,UAAMkI,UAAU,GAAGF,aAAa,CAACG,OAAd,CAAsB,WAAtB,CAAnB;AACAC,MAAAA,eAAe,CAACF,UAAD,CAAf;AACH,KAHD,MAGO,IAAID,KAAK,CAACjI,QAAN,CAAe,YAAf,CAAJ,EAAkC;AACrC,UAAMqI,IAAI,GAAGL,aAAa,CAACG,OAAd,CAAsB,YAAtB,CAAb;AACAG,MAAAA,eAAe,CAACD,IAAD,CAAf;AACH;AACJ,GAlBD;;AAoBA9D,EAAAA,SAAS,CAAC;AACNzL,IAAAA,MAAM,CAACwO,QAAP,CAAgBiB,gBAAhB,CAAiC,OAAjC,EAA0CX,OAA1C;AACA,WAAO;AACH9O,MAAAA,MAAM,CAACwO,QAAP,CAAgBkB,mBAAhB,CAAoC,OAApC,EAA6CZ,OAA7C;AACH,KAFD;AAGH,GALQ,CAAT;;AAOA,MAAMa,SAAS,GAAG,SAAZA,SAAY,CAACC,OAAD;AACd,2DAAoBA,OAAO,CAACC,QAA5B,8CAAsC;AAAA,UAA3BC,KAA2B;;AAClC,UAAIA,KAAK,CAACC,QAAN,KAAmB,OAAvB,EAAgC;AAC5B,eAAOD,KAAP;AACH;;AACD,UAAME,UAAU,GAAGL,SAAS,CAACG,KAAD,CAA5B;;AACA,UAAIE,UAAJ,EAAgB;AACZ,eAAOA,UAAP;AACH;AACJ;AACJ,GAVD;;AAYA,MAAMV,eAAe,GAAG,SAAlBA,eAAkB,CAACW,IAAD;AACpB,QAAMC,GAAG,GAAG1B,QAAQ,CAAC2B,aAAT,CAAuB,KAAvB,CAAZ;AACAD,IAAAA,GAAG,CAACE,SAAJ,GAAgBH,IAAI,CAACI,IAAL,EAAhB;AACA,QAAIC,SAAS,GAAG,CAAC,CAAjB;AACA,QAAIC,SAAS,GAAG,CAAC,CAAjB;;AACA,QAAI3K,SAAS,CAACW,EAAV,KAAiB,CAAC,CAAlB,IAAuBX,SAAS,CAACa,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C6J,MAAAA,SAAS,GAAG1K,SAAS,CAACW,EAAtB;AACH;;AACD,QAAIX,SAAS,CAACe,EAAV,KAAiB,CAAC,CAAlB,IAAuBf,SAAS,CAACiB,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C0J,MAAAA,SAAS,GAAG3K,SAAS,CAACe,EAAtB;AACH;;AACD,QAAIf,SAAS,CAACW,EAAV,KAAiB,CAAC,CAAlB,IAAuBX,SAAS,CAACa,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C6J,MAAAA,SAAS,GAAGlQ,IAAI,CAACoQ,GAAL,CAAS5K,SAAS,CAACW,EAAnB,EAAuBX,SAAS,CAACa,EAAjC,CAAZ;AACH;;AACD,QAAIb,SAAS,CAACe,EAAV,KAAiB,CAAC,CAAlB,IAAuBf,SAAS,CAACiB,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C0J,MAAAA,SAAS,GAAGnQ,IAAI,CAACoQ,GAAL,CAAS5K,SAAS,CAACe,EAAnB,EAAuBf,SAAS,CAACiB,EAAjC,CAAZ;AACH;;AACD,QAAIyJ,SAAS,KAAK,CAAC,CAAf,IAAoBC,SAAS,KAAK,CAAC,CAAvC,EAA0C;AACtC;AACH;;AAED,QAAInP,CAAC,GAAGkP,SAAR;AACA,QAAIjP,CAAC,GAAGkP,SAAR;AACA,QAAME,OAAO,GAAG,EAAhB;AAEA,QAAMC,SAAS,GAAGf,SAAS,CAACO,GAAD,CAA3B;;AACA,QAAI,CAACQ,SAAL,EAAgB;AACZ;AACH;;AAED,2DAAyBA,SAAS,CAACb,QAAnC,8CAA6C;AAAA,UAAlCc,UAAkC;;AACzC,UAAIA,UAAU,CAACZ,QAAX,KAAwB,OAA5B,EAAqC;AACjC,+DAAiBY,UAAU,CAACd,QAA5B,8CAAsC;AAAA,cAA3Be,EAA2B;AAClCxP,UAAAA,CAAC,GAAGkP,SAAJ;;AACA,cAAIM,EAAE,CAACb,QAAH,KAAgB,IAApB,EAA0B;AACtB,mEAAiBa,EAAE,CAACf,QAApB,8CAA8B;AAAA,kBAAnBgB,EAAmB;;AAC1B,kBAAIA,EAAE,CAACd,QAAH,KAAgB,IAApB,EAA0B;AACtB,oBAAIe,GAAG,GAAW,EAAlB;;AACA,oBAAID,EAAE,CAAChB,QAAH,CAAY7O,MAAZ,KAAuB,CAAvB,IAA4B6P,EAAE,CAAChB,QAAH,CAAY,CAAZ,EAAeE,QAAf,KAA4B,GAA5D,EAAiE;AAC7D,sBAAMgB,CAAC,GAAGF,EAAE,CAAChB,QAAH,CAAY,CAAZ,CAAV;;AACA,sBAAIkB,CAAC,CAAClB,QAAF,CAAW7O,MAAX,KAAsB,CAAtB,IAA2B+P,CAAC,CAAClB,QAAF,CAAW,CAAX,EAAcE,QAAd,KAA2B,MAA1D,EAAkE;AAC9De,oBAAAA,GAAG,GAAGC,CAAC,CAAClB,QAAF,CAAW,CAAX,EAAcO,SAApB;AACH,mBAFD,MAEO;AACHU,oBAAAA,GAAG,GAAGC,CAAC,CAACX,SAAR;AACH;AACJ,iBAPD,MAOO;AACHU,kBAAAA,GAAG,GAAGD,EAAE,CAACT,SAAT;AACH;;AACDU,gBAAAA,GAAG,GAAGA,GAAG,CAACE,UAAJ,CAAe,IAAf,EAAqB,EAArB,CAAN;AACAF,gBAAAA,GAAG,GAAGA,GAAG,CAACE,UAAJ,CAAe,QAAf,EAAyB,GAAzB,CAAN;AACAP,gBAAAA,OAAO,CAACzM,IAAR,CAAa;AAAE3C,kBAAAA,CAAC,EAAEA,CAAL;AAAQD,kBAAAA,CAAC,EAAEA,CAAX;AAAc6P,kBAAAA,KAAK,EAAEH;AAArB,iBAAb;AACA1P,gBAAAA,CAAC;AACJ;AACJ;;AACDC,YAAAA,CAAC;AACJ;AACJ;AACJ;AACJ;;AAED,QAAIqH,KAAK,CAACwI,QAAV,EAAoB;AAChBxI,MAAAA,KAAK,CAACwI,QAAN,CAAeT,OAAf;AACH;;AACD,QAAIU,OAAO,GAAG/P,CAAC,GAAG,CAAlB;AACA,QAAIgQ,OAAO,GAAG/P,CAAC,GAAG,CAAlB;AACAsK,IAAAA,eAAe,CAAC2E,SAAD,EAAYC,SAAZ,EAAuBY,OAAvB,EAAgCC,OAAhC,EAAyC,KAAzC,CAAf;AACH,GAlED;;AAoEA,MAAM5B,eAAe,GAAG,SAAlBA,eAAkB,CAACD,IAAD;AACpB,QAAIe,SAAS,GAAG,CAAC,CAAjB;AACA,QAAIC,SAAS,GAAG,CAAC,CAAjB;;AACA,QAAI3K,SAAS,CAACW,EAAV,KAAiB,CAAC,CAAlB,IAAuBX,SAAS,CAACa,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C6J,MAAAA,SAAS,GAAG1K,SAAS,CAACW,EAAtB;AACH;;AACD,QAAIX,SAAS,CAACe,EAAV,KAAiB,CAAC,CAAlB,IAAuBf,SAAS,CAACiB,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C0J,MAAAA,SAAS,GAAG3K,SAAS,CAACe,EAAtB;AACH;;AACD,QAAIf,SAAS,CAACW,EAAV,KAAiB,CAAC,CAAlB,IAAuBX,SAAS,CAACa,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C6J,MAAAA,SAAS,GAAGlQ,IAAI,CAACoQ,GAAL,CAAS5K,SAAS,CAACW,EAAnB,EAAuBX,SAAS,CAACa,EAAjC,CAAZ;AACH;;AACD,QAAIb,SAAS,CAACe,EAAV,KAAiB,CAAC,CAAlB,IAAuBf,SAAS,CAACiB,EAAV,KAAiB,CAAC,CAA7C,EAAgD;AAC5C0J,MAAAA,SAAS,GAAGnQ,IAAI,CAACoQ,GAAL,CAAS5K,SAAS,CAACe,EAAnB,EAAuBf,SAAS,CAACiB,EAAjC,CAAZ;AACH;;AACD,QAAIyJ,SAAS,KAAK,CAAC,CAAf,IAAoBC,SAAS,KAAK,CAAC,CAAvC,EAA0C;AACtC;AACH;;AAED,QAAMc,IAAI,GAAG9B,IAAI,CAAC+B,KAAL,CAAW,OAAX,CAAb;AACA,QAAIH,OAAO,GAAGb,SAAd;AACA,QAAIc,OAAO,GAAGb,SAAS,GAAGc,IAAI,CAACrQ,MAAjB,GAA0B,CAAxC;AACA,QAAMyP,OAAO,GAAG,EAAhB;;AACA,SAAK,IAAIpP,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgQ,IAAI,CAACrQ,MAAzB,EAAiCK,CAAC,EAAlC,EAAsC;AAClC,UAAMkQ,IAAI,GAAGF,IAAI,CAAChQ,CAAD,CAAJ,CAAQiQ,KAAR,CAAc,IAAd,CAAb;;AAEA,UAAIhB,SAAS,GAAGiB,IAAI,CAACvQ,MAAjB,GAA0B,CAA1B,GAA8BmQ,OAAlC,EAA2C;AACvCA,QAAAA,OAAO,GAAGb,SAAS,GAAGiB,IAAI,CAACvQ,MAAjB,GAA0B,CAApC;AACH;;AACD,WAAK,IAAII,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmQ,IAAI,CAACvQ,MAAzB,EAAiCI,CAAC,EAAlC,EAAsC;AAClCqP,QAAAA,OAAO,CAACzM,IAAR,CAAa;AAAE3C,UAAAA,CAAC,EAAEkP,SAAS,GAAGlP,CAAjB;AAAoBD,UAAAA,CAAC,EAAEkP,SAAS,GAAGlP,CAAnC;AAAsC6P,UAAAA,KAAK,EAAEM,IAAI,CAACnQ,CAAD;AAAjD,SAAb;AACH;AACJ;;AAED,QAAIsH,KAAK,CAACwI,QAAV,EAAoB;AAChBxI,MAAAA,KAAK,CAACwI,QAAN,CAAeT,OAAf;AACH;;AACD9E,IAAAA,eAAe,CAAC2E,SAAD,EAAYC,SAAZ,EAAuBY,OAAvB,EAAgCC,OAAhC,EAAyC,KAAzC,CAAf;AACH,GAtCD;;AAwCA,MAAM7C,gBAAgB,GAAG,SAAnBA,gBAAmB;AACrB,QAAI3I,SAAS,CAACW,EAAV,KAAiB,CAAC,CAAlB,IAAuBX,SAAS,CAACe,EAAV,KAAiB,CAAC,CAAzC,IAA8Cf,SAAS,CAACa,EAAV,KAAiB,CAAC,CAAhE,IAAqEb,SAAS,CAACiB,EAAV,KAAiB,CAAC,CAA3F,EAA8F;AAC1F;AACH;;AAED,QAAI2K,GAAG,GAAG5L,SAAS,CAACe,EAApB;AACA,QAAI8K,GAAG,GAAG7L,SAAS,CAACiB,EAApB;;AACA,QAAI2K,GAAG,GAAGC,GAAV,EAAe;AACXD,MAAAA,GAAG,GAAG5L,SAAS,CAACiB,EAAhB;AACA4K,MAAAA,GAAG,GAAG7L,SAAS,CAACe,EAAhB;AACH;;AAED,QAAI+K,GAAG,GAAG9L,SAAS,CAACW,EAApB;AACA,QAAIoL,GAAG,GAAG/L,SAAS,CAACa,EAApB;;AACA,QAAIiL,GAAG,GAAGC,GAAV,EAAe;AACXD,MAAAA,GAAG,GAAG9L,SAAS,CAACa,EAAhB;AACAkL,MAAAA,GAAG,GAAG/L,SAAS,CAACW,EAAhB;AACH;;AAED,QAAM8K,IAAI,GAAG,EAAb;;AACA,SAAK,IAAIhQ,CAAC,GAAGmQ,GAAb,EAAkBnQ,CAAC,IAAIoQ,GAAvB,EAA4BpQ,CAAC,EAA7B,EAAiC;AAC7B,UAAMuG,GAAG,GAAG,EAAZ;;AACA,WAAK,IAAIxG,CAAC,GAAGsQ,GAAb,EAAkBtQ,CAAC,IAAIuQ,GAAvB,EAA4BvQ,CAAC,EAA7B,EAAiC;AAC7B,YAAM6P,KAAK,GAAG1F,QAAQ,CAACnK,CAAD,EAAIC,CAAJ,CAAtB;;AACA,YAAI4P,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKhQ,SAAhC,EAA2C;AACvC2G,UAAAA,GAAG,CAAC5D,IAAJ,CAASiN,KAAT;AACH,SAFD,MAEO;AACHrJ,UAAAA,GAAG,CAAC5D,IAAJ,CAAS,EAAT;AACH;AACJ;;AACDqN,MAAAA,IAAI,CAACrN,IAAL,CAAU4D,GAAG,CAACgK,IAAJ,CAAS,IAAT,CAAV;AACH;;AACD,QAAMC,MAAM,GAAGR,IAAI,CAACO,IAAL,CAAU,IAAV,CAAf;;AACA,QAAI9I,oBAAoB,CAACsD,OAAzB,EAAkC;AAC9BtD,MAAAA,oBAAoB,CAACsD,OAArB,CAA6B6E,KAA7B,GAAqCY,MAArC;AACH;AACJ,GApCD;;AAsCA,MAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACb,KAAD;AACtB,QAAIvI,KAAK,CAACwI,QAAV,EAAoB;AAChBxI,MAAAA,KAAK,CAACwI,QAAN,CAAe,CAAC;AAAE9P,QAAAA,CAAC,EAAEiI,QAAQ,CAACjI,CAAd;AAAiBC,QAAAA,CAAC,EAAEgI,QAAQ,CAAChI,CAA7B;AAAgC4P,QAAAA,KAAK,EAAEA,KAAF,WAAEA,KAAF,GAAW1H;AAAhD,OAAD,CAAf;AACH;;AAEDD,IAAAA,WAAW,CAAC;AAAElI,MAAAA,CAAC,EAAE,CAAC,CAAN;AAASC,MAAAA,CAAC,EAAE,CAAC;AAAb,KAAD,CAAX;AACAqI,IAAAA,UAAU,CAAC,EAAD,CAAV;AACH,GAPD;;AASA,MAAMqI,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAC1I,QAAD;AACrB,QAAI+B,YAAY,CAAC/B,QAAQ,CAACjI,CAAV,EAAaiI,QAAQ,CAAChI,CAAtB,CAAhB,EAA0C;AACtC;AACH;;AAED,QAAM2Q,aAAa,GAAGzG,QAAQ,CAAClC,QAAQ,CAACjI,CAAV,EAAaiI,QAAQ,CAAChI,CAAtB,CAA9B;AACA,QAAI4Q,GAAG,GAAG,EAAV;;AACA,QAAID,aAAa,KAAK,IAAlB,IAA0BA,aAAa,KAAK/Q,SAAhD,EAA2D;AACvDgR,MAAAA,GAAG,GAAGD,aAAN;AACH;;AACD,QAAME,WAAW,GAAG1G,QAAQ,GAAGA,QAAQ,CAACnC,QAAQ,CAACjI,CAAV,EAAaiI,QAAQ,CAAChI,CAAtB,CAAX,GAAsC,EAAlE;AACAiI,IAAAA,WAAW,CAACD,QAAD,CAAX;AACAK,IAAAA,UAAU,CAACwI,WAAD,CAAV;AACA1I,IAAAA,YAAY,CAACyI,GAAD,CAAZ;AACH,GAdD;;AAgBA,MAAME,QAAQ,GAAG,SAAXA,QAAW,CAACpD,CAAD;AACb,QAAI,CAACA,CAAC,CAACC,MAAH,IAAa,EAAED,CAAC,CAACC,MAAF,YAAoBoD,OAAtB,CAAjB,EAAiD;AAC7C;AACH;;AACD,QAAMtN,IAAI,GAAGiK,CAAC,CAACC,MAAF,CAAS3C,UAAtB;AACA,QAAMtH,IAAI,GAAGgK,CAAC,CAACC,MAAF,CAAS1C,SAAtB;AAEA,QAAMpH,KAAK,GAAG9E,IAAI,CAACoN,KAAL,CAAW1I,IAAI,GAAGlG,WAAlB,CAAd;AACA,QAAMuG,KAAK,GAAG/E,IAAI,CAACoN,KAAL,CAAWzI,IAAI,GAAGnG,WAAlB,CAAd;;AACA,QAAIsG,KAAK,KAAKI,UAAU,CAAClE,CAArB,IAA0B+D,KAAK,KAAKG,UAAU,CAACjE,CAAnD,EAAsD;AAClD6H,MAAAA,aAAa,CAAC;AAAE9H,QAAAA,CAAC,EAAE8D,KAAL;AAAY7D,QAAAA,CAAC,EAAE8D;AAAf,OAAD,CAAb;AACH;;AAED,QAAIkN,YAAY,gBAAQrJ,SAAR,CAAhB;;AACA,QAAIA,SAAS,CAAC5H,CAAV,IAAe0D,IAAI,GAAG,GAAtB,IAA6B,CAAjC,EAAoC;AAChCuN,MAAAA,YAAY,CAACjR,CAAb,IAAkB,GAAlB;AACH;;AACD,QAAI4H,SAAS,CAAC3H,CAAV,IAAe0D,IAAI,GAAG,GAAtB,IAA6B,CAAjC,EAAoC;AAChCsN,MAAAA,YAAY,CAAChR,CAAb,IAAkB,GAAlB;AACH;;AACD,QAAIgR,YAAY,CAACjR,CAAb,KAAmB4H,SAAS,CAAC5H,CAA7B,IAAkC4H,SAAS,CAAC3H,CAAV,KAAgBgR,YAAY,CAAChR,CAAnE,EAAsE;AAClE4H,MAAAA,YAAY,cAAMoJ,YAAN,EAAZ;AACH;AACJ,GAvBD;;AAyBA,MAAMC,YAAY,GAAG,SAAfA,YAAe;AACjBtS,IAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,MAApC;AACH,GAFD;;AAIA,MAAMC,WAAW,GAAG,SAAdA,WAAc,CAAC1D,CAAD;AAChB,QAAIA,CAAC,CAAC2D,MAAF,KAAa,CAAjB,EAAoB;AAChB;AACH;;AACD,QAAI,CAAC3D,CAAC,CAACC,MAAH,IAAa,EAAED,CAAC,CAACC,MAAF,YAAoBoD,OAAtB,CAAjB,EAAiD;AAC7C;AACH;;AAGDnI,IAAAA,sBAAsB,CAAC,KAAD,CAAtB;AAEA,QAAMxH,IAAI,GAAGsM,CAAC,CAACC,MAAF,CAASnP,qBAAT,EAAb;AACA,QAAMuB,CAAC,GAAG2N,CAAC,CAAC4D,OAAF,GAAYlQ,IAAI,CAACmQ,IAA3B;AACA,QAAMvR,CAAC,GAAG0N,CAAC,CAAC8D,OAAF,GAAYpQ,IAAI,CAACqQ,GAA3B;;AAEA,QAAI1R,CAAC,GAAG2J,WAAJ,IAAmB1J,CAAC,GAAG2J,YAA3B,EAAyC;AACrC;AACH;;AAED,QAAM+H,aAAa,GAAG3S,IAAI,CAACoN,KAAL,CAAWpM,CAAC,GAAG1C,QAAf,CAAtB;AACA,QAAMsU,aAAa,GAAG5S,IAAI,CAACoN,KAAL,CAAWnM,CAAC,GAAG1C,QAAf,CAAtB;;AAEA,QAAImO,MAAM,CAACiG,aAAD,CAAN,IAAyBjG,MAAM,CAACiG,aAAD,CAAN,CAAsBC,aAAtB,CAA7B,EAAmE;AAC/D,6DAAwBlG,MAAM,CAACiG,aAAD,CAAN,CAAsBC,aAAtB,CAAxB,8CAA8D;AAAA,YAAnDtI,SAAmD;;AAC1D,YACIA,SAAS,CAACtJ,CAAV,IAAeA,CAAf,IACAA,CAAC,IAAIsJ,SAAS,CAACtJ,CAAV,GAAcsJ,SAAS,CAACxH,CAD7B,IAEAwH,SAAS,CAACrJ,CAAV,IAAeA,CAFf,IAGAA,CAAC,IAAIqJ,SAAS,CAACrJ,CAAV,GAAcqJ,SAAS,CAAC4C,CAJjC,EAKE;AACE1C,UAAAA,kCAAkC,CAAC;AAAExJ,YAAAA,CAAC,EAADA,CAAF;AAAKC,YAAAA,CAAC,EAADA,CAAL;AAAQqJ,YAAAA,SAAS,EAATA;AAAR,WAAD,CAAlC;AACA;AACH;AACJ;AACJ;;AAED,QAAIrJ,CAAC,GAAG9C,kBAAR,EAA4B;AACxB,WAAK,IAAI0U,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAGhO,WAAW,CAACb,KAAZ,CAAkBpD,MAAhD,EAAwDiS,MAAM,EAA9D,EAAkE;AAC9D,YAAM1R,KAAK,GAAG0D,WAAW,CAAC1D,KAAZ,CAAkB0R,MAAlB,CAAd;AACA,YAAMnP,GAAG,GAAGmB,WAAW,CAACnB,GAAZ,CAAgBmP,MAAhB,CAAZ;AACA,YAAM7O,KAAK,GAAGa,WAAW,CAACb,KAAZ,CAAkB6O,MAAlB,CAAd;;AACA,YACI7S,IAAI,CAAC8S,GAAL,CAAS3R,KAAK,GAAGH,CAAjB,IAAsBvC,6BAAtB,IACAuB,IAAI,CAAC8S,GAAL,CAASpP,GAAG,GAAG1C,CAAf,IAAoBvC,6BAFxB,EAGE;AACEmB,UAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,YAApC;AACArI,UAAAA,eAAe,CAAC;AACZ7C,YAAAA,MAAM,EAAExD,GADI;AAEZqP,YAAAA,QAAQ,EAAEnR,SAAS,CAACoC,KAAD,CAFP;AAGZ6O,YAAAA,MAAM,EAAE7O;AAHI,WAAD,CAAf;AAKA;AACH;AACJ;AACJ;;AACD,QAAIhD,CAAC,GAAGjD,cAAR,EAAwB;AACpB,WAAK,IAAIiV,MAAM,GAAG,CAAlB,EAAqBA,MAAM,GAAGpO,QAAQ,CAACZ,KAAT,CAAepD,MAA7C,EAAqDoS,MAAM,EAA3D,EAA+D;AAC3D,YAAM7R,MAAK,GAAGyD,QAAQ,CAACzD,KAAT,CAAe6R,MAAf,CAAd;AACA,YAAMtP,IAAG,GAAGkB,QAAQ,CAAClB,GAAT,CAAasP,MAAb,CAAZ;AACA,YAAMhP,MAAK,GAAGY,QAAQ,CAACZ,KAAT,CAAegP,MAAf,CAAd;;AACA,YACIhT,IAAI,CAAC8S,GAAL,CAAS3R,MAAK,GAAGF,CAAjB,IAAsBxC,6BAAtB,IACAuB,IAAI,CAAC8S,GAAL,CAASpP,IAAG,GAAGzC,CAAf,IAAoBxC,6BAFxB,EAGE;AACEmB,UAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,YAApC;AACAnI,UAAAA,YAAY,CAAC;AACT1C,YAAAA,MAAM,EAAE7D,IADC;AAETuP,YAAAA,SAAS,EAAEpR,UAAU,CAACmC,MAAD,CAFZ;AAGTgP,YAAAA,MAAM,EAAEhP;AAHC,WAAD,CAAZ;AAKA;AACH;AACJ;AACJ;;AAGD,QAAIhE,IAAI,CAAC8S,GAAL,CAAS9R,CAAC,GAAGwL,eAAe,CAACxL,CAA7B,IAAkCpD,QAAlC,IAA8CoC,IAAI,CAAC8S,GAAL,CAAS7R,CAAC,GAAGuL,eAAe,CAACvL,CAA7B,IAAkCrD,QAApF,EAA8F;AAC1F+L,MAAAA,qBAAqB,CAAC,IAAD,CAArB;AACAX,MAAAA,WAAW,CAAC;AAAE7C,QAAAA,EAAE,EAAEX,SAAS,CAACW,EAAhB;AAAoBI,QAAAA,EAAE,EAAEf,SAAS,CAACe,EAAlC;AAAsCF,QAAAA,EAAE,EAAEb,SAAS,CAACa,EAApD;AAAwDI,QAAAA,EAAE,EAAEjB,SAAS,CAACiB;AAAtE,OAAD,CAAX;AACA;AACH;;AAED,QAAMyM,IAAI,GAAGzO,mBAAmB,CAACzD,CAAD,EAAIC,CAAJ,EAAO2D,QAAP,EAAiBC,WAAjB,CAAhC;AACA,QAAMsO,IAAI,GAAG1J,YAAY,GAAG;AAAEzI,MAAAA,CAAC,EAAEwE,SAAS,CAACW,EAAf;AAAmBlF,MAAAA,CAAC,EAAEuE,SAAS,CAACe;AAAhC,KAAH,gBAA+C2M,IAA/C,CAAzB;;AAEA,QAAIhF,QAAJ,EAAc;AACVwD,MAAAA,iBAAiB;AACpB;;AAED,QAAIlG,UAAU,GAAG,IAAjB;;AAEA,QAAIxK,CAAC,GAAGjD,cAAR,EAAwB;AACpBmV,MAAAA,IAAI,CAAClS,CAAL,GAASkE,UAAU,CAAClE,CAAX,GAAe,GAAxB;AACAwK,MAAAA,UAAU,GAAG,KAAb;AACArB,MAAAA,yBAAyB,CAAC,IAAD,CAAzB;AACH,KAJD,MAIO;AACHA,MAAAA,yBAAyB,CAAC,KAAD,CAAzB;AACH;;AAED,QAAIlJ,CAAC,GAAG9C,kBAAR,EAA4B;AACxB+U,MAAAA,IAAI,CAACjS,CAAL,GAASiE,UAAU,CAACjE,CAAX,GAAe,GAAxB;AACAuK,MAAAA,UAAU,GAAG,KAAb;AACAnB,MAAAA,4BAA4B,CAAC,IAAD,CAA5B;AACH,KAJD,MAIO;AACHA,MAAAA,4BAA4B,CAAC,KAAD,CAA5B;AACH;;AAEDR,IAAAA,sBAAsB,CAAC,IAAD,CAAtB;AACA0B,IAAAA,eAAe,CAAC4H,IAAI,CAACnS,CAAN,EAASmS,IAAI,CAAClS,CAAd,EAAiBiS,IAAI,CAAClS,CAAtB,EAAyBkS,IAAI,CAACjS,CAA9B,EAAiCuK,UAAjC,CAAf;AACAtC,IAAAA,WAAW,CAAC;AAAElI,MAAAA,CAAC,EAAE,CAAC,CAAN;AAASC,MAAAA,CAAC,EAAE,CAAC;AAAb,KAAD,CAAX;AACAqI,IAAAA,UAAU,CAAC,EAAD,CAAV;AACH,GA/GD;;AAiHA,MAAM8J,SAAS,GAAG,SAAZA,SAAY,CAACzE,CAAD;AACd,QAAIlJ,kBAAJ,EAAwB;AACpB,UAAI2G,GAAG,GAAG5G,SAAS,CAACW,EAApB;AACA,UAAImG,GAAG,GAAG9G,SAAS,CAACa,EAApB;;AACA,UAAIb,SAAS,CAACW,EAAV,GAAeX,SAAS,CAACa,EAA7B,EAAiC;AAC7B+F,QAAAA,GAAG,GAAG5G,SAAS,CAACa,EAAhB;AACAiG,QAAAA,GAAG,GAAG9G,SAAS,CAACW,EAAhB;AACH;;AACD,UAAIkG,GAAG,GAAG7G,SAAS,CAACe,EAApB;AACA,UAAIgG,GAAG,GAAG/G,SAAS,CAACiB,EAApB;;AACA,UAAIjB,SAAS,CAACe,EAAV,GAAef,SAAS,CAACiB,EAA7B,EAAiC;AAC7B4F,QAAAA,GAAG,GAAG7G,SAAS,CAACiB,EAAhB;AACA8F,QAAAA,GAAG,GAAG/G,SAAS,CAACe,EAAhB;AACH;;AACD,UAAIuB,GAAG,GAAGlC,QAAQ,CAACO,EAAnB;AACA,UAAI4B,GAAG,GAAGnC,QAAQ,CAACS,EAAnB;;AACA,UAAIT,QAAQ,CAACO,EAAT,GAAcP,QAAQ,CAACS,EAA3B,EAA+B;AAC3ByB,QAAAA,GAAG,GAAGlC,QAAQ,CAACS,EAAf;AACA0B,QAAAA,GAAG,GAAGnC,QAAQ,CAACO,EAAf;AACH;;AACD,UAAI6B,GAAG,GAAGpC,QAAQ,CAACW,EAAnB;AACA,UAAI0B,GAAG,GAAGrC,QAAQ,CAACa,EAAnB;;AACA,UAAIb,QAAQ,CAACW,EAAT,GAAcX,QAAQ,CAACa,EAA3B,EAA+B;AAC3BuB,QAAAA,GAAG,GAAGpC,QAAQ,CAACa,EAAf;AACAwB,QAAAA,GAAG,GAAGrC,QAAQ,CAACW,EAAf;AACH;;AAED,UAAI8M,GAAG,GAAGvL,GAAV;AACA,UAAIwL,GAAG,GAAGtL,GAAV;AACA,UAAIuL,GAAG,GAAGxL,GAAV;AACA,UAAIyL,GAAG,GAAGvL,GAAV;AAEA,UAAMoI,OAAO,GAAkB,EAA/B;;AAEA,UAAIkD,GAAG,GAAGF,GAAN,KAAc/G,GAAG,GAAGF,GAAxB,EAA6B;AAEzB,YAAIkH,GAAG,KAAKjH,GAAZ,EAAiB;AACbiH,UAAAA,GAAG,GAAG/G,GAAG,GAAG,CAAZ;AACH,SAFD,MAEO;AACHiH,UAAAA,GAAG,GAAGnH,GAAG,GAAG,CAAZ;AACH;;AAED,YAAIoH,IAAI,GAAGpH,GAAX;;AACA,aAAK,IAAIpL,CAAC,GAAGqS,GAAb,EAAkBrS,CAAC,IAAIuS,GAAvB,EAA4BvS,CAAC,EAA7B,EAAiC;AAC7B,eAAK,IAAID,CAAC,GAAGqS,GAAb,EAAkBrS,CAAC,IAAIuS,GAAvB,EAA4BvS,CAAC,EAA7B,EAAiC;AAC7B,gBAAM6P,KAAK,GAAG3F,UAAU,CAAClK,CAAD,EAAIyS,IAAJ,CAAxB;AACApD,YAAAA,OAAO,CAACzM,IAAR,CAAa;AAAE5C,cAAAA,CAAC,EAAEA,CAAL;AAAQC,cAAAA,CAAC,EAAEA,CAAX;AAAc4P,cAAAA,KAAK,EAAEA;AAArB,aAAb;AACH;;AACD4C,UAAAA,IAAI,GAAGA,IAAI,GAAG,CAAd;;AACA,cAAIA,IAAI,GAAGlH,GAAX,EAAgB;AACZkH,YAAAA,IAAI,GAAGpH,GAAP;AACH;AACJ;AACJ,OAnBD,MAmBO;AAEH,YAAIgH,GAAG,KAAKjH,GAAZ,EAAiB;AACbiH,UAAAA,GAAG,GAAG/G,GAAG,GAAG,CAAZ;AACH,SAFD,MAEO;AACHiH,UAAAA,GAAG,GAAGnH,GAAG,GAAG,CAAZ;AACH;;AACD,YAAIsH,IAAI,GAAGtH,GAAX;;AACA,aAAK,IAAIpL,GAAC,GAAGqS,GAAb,EAAkBrS,GAAC,IAAIuS,GAAvB,EAA4BvS,GAAC,EAA7B,EAAiC;AAC7B,eAAK,IAAIC,GAAC,GAAGqS,GAAb,EAAkBrS,GAAC,IAAIuS,GAAvB,EAA4BvS,GAAC,EAA7B,EAAiC;AAC7B,gBAAM4P,MAAK,GAAG3F,UAAU,CAACwI,IAAD,EAAOzS,GAAP,CAAxB;;AACAoP,YAAAA,OAAO,CAACzM,IAAR,CAAa;AAAE5C,cAAAA,CAAC,EAAEA,GAAL;AAAQC,cAAAA,CAAC,EAAEA,GAAX;AAAc4P,cAAAA,KAAK,EAAEA;AAArB,aAAb;AACH;;AACD6C,UAAAA,IAAI,GAAGA,IAAI,GAAG,CAAd;;AACA,cAAIA,IAAI,GAAGpH,GAAX,EAAgB;AACZoH,YAAAA,IAAI,GAAGtH,GAAP;AACH;AACJ;AACJ;;AAED,UAAI9D,KAAK,CAACwI,QAAV,EAAoB;AAChBxI,QAAAA,KAAK,CAACwI,QAAN,CAAeT,OAAf;AACH;;AAED9E,MAAAA,eAAe,CAAC3F,QAAQ,CAACO,EAAV,EAAcP,QAAQ,CAACW,EAAvB,EAA2BX,QAAQ,CAACS,EAApC,EAAwCT,QAAQ,CAACa,EAAjD,CAAf;AACH;;AACDoD,IAAAA,sBAAsB,CAAC,KAAD,CAAtB;AACAM,IAAAA,yBAAyB,CAAC,KAAD,CAAzB;AACAE,IAAAA,4BAA4B,CAAC,KAAD,CAA5B;AACAV,IAAAA,qBAAqB,CAAC,KAAD,CAArB;AACAI,IAAAA,eAAe,CAAC,IAAD,CAAf;AACAE,IAAAA,YAAY,CAAC,IAAD,CAAZ;;AAEA,QACIM,+BAA+B,CAACvJ,CAAhC,KAAsC,CAAC,CAAvC,IACAuJ,+BAA+B,CAACtJ,CAAhC,KAAsC,CAAC,CADvC,IAEAsJ,+BAA+B,CAACD,SAAhC,KAA8C,IAHlD,EAIE;AACE,UAAI,CAACqE,CAAC,CAACC,MAAH,IAAa,EAAED,CAAC,CAACC,MAAF,YAAoBoD,OAAtB,CAAjB,EAAiD;AAC7C;AACH;;AACD,UAAM3P,IAAI,GAAGsM,CAAC,CAACC,MAAF,CAASnP,qBAAT,EAAb;;AACA,UAAMuB,GAAC,GAAG2N,CAAC,CAAC4D,OAAF,GAAYlQ,IAAI,CAACmQ,IAA3B;;AACA,UAAMvR,GAAC,GAAG0N,CAAC,CAAC8D,OAAF,GAAYpQ,IAAI,CAACqQ,GAA3B;;AACA,UAAMpI,SAAS,GAAGC,+BAA+B,CAACD,SAAlD;;AACA,UACIA,SAAS,CAACtJ,CAAV,IAAeA,GAAf,IACAA,GAAC,IAAIsJ,SAAS,CAACtJ,CAAV,GAAcsJ,SAAS,CAACxH,CAD7B,IAEAwH,SAAS,CAACrJ,CAAV,IAAeA,GAFf,IAGAA,GAAC,IAAIqJ,SAAS,CAACrJ,CAAV,GAAcqJ,SAAS,CAAC4C,CAJjC,EAKE;AACE5C,QAAAA,SAAS,CAACuC,OAAV,CAAkB8B,CAAlB;AACH;;AACDnE,MAAAA,kCAAkC,CAAC;AAAExJ,QAAAA,CAAC,EAAE,CAAC,CAAN;AAASC,QAAAA,CAAC,EAAE,CAAC,CAAb;AAAgBqJ,QAAAA,SAAS,EAAE;AAA3B,OAAD,CAAlC;AACH;AACJ,GA5GD;;AA8GAe,EAAAA,SAAS,CAAC;AACNzL,IAAAA,MAAM,CAACyP,gBAAP,CAAwB,SAAxB,EAAmC+D,SAAnC;AACA,WAAO;AACHxT,MAAAA,MAAM,CAAC0P,mBAAP,CAA2B,SAA3B,EAAsC8D,SAAtC;AACH,KAFD;AAGH,GALQ,CAAT;;AAOA,MAAMO,WAAW,GAAG,SAAdA,WAAc,CAAChF,CAAD;AAChB,QAAI,CAACA,CAAC,CAACC,MAAH,IAAa,EAAED,CAAC,CAACC,MAAF,YAAoBoD,OAAtB,CAAjB,EAAiD;AAC7C;AACH;;AACD,QAAM3P,IAAI,GAAGsM,CAAC,CAACC,MAAF,CAASnP,qBAAT,EAAb;AACA,QAAMuB,CAAC,GAAG2N,CAAC,CAAC4D,OAAF,GAAYlQ,IAAI,CAACmQ,IAA3B;AACA,QAAMvR,CAAC,GAAG0N,CAAC,CAAC8D,OAAF,GAAYpQ,IAAI,CAACqQ,GAA3B;AAEA9S,IAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,MAApC;AAEA,QAAMO,aAAa,GAAG3S,IAAI,CAACoN,KAAL,CAAWpM,CAAC,GAAG1C,QAAf,CAAtB;AACA,QAAMsU,aAAa,GAAG5S,IAAI,CAACoN,KAAL,CAAWnM,CAAC,GAAG1C,QAAf,CAAtB;;AAEA,QAAImO,MAAM,CAACiG,aAAD,CAAN,IAAyBjG,MAAM,CAACiG,aAAD,CAAN,CAAsBC,aAAtB,CAA7B,EAAmE;AAC/D,6DAAwBlG,MAAM,CAACiG,aAAD,CAAN,CAAsBC,aAAtB,CAAxB,8CAA8D;AAAA,YAAnDtI,SAAmD;;AAC1D,YACIA,SAAS,CAACtJ,CAAV,IAAeA,CAAf,IACAA,CAAC,IAAIsJ,SAAS,CAACtJ,CAAV,GAAcsJ,SAAS,CAACxH,CAD7B,IAEAwH,SAAS,CAACrJ,CAAV,IAAeA,CAFf,IAGAA,CAAC,IAAIqJ,SAAS,CAACrJ,CAAV,GAAcqJ,SAAS,CAAC4C,CAJjC,EAKE;AACEtN,UAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,SAApC;AACH;AACJ;AACJ;;AAED,QAAI9J,KAAK,CAACsL,iBAAN,IAA2B3S,CAAC,GAAG9C,kBAAnC,EAAuD;AACnD,UAAIqE,EAAE,GAAGzE,cAAT;;AACA,6DAAkB8G,WAAW,CAACb,KAA9B,8CAAqC;AAAA,YAA1BmD,GAA0B;;AACjC,YAAInH,IAAI,CAAC8S,GAAL,CAAStQ,EAAE,GAAGxB,CAAd,IAAmBvC,6BAAvB,EAAsD;AAClDmB,UAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,YAApC;AACA;AACH;;AACD5P,QAAAA,EAAE,IAAIZ,SAAS,CAACuF,GAAD,CAAf;AACH;AACJ;;AAED,QAAImB,KAAK,CAACuL,kBAAN,IAA4B7S,CAAC,GAAGjD,cAApC,EAAoD;AAChD,UAAImE,EAAE,GAAG/D,kBAAT;;AACA,6DAAkByG,QAAQ,CAACZ,KAA3B,8CAAkC;AAAA,YAAvBwD,GAAuB;;AAC9B,YAAIxH,IAAI,CAAC8S,GAAL,CAAS5Q,EAAE,GAAGjB,CAAd,IAAmBxC,6BAAvB,EAAsD;AAClDmB,UAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,YAApC;AACA;AACH;;AACDlQ,QAAAA,EAAE,IAAIL,UAAU,CAAC2F,GAAD,CAAhB;AACH;AACJ;;AAED,QAAIxH,IAAI,CAAC8S,GAAL,CAAS9R,CAAC,GAAGwL,eAAe,CAACxL,CAA7B,IAAkCpD,QAAlC,IAA8CoC,IAAI,CAAC8S,GAAL,CAAS7R,CAAC,GAAGuL,eAAe,CAACvL,CAA7B,IAAkCrD,QAApF,EAA8F;AAC1FgC,MAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,WAApC;AACH;;AAED,QAAItI,YAAJ,EAAkB;AACd,UAAIxB,KAAK,CAACsL,iBAAV,EAA6B;AACzB,YAAME,QAAQ,GAAG9T,IAAI,CAAC+D,GAAL,CAAS+F,YAAY,CAACiJ,QAAb,GAAwB/R,CAAxB,GAA4B8I,YAAY,CAAC5C,MAAlD,EAA0DxI,kBAA1D,CAAjB;AACA4J,QAAAA,KAAK,CAACsL,iBAAN,CAAwB9J,YAAY,CAAC+I,MAArC,EAA6CiB,QAA7C;AACH;;AACD;AACH;;AAED,QAAI9J,SAAJ,EAAe;AACX,UAAI1B,KAAK,CAACuL,kBAAV,EAA8B;AAC1B,YAAME,SAAS,GAAG/T,IAAI,CAAC+D,GAAL,CAASiG,SAAS,CAACiJ,SAAV,GAAsBhS,CAAtB,GAA0B+I,SAAS,CAACzC,MAA7C,EAAqD5I,gBAArD,CAAlB;AACA2J,QAAAA,KAAK,CAACuL,kBAAN,CAAyB7J,SAAS,CAACgJ,MAAnC,EAA2Ce,SAA3C;AACH;;AACD;AACH;;AAED,QAAInK,mBAAJ,EAAyB;AACrB,UAAMsJ,IAAI,GAAGzO,mBAAmB,CAACzD,CAAD,EAAIC,CAAJ,EAAO2D,QAAP,EAAiBC,WAAjB,CAAhC;;AACA,UAAIqF,sBAAJ,EAA4B;AACxBqB,QAAAA,eAAe,CAAC/F,SAAS,CAACW,EAAX,EAAeX,SAAS,CAACe,EAAzB,EAA6Bf,SAAS,CAACa,EAAvC,EAA2C6M,IAAI,CAACjS,CAAhD,EAAmD,KAAnD,CAAf;AACH,OAFD,MAEO,IAAImJ,yBAAJ,EAA+B;AAClCmB,QAAAA,eAAe,CAAC/F,SAAS,CAACW,EAAX,EAAeX,SAAS,CAACe,EAAzB,EAA6B2M,IAAI,CAAClS,CAAlC,EAAqCwE,SAAS,CAACiB,EAA/C,EAAmD,KAAnD,CAAf;AACH,OAFM,MAEA;AACH8E,QAAAA,eAAe,CAAC/F,SAAS,CAACW,EAAX,EAAeX,SAAS,CAACe,EAAzB,EAA6B2M,IAAI,CAAClS,CAAlC,EAAqCkS,IAAI,CAACjS,CAA1C,CAAf;AACH;AACJ;;AAED,QAAIwE,kBAAJ,EAAwB;AACpB7F,MAAAA,MAAM,CAACwO,QAAP,CAAgB+D,IAAhB,CAAqB9Q,KAArB,CAA2B+Q,MAA3B,GAAoC,WAApC;AACA,UAAM4B,IAAI,GAAGvP,mBAAmB,CAACzD,CAAD,EAAIC,CAAJ,EAAO2D,QAAP,EAAiBC,WAAjB,CAAhC;AAEA,UAAIsB,EAAE,GAAGX,SAAS,CAACW,EAAnB;AACA,UAAII,EAAE,GAAGf,SAAS,CAACe,EAAnB;AACA,UAAIF,EAAE,GAAGb,SAAS,CAACa,EAAnB;AACA,UAAII,EAAE,GAAGjB,SAAS,CAACiB,EAAnB;;AACA,UAAIN,EAAE,GAAGE,EAAT,EAAa;AACTF,QAAAA,EAAE,GAAGX,SAAS,CAACa,EAAf;AACAA,QAAAA,EAAE,GAAGb,SAAS,CAACW,EAAf;AACH;;AACD,UAAII,EAAE,GAAGE,EAAT,EAAa;AACTF,QAAAA,EAAE,GAAGf,SAAS,CAACiB,EAAf;AACAA,QAAAA,EAAE,GAAGjB,SAAS,CAACe,EAAf;AACH;;AAGD,UAAI0N,SAAS,GAAG,CAAhB;AACA,UAAID,IAAI,CAAChT,CAAL,GAASmF,EAAb,EAAiB8N,SAAS,GAAGD,IAAI,CAAChT,CAAL,GAASmF,EAArB;AACjB,UAAI6N,IAAI,CAAChT,CAAL,GAASqF,EAAb,EAAiB4N,SAAS,GAAG5N,EAAE,GAAG2N,IAAI,CAAChT,CAAtB;AACjB,UAAIkT,SAAS,GAAG,CAAhB;AACA,UAAIF,IAAI,CAAC/S,CAAL,GAASsF,EAAb,EAAiB2N,SAAS,GAAGF,IAAI,CAAC/S,CAAL,GAASsF,EAArB;AACjB,UAAIyN,IAAI,CAAC/S,CAAL,GAASwF,EAAb,EAAiByN,SAAS,GAAGzN,EAAE,GAAGuN,IAAI,CAAC/S,CAAtB;;AAEjB,UAAIgT,SAAS,GAAGC,SAAhB,EAA2B;AACvB,YAAIF,IAAI,CAAC/S,CAAL,GAASsF,EAAb,EAAiB;AACbA,UAAAA,EAAE,GAAGyN,IAAI,CAAC/S,CAAV;AACH,SAFD,MAEO;AACHwF,UAAAA,EAAE,GAAGuN,IAAI,CAAC/S,CAAV;AACH;AACJ,OAND,MAMO;AACH,YAAI+S,IAAI,CAAChT,CAAL,GAASmF,EAAb,EAAiB;AACbA,UAAAA,EAAE,GAAG6N,IAAI,CAAChT,CAAV;AACH,SAFD,MAEO;AACHqF,UAAAA,EAAE,GAAG2N,IAAI,CAAChT,CAAV;AACH;AACJ;;AACDgI,MAAAA,WAAW,CAAC;AAAE7C,QAAAA,EAAE,EAAEA,EAAN;AAAUI,QAAAA,EAAE,EAAEA,EAAd;AAAkBF,QAAAA,EAAE,EAAEA,EAAtB;AAA0BI,QAAAA,EAAE,EAAEA;AAA9B,OAAD,CAAX;AACH;AACJ,GAvHD;;AAyHA,MAAM0N,aAAa,GAAG,SAAhBA,aAAgB,CAACxF,CAAD;AAClBA,IAAAA,CAAC,CAACE,cAAF;;AACA,QAAI,CAACF,CAAC,CAACC,MAAH,IAAa,EAAED,CAAC,CAACC,MAAF,YAAoBoD,OAAtB,CAAb,IAA+CvI,YAAnD,EAAiE;AAC7D;AACH;;AAED,QAAMpH,IAAI,GAAGsM,CAAC,CAACC,MAAF,CAASnP,qBAAT,EAAb;AACA,QAAMuB,CAAC,GAAG2N,CAAC,CAAC4D,OAAF,GAAYlQ,IAAI,CAACmQ,IAA3B;AACA,QAAMvR,CAAC,GAAG0N,CAAC,CAAC8D,OAAF,GAAYpQ,IAAI,CAACqQ,GAA3B;AAGA,QAAMC,aAAa,GAAG3S,IAAI,CAACoN,KAAL,CAAWpM,CAAC,GAAG1C,QAAf,CAAtB;AACA,QAAMsU,aAAa,GAAG5S,IAAI,CAACoN,KAAL,CAAWnM,CAAC,GAAG1C,QAAf,CAAtB;;AAEA,QAAImO,MAAM,CAACiG,aAAD,CAAN,IAAyBjG,MAAM,CAACiG,aAAD,CAAN,CAAsBC,aAAtB,CAA7B,EAAmE;AAC/D,6DAAwBlG,MAAM,CAACiG,aAAD,CAAN,CAAsBC,aAAtB,CAAxB,8CAA8D;AAAA,YAAnDtI,SAAmD;;AAC1D,YACIA,SAAS,CAACtJ,CAAV,IAAeA,CAAf,IACAA,CAAC,IAAIsJ,SAAS,CAACtJ,CAAV,GAAcsJ,SAAS,CAACxH,CAD7B,IAEAwH,SAAS,CAACrJ,CAAV,IAAeA,CAFf,IAGAA,CAAC,IAAIqJ,SAAS,CAACrJ,CAAV,GAAcqJ,SAAS,CAAC4C,CAJjC,EAKE;AACE;AACH;AACJ;AACJ;;AACD,QAAMjE,QAAQ,GAAGxE,mBAAmB,CAACzD,CAAD,EAAIC,CAAJ,EAAO2D,QAAP,EAAiBC,WAAjB,CAApC;AACA2E,IAAAA,qBAAqB,CAAC,KAAD,CAArB;AACAmI,IAAAA,gBAAgB,CAAC1I,QAAD,CAAhB;AACH,GA7BD;;AA+BA,MAAMmL,SAAS,GAAG,SAAZA,SAAY,CAACzF,CAAD;AACd,QAAIA,CAAC,CAAC0F,GAAF,KAAU,QAAd,EAAwB;AACpBnL,MAAAA,WAAW,CAAC;AAAElI,QAAAA,CAAC,EAAE,CAAC,CAAN;AAASC,QAAAA,CAAC,EAAE,CAAC;AAAb,OAAD,CAAX;AACAqI,MAAAA,UAAU,CAAC,EAAD,CAAV;AACA;AACH;;AACD,QAAIqF,CAAC,CAAC0F,GAAF,KAAU,OAAd,EAAuB;AACnB3C,MAAAA,iBAAiB;AACjBnG,MAAAA,eAAe,CAAC/F,SAAS,CAACW,EAAX,EAAeX,SAAS,CAACe,EAAV,GAAe,CAA9B,EAAiCf,SAAS,CAACW,EAA3C,EAA+CX,SAAS,CAACe,EAAV,GAAe,CAA9D,CAAf;AACH;;AACD,QAAIoI,CAAC,CAAC0F,GAAF,KAAU,KAAd,EAAqB;AACjB1F,MAAAA,CAAC,CAACE,cAAF;AACA6C,MAAAA,iBAAiB;AACjBnG,MAAAA,eAAe,CAAC/F,SAAS,CAACW,EAAV,GAAe,CAAhB,EAAmBX,SAAS,CAACe,EAA7B,EAAiCf,SAAS,CAACW,EAAV,GAAe,CAAhD,EAAmDX,SAAS,CAACe,EAA7D,CAAf;AACH;;AACD,QAAIgD,kBAAkB,IAAI,CAAC,YAAD,EAAe,WAAf,EAA4B,SAA5B,EAAuC,WAAvC,EAAoDzC,QAApD,CAA6D6H,CAAC,CAAC0F,GAA/D,CAA1B,EAA+F;AAC3F1F,MAAAA,CAAC,CAACE,cAAF;AACA6C,MAAAA,iBAAiB;AACjB,UAAIvL,EAAE,GAAGX,SAAS,CAACW,EAAnB;AACA,UAAII,EAAE,GAAGf,SAAS,CAACe,EAAnB;AACA,UAAIF,EAAE,GAAGb,SAAS,CAACW,EAAnB;AACA,UAAIM,EAAE,GAAGjB,SAAS,CAACe,EAAnB;;AACA,UAAIoI,CAAC,CAAC0F,GAAF,KAAU,YAAd,EAA4B;AACxBlO,QAAAA,EAAE,GAAGX,SAAS,CAACW,EAAV,GAAe,CAApB;AACAE,QAAAA,EAAE,GAAGb,SAAS,CAACW,EAAV,GAAe,CAApB;AACH,OAHD,MAGO,IAAIwI,CAAC,CAAC0F,GAAF,KAAU,WAAd,EAA2B;AAC9BlO,QAAAA,EAAE,GAAGX,SAAS,CAACW,EAAV,GAAe,CAApB;AACAE,QAAAA,EAAE,GAAGb,SAAS,CAACW,EAAV,GAAe,CAApB;AACH,OAHM,MAGA,IAAIwI,CAAC,CAAC0F,GAAF,KAAU,SAAd,EAAyB;AAC5B9N,QAAAA,EAAE,GAAGf,SAAS,CAACe,EAAV,GAAe,CAApB;AACAE,QAAAA,EAAE,GAAGjB,SAAS,CAACe,EAAV,GAAe,CAApB;AACH,OAHM,MAGA,IAAIoI,CAAC,CAAC0F,GAAF,KAAU,WAAd,EAA2B;AAC9B9N,QAAAA,EAAE,GAAGf,SAAS,CAACe,EAAV,GAAe,CAApB;AACAE,QAAAA,EAAE,GAAGjB,SAAS,CAACe,EAAV,GAAe,CAApB;AACH;;AACDgF,MAAAA,eAAe,CAACpF,EAAD,EAAKI,EAAL,EAASF,EAAT,EAAaI,EAAb,CAAf;AACH;AACJ,GArCD;;AAuCA,MAAM6N,aAAa,GAAG,SAAhBA,aAAgB,CAAC3F,CAAD;AAClB,QAAIT,QAAQ,IAAI3E,kBAAZ,IAAkC,CAAC,YAAD,EAAe,WAAf,EAA4B,SAA5B,EAAuC,WAAvC,EAAoDzC,QAApD,CAA6D6H,CAAC,CAAC0F,GAA/D,CAAtC,EAA2G;AACvG3C,MAAAA,iBAAiB;AACjB;AACH;;AAED,QAAI/C,CAAC,CAAC0F,GAAF,KAAU,OAAd,EAAuB;AACnB3K,MAAAA,eAAe,CAAC,IAAD,CAAf;AACA;AACH;;AAED,QAAI,CAACiF,CAAC,CAAC4F,OAAF,IAAa5F,CAAC,CAAC6F,OAAhB,KAA4BjQ,MAAM,CAACC,YAAP,CAAoBmK,CAAC,CAAC8F,KAAtB,EAA6BjG,WAA7B,OAA+C,GAA/E,EAAoF;AAChF;AACH;;AAGD,QAAI,CAACG,CAAC,CAAC4F,OAAF,IAAa5F,CAAC,CAAC6F,OAAhB,KAA4BjQ,MAAM,CAACC,YAAP,CAAoBmK,CAAC,CAAC8F,KAAtB,EAA6BjG,WAA7B,OAA+C,GAA/E,EAAoF;AAChF;AACH;;AAED,QAAIG,CAAC,CAAC0F,GAAF,KAAU,WAAV,IAAyB1F,CAAC,CAAC0F,GAAF,KAAU,QAAvC,EAAiD;AAC7C,UAAIlO,EAAE,GAAGX,SAAS,CAACW,EAAnB;AACA,UAAII,EAAE,GAAGf,SAAS,CAACe,EAAnB;AACA,UAAIF,EAAE,GAAGb,SAAS,CAACa,EAAnB;AACA,UAAII,EAAE,GAAGjB,SAAS,CAACiB,EAAnB;;AACA,UAAIN,EAAE,GAAGE,EAAT,EAAa;AACTF,QAAAA,EAAE,GAAGX,SAAS,CAACa,EAAf;AACAA,QAAAA,EAAE,GAAGb,SAAS,CAACW,EAAf;AACH;;AACD,UAAII,EAAE,GAAGE,EAAT,EAAa;AACTF,QAAAA,EAAE,GAAGf,SAAS,CAACiB,EAAf;AACAA,QAAAA,EAAE,GAAGjB,SAAS,CAACe,EAAf;AACH;;AACD,UAAM8J,OAAO,GAAa,EAA1B;;AACA,WAAK,IAAIpP,CAAC,GAAGsF,EAAb,EAAiBtF,CAAC,IAAIwF,EAAtB,EAA0BxF,CAAC,EAA3B,EAA+B;AAC3B,aAAK,IAAID,CAAC,GAAGmF,EAAb,EAAiBnF,CAAC,IAAIqF,EAAtB,EAA0BrF,CAAC,EAA3B,EAA+B;AAC3BqP,UAAAA,OAAO,CAACzM,IAAR,CAAa;AAAE5C,YAAAA,CAAC,EAAEA,CAAL;AAAQC,YAAAA,CAAC,EAAEA,CAAX;AAAc4P,YAAAA,KAAK,EAAE;AAArB,WAAb;AACH;AACJ;;AACD,UAAIvI,KAAK,CAACwI,QAAV,EAAoB;AAChBxI,QAAAA,KAAK,CAACwI,QAAN,CAAeT,OAAf;AACH;;AACD;AACH;;AAGD,QAAI7K,SAAS,CAACW,EAAV,KAAiB,CAAC,CAAlB,IAAuBX,SAAS,CAACa,EAAV,KAAiB,CAAC,CAAzC,IAA8Cb,SAAS,CAACe,EAAV,KAAiB,CAAC,CAAhE,IAAqEf,SAAS,CAACiB,EAAV,KAAiB,CAAC,CAA3F,EAA8F;AAC1F;AACH;;AAED,QACKkI,CAAC,CAAC+F,OAAF,IAAa,EAAb,IAAmB/F,CAAC,CAAC+F,OAAF,IAAa,EAAjC,IACC/F,CAAC,CAAC+F,OAAF,IAAa,EAAb,IAAmB/F,CAAC,CAAC+F,OAAF,IAAa,GADjC,IAEC/F,CAAC,CAAC+F,OAAF,IAAa,EAAb,IAAmB/F,CAAC,CAAC+F,OAAF,IAAa,EAFjC,IAGA/F,CAAC,CAAC0F,GAAF,KAAU,OAHV,IAIA1F,CAAC,CAAC0F,GAAF,KAAU,GAJV,IAKA1F,CAAC,CAAC0F,GAAF,KAAU,GALV,IAMA1F,CAAC,CAAC0F,GAAF,KAAU,GAPd,EAQE;AACE,UAAIrJ,YAAY,CAACxF,SAAS,CAACW,EAAX,EAAeX,SAAS,CAACe,EAAzB,CAAhB,EAA8C;AAC1CoI,QAAAA,CAAC,CAACE,cAAF;AACA;AACH;;AAED8C,MAAAA,gBAAgB,CAAC;AAAE3Q,QAAAA,CAAC,EAAEwE,SAAS,CAACW,EAAf;AAAmBlF,QAAAA,CAAC,EAAEuE,SAAS,CAACe;AAAhC,OAAD,CAAhB;AACAiD,MAAAA,qBAAqB,CAACmF,CAAC,CAAC0F,GAAF,KAAU,OAAX,CAArB;AACA;AACH;;AAED,QAAI,CAAC,YAAD,EAAe,WAAf,EAA4B,SAA5B,EAAuC,WAAvC,EAAoDvN,QAApD,CAA6D6H,CAAC,CAAC0F,GAA/D,CAAJ,EAAyE;AACrE,UAAIlB,IAAI,GAAG;AAAEnS,QAAAA,CAAC,EAAEwE,SAAS,CAACW,EAAf;AAAmBlF,QAAAA,CAAC,EAAEuE,SAAS,CAACe;AAAhC,OAAX;AACA,UAAI2M,IAAI,GAAG;AAAElS,QAAAA,CAAC,EAAEwE,SAAS,CAACa,EAAf;AAAmBpF,QAAAA,CAAC,EAAEuE,SAAS,CAACiB;AAAhC,OAAX;;AAEA,UAAIkI,CAAC,CAAC0F,GAAF,KAAU,YAAV,IAA0B1F,CAAC,CAAC0F,GAAF,KAAU,KAAxC,EAA+C;AAC3CnB,QAAAA,IAAI,CAAClS,CAAL,IAAU,CAAV;AACH,OAFD,MAEO,IAAI2N,CAAC,CAAC0F,GAAF,KAAU,WAAd,EAA2B;AAC9BnB,QAAAA,IAAI,CAAClS,CAAL,IAAU,CAAV;AACH,OAFM,MAEA,IAAI2N,CAAC,CAAC0F,GAAF,KAAU,SAAd,EAAyB;AAC5BnB,QAAAA,IAAI,CAACjS,CAAL,IAAU,CAAV;AACH,OAFM,MAEA,IAAI0N,CAAC,CAAC0F,GAAF,KAAU,WAAd,EAA2B;AAC9BnB,QAAAA,IAAI,CAACjS,CAAL,IAAU,CAAV;AACH;;AACD,UAAIiS,IAAI,CAAClS,CAAL,GAAS,CAAb,EAAgB;AACZkS,QAAAA,IAAI,CAAClS,CAAL,GAAS,CAAT;AACH;;AACD,UAAIkS,IAAI,CAACjS,CAAL,GAAS,CAAb,EAAgB;AACZiS,QAAAA,IAAI,CAACjS,CAAL,GAAS,CAAT;AACH;;AACD,UAAI,CAAC0N,CAAC,CAACgG,QAAP,EAAiB;AACbxB,QAAAA,IAAI,gBAAQD,IAAR,CAAJ;AACH;;AACD3H,MAAAA,eAAe,CAAC4H,IAAI,CAACnS,CAAN,EAASmS,IAAI,CAAClS,CAAd,EAAiBiS,IAAI,CAAClS,CAAtB,EAAyBkS,IAAI,CAACjS,CAA9B,CAAf;AACA;AACH;;AACD0N,IAAAA,CAAC,CAACE,cAAF;AACH,GA/FD;;AAiGA,MAAM+F,WAAW,GAAG,SAAdA,WAAc,CAACjG,CAAD;AAChBjF,IAAAA,eAAe,CAACiF,CAAC,CAACgG,QAAH,CAAf;AACH,GAFD;;AAIA,MAAME,aAAa,GAAG,SAAhBA,aAAgB,CAAClG,CAAD;;;AAClB,QAAI,CAACA,CAAC,CAACC,MAAH,IAAa,EAAED,CAAC,CAACC,MAAF,YAAoBoD,OAAtB,CAAjB,EAAiD;AAC7C;AACH;;AAED,QAAM3P,IAAI,GAAGsM,CAAC,CAACC,MAAF,CAASnP,qBAAT,EAAb;AACA,QAAMuB,CAAC,GAAG2N,CAAC,CAAC4D,OAAF,GAAYlQ,IAAI,CAACmQ,IAA3B;AACA,QAAMvR,CAAC,GAAG0N,CAAC,CAAC8D,OAAF,GAAYpQ,IAAI,CAACqQ,GAA3B;AACA,QAAMsB,IAAI,GAAGvP,mBAAmB,CAACzD,CAAD,EAAIC,CAAJ,EAAO2D,QAAP,EAAiBC,WAAjB,CAAhC;AACA,QAAMC,KAAK,GAAGkP,IAAI,CAAChT,CAAnB;AACA,QAAM+D,KAAK,GAAGiP,IAAI,CAAC/S,CAAnB;QACMkF,KAAmBX,UAAnBW;QAAIE,KAAeb,UAAfa;QAAIE,KAAWf,UAAXe;QAAIE,KAAOjB,UAAPiB;;AAClB,QAAIN,EAAE,GAAGE,EAAT;AAAA,iBAAwB,CAACA,EAAD,EAAKF,EAAL,CAAxB;AAAcA,MAAAA,EAAd;AAAkBE,MAAAA,EAAlB;AAAA;;AACA,QAAIE,EAAE,GAAGE,EAAT;AAAA,kBAAwB,CAACA,EAAD,EAAKF,EAAL,CAAxB;AAAcA,MAAAA,EAAd;AAAkBE,MAAAA,EAAlB;AAAA;;AAEA,QAAI,EAAExF,CAAC,GAAG9C,kBAAJ,IAA0B6C,CAAC,GAAGjD,cAAhC,CAAJ,EAAqD;AACjD;AACH;;AAED,QAAI,EAAE+G,KAAK,IAAIqB,EAAT,IAAerB,KAAK,IAAIuB,EAA1B,KAAiC,EAAEtB,KAAK,IAAIwB,EAAT,IAAexB,KAAK,IAAI0B,EAA1B,CAArC,EAAoE;AAChE8E,MAAAA,eAAe,CAACzG,KAAD,EAAQC,KAAR,EAAeD,KAAf,EAAsBC,KAAtB,CAAf;AACH;;AAED4O,IAAAA,WAAW,CAAChF,CAAD,CAAX;;AACA,QAAMmG,EAAE,gBACDnG,CADC;AAEJ7J,MAAAA,KAAK,EAALA,KAFI;AAGJC,MAAAA,KAAK,EAALA;AAHI,MAAR;;AAKA,2BAAAuD,KAAK,CAACyM,YAAN,iFAAAzM,KAAK,EAAgBwM,EAAhB,CAAL;AACH,GA9BD;;AAgCA,MAAM5G,QAAQ,GAAGjF,QAAQ,CAACjI,CAAT,KAAe,CAAC,CAAhB,IAAqBiI,QAAQ,CAAChI,CAAT,KAAe,CAAC,CAAtD;AACA,MAAI+T,gBAAgB,GAAG;AAAEhU,IAAAA,CAAC,EAAE,CAAL;AAAQC,IAAAA,CAAC,EAAE;AAAX,GAAvB;AACA,MAAIgU,aAAa,GAAG,CAApB;AACA,MAAIC,cAAc,GAAG,CAArB;AACA,MAAIC,iBAAiB,GAAgC,OAArD;;AACA,MAAIjH,QAAJ,EAAc;AACV8G,IAAAA,gBAAgB,GAAG/P,mBAAmB,CAClCgE,QAAQ,CAACjI,CADyB,EAElCiI,QAAQ,CAAChI,CAFyB,EAGlC2D,QAHkC,EAIlCC,WAJkC,EAKlCK,UALkC,EAMlCtD,SANkC,EAOlCC,UAPkC,CAAtC;AASA,QAAMR,KAAK,GAAGkE,SAAS,CAAC0D,QAAQ,CAACjI,CAAV,EAAaiI,QAAQ,CAAChI,CAAtB,CAAvB;AAEA+T,IAAAA,gBAAgB,CAAChU,CAAjB,IAAsB,CAAtB;AACAgU,IAAAA,gBAAgB,CAAC/T,CAAjB,IAAsB,CAAtB;AACAgU,IAAAA,aAAa,GAAGrT,SAAS,CAACqH,QAAQ,CAACjI,CAAV,CAAT,GAAwB,CAAxC;AACAkU,IAAAA,cAAc,GAAGrT,UAAU,CAACoH,QAAQ,CAAChI,CAAV,CAAV,GAAyB,CAA1C;AACAkU,IAAAA,iBAAiB,GAAG9T,KAAK,CAACxC,SAAN,IAAmBD,gBAAgB,CAACC,SAApC,IAAiD,MAArE;AACH;;AAED,MAAMuW,UAAU,GAAG;AACfvE,IAAAA,KAAK,EAAE1H,SADQ;AAEfkM,IAAAA,SAAS,EAAE,IAFI;AAGfjB,IAAAA,SAAS,EAAEA,SAHI;AAIf/S,IAAAA,KAAK,EAAE;AACHiU,MAAAA,QAAQ,EAAE,UADP;AAEH5C,MAAAA,GAAG,EAAEsC,gBAAgB,CAAC/T,CAFnB;AAGHuR,MAAAA,IAAI,EAAEwC,gBAAgB,CAAChU,CAHpB;AAIHtB,MAAAA,KAAK,EAAEuV,aAJJ;AAKHtV,MAAAA,MAAM,EAAEuV,cALL;AAMHK,MAAAA,OAAO,EAAE,MANN;AAOHC,MAAAA,MAAM,EAAE,MAPL;AAQH3W,MAAAA,SAAS,EAAEsW,iBARR;AASHlW,MAAAA,KAAK,EAAE,OATJ;AAUHH,MAAAA,QAAQ,EAAEF,gBAAgB,CAACE,QAVxB;AAWHI,MAAAA,UAAU,EAAE;AAXT;AAJQ,GAAnB;AAmBA,MAAMuW,KAAK,4BAAGnN,KAAK,CAACoN,cAAT,0DAAG,2BAAApN,KAAK,EACfW,QAAQ,CAACjI,CADM,EAEfiI,QAAQ,CAAChI,CAFM,eAGVmU,UAHU;AAGEtE,IAAAA,QAAQ,EAAE1H;AAHZ,MAIfsI,iBAJe,CAAnB;AAOA,SACIiE,mBAAA,MAAA;AAAKtU,IAAAA,KAAK,EAAE;AAAEiU,MAAAA,QAAQ,EAAE,UAAZ;AAAwB3V,MAAAA,MAAM,EAAE;AAAhC;GAAZ,EACIgW,mBAAA,SAAA;AACItU,IAAAA,KAAK,EAAE;AACH3B,MAAAA,KAAK,EAAE,mBADJ;AAEHC,MAAAA,MAAM,EAAE,mBAFL;AAGH4V,MAAAA,OAAO,EAAE;AAHN;AAKP7K,IAAAA,GAAG,EAAEnC;GANT,CADJ,EASIoN,mBAAA,MAAA;AACIjL,IAAAA,GAAG,EAAEjC;AACL0L,IAAAA,aAAa,EAAEA;AACf9B,IAAAA,WAAW,EAAEA;AACbsB,IAAAA,WAAW,EAAEA;AACbzB,IAAAA,YAAY,EAAEA;AACd2C,IAAAA,aAAa,EAAEA;AACf9C,IAAAA,QAAQ,EAAEA;AACV6D,IAAAA,SAAS,EAAEC,MAAM,CAACC;AAClBzU,IAAAA,KAAK,EAAE;AACHiU,MAAAA,QAAQ,EAAE,UADP;AAEH5V,MAAAA,KAAK,EAAE,MAFJ;AAGHC,MAAAA,MAAM,EAAE,MAHL;AAIH+S,MAAAA,GAAG,EAAE,CAJF;AAKHF,MAAAA,IAAI,EAAE,CALH;AAMHuD,MAAAA,QAAQ,EAAE,QANP;AAOHC,MAAAA,YAAY,EAAE;AAPX;GATX,EAmBIL,mBAAA,MAAA;AACItU,IAAAA,KAAK,EAAE;AACHiU,MAAAA,QAAQ,EAAE,UADP;AAEH9C,MAAAA,IAAI,EAAE,CAFH;AAGHE,MAAAA,GAAG,EAAE,CAHF;AAIHhT,MAAAA,KAAK,EAAE,CAJJ;AAKHC,MAAAA,MAAM,EAAEiJ,SAAS,CAAC3H,CAAV,GAAc,IALnB;AAMH5B,MAAAA,eAAe,EAAE;AANd;GADX,CAnBJ,EA6BIsW,mBAAA,MAAA;AACItU,IAAAA,KAAK,EAAE;AACHiU,MAAAA,QAAQ,EAAE,UADP;AAEH9C,MAAAA,IAAI,EAAE,CAFH;AAGHE,MAAAA,GAAG,EAAE,CAHF;AAIHhT,MAAAA,KAAK,EAAEkJ,SAAS,CAAC5H,CAAV,GAAc,IAJlB;AAKHrB,MAAAA,MAAM,EAAE,CALL;AAMHN,MAAAA,eAAe,EAAE;AANd;GADX,CA7BJ,CATJ,EAiDIsW,mBAAA,WAAA;AACItU,IAAAA,KAAK,EAAE;AAAEiU,MAAAA,QAAQ,EAAE,UAAZ;AAAwB5C,MAAAA,GAAG,EAAE,CAA7B;AAAgCF,MAAAA,IAAI,EAAE,CAAtC;AAAyC9S,MAAAA,KAAK,EAAE,CAAhD;AAAmDC,MAAAA,MAAM,EAAE,CAA3D;AAA8DsW,MAAAA,OAAO,EAAE;AAAvE;AACPvL,IAAAA,GAAG,EAAEhC;AACLwN,IAAAA,OAAO,EAAE,iBAACvH,CAAD;AAAA,aAAOA,CAAC,CAACC,MAAF,CAASX,MAAT,EAAP;AAAA;AACTkI,IAAAA,QAAQ,EAAE;AACV/B,IAAAA,SAAS,EAAEE;AACX8B,IAAAA,OAAO,EAAExB;GANb,CAjDJ,EAyDK1G,QAAQ,KACJuH,KADI,WACJA,KADI,GAEDE,mBAAA,QAAA,oBACQP;AACJiB,IAAAA,IAAI,EAAC;AACLH,IAAAA,OAAO,EAAE,iBAACvH,CAAD;AAAA,aAAOA,CAAC,CAACC,MAAF,CAASX,MAAT,EAAP;AAAA;AACT6C,IAAAA,QAAQ,EAAE,kBAACnC,CAAD;AAAA,aAAOvF,YAAY,CAACuF,CAAC,CAACC,MAAF,CAASiC,KAAV,CAAnB;AAAA;IAJd,CAFC,CAzDb,CADJ;AAqEH;;;;"}
|
|
1
|
+
{"version":3,"file":"index.modern.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 rowHeaderWidth = 50;\nconst rowHeaderBackgroundColor = '#f8f9fa';\nconst rowHeaderTextColor = '#666666';\nconst rowHeaderSelectedBackgroundColor = '#e8eaed';\nconst columnHeaderHeight = 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;\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 Selection {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface Change {\n x: number;\n y: number;\n value: string | number | null;\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\nexport interface SheetProps {\n freezeColumns?: number;\n freezeRows?: number;\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 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?: (index: number, value: number) => void;\n onCellHeightChange?: (index: 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 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): CellCoordinate {\n let absX = 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 = 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 renderOnCanvas(\n context: CanvasRenderingContext2D,\n rowSizes: RowOrColumnSize,\n columnSizes: RowOrColumnSize,\n cellStyle: CellPropertyFunction<Style>,\n cellWidth: RowOrColumnPropertyFunction<number>,\n cellHeight: RowOrColumnPropertyFunction<number>,\n selection: Selection,\n knobDragInProgress: boolean,\n columnHeaders: RowOrColumnPropertyFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n knobArea: Selection,\n displayData: CellPropertyFunction<CellContentType>,\n dataOffset: CellCoordinate\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 = columnHeaderHeight;\n for (const y of rowSizes.index) {\n let xCoord1 = 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 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\n const selectionActive = selx1 !== -1 && selx2 !== -1 && sely1 !== -1 && sely2 !== -1;\n\n const p1 = cellToAbsCoordinate(selx1, sely1, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight);\n const p2 = cellToAbsCoordinate(selx2, sely2, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight);\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 context.fillRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n }\n\n // row header background\n context.fillStyle = rowHeaderBackgroundColor;\n context.fillRect(0, 0, rowHeaderWidth, context.canvas.height);\n\n // row header selection\n if (selectionActive) {\n context.fillStyle = rowHeaderSelectedBackgroundColor;\n context.fillRect(0, p1.y, rowHeaderWidth, p2.y - p1.y);\n }\n\n // column header background\n context.fillStyle = columnHeaderBackgroundColor;\n context.fillRect(0, 0, context.canvas.width, columnHeaderHeight);\n\n // column header selection\n if (selectionActive) {\n context.fillStyle = columnHeaderSelectedBackgroundColor;\n context.fillRect(p1.x, 0, p2.x - p1.x, columnHeaderHeight);\n }\n\n // grid\n context.strokeStyle = gridColor;\n context.lineWidth = 1;\n let startX = rowHeaderWidth;\n\n for (const col of columnSizes.index) {\n context.beginPath();\n context.moveTo(startX, 0);\n context.lineTo(startX, context.canvas.height);\n context.stroke();\n startX += cellWidth(col);\n }\n\n let startY = columnHeaderHeight;\n for (const row of rowSizes.index) {\n context.beginPath();\n context.moveTo(0, startY);\n context.lineTo(context.canvas.width, startY);\n context.stroke();\n startY += cellHeight(row);\n }\n\n // row header text\n startY = 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 xx = rowHeaderWidth * 0.5;\n const yy = startY + cellHeight(row) * 0.5;\n const cellContent = row + 1;\n context.fillText('' + cellContent, xx, yy);\n startY += cellHeight(row);\n }\n\n // column header text\n startX = 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 const chStyle = columnHeaderStyle(col);\n drawCell(context, chcontent, chStyle, defaultColumnHeaderStyle, startX, 0, cw, columnHeaderHeight);\n startX += cw;\n }\n\n // selection outline\n if (selectionActive) {\n context.strokeStyle = selBorderColor;\n context.lineWidth = 1;\n context.beginPath();\n context.rect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\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(kx1, ky1, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight);\n const knobPoint2 = cellToAbsCoordinate(\n kx2 + 1,\n ky2 + 1,\n rowSizes,\n columnSizes,\n dataOffset,\n cellWidth,\n cellHeight\n );\n context.strokeStyle = knobAreaBorderColor;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n context.beginPath();\n context.rect(knobPoint1.x, knobPoint1.y - 1, knobPoint2.x - knobPoint1.x, knobPoint2.y - knobPoint1.y);\n context.stroke();\n context.setLineDash([]);\n }\n\n // selection knob\n if (selectionActive && !hideKnob) {\n context.fillStyle = selBorderColor;\n context.fillRect(p2.x - knobSize * 0.5, p2.y - knobSize * 0.5, knobSize, knobSize);\n }\n\n // content\n context.textBaseline = 'middle';\n\n // draw content\n let yCoord = columnHeaderHeight;\n for (const y of rowSizes.index) {\n let xCoord = 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({ x1: -1, y1: -1, x2: -1, y2: -1 });\n const [knobArea, setKnobArea] = useState({ 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<any>(null);\n const [rowResize, setRowResize] = useState<any>(null);\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 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 () => calculateRowsOrColsSizes(freezeColumns, cellWidth, rowHeaderWidth, dataOffset.x, canvasWidth),\n [props.freezeColumns, cellWidth, dataOffset.x, canvasWidth]\n );\n\n const rowSizes = useMemo(\n () => calculateRowsOrColsSizes(freezeRows, cellHeight, columnHeaderHeight, dataOffset.y, canvasHeight),\n [props.freezeRows, cellHeight, dataOffset.y, canvasHeight]\n );\n\n const changeSelection = (x1: number, y1: number, x2: number, y2: number, scrollToP2 = true) => {\n setSelection({ x1, y1, x2, y2 });\n\n if (scrollToP2) {\n const newDataOffset = { x: dataOffset.x, y: dataOffset.y };\n let newScrollLeft = -1;\n let newScrollTop = -1;\n\n if (!columnSizes.index.includes(x2) || columnSizes.index[columnSizes.index.length - 1] === x2) {\n const increment = columnSizes.index[columnSizes.index.length - 1] <= x2 ? 1 : -1;\n const newX = Math.max(dataOffset.x, freezeColumns) + increment;\n newDataOffset.x = newX;\n newScrollLeft = newX * scrollSpeed;\n }\n\n if (!rowSizes.index.includes(y2) || rowSizes.index[rowSizes.index.length - 1] === y2) {\n const increment = rowSizes.index[rowSizes.index.length - 1] <= y2 ? 1 : -1;\n const newY = Math.max(dataOffset.y, 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 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.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(selx2, sely2, rowSizes, columnSizes, dataOffset, cellWidth, cellHeight);\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]);\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 = columnHeaderHeight;\n let xCoord = 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 = 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 = 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 }, [displayData, props.cellWidth, props.cellHeight, canvasRef, columnSizes, rowSizes, dataOffset.x, dataOffset.y]);\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 knobDragInProgress,\n columnHeaders,\n columnHeaderStyle,\n knobArea,\n displayData,\n dataOffset\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 knobDragInProgress,\n columnHeaders,\n columnHeaderStyle,\n knobArea,\n displayData,\n dataOffset,\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 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 if (\n (types.includes('text/rtf') && types.includes('text/plain')) ||\n (types.includes('text/plain') && !types.includes('text/html'))\n ) {\n const text = clipboardData.getData('text/plain');\n parsePastedText(text);\n } else if (types.includes('text/html')) {\n const pastedHtml = clipboardData.getData('text/html');\n parsePastedHtml(pastedHtml);\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].innerHTML;\n } else {\n str = p.innerHTML;\n }\n } else {\n str = td.innerHTML;\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.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 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 const rows = [];\n for (let y = dy1; y <= dy2; y++) {\n const row = [];\n for (let x = dx1; x <= dx2; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value);\n } else {\n row.push('');\n }\n }\n rows.push(row.join('\\t'));\n }\n const cptext = rows.join('\\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 ?? 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 };\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 (y < 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 setColumnResize({\n startX: end,\n oldWidth: cellWidth(index),\n colIdx: index,\n });\n return;\n }\n }\n }\n if (x < 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 setRowResize({\n startY: end,\n oldHeight: cellHeight(index),\n rowIdx: index,\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 commitEditingCell();\n }\n\n let scrollToP2 = true;\n\n if (x < rowHeaderWidth) {\n sel2.x = dataOffset.x + 100;\n scrollToP2 = false;\n setRowSelectionInProgress(true);\n } else {\n setRowSelectionInProgress(false);\n }\n\n if (y < columnHeaderHeight) {\n sel2.y = dataOffset.y + 100;\n scrollToP2 = false;\n setColumnSelectionInProgress(true);\n } else {\n setColumnSelectionInProgress(false);\n }\n\n setSelectionInProgress(true);\n changeSelection(sel1.x, sel1.y, sel2.x, sel2.y, scrollToP2);\n setEditCell({ x: -1, y: -1 });\n setEditKey('');\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\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 });\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 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 });\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 (props.onCellWidthChange && y < columnHeaderHeight) {\n let xx = 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 (props.onCellHeightChange && x < rowHeaderWidth) {\n let yy = 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.colIdx, 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.rowIdx, newHeight);\n }\n return;\n }\n\n if (selectionInProgress) {\n const sel2 = absCoordianteToCell(x, y, rowSizes, columnSizes);\n if (rowSelectionInProgress) {\n changeSelection(selection.x1, selection.y1, selection.x2, sel2.y, false);\n } else if (columnSelectionInProgress) {\n changeSelection(selection.x1, selection.y1, sel2.x, selection.y2, 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 (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 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 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 if (e.key === 'ArrowRight' || e.key === 'Tab') {\n sel2.x += 1;\n } else if (e.key === 'ArrowLeft') {\n sel2.x -= 1;\n } else if (e.key === 'ArrowUp') {\n sel2.y -= 1;\n } else if (e.key === 'ArrowDown') {\n sel2.y += 1;\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 > columnHeaderHeight && x > 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 );\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 return (\n <div style={{ position: 'relative', height: '100%' }}>\n <canvas\n style={{\n width: 'calc(100% - 14px)',\n height: 'calc(100% - 15px)',\n outline: '1px solid #ddd', // find another better solution ?\n }}\n ref={canvasRef}\n />\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={styles.sheetscroll}\n style={{\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 >\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 onFocus={(e) => e.target.select()}\n tabIndex={0}\n onKeyDown={onGridKeyDown}\n onKeyUp={onGridKeyUp}\n ></textarea>\n {editMode &&\n (input ?? (\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","rowHeaderWidth","rowHeaderBackgroundColor","rowHeaderTextColor","rowHeaderSelectedBackgroundColor","columnHeaderHeight","columnHeaderBackgroundColor","columnHeaderSelectedBackgroundColor","xBinSize","yBinSize","scrollSpeed","resizeColumnRowMouseThreshold","minimumColumnWidth","minimumRowHeight","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","cellToAbsCoordinate","dataOffset","indX","findIndex","indY","renderOnCanvas","cellStyle","selection","knobDragInProgress","columnHeaders","columnHeaderStyle","knobArea","displayData","clearRect","yCoord1","xCoord1","hideKnob","selx1","x1","selx2","x2","sely1","y1","sely2","y2","selectionActive","p1","p2","currentCol","includes","currentRow","strokeStyle","lineWidth","startX","col","moveTo","lineTo","stroke","startY","row","textBaseline","cw","ch","chcontent","chStyle","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","freezeColumns","freezeRows","useMemo","cellReadOnly","readOnly","sourceData","editData","editKeys","useEffect","currEditKey","changeSelection","scrollToP2","newDataOffset","newScrollLeft","newScrollTop","increment","newX","newY","setTimeout","current","scrollLeft","scrollTop","onSelectionChanged","sx1","sy1","sx2","sy2","knobCoordinates","c","hitMap","hitM","cellW","onClick","absX1","absY1","absX2","absY2","h","x1key","floor","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","text","getData","parsePastedText","pastedHtml","parsePastedHtml","addEventListener","removeEventListener","findTable","element","children","child","nodeName","maybeTable","html","div","createElement","innerHTML","trim","pasteLocX","pasteLocY","min","changes","tableNode","tableChild","tr","td","str","p","replaceAll","value","onChange","pasteX2","pasteY2","rows","split","cols","dy1","dy2","dx1","dx2","join","cptext","commitEditingCell","startEditingCell","editDataValue","val","editDataKey","onScroll","Element","onScrollChange","newMaxScroll","onMouseLeave","body","cursor","onMouseDown","button","clientX","left","clientY","top","hitTargetKeyX","hitTargetKeyY","colIdx","abs","oldWidth","rowIdx","oldHeight","sel2","sel1","onMouseUp","fx1","fy1","fx2","fy2","srcY","srcX","onMouseMove","onCellWidthChange","onCellHeightChange","newWidth","newHeight","cell","xCellDiff","yCellDiff","onDoubleClick","onKeyDown","key","onGridKeyDown","metaKey","ctrlKey","which","keyCode","shiftKey","onGridKeyUp","onContextMenu","ev","onRightClick","editTextPosition","editTextWidth","editTextHeight","editTextTextAlign","inputProps","autoFocus","position","outline","border","input","inputComponent","React","className","styles","sheetscroll","overflow","borderBottom","opacity","onFocus","tabIndex","onKeyUp","type"],"mappings":"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"}
|