@deephaven/grid 0.53.0 → 0.53.1-beta.2
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/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +27 -21
- package/dist/GridRenderer.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../src/GridRenderer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"GridRenderer.d.ts","sourceRoot":"","sources":["../src/GridRenderer.ts"],"names":[],"mappings":"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"}
|
package/dist/GridRenderer.js
CHANGED
|
@@ -1590,30 +1590,36 @@ export class GridRenderer {
|
|
|
1590
1590
|
var endY = endRow <= bottom && allRowYs.has(endRow) ? Math.round(getOrThrow(allRowYs, endRow) + getOrThrow(allRowHeights, endRow)) - 0.5 : maxY;
|
|
1591
1591
|
context.rect(_x4, _y8, endX - _x4, endY - _y8);
|
|
1592
1592
|
}
|
|
1593
|
+
}
|
|
1593
1594
|
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1595
|
+
/**
|
|
1596
|
+
* Create the path, then draw it once. Fill and
|
|
1597
|
+
* stroke must be outside the beginPath loop otherwise
|
|
1598
|
+
* the fill/stroke will be drawn multiple times.
|
|
1599
|
+
*/
|
|
1597
1600
|
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
* the rect (but clipped), 1px is "on" the rect (technically this pixel is
|
|
1602
|
-
* a half pixel clip as well due to rects offset, but we are immediately painting
|
|
1603
|
-
* over it), and then the 1px inside (which is the desired pixel).
|
|
1604
|
-
*/
|
|
1605
|
-
context.save();
|
|
1606
|
-
context.clip();
|
|
1607
|
-
context.strokeStyle = theme.selectionOutlineCasingColor;
|
|
1608
|
-
context.lineWidth = 3;
|
|
1609
|
-
context.stroke();
|
|
1610
|
-
context.restore();
|
|
1601
|
+
// draw the inner transparent fill
|
|
1602
|
+
context.fillStyle = theme.selectionColor;
|
|
1603
|
+
context.fill();
|
|
1611
1604
|
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1605
|
+
/**
|
|
1606
|
+
* draw an "inner stroke" that's clipped to just inside of the rects
|
|
1607
|
+
* to act as a casing to the outer stroke. 3px width because 1px is outside
|
|
1608
|
+
* the rect (but clipped), 1px is "on" the rect (technically this pixel is
|
|
1609
|
+
* a half pixel clip as well due to rects offset, but we are immediately painting
|
|
1610
|
+
* over it), and then the 1px inside (which is the desired pixel).
|
|
1611
|
+
*/
|
|
1612
|
+
context.save();
|
|
1613
|
+
context.clip();
|
|
1614
|
+
context.strokeStyle = theme.selectionOutlineCasingColor;
|
|
1615
|
+
context.lineWidth = 3;
|
|
1616
|
+
context.stroke();
|
|
1617
|
+
context.restore();
|
|
1618
|
+
|
|
1619
|
+
// draw the outerstroke border on top of the inner stroke
|
|
1620
|
+
context.strokeStyle = theme.selectionOutlineColor;
|
|
1621
|
+
context.lineWidth = 1;
|
|
1622
|
+
context.stroke();
|
|
1617
1623
|
if (isCursorVisible && column != null && row != null) {
|
|
1618
1624
|
context.restore();
|
|
1619
1625
|
this.drawActiveCell(context, state, column, row);
|
package/dist/GridRenderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridRenderer.js","names":["clamp","ColorUtils","getOrThrow","memoizeClear","GridUtils","GridColorUtils","isExpandableGridModel","isEditableGridModel","GridColumnSeparatorMouseHandler","DEFAULT_FONT_WIDTH","DataBarCellRenderer","TextCellRenderer","GridRenderer","constructor","_defineProperty","backgroundColors","maxDepth","split","map","color","colors","i","push","darkenForDepth","max","alpha","colorWithAlpha","isDark","truncate","str","len","length","substr","binaryTruncateToWidth","context","width","start","arguments","undefined","end","truncationChar","measureText","charWidth","repeat","Math","floor","lo","hi","min","result","mid","ceil","truncatedStr","truncateToWidth","fontWidth","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","allRowYs","allRowHeights","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","allColumnXs","allColumnWidths","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","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","renderType","renderTypeForCell","cellRenderer","getCellRenderer","dataBarCellRenderer","textCellRenderer","treeDepthIndent","treeHorizontalPadding","treeLineColor","columnX","rowY","depthRowAfter","depthDiff","lineX","headerFont","drawColumnHeaders","drawRowHeaders","drawRowFooters","draggingColumnSeparator","isDragging","columnHeaderHeight","columnHeaderMaxDepth","headerHiddenSeparatorSize","headerHiddenSeparatorHoverColor","headerSeparatorColor","headerSeparatorHoverColor","hiddenSeparatorHeight","hiddenY","containsFrozenColumns","drawColumnHeadersForRange","hiddenColumns","entries","filter","_ref","_","w","_ref2","index","highlightedSeparator","separator","getColumnSeparator","getGridPointFromXY","shouldDrawSeparator","columnIndex","nextColumnIndex","textForColumnHeader","visibleColumnIndex","indexOf","nextColumn","nextColumnWidth","isColumnHidden","isNextColumnHidden","range","bounds","d","drawColumnHeadersAtDepth","userColumnWidths","movedColumns","visibleWidth","startIndex","endIndex","drawColumnHeader","drawColumnHeaderAtIndex","columnGroupName","columnGroupColor","colorForColumnHeader","columnGroupLeft","columnGroupRight","prevColumnIndex","_modelColumns$get","_ref3","_userColumnWidths$get","prevModelIndex","getModelIndex","prevColumnWidth","_modelColumns$get2","_ref4","_userColumnWidths$get2","nextModelIndex","isFullWidth","_model$colorForColumn","text","columnText","style","_fontWidths$get","headerHorizontalPadding","headerBackgroundColor","headerColor","black","white","fontWidths","maxWidth","maxLength","separatorColor","textColor","isDarkBackground","getCachedColorIsDark","isDarkText","_unused","renderText","concat","substring","textWidth","columnLeft","visibleLeft","columnRight","visibleRight","isBeyondLeft","isBeyondRight","textAlign","fillText","draggingRowSeparator","rowHeaderWidth","hiddenSeparatorWidth","hiddenX","hiddenRows","isPreviousRowHidden","getRowSeparatorIndex","visibleRowIndex","nextRow","nextRowHeight","isRowHidden","isNextRowHidden","drawRowHeader","cellHorizontalPadding","textForRowHeader","verticalBarWidth","textX","textY","textForRowFooter","viewport","cursorColumn","cursorRow","editingCell","isCursorVisible","isEditable","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","_modelColumns$get3","draggingColumnVisibleRange","draggingColumnDepth","draggingModelIndex","draggingGroup","getColumnHeaderGroup","originalLeft","originalRight","originalWidth","draggingLeft","reorderOffset","columnHeaderOffset","draggingRowOffset","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","scrollBarSize","handleHeight","handleWidth","scrollX","scrollY","hasHorizontalBar","hasVerticalBar","barWidth","barHeight","barLeft","barTop","scrollBarBackgroundColor","scrollBarHoverBackgroundColor","scrollBarCasingColor","scrollBarCornerColor","scrollBarColor","scrollBarHoverColor","scrollBarActiveColor","scrollBarHoverSize","scrollBarCasingWidth","scrollBarSelectionTick","scrollBarSelectionTickColor","scrollBarActiveSelectionTickColor","autoSelectRow","autoSelectColumn","isInbounds","isVerticalBarHover","isHorizontalBarHover","hScrollBarSize","vScrollBarSize","lastLeft","filteredRanges","value","sortedRanges","sort","compareRanges","mergedRanges","mergeSortedRanges","getTickX","tickX","tickWidth","trackHeight","lastTop","getTickY","tickY","trackWidth","tickHeight"],"sources":["../src/GridRenderer.ts"],"sourcesContent":["import clamp from 'lodash.clamp';\nimport { ColorUtils, getOrThrow } from '@deephaven/utils';\nimport memoizeClear from './memoizeClear';\nimport GridUtils from './GridUtils';\nimport GridColorUtils from './GridColorUtils';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { GridColor, GridColorWay, NullableGridColor } from './GridTheme';\nimport { Coordinate, VisibleIndex } from './GridMetrics';\nimport { isEditableGridModel } from './EditableGridModel';\nimport GridColumnSeparatorMouseHandler from './mouse-handlers/GridColumnSeparatorMouseHandler';\nimport { BoundedAxisRange } from './GridAxisRange';\nimport { DEFAULT_FONT_WIDTH, GridRenderState } from './GridRendererTypes';\nimport CellRenderer, { CellRenderType } from './CellRenderer';\nimport DataBarCellRenderer from './DataBarCellRenderer';\nimport TextCellRenderer from './TextCellRenderer';\n\ntype NoneNullColumnRange = { startColumn: number; endColumn: number };\n\ntype NoneNullRowRange = { startRow: number; endRow: number };\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 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 protected textCellRenderer = new TextCellRenderer();\n\n protected dataBarCellRenderer = new DataBarCellRenderer();\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 * @param truncationChar This char will be repeated as the display string if the string is truncated instead of just adding an ellipsis\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 truncationChar?: string\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\n if (truncationChar !== undefined) {\n const charWidth = context.measureText(truncationChar).width;\n return truncationChar.repeat(Math.max(1, Math.floor(width / charWidth)));\n }\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 * @param truncationChar This char will be repeated as the display string if the string is truncated instead of just adding an ellipsis\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 = DEFAULT_FONT_WIDTH,\n truncationChar?: string\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(\n context,\n str,\n width,\n lo,\n hi,\n truncationChar\n );\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 allRowYs,\n allRowHeights,\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(allRowYs, floatingTopRowCount - 1) +\n getOrThrow(allRowHeights, 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(allRowYs, rowCount - floatingBottomRowCount) + 0.5,\n maxY:\n getOrThrow(allRowYs, rowCount - 1) +\n getOrThrow(allRowHeights, 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 allColumnXs,\n allColumnWidths,\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(allColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(allColumnWidths, 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(allColumnXs, columnCount - floatingRightColumnCount) + 0.5,\n maxX:\n getOrThrow(allColumnXs, columnCount - 1) +\n getOrThrow(allColumnWidths, 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 allRowYs,\n allColumnXs,\n allRowHeights,\n allColumnWidths,\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(allRowYs, floatingTopRowCount - 1) +\n getOrThrow(allRowHeights, floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = getOrThrow(allRowYs, rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n getOrThrow(allColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(allColumnWidths, floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n getOrThrow(allColumnXs, columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\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(allRowYs, floatingTopRowCount - 1) +\n getOrThrow(allRowHeights, floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = getOrThrow(allRowYs, rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n getOrThrow(allColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(allColumnWidths, floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n getOrThrow(allColumnXs, columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\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 allRowHeights,\n allRowYs,\n allColumnXs,\n allColumnWidths,\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 allColumnXs.has(floatingLeftColumnCount + 1)\n ? getOrThrow(allColumnXs, floatingLeftColumnCount + 1)\n : -10,\n minY:\n floatingTopRowCount > 0 && allRowYs.has(floatingTopRowCount + 1)\n ? getOrThrow(allRowYs, floatingTopRowCount + 1)\n : -10,\n maxX:\n floatingRightColumnCount > 0 &&\n allColumnXs.has(columnCount - floatingRightColumnCount - 1)\n ? getOrThrow(\n allColumnXs,\n columnCount - floatingRightColumnCount - 1\n ) +\n getOrThrow(\n allColumnWidths,\n columnCount - floatingRightColumnCount - 1\n ) -\n 0.5\n : width + 10,\n maxY:\n floatingBottomRowCount > 0 &&\n allRowYs.has(rowCount - floatingBottomRowCount - 1)\n ? getOrThrow(allRowYs, rowCount - floatingBottomRowCount - 1) +\n getOrThrow(allRowHeights, rowCount - floatingBottomRowCount - 1) -\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: readonly 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 { allRowYs, allRowHeights } = 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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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(allRowYs, 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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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 == null) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n if (mouseY > maxY) {\n return;\n }\n\n const x = getOrThrow(allColumnXs, mouseColumn);\n const columnWidth = getOrThrow(allColumnWidths, 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 == null) {\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 == null\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 { allRowHeights, allRowYs, maxX } = metrics;\n\n const y = getOrThrow(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, row);\n\n if (theme.rowHoverBackgroundColor != null) {\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 != null) {\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: readonly VisibleIndex[],\n rows: readonly VisibleIndex[],\n columnColor: NullableGridColor,\n rowColor: NullableGridColor\n ): void {\n if (columnColor == null && rowColor == null) {\n return;\n }\n\n context.lineWidth = 1;\n context.beginPath();\n\n if (columnColor != null) {\n context.strokeStyle = columnColor;\n this.drawGridLinesForColumns(context, state, columns);\n }\n if (rowColor != null) {\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: readonly VisibleIndex[]\n ): void {\n const { metrics } = state;\n const { allColumnXs, maxY } = metrics;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const x = getOrThrow(allColumnXs, 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: readonly VisibleIndex[]\n ): void {\n const { metrics } = state;\n const { allRowYs, 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(allRowYs, 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: readonly VisibleIndex[],\n rows: readonly 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 allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\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 != null) {\n const x = getOrThrow(allColumnXs, column) + 1;\n const y = getOrThrow(allRowYs, row) + 1;\n const columnWidth = getOrThrow(allColumnWidths, column) - 1;\n const rowHeight = getOrThrow(allRowHeights, 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 { allColumnXs, allColumnWidths, visibleRows, height } = metrics;\n const x = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, 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 } = state;\n const { modelColumns, modelRows } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = this.getCellRenderer(renderType);\n cellRenderer.drawCellContent(context, state, column, row);\n }\n\n getCellRenderer(renderType: CellRenderType): CellRenderer {\n switch (renderType) {\n case 'dataBar':\n return this.dataBarCellRenderer;\n default:\n return this.textCellRenderer;\n }\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 { firstColumn, allColumnXs, allRowYs, allRowHeights } = metrics;\n const { treeDepthIndent, treeHorizontalPadding, treeLineColor } = theme;\n const columnX = getOrThrow(allColumnXs, firstColumn);\n const rowY = getOrThrow(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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 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: string, alpha: number) =>\n GridColorUtils.colorWithAlpha(color, alpha),\n { max: 1000 }\n );\n\n getCachedColorIsDark = memoizeClear(\n (color: string) => ColorUtils.isDark(color),\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 model,\n } = state;\n const {\n columnHeaderHeight,\n floatingColumns,\n gridX,\n width,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n floatingLeftColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n modelColumns,\n columnHeaderMaxDepth,\n } = metrics;\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const {\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorHeight = columnHeaderHeight * 0.5;\n const hiddenY =\n columnHeaderHeight * (columnHeaderMaxDepth - 1) +\n columnHeaderHeight * 0.5 -\n hiddenSeparatorHeight * 0.5;\n const containsFrozenColumns = floatingLeftColumnCount > 0;\n\n context.save();\n\n this.drawColumnHeadersForRange(\n context,\n state,\n [visibleColumns[0], visibleColumns[visibleColumns.length - 1]],\n {\n minX: gridX + floatingLeftWidth,\n maxX: width - floatingRightWidth,\n }\n );\n\n if (containsFrozenColumns) {\n this.drawColumnHeadersForRange(\n context,\n state,\n [floatingColumns[0], floatingColumns[floatingColumns.length - 1]],\n {\n minX: gridX,\n maxX: gridX + floatingLeftWidth,\n }\n );\n }\n\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n\n const hiddenColumns = [...allColumnWidths.entries()]\n .filter(([_, w]) => w === 0)\n .map(([index]) => index);\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(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, 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 { index: highlightedSeparator, depth } =\n draggingColumnSeparator ?? {};\n\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n const separator = GridColumnSeparatorMouseHandler.getColumnSeparator(\n GridUtils.getGridPointFromXY(mouseX, mouseY, metrics),\n metrics,\n model,\n theme\n );\n highlightedSeparator = separator?.index;\n depth = separator?.depth;\n }\n\n let shouldDrawSeparator: boolean;\n\n if (highlightedSeparator == null) {\n shouldDrawSeparator = false;\n } else {\n const columnIndex = modelColumns.get(highlightedSeparator);\n const nextColumnIndex = modelColumns.get(highlightedSeparator + 1);\n if (columnIndex == null || nextColumnIndex == null) {\n shouldDrawSeparator = false;\n } else {\n shouldDrawSeparator =\n model.textForColumnHeader(columnIndex, depth) !==\n model.textForColumnHeader(nextColumnIndex, depth);\n }\n }\n\n if (\n shouldDrawSeparator &&\n highlightedSeparator != null &&\n depth != null &&\n (!isDragging || draggingColumnSeparator != null)\n ) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const columnX = getOrThrow(allColumnXs, highlightedSeparator);\n const columnWidth = getOrThrow(allColumnWidths, 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 ? allColumnWidths.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(\n x,\n (columnHeaderMaxDepth - depth - 1) * columnHeaderHeight\n );\n context.lineTo(\n x,\n (columnHeaderMaxDepth - depth) * columnHeaderHeight - 1\n );\n context.stroke();\n }\n }\n\n context.restore();\n }\n\n drawColumnHeadersForRange(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n range: BoundedAxisRange,\n bounds: { minX: number; maxX: number }\n ): void {\n const { model } = state;\n const { columnHeaderMaxDepth } = model;\n\n if (columnHeaderMaxDepth === 0) {\n return;\n }\n\n for (let d = 0; d <= columnHeaderMaxDepth; d += 1) {\n this.drawColumnHeadersAtDepth(context, state, range, bounds, d);\n }\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n range: BoundedAxisRange,\n bounds: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnXs,\n gridX,\n userColumnWidths,\n allColumnWidths,\n movedColumns,\n } = metrics;\n const { columnHeaderHeight, columnWidth } = theme;\n const { columnHeaderMaxDepth } = model;\n const { minX, maxX } = bounds;\n const visibleWidth = maxX - minX;\n\n if (columnHeaderMaxDepth === 0) {\n return;\n }\n\n const startIndex = range[0];\n const endIndex = range[1];\n\n context.save();\n context.translate(\n 0,\n (columnHeaderMaxDepth - depth - 1) * columnHeaderHeight\n );\n\n if (depth === 0) {\n // Make sure base column header background always goes to the right edge\n this.drawColumnHeader(context, state, '', minX, maxX);\n\n // Draw base column headers\n for (let i = startIndex; i <= endIndex; i += 1) {\n this.drawColumnHeaderAtIndex(context, state, i, bounds);\n }\n }\n\n // Draw column header group\n if (depth > 0) {\n let columnIndex = startIndex;\n\n while (columnIndex <= endIndex) {\n const { columnCount } = metrics;\n const modelColumn = getOrThrow(modelColumns, columnIndex);\n const columnGroupName = model.textForColumnHeader(modelColumn, depth);\n const columnGroupColor = model.colorForColumnHeader(modelColumn, depth);\n let columnGroupLeft = getOrThrow(allColumnXs, columnIndex) + gridX;\n let columnGroupRight =\n columnGroupLeft + getOrThrow(allColumnWidths, columnIndex);\n\n if (columnGroupName != null) {\n // Need to determine if the column group is at least the width of the bounds\n // And if the left/right of the group extend past the bounds\n // The group will be drawn as if it were a column with a max width of the bounds width\n let prevColumnIndex = columnIndex - 1;\n while (\n prevColumnIndex >= 0 &&\n (columnGroupRight - columnGroupLeft < visibleWidth ||\n columnGroupLeft > minX)\n ) {\n const prevModelIndex =\n modelColumns.get(prevColumnIndex) ??\n GridUtils.getModelIndex(prevColumnIndex, movedColumns);\n if (\n prevModelIndex == null ||\n model.textForColumnHeader(prevModelIndex, depth) !==\n columnGroupName\n ) {\n // Previous column not in the same group\n break;\n }\n\n const prevColumnWidth =\n userColumnWidths.get(prevModelIndex) ??\n allColumnWidths.get(prevColumnIndex) ??\n columnWidth;\n\n columnGroupLeft -= prevColumnWidth;\n prevColumnIndex -= 1;\n }\n\n let nextColumnIndex = columnIndex + 1;\n while (\n nextColumnIndex < columnCount &&\n (columnGroupRight - columnGroupLeft < visibleWidth ||\n columnGroupRight < maxX)\n ) {\n const nextModelIndex =\n modelColumns.get(nextColumnIndex) ??\n GridUtils.getModelIndex(nextColumnIndex, movedColumns);\n if (\n model.textForColumnHeader(nextModelIndex, depth) !==\n columnGroupName\n ) {\n // Next column not in the same group\n break;\n }\n\n const nextColumnWidth =\n userColumnWidths.get(nextModelIndex) ??\n allColumnWidths.get(nextColumnIndex) ??\n columnWidth;\n\n columnGroupRight += nextColumnWidth;\n nextColumnIndex += 1;\n }\n\n // Set column index to end of the current group\n columnIndex = nextColumnIndex - 1;\n\n const isFullWidth =\n columnGroupRight - columnGroupLeft >= visibleWidth;\n let x = columnGroupLeft;\n if (isFullWidth) {\n if (columnGroupRight < maxX) {\n x = columnGroupRight - visibleWidth;\n } else if (columnGroupLeft < minX) {\n x = minX;\n }\n }\n\n this.drawColumnHeader(\n context,\n state,\n columnGroupName,\n x,\n Math.min(columnGroupRight - columnGroupLeft, visibleWidth),\n {\n backgroundColor: columnGroupColor ?? undefined,\n },\n bounds\n );\n }\n columnIndex += 1;\n }\n }\n context.restore();\n }\n\n /**\n * Draws the column header for the given visible index\n * @param context Canvas context\n * @param state Grid render state\n * @param index Visible index of the column header to draw\n * @param bounds The horizontal bounds the header can be drawn in\n */\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n const { metrics, model } = state;\n const { modelColumns, allColumnWidths, allColumnXs, gridX } = metrics;\n const width = getOrThrow(allColumnWidths, index);\n const x = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = getOrThrow(modelColumns, index);\n const text = model.textForColumnHeader(modelColumn);\n\n if (text == null) {\n return;\n }\n\n this.drawColumnHeader(\n context,\n state,\n text,\n x,\n width,\n {\n backgroundColor: model.colorForColumnHeader(modelColumn) ?? undefined,\n },\n bounds\n );\n }\n\n drawColumnHeader(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n columnText: string,\n columnX: Coordinate,\n columnWidth: number,\n style?: {\n backgroundColor?: string;\n textColor?: string;\n separatorColor?: string;\n },\n bounds?: { minX?: number; maxX?: number }\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n const { metrics, theme } = state;\n\n const {\n headerHorizontalPadding,\n columnHeaderHeight,\n headerBackgroundColor,\n headerColor,\n headerSeparatorColor,\n black,\n white,\n } = theme;\n const { fontWidths, width } = metrics;\n const fontWidth = fontWidths.get(context.font) ?? DEFAULT_FONT_WIDTH;\n\n const maxWidth = columnWidth - headerHorizontalPadding * 2;\n const maxLength = maxWidth / fontWidth;\n\n const {\n backgroundColor = headerBackgroundColor,\n separatorColor = headerSeparatorColor,\n } = style ?? {};\n\n let { textColor = headerColor } = style ?? {};\n\n try {\n const isDarkBackground = this.getCachedColorIsDark(backgroundColor);\n const isDarkText = this.getCachedColorIsDark(textColor);\n if (isDarkBackground && isDarkText) {\n textColor = white;\n } else if (!isDarkBackground && !isDarkText) {\n textColor = black;\n }\n } catch {\n // Invalid color provided\n // no-op since we don't use logging in base grid\n }\n\n let { minX = 0, maxX = width } = bounds ?? {};\n\n context.save();\n context.rect(minX, 0, maxX - minX, columnHeaderHeight);\n context.clip();\n\n // Fill background color if specified\n if (backgroundColor != null) {\n context.fillStyle = backgroundColor;\n context.fillRect(columnX, 0, columnWidth, columnHeaderHeight);\n }\n\n if (separatorColor != null) {\n context.strokeStyle = separatorColor;\n context.beginPath();\n\n // Don't draw left separator if column touches the left edge\n if (columnX > 0) {\n context.moveTo(columnX + 0.5, 0);\n context.lineTo(columnX + 0.5, columnHeaderHeight);\n }\n context.moveTo(columnX + columnWidth + 0.5, 0);\n context.lineTo(columnX + columnWidth + 0.5, columnHeaderHeight);\n\n // Bottom Border, should be interior to the header height\n context.moveTo(columnX, columnHeaderHeight - 0.5);\n context.lineTo(columnX + columnWidth, columnHeaderHeight - 0.5);\n context.stroke();\n }\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n context.fillStyle = textColor;\n\n let renderText = columnText;\n\n if (maxLength <= 0) {\n renderText = '';\n } else if (renderText.length > maxLength) {\n renderText = `${renderText.substring(0, maxLength - 1)}…`;\n }\n\n const textWidth = renderText.length * fontWidth;\n let x = columnX + columnWidth * 0.5;\n const y = columnHeaderHeight * 0.5;\n minX += headerHorizontalPadding;\n maxX -= headerHorizontalPadding;\n\n const columnLeft = columnX + headerHorizontalPadding;\n const visibleLeft = clamp(columnLeft, minX, maxX);\n const columnRight = columnX + columnWidth - headerHorizontalPadding;\n const visibleRight = clamp(columnRight, minX, maxX);\n const visibleWidth = visibleRight - visibleLeft;\n\n const isBeyondLeft = x - textWidth * 0.5 < minX;\n const isBeyondRight = x + textWidth * 0.5 > maxX;\n\n if (isBeyondLeft) {\n // Column name would be off the left side of the canvas\n if (textWidth < visibleWidth) {\n // Can render the entire text in the visible space. Stick to left\n x = minX + textWidth * 0.5;\n } else {\n x = columnRight - textWidth * 0.5;\n }\n } else if (isBeyondRight) {\n if (textWidth < visibleWidth) {\n // Can render the entire text in the visible space. Stick to right\n x = maxX - textWidth * 0.5;\n } else {\n x = columnLeft + textWidth * 0.5;\n }\n }\n context.textAlign = 'center';\n context.fillText(renderText, x, y);\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 allRowHeights,\n allRowYs,\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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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 { index: highlightedSeparator = null } = 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(allRowYs, highlightedSeparator);\n const rowHeight = getOrThrow(allRowHeights, 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 ? allRowHeights.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(allRowHeights, row);\n const y = getOrThrow(allRowYs, 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 { mouseX, mouseY, metrics, model, theme, draggingRowSeparator } =\n state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n rowFooterWidth,\n height,\n verticalBarWidth,\n visibleRows,\n allRowHeights,\n allRowYs,\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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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 { index: highlightedSeparator = null } = 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(allRowYs, highlightedSeparator);\n const rowHeight = getOrThrow(allRowHeights, 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 ? allRowHeights.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(allRowHeights, row);\n if (rowHeight > 0) {\n const rowY = getOrThrow(allRowYs, 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 allColumnWidths,\n allColumnXs,\n allRowHeights,\n allRowYs,\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 allColumnXs.has(column) &&\n allRowYs.has(row);\n if (isCursorVisible) {\n // Punch a hole out where the active cell is, it gets styled differently.\n const x = getOrThrow(allColumnXs, column);\n const y = getOrThrow(allRowYs, row);\n const w = getOrThrow(allColumnWidths, column);\n const h = getOrThrow(allRowHeights, 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 && allColumnXs.has(startColumn)\n ? Math.round(getOrThrow(allColumnXs, startColumn)) + 0.5\n : minX;\n const y =\n startRow >= top && allRowYs.has(startRow)\n ? Math.max(Math.round(getOrThrow(allRowYs, startRow)) + 0.5, 0.5)\n : minY;\n\n const endX =\n endColumn <= right && allColumnXs.has(endColumn)\n ? Math.round(\n getOrThrow(allColumnXs, endColumn) +\n getOrThrow(allColumnWidths, endColumn)\n ) - 0.5\n : maxX;\n const endY =\n endRow <= bottom && allRowYs.has(endRow)\n ? Math.round(\n getOrThrow(allRowYs, endRow) + getOrThrow(allRowHeights, 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 { allColumnWidths, allColumnXs, allRowHeights, allRowYs } = metrics;\n const cellX = getOrThrow(allColumnXs, column);\n const cellY = getOrThrow(allRowYs, row);\n const cellW = getOrThrow(allColumnWidths, column);\n const cellH = getOrThrow(allRowHeights, 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 { draggingColumn, metrics, mouseX, theme, model } = state;\n if (draggingColumn == null || mouseX == null) {\n return;\n }\n\n const { range: draggingColumnVisibleRange, depth: draggingColumnDepth } =\n draggingColumn;\n\n const {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n height,\n width,\n columnHeaderMaxDepth,\n columnHeaderHeight,\n movedColumns,\n modelColumns,\n floatingLeftWidth,\n } = metrics;\n\n const draggingModelIndex =\n modelColumns.get(draggingColumnVisibleRange[0]) ??\n GridUtils.getModelIndex(draggingColumnVisibleRange[0], movedColumns);\n\n const draggingGroup = model.getColumnHeaderGroup(\n draggingModelIndex,\n draggingColumnDepth\n );\n\n if (draggingColumnDepth > 0 && !draggingGroup) {\n return;\n }\n\n const [startIndex, endIndex] = draggingColumnVisibleRange;\n\n const originalLeft = getOrThrow(allColumnXs, startIndex);\n const originalRight =\n getOrThrow(allColumnXs, endIndex) + getOrThrow(allColumnWidths, endIndex);\n const originalWidth = originalRight - originalLeft;\n\n const draggingLeft = draggingColumn.left;\n\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n const columnHeaderOffset =\n (columnHeaderMaxDepth - draggingColumnDepth - 1) * columnHeaderHeight;\n\n context.save();\n\n context.translate(gridX, 0);\n\n context.save();\n context.beginPath();\n\n // Don't draw over frozen columns\n context.rect(floatingLeftWidth, 0, width, height);\n context.clip();\n\n // First, we need to draw over where the column is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(originalLeft, columnHeaderOffset, originalWidth, height);\n context.restore();\n\n // Then draw the shadow of the moving column\n context.translate(0, reorderOffset);\n\n context.save();\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(\n draggingColumn.left,\n columnHeaderOffset + reorderOffset,\n draggingColumn.width,\n height\n );\n context.restore(); // Reset style\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(\n draggingColumn.left,\n columnHeaderOffset,\n draggingColumn.width + 1,\n height\n );\n context.clip();\n\n context.translate(draggingLeft - originalLeft, 0);\n context.font = headerFont;\n\n const visibleColumns: VisibleIndex[] = [];\n for (\n let i = draggingColumn.range[0];\n i <= draggingColumn.range[1];\n i += 1\n ) {\n visibleColumns.push(i);\n }\n\n /**\n * This will not draw the header text properly, but extensions of Grid\n * may draw extra things in the header like sorts and filters\n */\n this.drawColumnHeaders(context, state);\n\n // Ensure the column header gets drawn\n this.drawColumnHeadersForRange(\n context,\n state,\n [visibleColumns[0], visibleColumns[visibleColumns.length - 1]],\n {\n minX: originalLeft,\n maxX: width,\n }\n );\n\n context.translate(0, gridY);\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n for (let i = startIndex; i <= endIndex; i += 1) {\n this.drawColumnCellContents(context, state, i);\n }\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, allRowYs, allRowHeights, width } = metrics;\n const y = getOrThrow(allRowYs, draggingRow);\n const rowHeight = getOrThrow(allRowHeights, 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 width,\n height,\n handleHeight,\n handleWidth,\n scrollX,\n scrollY,\n hasHorizontalBar,\n hasVerticalBar,\n barWidth,\n barHeight,\n barLeft,\n barTop,\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 scrollBarSelectionTick,\n scrollBarSelectionTickColor,\n scrollBarActiveSelectionTickColor,\n autoSelectRow,\n autoSelectColumn,\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 >= barTop &&\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 >= barLeft &&\n isInbounds);\n\n const hScrollBarSize = isHorizontalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n const vScrollBarSize = isVerticalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n\n context.translate(barLeft, barTop);\n\n if (hasHorizontalBar && hasVerticalBar) {\n // That little corner in the bottom right\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(\n width - barLeft - scrollBarSize,\n height - barTop - scrollBarSize,\n scrollBarSize,\n scrollBarSize\n );\n context.fillStyle = scrollBarCornerColor;\n context.fillRect(\n width - barLeft - scrollBarSize + scrollBarCasingWidth,\n height - barTop - scrollBarSize + scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasHorizontalBar) {\n const x = scrollX;\n const y = height - barTop - 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 if (\n !autoSelectRow &&\n scrollBarSelectionTick &&\n scrollBarSelectionTickColor != null &&\n scrollBarActiveSelectionTickColor != null\n ) {\n context.fillStyle = scrollBarSelectionTickColor;\n // Scrollbar Selection Tick\n const { selectedRanges, cursorColumn } = state;\n const { lastLeft, columnCount } = metrics;\n\n const filteredRanges = [...selectedRanges].filter(\n value => value.startColumn != null && value.endColumn != null\n ) as NoneNullColumnRange[];\n\n const sortedRanges = filteredRanges\n .map(\n (value): BoundedAxisRange => [value.startColumn, value.endColumn]\n )\n .sort(GridUtils.compareRanges);\n\n const mergedRanges = GridUtils.mergeSortedRanges(sortedRanges);\n\n const getTickX = (index: number): number => {\n if (index <= lastLeft) {\n return (index / lastLeft) * (barWidth - handleWidth);\n }\n return (\n barWidth -\n handleWidth +\n ((index - lastLeft) / (columnCount - lastLeft)) * handleWidth\n );\n };\n for (let i = 0; i < mergedRanges.length; i += 1) {\n const range = mergedRanges[i];\n const startColumn = range[0];\n const endColumn = range[1];\n\n if (\n startColumn != null &&\n endColumn != null &&\n (startColumn !== cursorColumn || endColumn !== cursorColumn)\n ) {\n const tickX = getTickX(startColumn);\n const tickWidth = Math.max(\n 1,\n Math.round(getTickX(endColumn + 1) - tickX)\n );\n const trackHeight = hScrollBarSize - scrollBarCasingWidth;\n context.fillRect(\n tickX,\n y + scrollBarCasingWidth + Math.round(trackHeight / 3),\n tickWidth,\n Math.round(trackHeight / 3)\n );\n }\n }\n\n // Current Active Tick\n if (cursorColumn != null) {\n const tickX = getTickX(cursorColumn);\n const tickWidth = 2;\n const trackHeight = hScrollBarSize - scrollBarCasingWidth;\n context.fillStyle = scrollBarActiveSelectionTickColor;\n context.fillRect(\n tickX,\n y + scrollBarCasingWidth,\n tickWidth,\n trackHeight\n );\n }\n }\n }\n\n if (hasVerticalBar) {\n const x = width - barLeft - 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 if (\n !autoSelectColumn &&\n scrollBarSelectionTick &&\n scrollBarSelectionTickColor != null &&\n scrollBarActiveSelectionTickColor != null\n ) {\n // Scrollbar Selection Tick\n const { selectedRanges, cursorRow } = state;\n const { lastTop, rowCount } = metrics;\n\n const getTickY = (index: number): number => {\n if (index <= lastTop) {\n return (index / lastTop) * (barHeight - handleHeight);\n }\n return (\n barHeight -\n handleHeight +\n ((index - lastTop) / (rowCount - lastTop)) * handleHeight\n );\n };\n\n context.fillStyle = scrollBarSelectionTickColor;\n\n const filteredRanges = [...selectedRanges].filter(\n value => value.startRow != null && value.endRow != null\n ) as NoneNullRowRange[];\n\n const sortedRanges = filteredRanges\n .map((value): BoundedAxisRange => [value.startRow, value.endRow])\n .sort(GridUtils.compareRanges);\n\n const mergedRanges = GridUtils.mergeSortedRanges(sortedRanges);\n\n for (let i = 0; i < mergedRanges.length; i += 1) {\n const range = mergedRanges[i];\n const startRow = range[0];\n const endRow = range[1];\n if (\n startRow != null &&\n endRow != null &&\n (startRow !== cursorRow || endRow !== cursorRow)\n ) {\n const tickY = getTickY(startRow);\n const trackWidth = vScrollBarSize - scrollBarCasingWidth;\n const tickHeight = Math.max(\n 1,\n Math.round(getTickY(endRow + 1) - tickY)\n );\n context.fillRect(\n x + scrollBarCasingWidth + Math.round(trackWidth / 3),\n tickY,\n Math.round(trackWidth / 3),\n tickHeight\n );\n }\n }\n\n // Current Active Tick\n if (cursorRow != null) {\n const tickY = Math.round(getTickY(cursorRow));\n\n const trackWidth = vScrollBarSize - scrollBarCasingWidth;\n const tickHeight = 2;\n\n context.fillStyle = scrollBarActiveSelectionTickColor;\n context.fillRect(\n x + scrollBarCasingWidth,\n tickY,\n trackWidth,\n tickHeight\n );\n }\n }\n }\n\n context.translate(-barLeft, -barTop);\n }\n}\n\nexport default GridRenderer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GridRenderer.js","names":["clamp","ColorUtils","getOrThrow","memoizeClear","GridUtils","GridColorUtils","isExpandableGridModel","isEditableGridModel","GridColumnSeparatorMouseHandler","DEFAULT_FONT_WIDTH","DataBarCellRenderer","TextCellRenderer","GridRenderer","constructor","_defineProperty","backgroundColors","maxDepth","split","map","color","colors","i","push","darkenForDepth","max","alpha","colorWithAlpha","isDark","truncate","str","len","length","substr","binaryTruncateToWidth","context","width","start","arguments","undefined","end","truncationChar","measureText","charWidth","repeat","Math","floor","lo","hi","min","result","mid","ceil","truncatedStr","truncateToWidth","fontWidth","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","allRowYs","allRowHeights","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","allColumnXs","allColumnWidths","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","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","renderType","renderTypeForCell","cellRenderer","getCellRenderer","dataBarCellRenderer","textCellRenderer","treeDepthIndent","treeHorizontalPadding","treeLineColor","columnX","rowY","depthRowAfter","depthDiff","lineX","headerFont","drawColumnHeaders","drawRowHeaders","drawRowFooters","draggingColumnSeparator","isDragging","columnHeaderHeight","columnHeaderMaxDepth","headerHiddenSeparatorSize","headerHiddenSeparatorHoverColor","headerSeparatorColor","headerSeparatorHoverColor","hiddenSeparatorHeight","hiddenY","containsFrozenColumns","drawColumnHeadersForRange","hiddenColumns","entries","filter","_ref","_","w","_ref2","index","highlightedSeparator","separator","getColumnSeparator","getGridPointFromXY","shouldDrawSeparator","columnIndex","nextColumnIndex","textForColumnHeader","visibleColumnIndex","indexOf","nextColumn","nextColumnWidth","isColumnHidden","isNextColumnHidden","range","bounds","d","drawColumnHeadersAtDepth","userColumnWidths","movedColumns","visibleWidth","startIndex","endIndex","drawColumnHeader","drawColumnHeaderAtIndex","columnGroupName","columnGroupColor","colorForColumnHeader","columnGroupLeft","columnGroupRight","prevColumnIndex","_modelColumns$get","_ref3","_userColumnWidths$get","prevModelIndex","getModelIndex","prevColumnWidth","_modelColumns$get2","_ref4","_userColumnWidths$get2","nextModelIndex","isFullWidth","_model$colorForColumn","text","columnText","style","_fontWidths$get","headerHorizontalPadding","headerBackgroundColor","headerColor","black","white","fontWidths","maxWidth","maxLength","separatorColor","textColor","isDarkBackground","getCachedColorIsDark","isDarkText","_unused","renderText","concat","substring","textWidth","columnLeft","visibleLeft","columnRight","visibleRight","isBeyondLeft","isBeyondRight","textAlign","fillText","draggingRowSeparator","rowHeaderWidth","hiddenSeparatorWidth","hiddenX","hiddenRows","isPreviousRowHidden","getRowSeparatorIndex","visibleRowIndex","nextRow","nextRowHeight","isRowHidden","isNextRowHidden","drawRowHeader","cellHorizontalPadding","textForRowHeader","verticalBarWidth","textX","textY","textForRowFooter","viewport","cursorColumn","cursorRow","editingCell","isCursorVisible","isEditable","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","_modelColumns$get3","draggingColumnVisibleRange","draggingColumnDepth","draggingModelIndex","draggingGroup","getColumnHeaderGroup","originalLeft","originalRight","originalWidth","draggingLeft","reorderOffset","columnHeaderOffset","draggingRowOffset","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","scrollBarSize","handleHeight","handleWidth","scrollX","scrollY","hasHorizontalBar","hasVerticalBar","barWidth","barHeight","barLeft","barTop","scrollBarBackgroundColor","scrollBarHoverBackgroundColor","scrollBarCasingColor","scrollBarCornerColor","scrollBarColor","scrollBarHoverColor","scrollBarActiveColor","scrollBarHoverSize","scrollBarCasingWidth","scrollBarSelectionTick","scrollBarSelectionTickColor","scrollBarActiveSelectionTickColor","autoSelectRow","autoSelectColumn","isInbounds","isVerticalBarHover","isHorizontalBarHover","hScrollBarSize","vScrollBarSize","lastLeft","filteredRanges","value","sortedRanges","sort","compareRanges","mergedRanges","mergeSortedRanges","getTickX","tickX","tickWidth","trackHeight","lastTop","getTickY","tickY","trackWidth","tickHeight"],"sources":["../src/GridRenderer.ts"],"sourcesContent":["import clamp from 'lodash.clamp';\nimport { ColorUtils, getOrThrow } from '@deephaven/utils';\nimport memoizeClear from './memoizeClear';\nimport GridUtils from './GridUtils';\nimport GridColorUtils from './GridColorUtils';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { GridColor, GridColorWay, NullableGridColor } from './GridTheme';\nimport { Coordinate, VisibleIndex } from './GridMetrics';\nimport { isEditableGridModel } from './EditableGridModel';\nimport GridColumnSeparatorMouseHandler from './mouse-handlers/GridColumnSeparatorMouseHandler';\nimport { BoundedAxisRange } from './GridAxisRange';\nimport { DEFAULT_FONT_WIDTH, GridRenderState } from './GridRendererTypes';\nimport CellRenderer, { CellRenderType } from './CellRenderer';\nimport DataBarCellRenderer from './DataBarCellRenderer';\nimport TextCellRenderer from './TextCellRenderer';\n\ntype NoneNullColumnRange = { startColumn: number; endColumn: number };\n\ntype NoneNullRowRange = { startRow: number; endRow: number };\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 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 protected textCellRenderer = new TextCellRenderer();\n\n protected dataBarCellRenderer = new DataBarCellRenderer();\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 * @param truncationChar This char will be repeated as the display string if the string is truncated instead of just adding an ellipsis\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 truncationChar?: string\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\n if (truncationChar !== undefined) {\n const charWidth = context.measureText(truncationChar).width;\n return truncationChar.repeat(Math.max(1, Math.floor(width / charWidth)));\n }\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 * @param truncationChar This char will be repeated as the display string if the string is truncated instead of just adding an ellipsis\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 = DEFAULT_FONT_WIDTH,\n truncationChar?: string\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(\n context,\n str,\n width,\n lo,\n hi,\n truncationChar\n );\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 allRowYs,\n allRowHeights,\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(allRowYs, floatingTopRowCount - 1) +\n getOrThrow(allRowHeights, 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(allRowYs, rowCount - floatingBottomRowCount) + 0.5,\n maxY:\n getOrThrow(allRowYs, rowCount - 1) +\n getOrThrow(allRowHeights, 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 allColumnXs,\n allColumnWidths,\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(allColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(allColumnWidths, 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(allColumnXs, columnCount - floatingRightColumnCount) + 0.5,\n maxX:\n getOrThrow(allColumnXs, columnCount - 1) +\n getOrThrow(allColumnWidths, 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 allRowYs,\n allColumnXs,\n allRowHeights,\n allColumnWidths,\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(allRowYs, floatingTopRowCount - 1) +\n getOrThrow(allRowHeights, floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = getOrThrow(allRowYs, rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n getOrThrow(allColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(allColumnWidths, floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n getOrThrow(allColumnXs, columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\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(allRowYs, floatingTopRowCount - 1) +\n getOrThrow(allRowHeights, floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = getOrThrow(allRowYs, rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n getOrThrow(allColumnXs, floatingLeftColumnCount - 1) +\n getOrThrow(allColumnWidths, floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n getOrThrow(allColumnXs, columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\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 allRowHeights,\n allRowYs,\n allColumnXs,\n allColumnWidths,\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 allColumnXs.has(floatingLeftColumnCount + 1)\n ? getOrThrow(allColumnXs, floatingLeftColumnCount + 1)\n : -10,\n minY:\n floatingTopRowCount > 0 && allRowYs.has(floatingTopRowCount + 1)\n ? getOrThrow(allRowYs, floatingTopRowCount + 1)\n : -10,\n maxX:\n floatingRightColumnCount > 0 &&\n allColumnXs.has(columnCount - floatingRightColumnCount - 1)\n ? getOrThrow(\n allColumnXs,\n columnCount - floatingRightColumnCount - 1\n ) +\n getOrThrow(\n allColumnWidths,\n columnCount - floatingRightColumnCount - 1\n ) -\n 0.5\n : width + 10,\n maxY:\n floatingBottomRowCount > 0 &&\n allRowYs.has(rowCount - floatingBottomRowCount - 1)\n ? getOrThrow(allRowYs, rowCount - floatingBottomRowCount - 1) +\n getOrThrow(allRowHeights, rowCount - floatingBottomRowCount - 1) -\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: readonly 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 { allRowYs, allRowHeights } = 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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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(allRowYs, 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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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 == null) {\n return;\n }\n\n const { allColumnWidths, allColumnXs, maxY } = metrics;\n if (mouseY > maxY) {\n return;\n }\n\n const x = getOrThrow(allColumnXs, mouseColumn);\n const columnWidth = getOrThrow(allColumnWidths, 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 == null) {\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 == null\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 { allRowHeights, allRowYs, maxX } = metrics;\n\n const y = getOrThrow(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, row);\n\n if (theme.rowHoverBackgroundColor != null) {\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 != null) {\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: readonly VisibleIndex[],\n rows: readonly VisibleIndex[],\n columnColor: NullableGridColor,\n rowColor: NullableGridColor\n ): void {\n if (columnColor == null && rowColor == null) {\n return;\n }\n\n context.lineWidth = 1;\n context.beginPath();\n\n if (columnColor != null) {\n context.strokeStyle = columnColor;\n this.drawGridLinesForColumns(context, state, columns);\n }\n if (rowColor != null) {\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: readonly VisibleIndex[]\n ): void {\n const { metrics } = state;\n const { allColumnXs, maxY } = metrics;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const x = getOrThrow(allColumnXs, 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: readonly VisibleIndex[]\n ): void {\n const { metrics } = state;\n const { allRowYs, 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(allRowYs, 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: readonly VisibleIndex[],\n rows: readonly 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 allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\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 != null) {\n const x = getOrThrow(allColumnXs, column) + 1;\n const y = getOrThrow(allRowYs, row) + 1;\n const columnWidth = getOrThrow(allColumnWidths, column) - 1;\n const rowHeight = getOrThrow(allRowHeights, 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 { allColumnXs, allColumnWidths, visibleRows, height } = metrics;\n const x = getOrThrow(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, 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 } = state;\n const { modelColumns, modelRows } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = this.getCellRenderer(renderType);\n cellRenderer.drawCellContent(context, state, column, row);\n }\n\n getCellRenderer(renderType: CellRenderType): CellRenderer {\n switch (renderType) {\n case 'dataBar':\n return this.dataBarCellRenderer;\n default:\n return this.textCellRenderer;\n }\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 { firstColumn, allColumnXs, allRowYs, allRowHeights } = metrics;\n const { treeDepthIndent, treeHorizontalPadding, treeLineColor } = theme;\n const columnX = getOrThrow(allColumnXs, firstColumn);\n const rowY = getOrThrow(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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 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: string, alpha: number) =>\n GridColorUtils.colorWithAlpha(color, alpha),\n { max: 1000 }\n );\n\n getCachedColorIsDark = memoizeClear(\n (color: string) => ColorUtils.isDark(color),\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 model,\n } = state;\n const {\n columnHeaderHeight,\n floatingColumns,\n gridX,\n width,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n floatingLeftColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n modelColumns,\n columnHeaderMaxDepth,\n } = metrics;\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const {\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorHeight = columnHeaderHeight * 0.5;\n const hiddenY =\n columnHeaderHeight * (columnHeaderMaxDepth - 1) +\n columnHeaderHeight * 0.5 -\n hiddenSeparatorHeight * 0.5;\n const containsFrozenColumns = floatingLeftColumnCount > 0;\n\n context.save();\n\n this.drawColumnHeadersForRange(\n context,\n state,\n [visibleColumns[0], visibleColumns[visibleColumns.length - 1]],\n {\n minX: gridX + floatingLeftWidth,\n maxX: width - floatingRightWidth,\n }\n );\n\n if (containsFrozenColumns) {\n this.drawColumnHeadersForRange(\n context,\n state,\n [floatingColumns[0], floatingColumns[floatingColumns.length - 1]],\n {\n minX: gridX,\n maxX: gridX + floatingLeftWidth,\n }\n );\n }\n\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n\n const hiddenColumns = [...allColumnWidths.entries()]\n .filter(([_, w]) => w === 0)\n .map(([index]) => index);\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(allColumnXs, column);\n const columnWidth = getOrThrow(allColumnWidths, 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 { index: highlightedSeparator, depth } =\n draggingColumnSeparator ?? {};\n\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n const separator = GridColumnSeparatorMouseHandler.getColumnSeparator(\n GridUtils.getGridPointFromXY(mouseX, mouseY, metrics),\n metrics,\n model,\n theme\n );\n highlightedSeparator = separator?.index;\n depth = separator?.depth;\n }\n\n let shouldDrawSeparator: boolean;\n\n if (highlightedSeparator == null) {\n shouldDrawSeparator = false;\n } else {\n const columnIndex = modelColumns.get(highlightedSeparator);\n const nextColumnIndex = modelColumns.get(highlightedSeparator + 1);\n if (columnIndex == null || nextColumnIndex == null) {\n shouldDrawSeparator = false;\n } else {\n shouldDrawSeparator =\n model.textForColumnHeader(columnIndex, depth) !==\n model.textForColumnHeader(nextColumnIndex, depth);\n }\n }\n\n if (\n shouldDrawSeparator &&\n highlightedSeparator != null &&\n depth != null &&\n (!isDragging || draggingColumnSeparator != null)\n ) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const columnX = getOrThrow(allColumnXs, highlightedSeparator);\n const columnWidth = getOrThrow(allColumnWidths, 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 ? allColumnWidths.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(\n x,\n (columnHeaderMaxDepth - depth - 1) * columnHeaderHeight\n );\n context.lineTo(\n x,\n (columnHeaderMaxDepth - depth) * columnHeaderHeight - 1\n );\n context.stroke();\n }\n }\n\n context.restore();\n }\n\n drawColumnHeadersForRange(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n range: BoundedAxisRange,\n bounds: { minX: number; maxX: number }\n ): void {\n const { model } = state;\n const { columnHeaderMaxDepth } = model;\n\n if (columnHeaderMaxDepth === 0) {\n return;\n }\n\n for (let d = 0; d <= columnHeaderMaxDepth; d += 1) {\n this.drawColumnHeadersAtDepth(context, state, range, bounds, d);\n }\n }\n\n drawColumnHeadersAtDepth(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n range: BoundedAxisRange,\n bounds: { minX: number; maxX: number },\n depth: number\n ): void {\n const { metrics, model, theme } = state;\n const {\n modelColumns,\n allColumnXs,\n gridX,\n userColumnWidths,\n allColumnWidths,\n movedColumns,\n } = metrics;\n const { columnHeaderHeight, columnWidth } = theme;\n const { columnHeaderMaxDepth } = model;\n const { minX, maxX } = bounds;\n const visibleWidth = maxX - minX;\n\n if (columnHeaderMaxDepth === 0) {\n return;\n }\n\n const startIndex = range[0];\n const endIndex = range[1];\n\n context.save();\n context.translate(\n 0,\n (columnHeaderMaxDepth - depth - 1) * columnHeaderHeight\n );\n\n if (depth === 0) {\n // Make sure base column header background always goes to the right edge\n this.drawColumnHeader(context, state, '', minX, maxX);\n\n // Draw base column headers\n for (let i = startIndex; i <= endIndex; i += 1) {\n this.drawColumnHeaderAtIndex(context, state, i, bounds);\n }\n }\n\n // Draw column header group\n if (depth > 0) {\n let columnIndex = startIndex;\n\n while (columnIndex <= endIndex) {\n const { columnCount } = metrics;\n const modelColumn = getOrThrow(modelColumns, columnIndex);\n const columnGroupName = model.textForColumnHeader(modelColumn, depth);\n const columnGroupColor = model.colorForColumnHeader(modelColumn, depth);\n let columnGroupLeft = getOrThrow(allColumnXs, columnIndex) + gridX;\n let columnGroupRight =\n columnGroupLeft + getOrThrow(allColumnWidths, columnIndex);\n\n if (columnGroupName != null) {\n // Need to determine if the column group is at least the width of the bounds\n // And if the left/right of the group extend past the bounds\n // The group will be drawn as if it were a column with a max width of the bounds width\n let prevColumnIndex = columnIndex - 1;\n while (\n prevColumnIndex >= 0 &&\n (columnGroupRight - columnGroupLeft < visibleWidth ||\n columnGroupLeft > minX)\n ) {\n const prevModelIndex =\n modelColumns.get(prevColumnIndex) ??\n GridUtils.getModelIndex(prevColumnIndex, movedColumns);\n if (\n prevModelIndex == null ||\n model.textForColumnHeader(prevModelIndex, depth) !==\n columnGroupName\n ) {\n // Previous column not in the same group\n break;\n }\n\n const prevColumnWidth =\n userColumnWidths.get(prevModelIndex) ??\n allColumnWidths.get(prevColumnIndex) ??\n columnWidth;\n\n columnGroupLeft -= prevColumnWidth;\n prevColumnIndex -= 1;\n }\n\n let nextColumnIndex = columnIndex + 1;\n while (\n nextColumnIndex < columnCount &&\n (columnGroupRight - columnGroupLeft < visibleWidth ||\n columnGroupRight < maxX)\n ) {\n const nextModelIndex =\n modelColumns.get(nextColumnIndex) ??\n GridUtils.getModelIndex(nextColumnIndex, movedColumns);\n if (\n model.textForColumnHeader(nextModelIndex, depth) !==\n columnGroupName\n ) {\n // Next column not in the same group\n break;\n }\n\n const nextColumnWidth =\n userColumnWidths.get(nextModelIndex) ??\n allColumnWidths.get(nextColumnIndex) ??\n columnWidth;\n\n columnGroupRight += nextColumnWidth;\n nextColumnIndex += 1;\n }\n\n // Set column index to end of the current group\n columnIndex = nextColumnIndex - 1;\n\n const isFullWidth =\n columnGroupRight - columnGroupLeft >= visibleWidth;\n let x = columnGroupLeft;\n if (isFullWidth) {\n if (columnGroupRight < maxX) {\n x = columnGroupRight - visibleWidth;\n } else if (columnGroupLeft < minX) {\n x = minX;\n }\n }\n\n this.drawColumnHeader(\n context,\n state,\n columnGroupName,\n x,\n Math.min(columnGroupRight - columnGroupLeft, visibleWidth),\n {\n backgroundColor: columnGroupColor ?? undefined,\n },\n bounds\n );\n }\n columnIndex += 1;\n }\n }\n context.restore();\n }\n\n /**\n * Draws the column header for the given visible index\n * @param context Canvas context\n * @param state Grid render state\n * @param index Visible index of the column header to draw\n * @param bounds The horizontal bounds the header can be drawn in\n */\n drawColumnHeaderAtIndex(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n index: VisibleIndex,\n bounds: { minX: number; maxX: number }\n ): void {\n const { metrics, model } = state;\n const { modelColumns, allColumnWidths, allColumnXs, gridX } = metrics;\n const width = getOrThrow(allColumnWidths, index);\n const x = getOrThrow(allColumnXs, index) + gridX;\n const modelColumn = getOrThrow(modelColumns, index);\n const text = model.textForColumnHeader(modelColumn);\n\n if (text == null) {\n return;\n }\n\n this.drawColumnHeader(\n context,\n state,\n text,\n x,\n width,\n {\n backgroundColor: model.colorForColumnHeader(modelColumn) ?? undefined,\n },\n bounds\n );\n }\n\n drawColumnHeader(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n columnText: string,\n columnX: Coordinate,\n columnWidth: number,\n style?: {\n backgroundColor?: string;\n textColor?: string;\n separatorColor?: string;\n },\n bounds?: { minX?: number; maxX?: number }\n ): void {\n if (columnWidth <= 0) {\n return;\n }\n const { metrics, theme } = state;\n\n const {\n headerHorizontalPadding,\n columnHeaderHeight,\n headerBackgroundColor,\n headerColor,\n headerSeparatorColor,\n black,\n white,\n } = theme;\n const { fontWidths, width } = metrics;\n const fontWidth = fontWidths.get(context.font) ?? DEFAULT_FONT_WIDTH;\n\n const maxWidth = columnWidth - headerHorizontalPadding * 2;\n const maxLength = maxWidth / fontWidth;\n\n const {\n backgroundColor = headerBackgroundColor,\n separatorColor = headerSeparatorColor,\n } = style ?? {};\n\n let { textColor = headerColor } = style ?? {};\n\n try {\n const isDarkBackground = this.getCachedColorIsDark(backgroundColor);\n const isDarkText = this.getCachedColorIsDark(textColor);\n if (isDarkBackground && isDarkText) {\n textColor = white;\n } else if (!isDarkBackground && !isDarkText) {\n textColor = black;\n }\n } catch {\n // Invalid color provided\n // no-op since we don't use logging in base grid\n }\n\n let { minX = 0, maxX = width } = bounds ?? {};\n\n context.save();\n context.rect(minX, 0, maxX - minX, columnHeaderHeight);\n context.clip();\n\n // Fill background color if specified\n if (backgroundColor != null) {\n context.fillStyle = backgroundColor;\n context.fillRect(columnX, 0, columnWidth, columnHeaderHeight);\n }\n\n if (separatorColor != null) {\n context.strokeStyle = separatorColor;\n context.beginPath();\n\n // Don't draw left separator if column touches the left edge\n if (columnX > 0) {\n context.moveTo(columnX + 0.5, 0);\n context.lineTo(columnX + 0.5, columnHeaderHeight);\n }\n context.moveTo(columnX + columnWidth + 0.5, 0);\n context.lineTo(columnX + columnWidth + 0.5, columnHeaderHeight);\n\n // Bottom Border, should be interior to the header height\n context.moveTo(columnX, columnHeaderHeight - 0.5);\n context.lineTo(columnX + columnWidth, columnHeaderHeight - 0.5);\n context.stroke();\n }\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n context.fillStyle = textColor;\n\n let renderText = columnText;\n\n if (maxLength <= 0) {\n renderText = '';\n } else if (renderText.length > maxLength) {\n renderText = `${renderText.substring(0, maxLength - 1)}…`;\n }\n\n const textWidth = renderText.length * fontWidth;\n let x = columnX + columnWidth * 0.5;\n const y = columnHeaderHeight * 0.5;\n minX += headerHorizontalPadding;\n maxX -= headerHorizontalPadding;\n\n const columnLeft = columnX + headerHorizontalPadding;\n const visibleLeft = clamp(columnLeft, minX, maxX);\n const columnRight = columnX + columnWidth - headerHorizontalPadding;\n const visibleRight = clamp(columnRight, minX, maxX);\n const visibleWidth = visibleRight - visibleLeft;\n\n const isBeyondLeft = x - textWidth * 0.5 < minX;\n const isBeyondRight = x + textWidth * 0.5 > maxX;\n\n if (isBeyondLeft) {\n // Column name would be off the left side of the canvas\n if (textWidth < visibleWidth) {\n // Can render the entire text in the visible space. Stick to left\n x = minX + textWidth * 0.5;\n } else {\n x = columnRight - textWidth * 0.5;\n }\n } else if (isBeyondRight) {\n if (textWidth < visibleWidth) {\n // Can render the entire text in the visible space. Stick to right\n x = maxX - textWidth * 0.5;\n } else {\n x = columnLeft + textWidth * 0.5;\n }\n }\n context.textAlign = 'center';\n context.fillText(renderText, x, y);\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 allRowHeights,\n allRowYs,\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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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 { index: highlightedSeparator = null } = 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(allRowYs, highlightedSeparator);\n const rowHeight = getOrThrow(allRowHeights, 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 ? allRowHeights.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(allRowHeights, row);\n const y = getOrThrow(allRowYs, 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 { mouseX, mouseY, metrics, model, theme, draggingRowSeparator } =\n state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n rowFooterWidth,\n height,\n verticalBarWidth,\n visibleRows,\n allRowHeights,\n allRowYs,\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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, 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 { index: highlightedSeparator = null } = 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(allRowYs, highlightedSeparator);\n const rowHeight = getOrThrow(allRowHeights, 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 ? allRowHeights.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(allRowHeights, row);\n if (rowHeight > 0) {\n const rowY = getOrThrow(allRowYs, 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 allColumnWidths,\n allColumnXs,\n allRowHeights,\n allRowYs,\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 allColumnXs.has(column) &&\n allRowYs.has(row);\n if (isCursorVisible) {\n // Punch a hole out where the active cell is, it gets styled differently.\n const x = getOrThrow(allColumnXs, column);\n const y = getOrThrow(allRowYs, row);\n const w = getOrThrow(allColumnWidths, column);\n const h = getOrThrow(allRowHeights, 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 && allColumnXs.has(startColumn)\n ? Math.round(getOrThrow(allColumnXs, startColumn)) + 0.5\n : minX;\n const y =\n startRow >= top && allRowYs.has(startRow)\n ? Math.max(Math.round(getOrThrow(allRowYs, startRow)) + 0.5, 0.5)\n : minY;\n\n const endX =\n endColumn <= right && allColumnXs.has(endColumn)\n ? Math.round(\n getOrThrow(allColumnXs, endColumn) +\n getOrThrow(allColumnWidths, endColumn)\n ) - 0.5\n : maxX;\n const endY =\n endRow <= bottom && allRowYs.has(endRow)\n ? Math.round(\n getOrThrow(allRowYs, endRow) + getOrThrow(allRowHeights, endRow)\n ) - 0.5\n : maxY;\n\n context.rect(x, y, endX - x, endY - y);\n }\n }\n\n /**\n * Create the path, then draw it once. Fill and\n * stroke must be outside the beginPath loop otherwise\n * the fill/stroke will be drawn multiple times.\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 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 { allColumnWidths, allColumnXs, allRowHeights, allRowYs } = metrics;\n const cellX = getOrThrow(allColumnXs, column);\n const cellY = getOrThrow(allRowYs, row);\n const cellW = getOrThrow(allColumnWidths, column);\n const cellH = getOrThrow(allRowHeights, 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 { draggingColumn, metrics, mouseX, theme, model } = state;\n if (draggingColumn == null || mouseX == null) {\n return;\n }\n\n const { range: draggingColumnVisibleRange, depth: draggingColumnDepth } =\n draggingColumn;\n\n const {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n height,\n width,\n columnHeaderMaxDepth,\n columnHeaderHeight,\n movedColumns,\n modelColumns,\n floatingLeftWidth,\n } = metrics;\n\n const draggingModelIndex =\n modelColumns.get(draggingColumnVisibleRange[0]) ??\n GridUtils.getModelIndex(draggingColumnVisibleRange[0], movedColumns);\n\n const draggingGroup = model.getColumnHeaderGroup(\n draggingModelIndex,\n draggingColumnDepth\n );\n\n if (draggingColumnDepth > 0 && !draggingGroup) {\n return;\n }\n\n const [startIndex, endIndex] = draggingColumnVisibleRange;\n\n const originalLeft = getOrThrow(allColumnXs, startIndex);\n const originalRight =\n getOrThrow(allColumnXs, endIndex) + getOrThrow(allColumnWidths, endIndex);\n const originalWidth = originalRight - originalLeft;\n\n const draggingLeft = draggingColumn.left;\n\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n const columnHeaderOffset =\n (columnHeaderMaxDepth - draggingColumnDepth - 1) * columnHeaderHeight;\n\n context.save();\n\n context.translate(gridX, 0);\n\n context.save();\n context.beginPath();\n\n // Don't draw over frozen columns\n context.rect(floatingLeftWidth, 0, width, height);\n context.clip();\n\n // First, we need to draw over where the column is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(originalLeft, columnHeaderOffset, originalWidth, height);\n context.restore();\n\n // Then draw the shadow of the moving column\n context.translate(0, reorderOffset);\n\n context.save();\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(\n draggingColumn.left,\n columnHeaderOffset + reorderOffset,\n draggingColumn.width,\n height\n );\n context.restore(); // Reset style\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(\n draggingColumn.left,\n columnHeaderOffset,\n draggingColumn.width + 1,\n height\n );\n context.clip();\n\n context.translate(draggingLeft - originalLeft, 0);\n context.font = headerFont;\n\n const visibleColumns: VisibleIndex[] = [];\n for (\n let i = draggingColumn.range[0];\n i <= draggingColumn.range[1];\n i += 1\n ) {\n visibleColumns.push(i);\n }\n\n /**\n * This will not draw the header text properly, but extensions of Grid\n * may draw extra things in the header like sorts and filters\n */\n this.drawColumnHeaders(context, state);\n\n // Ensure the column header gets drawn\n this.drawColumnHeadersForRange(\n context,\n state,\n [visibleColumns[0], visibleColumns[visibleColumns.length - 1]],\n {\n minX: originalLeft,\n maxX: width,\n }\n );\n\n context.translate(0, gridY);\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n for (let i = startIndex; i <= endIndex; i += 1) {\n this.drawColumnCellContents(context, state, i);\n }\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, allRowYs, allRowHeights, width } = metrics;\n const y = getOrThrow(allRowYs, draggingRow);\n const rowHeight = getOrThrow(allRowHeights, 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 width,\n height,\n handleHeight,\n handleWidth,\n scrollX,\n scrollY,\n hasHorizontalBar,\n hasVerticalBar,\n barWidth,\n barHeight,\n barLeft,\n barTop,\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 scrollBarSelectionTick,\n scrollBarSelectionTickColor,\n scrollBarActiveSelectionTickColor,\n autoSelectRow,\n autoSelectColumn,\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 >= barTop &&\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 >= barLeft &&\n isInbounds);\n\n const hScrollBarSize = isHorizontalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n const vScrollBarSize = isVerticalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n\n context.translate(barLeft, barTop);\n\n if (hasHorizontalBar && hasVerticalBar) {\n // That little corner in the bottom right\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(\n width - barLeft - scrollBarSize,\n height - barTop - scrollBarSize,\n scrollBarSize,\n scrollBarSize\n );\n context.fillStyle = scrollBarCornerColor;\n context.fillRect(\n width - barLeft - scrollBarSize + scrollBarCasingWidth,\n height - barTop - scrollBarSize + scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasHorizontalBar) {\n const x = scrollX;\n const y = height - barTop - 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 if (\n !autoSelectRow &&\n scrollBarSelectionTick &&\n scrollBarSelectionTickColor != null &&\n scrollBarActiveSelectionTickColor != null\n ) {\n context.fillStyle = scrollBarSelectionTickColor;\n // Scrollbar Selection Tick\n const { selectedRanges, cursorColumn } = state;\n const { lastLeft, columnCount } = metrics;\n\n const filteredRanges = [...selectedRanges].filter(\n value => value.startColumn != null && value.endColumn != null\n ) as NoneNullColumnRange[];\n\n const sortedRanges = filteredRanges\n .map(\n (value): BoundedAxisRange => [value.startColumn, value.endColumn]\n )\n .sort(GridUtils.compareRanges);\n\n const mergedRanges = GridUtils.mergeSortedRanges(sortedRanges);\n\n const getTickX = (index: number): number => {\n if (index <= lastLeft) {\n return (index / lastLeft) * (barWidth - handleWidth);\n }\n return (\n barWidth -\n handleWidth +\n ((index - lastLeft) / (columnCount - lastLeft)) * handleWidth\n );\n };\n for (let i = 0; i < mergedRanges.length; i += 1) {\n const range = mergedRanges[i];\n const startColumn = range[0];\n const endColumn = range[1];\n\n if (\n startColumn != null &&\n endColumn != null &&\n (startColumn !== cursorColumn || endColumn !== cursorColumn)\n ) {\n const tickX = getTickX(startColumn);\n const tickWidth = Math.max(\n 1,\n Math.round(getTickX(endColumn + 1) - tickX)\n );\n const trackHeight = hScrollBarSize - scrollBarCasingWidth;\n context.fillRect(\n tickX,\n y + scrollBarCasingWidth + Math.round(trackHeight / 3),\n tickWidth,\n Math.round(trackHeight / 3)\n );\n }\n }\n\n // Current Active Tick\n if (cursorColumn != null) {\n const tickX = getTickX(cursorColumn);\n const tickWidth = 2;\n const trackHeight = hScrollBarSize - scrollBarCasingWidth;\n context.fillStyle = scrollBarActiveSelectionTickColor;\n context.fillRect(\n tickX,\n y + scrollBarCasingWidth,\n tickWidth,\n trackHeight\n );\n }\n }\n }\n\n if (hasVerticalBar) {\n const x = width - barLeft - 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 if (\n !autoSelectColumn &&\n scrollBarSelectionTick &&\n scrollBarSelectionTickColor != null &&\n scrollBarActiveSelectionTickColor != null\n ) {\n // Scrollbar Selection Tick\n const { selectedRanges, cursorRow } = state;\n const { lastTop, rowCount } = metrics;\n\n const getTickY = (index: number): number => {\n if (index <= lastTop) {\n return (index / lastTop) * (barHeight - handleHeight);\n }\n return (\n barHeight -\n handleHeight +\n ((index - lastTop) / (rowCount - lastTop)) * handleHeight\n );\n };\n\n context.fillStyle = scrollBarSelectionTickColor;\n\n const filteredRanges = [...selectedRanges].filter(\n value => value.startRow != null && value.endRow != null\n ) as NoneNullRowRange[];\n\n const sortedRanges = filteredRanges\n .map((value): BoundedAxisRange => [value.startRow, value.endRow])\n .sort(GridUtils.compareRanges);\n\n const mergedRanges = GridUtils.mergeSortedRanges(sortedRanges);\n\n for (let i = 0; i < mergedRanges.length; i += 1) {\n const range = mergedRanges[i];\n const startRow = range[0];\n const endRow = range[1];\n if (\n startRow != null &&\n endRow != null &&\n (startRow !== cursorRow || endRow !== cursorRow)\n ) {\n const tickY = getTickY(startRow);\n const trackWidth = vScrollBarSize - scrollBarCasingWidth;\n const tickHeight = Math.max(\n 1,\n Math.round(getTickY(endRow + 1) - tickY)\n );\n context.fillRect(\n x + scrollBarCasingWidth + Math.round(trackWidth / 3),\n tickY,\n Math.round(trackWidth / 3),\n tickHeight\n );\n }\n }\n\n // Current Active Tick\n if (cursorRow != null) {\n const tickY = Math.round(getTickY(cursorRow));\n\n const trackWidth = vScrollBarSize - scrollBarCasingWidth;\n const tickHeight = 2;\n\n context.fillStyle = scrollBarActiveSelectionTickColor;\n context.fillRect(\n x + scrollBarCasingWidth,\n tickY,\n trackWidth,\n tickHeight\n );\n }\n }\n }\n\n context.translate(-barLeft, -barTop);\n }\n}\n\nexport default GridRenderer;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/grid",
|
|
3
|
-
"version": "0.53.
|
|
3
|
+
"version": "0.53.1-beta.2+80f29f57",
|
|
4
4
|
"description": "Deephaven React grid component",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"*.css"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@deephaven/utils": "^0.53.
|
|
34
|
+
"@deephaven/utils": "^0.53.1-beta.2+80f29f57",
|
|
35
35
|
"classnames": "^2.3.1",
|
|
36
36
|
"color-convert": "^2.0.1",
|
|
37
37
|
"event-target-shim": "^6.0.2",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "80f29f57ffae49c5161d4a2431b46fe5af2384af"
|
|
48
48
|
}
|