@deephaven/grid 0.7.3-beta.8 → 0.8.0
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/CellInputField.d.ts +4 -4
- package/dist/CellInputField.d.ts.map +1 -1
- package/dist/CellInputField.js +10 -11
- package/dist/CellInputField.js.map +1 -1
- package/dist/EditableGridModel.d.ts +70 -0
- package/dist/EditableGridModel.d.ts.map +1 -0
- package/dist/EditableGridModel.js +13 -0
- package/dist/EditableGridModel.js.map +1 -0
- package/dist/EventHandlerResult.d.ts +17 -0
- package/dist/EventHandlerResult.d.ts.map +1 -0
- package/dist/EventHandlerResult.js +2 -0
- package/dist/EventHandlerResult.js.map +1 -0
- package/dist/ExpandableGridModel.d.ts +34 -0
- package/dist/ExpandableGridModel.d.ts.map +1 -0
- package/dist/ExpandableGridModel.js +7 -0
- package/dist/ExpandableGridModel.js.map +1 -0
- package/dist/Grid.d.ts +283 -234
- package/dist/Grid.d.ts.map +1 -1
- package/dist/Grid.js +397 -165
- package/dist/Grid.js.map +1 -1
- package/dist/GridColorUtils.d.ts +22 -12
- package/dist/GridColorUtils.d.ts.map +1 -1
- package/dist/GridColorUtils.js +26 -21
- package/dist/GridColorUtils.js.map +1 -1
- package/dist/GridMetricCalculator.d.ts.map +1 -1
- package/dist/GridMetricCalculator.js +8 -4
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridModel.d.ts +54 -60
- package/dist/GridModel.d.ts.map +1 -1
- package/dist/GridModel.js +54 -122
- package/dist/GridModel.js.map +1 -1
- package/dist/GridMouseHandler.d.ts +23 -24
- package/dist/GridMouseHandler.d.ts.map +1 -1
- package/dist/GridMouseHandler.js +8 -14
- package/dist/GridMouseHandler.js.map +1 -1
- package/dist/GridRange.d.ts +2 -2
- package/dist/GridRange.d.ts.map +1 -1
- package/dist/GridRange.js +1 -1
- package/dist/GridRange.js.map +1 -1
- package/dist/GridRenderer.d.ts +117 -69
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +183 -168
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridUtils.d.ts +4 -4
- package/dist/GridUtils.js +4 -4
- package/dist/GridUtils.js.map +1 -1
- package/dist/KeyHandler.d.ts +10 -7
- package/dist/KeyHandler.d.ts.map +1 -1
- package/dist/KeyHandler.js +6 -5
- package/dist/KeyHandler.js.map +1 -1
- package/dist/MockGridData.d.ts +1 -1
- package/dist/MockGridData.d.ts.map +1 -1
- package/dist/MockGridData.js.map +1 -1
- package/dist/MockGridModel.d.ts +39 -12
- package/dist/MockGridModel.d.ts.map +1 -1
- package/dist/MockGridModel.js +43 -10
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.d.ts +37 -22
- package/dist/MockTreeGridModel.d.ts.map +1 -1
- package/dist/MockTreeGridModel.js +38 -20
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/errors/AssertionError.d.ts +5 -0
- package/dist/errors/AssertionError.d.ts.map +1 -0
- package/dist/errors/AssertionError.js +12 -0
- package/dist/errors/AssertionError.js.map +1 -0
- package/dist/errors/PasteError.d.ts +1 -1
- package/dist/errors/PasteError.d.ts.map +1 -1
- package/dist/errors/PasteError.js +1 -2
- package/dist/errors/PasteError.js.map +1 -1
- package/dist/errors/assertIsDefined.d.ts +3 -0
- package/dist/errors/assertIsDefined.d.ts.map +1 -0
- package/dist/errors/assertIsDefined.js +8 -0
- package/dist/errors/assertIsDefined.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +2 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/EditKeyHandler.d.ts +3 -2
- package/dist/key-handlers/EditKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/EditKeyHandler.js +10 -9
- package/dist/key-handlers/EditKeyHandler.js.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.d.ts +3 -5
- package/dist/key-handlers/PasteKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.js +3 -3
- package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.d.ts +5 -5
- package/dist/key-handlers/SelectionKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.js +16 -15
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.d.ts +2 -2
- package/dist/key-handlers/TreeKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.js +14 -12
- package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
- package/dist/memoizeClear.d.ts +13 -3
- package/dist/memoizeClear.d.ts.map +1 -1
- package/dist/memoizeClear.js +7 -7
- package/dist/memoizeClear.js.map +1 -1
- package/dist/mouse-handlers/EditMouseHandler.d.ts +3 -4
- package/dist/mouse-handlers/EditMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/EditMouseHandler.js +3 -2
- package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts +12 -5
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +13 -10
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts +24 -3
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +2 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts +16 -6
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +41 -37
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts +10 -3
- package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +14 -11
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts +24 -3
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +4 -3
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts +8 -3
- package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +12 -7
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts +9 -3
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +2 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts +15 -9
- package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +26 -16
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts +46 -28
- package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +57 -74
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts +16 -6
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +41 -37
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/GridRenderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/GridRenderer.js"],"names":["memoizeClear","GridUtils","GridColorUtils","GridRenderer","context","text","width","fontWidth","truncateToWidth","max","backgroundColors","maxDepth","split","map","color","colors","i","push","darkenForDepth","alpha","colorWithAlpha","truncate","str","len","length","substr","binaryTruncateToWidth","start","end","measureText","lo","hi","Math","min","result","mid","ceil","truncatedStr","DEFAULT_FONT_WIDTH","floor","drawCanvas","state","save","configureContext","drawBackground","drawGrid","drawHeaders","drawFooters","drawDraggingColumn","drawDraggingRow","drawScrollBars","restore","theme","font","textBaseline","lineCap","metrics","height","fillStyle","backgroundColor","fillRect","draggingRow","draggingColumn","gridX","gridY","translate","drawGridBackground","drawCellContents","drawFloatingRows","drawFloatingColumns","floatingTopRowCount","floatingBottomRowCount","floatingRows","rowCount","visibleColumns","visibleRowYs","visibleRowHeights","floatingRowBackgroundColors","drawRowStripesForRows","drawFloatingMouseRowHover","drawGridLinesForItems","floatingGridColumnColor","floatingGridRowColor","drawCellBackgroundsForItems","drawFloatingBorders","drawSelectedRanges","top","bottom","maxY","get","minY","c","column","r","row","drawCellContent","floatingLeftColumnCount","floatingRightColumnCount","floatingLeftWidth","floatingRightWidth","floatingColumns","maxX","columnCount","visibleRows","visibleColumnXs","visibleColumnWidths","beginPath","rect","clip","left","right","minX","floatingDividerOuterColor","floatingDividerInnerColor","lineWidth","strokeStyle","y","moveTo","lineTo","x","stroke","drawHover","drawRowStripes","drawMouseColumnHover","drawMouseRowHover","drawGridLines","drawCellBackgrounds","floatingTopColumnCount","has","rowBackgroundColors","rows","model","shadowBlur","shadowColor","colorSets","getCachedBackgroundColors","colorRowMap","Map","topShadowRows","bottomShadowRows","addRowToColorMap","rowAbove","depth","depthForRow","colorSet","set","depthAbove","forEach","colorRows","rowHeight","fill","startColor","getCachedColorWithAlpha","endColor","gradient","createLinearGradient","addColorStop","gradientY","mouseX","mouseY","mouseColumn","getColumnAtX","columnHoverBackgroundColor","columnWidth","rowHoverBackgroundColor","mouseRow","getRowAtY","drawMouseRowHoverForRow","rowFooterWidth","selectedRanges","startRow","endRow","selectedRowHoverBackgroundColor","gridColumnColor","gridRowColor","columns","columnColor","rowColor","drawGridLinesForColumns","drawGridLinesForRows","metricsMaxX","j","rowAfter","drawCellBackground","hasExpandableRows","firstColumn","modelColumns","modelRows","modelRow","modelColumn","backgroundColorForCell","isFirstColumn","drawCellRowTreeDepthLines","drawColumnCellContents","fontWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","textColor","textForCell","textAlign","textAlignForCell","colorForCell","treeIndent","textWidth","textX","textY","truncatedText","getCachedTruncatedString","fillText","drawCellRowTreeMarker","visibleRowTreeBoxes","treeMarkerColor","treeMarkerHoverColor","columnX","rowY","isExpandable","isRowExpandable","isExpanded","isRowExpanded","treeBox","drawTreeMarker","x1","y1","x2","y2","markerText","treeLineColor","depthRowAfter","depthDiff","lineX","headerFont","drawColumnHeaders","drawRowHeaders","drawRowFooters","draggingColumnSeparator","isDragging","columnHeaderHeight","headerBackgroundColor","headerColor","headerHiddenSeparatorSize","headerHiddenSeparatorHoverColor","headerSeparatorColor","headerSeparatorHoverColor","hiddenSeparatorHeight","hiddenY","containsFrozenColumns","floatingLeftColumnsWidth","drawColumnHeader","hiddenColumns","isPreviousColumnHidden","highlightedSeparator","getColumnSeparatorIndex","visibleColumnIndex","indexOf","nextColumn","nextColumnWidth","isColumnHidden","isNextColumnHidden","textForColumnHeader","headerHorizontalPadding","maxLength","substring","draggingRowSeparator","rowHeaderWidth","hiddenSeparatorWidth","hiddenX","hiddenRows","isPreviousRowHidden","getRowSeparatorIndex","visibleRowIndex","nextRow","nextRowHeight","isRowHidden","isNextRowHidden","drawRowHeader","textForRowHeader","verticalBarWidth","textForRowFooter","viewport","cursorColumn","cursorRow","editingCell","isCursorVisible","isEditable","w","h","selectedRange","startColumn","endColumn","round","endX","endY","selectionColor","selectionOutlineCasingColor","selectionOutlineColor","drawActiveCell","borderWidth","ACTIVE_CELL_BORDER_WIDTH","cellX","cellY","cellW","cellH","drawRoundedRect","DEFAULT_EDGE_RADIUS","quadraticCurveTo","closePath","draggingColumnOffset","reorderOffset","draggingRowOffset","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","scrollBarSize","handleHeight","handleWidth","scrollX","scrollY","hasHorizontalBar","hasVerticalBar","barWidth","barHeight","scrollBarBackgroundColor","scrollBarHoverBackgroundColor","scrollBarCasingColor","scrollBarCornerColor","scrollBarColor","scrollBarHoverColor","scrollBarActiveColor","scrollBarHoverSize","scrollBarCasingWidth","isInbounds","isVerticalBarHover","isHorizontalBarHover","hScrollBarSize","vScrollBarSize"],"mappings":"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","sourcesContent":["import memoizeClear from './memoizeClear';\nimport GridUtils from './GridUtils';\nimport GridColorUtils from './GridColorUtils';\n\n/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\n/**\n * A GridRenderer handles rendering the different parts of the grid\n * This default rendering just renders a basic grid. Extend this class and implement\n * your own methods to customize drawing of the grid (eg. Draw icons or special features)\n */\nclass GridRenderer {\n static DEFAULT_FONT_WIDTH = 10;\n\n static DEFAULT_EDGE_RADIUS = 2;\n\n static ACTIVE_CELL_BORDER_WIDTH = 2;\n\n /**\n * Truncate a string and add ellipses if necessary\n * @param {string} str The string to truncate\n * @param {number} len The length to truncate the string to. If longer than the actual string, just returns the string\n */\n static truncate(str, len) {\n if (len < str.length) {\n // eslint-disable-next-line prefer-template\n return str.substr(0, len) + '…';\n }\n return str;\n }\n\n /**\n * Uses binary search to truncate a string to fit in the provided width\n * @param {Context} context The drawing context to measure the text in\n * @param {string} str The string to get the maximum length it can draw\n * @param {number} width The width to truncate it to\n * @param {number} start The low boundary to start the search\n * @param {number} end The high boundary to start the search\n */\n static binaryTruncateToWidth(\n context,\n str,\n width,\n start = 0,\n end = str.length\n ) {\n if (end >= str.length && context.measureText(str).width <= width) {\n // IDS-6069 If the whole string can fit, don't bother checking for truncation\n // The ellipses are actually slightly wider than other chars, and it's possible\n // that the \"truncation\" ends up being slightly longer, which messes up the search\n // algorithm below.\n // Besides, if we already fit, it's just faster to not bother checking other truncations.\n return str;\n }\n let lo = start;\n let hi = Math.min(str.length - 1, end);\n let result = str;\n while (hi >= lo) {\n const mid = Math.ceil((hi + lo) / 2);\n const truncatedStr = GridRenderer.truncate(str, mid);\n if (context.measureText(truncatedStr).width <= width) {\n result = truncatedStr;\n if (lo === mid) {\n break;\n }\n lo = mid;\n } else if (mid === 0) {\n // We already truncated to zero chars and it still doesn't fit, no need to keep looking\n result = truncatedStr;\n break;\n } else {\n hi = mid - 1;\n }\n }\n\n return result;\n }\n\n /**\n * Truncate a string (if necessary) to fit in the specified width.\n * First uses the estimated font width to calculate a lower/upper bound\n * Then uses binary search within those bounds to find the exact max length\n * @param {Context} context The drawing context\n * @param {string} str The string to calculate max length for\n * @param {number} width The width to truncate within\n * @param {number} fontWidth The estimated width of each character\n * @returns {string} The truncated string that fits within the width provided\n */\n static truncateToWidth(\n context,\n str,\n width,\n fontWidth = GridRenderer.DEFAULT_FONT_WIDTH\n ) {\n if (width <= 0 || str.length <= 0) {\n return '';\n }\n\n // Estimate the possible low and high boundaries for truncating the text\n // Use the width of the space divided by the estimated width of each character,\n // and take half that as the low (minus 5 just to be extra safe), and double that as the high.\n const lo = Math.min(\n Math.max(0, Math.floor(width / fontWidth / 2) - 5),\n str.length\n );\n const hi = Math.min(Math.ceil((width / fontWidth) * 2), str.length);\n\n return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} context The context to draw the grid in\n * @param {GridState} state State of the grid, { left, top, mouseX, mouseY, selectedRanges, theme, model, metrics }\n */\n drawCanvas(state) {\n const { context } = state;\n\n context.save();\n\n this.configureContext(context, state);\n\n this.drawBackground(context, state);\n\n this.drawGrid(context, state);\n\n this.drawHeaders(context, state);\n\n this.drawFooters(context, state);\n\n this.drawDraggingColumn(context, state);\n\n this.drawDraggingRow(context, state);\n\n this.drawScrollBars(context, state);\n\n context.restore();\n }\n\n configureContext(context, state) {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n drawBackground(context, state) {\n const { theme, metrics } = state;\n const { width, height } = metrics;\n context.fillStyle = theme.backgroundColor;\n context.fillRect(0, 0, width, height);\n }\n\n drawGrid(context, state) {\n const { metrics, draggingRow, draggingColumn } = state;\n const { gridX, gridY } = metrics;\n\n context.translate(gridX, gridY);\n\n this.drawGridBackground(\n context,\n state,\n draggingRow == null && draggingColumn == null\n );\n\n this.drawCellContents(context, state);\n\n this.drawFloatingRows(context, state);\n\n this.drawFloatingColumns(context, state);\n\n context.translate(-gridX, -gridY);\n }\n\n drawFloatingRows(context, state) {\n const { metrics, theme } = state;\n const {\n draggingRow,\n draggingColumn,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingRows,\n rowCount,\n visibleColumns,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n\n if (floatingRows.length === 0) {\n return;\n }\n\n if (theme.floatingRowBackgroundColors) {\n this.drawRowStripesForRows(\n context,\n state,\n floatingRows,\n theme.floatingRowBackgroundColors\n );\n }\n\n if (draggingRow == null && draggingColumn == null) {\n this.drawFloatingMouseRowHover(context, state);\n }\n\n this.drawGridLinesForItems(\n context,\n state,\n visibleColumns,\n floatingRows,\n theme.floatingGridColumnColor,\n theme.floatingGridRowColor\n );\n\n this.drawCellBackgroundsForItems(\n context,\n state,\n visibleColumns,\n floatingRows\n );\n\n this.drawFloatingBorders(context, state);\n\n // Draw the floating row selection...\n if (floatingTopRowCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n top: 0,\n bottom: floatingTopRowCount - 1,\n maxY:\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) -\n 0.5,\n },\n true\n );\n }\n if (floatingBottomRowCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n top: rowCount - floatingBottomRowCount - 1,\n bottom: rowCount - 1,\n minY: visibleRowYs.get(rowCount - floatingBottomRowCount) + 0.5,\n maxY:\n visibleRowYs.get(rowCount - 1) +\n visibleRowHeights.get(rowCount - 1) -\n 0.5,\n },\n true\n );\n }\n\n // Draw the cell content...\n for (let c = 0; c < visibleColumns.length; c += 1) {\n const column = visibleColumns[c];\n for (let r = 0; r < floatingRows.length; r += 1) {\n const row = floatingRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n\n drawFloatingColumns(context, state) {\n const { metrics, theme } = state;\n const {\n draggingRow,\n draggingColumn,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingColumns,\n gridX,\n maxX,\n columnCount,\n visibleRows,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n height,\n } = metrics;\n\n if (floatingColumns.length === 0) {\n return;\n }\n\n if (theme.floatingRowBackgroundColors) {\n this.drawRowStripesForRows(\n context,\n state,\n visibleRows,\n theme.floatingRowBackgroundColors,\n 0,\n floatingLeftWidth\n );\n this.drawRowStripesForRows(\n context,\n state,\n visibleRows,\n theme.floatingRowBackgroundColors,\n width - gridX - floatingRightWidth,\n maxX\n );\n }\n\n if (draggingRow == null && draggingColumn == null) {\n this.drawFloatingMouseRowHover(context, state);\n }\n\n // Clip floated column grid lines.\n context.save();\n context.beginPath();\n context.rect(0, 0, floatingLeftWidth, height);\n context.clip();\n\n this.drawGridLinesForItems(\n context,\n state,\n floatingColumns,\n visibleRows,\n theme.floatingGridColumnColor,\n theme.floatingGridRowColor\n );\n\n context.restore();\n\n this.drawCellBackgroundsForItems(\n context,\n state,\n floatingColumns,\n visibleRows\n );\n\n this.drawFloatingBorders(context, state);\n\n // Draw the floating column selection...\n if (floatingLeftColumnCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n left: 0,\n maxX:\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1),\n },\n true\n );\n }\n if (floatingRightColumnCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n left: columnCount - floatingRightColumnCount,\n right: columnCount - 1,\n minX:\n visibleColumnXs.get(columnCount - floatingRightColumnCount) + 0.5,\n maxX:\n visibleColumnXs.get(columnCount - 1) +\n visibleColumnWidths.get(columnCount - 1),\n },\n true\n );\n }\n\n // Draw the cell content...\n for (let c = 0; c < floatingColumns.length; c += 1) {\n const column = floatingColumns[c];\n for (let r = 0; r < visibleRows.length; r += 1) {\n const row = visibleRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n\n drawFloatingBorders(context, state) {\n const { metrics, theme } = state;\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n rowCount,\n columnCount,\n visibleRowYs,\n visibleColumnXs,\n visibleRowHeights,\n visibleColumnWidths,\n maxX,\n maxY,\n } = metrics;\n const { floatingDividerOuterColor, floatingDividerInnerColor } = theme;\n\n context.lineWidth = 3;\n context.beginPath();\n context.strokeStyle = floatingDividerOuterColor;\n\n if (floatingTopRowCount > 0) {\n const y =\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = visibleRowYs.get(rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n visibleColumnXs.get(columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n context.stroke();\n\n context.beginPath();\n context.lineWidth = 1;\n context.strokeStyle = floatingDividerInnerColor;\n\n if (floatingTopRowCount > 0) {\n const y =\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = visibleRowYs.get(rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n visibleColumnXs.get(columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n context.stroke();\n }\n\n drawGridBackground(context, state, drawHover = false) {\n this.drawRowStripes(context, state);\n\n if (drawHover) {\n this.drawMouseColumnHover(context, state);\n\n this.drawMouseRowHover(context, state);\n }\n\n this.drawGridLines(context, state);\n\n this.drawCellBackgrounds(context, state);\n\n const { metrics } = state;\n const {\n bottom,\n right,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingTopColumnCount,\n columnCount,\n rowCount,\n visibleRowHeights,\n visibleRowYs,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n height,\n } = metrics;\n this.drawSelectedRanges(context, state, {\n bottom: Math.min(bottom, rowCount - floatingBottomRowCount - 1),\n right: Math.min(right, columnCount - floatingRightColumnCount - 1),\n minX:\n floatingLeftColumnCount > 0 &&\n visibleColumnXs.has(floatingLeftColumnCount + 1)\n ? visibleColumnXs.get(floatingLeftColumnCount + 1)\n : -10,\n minY:\n floatingTopColumnCount > 0 &&\n visibleRowYs.has(floatingTopColumnCount + 1)\n ? visibleRowYs.get(floatingTopColumnCount + 1)\n : -10,\n maxX:\n floatingRightColumnCount > 0 &&\n visibleColumnXs.has(columnCount - floatingRightColumnCount - 1)\n ? visibleColumnXs.get(columnCount - floatingRightColumnCount - 1) +\n visibleColumnWidths.get(\n columnCount - floatingRightColumnCount - 1\n ) -\n 0.5\n : width + 10,\n maxY:\n floatingBottomRowCount > 0 &&\n visibleRowYs.has(rowCount - floatingBottomRowCount - 1)\n ? visibleRowYs.get(rowCount - floatingBottomRowCount - 1) +\n visibleRowHeights.get(rowCount - floatingBottomRowCount - 1) -\n 0.5\n : height + 10,\n });\n }\n\n drawRowStripes(context, state) {\n const { metrics, theme } = state;\n const { visibleRows } = metrics;\n const { rowBackgroundColors } = theme;\n if (!rowBackgroundColors) {\n return;\n }\n this.drawRowStripesForRows(\n context,\n state,\n visibleRows,\n rowBackgroundColors\n );\n }\n\n drawRowStripesForRows(\n context,\n state,\n rows,\n rowBackgroundColors,\n minX = 0,\n maxX = state.metrics.maxX\n ) {\n const { theme, metrics, model } = state;\n const { maxDepth, shadowBlur, shadowColor } = theme;\n\n const colorSets = this.getCachedBackgroundColors(\n rowBackgroundColors,\n maxDepth\n );\n const { visibleRowYs, visibleRowHeights } = metrics;\n\n // Optimize by grouping together all rows that end up with the same color\n const colorRowMap = new Map();\n const topShadowRows = []; // Rows that are deeper than the row above them\n const bottomShadowRows = [];\n const addRowToColorMap = (row, rowAbove) => {\n const depth = model.depthForRow(row);\n const colorSet = colorSets[row % colorSets.length];\n const color = colorSet[Math.min(depth, colorSet.length - 1)];\n if (!colorRowMap.has(color)) {\n colorRowMap.set(color, []);\n }\n colorRowMap.get(color).push(row);\n if (rowAbove != null) {\n const depthAbove = model.depthForRow(rowAbove);\n if (depthAbove < depth) {\n topShadowRows.push(row);\n } else if (depthAbove > depth) {\n bottomShadowRows.push(rowAbove);\n }\n }\n };\n\n // Add all the regular row stripes\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const rowAbove = i > 0 ? rows[i - 1] : null;\n addRowToColorMap(row, rowAbove);\n }\n\n colorRowMap.forEach((colorRows, color) => {\n context.fillStyle = color;\n\n context.beginPath();\n\n for (let i = 0; i < colorRows.length; i += 1) {\n const row = colorRows[i];\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n context.rect(minX, y, maxX, rowHeight);\n }\n\n context.fill();\n });\n\n if (topShadowRows.length > 0) {\n context.save();\n\n const startColor = this.getCachedColorWithAlpha(shadowColor, 0.15);\n const endColor = this.getCachedColorWithAlpha(shadowColor, 0);\n const gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n\n for (let i = 0; i < topShadowRows.length; i += 1) {\n const row = topShadowRows[i];\n const y = visibleRowYs.get(row);\n // Use a translate so we can reuse the gradient\n context.translate(0, y);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -y);\n }\n\n context.restore();\n }\n\n if (bottomShadowRows.length > 0) {\n context.save();\n\n const startColor = this.getCachedColorWithAlpha(shadowColor, 0);\n const endColor = this.getCachedColorWithAlpha(shadowColor, 0.15);\n const gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n\n for (let i = 0; i < bottomShadowRows.length; i += 1) {\n const row = bottomShadowRows[i];\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const gradientY = y + rowHeight - shadowBlur;\n // Use a translate so we can reuse the gradient\n context.translate(0, gradientY);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -gradientY);\n }\n\n context.restore();\n }\n }\n\n drawMouseColumnHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const mouseColumn = GridUtils.getColumnAtX(mouseX, metrics);\n if (mouseColumn == null || !theme.columnHoverBackgroundColor) {\n return;\n }\n\n const { visibleColumnWidths, visibleColumnXs, maxY } = metrics;\n if (mouseY > maxY) {\n return;\n }\n\n const x = visibleColumnXs.get(mouseColumn);\n const columnWidth = visibleColumnWidths.get(mouseColumn);\n\n context.fillStyle = theme.columnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const { maxX } = metrics;\n if (mouseX > maxX || !theme.rowHoverBackgroundColor) {\n return;\n }\n\n const mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (mouseRow == null) {\n return;\n }\n\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n\n drawFloatingMouseRowHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const {\n maxX,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n rowFooterWidth,\n } = metrics;\n if (mouseX > maxX + rowFooterWidth || !theme.rowHoverBackgroundColor) {\n return;\n }\n\n const mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (\n mouseRow != null &&\n (mouseRow < floatingTopRowCount ||\n rowCount - floatingBottomRowCount <= mouseRow)\n ) {\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n }\n\n drawMouseRowHoverForRow(context, state, row) {\n const { metrics, selectedRanges, theme } = state;\n const { visibleRowHeights, visibleRowYs, maxX } = metrics;\n\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n\n context.fillStyle = theme.rowHoverBackgroundColor;\n for (let i = 0; i < selectedRanges.length; i += 1) {\n if (\n selectedRanges[i].startRow <= row &&\n selectedRanges[i].endRow >= row\n ) {\n context.fillStyle = theme.selectedRowHoverBackgroundColor;\n break;\n }\n }\n context.fillRect(0, y, maxX, rowHeight);\n }\n\n drawGridLines(context, state) {\n const { metrics, theme } = state;\n const { visibleColumns, visibleRows } = metrics;\n\n this.drawGridLinesForItems(\n context,\n state,\n visibleColumns,\n visibleRows,\n theme.gridColumnColor,\n theme.gridRowColor\n );\n }\n\n drawGridLinesForItems(context, state, columns, rows, columnColor, rowColor) {\n if (!columnColor && !rowColor) {\n return;\n }\n\n context.lineWidth = 1;\n context.beginPath();\n\n if (columnColor) {\n context.strokeStyle = columnColor;\n this.drawGridLinesForColumns(context, state, columns);\n }\n if (rowColor) {\n context.strokeStyle = rowColor;\n this.drawGridLinesForRows(context, state, rows);\n }\n\n context.stroke();\n }\n\n drawGridLinesForColumns(context, state, columns) {\n const { metrics } = state;\n const { visibleColumnXs, maxY } = metrics;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const x = visibleColumnXs.get(column) + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n }\n\n drawGridLinesForRows(context, state, rows) {\n const { metrics } = state;\n const { visibleRowYs, maxX: metricsMaxX } = metrics;\n const maxX = metricsMaxX;\n\n // Draw row lines\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const y = visibleRowYs.get(row) + 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n }\n\n drawCellBackgrounds(context, state) {\n const { metrics } = state;\n const { visibleColumns, visibleRows } = metrics;\n this.drawCellBackgroundsForItems(\n context,\n state,\n visibleColumns,\n visibleRows\n );\n }\n\n drawCellBackgroundsForItems(context, state, columns, rows) {\n context.save();\n\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n\n for (let j = 0; j < rows.length; j += 1) {\n const row = rows[j];\n const rowAfter = j + 1 < rows.length ? rows[j + 1] : null;\n this.drawCellBackground(context, state, column, row, rowAfter);\n }\n }\n\n context.restore();\n }\n\n drawCellBackground(context, state, column, row, rowAfter) {\n const {\n metrics,\n model,\n model: { hasExpandableRows },\n theme,\n } = state;\n const {\n firstColumn,\n modelColumns,\n modelRows,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const modelRow = modelRows.get(row);\n const modelColumn = modelColumns.get(column);\n const backgroundColor = model.backgroundColorForCell(\n modelColumn,\n modelRow,\n theme\n );\n const isFirstColumn = column === firstColumn;\n\n if (backgroundColor) {\n const x = visibleColumnXs.get(column) + 1;\n const y = visibleRowYs.get(row) + 1;\n const columnWidth = visibleColumnWidths.get(column) - 1;\n const rowHeight = visibleRowHeights.get(row) - 1;\n context.fillStyle = backgroundColor;\n context.fillRect(x, y, columnWidth, rowHeight);\n }\n\n if (isFirstColumn && hasExpandableRows) {\n this.drawCellRowTreeDepthLines(context, state, row, rowAfter);\n }\n }\n\n drawCellContents(context, state) {\n const { metrics } = state;\n const { visibleColumns } = metrics;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n this.drawColumnCellContents(context, state, column);\n }\n }\n\n drawColumnCellContents(context, state, column) {\n const { metrics } = state;\n const {\n visibleColumnXs,\n visibleColumnWidths,\n visibleRows,\n height,\n } = metrics;\n const x = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n\n context.save();\n\n context.beginPath();\n context.rect(x, 0, columnWidth, height);\n context.clip();\n\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n this.drawCellContent(context, state, column, row);\n }\n context.restore();\n }\n\n drawCellContent(context, state, column, row) {\n const {\n metrics,\n model,\n model: { hasExpandableRows },\n theme,\n } = state;\n const {\n firstColumn,\n fontWidths,\n modelColumns,\n modelRows,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding,\n textColor,\n } = theme;\n const x = visibleColumnXs.get(column);\n const y = visibleRowYs.get(row);\n const columnWidth = visibleColumnWidths.get(column);\n const rowHeight = visibleRowHeights.get(row);\n const modelRow = modelRows.get(row);\n const modelColumn = modelColumns.get(column);\n const text = model.textForCell(modelColumn, modelRow);\n const isFirstColumn = column === firstColumn;\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n let treeIndent = 0;\n if (hasExpandableRows && isFirstColumn) {\n treeIndent =\n treeDepthIndent * (model.depthForRow(row) + 1) +\n treeHorizontalPadding;\n }\n const textWidth = columnWidth - treeIndent;\n let textX = x + cellHorizontalPadding;\n const textY = y + rowHeight * 0.5;\n if (textAlign === 'right') {\n textX = x + textWidth - cellHorizontalPadding;\n } else if (textAlign === 'center') {\n textX = x + textWidth * 0.5;\n } else {\n textX = x + cellHorizontalPadding;\n }\n textX += treeIndent;\n\n const fontWidth = fontWidths.get(context.font);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth - cellHorizontalPadding * 2,\n fontWidth\n );\n if (truncatedText) {\n context.fillText(truncatedText, textX, textY);\n }\n }\n\n if (isFirstColumn && hasExpandableRows) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n drawCellRowTreeMarker(context, state, row) {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n firstColumn,\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n visibleRowTreeBoxes,\n } = metrics;\n const { treeMarkerColor, treeMarkerHoverColor } = theme;\n const columnX = visibleColumnXs.get(firstColumn);\n const columnWidth = visibleColumnWidths.get(firstColumn);\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const isExpandable = model.isRowExpandable(row);\n const isExpanded = model.isRowExpanded(row);\n\n if (isExpandable) {\n const treeBox = visibleRowTreeBoxes.get(row);\n const color =\n mouseX >= gridX + columnX &&\n mouseX <= gridX + columnX + columnWidth &&\n mouseY >= gridY + rowY &&\n mouseY <= gridY + rowY + rowHeight\n ? treeMarkerHoverColor\n : treeMarkerColor;\n\n this.drawTreeMarker(\n context,\n state,\n columnX,\n rowY,\n treeBox,\n color,\n isExpanded\n );\n }\n }\n\n drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {\n const { x1, y1, x2, y2 } = treeBox;\n const markerText = isExpanded ? '⊟' : '⊞';\n const textX = columnX + (x1 + x2) * 0.5 + 0.5;\n const textY = rowY + (y1 + y2) * 0.5 + 0.5;\n context.fillStyle = color;\n context.textAlign = 'center';\n context.fillText(markerText, textX, textY);\n }\n\n drawCellRowTreeDepthLines(context, state, row, rowAfter) {\n const { metrics, model, theme } = state;\n\n const depth = model.depthForRow(row);\n if (depth === 0) return;\n\n const {\n firstColumn,\n visibleColumnXs,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const { treeDepthIndent, treeHorizontalPadding, treeLineColor } = theme;\n const columnX = visibleColumnXs.get(firstColumn);\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const depthRowAfter = model.depthForRow(rowAfter);\n const depthDiff = depth > depthRowAfter ? depth - depthRowAfter : 0;\n\n context.strokeStyle = treeLineColor;\n context.lineWidth = 1;\n\n // draw normal depth lines\n if (depth - depthDiff > 0) {\n context.beginPath();\n for (let i = 0; i < depth - depthDiff; i += 1) {\n const lineX =\n columnX +\n i * treeDepthIndent +\n treeDepthIndent * 0.5 +\n treeHorizontalPadding +\n 0.5;\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + rowHeight);\n }\n context.stroke();\n }\n\n // draw as hockey stick if last row at depth\n if (depthDiff > 0) {\n context.beginPath();\n for (let i = depth - depthDiff; i < depth; i += 1) {\n const lineX =\n columnX +\n i * treeDepthIndent +\n treeDepthIndent * 0.5 +\n treeHorizontalPadding +\n 0.5;\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + Math.ceil(rowHeight / 2));\n // extra moveTo prevents halfpixel in corner\n context.moveTo(lineX - 0.5, rowY + Math.ceil(rowHeight / 2) + 0.5);\n context.lineTo(\n lineX + treeDepthIndent - 0.5,\n rowY + Math.ceil(rowHeight / 2) + 0.5\n );\n }\n context.stroke();\n }\n }\n\n getCachedTruncatedString = memoizeClear(\n (context, text, width, fontWidth) =>\n GridRenderer.truncateToWidth(context, text, width, fontWidth),\n { max: 10000 }\n );\n\n getCachedBackgroundColors = memoizeClear(\n (backgroundColors, maxDepth) =>\n backgroundColors.split(' ').map(color => {\n const colors = [];\n for (let i = 0; i < maxDepth; i += 1) {\n colors.push(GridColorUtils.darkenForDepth(color, i, maxDepth));\n }\n return colors;\n }),\n { max: 1000 }\n );\n\n getCachedColorWithAlpha = memoizeClear(\n (color, alpha) => GridColorUtils.colorWithAlpha(color, alpha),\n { max: 1000 }\n );\n\n drawHeaders(context, state) {\n const { theme } = state;\n\n context.font = theme.headerFont;\n\n this.drawColumnHeaders(context, state);\n\n this.drawRowHeaders(context, state);\n }\n\n drawFooters(context, state) {\n const { theme } = state;\n\n context.font = theme.headerFont;\n\n this.drawRowFooters(context, state);\n }\n\n drawColumnHeaders(context, state) {\n const {\n mouseX,\n mouseY,\n theme,\n metrics,\n draggingColumnSeparator,\n isDragging,\n } = state;\n const {\n columnHeaderHeight,\n floatingColumns,\n gridX,\n width,\n visibleColumns,\n visibleColumnWidths,\n visibleColumnXs,\n floatingLeftColumnCount,\n } = metrics;\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorHeight = columnHeaderHeight * 0.5;\n const hiddenY = columnHeaderHeight * 0.5 - hiddenSeparatorHeight * 0.5;\n const containsFrozenColumns = floatingLeftColumnCount > 0;\n let floatingLeftColumnsWidth = 0;\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, width, columnHeaderHeight);\n\n context.fillStyle = headerColor;\n\n // Visible columns.\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = visibleColumnWidths.get(column);\n const x = visibleColumnXs.get(column) + gridX;\n this.drawColumnHeader(context, state, column, x, columnWidth);\n }\n\n if (containsFrozenColumns) {\n floatingLeftColumnsWidth =\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1);\n\n // Frozen columns' background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(gridX, 0, floatingLeftColumnsWidth, columnHeaderHeight);\n\n // Frozen columns.\n context.fillStyle = headerColor;\n for (let i = 0; i < floatingColumns.length; i += 1) {\n const column = floatingColumns[i];\n const columnWidth = visibleColumnWidths.get(column);\n const x = visibleColumnXs.get(column) + gridX;\n this.drawColumnHeader(context, state, column, x, columnWidth);\n }\n }\n\n // Draw the separators, visible columns then floating columns.\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n const hiddenColumns = [];\n\n // Draw visible column separators.\n let isPreviousColumnHidden = false;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n\n if (!(columnX < floatingLeftColumnsWidth - columnWidth)) {\n if (columnWidth > 0) {\n const x = gridX + columnX + columnWidth + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 0.5);\n isPreviousColumnHidden = false;\n } else if (!isPreviousColumnHidden) {\n isPreviousColumnHidden = true;\n hiddenColumns.push(column);\n }\n }\n }\n\n // Draw floating column separators.\n isPreviousColumnHidden = false;\n for (let i = 0; i < floatingColumns.length; i += 1) {\n const column = floatingColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n if (columnWidth > 0) {\n const x = gridX + columnX + columnWidth + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 0.5);\n isPreviousColumnHidden = false;\n } else if (!isPreviousColumnHidden) {\n isPreviousColumnHidden = true;\n hiddenColumns.push(column);\n }\n }\n\n // Bottom Border, should be interior to the header height\n context.moveTo(0, columnHeaderHeight - 0.5);\n context.lineTo(width, columnHeaderHeight - 0.5);\n context.stroke();\n\n // Now draw the hidden column separator boxes\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenColumns.length; i += 1) {\n const column = hiddenColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n const minX =\n gridX + columnX + columnWidth + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n minX,\n hiddenY,\n headerHiddenSeparatorSize,\n hiddenSeparatorHeight\n );\n }\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingColumnSeparator;\n\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getColumnSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (\n highlightedSeparator != null &&\n (!isDragging || draggingColumnSeparator != null)\n ) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const columnX = visibleColumnXs.get(highlightedSeparator);\n const columnWidth = visibleColumnWidths.get(highlightedSeparator);\n const x = gridX + columnX + columnWidth + 0.5;\n const visibleColumnIndex = visibleColumns.indexOf(highlightedSeparator);\n const nextColumn =\n visibleColumnIndex < visibleColumns.length - 1\n ? visibleColumns[visibleColumnIndex + 1]\n : null;\n const nextColumnWidth =\n nextColumn != null ? visibleColumnWidths.get(nextColumn) : null;\n const isColumnHidden = columnWidth === 0;\n const isNextColumnHidden =\n nextColumnWidth != null && nextColumnWidth === 0;\n if (isColumnHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n x,\n hiddenY,\n headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorHeight\n );\n } else if (isNextColumnHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n x - headerHiddenSeparatorSize * 0.5,\n hiddenY,\n headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorHeight\n );\n }\n\n // column seperator hover line\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 1);\n context.stroke();\n }\n }\n\n context.restore();\n }\n\n drawColumnHeader(context, state, column, columnX, columnWidth) {\n if (columnWidth <= 0) {\n return;\n }\n const { metrics, model, theme } = state;\n const { modelColumns } = metrics;\n const modelColumn = modelColumns.get(column);\n let text = model.textForColumnHeader(modelColumn);\n\n const { headerHorizontalPadding } = theme;\n const { columnHeaderHeight, fontWidths } = metrics;\n const fontWidth =\n fontWidths.get(context.font) || GridRenderer.DEFAULT_FONT_WIDTH;\n\n const maxLength = (columnWidth - headerHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n return;\n }\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n\n const x = columnX + headerHorizontalPadding;\n const y = columnHeaderHeight * 0.5;\n\n context.textAlign = 'left';\n context.fillText(text, x, y);\n } else {\n const x = columnX + columnWidth * 0.5;\n const y = columnHeaderHeight * 0.5;\n\n context.textAlign = 'center';\n context.fillText(text, x, y);\n }\n\n context.restore();\n }\n\n drawRowHeaders(context, state) {\n const { mouseX, mouseY, metrics, theme, draggingRowSeparator } = state;\n const {\n gridY,\n rowHeaderWidth,\n height,\n visibleRows,\n visibleRowHeights,\n visibleRowYs,\n } = metrics;\n if (rowHeaderWidth <= 0) {\n return;\n }\n\n const {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorWidth = rowHeaderWidth * 0.5;\n const hiddenX = rowHeaderWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, rowHeaderWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(0, gridY + 0.5);\n context.lineTo(rowHeaderWidth, gridY + 0.5);\n\n const hiddenRows = [];\n let isPreviousRowHidden = false;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const y = gridY + rowY + rowHeight + 0.5;\n\n context.moveTo(0, y);\n context.lineTo(rowHeaderWidth, y);\n\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border right, interior to the headerWidth\n context.moveTo(rowHeaderWidth - 0.5, 0);\n context.lineTo(rowHeaderWidth - 0.5, height);\n\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenRows.length; i += 1) {\n const row = hiddenRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const minY =\n gridY + rowY + rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n hiddenX,\n minY,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize\n );\n }\n\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingRowSeparator;\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const rowY = visibleRowYs.get(highlightedSeparator);\n const rowHeight = visibleRowHeights.get(highlightedSeparator);\n const y = gridY + rowY + rowHeight + 0.5;\n\n const visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n const nextRow =\n visibleRowIndex < visibleRows.length - 1\n ? visibleRows[visibleRowIndex + 1]\n : null;\n const nextRowHeight =\n nextRow != null ? visibleRowHeights.get(nextRow) : null;\n const isRowHidden = rowHeight === 0;\n const isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y - headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n }\n\n context.beginPath();\n context.moveTo(0.5, y);\n context.lineTo(rowHeaderWidth + 0.5, y);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(0, gridY, rowHeaderWidth, height);\n context.clip();\n\n context.fillStyle = headerColor;\n context.textAlign = 'right';\n\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = visibleRowHeights.get(row);\n const y = visibleRowYs.get(row) + gridY;\n this.drawRowHeader(context, state, row, y, rowHeight);\n }\n\n context.restore();\n }\n\n drawRowHeader(context, state, row, rowY, rowHeight) {\n if (rowHeight <= 0) {\n return;\n }\n const { metrics, model, theme } = state;\n const { modelRows, rowHeaderWidth } = metrics;\n const modelRow = modelRows.get(row);\n const x = rowHeaderWidth - theme.cellHorizontalPadding;\n const y = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowHeader(modelRow), x, y);\n }\n\n drawRowFooters(context, state) {\n const {\n mouseX,\n mouseY,\n metrics,\n model,\n theme,\n draggingRowSeparator,\n } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n rowFooterWidth,\n height,\n verticalBarWidth,\n visibleRows,\n visibleRowHeights,\n visibleRowYs,\n width,\n } = metrics;\n if (rowFooterWidth <= 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorWidth = rowFooterWidth * 0.5;\n const hiddenX = rowFooterWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n const x = Math.min(gridX + maxX, width - rowFooterWidth - verticalBarWidth);\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(x, gridY, rowFooterWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(x, gridY + 0.5);\n context.lineTo(rowFooterWidth, gridY + 0.5);\n\n const hiddenRows = [];\n let isPreviousRowHidden = false;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const y = gridY + rowY + rowHeight + 0.5;\n\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth - 0.5, y);\n\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border left, interior to the headerWidth\n context.moveTo(x + 0.5, gridY);\n context.lineTo(x + 0.5, height);\n\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenRows.length; i += 1) {\n const row = hiddenRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const minY =\n gridY + rowY + rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n x + hiddenX,\n minY,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize\n );\n }\n\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingRowSeparator;\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const rowY = visibleRowYs.get(highlightedSeparator);\n const rowHeight = visibleRowHeights.get(highlightedSeparator);\n const y = gridY + rowY + rowHeight + 0.5;\n\n const visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n const nextRow =\n visibleRowIndex < visibleRows.length - 1\n ? visibleRows[visibleRowIndex + 1]\n : null;\n const nextRowHeight =\n nextRow != null ? visibleRowHeights.get(nextRow) : null;\n const isRowHidden = rowHeight === 0;\n const isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y - headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n }\n\n context.beginPath();\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth + 0.5, y);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(x, gridY, rowFooterWidth, height);\n context.clip();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const rowY = visibleRowYs.get(row) + gridY;\n const modelRow = modelRows.get(row);\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.restore();\n }\n\n drawSelectedRanges(context, state, viewport = {}) {\n const {\n cursorColumn: column,\n cursorRow: row,\n draggingRow,\n draggingColumn,\n editingCell,\n metrics,\n model,\n selectedRanges,\n theme,\n } = state;\n const {\n visibleColumnWidths,\n visibleColumnXs,\n visibleRowHeights,\n visibleRowYs,\n width,\n height,\n } = metrics;\n const {\n left = metrics.left,\n top = metrics.top,\n right = metrics.right,\n bottom = metrics.bottom,\n minY = -10,\n maxY = height + 10,\n minX = -10,\n maxX = width + 10,\n } = viewport;\n if (selectedRanges.length === 0) {\n return;\n }\n\n const isCursorVisible =\n model.isEditable &&\n editingCell == null &&\n draggingRow == null &&\n draggingColumn == null &&\n visibleColumnXs.has(column) &&\n visibleRowYs.has(row);\n if (isCursorVisible) {\n // Punch a hole out where the active cell is, it gets styled differently.\n const x = visibleColumnXs.get(column);\n const y = visibleRowYs.get(row);\n const w = visibleColumnWidths.get(column);\n const h = visibleRowHeights.get(row);\n\n context.save();\n\n context.beginPath();\n\n context.rect(0, 0, width, height);\n context.rect(x, y, w, h);\n\n context.clip('evenodd');\n }\n\n // Draw selection ranges\n context.beginPath();\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const selectedRange = selectedRanges[i];\n const startColumn =\n selectedRange.startColumn !== null ? selectedRange.startColumn : left;\n const startRow =\n selectedRange.startRow !== null ? selectedRange.startRow : top;\n const endColumn =\n selectedRange.endColumn !== null ? selectedRange.endColumn : right;\n const endRow =\n selectedRange.endRow !== null ? selectedRange.endRow : bottom;\n if (\n endRow >= top &&\n bottom >= startRow &&\n endColumn >= left &&\n right >= startColumn\n ) {\n // Need to offset the x/y coordinates so that the line draws nice and crisp\n const x =\n startColumn >= left && visibleColumnXs.has(startColumn)\n ? Math.round(visibleColumnXs.get(startColumn)) + 0.5\n : minX;\n const y =\n startRow >= top && visibleRowYs.has(startRow)\n ? Math.max(Math.round(visibleRowYs.get(startRow)) + 0.5, 0.5)\n : minY;\n\n const endX =\n endColumn <= right && visibleColumnXs.has(endColumn)\n ? Math.round(\n visibleColumnXs.get(endColumn) +\n visibleColumnWidths.get(endColumn)\n ) - 0.5\n : maxX;\n const endY =\n endRow <= bottom && visibleRowYs.has(endRow)\n ? Math.round(\n visibleRowYs.get(endRow) + visibleRowHeights.get(endRow)\n ) - 0.5\n : maxY;\n\n context.rect(x, y, endX - x, endY - y);\n }\n\n // draw the inner transparent fill\n context.fillStyle = theme.selectionColor;\n context.fill();\n\n /**\n * draw an \"inner stroke\" that's clipped to just inside of the rects\n * to act as a casing to the outer stroke. 3px width because 1px is outside\n * the rect (but clipped), 1px is \"on\" the rect (technically this pixel is\n * a half pixel clip as well due to rects offset, but we are immediately painting\n * over it), and then the 1px inside (which is the desired pixel).\n */\n context.save();\n context.clip();\n context.strokeStyle = theme.selectionOutlineCasingColor;\n context.lineWidth = 3;\n context.stroke();\n context.restore();\n\n // draw the outerstroke border on top of the inner stroke\n context.strokeStyle = theme.selectionOutlineColor;\n context.lineWidth = 1;\n context.stroke();\n }\n\n if (isCursorVisible) {\n context.restore();\n\n this.drawActiveCell(context, state, column, row);\n }\n }\n\n drawActiveCell(\n context,\n state,\n column,\n row,\n borderWidth = GridRenderer.ACTIVE_CELL_BORDER_WIDTH\n ) {\n const { metrics, theme } = state;\n const {\n visibleColumnWidths,\n visibleColumnXs,\n visibleRowHeights,\n visibleRowYs,\n } = metrics;\n const cellX = visibleColumnXs.get(column);\n const cellY = visibleRowYs.get(row);\n const cellW = visibleColumnWidths.get(column);\n const cellH = visibleRowHeights.get(row);\n\n // Now get the outline for the active cell\n let x = cellX - borderWidth * 0.5;\n let y = cellY - borderWidth * 0.5;\n let w = cellW + borderWidth;\n let h = cellH + borderWidth;\n\n // Make sure the outline is interior on the edge\n if (x <= 0) {\n w += x - 1;\n x = 1;\n }\n if (y <= 0) {\n h += y - 1;\n y = 1;\n }\n\n const { lineWidth } = context;\n context.beginPath();\n context.lineWidth = borderWidth;\n context.strokeStyle = theme.selectionOutlineColor;\n this.drawRoundedRect(context, x, y, w, h);\n context.stroke();\n context.lineWidth = lineWidth;\n }\n\n /**\n * Draws a rounded rectangle using the current state of the canvas.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x coordinate of the left side\n * @param {number} y coordinate of the top side\n * @param {number} w width of the rectangle\n * @param {number} h height of the rectangle\n * @param {number} r corner radius of the rectangle\n */\n drawRoundedRect(context, x, y, w, h, r = GridRenderer.DEFAULT_EDGE_RADIUS) {\n context.beginPath();\n context.moveTo(x + r, y);\n context.lineTo(x + w - r, y);\n context.quadraticCurveTo(x + w, y, x + w, y + r);\n context.lineTo(x + w, y + h - r);\n context.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n context.lineTo(x + r, y + h);\n context.quadraticCurveTo(x, y + h, x, y + h - r);\n context.lineTo(x, y + r);\n context.quadraticCurveTo(x, y, x + r, y);\n context.closePath();\n }\n\n drawDraggingColumn(context, state) {\n const {\n draggingColumn,\n draggingColumnOffset,\n metrics,\n mouseX,\n theme,\n } = state;\n if (draggingColumn == null) {\n return;\n }\n\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n height,\n } = metrics;\n const x = visibleColumnXs.get(draggingColumn);\n const columnWidth = visibleColumnWidths.get(draggingColumn) + 1;\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n context.save();\n\n context.translate(gridX, 0);\n\n // First, we need to draw over the row stripes where the column is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(x, 0, columnWidth, height);\n\n context.translate(\n mouseX - x - gridX - draggingColumnOffset,\n gridY + reorderOffset\n );\n\n // Then draw the shadow of the moving column\n context.save();\n\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(x, -gridY, columnWidth, height);\n\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this column and all it's contents\n context.beginPath();\n context.rect(x, -gridY, columnWidth, height);\n context.clip();\n\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n this.drawColumnCellContents(context, state, draggingColumn);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n\n context.font = headerFont;\n\n this.drawColumnHeaders(context, state);\n\n context.restore();\n }\n\n drawDraggingRow(context, state) {\n const { draggingRow, draggingRowOffset, metrics, mouseY, theme } = state;\n if (draggingRow == null) {\n return;\n }\n\n const { gridX, gridY, visibleRowYs, visibleRowHeights, width } = metrics;\n const y = visibleRowYs.get(draggingRow);\n const rowHeight = visibleRowHeights.get(draggingRow) + 1;\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n context.save();\n\n context.translate(0, gridY);\n\n // First, we need to draw over the row stripes where the row is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(0, y, width, rowHeight);\n\n context.translate(\n gridX + reorderOffset,\n mouseY - y - gridY - draggingRowOffset\n );\n\n // Then draw the shadow of the moving row\n context.save();\n\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(-gridX, y, width, rowHeight);\n\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this row and all it's contents\n context.beginPath();\n context.rect(-gridX, y, width, rowHeight);\n context.clip();\n\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n this.drawCellContents(context, state);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n\n context.font = headerFont;\n\n this.drawRowHeaders(context, state);\n\n context.restore();\n }\n\n drawScrollBars(context, state) {\n const {\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n metrics,\n mouseX,\n mouseY,\n theme,\n } = state;\n if (theme.scrollBarSize <= 0) {\n return;\n }\n\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n width,\n height,\n handleHeight,\n handleWidth,\n scrollX,\n scrollY,\n hasHorizontalBar,\n hasVerticalBar,\n barWidth,\n barHeight,\n } = metrics;\n const {\n scrollBarBackgroundColor,\n scrollBarHoverBackgroundColor,\n scrollBarCasingColor,\n scrollBarCornerColor,\n scrollBarColor,\n scrollBarHoverColor,\n scrollBarActiveColor,\n scrollBarSize,\n scrollBarHoverSize,\n scrollBarCasingWidth,\n } = theme;\n\n const isInbounds = mouseX <= width && mouseY <= height;\n\n const isVerticalBarHover =\n isDraggingVerticalScrollBar ||\n (hasVerticalBar &&\n !isDraggingHorizontalScrollBar &&\n !isDragging &&\n mouseX >= width - scrollBarHoverSize &&\n mouseY <= barHeight + columnHeaderHeight &&\n isInbounds);\n\n const isHorizontalBarHover =\n isDraggingHorizontalScrollBar ||\n (hasHorizontalBar &&\n !isDraggingVerticalScrollBar &&\n !isDragging &&\n !isVerticalBarHover && // vert bar gets priorty in overlapped corner hover area\n mouseY >= height - scrollBarHoverSize &&\n mouseX <= barWidth - rowHeaderWidth &&\n isInbounds);\n\n const hScrollBarSize = isHorizontalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n const vScrollBarSize = isVerticalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n\n context.translate(rowHeaderWidth, columnHeaderHeight);\n\n if (hasHorizontalBar && hasVerticalBar) {\n // That little corner in the bottom right\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(\n width - rowHeaderWidth - scrollBarSize,\n height - columnHeaderHeight - scrollBarSize,\n scrollBarSize,\n scrollBarSize\n );\n context.fillStyle = scrollBarCornerColor;\n context.fillRect(\n width - rowHeaderWidth - scrollBarSize + scrollBarCasingWidth,\n height - columnHeaderHeight - scrollBarSize + scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasHorizontalBar) {\n const x = scrollX;\n const y = height - columnHeaderHeight - hScrollBarSize;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(0, y, barWidth, hScrollBarSize - scrollBarCasingWidth);\n\n // scrollbar track\n context.fillStyle = isHorizontalBarHover\n ? scrollBarHoverBackgroundColor\n : scrollBarBackgroundColor;\n context.fillRect(\n 0,\n y + scrollBarCasingWidth,\n barWidth,\n hScrollBarSize - scrollBarCasingWidth\n );\n\n // scrollbar thumb\n if (isDraggingHorizontalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isHorizontalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n\n context.fillRect(\n x,\n y + scrollBarCasingWidth,\n handleWidth,\n hScrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasVerticalBar) {\n const x = width - rowHeaderWidth - vScrollBarSize;\n const y = scrollY;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(x, 0, vScrollBarSize - scrollBarCasingWidth, barHeight);\n\n // scrollbar track\n context.fillStyle = isVerticalBarHover\n ? scrollBarHoverBackgroundColor\n : scrollBarBackgroundColor;\n context.fillRect(\n x + scrollBarCasingWidth,\n 0,\n vScrollBarSize - scrollBarCasingWidth,\n barHeight\n );\n\n // scrollbar thumb\n if (isDraggingVerticalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isVerticalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n\n context.fillRect(\n x + scrollBarCasingWidth,\n y,\n vScrollBarSize - scrollBarCasingWidth,\n handleHeight\n );\n }\n\n context.translate(-rowHeaderWidth, -columnHeaderHeight);\n }\n}\n\nexport default GridRenderer;\n"],"file":"GridRenderer.js"}
|
|
1
|
+
{"version":3,"sources":["../src/GridRenderer.ts"],"names":["memoizeClear","GridUtils","GridColorUtils","isExpandableGridModel","getOrThrow","isEditableGridModel","GridRenderer","context","text","width","fontWidth","truncateToWidth","max","backgroundColors","maxDepth","split","map","color","colors","i","push","darkenForDepth","alpha","colorWithAlpha","truncate","str","len","length","substr","binaryTruncateToWidth","start","end","measureText","lo","hi","Math","min","result","mid","ceil","truncatedStr","DEFAULT_FONT_WIDTH","floor","drawCanvas","state","save","configureContext","drawBackground","drawGrid","drawHeaders","drawFooters","drawDraggingColumn","drawDraggingRow","drawScrollBars","restore","theme","font","textBaseline","lineCap","metrics","height","fillStyle","backgroundColor","fillRect","draggingRow","draggingColumn","gridX","gridY","translate","drawGridBackground","drawCellContents","drawFloatingRows","drawFloatingColumns","floatingTopRowCount","floatingBottomRowCount","floatingRows","rowCount","visibleColumns","visibleRowYs","visibleRowHeights","floatingRowBackgroundColors","drawRowStripesForRows","drawFloatingMouseRowHover","drawGridLinesForItems","floatingGridColumnColor","floatingGridRowColor","drawCellBackgroundsForItems","drawFloatingBorders","drawSelectedRanges","top","bottom","maxY","minY","c","column","r","row","drawCellContent","floatingLeftColumnCount","floatingRightColumnCount","floatingLeftWidth","floatingRightWidth","floatingColumns","maxX","columnCount","visibleRows","visibleColumnXs","visibleColumnWidths","beginPath","rect","clip","left","right","minX","floatingDividerOuterColor","floatingDividerInnerColor","lineWidth","strokeStyle","y","moveTo","lineTo","x","stroke","drawHover","drawRowStripes","drawMouseColumnHover","drawMouseRowHover","drawGridLines","drawCellBackgrounds","has","rowBackgroundColors","rows","model","shadowBlur","shadowColor","colorSets","getCachedBackgroundColors","colorRowMap","Map","topShadowRows","bottomShadowRows","addRowToColorMap","rowAbove","depth","depthForRow","colorSet","set","get","depthAbove","undefined","forEach","colorRows","rowHeight","fill","startColor","getCachedColorWithAlpha","endColor","gradient","createLinearGradient","addColorStop","gradientY","mouseX","mouseY","mouseColumn","getColumnAtX","columnHoverBackgroundColor","columnWidth","rowHoverBackgroundColor","mouseRow","getRowAtY","drawMouseRowHoverForRow","rowFooterWidth","selectedRanges","startRow","endRow","selectedRowHoverBackgroundColor","gridColumnColor","gridRowColor","columns","columnColor","rowColor","drawGridLinesForColumns","drawGridLinesForRows","metricsMaxX","j","rowAfter","drawCellBackground","firstColumn","modelColumns","modelRows","modelRow","modelColumn","backgroundColorForCell","isFirstColumn","hasExpandableRows","drawCellRowTreeDepthLines","drawColumnCellContents","fontWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","textColor","textForCell","textAlign","textAlignForCell","colorForCell","treeIndent","textWidth","textX","textY","truncatedText","getCachedTruncatedString","fillText","drawCellRowTreeMarker","visibleRowTreeBoxes","treeMarkerColor","treeMarkerHoverColor","columnX","rowY","isRowExpandable","treeBox","drawTreeMarker","isRowExpanded","isExpanded","x1","y1","x2","y2","markerText","treeLineColor","depthRowAfter","depthDiff","lineX","headerFont","drawColumnHeaders","drawRowHeaders","drawRowFooters","draggingColumnSeparator","isDragging","columnHeaderHeight","headerBackgroundColor","headerColor","headerHiddenSeparatorSize","headerHiddenSeparatorHoverColor","headerSeparatorColor","headerSeparatorHoverColor","hiddenSeparatorHeight","hiddenY","containsFrozenColumns","floatingLeftColumnsWidth","drawColumnHeader","hiddenColumns","isPreviousColumnHidden","highlightedSeparator","getColumnSeparatorIndex","visibleColumnIndex","indexOf","nextColumn","nextColumnWidth","isColumnHidden","isNextColumnHidden","textForColumnHeader","headerHorizontalPadding","maxLength","substring","draggingRowSeparator","rowHeaderWidth","hiddenSeparatorWidth","hiddenX","hiddenRows","isPreviousRowHidden","getRowSeparatorIndex","visibleRowIndex","nextRow","nextRowHeight","isRowHidden","isNextRowHidden","drawRowHeader","textForRowHeader","verticalBarWidth","textForRowFooter","viewport","cursorColumn","cursorRow","editingCell","isCursorVisible","isEditable","w","h","selectedRange","startColumn","endColumn","round","endX","endY","selectionColor","selectionOutlineCasingColor","selectionOutlineColor","drawActiveCell","borderWidth","ACTIVE_CELL_BORDER_WIDTH","cellX","cellY","cellW","cellH","drawRoundedRect","DEFAULT_EDGE_RADIUS","quadraticCurveTo","closePath","draggingColumnOffset","reorderOffset","draggingRowOffset","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","scrollBarSize","handleHeight","handleWidth","scrollX","scrollY","hasHorizontalBar","hasVerticalBar","barWidth","barHeight","scrollBarBackgroundColor","scrollBarHoverBackgroundColor","scrollBarCasingColor","scrollBarCornerColor","scrollBarColor","scrollBarHoverColor","scrollBarActiveColor","scrollBarHoverSize","scrollBarCasingWidth","isInbounds","isVerticalBarHover","isHorizontalBarHover","hScrollBarSize","vScrollBarSize"],"mappings":"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","sourcesContent":["import memoizeClear from './memoizeClear';\nimport GridUtils from './GridUtils';\nimport GridColorUtils from './GridColorUtils';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport {\n GridColor,\n GridColorWay,\n GridTheme,\n NullableGridColor,\n} from './GridTheme';\nimport GridModel from './GridModel';\nimport GridRange from './GridRange';\nimport GridMetrics, {\n BoxCoordinates,\n Coordinate,\n VisibleIndex,\n} from './GridMetrics';\nimport { getOrThrow } from './GridMetricCalculator';\nimport { isEditableGridModel } from './EditableGridModel';\n\nexport type EditingCellTextSelectionRange = [start: number, end: number];\n\nexport type EditingCell = {\n // Index of the editing cell\n column: VisibleIndex;\n row: VisibleIndex;\n\n // Selection within the text\n selectionRange?: EditingCellTextSelectionRange;\n\n // The value to use for the edit\n value: string;\n\n // Whether the selection was triggered with a quick edit action (e.g. Start typing with the cell in focus)\n isQuickEdit?: boolean;\n};\n\nexport type GridRenderState = {\n // The top/left cell of the scrolled viewport\n left: VisibleIndex;\n top: VisibleIndex;\n\n // Width and height of the total canvas area\n width: number;\n height: number;\n\n // The canvas context\n context: CanvasRenderingContext2D;\n\n // The grid theme\n theme: GridTheme;\n\n // The model used by the grid\n model: GridModel;\n\n // The grid metrics\n metrics: GridMetrics;\n\n // Location of the mouse on the grid\n mouseX: number | null;\n mouseY: number | null;\n\n // Where the keyboard cursor is located\n cursorColumn: VisibleIndex | null;\n cursorRow: VisibleIndex | null;\n\n // Currently selected ranges\n selectedRanges: GridRange[];\n\n // Currently dragged column/row information\n draggingColumn: VisibleIndex | null;\n draggingColumnOffset: number | null;\n draggingColumnSeparator: VisibleIndex | null;\n draggingRow: VisibleIndex | null;\n draggingRowOffset: number | null;\n draggingRowSeparator: VisibleIndex | null;\n\n // The currently editing cell\n editingCell: EditingCell | null;\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n isDragging: boolean;\n};\n\n/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\n/**\n * A GridRenderer handles rendering the different parts of the grid\n * This default rendering just renders a basic grid. Extend this class and implement\n * your own methods to customize drawing of the grid (eg. Draw icons or special features)\n */\nexport class GridRenderer {\n // Default font width in pixels if it cannot be retrieved from the context\n static DEFAULT_FONT_WIDTH = 10;\n\n // Default radius in pixels for corners for some elements (like the active cell)\n static DEFAULT_EDGE_RADIUS = 2;\n\n // Default width in pixels for the border of the active cell\n static ACTIVE_CELL_BORDER_WIDTH = 2;\n\n /**\n * Truncate a string to the specified length and add ellipses if necessary\n * @param str The string to truncate\n * @param len The length to truncate the string to. If longer than the actual string, just returns the string\n * @returns The truncated string\n */\n static truncate(str: string, len: number): string {\n if (len < str.length) {\n // eslint-disable-next-line prefer-template\n return str.substr(0, len) + '…';\n }\n return str;\n }\n\n /**\n * Uses binary search to truncate a string to fit in the provided width\n * @param context The drawing context to measure the text in\n * @param str The string to get the maximum length it can draw\n * @param width The width to truncate it to\n * @param start The low boundary to start the search\n * @param end The high boundary to start the search\n * @returns The truncated string\n */\n static binaryTruncateToWidth(\n context: CanvasRenderingContext2D,\n str: string,\n width: number,\n start = 0,\n end = str.length\n ): string {\n if (end >= str.length && context.measureText(str).width <= width) {\n // IDS-6069 If the whole string can fit, don't bother checking for truncation\n // The ellipses are actually slightly wider than other chars, and it's possible\n // that the \"truncation\" ends up being slightly longer, which messes up the search\n // algorithm below.\n // Besides, if we already fit, it's just faster to not bother checking other truncations.\n return str;\n }\n let lo = start;\n let hi = Math.min(str.length - 1, end);\n let result = str;\n while (hi >= lo) {\n const mid = Math.ceil((hi + lo) / 2);\n const truncatedStr = GridRenderer.truncate(str, mid);\n if (context.measureText(truncatedStr).width <= width) {\n result = truncatedStr;\n if (lo === mid) {\n break;\n }\n lo = mid;\n } else if (mid === 0) {\n // We already truncated to zero chars and it still doesn't fit, no need to keep looking\n result = truncatedStr;\n break;\n } else {\n hi = mid - 1;\n }\n }\n\n return result;\n }\n\n /**\n * Truncate a string (if necessary) to fit in the specified width.\n * First uses the estimated font width to calculate a lower/upper bound\n * Then uses binary search within those bounds to find the exact max length\n * @param context The drawing context\n * @param str The string to calculate max length for\n * @param width The width to truncate within\n * @param fontWidth The estimated width of each character\n * @returns The truncated string that fits within the width provided\n */\n static truncateToWidth(\n context: CanvasRenderingContext2D,\n str: string,\n width: number,\n fontWidth = GridRenderer.DEFAULT_FONT_WIDTH\n ): string {\n if (width <= 0 || str.length <= 0) {\n return '';\n }\n\n // Estimate the possible low and high boundaries for truncating the text\n // Use the width of the space divided by the estimated width of each character,\n // and take half that as the low (minus 5 just to be extra safe), and double that as the high.\n const lo = Math.min(\n Math.max(0, Math.floor(width / fontWidth / 2) - 5),\n str.length\n );\n const hi = Math.min(Math.ceil((width / fontWidth) * 2), str.length);\n\n return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi);\n }\n\n /**\n * Draw the grid canvas with the state provided\n * @param state The state of the grid\n */\n drawCanvas(state: GridRenderState): void {\n const { context } = state;\n\n context.save();\n\n this.configureContext(context, state);\n\n this.drawBackground(context, state);\n\n this.drawGrid(context, state);\n\n this.drawHeaders(context, state);\n\n this.drawFooters(context, state);\n\n this.drawDraggingColumn(context, state);\n\n this.drawDraggingRow(context, state);\n\n this.drawScrollBars(context, state);\n\n context.restore();\n }\n\n configureContext(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n drawBackground(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { theme, metrics } = state;\n const { width, height } = metrics;\n context.fillStyle = theme.backgroundColor;\n context.fillRect(0, 0, width, height);\n }\n\n drawGrid(context: CanvasRenderingContext2D, state: GridRenderState): void {\n const { metrics, draggingRow, draggingColumn } = state;\n const { gridX, gridY } = metrics;\n\n context.translate(gridX, gridY);\n\n this.drawGridBackground(\n context,\n state,\n draggingRow == null && draggingColumn == null\n );\n\n this.drawCellContents(context, state);\n\n this.drawFloatingRows(context, state);\n\n this.drawFloatingColumns(context, state);\n\n context.translate(-gridX, -gridY);\n }\n\n drawFloatingRows(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { draggingRow, draggingColumn, metrics, theme } = state;\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingRows,\n rowCount,\n visibleColumns,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n\n if (floatingRows.length === 0) {\n return;\n }\n\n if (theme.floatingRowBackgroundColors) {\n this.drawRowStripesForRows(\n context,\n state,\n floatingRows,\n theme.floatingRowBackgroundColors\n );\n }\n\n if (draggingRow == null && draggingColumn == null) {\n this.drawFloatingMouseRowHover(context, state);\n }\n\n this.drawGridLinesForItems(\n context,\n state,\n visibleColumns,\n floatingRows,\n theme.floatingGridColumnColor,\n theme.floatingGridRowColor\n );\n\n this.drawCellBackgroundsForItems(\n context,\n state,\n visibleColumns,\n floatingRows\n );\n\n this.drawFloatingBorders(context, state);\n\n // Draw the floating row selection...\n if (floatingTopRowCount > 0) {\n this.drawSelectedRanges(context, state, {\n top: 0,\n bottom: floatingTopRowCount - 1,\n maxY:\n getOrThrow(visibleRowYs, floatingTopRowCount - 1) +\n getOrThrow(visibleRowHeights, floatingTopRowCount - 1) -\n 0.5,\n });\n }\n if (floatingBottomRowCount > 0) {\n this.drawSelectedRanges(context, state, {\n top: rowCount - floatingBottomRowCount - 1,\n bottom: rowCount - 1,\n minY: getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) + 0.5,\n maxY:\n getOrThrow(visibleRowYs, rowCount - 1) +\n getOrThrow(visibleRowHeights, rowCount - 1) -\n 0.5,\n });\n }\n\n // Draw the cell content...\n for (let c = 0; c < visibleColumns.length; c += 1) {\n const column = visibleColumns[c];\n for (let r = 0; r < floatingRows.length; r += 1) {\n const row = floatingRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n\n drawFloatingColumns(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { draggingRow, draggingColumn, metrics, theme } = state;\n const {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingColumns,\n gridX,\n maxX,\n columnCount,\n visibleRows,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n height,\n } = metrics;\n\n if (floatingColumns.length === 0) {\n return;\n }\n\n if (theme.floatingRowBackgroundColors) {\n this.drawRowStripesForRows(\n context,\n state,\n visibleRows,\n theme.floatingRowBackgroundColors,\n 0,\n floatingLeftWidth\n );\n this.drawRowStripesForRows(\n context,\n state,\n visibleRows,\n theme.floatingRowBackgroundColors,\n width - gridX - floatingRightWidth,\n maxX\n );\n }\n\n if (draggingRow == null && draggingColumn == null) {\n this.drawFloatingMouseRowHover(context, state);\n }\n\n // Clip floated column grid lines.\n context.save();\n context.beginPath();\n context.rect(0, 0, floatingLeftWidth, height);\n context.clip();\n\n this.drawGridLinesForItems(\n context,\n state,\n floatingColumns,\n visibleRows,\n theme.floatingGridColumnColor,\n theme.floatingGridRowColor\n );\n\n context.restore();\n\n this.drawCellBackgroundsForItems(\n context,\n state,\n floatingColumns,\n visibleRows\n );\n\n this.drawFloatingBorders(context, state);\n\n // Draw the floating column selection...\n if (floatingLeftColumnCount > 0) {\n this.drawSelectedRanges(context, state, {\n left: 0,\n maxX:\n getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1),\n });\n }\n if (floatingRightColumnCount > 0) {\n this.drawSelectedRanges(context, state, {\n left: columnCount - floatingRightColumnCount,\n right: columnCount - 1,\n minX:\n getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) +\n 0.5,\n maxX:\n getOrThrow(visibleColumnXs, columnCount - 1) +\n getOrThrow(visibleColumnWidths, columnCount - 1),\n });\n }\n\n // Draw the cell content...\n for (let c = 0; c < floatingColumns.length; c += 1) {\n const column = floatingColumns[c];\n for (let r = 0; r < visibleRows.length; r += 1) {\n const row = visibleRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n\n drawFloatingBorders(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { metrics, theme } = state;\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n rowCount,\n columnCount,\n visibleRowYs,\n visibleColumnXs,\n visibleRowHeights,\n visibleColumnWidths,\n maxX,\n maxY,\n } = metrics;\n const { floatingDividerOuterColor, floatingDividerInnerColor } = theme;\n\n context.lineWidth = 3;\n context.beginPath();\n context.strokeStyle = floatingDividerOuterColor;\n\n if (floatingTopRowCount > 0) {\n const y =\n getOrThrow(visibleRowYs, floatingTopRowCount - 1) +\n getOrThrow(visibleRowHeights, floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y =\n getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) -\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n context.stroke();\n\n context.beginPath();\n context.lineWidth = 1;\n context.strokeStyle = floatingDividerInnerColor;\n\n if (floatingTopRowCount > 0) {\n const y =\n getOrThrow(visibleRowYs, floatingTopRowCount - 1) +\n getOrThrow(visibleRowHeights, floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y =\n getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) -\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n context.stroke();\n }\n\n drawGridBackground(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n drawHover = false\n ): void {\n this.drawRowStripes(context, state);\n\n if (drawHover) {\n this.drawMouseColumnHover(context, state);\n\n this.drawMouseRowHover(context, state);\n }\n\n this.drawGridLines(context, state);\n\n this.drawCellBackgrounds(context, state);\n\n const { metrics } = state;\n const {\n bottom,\n right,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingTopRowCount,\n columnCount,\n rowCount,\n visibleRowHeights,\n visibleRowYs,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n height,\n } = metrics;\n this.drawSelectedRanges(context, state, {\n bottom: Math.min(bottom, rowCount - floatingBottomRowCount - 1),\n right: Math.min(right, columnCount - floatingRightColumnCount - 1),\n minX:\n floatingLeftColumnCount > 0 &&\n visibleColumnXs.has(floatingLeftColumnCount + 1)\n ? getOrThrow(visibleColumnXs, floatingLeftColumnCount + 1)\n : -10,\n minY:\n floatingTopRowCount > 0 && visibleRowYs.has(floatingTopRowCount + 1)\n ? getOrThrow(visibleRowYs, floatingTopRowCount + 1)\n : -10,\n maxX:\n floatingRightColumnCount > 0 &&\n visibleColumnXs.has(columnCount - floatingRightColumnCount - 1)\n ? getOrThrow(\n visibleColumnXs,\n columnCount - floatingRightColumnCount - 1\n ) +\n getOrThrow(\n visibleColumnWidths,\n columnCount - floatingRightColumnCount - 1\n ) -\n 0.5\n : width + 10,\n maxY:\n floatingBottomRowCount > 0 &&\n visibleRowYs.has(rowCount - floatingBottomRowCount - 1)\n ? getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount - 1) +\n getOrThrow(\n visibleRowHeights,\n rowCount - floatingBottomRowCount - 1\n ) -\n 0.5\n : height + 10,\n });\n }\n\n drawRowStripes(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { metrics, theme } = state;\n const { visibleRows } = metrics;\n const { rowBackgroundColors } = theme;\n if (!rowBackgroundColors) {\n return;\n }\n this.drawRowStripesForRows(\n context,\n state,\n visibleRows,\n rowBackgroundColors\n );\n }\n\n drawRowStripesForRows(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n rows: VisibleIndex[],\n rowBackgroundColors: GridColorWay,\n minX = 0,\n maxX = state.metrics.maxX\n ): void {\n const { theme, metrics, model } = state;\n const { maxDepth, shadowBlur, shadowColor } = theme;\n\n const colorSets = this.getCachedBackgroundColors(\n rowBackgroundColors,\n maxDepth\n );\n const { visibleRowYs, visibleRowHeights } = metrics;\n\n // Optimize by grouping together all rows that end up with the same color\n const colorRowMap = new Map();\n const topShadowRows: VisibleIndex[] = []; // Rows that are deeper than the row above them\n const bottomShadowRows: VisibleIndex[] = [];\n const addRowToColorMap = (\n row: VisibleIndex,\n rowAbove?: VisibleIndex\n ): void => {\n const depth = isExpandableGridModel(model) ? model.depthForRow(row) : 0;\n const colorSet = colorSets[row % colorSets.length];\n const color = colorSet[Math.min(depth, colorSet.length - 1)];\n if (!colorRowMap.has(color)) {\n colorRowMap.set(color, []);\n }\n colorRowMap.get(color).push(row);\n if (rowAbove != null) {\n const depthAbove = isExpandableGridModel(model)\n ? model.depthForRow(rowAbove)\n : 0;\n if (depthAbove < depth) {\n topShadowRows.push(row);\n } else if (depthAbove > depth) {\n bottomShadowRows.push(rowAbove);\n }\n }\n };\n\n // Add all the regular row stripes\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const rowAbove = i > 0 ? rows[i - 1] : undefined;\n addRowToColorMap(row, rowAbove);\n }\n\n colorRowMap.forEach((colorRows, color) => {\n context.fillStyle = color;\n\n context.beginPath();\n\n for (let i = 0; i < colorRows.length; i += 1) {\n const row = colorRows[i];\n const y = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n context.rect(minX, y, maxX, rowHeight);\n }\n\n context.fill();\n });\n\n if (topShadowRows.length > 0) {\n context.save();\n\n const startColor = this.getCachedColorWithAlpha(shadowColor, 0.15);\n const endColor = this.getCachedColorWithAlpha(shadowColor, 0);\n const gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n\n for (let i = 0; i < topShadowRows.length; i += 1) {\n const row = topShadowRows[i];\n const y = getOrThrow(visibleRowYs, row);\n // Use a translate so we can reuse the gradient\n context.translate(0, y);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -y);\n }\n\n context.restore();\n }\n\n if (bottomShadowRows.length > 0) {\n context.save();\n\n const startColor = this.getCachedColorWithAlpha(shadowColor, 0);\n const endColor = this.getCachedColorWithAlpha(shadowColor, 0.15);\n const gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n\n for (let i = 0; i < bottomShadowRows.length; i += 1) {\n const row = bottomShadowRows[i];\n const y = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n const gradientY = y + rowHeight - shadowBlur;\n // Use a translate so we can reuse the gradient\n context.translate(0, gradientY);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -gradientY);\n }\n\n context.restore();\n }\n }\n\n drawMouseColumnHover(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { mouseX, mouseY, theme, metrics } = state;\n if (mouseX == null || mouseY == null) return;\n\n const mouseColumn = GridUtils.getColumnAtX(mouseX, metrics);\n if (mouseColumn == null || !theme.columnHoverBackgroundColor) {\n return;\n }\n\n const { visibleColumnWidths, visibleColumnXs, maxY } = metrics;\n if (mouseY > maxY) {\n return;\n }\n\n const x = getOrThrow(visibleColumnXs, mouseColumn);\n const columnWidth = getOrThrow(visibleColumnWidths, mouseColumn);\n\n context.fillStyle = theme.columnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { mouseX, mouseY, theme, metrics } = state;\n if (mouseX == null || mouseY == null) return;\n\n const { maxX } = metrics;\n if (mouseX > maxX || !theme.rowHoverBackgroundColor) {\n return;\n }\n\n const mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (mouseRow == null) {\n return;\n }\n\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n\n drawFloatingMouseRowHover(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { mouseX, mouseY, theme, metrics } = state;\n const {\n maxX,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n rowFooterWidth,\n } = metrics;\n if (\n mouseX == null ||\n mouseY == null ||\n mouseX > maxX + rowFooterWidth ||\n !theme.rowHoverBackgroundColor\n ) {\n return;\n }\n\n const mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (\n mouseRow != null &&\n (mouseRow < floatingTopRowCount ||\n rowCount - floatingBottomRowCount <= mouseRow)\n ) {\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n }\n\n drawMouseRowHoverForRow(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n row: VisibleIndex\n ): void {\n const { metrics, selectedRanges, theme } = state;\n const { visibleRowHeights, visibleRowYs, maxX } = metrics;\n\n const y = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n\n if (theme.rowHoverBackgroundColor) {\n context.fillStyle = theme.rowHoverBackgroundColor;\n }\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const { startRow, endRow } = selectedRanges[i];\n if (\n startRow != null &&\n endRow != null &&\n startRow <= row &&\n endRow >= row\n ) {\n if (theme.selectedRowHoverBackgroundColor) {\n context.fillStyle = theme.selectedRowHoverBackgroundColor;\n }\n break;\n }\n }\n context.fillRect(0, y, maxX, rowHeight);\n }\n\n drawGridLines(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { metrics, theme } = state;\n const { visibleColumns, visibleRows } = metrics;\n\n this.drawGridLinesForItems(\n context,\n state,\n visibleColumns,\n visibleRows,\n theme.gridColumnColor,\n theme.gridRowColor\n );\n }\n\n drawGridLinesForItems(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n columns: VisibleIndex[],\n rows: VisibleIndex[],\n columnColor: NullableGridColor,\n rowColor: NullableGridColor\n ): void {\n if (!columnColor && !rowColor) {\n return;\n }\n\n context.lineWidth = 1;\n context.beginPath();\n\n if (columnColor) {\n context.strokeStyle = columnColor;\n this.drawGridLinesForColumns(context, state, columns);\n }\n if (rowColor) {\n context.strokeStyle = rowColor;\n this.drawGridLinesForRows(context, state, rows);\n }\n\n context.stroke();\n }\n\n drawGridLinesForColumns(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n columns: VisibleIndex[]\n ): void {\n const { metrics } = state;\n const { visibleColumnXs, maxY } = metrics;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const x = getOrThrow(visibleColumnXs, column) + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n }\n\n drawGridLinesForRows(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n rows: VisibleIndex[]\n ): void {\n const { metrics } = state;\n const { visibleRowYs, maxX: metricsMaxX } = metrics;\n const maxX = metricsMaxX;\n\n // Draw row lines\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const y = getOrThrow(visibleRowYs, row) + 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n }\n\n drawCellBackgrounds(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { metrics } = state;\n const { visibleColumns, visibleRows } = metrics;\n this.drawCellBackgroundsForItems(\n context,\n state,\n visibleColumns,\n visibleRows\n );\n }\n\n drawCellBackgroundsForItems(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n columns: VisibleIndex[],\n rows: VisibleIndex[]\n ): void {\n context.save();\n\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n\n for (let j = 0; j < rows.length; j += 1) {\n const row = rows[j];\n const rowAfter = j + 1 < rows.length ? rows[j + 1] : undefined;\n this.drawCellBackground(context, state, column, row, rowAfter);\n }\n }\n\n context.restore();\n }\n\n drawCellBackground(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex,\n rowAfter?: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n const {\n firstColumn,\n modelColumns,\n modelRows,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const backgroundColor = model.backgroundColorForCell(\n modelColumn,\n modelRow,\n theme\n );\n const isFirstColumn = column === firstColumn;\n const hasExpandableRows =\n isExpandableGridModel(model) && model.hasExpandableRows;\n\n if (backgroundColor) {\n const x = getOrThrow(visibleColumnXs, column) + 1;\n const y = getOrThrow(visibleRowYs, row) + 1;\n const columnWidth = getOrThrow(visibleColumnWidths, column) - 1;\n const rowHeight = getOrThrow(visibleRowHeights, row) - 1;\n context.fillStyle = backgroundColor;\n context.fillRect(x, y, columnWidth, rowHeight);\n }\n\n if (isFirstColumn && hasExpandableRows) {\n this.drawCellRowTreeDepthLines(context, state, row, rowAfter);\n }\n }\n\n drawCellContents(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { metrics } = state;\n const { visibleColumns } = metrics;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n this.drawColumnCellContents(context, state, column);\n }\n }\n\n drawColumnCellContents(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex\n ): void {\n const { metrics } = state;\n const {\n visibleColumnXs,\n visibleColumnWidths,\n visibleRows,\n height,\n } = metrics;\n const x = getOrThrow(visibleColumnXs, column);\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n\n context.save();\n\n context.beginPath();\n context.rect(x, 0, columnWidth, height);\n context.clip();\n\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n this.drawCellContent(context, state, column, row);\n }\n context.restore();\n }\n\n drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n const {\n firstColumn,\n fontWidths,\n modelColumns,\n modelRows,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding,\n textColor,\n } = theme;\n const x = getOrThrow(visibleColumnXs, column);\n const y = getOrThrow(visibleRowYs, row);\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const text = model.textForCell(modelColumn, modelRow);\n const isFirstColumn = column === firstColumn;\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n let treeIndent = 0;\n if (\n isExpandableGridModel(model) &&\n model.hasExpandableRows &&\n isFirstColumn\n ) {\n treeIndent =\n treeDepthIndent * (model.depthForRow(row) + 1) +\n treeHorizontalPadding;\n }\n const textWidth = columnWidth - treeIndent;\n let textX = x + cellHorizontalPadding;\n const textY = y + rowHeight * 0.5;\n if (textAlign === 'right') {\n textX = x + textWidth - cellHorizontalPadding;\n } else if (textAlign === 'center') {\n textX = x + textWidth * 0.5;\n } else {\n textX = x + cellHorizontalPadding;\n }\n textX += treeIndent;\n\n const fontWidth =\n fontWidths.get(context.font) ?? GridRenderer.DEFAULT_FONT_WIDTH;\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth - cellHorizontalPadding * 2,\n fontWidth\n );\n if (truncatedText) {\n context.fillText(truncatedText, textX, textY);\n }\n }\n\n if (\n isFirstColumn &&\n isExpandableGridModel(model) &&\n model.hasExpandableRows\n ) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n drawCellRowTreeMarker(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n row: VisibleIndex\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n firstColumn,\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n visibleRowTreeBoxes,\n } = metrics;\n const { treeMarkerColor, treeMarkerHoverColor } = theme;\n const columnX = getOrThrow(visibleColumnXs, firstColumn);\n const columnWidth = getOrThrow(visibleColumnWidths, firstColumn);\n const rowY = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n if (!isExpandableGridModel(model) || !model.isRowExpandable(row)) {\n return;\n }\n\n const treeBox = getOrThrow(visibleRowTreeBoxes, row);\n const color =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX + columnX &&\n mouseX <= gridX + columnX + columnWidth &&\n mouseY >= gridY + rowY &&\n mouseY <= gridY + rowY + rowHeight\n ? treeMarkerHoverColor\n : treeMarkerColor;\n\n this.drawTreeMarker(\n context,\n state,\n columnX,\n rowY,\n treeBox,\n color,\n model.isRowExpanded(row)\n );\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: GridColor,\n isExpanded: boolean\n ): void {\n const { x1, y1, x2, y2 } = treeBox;\n const markerText = isExpanded ? '⊟' : '⊞';\n const textX = columnX + (x1 + x2) * 0.5 + 0.5;\n const textY = rowY + (y1 + y2) * 0.5 + 0.5;\n context.fillStyle = color;\n context.textAlign = 'center';\n context.fillText(markerText, textX, textY);\n }\n\n drawCellRowTreeDepthLines(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n row: VisibleIndex,\n rowAfter?: VisibleIndex\n ): void {\n const { metrics, model, theme } = state;\n\n if (!isExpandableGridModel(model)) return;\n\n const depth = model.depthForRow(row);\n if (depth === 0) return;\n\n const {\n firstColumn,\n visibleColumnXs,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const { treeDepthIndent, treeHorizontalPadding, treeLineColor } = theme;\n const columnX = getOrThrow(visibleColumnXs, firstColumn);\n const rowY = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n const depthRowAfter =\n rowAfter !== undefined ? model.depthForRow(rowAfter) : 0;\n const depthDiff = depth > depthRowAfter ? depth - depthRowAfter : 0;\n\n context.strokeStyle = treeLineColor;\n context.lineWidth = 1;\n\n // draw normal depth lines\n if (depth - depthDiff > 0) {\n context.beginPath();\n for (let i = 0; i < depth - depthDiff; i += 1) {\n const lineX =\n columnX +\n i * treeDepthIndent +\n treeDepthIndent * 0.5 +\n treeHorizontalPadding +\n 0.5;\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + rowHeight);\n }\n context.stroke();\n }\n\n // draw as hockey stick if last row at depth\n if (depthDiff > 0) {\n context.beginPath();\n for (let i = depth - depthDiff; i < depth; i += 1) {\n const lineX =\n columnX +\n i * treeDepthIndent +\n treeDepthIndent * 0.5 +\n treeHorizontalPadding +\n 0.5;\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + Math.ceil(rowHeight / 2));\n // extra moveTo prevents halfpixel in corner\n context.moveTo(lineX - 0.5, rowY + Math.ceil(rowHeight / 2) + 0.5);\n context.lineTo(\n lineX + treeDepthIndent - 0.5,\n rowY + Math.ceil(rowHeight / 2) + 0.5\n );\n }\n context.stroke();\n }\n }\n\n getCachedTruncatedString = memoizeClear(\n (\n context: CanvasRenderingContext2D,\n text: string,\n width: number,\n fontWidth: number\n ): string => GridRenderer.truncateToWidth(context, text, width, fontWidth),\n { max: 10000 }\n );\n\n getCachedBackgroundColors = memoizeClear(\n (backgroundColors: GridColorWay, maxDepth: number): GridColor[][] =>\n backgroundColors.split(' ').map(color => {\n const colors = [];\n for (let i = 0; i < maxDepth; i += 1) {\n colors.push(GridColorUtils.darkenForDepth(color, i, maxDepth));\n }\n return colors;\n }),\n { max: 1000 }\n );\n\n getCachedColorWithAlpha = memoizeClear(\n (color, alpha) => GridColorUtils.colorWithAlpha(color, alpha),\n { max: 1000 }\n );\n\n drawHeaders(context: CanvasRenderingContext2D, state: GridRenderState): void {\n const { theme } = state;\n\n context.font = theme.headerFont;\n\n this.drawColumnHeaders(context, state);\n\n this.drawRowHeaders(context, state);\n }\n\n drawFooters(context: CanvasRenderingContext2D, state: GridRenderState): void {\n const { theme } = state;\n\n context.font = theme.headerFont;\n\n this.drawRowFooters(context, state);\n }\n\n drawColumnHeaders(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const {\n mouseX,\n mouseY,\n theme,\n metrics,\n draggingColumnSeparator,\n isDragging,\n } = state;\n const {\n columnHeaderHeight,\n floatingColumns,\n gridX,\n width,\n visibleColumns,\n visibleColumnWidths,\n visibleColumnXs,\n floatingLeftColumnCount,\n } = metrics;\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorHeight = columnHeaderHeight * 0.5;\n const hiddenY = columnHeaderHeight * 0.5 - hiddenSeparatorHeight * 0.5;\n const containsFrozenColumns = floatingLeftColumnCount > 0;\n let floatingLeftColumnsWidth = 0;\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, width, columnHeaderHeight);\n\n context.fillStyle = headerColor;\n\n // Visible columns.\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n const x = getOrThrow(visibleColumnXs, column) + gridX;\n this.drawColumnHeader(context, state, column, x, columnWidth);\n }\n\n if (containsFrozenColumns) {\n floatingLeftColumnsWidth =\n getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1);\n\n // Frozen columns' background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(gridX, 0, floatingLeftColumnsWidth, columnHeaderHeight);\n\n // Frozen columns.\n context.fillStyle = headerColor;\n for (let i = 0; i < floatingColumns.length; i += 1) {\n const column = floatingColumns[i];\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n const x = getOrThrow(visibleColumnXs, column) + gridX;\n this.drawColumnHeader(context, state, column, x, columnWidth);\n }\n }\n\n // Draw the separators, visible columns then floating columns.\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n const hiddenColumns = [];\n\n // Draw visible column separators.\n let isPreviousColumnHidden = false;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnX = getOrThrow(visibleColumnXs, column);\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n\n if (!(columnX < floatingLeftColumnsWidth - columnWidth)) {\n if (columnWidth > 0) {\n const x = gridX + columnX + columnWidth + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 0.5);\n isPreviousColumnHidden = false;\n } else if (!isPreviousColumnHidden) {\n isPreviousColumnHidden = true;\n hiddenColumns.push(column);\n }\n }\n }\n\n // Draw floating column separators.\n isPreviousColumnHidden = false;\n for (let i = 0; i < floatingColumns.length; i += 1) {\n const column = floatingColumns[i];\n const columnX = getOrThrow(visibleColumnXs, column);\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n if (columnWidth > 0) {\n const x = gridX + columnX + columnWidth + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 0.5);\n isPreviousColumnHidden = false;\n } else if (!isPreviousColumnHidden) {\n isPreviousColumnHidden = true;\n hiddenColumns.push(column);\n }\n }\n\n // Bottom Border, should be interior to the header height\n context.moveTo(0, columnHeaderHeight - 0.5);\n context.lineTo(width, columnHeaderHeight - 0.5);\n context.stroke();\n\n // Now draw the hidden column separator boxes\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenColumns.length; i += 1) {\n const column = hiddenColumns[i];\n const columnX = getOrThrow(visibleColumnXs, column);\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n const minX =\n gridX + columnX + columnWidth + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n minX,\n hiddenY,\n headerHiddenSeparatorSize,\n hiddenSeparatorHeight\n );\n }\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingColumnSeparator;\n\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n highlightedSeparator = GridUtils.getColumnSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (\n highlightedSeparator != null &&\n (!isDragging || draggingColumnSeparator != null)\n ) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const columnX = getOrThrow(visibleColumnXs, highlightedSeparator);\n const columnWidth = getOrThrow(\n visibleColumnWidths,\n highlightedSeparator\n );\n const x = gridX + columnX + columnWidth + 0.5;\n const visibleColumnIndex = visibleColumns.indexOf(highlightedSeparator);\n const nextColumn =\n visibleColumnIndex < visibleColumns.length - 1\n ? visibleColumns[visibleColumnIndex + 1]\n : null;\n const nextColumnWidth =\n nextColumn != null ? visibleColumnWidths.get(nextColumn) : null;\n const isColumnHidden = columnWidth === 0;\n const isNextColumnHidden =\n nextColumnWidth != null && nextColumnWidth === 0;\n if (isColumnHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n x,\n hiddenY,\n headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorHeight\n );\n } else if (isNextColumnHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n x - headerHiddenSeparatorSize * 0.5,\n hiddenY,\n headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorHeight\n );\n }\n\n // column seperator hover line\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 1);\n context.stroke();\n }\n }\n\n context.restore();\n }\n\n drawColumnHeader(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n columnX: Coordinate,\n columnWidth: number\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n const { metrics, model, theme } = state;\n const { modelColumns } = metrics;\n const modelColumn = getOrThrow(modelColumns, column);\n let text = model.textForColumnHeader(modelColumn);\n\n const { headerHorizontalPadding } = theme;\n const { columnHeaderHeight, fontWidths } = metrics;\n const fontWidth =\n fontWidths.get(context.font) || GridRenderer.DEFAULT_FONT_WIDTH;\n\n const maxLength = (columnWidth - headerHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n return;\n }\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n\n const x = columnX + headerHorizontalPadding;\n const y = columnHeaderHeight * 0.5;\n\n context.textAlign = 'left';\n context.fillText(text, x, y);\n } else {\n const x = columnX + columnWidth * 0.5;\n const y = columnHeaderHeight * 0.5;\n\n context.textAlign = 'center';\n context.fillText(text, x, y);\n }\n\n context.restore();\n }\n\n drawRowHeaders(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { mouseX, mouseY, metrics, theme, draggingRowSeparator } = state;\n const {\n gridY,\n rowHeaderWidth,\n height,\n visibleRows,\n visibleRowHeights,\n visibleRowYs,\n } = metrics;\n if (rowHeaderWidth <= 0) {\n return;\n }\n\n const {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorWidth = rowHeaderWidth * 0.5;\n const hiddenX = rowHeaderWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, rowHeaderWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(0, gridY + 0.5);\n context.lineTo(rowHeaderWidth, gridY + 0.5);\n\n const hiddenRows = [];\n let isPreviousRowHidden = false;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowY = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n if (rowHeight > 0) {\n const y = gridY + rowY + rowHeight + 0.5;\n\n context.moveTo(0, y);\n context.lineTo(rowHeaderWidth, y);\n\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border right, interior to the headerWidth\n context.moveTo(rowHeaderWidth - 0.5, 0);\n context.lineTo(rowHeaderWidth - 0.5, height);\n\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenRows.length; i += 1) {\n const row = hiddenRows[i];\n const rowY = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n const minY =\n gridY + rowY + rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n hiddenX,\n minY,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize\n );\n }\n\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingRowSeparator;\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const rowY = getOrThrow(visibleRowYs, highlightedSeparator);\n const rowHeight = getOrThrow(visibleRowHeights, highlightedSeparator);\n const y = gridY + rowY + rowHeight + 0.5;\n\n const visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n const nextRow =\n visibleRowIndex < visibleRows.length - 1\n ? visibleRows[visibleRowIndex + 1]\n : null;\n const nextRowHeight =\n nextRow != null ? visibleRowHeights.get(nextRow) : null;\n const isRowHidden = rowHeight === 0;\n const isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y - headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n }\n\n context.beginPath();\n context.moveTo(0.5, y);\n context.lineTo(rowHeaderWidth + 0.5, y);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(0, gridY, rowHeaderWidth, height);\n context.clip();\n\n context.fillStyle = headerColor;\n context.textAlign = 'right';\n\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = getOrThrow(visibleRowHeights, row);\n const y = getOrThrow(visibleRowYs, row) + gridY;\n this.drawRowHeader(context, state, row, y, rowHeight);\n }\n\n context.restore();\n }\n\n drawRowHeader(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n row: VisibleIndex,\n rowY: Coordinate,\n rowHeight: number\n ): void {\n if (rowHeight <= 0) {\n return;\n }\n const { metrics, model, theme } = state;\n const { modelRows, rowHeaderWidth } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const x = rowHeaderWidth - theme.cellHorizontalPadding;\n const y = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowHeader(modelRow), x, y);\n }\n\n drawRowFooters(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const {\n mouseX,\n mouseY,\n metrics,\n model,\n theme,\n draggingRowSeparator,\n } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n rowFooterWidth,\n height,\n verticalBarWidth,\n visibleRows,\n visibleRowHeights,\n visibleRowYs,\n width,\n } = metrics;\n if (rowFooterWidth <= 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorWidth = rowFooterWidth * 0.5;\n const hiddenX = rowFooterWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n const x = Math.min(gridX + maxX, width - rowFooterWidth - verticalBarWidth);\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(x, gridY, rowFooterWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(x, gridY + 0.5);\n context.lineTo(rowFooterWidth, gridY + 0.5);\n\n const hiddenRows = [];\n let isPreviousRowHidden = false;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowY = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n if (rowHeight > 0) {\n const y = gridY + rowY + rowHeight + 0.5;\n\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth - 0.5, y);\n\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border left, interior to the headerWidth\n context.moveTo(x + 0.5, gridY);\n context.lineTo(x + 0.5, height);\n\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenRows.length; i += 1) {\n const row = hiddenRows[i];\n const rowY = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n const minY =\n gridY + rowY + rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n x + hiddenX,\n minY,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize\n );\n }\n\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingRowSeparator;\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const rowY = getOrThrow(visibleRowYs, highlightedSeparator);\n const rowHeight = getOrThrow(visibleRowHeights, highlightedSeparator);\n const y = gridY + rowY + rowHeight + 0.5;\n\n const visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n const nextRow =\n visibleRowIndex < visibleRows.length - 1\n ? visibleRows[visibleRowIndex + 1]\n : null;\n const nextRowHeight =\n nextRow != null ? visibleRowHeights.get(nextRow) : null;\n const isRowHidden = rowHeight === 0;\n const isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y - headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n }\n\n context.beginPath();\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth + 0.5, y);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(x, gridY, rowFooterWidth, height);\n context.clip();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = getOrThrow(visibleRowHeights, row);\n if (rowHeight > 0) {\n const rowY = getOrThrow(visibleRowYs, row) + gridY;\n const modelRow = getOrThrow(modelRows, row);\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.restore();\n }\n\n drawSelectedRanges(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n viewport: {\n left?: VisibleIndex;\n top?: VisibleIndex;\n right?: VisibleIndex;\n bottom?: VisibleIndex;\n minX?: Coordinate;\n minY?: Coordinate;\n maxX?: Coordinate;\n maxY?: Coordinate;\n } = {}\n ): void {\n const {\n cursorColumn: column,\n cursorRow: row,\n draggingRow,\n draggingColumn,\n editingCell,\n metrics,\n model,\n selectedRanges,\n theme,\n } = state;\n const {\n visibleColumnWidths,\n visibleColumnXs,\n visibleRowHeights,\n visibleRowYs,\n width,\n height,\n } = metrics;\n const {\n left = metrics.left,\n top = metrics.top,\n right = metrics.right,\n bottom = metrics.bottom,\n minY = -10,\n maxY = height + 10,\n minX = -10,\n maxX = width + 10,\n } = viewport;\n if (selectedRanges.length === 0) {\n return;\n }\n\n const isCursorVisible =\n isEditableGridModel(model) &&\n model.isEditable &&\n editingCell == null &&\n draggingRow == null &&\n draggingColumn == null &&\n column != null &&\n row != null &&\n visibleColumnXs.has(column) &&\n visibleRowYs.has(row);\n if (isCursorVisible) {\n // Punch a hole out where the active cell is, it gets styled differently.\n const x = getOrThrow(visibleColumnXs, column);\n const y = getOrThrow(visibleRowYs, row);\n const w = getOrThrow(visibleColumnWidths, column);\n const h = getOrThrow(visibleRowHeights, row);\n\n context.save();\n\n context.beginPath();\n\n context.rect(0, 0, width, height);\n context.rect(x, y, w, h);\n\n context.clip('evenodd');\n }\n\n // Draw selection ranges\n context.beginPath();\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const selectedRange = selectedRanges[i];\n const startColumn =\n selectedRange.startColumn !== null ? selectedRange.startColumn : left;\n const startRow =\n selectedRange.startRow !== null ? selectedRange.startRow : top;\n const endColumn =\n selectedRange.endColumn !== null ? selectedRange.endColumn : right;\n const endRow =\n selectedRange.endRow !== null ? selectedRange.endRow : bottom;\n if (\n endRow >= top &&\n bottom >= startRow &&\n endColumn >= left &&\n right >= startColumn\n ) {\n // Need to offset the x/y coordinates so that the line draws nice and crisp\n const x =\n startColumn >= left && visibleColumnXs.has(startColumn)\n ? Math.round(getOrThrow(visibleColumnXs, startColumn)) + 0.5\n : minX;\n const y =\n startRow >= top && visibleRowYs.has(startRow)\n ? Math.max(\n Math.round(getOrThrow(visibleRowYs, startRow)) + 0.5,\n 0.5\n )\n : minY;\n\n const endX =\n endColumn <= right && visibleColumnXs.has(endColumn)\n ? Math.round(\n getOrThrow(visibleColumnXs, endColumn) +\n getOrThrow(visibleColumnWidths, endColumn)\n ) - 0.5\n : maxX;\n const endY =\n endRow <= bottom && visibleRowYs.has(endRow)\n ? Math.round(\n getOrThrow(visibleRowYs, endRow) +\n getOrThrow(visibleRowHeights, endRow)\n ) - 0.5\n : maxY;\n\n context.rect(x, y, endX - x, endY - y);\n }\n\n // draw the inner transparent fill\n context.fillStyle = theme.selectionColor;\n context.fill();\n\n /**\n * draw an \"inner stroke\" that's clipped to just inside of the rects\n * to act as a casing to the outer stroke. 3px width because 1px is outside\n * the rect (but clipped), 1px is \"on\" the rect (technically this pixel is\n * a half pixel clip as well due to rects offset, but we are immediately painting\n * over it), and then the 1px inside (which is the desired pixel).\n */\n context.save();\n context.clip();\n context.strokeStyle = theme.selectionOutlineCasingColor;\n context.lineWidth = 3;\n context.stroke();\n context.restore();\n\n // draw the outerstroke border on top of the inner stroke\n context.strokeStyle = theme.selectionOutlineColor;\n context.lineWidth = 1;\n context.stroke();\n }\n\n if (isCursorVisible && column != null && row != null) {\n context.restore();\n\n this.drawActiveCell(context, state, column, row);\n }\n }\n\n drawActiveCell(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex,\n borderWidth = GridRenderer.ACTIVE_CELL_BORDER_WIDTH\n ): void {\n const { metrics, theme } = state;\n const {\n visibleColumnWidths,\n visibleColumnXs,\n visibleRowHeights,\n visibleRowYs,\n } = metrics;\n const cellX = getOrThrow(visibleColumnXs, column);\n const cellY = getOrThrow(visibleRowYs, row);\n const cellW = getOrThrow(visibleColumnWidths, column);\n const cellH = getOrThrow(visibleRowHeights, row);\n\n // Now get the outline for the active cell\n let x = cellX - borderWidth * 0.5;\n let y = cellY - borderWidth * 0.5;\n let w = cellW + borderWidth;\n let h = cellH + borderWidth;\n\n // Make sure the outline is interior on the edge\n if (x <= 0) {\n w += x - 1;\n x = 1;\n }\n if (y <= 0) {\n h += y - 1;\n y = 1;\n }\n\n const { lineWidth } = context;\n context.beginPath();\n context.lineWidth = borderWidth;\n context.strokeStyle = theme.selectionOutlineColor;\n this.drawRoundedRect(context, x, y, w, h);\n context.stroke();\n context.lineWidth = lineWidth;\n }\n\n /**\n * Draws a rounded rectangle using the current state of the canvas.\n *\n * @param context The canvas context\n * @param x coordinate of the left side\n * @param y coordinate of the top side\n * @param w width of the rectangle\n * @param h height of the rectangle\n * @param r corner radius of the rectangle\n */\n drawRoundedRect(\n context: CanvasRenderingContext2D,\n x: Coordinate,\n y: Coordinate,\n w: number,\n h: number,\n r = GridRenderer.DEFAULT_EDGE_RADIUS\n ): void {\n context.beginPath();\n context.moveTo(x + r, y);\n context.lineTo(x + w - r, y);\n context.quadraticCurveTo(x + w, y, x + w, y + r);\n context.lineTo(x + w, y + h - r);\n context.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n context.lineTo(x + r, y + h);\n context.quadraticCurveTo(x, y + h, x, y + h - r);\n context.lineTo(x, y + r);\n context.quadraticCurveTo(x, y, x + r, y);\n context.closePath();\n }\n\n drawDraggingColumn(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const {\n draggingColumn,\n draggingColumnOffset,\n metrics,\n mouseX,\n theme,\n } = state;\n if (draggingColumn == null || mouseX == null) {\n return;\n }\n\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n height,\n } = metrics;\n const x = getOrThrow(visibleColumnXs, draggingColumn);\n const columnWidth = getOrThrow(visibleColumnWidths, draggingColumn) + 1;\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n context.save();\n\n context.translate(gridX, 0);\n\n // First, we need to draw over the row stripes where the column is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(x, 0, columnWidth, height);\n\n context.translate(\n mouseX - x - gridX - (draggingColumnOffset ?? 0),\n gridY + reorderOffset\n );\n\n // Then draw the shadow of the moving column\n context.save();\n\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(x, -gridY, columnWidth, height);\n\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this column and all it's contents\n context.beginPath();\n context.rect(x, -gridY, columnWidth, height);\n context.clip();\n\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n this.drawColumnCellContents(context, state, draggingColumn);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n\n context.font = headerFont;\n\n this.drawColumnHeaders(context, state);\n\n context.restore();\n }\n\n drawDraggingRow(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const { draggingRow, draggingRowOffset, metrics, mouseY, theme } = state;\n if (draggingRow == null || mouseY == null) {\n return;\n }\n\n const { gridX, gridY, visibleRowYs, visibleRowHeights, width } = metrics;\n const y = getOrThrow(visibleRowYs, draggingRow);\n const rowHeight = getOrThrow(visibleRowHeights, draggingRow) + 1;\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n context.save();\n\n context.translate(0, gridY);\n\n // First, we need to draw over the row stripes where the row is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(0, y, width, rowHeight);\n\n context.translate(\n gridX + reorderOffset,\n mouseY - y - gridY - (draggingRowOffset ?? 0)\n );\n\n // Then draw the shadow of the moving row\n context.save();\n\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(-gridX, y, width, rowHeight);\n\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this row and all it's contents\n context.beginPath();\n context.rect(-gridX, y, width, rowHeight);\n context.clip();\n\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n this.drawCellContents(context, state);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n\n context.font = headerFont;\n\n this.drawRowHeaders(context, state);\n\n context.restore();\n }\n\n drawScrollBars(\n context: CanvasRenderingContext2D,\n state: GridRenderState\n ): void {\n const {\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n metrics,\n mouseX,\n mouseY,\n theme,\n } = state;\n if (theme.scrollBarSize <= 0) {\n return;\n }\n\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n width,\n height,\n handleHeight,\n handleWidth,\n scrollX,\n scrollY,\n hasHorizontalBar,\n hasVerticalBar,\n barWidth,\n barHeight,\n } = metrics;\n const {\n scrollBarBackgroundColor,\n scrollBarHoverBackgroundColor,\n scrollBarCasingColor,\n scrollBarCornerColor,\n scrollBarColor,\n scrollBarHoverColor,\n scrollBarActiveColor,\n scrollBarSize,\n scrollBarHoverSize,\n scrollBarCasingWidth,\n } = theme;\n\n const isInbounds =\n mouseX != null && mouseY != null && mouseX <= width && mouseY <= height;\n\n const isVerticalBarHover =\n isDraggingVerticalScrollBar ||\n (hasVerticalBar &&\n !isDraggingHorizontalScrollBar &&\n !isDragging &&\n mouseX != null &&\n mouseY != null &&\n mouseX >= width - scrollBarHoverSize &&\n mouseY <= barHeight + columnHeaderHeight &&\n isInbounds);\n\n const isHorizontalBarHover =\n isDraggingHorizontalScrollBar ||\n (hasHorizontalBar &&\n !isDraggingVerticalScrollBar &&\n !isDragging &&\n !isVerticalBarHover && // vert bar gets priorty in overlapped corner hover area\n mouseX != null &&\n mouseY != null &&\n mouseY >= height - scrollBarHoverSize &&\n mouseX <= barWidth - rowHeaderWidth &&\n isInbounds);\n\n const hScrollBarSize = isHorizontalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n const vScrollBarSize = isVerticalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n\n context.translate(rowHeaderWidth, columnHeaderHeight);\n\n if (hasHorizontalBar && hasVerticalBar) {\n // That little corner in the bottom right\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(\n width - rowHeaderWidth - scrollBarSize,\n height - columnHeaderHeight - scrollBarSize,\n scrollBarSize,\n scrollBarSize\n );\n context.fillStyle = scrollBarCornerColor;\n context.fillRect(\n width - rowHeaderWidth - scrollBarSize + scrollBarCasingWidth,\n height - columnHeaderHeight - scrollBarSize + scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasHorizontalBar) {\n const x = scrollX;\n const y = height - columnHeaderHeight - hScrollBarSize;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(0, y, barWidth, hScrollBarSize - scrollBarCasingWidth);\n\n // scrollbar track\n context.fillStyle = isHorizontalBarHover\n ? scrollBarHoverBackgroundColor\n : scrollBarBackgroundColor;\n context.fillRect(\n 0,\n y + scrollBarCasingWidth,\n barWidth,\n hScrollBarSize - scrollBarCasingWidth\n );\n\n // scrollbar thumb\n if (isDraggingHorizontalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isHorizontalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n\n context.fillRect(\n x,\n y + scrollBarCasingWidth,\n handleWidth,\n hScrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasVerticalBar) {\n const x = width - rowHeaderWidth - vScrollBarSize;\n const y = scrollY;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(x, 0, vScrollBarSize - scrollBarCasingWidth, barHeight);\n\n // scrollbar track\n context.fillStyle = isVerticalBarHover\n ? scrollBarHoverBackgroundColor\n : scrollBarBackgroundColor;\n context.fillRect(\n x + scrollBarCasingWidth,\n 0,\n vScrollBarSize - scrollBarCasingWidth,\n barHeight\n );\n\n // scrollbar thumb\n if (isDraggingVerticalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isVerticalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n\n context.fillRect(\n x + scrollBarCasingWidth,\n y,\n vScrollBarSize - scrollBarCasingWidth,\n handleHeight\n );\n }\n\n context.translate(-rowHeaderWidth, -columnHeaderHeight);\n }\n}\n\nexport default GridRenderer;\n"],"file":"GridRenderer.js"}
|