@deephaven/grid 0.4.1-modules.0 → 0.5.2-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/CellInputField.js +88 -40
  2. package/dist/CellInputField.js.map +1 -1
  3. package/dist/Grid.js +1484 -1449
  4. package/dist/Grid.js.map +1 -1
  5. package/dist/GridColorUtils.js +51 -18
  6. package/dist/GridColorUtils.js.map +1 -1
  7. package/dist/GridMetricCalculator.js +994 -1017
  8. package/dist/GridMetricCalculator.js.map +1 -1
  9. package/dist/GridModel.js +286 -171
  10. package/dist/GridModel.js.map +1 -1
  11. package/dist/GridMouseHandler.js +59 -39
  12. package/dist/GridMouseHandler.js.map +1 -1
  13. package/dist/GridRange.js +630 -572
  14. package/dist/GridRange.js.map +1 -1
  15. package/dist/GridRenderer.d.ts.map +1 -1
  16. package/dist/GridRenderer.js +1564 -1650
  17. package/dist/GridRenderer.js.map +1 -1
  18. package/dist/GridTestUtils.js +29 -15
  19. package/dist/GridTestUtils.js.map +1 -1
  20. package/dist/GridUtils.js +717 -679
  21. package/dist/GridUtils.js.map +1 -1
  22. package/dist/KeyHandler.js +18 -6
  23. package/dist/KeyHandler.js.map +1 -1
  24. package/dist/MockGridModel.js +210 -105
  25. package/dist/MockGridModel.js.map +1 -1
  26. package/dist/MockTreeGridModel.js +183 -113
  27. package/dist/MockTreeGridModel.js.map +1 -1
  28. package/dist/errors/PasteError.js +44 -5
  29. package/dist/errors/PasteError.js.map +1 -1
  30. package/dist/errors/index.js +1 -1
  31. package/dist/errors/index.js.map +1 -1
  32. package/dist/index.js +15 -15
  33. package/dist/index.js.map +1 -1
  34. package/dist/key-handlers/EditKeyHandler.js +75 -42
  35. package/dist/key-handlers/EditKeyHandler.js.map +1 -1
  36. package/dist/key-handlers/PasteKeyHandler.js +78 -42
  37. package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
  38. package/dist/key-handlers/SelectionKeyHandler.js +234 -220
  39. package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
  40. package/dist/key-handlers/TreeKeyHandler.js +72 -42
  41. package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
  42. package/dist/key-handlers/index.js +4 -4
  43. package/dist/key-handlers/index.js.map +1 -1
  44. package/dist/memoizeClear.js +1 -1
  45. package/dist/memoizeClear.js.map +1 -1
  46. package/dist/mouse-handlers/EditMouseHandler.js +50 -18
  47. package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
  48. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +163 -141
  49. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
  50. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +86 -47
  51. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
  52. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts.map +1 -1
  53. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +171 -143
  54. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
  55. package/dist/mouse-handlers/GridRowMoveMouseHandler.js +147 -125
  56. package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
  57. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +86 -47
  58. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
  59. package/dist/mouse-handlers/GridRowTreeMouseHandler.js +76 -46
  60. package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
  61. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts.map +1 -1
  62. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +62 -31
  63. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
  64. package/dist/mouse-handlers/GridSelectionMouseHandler.js +222 -200
  65. package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
  66. package/dist/mouse-handlers/GridSeparatorMouseHandler.js +253 -206
  67. package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
  68. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts.map +1 -1
  69. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +172 -144
  70. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
  71. package/dist/mouse-handlers/index.js +10 -10
  72. package/dist/mouse-handlers/index.js.map +1 -1
  73. package/dist/tsconfig.tsbuildinfo +1 -1
  74. package/package.json +4 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GridRenderer.js"],"names":["memoizeClear","GridUtils","GridColorUtils","GridRenderer","context","text","width","fontWidth","truncateToWidth","max","backgroundColors","maxDepth","split","map","color","colors","i","push","darkenForDepth","alpha","colorWithAlpha","truncate","str","len","length","substr","binaryTruncateToWidth","start","end","measureText","lo","hi","Math","min","result","mid","ceil","truncatedStr","DEFAULT_FONT_WIDTH","floor","drawCanvas","state","save","configureContext","drawBackground","drawGrid","drawHeaders","drawFooters","drawDraggingColumn","drawDraggingRow","drawScrollBars","restore","theme","font","textBaseline","lineCap","metrics","height","fillStyle","backgroundColor","fillRect","draggingRow","draggingColumn","gridX","gridY","translate","drawGridBackground","drawCellContents","drawFloatingRows","drawFloatingColumns","floatingTopRowCount","floatingBottomRowCount","floatingRows","rowCount","visibleColumns","visibleRowYs","visibleRowHeights","floatingRowBackgroundColors","drawRowStripesForRows","drawFloatingMouseRowHover","drawGridLinesForItems","floatingGridColumnColor","floatingGridRowColor","drawCellBackgroundsForItems","drawFloatingBorders","drawSelectedRanges","top","bottom","maxY","get","minY","c","column","r","row","drawCellContent","floatingLeftColumnCount","floatingRightColumnCount","floatingLeftWidth","floatingRightWidth","floatingColumns","maxX","columnCount","visibleRows","visibleColumnXs","visibleColumnWidths","left","right","minX","floatingDividerOuterColor","floatingDividerInnerColor","lineWidth","beginPath","strokeStyle","y","moveTo","lineTo","x","stroke","drawHover","drawRowStripes","drawMouseColumnHover","drawMouseRowHover","drawGridLines","drawCellBackgrounds","floatingTopColumnCount","has","rowBackgroundColors","rows","model","shadowBlur","shadowColor","colorSets","getCachedBackgroundColors","colorRowMap","Map","topShadowRows","bottomShadowRows","addRowToColorMap","rowAbove","depth","depthForRow","colorSet","set","depthAbove","forEach","colorRows","rowHeight","rect","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","j","rowAfter","drawCellBackground","hasExpandableRows","firstColumn","modelColumns","modelRows","modelRow","modelColumn","backgroundColorForCell","isFirstColumn","drawCellRowTreeDepthLines","drawColumnCellContents","clip","fontWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","textColor","textForCell","textAlign","textAlignForCell","colorForCell","treeIndent","textWidth","textX","textY","truncatedText","getCachedTruncatedString","fillText","drawCellRowTreeMarker","visibleRowTreeBoxes","treeMarkerColor","treeMarkerHoverColor","columnX","rowY","isExpandable","isRowExpandable","isExpanded","isRowExpanded","treeBox","drawTreeMarker","x1","y1","x2","y2","markerText","treeLineColor","depthRowAfter","depthDiff","lineX","headerFont","drawColumnHeaders","drawRowHeaders","drawRowFooters","draggingColumnSeparator","isDragging","columnHeaderHeight","headerBackgroundColor","headerColor","headerHiddenSeparatorSize","headerHiddenSeparatorHoverColor","headerSeparatorColor","headerSeparatorHoverColor","hiddenSeparatorHeight","hiddenY","hiddenColumns","isPreviousColumnHidden","highlightedSeparator","getColumnSeparatorIndex","visibleColumnIndex","indexOf","nextColumn","nextColumnWidth","isColumnHidden","isNextColumnHidden","drawColumnHeader","textForColumnHeader","headerHorizontalPadding","maxLength","substring","draggingRowSeparator","rowHeaderWidth","hiddenSeparatorWidth","hiddenX","hiddenRows","isPreviousRowHidden","getRowSeparatorIndex","visibleRowIndex","nextRow","nextRowHeight","isRowHidden","isNextRowHidden","drawRowHeader","textForRowHeader","verticalBarWidth","textForRowFooter","viewport","cursorColumn","cursorRow","editingCell","isCursorVisible","isEditable","w","h","selectedRange","startColumn","endColumn","round","endX","endY","selectionColor","selectionOutlineCasingColor","selectionOutlineColor","drawActiveCell","borderWidth","ACTIVE_CELL_BORDER_WIDTH","cellX","cellY","cellW","cellH","drawRoundedRect","DEFAULT_EDGE_RADIUS","quadraticCurveTo","closePath","draggingColumnOffset","reorderOffset","draggingRowOffset","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","scrollBarSize","handleHeight","handleWidth","scrollX","scrollY","hasHorizontalBar","hasVerticalBar","barWidth","barHeight","scrollBarBackgroundColor","scrollBarHoverBackgroundColor","scrollBarCasingColor","scrollBarCornerColor","scrollBarColor","scrollBarHoverColor","scrollBarActiveColor","scrollBarHoverSize","scrollBarCasingWidth","isInbounds","isVerticalBarHover","isHorizontalBarHover","hScrollBarSize","vScrollBarSize"],"mappings":"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","sourcesContent":["import memoizeClear from './memoizeClear';\nimport GridUtils from './GridUtils';\nimport GridColorUtils from './GridColorUtils';\n\n/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\n/**\n * A GridRenderer handles rendering the different parts of the grid\n * This default rendering just renders a basic grid. Extend this class and implement\n * your own methods to customize drawing of the grid (eg. Draw icons or special features)\n */\nclass GridRenderer {\n static DEFAULT_FONT_WIDTH = 10;\n\n static DEFAULT_EDGE_RADIUS = 2;\n\n static ACTIVE_CELL_BORDER_WIDTH = 2;\n\n /**\n * Truncate a string and add ellipses if necessary\n * @param {string} str The string to truncate\n * @param {number} len The length to truncate the string to. If longer than the actual string, just returns the string\n */\n static truncate(str, len) {\n if (len < str.length) {\n // eslint-disable-next-line prefer-template\n return str.substr(0, len) + '…';\n }\n return str;\n }\n\n /**\n * Uses binary search to truncate a string to fit in the provided width\n * @param {Context} context The drawing context to measure the text in\n * @param {string} str The string to get the maximum length it can draw\n * @param {number} width The width to truncate it to\n * @param {number} start The low boundary to start the search\n * @param {number} end The high boundary to start the search\n */\n static binaryTruncateToWidth(\n context,\n str,\n width,\n start = 0,\n end = str.length\n ) {\n if (end >= str.length && context.measureText(str).width <= width) {\n // IDS-6069 If the whole string can fit, don't bother checking for truncation\n // The ellipses are actually slightly wider than other chars, and it's possible\n // that the \"truncation\" ends up being slightly longer, which messes up the search\n // algorithm below.\n // Besides, if we already fit, it's just faster to not bother checking other truncations.\n return str;\n }\n let lo = start;\n let hi = Math.min(str.length - 1, end);\n let result = str;\n while (hi > lo) {\n const mid = Math.ceil((hi + lo) / 2);\n const truncatedStr = GridRenderer.truncate(str, mid);\n if (context.measureText(truncatedStr).width <= width) {\n result = truncatedStr;\n if (lo === mid) {\n break;\n }\n lo = mid;\n } else {\n hi = mid - 1;\n }\n }\n\n return result;\n }\n\n /**\n * Truncate a string (if necessary) to fit in the specified width.\n * First uses the estimated font width to calculate a lower/upper bound\n * Then uses binary search within those bounds to find the exact max length\n * @param {Context} context The drawing context\n * @param {string} str The string to calculate max length for\n * @param {number} width The width to truncate within\n * @param {number} fontWidth The estimated width of each character\n */\n static truncateToWidth(\n context,\n str,\n width,\n fontWidth = GridRenderer.DEFAULT_FONT_WIDTH\n ) {\n if (width <= 0 || str.length <= 0) {\n return null;\n }\n\n const lo = Math.min(Math.floor(width / fontWidth / 2), str.length);\n const hi = Math.min(Math.ceil((width / fontWidth) * 2), str.length);\n\n return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} context The context to draw the grid in\n * @param {GridState} state State of the grid, { left, top, mouseX, mouseY, selectedRanges, theme, model, metrics }\n */\n drawCanvas(state) {\n const { context } = state;\n\n context.save();\n\n this.configureContext(context, state);\n\n this.drawBackground(context, state);\n\n this.drawGrid(context, state);\n\n this.drawHeaders(context, state);\n\n this.drawFooters(context, state);\n\n this.drawDraggingColumn(context, state);\n\n this.drawDraggingRow(context, state);\n\n this.drawScrollBars(context, state);\n\n context.restore();\n }\n\n configureContext(context, state) {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n drawBackground(context, state) {\n const { theme, metrics } = state;\n const { width, height } = metrics;\n context.fillStyle = theme.backgroundColor;\n context.fillRect(0, 0, width, height);\n }\n\n drawGrid(context, state) {\n const { metrics, draggingRow, draggingColumn } = state;\n const { gridX, gridY } = metrics;\n\n context.translate(gridX, gridY);\n\n this.drawGridBackground(\n context,\n state,\n draggingRow == null && draggingColumn == null\n );\n\n this.drawCellContents(context, state);\n\n this.drawFloatingRows(context, state);\n\n this.drawFloatingColumns(context, state);\n\n context.translate(-gridX, -gridY);\n }\n\n drawFloatingRows(context, state) {\n const { metrics, theme } = state;\n const {\n draggingRow,\n draggingColumn,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingRows,\n rowCount,\n visibleColumns,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n\n if (floatingRows.length === 0) {\n return;\n }\n\n if (theme.floatingRowBackgroundColors) {\n this.drawRowStripesForRows(\n context,\n state,\n floatingRows,\n theme.floatingRowBackgroundColors\n );\n }\n\n if (draggingRow == null && draggingColumn == null) {\n this.drawFloatingMouseRowHover(context, state);\n }\n\n this.drawGridLinesForItems(\n context,\n state,\n visibleColumns,\n floatingRows,\n theme.floatingGridColumnColor,\n theme.floatingGridRowColor\n );\n\n this.drawCellBackgroundsForItems(\n context,\n state,\n visibleColumns,\n floatingRows\n );\n\n this.drawFloatingBorders(context, state);\n\n // Draw the floating row selection...\n if (floatingTopRowCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n top: 0,\n bottom: floatingTopRowCount - 1,\n maxY:\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) -\n 0.5,\n },\n true\n );\n }\n if (floatingBottomRowCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n top: rowCount - floatingBottomRowCount - 1,\n bottom: rowCount - 1,\n minY: visibleRowYs.get(rowCount - floatingBottomRowCount) + 0.5,\n maxY:\n visibleRowYs.get(rowCount - 1) +\n visibleRowHeights.get(rowCount - 1) -\n 0.5,\n },\n true\n );\n }\n\n // Draw the cell content...\n for (let c = 0; c < visibleColumns.length; c += 1) {\n const column = visibleColumns[c];\n for (let r = 0; r < floatingRows.length; r += 1) {\n const row = floatingRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n\n drawFloatingColumns(context, state) {\n const { metrics, theme } = state;\n const {\n draggingRow,\n draggingColumn,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingColumns,\n gridX,\n maxX,\n columnCount,\n visibleRows,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = 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 this.drawGridLinesForItems(\n context,\n state,\n floatingColumns,\n visibleRows,\n theme.floatingGridColumnColor,\n theme.floatingGridRowColor\n );\n\n this.drawCellBackgroundsForItems(\n context,\n state,\n floatingColumns,\n visibleRows\n );\n\n this.drawFloatingBorders(context, state);\n\n // Draw the floating column selection...\n if (floatingLeftColumnCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n left: 0,\n right: floatingLeftColumnCount,\n maxX:\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1),\n },\n true\n );\n }\n if (floatingRightColumnCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n left: columnCount - floatingRightColumnCount,\n right: columnCount - 1,\n minX:\n visibleColumnXs.get(columnCount - floatingRightColumnCount) + 0.5,\n maxX:\n visibleColumnXs.get(columnCount - 1) +\n visibleColumnWidths.get(columnCount - 1),\n },\n true\n );\n }\n\n // Draw the cell content...\n for (let c = 0; c < floatingColumns.length; c += 1) {\n const column = floatingColumns[c];\n for (let r = 0; r < visibleRows.length; r += 1) {\n const row = visibleRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n\n drawFloatingBorders(context, state) {\n const { metrics, theme } = state;\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n rowCount,\n columnCount,\n visibleRowYs,\n visibleColumnXs,\n visibleRowHeights,\n visibleColumnWidths,\n maxX,\n maxY,\n } = metrics;\n const { floatingDividerOuterColor, floatingDividerInnerColor } = theme;\n\n context.lineWidth = 3;\n context.beginPath();\n context.strokeStyle = floatingDividerOuterColor;\n\n if (floatingTopRowCount > 0) {\n const y =\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = visibleRowYs.get(rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n visibleColumnXs.get(columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n context.stroke();\n\n context.beginPath();\n context.lineWidth = 1;\n context.strokeStyle = floatingDividerInnerColor;\n\n if (floatingTopRowCount > 0) {\n const y =\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = visibleRowYs.get(rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n visibleColumnXs.get(columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n context.stroke();\n }\n\n drawGridBackground(context, state, drawHover = false) {\n this.drawRowStripes(context, state);\n\n if (drawHover) {\n this.drawMouseColumnHover(context, state);\n\n this.drawMouseRowHover(context, state);\n }\n\n this.drawGridLines(context, state);\n\n this.drawCellBackgrounds(context, state);\n\n const { metrics } = state;\n const {\n bottom,\n right,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingTopColumnCount,\n columnCount,\n rowCount,\n visibleRowHeights,\n visibleRowYs,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n height,\n } = metrics;\n this.drawSelectedRanges(context, state, {\n bottom: Math.min(bottom, rowCount - floatingBottomRowCount - 1),\n right: Math.min(right, columnCount - floatingRightColumnCount - 1),\n minX:\n floatingLeftColumnCount > 0 &&\n visibleColumnXs.has(floatingLeftColumnCount + 1)\n ? visibleColumnXs.get(floatingLeftColumnCount + 1)\n : -10,\n minY:\n floatingTopColumnCount > 0 &&\n visibleRowYs.has(floatingTopColumnCount + 1)\n ? visibleRowYs.get(floatingTopColumnCount + 1)\n : -10,\n maxX:\n floatingRightColumnCount > 0 &&\n visibleColumnXs.has(columnCount - floatingRightColumnCount - 1)\n ? visibleColumnXs.get(columnCount - floatingRightColumnCount - 1) +\n visibleColumnWidths.get(\n columnCount - floatingRightColumnCount - 1\n ) -\n 0.5\n : width + 10,\n maxY:\n floatingBottomRowCount > 0 &&\n visibleRowYs.has(rowCount - floatingBottomRowCount - 1)\n ? visibleRowYs.get(rowCount - floatingBottomRowCount - 1) +\n visibleRowHeights.get(rowCount - floatingBottomRowCount - 1) -\n 0.5\n : height + 10,\n });\n }\n\n drawRowStripes(context, state) {\n const { metrics, theme } = state;\n const { visibleRows } = metrics;\n const { rowBackgroundColors } = theme;\n if (!rowBackgroundColors) {\n return;\n }\n this.drawRowStripesForRows(\n context,\n state,\n visibleRows,\n rowBackgroundColors\n );\n }\n\n drawRowStripesForRows(\n context,\n state,\n rows,\n rowBackgroundColors,\n minX = 0,\n maxX = state.metrics.maxX\n ) {\n const { theme, metrics, model } = state;\n const { maxDepth, shadowBlur, shadowColor } = theme;\n\n const colorSets = this.getCachedBackgroundColors(\n rowBackgroundColors,\n maxDepth\n );\n const { visibleRowYs, visibleRowHeights } = metrics;\n\n // Optimize by grouping together all rows that end up with the same color\n const colorRowMap = new Map();\n const topShadowRows = []; // Rows that are deeper than the row above them\n const bottomShadowRows = [];\n const addRowToColorMap = (row, rowAbove) => {\n const depth = model.depthForRow(row);\n const colorSet = colorSets[row % colorSets.length];\n const color = colorSet[Math.min(depth, colorSet.length - 1)];\n if (!colorRowMap.has(color)) {\n colorRowMap.set(color, []);\n }\n colorRowMap.get(color).push(row);\n if (rowAbove != null) {\n const depthAbove = model.depthForRow(rowAbove);\n if (depthAbove < depth) {\n topShadowRows.push(row);\n } else if (depthAbove > depth) {\n bottomShadowRows.push(rowAbove);\n }\n }\n };\n\n // Add all the regular row stripes\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const rowAbove = i > 0 ? rows[i - 1] : null;\n addRowToColorMap(row, rowAbove);\n }\n\n colorRowMap.forEach((colorRows, color) => {\n context.fillStyle = color;\n\n context.beginPath();\n\n for (let i = 0; i < colorRows.length; i += 1) {\n const row = colorRows[i];\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n context.rect(minX, y, maxX, rowHeight);\n }\n\n context.fill();\n });\n\n if (topShadowRows.length > 0) {\n context.save();\n\n const startColor = this.getCachedColorWithAlpha(shadowColor, 0.15);\n const endColor = this.getCachedColorWithAlpha(shadowColor, 0);\n const gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n\n for (let i = 0; i < topShadowRows.length; i += 1) {\n const row = topShadowRows[i];\n const y = visibleRowYs.get(row);\n // Use a translate so we can reuse the gradient\n context.translate(0, y);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -y);\n }\n\n context.restore();\n }\n\n if (bottomShadowRows.length > 0) {\n context.save();\n\n const startColor = this.getCachedColorWithAlpha(shadowColor, 0);\n const endColor = this.getCachedColorWithAlpha(shadowColor, 0.15);\n const gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n\n for (let i = 0; i < bottomShadowRows.length; i += 1) {\n const row = bottomShadowRows[i];\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const gradientY = y + rowHeight - shadowBlur;\n // Use a translate so we can reuse the gradient\n context.translate(0, gradientY);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -gradientY);\n }\n\n context.restore();\n }\n }\n\n drawMouseColumnHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const mouseColumn = GridUtils.getColumnAtX(mouseX, metrics);\n if (mouseColumn == null || !theme.columnHoverBackgroundColor) {\n return;\n }\n\n const { visibleColumnWidths, visibleColumnXs, maxY } = metrics;\n if (mouseY > maxY) {\n return;\n }\n\n const x = visibleColumnXs.get(mouseColumn);\n const columnWidth = visibleColumnWidths.get(mouseColumn);\n\n context.fillStyle = theme.columnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const { maxX } = metrics;\n if (mouseX > maxX || !theme.rowHoverBackgroundColor) {\n return;\n }\n\n const mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (mouseRow == null) {\n return;\n }\n\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n\n drawFloatingMouseRowHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const {\n maxX,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n rowFooterWidth,\n } = metrics;\n if (mouseX > maxX + rowFooterWidth || !theme.rowHoverBackgroundColor) {\n return;\n }\n\n const mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (\n mouseRow != null &&\n (mouseRow < floatingTopRowCount ||\n rowCount - floatingBottomRowCount <= mouseRow)\n ) {\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n }\n\n drawMouseRowHoverForRow(context, state, row) {\n const { metrics, selectedRanges, theme } = state;\n const { visibleRowHeights, visibleRowYs, maxX } = metrics;\n\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n\n context.fillStyle = theme.rowHoverBackgroundColor;\n for (let i = 0; i < selectedRanges.length; i += 1) {\n if (\n selectedRanges[i].startRow <= row &&\n selectedRanges[i].endRow >= row\n ) {\n context.fillStyle = theme.selectedRowHoverBackgroundColor;\n break;\n }\n }\n context.fillRect(0, y, maxX, rowHeight);\n }\n\n drawGridLines(context, state) {\n const { metrics, theme } = state;\n const { visibleColumns, visibleRows } = metrics;\n\n this.drawGridLinesForItems(\n context,\n state,\n visibleColumns,\n visibleRows,\n theme.gridColumnColor,\n theme.gridRowColor\n );\n }\n\n drawGridLinesForItems(context, state, columns, rows, columnColor, rowColor) {\n if (!columnColor && !rowColor) {\n return;\n }\n\n context.lineWidth = 1;\n context.beginPath();\n\n if (columnColor) {\n context.strokeStyle = columnColor;\n this.drawGridLinesForColumns(context, state, columns);\n }\n if (rowColor) {\n context.strokeStyle = rowColor;\n this.drawGridLinesForRows(context, state, rows);\n }\n\n context.stroke();\n }\n\n drawGridLinesForColumns(context, state, columns) {\n const { metrics } = state;\n const { visibleColumnXs, maxY } = metrics;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const x = visibleColumnXs.get(column) + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n }\n\n drawGridLinesForRows(context, state, rows) {\n const { metrics } = state;\n const { visibleRowYs, maxX } = metrics;\n\n // Draw row lines\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const y = visibleRowYs.get(row) + 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n }\n\n drawCellBackgrounds(context, state) {\n const { metrics } = state;\n const { visibleColumns, visibleRows } = metrics;\n this.drawCellBackgroundsForItems(\n context,\n state,\n visibleColumns,\n visibleRows\n );\n }\n\n drawCellBackgroundsForItems(context, state, columns, rows) {\n context.save();\n\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n\n for (let j = 0; j < rows.length; j += 1) {\n const row = rows[j];\n const rowAfter = j + 1 < rows.length ? rows[j + 1] : null;\n this.drawCellBackground(context, state, column, row, rowAfter);\n }\n }\n\n context.restore();\n }\n\n drawCellBackground(context, state, column, row, rowAfter) {\n const {\n metrics,\n model,\n model: { hasExpandableRows },\n theme,\n } = state;\n const {\n firstColumn,\n modelColumns,\n modelRows,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const modelRow = modelRows.get(row);\n const modelColumn = modelColumns.get(column);\n const backgroundColor = model.backgroundColorForCell(\n modelColumn,\n modelRow,\n theme\n );\n const isFirstColumn = column === firstColumn;\n\n if (backgroundColor) {\n const x = visibleColumnXs.get(column) + 1;\n const y = visibleRowYs.get(row) + 1;\n const columnWidth = visibleColumnWidths.get(column) - 1;\n const rowHeight = visibleRowHeights.get(row) - 1;\n context.fillStyle = backgroundColor;\n context.fillRect(x, y, columnWidth, rowHeight);\n }\n\n if (isFirstColumn && hasExpandableRows) {\n this.drawCellRowTreeDepthLines(context, state, row, rowAfter);\n }\n }\n\n drawCellContents(context, state) {\n const { metrics } = state;\n const { visibleColumns } = metrics;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n this.drawColumnCellContents(context, state, column);\n }\n }\n\n drawColumnCellContents(context, state, column) {\n const { metrics } = state;\n const {\n visibleColumnXs,\n visibleColumnWidths,\n visibleRows,\n height,\n } = metrics;\n const x = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n\n context.save();\n\n context.beginPath();\n context.rect(x, 0, columnWidth, height);\n context.clip();\n\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n this.drawCellContent(context, state, column, row);\n }\n context.restore();\n }\n\n drawCellContent(context, state, column, row) {\n const {\n metrics,\n model,\n model: { hasExpandableRows },\n theme,\n } = state;\n const {\n firstColumn,\n fontWidths,\n modelColumns,\n modelRows,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding,\n textColor,\n } = theme;\n const x = visibleColumnXs.get(column);\n const y = visibleRowYs.get(row);\n const columnWidth = visibleColumnWidths.get(column);\n const rowHeight = visibleRowHeights.get(row);\n const modelRow = modelRows.get(row);\n const modelColumn = modelColumns.get(column);\n const text = model.textForCell(modelColumn, modelRow);\n const isFirstColumn = column === firstColumn;\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n let treeIndent = 0;\n if (hasExpandableRows && isFirstColumn) {\n treeIndent =\n treeDepthIndent * (model.depthForRow(row) + 1) +\n treeHorizontalPadding;\n }\n const textWidth = columnWidth - treeIndent;\n let textX = x + cellHorizontalPadding;\n const textY = y + rowHeight * 0.5;\n if (textAlign === 'right') {\n textX = x + textWidth - cellHorizontalPadding;\n } else if (textAlign === 'center') {\n textX = x + textWidth * 0.5;\n } else {\n textX = x + cellHorizontalPadding;\n }\n textX += treeIndent;\n\n const fontWidth = fontWidths.get(context.font);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth - cellHorizontalPadding * 2,\n fontWidth\n );\n if (truncatedText != null) {\n context.fillText(truncatedText, textX, textY);\n }\n }\n\n if (isFirstColumn && hasExpandableRows) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n drawCellRowTreeMarker(context, state, row) {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n firstColumn,\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n visibleRowTreeBoxes,\n } = metrics;\n const { treeMarkerColor, treeMarkerHoverColor } = theme;\n const columnX = visibleColumnXs.get(firstColumn);\n const columnWidth = visibleColumnWidths.get(firstColumn);\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const isExpandable = model.isRowExpandable(row);\n const isExpanded = model.isRowExpanded(row);\n\n if (isExpandable) {\n const treeBox = visibleRowTreeBoxes.get(row);\n const color =\n mouseX >= gridX + columnX &&\n mouseX <= gridX + columnX + columnWidth &&\n mouseY >= gridY + rowY &&\n mouseY <= gridY + rowY + rowHeight\n ? treeMarkerHoverColor\n : treeMarkerColor;\n\n this.drawTreeMarker(\n context,\n state,\n columnX,\n rowY,\n treeBox,\n color,\n isExpanded\n );\n }\n }\n\n drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {\n const [x1, y1, x2, y2] = treeBox;\n const markerText = isExpanded ? '⊟' : '⊞';\n const textX = columnX + (x1 + x2) * 0.5 + 0.5;\n const textY = rowY + (y1 + y2) * 0.5 + 0.5;\n context.fillStyle = color;\n context.textAlign = 'center';\n context.fillText(markerText, textX, textY);\n }\n\n drawCellRowTreeDepthLines(context, state, row, rowAfter) {\n const { metrics, model, theme } = state;\n\n const depth = model.depthForRow(row);\n if (depth === 0) return;\n\n const {\n firstColumn,\n visibleColumnXs,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const { treeDepthIndent, treeHorizontalPadding, treeLineColor } = theme;\n const columnX = visibleColumnXs.get(firstColumn);\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const depthRowAfter = model.depthForRow(rowAfter);\n const depthDiff = depth > depthRowAfter ? depth - depthRowAfter : 0;\n\n context.strokeStyle = treeLineColor;\n context.lineWidth = 1;\n\n // draw normal depth lines\n if (depth - depthDiff > 0) {\n context.beginPath();\n for (let i = 0; i < depth - depthDiff; i += 1) {\n const lineX =\n columnX +\n i * treeDepthIndent +\n treeDepthIndent * 0.5 +\n treeHorizontalPadding +\n 0.5;\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + rowHeight);\n }\n context.stroke();\n }\n\n // draw as hockey stick if last row at depth\n if (depthDiff > 0) {\n context.beginPath();\n for (let i = depth - depthDiff; i < depth; i += 1) {\n const lineX =\n columnX +\n i * treeDepthIndent +\n treeDepthIndent * 0.5 +\n treeHorizontalPadding +\n 0.5;\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + Math.ceil(rowHeight / 2));\n // extra moveTo prevents halfpixel in corner\n context.moveTo(lineX - 0.5, rowY + Math.ceil(rowHeight / 2) + 0.5);\n context.lineTo(\n lineX + treeDepthIndent - 0.5,\n rowY + Math.ceil(rowHeight / 2) + 0.5\n );\n }\n context.stroke();\n }\n }\n\n getCachedTruncatedString = memoizeClear(\n (context, text, width, fontWidth) =>\n GridRenderer.truncateToWidth(context, text, width, fontWidth),\n { max: 10000 }\n );\n\n getCachedBackgroundColors = memoizeClear(\n (backgroundColors, maxDepth) =>\n backgroundColors.split(' ').map(color => {\n const colors = [];\n for (let i = 0; i < maxDepth; i += 1) {\n colors.push(GridColorUtils.darkenForDepth(color, i, maxDepth));\n }\n return colors;\n }),\n { max: 1000 }\n );\n\n getCachedColorWithAlpha = memoizeClear(\n (color, alpha) => GridColorUtils.colorWithAlpha(color, alpha),\n { max: 1000 }\n );\n\n drawHeaders(context, state) {\n const { theme } = state;\n\n context.font = theme.headerFont;\n\n this.drawColumnHeaders(context, state);\n\n this.drawRowHeaders(context, state);\n }\n\n drawFooters(context, state) {\n const { theme } = state;\n\n context.font = theme.headerFont;\n\n this.drawRowFooters(context, state);\n }\n\n drawColumnHeaders(context, state) {\n const {\n mouseX,\n mouseY,\n theme,\n metrics,\n draggingColumnSeparator,\n isDragging,\n } = state;\n const {\n columnHeaderHeight,\n gridX,\n width,\n visibleColumns,\n visibleColumnWidths,\n visibleColumnXs,\n } = metrics;\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorHeight = columnHeaderHeight * 0.5;\n const hiddenY = columnHeaderHeight * 0.5 - hiddenSeparatorHeight * 0.5;\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, width, columnHeaderHeight);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n const hiddenColumns = [];\n let isPreviousColumnHidden = false;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n if (columnWidth > 0) {\n const x = gridX + columnX + columnWidth + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 0.5);\n isPreviousColumnHidden = false;\n } else if (!isPreviousColumnHidden) {\n isPreviousColumnHidden = true;\n hiddenColumns.push(column);\n }\n }\n\n // Bottom Border, should be interior to the header height\n context.moveTo(0, columnHeaderHeight - 0.5);\n context.lineTo(width, columnHeaderHeight - 0.5);\n context.stroke();\n\n // Now draw the hidden column separator boxes\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenColumns.length; i += 1) {\n const column = hiddenColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n const minX =\n gridX + columnX + columnWidth + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n minX,\n hiddenY,\n headerHiddenSeparatorSize,\n hiddenSeparatorHeight\n );\n }\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingColumnSeparator;\n\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getColumnSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (\n highlightedSeparator != null &&\n (!isDragging || draggingColumnSeparator != null)\n ) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const columnX = visibleColumnXs.get(highlightedSeparator);\n const columnWidth = visibleColumnWidths.get(highlightedSeparator);\n const x = gridX + columnX + columnWidth + 0.5;\n const visibleColumnIndex = visibleColumns.indexOf(highlightedSeparator);\n const nextColumn =\n visibleColumnIndex < visibleColumns.length - 1\n ? visibleColumns[visibleColumnIndex + 1]\n : null;\n const nextColumnWidth =\n nextColumn != null ? visibleColumnWidths.get(nextColumn) : null;\n const isColumnHidden = columnWidth === 0;\n const isNextColumnHidden =\n nextColumnWidth != null && nextColumnWidth === 0;\n if (isColumnHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n x,\n hiddenY,\n headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorHeight\n );\n } else if (isNextColumnHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n x - headerHiddenSeparatorSize * 0.5,\n hiddenY,\n headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorHeight\n );\n }\n\n // column seperator hover line\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 1);\n context.stroke();\n }\n }\n\n context.fillStyle = headerColor;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = visibleColumnWidths.get(column);\n const x = visibleColumnXs.get(column) + gridX;\n this.drawColumnHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawColumnHeader(context, state, column, columnX, columnWidth) {\n if (columnWidth <= 0) {\n return;\n }\n const { metrics, model, theme } = state;\n const { modelColumns } = metrics;\n const modelColumn = modelColumns.get(column);\n let text = model.textForColumnHeader(modelColumn);\n if (!text) {\n return;\n }\n\n const { headerHorizontalPadding } = theme;\n const { columnHeaderHeight, fontWidths } = metrics;\n const fontWidth =\n fontWidths.get(context.font) || GridRenderer.DEFAULT_FONT_WIDTH;\n\n const maxLength = (columnWidth - headerHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n return;\n }\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n\n const x = columnX + headerHorizontalPadding;\n const y = columnHeaderHeight * 0.5;\n\n context.textAlign = 'left';\n context.fillText(text, x, y);\n } else {\n const x = columnX + columnWidth * 0.5;\n const y = columnHeaderHeight * 0.5;\n\n context.textAlign = 'center';\n context.fillText(text, x, y);\n }\n\n context.restore();\n }\n\n drawRowHeaders(context, state) {\n const { mouseX, mouseY, metrics, theme, draggingRowSeparator } = state;\n const {\n gridY,\n rowHeaderWidth,\n height,\n visibleRows,\n visibleRowHeights,\n visibleRowYs,\n } = metrics;\n if (rowHeaderWidth <= 0) {\n return;\n }\n\n const {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorWidth = rowHeaderWidth * 0.5;\n const hiddenX = rowHeaderWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, rowHeaderWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(0, gridY + 0.5);\n context.lineTo(rowHeaderWidth, gridY + 0.5);\n\n const hiddenRows = [];\n let isPreviousRowHidden = false;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const y = gridY + rowY + rowHeight + 0.5;\n\n context.moveTo(0, y);\n context.lineTo(rowHeaderWidth, y);\n\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border right, interior to the headerWidth\n context.moveTo(rowHeaderWidth - 0.5, 0);\n context.lineTo(rowHeaderWidth - 0.5, height);\n\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenRows.length; i += 1) {\n const row = hiddenRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const minY =\n gridY + rowY + rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n hiddenX,\n minY,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize\n );\n }\n\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingRowSeparator;\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const rowY = visibleRowYs.get(highlightedSeparator);\n const rowHeight = visibleRowHeights.get(highlightedSeparator);\n const y = gridY + rowY + rowHeight + 0.5;\n\n const visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n const nextRow =\n visibleRowIndex < visibleRows.length - 1\n ? visibleRows[visibleRowIndex + 1]\n : null;\n const nextRowHeight =\n nextRow != null ? visibleRowHeights.get(nextRow) : null;\n const isRowHidden = rowHeight === 0;\n const isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y - headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n }\n\n context.beginPath();\n context.moveTo(0.5, y);\n context.lineTo(rowHeaderWidth + 0.5, y);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(0, gridY, rowHeaderWidth, height);\n context.clip();\n\n context.fillStyle = headerColor;\n context.textAlign = 'right';\n\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = visibleRowHeights.get(row);\n const y = visibleRowYs.get(row) + gridY;\n this.drawRowHeader(context, state, row, y, rowHeight);\n }\n\n context.restore();\n }\n\n drawRowHeader(context, state, row, rowY, rowHeight) {\n if (rowHeight <= 0) {\n return;\n }\n const { metrics, model, theme } = state;\n const { modelRows, rowHeaderWidth } = metrics;\n const modelRow = modelRows.get(row);\n const x = rowHeaderWidth - theme.cellHorizontalPadding;\n const y = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowHeader(modelRow), x, y);\n }\n\n drawRowFooters(context, state) {\n const {\n mouseX,\n mouseY,\n metrics,\n model,\n theme,\n draggingRowSeparator,\n } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n rowFooterWidth,\n height,\n verticalBarWidth,\n visibleRows,\n visibleRowHeights,\n visibleRowYs,\n width,\n } = metrics;\n if (rowFooterWidth <= 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorWidth = rowFooterWidth * 0.5;\n const hiddenX = rowFooterWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n const x = Math.min(gridX + maxX, width - rowFooterWidth - verticalBarWidth);\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(x, gridY, rowFooterWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(x, gridY + 0.5);\n context.lineTo(rowFooterWidth, gridY + 0.5);\n\n const hiddenRows = [];\n let isPreviousRowHidden = false;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const y = gridY + rowY + rowHeight + 0.5;\n\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth - 0.5, y);\n\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border left, interior to the headerWidth\n context.moveTo(x + 0.5, gridY);\n context.lineTo(x + 0.5, height);\n\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenRows.length; i += 1) {\n const row = hiddenRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const minY =\n gridY + rowY + rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n x + hiddenX,\n minY,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize\n );\n }\n\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingRowSeparator;\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const rowY = visibleRowYs.get(highlightedSeparator);\n const rowHeight = visibleRowHeights.get(highlightedSeparator);\n const y = gridY + rowY + rowHeight + 0.5;\n\n const visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n const nextRow =\n visibleRowIndex < visibleRows.length - 1\n ? visibleRows[visibleRowIndex + 1]\n : null;\n const nextRowHeight =\n nextRow != null ? visibleRowHeights.get(nextRow) : null;\n const isRowHidden = rowHeight === 0;\n const isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y - headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n }\n\n context.beginPath();\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth + 0.5, y);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(x, gridY, rowFooterWidth, height);\n context.clip();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const rowY = visibleRowYs.get(row) + gridY;\n const modelRow = modelRows.get(row);\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.restore();\n }\n\n drawSelectedRanges(context, state, viewport = {}) {\n const {\n cursorColumn: column,\n cursorRow: row,\n draggingRow,\n draggingColumn,\n editingCell,\n metrics,\n model,\n selectedRanges,\n theme,\n } = state;\n const {\n visibleColumnWidths,\n visibleColumnXs,\n visibleRowHeights,\n visibleRowYs,\n width,\n height,\n } = metrics;\n const {\n left = metrics.left,\n top = metrics.top,\n right = metrics.right,\n bottom = metrics.bottom,\n minY = -10,\n maxY = height + 10,\n minX = -10,\n maxX = width + 10,\n } = viewport;\n if (selectedRanges.length === 0) {\n return;\n }\n\n const isCursorVisible =\n model.isEditable &&\n editingCell == null &&\n draggingRow == null &&\n draggingColumn == null &&\n visibleColumnXs.has(column) &&\n visibleRowYs.has(row);\n if (isCursorVisible) {\n // Punch a hole out where the active cell is, it gets styled differently.\n const x = visibleColumnXs.get(column);\n const y = visibleRowYs.get(row);\n const w = visibleColumnWidths.get(column);\n const h = visibleRowHeights.get(row);\n\n context.save();\n\n context.beginPath();\n\n context.rect(0, 0, width, height);\n context.rect(x, y, w, h);\n\n context.clip('evenodd');\n }\n\n // Draw selection ranges\n context.beginPath();\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const selectedRange = selectedRanges[i];\n const startColumn =\n selectedRange.startColumn !== null ? selectedRange.startColumn : left;\n const startRow =\n selectedRange.startRow !== null ? selectedRange.startRow : top;\n const endColumn =\n selectedRange.endColumn !== null ? selectedRange.endColumn : right;\n const endRow =\n selectedRange.endRow !== null ? selectedRange.endRow : bottom;\n if (\n endRow >= top &&\n bottom >= startRow &&\n endColumn >= left &&\n right >= startColumn\n ) {\n // Need to offset the x/y coordinates so that the line draws nice and crisp\n const x =\n startColumn >= left && visibleColumnXs.has(startColumn)\n ? Math.round(visibleColumnXs.get(startColumn)) + 0.5\n : minX;\n const y =\n startRow >= top && visibleRowYs.has(startRow)\n ? Math.max(Math.round(visibleRowYs.get(startRow)) + 0.5, 0.5)\n : minY;\n\n const endX =\n endColumn <= right && visibleColumnXs.has(endColumn)\n ? Math.round(\n visibleColumnXs.get(endColumn) +\n visibleColumnWidths.get(endColumn)\n ) - 0.5\n : maxX;\n const endY =\n endRow <= bottom && visibleRowYs.has(endRow)\n ? Math.round(\n visibleRowYs.get(endRow) + visibleRowHeights.get(endRow)\n ) - 0.5\n : maxY;\n\n context.rect(x, y, endX - x, endY - y);\n }\n\n // draw the inner transparent fill\n context.fillStyle = theme.selectionColor;\n context.fill();\n\n /* \n draw an \"inner stroke\" that's clipped to just inside of the rects\n to act as a casing to the outer stroke. 3px width because 1px is outside\n the rect (but clipped), 1px is \"on\" the rect (technically this pixel is\n a half pixel clip as well due to rects offset, but we are immediately painting\n over it), and then the 1px inside (which is the desired pixel).\n */\n context.save();\n context.clip();\n context.strokeStyle = theme.selectionOutlineCasingColor;\n context.lineWidth = 3;\n context.stroke();\n context.restore();\n\n // draw the outerstroke border on top of the inner stroke\n context.strokeStyle = theme.selectionOutlineColor;\n context.lineWidth = 1;\n context.stroke();\n }\n\n if (isCursorVisible) {\n context.restore();\n\n this.drawActiveCell(context, state, column, row);\n }\n }\n\n drawActiveCell(\n context,\n state,\n column,\n row,\n borderWidth = GridRenderer.ACTIVE_CELL_BORDER_WIDTH\n ) {\n const { metrics, theme } = state;\n const {\n visibleColumnWidths,\n visibleColumnXs,\n visibleRowHeights,\n visibleRowYs,\n } = metrics;\n const cellX = visibleColumnXs.get(column);\n const cellY = visibleRowYs.get(row);\n const cellW = visibleColumnWidths.get(column);\n const cellH = visibleRowHeights.get(row);\n\n // Now get the outline for the active cell\n let x = cellX - borderWidth * 0.5;\n let y = cellY - borderWidth * 0.5;\n let w = cellW + borderWidth;\n let h = cellH + borderWidth;\n\n // Make sure the outline is interior on the edge\n if (x <= 0) {\n w += x - 1;\n x = 1;\n }\n if (y <= 0) {\n h += y - 1;\n y = 1;\n }\n\n const { lineWidth } = context;\n context.beginPath();\n context.lineWidth = borderWidth;\n context.strokeStyle = theme.selectionOutlineColor;\n this.drawRoundedRect(context, x, y, w, h);\n context.stroke();\n context.lineWidth = lineWidth;\n }\n\n /**\n * Draws a rounded rectangle using the current state of the canvas.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x coordinate of the left side\n * @param {number} y coordinate of the top side\n * @param {number} w width of the rectangle\n * @param {number} h height of the rectangle\n * @param {number} r corner radius of the rectangle\n */\n drawRoundedRect(context, x, y, w, h, r = GridRenderer.DEFAULT_EDGE_RADIUS) {\n context.beginPath();\n context.moveTo(x + r, y);\n context.lineTo(x + w - r, y);\n context.quadraticCurveTo(x + w, y, x + w, y + r);\n context.lineTo(x + w, y + h - r);\n context.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n context.lineTo(x + r, y + h);\n context.quadraticCurveTo(x, y + h, x, y + h - r);\n context.lineTo(x, y + r);\n context.quadraticCurveTo(x, y, x + r, y);\n context.closePath();\n }\n\n drawDraggingColumn(context, state) {\n const {\n draggingColumn,\n draggingColumnOffset,\n metrics,\n mouseX,\n theme,\n } = state;\n if (draggingColumn == null) {\n return;\n }\n\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n height,\n } = metrics;\n const x = visibleColumnXs.get(draggingColumn);\n const columnWidth = visibleColumnWidths.get(draggingColumn) + 1;\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n context.save();\n\n context.translate(gridX, 0);\n\n // First, we need to draw over the row stripes where the column is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(x, 0, columnWidth, height);\n\n context.translate(\n mouseX - x - gridX - draggingColumnOffset,\n gridY + reorderOffset\n );\n\n // Then draw the shadow of the moving column\n context.save();\n\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(x, -gridY, columnWidth, height);\n\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this column and all it's contents\n context.beginPath();\n context.rect(x, -gridY, columnWidth, height);\n context.clip();\n\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n this.drawColumnCellContents(context, state, draggingColumn);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n\n context.font = headerFont;\n\n this.drawColumnHeaders(context, state);\n\n context.restore();\n }\n\n drawDraggingRow(context, state) {\n const { draggingRow, draggingRowOffset, metrics, mouseY, theme } = state;\n if (draggingRow == null) {\n return;\n }\n\n const { gridX, gridY, visibleRowYs, visibleRowHeights, width } = metrics;\n const y = visibleRowYs.get(draggingRow);\n const rowHeight = visibleRowHeights.get(draggingRow) + 1;\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n context.save();\n\n context.translate(0, gridY);\n\n // First, we need to draw over the row stripes where the row is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(0, y, width, rowHeight);\n\n context.translate(\n gridX + reorderOffset,\n mouseY - y - gridY - draggingRowOffset\n );\n\n // Then draw the shadow of the moving row\n context.save();\n\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(-gridX, y, width, rowHeight);\n\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this row and all it's contents\n context.beginPath();\n context.rect(-gridX, y, width, rowHeight);\n context.clip();\n\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n this.drawCellContents(context, state);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n\n context.font = headerFont;\n\n this.drawRowHeaders(context, state);\n\n context.restore();\n }\n\n drawScrollBars(context, state) {\n const {\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n metrics,\n mouseX,\n mouseY,\n theme,\n } = state;\n if (theme.scrollBarSize <= 0) {\n return;\n }\n\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n width,\n height,\n handleHeight,\n handleWidth,\n scrollX,\n scrollY,\n hasHorizontalBar,\n hasVerticalBar,\n barWidth,\n barHeight,\n } = metrics;\n const {\n scrollBarBackgroundColor,\n scrollBarHoverBackgroundColor,\n scrollBarCasingColor,\n scrollBarCornerColor,\n scrollBarColor,\n scrollBarHoverColor,\n scrollBarActiveColor,\n scrollBarSize,\n scrollBarHoverSize,\n scrollBarCasingWidth,\n } = theme;\n\n const isInbounds = mouseX <= width && mouseY <= height;\n\n const isVerticalBarHover =\n isDraggingVerticalScrollBar ||\n (!isDraggingHorizontalScrollBar &&\n !isDragging &&\n mouseX >= width - scrollBarHoverSize &&\n mouseY <= barHeight + columnHeaderHeight &&\n isInbounds);\n\n const isHorizontalBarHover =\n isDraggingHorizontalScrollBar ||\n (!isDraggingVerticalScrollBar &&\n !isDragging &&\n !isVerticalBarHover && // vert bar gets priorty in overlapped corner hover area\n mouseY >= height - scrollBarHoverSize &&\n mouseX <= barWidth - rowHeaderWidth &&\n isInbounds);\n\n const hScrollBarSize = isHorizontalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n const vScrollBarSize = isVerticalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n\n context.translate(rowHeaderWidth, columnHeaderHeight);\n\n if (hasHorizontalBar && hasVerticalBar) {\n // That little corner in the bottom right\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(\n width - rowHeaderWidth - scrollBarSize,\n height - columnHeaderHeight - scrollBarSize,\n scrollBarSize,\n scrollBarSize\n );\n context.fillStyle = scrollBarCornerColor;\n context.fillRect(\n width - rowHeaderWidth - scrollBarSize + scrollBarCasingWidth,\n height - columnHeaderHeight - scrollBarSize + scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasHorizontalBar) {\n const x = scrollX;\n const y = height - columnHeaderHeight - hScrollBarSize;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(0, y, barWidth, hScrollBarSize - scrollBarCasingWidth);\n\n // scrollbar track\n context.fillStyle = isHorizontalBarHover\n ? scrollBarHoverBackgroundColor\n : scrollBarBackgroundColor;\n context.fillRect(\n 0,\n y + scrollBarCasingWidth,\n barWidth,\n hScrollBarSize - scrollBarCasingWidth\n );\n\n // scrollbar thumb\n if (isDraggingHorizontalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isHorizontalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n\n context.fillRect(\n x,\n y + scrollBarCasingWidth,\n handleWidth,\n hScrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasVerticalBar) {\n const x = width - rowHeaderWidth - vScrollBarSize;\n const y = scrollY;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(x, 0, vScrollBarSize - scrollBarCasingWidth, barHeight);\n\n // scrollbar track\n context.fillStyle = isVerticalBarHover\n ? scrollBarHoverBackgroundColor\n : scrollBarBackgroundColor;\n context.fillRect(\n x + scrollBarCasingWidth,\n 0,\n vScrollBarSize - scrollBarCasingWidth,\n barHeight\n );\n\n // scrollbar thumb\n if (isDraggingVerticalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isVerticalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n\n context.fillRect(\n x + scrollBarCasingWidth,\n y,\n vScrollBarSize - scrollBarCasingWidth,\n handleHeight\n );\n }\n\n context.translate(-rowHeaderWidth, -columnHeaderHeight);\n }\n}\n\nexport default GridRenderer;\n"],"file":"GridRenderer.js"}
1
+ {"version":3,"sources":["../src/GridRenderer.js"],"names":["memoizeClear","GridUtils","GridColorUtils","GridRenderer","context","text","width","fontWidth","truncateToWidth","max","backgroundColors","maxDepth","split","map","color","colors","i","push","darkenForDepth","alpha","colorWithAlpha","state","save","configureContext","drawBackground","drawGrid","drawHeaders","drawFooters","drawDraggingColumn","drawDraggingRow","drawScrollBars","restore","theme","font","textBaseline","lineCap","metrics","height","fillStyle","backgroundColor","fillRect","draggingRow","draggingColumn","gridX","gridY","translate","drawGridBackground","drawCellContents","drawFloatingRows","drawFloatingColumns","floatingTopRowCount","floatingBottomRowCount","floatingRows","rowCount","visibleColumns","visibleRowYs","visibleRowHeights","length","floatingRowBackgroundColors","drawRowStripesForRows","drawFloatingMouseRowHover","drawGridLinesForItems","floatingGridColumnColor","floatingGridRowColor","drawCellBackgroundsForItems","drawFloatingBorders","drawSelectedRanges","top","bottom","maxY","get","minY","c","column","r","row","drawCellContent","floatingLeftColumnCount","floatingRightColumnCount","floatingLeftWidth","floatingRightWidth","floatingColumns","maxX","columnCount","visibleRows","visibleColumnXs","visibleColumnWidths","left","right","minX","floatingDividerOuterColor","floatingDividerInnerColor","lineWidth","beginPath","strokeStyle","y","moveTo","lineTo","x","stroke","drawHover","drawRowStripes","drawMouseColumnHover","drawMouseRowHover","drawGridLines","drawCellBackgrounds","floatingTopColumnCount","Math","min","has","rowBackgroundColors","rows","model","shadowBlur","shadowColor","colorSets","getCachedBackgroundColors","colorRowMap","Map","topShadowRows","bottomShadowRows","addRowToColorMap","rowAbove","depth","depthForRow","colorSet","set","depthAbove","forEach","colorRows","rowHeight","rect","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","j","rowAfter","drawCellBackground","hasExpandableRows","firstColumn","modelColumns","modelRows","modelRow","modelColumn","backgroundColorForCell","isFirstColumn","drawCellRowTreeDepthLines","drawColumnCellContents","clip","fontWidths","cellHorizontalPadding","treeDepthIndent","treeHorizontalPadding","textColor","textForCell","textAlign","textAlignForCell","colorForCell","treeIndent","textWidth","textX","textY","truncatedText","getCachedTruncatedString","fillText","drawCellRowTreeMarker","visibleRowTreeBoxes","treeMarkerColor","treeMarkerHoverColor","columnX","rowY","isExpandable","isRowExpandable","isExpanded","isRowExpanded","treeBox","drawTreeMarker","x1","y1","x2","y2","markerText","treeLineColor","depthRowAfter","depthDiff","lineX","ceil","headerFont","drawColumnHeaders","drawRowHeaders","drawRowFooters","draggingColumnSeparator","isDragging","columnHeaderHeight","headerBackgroundColor","headerColor","headerHiddenSeparatorSize","headerHiddenSeparatorHoverColor","headerSeparatorColor","headerSeparatorHoverColor","hiddenSeparatorHeight","hiddenY","hiddenColumns","isPreviousColumnHidden","highlightedSeparator","getColumnSeparatorIndex","visibleColumnIndex","indexOf","nextColumn","nextColumnWidth","isColumnHidden","isNextColumnHidden","drawColumnHeader","textForColumnHeader","headerHorizontalPadding","DEFAULT_FONT_WIDTH","maxLength","substring","draggingRowSeparator","rowHeaderWidth","hiddenSeparatorWidth","hiddenX","hiddenRows","isPreviousRowHidden","getRowSeparatorIndex","visibleRowIndex","nextRow","nextRowHeight","isRowHidden","isNextRowHidden","drawRowHeader","textForRowHeader","verticalBarWidth","textForRowFooter","viewport","cursorColumn","cursorRow","editingCell","isCursorVisible","isEditable","w","h","selectedRange","startColumn","endColumn","round","endX","endY","selectionColor","selectionOutlineCasingColor","selectionOutlineColor","drawActiveCell","borderWidth","ACTIVE_CELL_BORDER_WIDTH","cellX","cellY","cellW","cellH","drawRoundedRect","DEFAULT_EDGE_RADIUS","quadraticCurveTo","closePath","draggingColumnOffset","reorderOffset","draggingRowOffset","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","scrollBarSize","handleHeight","handleWidth","scrollX","scrollY","hasHorizontalBar","hasVerticalBar","barWidth","barHeight","scrollBarBackgroundColor","scrollBarHoverBackgroundColor","scrollBarCasingColor","scrollBarCornerColor","scrollBarColor","scrollBarHoverColor","scrollBarActiveColor","scrollBarHoverSize","scrollBarCasingWidth","isInbounds","isVerticalBarHover","isHorizontalBarHover","hScrollBarSize","vScrollBarSize","str","len","substr","start","end","measureText","lo","hi","result","mid","truncatedStr","truncate","floor","binaryTruncateToWidth"],"mappings":"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","sourcesContent":["import memoizeClear from './memoizeClear';\nimport GridUtils from './GridUtils';\nimport GridColorUtils from './GridColorUtils';\n\n/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\n/**\n * A GridRenderer handles rendering the different parts of the grid\n * This default rendering just renders a basic grid. Extend this class and implement\n * your own methods to customize drawing of the grid (eg. Draw icons or special features)\n */\nclass GridRenderer {\n static DEFAULT_FONT_WIDTH = 10;\n\n static DEFAULT_EDGE_RADIUS = 2;\n\n static ACTIVE_CELL_BORDER_WIDTH = 2;\n\n /**\n * Truncate a string and add ellipses if necessary\n * @param {string} str The string to truncate\n * @param {number} len The length to truncate the string to. If longer than the actual string, just returns the string\n */\n static truncate(str, len) {\n if (len < str.length) {\n // eslint-disable-next-line prefer-template\n return str.substr(0, len) + '…';\n }\n return str;\n }\n\n /**\n * Uses binary search to truncate a string to fit in the provided width\n * @param {Context} context The drawing context to measure the text in\n * @param {string} str The string to get the maximum length it can draw\n * @param {number} width The width to truncate it to\n * @param {number} start The low boundary to start the search\n * @param {number} end The high boundary to start the search\n */\n static binaryTruncateToWidth(\n context,\n str,\n width,\n start = 0,\n end = str.length\n ) {\n if (end >= str.length && context.measureText(str).width <= width) {\n // IDS-6069 If the whole string can fit, don't bother checking for truncation\n // The ellipses are actually slightly wider than other chars, and it's possible\n // that the \"truncation\" ends up being slightly longer, which messes up the search\n // algorithm below.\n // Besides, if we already fit, it's just faster to not bother checking other truncations.\n return str;\n }\n let lo = start;\n let hi = Math.min(str.length - 1, end);\n let result = str;\n while (hi > lo) {\n const mid = Math.ceil((hi + lo) / 2);\n const truncatedStr = GridRenderer.truncate(str, mid);\n if (context.measureText(truncatedStr).width <= width) {\n result = truncatedStr;\n if (lo === mid) {\n break;\n }\n lo = mid;\n } else {\n hi = mid - 1;\n }\n }\n\n return result;\n }\n\n /**\n * Truncate a string (if necessary) to fit in the specified width.\n * First uses the estimated font width to calculate a lower/upper bound\n * Then uses binary search within those bounds to find the exact max length\n * @param {Context} context The drawing context\n * @param {string} str The string to calculate max length for\n * @param {number} width The width to truncate within\n * @param {number} fontWidth The estimated width of each character\n */\n static truncateToWidth(\n context,\n str,\n width,\n fontWidth = GridRenderer.DEFAULT_FONT_WIDTH\n ) {\n if (width <= 0 || str.length <= 0) {\n return null;\n }\n\n const lo = Math.min(Math.floor(width / fontWidth / 2), str.length);\n const hi = Math.min(Math.ceil((width / fontWidth) * 2), str.length);\n\n return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} context The context to draw the grid in\n * @param {GridState} state State of the grid, { left, top, mouseX, mouseY, selectedRanges, theme, model, metrics }\n */\n drawCanvas(state) {\n const { context } = state;\n\n context.save();\n\n this.configureContext(context, state);\n\n this.drawBackground(context, state);\n\n this.drawGrid(context, state);\n\n this.drawHeaders(context, state);\n\n this.drawFooters(context, state);\n\n this.drawDraggingColumn(context, state);\n\n this.drawDraggingRow(context, state);\n\n this.drawScrollBars(context, state);\n\n context.restore();\n }\n\n configureContext(context, state) {\n const { theme } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n\n drawBackground(context, state) {\n const { theme, metrics } = state;\n const { width, height } = metrics;\n context.fillStyle = theme.backgroundColor;\n context.fillRect(0, 0, width, height);\n }\n\n drawGrid(context, state) {\n const { metrics, draggingRow, draggingColumn } = state;\n const { gridX, gridY } = metrics;\n\n context.translate(gridX, gridY);\n\n this.drawGridBackground(\n context,\n state,\n draggingRow == null && draggingColumn == null\n );\n\n this.drawCellContents(context, state);\n\n this.drawFloatingRows(context, state);\n\n this.drawFloatingColumns(context, state);\n\n context.translate(-gridX, -gridY);\n }\n\n drawFloatingRows(context, state) {\n const { metrics, theme } = state;\n const {\n draggingRow,\n draggingColumn,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingRows,\n rowCount,\n visibleColumns,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n\n if (floatingRows.length === 0) {\n return;\n }\n\n if (theme.floatingRowBackgroundColors) {\n this.drawRowStripesForRows(\n context,\n state,\n floatingRows,\n theme.floatingRowBackgroundColors\n );\n }\n\n if (draggingRow == null && draggingColumn == null) {\n this.drawFloatingMouseRowHover(context, state);\n }\n\n this.drawGridLinesForItems(\n context,\n state,\n visibleColumns,\n floatingRows,\n theme.floatingGridColumnColor,\n theme.floatingGridRowColor\n );\n\n this.drawCellBackgroundsForItems(\n context,\n state,\n visibleColumns,\n floatingRows\n );\n\n this.drawFloatingBorders(context, state);\n\n // Draw the floating row selection...\n if (floatingTopRowCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n top: 0,\n bottom: floatingTopRowCount - 1,\n maxY:\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) -\n 0.5,\n },\n true\n );\n }\n if (floatingBottomRowCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n top: rowCount - floatingBottomRowCount - 1,\n bottom: rowCount - 1,\n minY: visibleRowYs.get(rowCount - floatingBottomRowCount) + 0.5,\n maxY:\n visibleRowYs.get(rowCount - 1) +\n visibleRowHeights.get(rowCount - 1) -\n 0.5,\n },\n true\n );\n }\n\n // Draw the cell content...\n for (let c = 0; c < visibleColumns.length; c += 1) {\n const column = visibleColumns[c];\n for (let r = 0; r < floatingRows.length; r += 1) {\n const row = floatingRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n\n drawFloatingColumns(context, state) {\n const { metrics, theme } = state;\n const {\n draggingRow,\n draggingColumn,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingColumns,\n gridX,\n maxX,\n columnCount,\n visibleRows,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n } = 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 this.drawGridLinesForItems(\n context,\n state,\n floatingColumns,\n visibleRows,\n theme.floatingGridColumnColor,\n theme.floatingGridRowColor\n );\n\n this.drawCellBackgroundsForItems(\n context,\n state,\n floatingColumns,\n visibleRows\n );\n\n this.drawFloatingBorders(context, state);\n\n // Draw the floating column selection...\n if (floatingLeftColumnCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n left: 0,\n right: floatingLeftColumnCount,\n maxX:\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1),\n },\n true\n );\n }\n if (floatingRightColumnCount > 0) {\n this.drawSelectedRanges(\n context,\n state,\n {\n left: columnCount - floatingRightColumnCount,\n right: columnCount - 1,\n minX:\n visibleColumnXs.get(columnCount - floatingRightColumnCount) + 0.5,\n maxX:\n visibleColumnXs.get(columnCount - 1) +\n visibleColumnWidths.get(columnCount - 1),\n },\n true\n );\n }\n\n // Draw the cell content...\n for (let c = 0; c < floatingColumns.length; c += 1) {\n const column = floatingColumns[c];\n for (let r = 0; r < visibleRows.length; r += 1) {\n const row = visibleRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n\n drawFloatingBorders(context, state) {\n const { metrics, theme } = state;\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n rowCount,\n columnCount,\n visibleRowYs,\n visibleColumnXs,\n visibleRowHeights,\n visibleColumnWidths,\n maxX,\n maxY,\n } = metrics;\n const { floatingDividerOuterColor, floatingDividerInnerColor } = theme;\n\n context.lineWidth = 3;\n context.beginPath();\n context.strokeStyle = floatingDividerOuterColor;\n\n if (floatingTopRowCount > 0) {\n const y =\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = visibleRowYs.get(rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n visibleColumnXs.get(columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n context.stroke();\n\n context.beginPath();\n context.lineWidth = 1;\n context.strokeStyle = floatingDividerInnerColor;\n\n if (floatingTopRowCount > 0) {\n const y =\n visibleRowYs.get(floatingTopRowCount - 1) +\n visibleRowHeights.get(floatingTopRowCount - 1) +\n 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingBottomRowCount > 0) {\n const y = visibleRowYs.get(rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n\n if (floatingLeftColumnCount > 0) {\n const x =\n visibleColumnXs.get(floatingLeftColumnCount - 1) +\n visibleColumnWidths.get(floatingLeftColumnCount - 1) +\n 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n if (floatingRightColumnCount > 0) {\n const x =\n visibleColumnXs.get(columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(x, 0.5);\n context.lineTo(x, maxY - 0.5);\n }\n\n context.stroke();\n }\n\n drawGridBackground(context, state, drawHover = false) {\n this.drawRowStripes(context, state);\n\n if (drawHover) {\n this.drawMouseColumnHover(context, state);\n\n this.drawMouseRowHover(context, state);\n }\n\n this.drawGridLines(context, state);\n\n this.drawCellBackgrounds(context, state);\n\n const { metrics } = state;\n const {\n bottom,\n right,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingTopColumnCount,\n columnCount,\n rowCount,\n visibleRowHeights,\n visibleRowYs,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n height,\n } = metrics;\n this.drawSelectedRanges(context, state, {\n bottom: Math.min(bottom, rowCount - floatingBottomRowCount - 1),\n right: Math.min(right, columnCount - floatingRightColumnCount - 1),\n minX:\n floatingLeftColumnCount > 0 &&\n visibleColumnXs.has(floatingLeftColumnCount + 1)\n ? visibleColumnXs.get(floatingLeftColumnCount + 1)\n : -10,\n minY:\n floatingTopColumnCount > 0 &&\n visibleRowYs.has(floatingTopColumnCount + 1)\n ? visibleRowYs.get(floatingTopColumnCount + 1)\n : -10,\n maxX:\n floatingRightColumnCount > 0 &&\n visibleColumnXs.has(columnCount - floatingRightColumnCount - 1)\n ? visibleColumnXs.get(columnCount - floatingRightColumnCount - 1) +\n visibleColumnWidths.get(\n columnCount - floatingRightColumnCount - 1\n ) -\n 0.5\n : width + 10,\n maxY:\n floatingBottomRowCount > 0 &&\n visibleRowYs.has(rowCount - floatingBottomRowCount - 1)\n ? visibleRowYs.get(rowCount - floatingBottomRowCount - 1) +\n visibleRowHeights.get(rowCount - floatingBottomRowCount - 1) -\n 0.5\n : height + 10,\n });\n }\n\n drawRowStripes(context, state) {\n const { metrics, theme } = state;\n const { visibleRows } = metrics;\n const { rowBackgroundColors } = theme;\n if (!rowBackgroundColors) {\n return;\n }\n this.drawRowStripesForRows(\n context,\n state,\n visibleRows,\n rowBackgroundColors\n );\n }\n\n drawRowStripesForRows(\n context,\n state,\n rows,\n rowBackgroundColors,\n minX = 0,\n maxX = state.metrics.maxX\n ) {\n const { theme, metrics, model } = state;\n const { maxDepth, shadowBlur, shadowColor } = theme;\n\n const colorSets = this.getCachedBackgroundColors(\n rowBackgroundColors,\n maxDepth\n );\n const { visibleRowYs, visibleRowHeights } = metrics;\n\n // Optimize by grouping together all rows that end up with the same color\n const colorRowMap = new Map();\n const topShadowRows = []; // Rows that are deeper than the row above them\n const bottomShadowRows = [];\n const addRowToColorMap = (row, rowAbove) => {\n const depth = model.depthForRow(row);\n const colorSet = colorSets[row % colorSets.length];\n const color = colorSet[Math.min(depth, colorSet.length - 1)];\n if (!colorRowMap.has(color)) {\n colorRowMap.set(color, []);\n }\n colorRowMap.get(color).push(row);\n if (rowAbove != null) {\n const depthAbove = model.depthForRow(rowAbove);\n if (depthAbove < depth) {\n topShadowRows.push(row);\n } else if (depthAbove > depth) {\n bottomShadowRows.push(rowAbove);\n }\n }\n };\n\n // Add all the regular row stripes\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const rowAbove = i > 0 ? rows[i - 1] : null;\n addRowToColorMap(row, rowAbove);\n }\n\n colorRowMap.forEach((colorRows, color) => {\n context.fillStyle = color;\n\n context.beginPath();\n\n for (let i = 0; i < colorRows.length; i += 1) {\n const row = colorRows[i];\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n context.rect(minX, y, maxX, rowHeight);\n }\n\n context.fill();\n });\n\n if (topShadowRows.length > 0) {\n context.save();\n\n const startColor = this.getCachedColorWithAlpha(shadowColor, 0.15);\n const endColor = this.getCachedColorWithAlpha(shadowColor, 0);\n const gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n\n for (let i = 0; i < topShadowRows.length; i += 1) {\n const row = topShadowRows[i];\n const y = visibleRowYs.get(row);\n // Use a translate so we can reuse the gradient\n context.translate(0, y);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -y);\n }\n\n context.restore();\n }\n\n if (bottomShadowRows.length > 0) {\n context.save();\n\n const startColor = this.getCachedColorWithAlpha(shadowColor, 0);\n const endColor = this.getCachedColorWithAlpha(shadowColor, 0.15);\n const gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n\n for (let i = 0; i < bottomShadowRows.length; i += 1) {\n const row = bottomShadowRows[i];\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const gradientY = y + rowHeight - shadowBlur;\n // Use a translate so we can reuse the gradient\n context.translate(0, gradientY);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -gradientY);\n }\n\n context.restore();\n }\n }\n\n drawMouseColumnHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const mouseColumn = GridUtils.getColumnAtX(mouseX, metrics);\n if (mouseColumn == null || !theme.columnHoverBackgroundColor) {\n return;\n }\n\n const { visibleColumnWidths, visibleColumnXs, maxY } = metrics;\n if (mouseY > maxY) {\n return;\n }\n\n const x = visibleColumnXs.get(mouseColumn);\n const columnWidth = visibleColumnWidths.get(mouseColumn);\n\n context.fillStyle = theme.columnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n\n drawMouseRowHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const { maxX } = metrics;\n if (mouseX > maxX || !theme.rowHoverBackgroundColor) {\n return;\n }\n\n const mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (mouseRow == null) {\n return;\n }\n\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n\n drawFloatingMouseRowHover(context, state) {\n const { mouseX, mouseY, theme, metrics } = state;\n const {\n maxX,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n rowFooterWidth,\n } = metrics;\n if (mouseX > maxX + rowFooterWidth || !theme.rowHoverBackgroundColor) {\n return;\n }\n\n const mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (\n mouseRow != null &&\n (mouseRow < floatingTopRowCount ||\n rowCount - floatingBottomRowCount <= mouseRow)\n ) {\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n }\n\n drawMouseRowHoverForRow(context, state, row) {\n const { metrics, selectedRanges, theme } = state;\n const { visibleRowHeights, visibleRowYs, maxX } = metrics;\n\n const y = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n\n context.fillStyle = theme.rowHoverBackgroundColor;\n for (let i = 0; i < selectedRanges.length; i += 1) {\n if (\n selectedRanges[i].startRow <= row &&\n selectedRanges[i].endRow >= row\n ) {\n context.fillStyle = theme.selectedRowHoverBackgroundColor;\n break;\n }\n }\n context.fillRect(0, y, maxX, rowHeight);\n }\n\n drawGridLines(context, state) {\n const { metrics, theme } = state;\n const { visibleColumns, visibleRows } = metrics;\n\n this.drawGridLinesForItems(\n context,\n state,\n visibleColumns,\n visibleRows,\n theme.gridColumnColor,\n theme.gridRowColor\n );\n }\n\n drawGridLinesForItems(context, state, columns, rows, columnColor, rowColor) {\n if (!columnColor && !rowColor) {\n return;\n }\n\n context.lineWidth = 1;\n context.beginPath();\n\n if (columnColor) {\n context.strokeStyle = columnColor;\n this.drawGridLinesForColumns(context, state, columns);\n }\n if (rowColor) {\n context.strokeStyle = rowColor;\n this.drawGridLinesForRows(context, state, rows);\n }\n\n context.stroke();\n }\n\n drawGridLinesForColumns(context, state, columns) {\n const { metrics } = state;\n const { visibleColumnXs, maxY } = metrics;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n const x = visibleColumnXs.get(column) + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n }\n\n drawGridLinesForRows(context, state, rows) {\n const { metrics } = state;\n const { visibleRowYs, maxX } = metrics;\n\n // Draw row lines\n for (let i = 0; i < rows.length; i += 1) {\n const row = rows[i];\n const y = visibleRowYs.get(row) + 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n }\n\n drawCellBackgrounds(context, state) {\n const { metrics } = state;\n const { visibleColumns, visibleRows } = metrics;\n this.drawCellBackgroundsForItems(\n context,\n state,\n visibleColumns,\n visibleRows\n );\n }\n\n drawCellBackgroundsForItems(context, state, columns, rows) {\n context.save();\n\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n\n for (let j = 0; j < rows.length; j += 1) {\n const row = rows[j];\n const rowAfter = j + 1 < rows.length ? rows[j + 1] : null;\n this.drawCellBackground(context, state, column, row, rowAfter);\n }\n }\n\n context.restore();\n }\n\n drawCellBackground(context, state, column, row, rowAfter) {\n const {\n metrics,\n model,\n model: { hasExpandableRows },\n theme,\n } = state;\n const {\n firstColumn,\n modelColumns,\n modelRows,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const modelRow = modelRows.get(row);\n const modelColumn = modelColumns.get(column);\n const backgroundColor = model.backgroundColorForCell(\n modelColumn,\n modelRow,\n theme\n );\n const isFirstColumn = column === firstColumn;\n\n if (backgroundColor) {\n const x = visibleColumnXs.get(column) + 1;\n const y = visibleRowYs.get(row) + 1;\n const columnWidth = visibleColumnWidths.get(column) - 1;\n const rowHeight = visibleRowHeights.get(row) - 1;\n context.fillStyle = backgroundColor;\n context.fillRect(x, y, columnWidth, rowHeight);\n }\n\n if (isFirstColumn && hasExpandableRows) {\n this.drawCellRowTreeDepthLines(context, state, row, rowAfter);\n }\n }\n\n drawCellContents(context, state) {\n const { metrics } = state;\n const { visibleColumns } = metrics;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n this.drawColumnCellContents(context, state, column);\n }\n }\n\n drawColumnCellContents(context, state, column) {\n const { metrics } = state;\n const {\n visibleColumnXs,\n visibleColumnWidths,\n visibleRows,\n height,\n } = metrics;\n const x = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n\n context.save();\n\n context.beginPath();\n context.rect(x, 0, columnWidth, height);\n context.clip();\n\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n this.drawCellContent(context, state, column, row);\n }\n context.restore();\n }\n\n drawCellContent(context, state, column, row) {\n const {\n metrics,\n model,\n model: { hasExpandableRows },\n theme,\n } = state;\n const {\n firstColumn,\n fontWidths,\n modelColumns,\n modelRows,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding,\n textColor,\n } = theme;\n const x = visibleColumnXs.get(column);\n const y = visibleRowYs.get(row);\n const columnWidth = visibleColumnWidths.get(column);\n const rowHeight = visibleRowHeights.get(row);\n const modelRow = modelRows.get(row);\n const modelColumn = modelColumns.get(column);\n const text = model.textForCell(modelColumn, modelRow);\n const isFirstColumn = column === firstColumn;\n\n if (text && rowHeight > 0) {\n const textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n\n const color =\n model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n\n let treeIndent = 0;\n if (hasExpandableRows && isFirstColumn) {\n treeIndent =\n treeDepthIndent * (model.depthForRow(row) + 1) +\n treeHorizontalPadding;\n }\n const textWidth = columnWidth - treeIndent;\n let textX = x + cellHorizontalPadding;\n const textY = y + rowHeight * 0.5;\n if (textAlign === 'right') {\n textX = x + textWidth - cellHorizontalPadding;\n } else if (textAlign === 'center') {\n textX = x + textWidth * 0.5;\n } else {\n textX = x + cellHorizontalPadding;\n }\n textX += treeIndent;\n\n const fontWidth = fontWidths.get(context.font);\n const truncatedText = this.getCachedTruncatedString(\n context,\n text,\n textWidth - cellHorizontalPadding * 2,\n fontWidth\n );\n if (truncatedText != null) {\n context.fillText(truncatedText, textX, textY);\n }\n }\n\n if (isFirstColumn && hasExpandableRows) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n drawCellRowTreeMarker(context, state, row) {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n firstColumn,\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n visibleRowYs,\n visibleRowHeights,\n visibleRowTreeBoxes,\n } = metrics;\n const { treeMarkerColor, treeMarkerHoverColor } = theme;\n const columnX = visibleColumnXs.get(firstColumn);\n const columnWidth = visibleColumnWidths.get(firstColumn);\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const isExpandable = model.isRowExpandable(row);\n const isExpanded = model.isRowExpanded(row);\n\n if (isExpandable) {\n const treeBox = visibleRowTreeBoxes.get(row);\n const color =\n mouseX >= gridX + columnX &&\n mouseX <= gridX + columnX + columnWidth &&\n mouseY >= gridY + rowY &&\n mouseY <= gridY + rowY + rowHeight\n ? treeMarkerHoverColor\n : treeMarkerColor;\n\n this.drawTreeMarker(\n context,\n state,\n columnX,\n rowY,\n treeBox,\n color,\n isExpanded\n );\n }\n }\n\n drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {\n const [x1, y1, x2, y2] = treeBox;\n const markerText = isExpanded ? '⊟' : '⊞';\n const textX = columnX + (x1 + x2) * 0.5 + 0.5;\n const textY = rowY + (y1 + y2) * 0.5 + 0.5;\n context.fillStyle = color;\n context.textAlign = 'center';\n context.fillText(markerText, textX, textY);\n }\n\n drawCellRowTreeDepthLines(context, state, row, rowAfter) {\n const { metrics, model, theme } = state;\n\n const depth = model.depthForRow(row);\n if (depth === 0) return;\n\n const {\n firstColumn,\n visibleColumnXs,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const { treeDepthIndent, treeHorizontalPadding, treeLineColor } = theme;\n const columnX = visibleColumnXs.get(firstColumn);\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const depthRowAfter = model.depthForRow(rowAfter);\n const depthDiff = depth > depthRowAfter ? depth - depthRowAfter : 0;\n\n context.strokeStyle = treeLineColor;\n context.lineWidth = 1;\n\n // draw normal depth lines\n if (depth - depthDiff > 0) {\n context.beginPath();\n for (let i = 0; i < depth - depthDiff; i += 1) {\n const lineX =\n columnX +\n i * treeDepthIndent +\n treeDepthIndent * 0.5 +\n treeHorizontalPadding +\n 0.5;\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + rowHeight);\n }\n context.stroke();\n }\n\n // draw as hockey stick if last row at depth\n if (depthDiff > 0) {\n context.beginPath();\n for (let i = depth - depthDiff; i < depth; i += 1) {\n const lineX =\n columnX +\n i * treeDepthIndent +\n treeDepthIndent * 0.5 +\n treeHorizontalPadding +\n 0.5;\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + Math.ceil(rowHeight / 2));\n // extra moveTo prevents halfpixel in corner\n context.moveTo(lineX - 0.5, rowY + Math.ceil(rowHeight / 2) + 0.5);\n context.lineTo(\n lineX + treeDepthIndent - 0.5,\n rowY + Math.ceil(rowHeight / 2) + 0.5\n );\n }\n context.stroke();\n }\n }\n\n getCachedTruncatedString = memoizeClear(\n (context, text, width, fontWidth) =>\n GridRenderer.truncateToWidth(context, text, width, fontWidth),\n { max: 10000 }\n );\n\n getCachedBackgroundColors = memoizeClear(\n (backgroundColors, maxDepth) =>\n backgroundColors.split(' ').map(color => {\n const colors = [];\n for (let i = 0; i < maxDepth; i += 1) {\n colors.push(GridColorUtils.darkenForDepth(color, i, maxDepth));\n }\n return colors;\n }),\n { max: 1000 }\n );\n\n getCachedColorWithAlpha = memoizeClear(\n (color, alpha) => GridColorUtils.colorWithAlpha(color, alpha),\n { max: 1000 }\n );\n\n drawHeaders(context, state) {\n const { theme } = state;\n\n context.font = theme.headerFont;\n\n this.drawColumnHeaders(context, state);\n\n this.drawRowHeaders(context, state);\n }\n\n drawFooters(context, state) {\n const { theme } = state;\n\n context.font = theme.headerFont;\n\n this.drawRowFooters(context, state);\n }\n\n drawColumnHeaders(context, state) {\n const {\n mouseX,\n mouseY,\n theme,\n metrics,\n draggingColumnSeparator,\n isDragging,\n } = state;\n const {\n columnHeaderHeight,\n gridX,\n width,\n visibleColumns,\n visibleColumnWidths,\n visibleColumnXs,\n } = metrics;\n if (columnHeaderHeight <= 0) {\n return;\n }\n\n const {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorHeight = columnHeaderHeight * 0.5;\n const hiddenY = columnHeaderHeight * 0.5 - hiddenSeparatorHeight * 0.5;\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, width, columnHeaderHeight);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n const hiddenColumns = [];\n let isPreviousColumnHidden = false;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n if (columnWidth > 0) {\n const x = gridX + columnX + columnWidth + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 0.5);\n isPreviousColumnHidden = false;\n } else if (!isPreviousColumnHidden) {\n isPreviousColumnHidden = true;\n hiddenColumns.push(column);\n }\n }\n\n // Bottom Border, should be interior to the header height\n context.moveTo(0, columnHeaderHeight - 0.5);\n context.lineTo(width, columnHeaderHeight - 0.5);\n context.stroke();\n\n // Now draw the hidden column separator boxes\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenColumns.length; i += 1) {\n const column = hiddenColumns[i];\n const columnX = visibleColumnXs.get(column);\n const columnWidth = visibleColumnWidths.get(column);\n const minX =\n gridX + columnX + columnWidth + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n minX,\n hiddenY,\n headerHiddenSeparatorSize,\n hiddenSeparatorHeight\n );\n }\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingColumnSeparator;\n\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getColumnSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (\n highlightedSeparator != null &&\n (!isDragging || draggingColumnSeparator != null)\n ) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const columnX = visibleColumnXs.get(highlightedSeparator);\n const columnWidth = visibleColumnWidths.get(highlightedSeparator);\n const x = gridX + columnX + columnWidth + 0.5;\n const visibleColumnIndex = visibleColumns.indexOf(highlightedSeparator);\n const nextColumn =\n visibleColumnIndex < visibleColumns.length - 1\n ? visibleColumns[visibleColumnIndex + 1]\n : null;\n const nextColumnWidth =\n nextColumn != null ? visibleColumnWidths.get(nextColumn) : null;\n const isColumnHidden = columnWidth === 0;\n const isNextColumnHidden =\n nextColumnWidth != null && nextColumnWidth === 0;\n if (isColumnHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n x,\n hiddenY,\n headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorHeight\n );\n } else if (isNextColumnHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n x - headerHiddenSeparatorSize * 0.5,\n hiddenY,\n headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorHeight\n );\n }\n\n // column seperator hover line\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, columnHeaderHeight - 1);\n context.stroke();\n }\n }\n\n context.fillStyle = headerColor;\n\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = visibleColumnWidths.get(column);\n const x = visibleColumnXs.get(column) + gridX;\n this.drawColumnHeader(context, state, column, x, columnWidth);\n }\n\n context.restore();\n }\n\n drawColumnHeader(context, state, column, columnX, columnWidth) {\n if (columnWidth <= 0) {\n return;\n }\n const { metrics, model, theme } = state;\n const { modelColumns } = metrics;\n const modelColumn = modelColumns.get(column);\n let text = model.textForColumnHeader(modelColumn);\n if (!text) {\n return;\n }\n\n const { headerHorizontalPadding } = theme;\n const { columnHeaderHeight, fontWidths } = metrics;\n const fontWidth =\n fontWidths.get(context.font) || GridRenderer.DEFAULT_FONT_WIDTH;\n\n const maxLength = (columnWidth - headerHorizontalPadding * 2) / fontWidth;\n if (maxLength <= 0) {\n return;\n }\n\n context.save();\n\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n\n if (text.length > maxLength) {\n text = `${text.substring(0, maxLength - 1)}…`;\n\n const x = columnX + headerHorizontalPadding;\n const y = columnHeaderHeight * 0.5;\n\n context.textAlign = 'left';\n context.fillText(text, x, y);\n } else {\n const x = columnX + columnWidth * 0.5;\n const y = columnHeaderHeight * 0.5;\n\n context.textAlign = 'center';\n context.fillText(text, x, y);\n }\n\n context.restore();\n }\n\n drawRowHeaders(context, state) {\n const { mouseX, mouseY, metrics, theme, draggingRowSeparator } = state;\n const {\n gridY,\n rowHeaderWidth,\n height,\n visibleRows,\n visibleRowHeights,\n visibleRowYs,\n } = metrics;\n if (rowHeaderWidth <= 0) {\n return;\n }\n\n const {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorWidth = rowHeaderWidth * 0.5;\n const hiddenX = rowHeaderWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, rowHeaderWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(0, gridY + 0.5);\n context.lineTo(rowHeaderWidth, gridY + 0.5);\n\n const hiddenRows = [];\n let isPreviousRowHidden = false;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const y = gridY + rowY + rowHeight + 0.5;\n\n context.moveTo(0, y);\n context.lineTo(rowHeaderWidth, y);\n\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border right, interior to the headerWidth\n context.moveTo(rowHeaderWidth - 0.5, 0);\n context.lineTo(rowHeaderWidth - 0.5, height);\n\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenRows.length; i += 1) {\n const row = hiddenRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const minY =\n gridY + rowY + rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n hiddenX,\n minY,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize\n );\n }\n\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingRowSeparator;\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const rowY = visibleRowYs.get(highlightedSeparator);\n const rowHeight = visibleRowHeights.get(highlightedSeparator);\n const y = gridY + rowY + rowHeight + 0.5;\n\n const visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n const nextRow =\n visibleRowIndex < visibleRows.length - 1\n ? visibleRows[visibleRowIndex + 1]\n : null;\n const nextRowHeight =\n nextRow != null ? visibleRowHeights.get(nextRow) : null;\n const isRowHidden = rowHeight === 0;\n const isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y - headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n }\n\n context.beginPath();\n context.moveTo(0.5, y);\n context.lineTo(rowHeaderWidth + 0.5, y);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(0, gridY, rowHeaderWidth, height);\n context.clip();\n\n context.fillStyle = headerColor;\n context.textAlign = 'right';\n\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = visibleRowHeights.get(row);\n const y = visibleRowYs.get(row) + gridY;\n this.drawRowHeader(context, state, row, y, rowHeight);\n }\n\n context.restore();\n }\n\n drawRowHeader(context, state, row, rowY, rowHeight) {\n if (rowHeight <= 0) {\n return;\n }\n const { metrics, model, theme } = state;\n const { modelRows, rowHeaderWidth } = metrics;\n const modelRow = modelRows.get(row);\n const x = rowHeaderWidth - theme.cellHorizontalPadding;\n const y = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowHeader(modelRow), x, y);\n }\n\n drawRowFooters(context, state) {\n const {\n mouseX,\n mouseY,\n metrics,\n model,\n theme,\n draggingRowSeparator,\n } = state;\n const {\n gridY,\n gridX,\n maxX,\n modelRows,\n rowFooterWidth,\n height,\n verticalBarWidth,\n visibleRows,\n visibleRowHeights,\n visibleRowYs,\n width,\n } = metrics;\n if (rowFooterWidth <= 0) {\n return;\n }\n\n const {\n cellHorizontalPadding,\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor,\n } = theme;\n const hiddenSeparatorWidth = rowFooterWidth * 0.5;\n const hiddenX = rowFooterWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n const x = Math.min(gridX + maxX, width - rowFooterWidth - verticalBarWidth);\n\n context.save();\n\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(x, gridY, rowFooterWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(x, gridY + 0.5);\n context.lineTo(rowFooterWidth, gridY + 0.5);\n\n const hiddenRows = [];\n let isPreviousRowHidden = false;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const y = gridY + rowY + rowHeight + 0.5;\n\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth - 0.5, y);\n\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border left, interior to the headerWidth\n context.moveTo(x + 0.5, gridY);\n context.lineTo(x + 0.5, height);\n\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (let i = 0; i < hiddenRows.length; i += 1) {\n const row = hiddenRows[i];\n const rowY = visibleRowYs.get(row);\n const rowHeight = visibleRowHeights.get(row);\n const minY =\n gridY + rowY + rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(\n x + hiddenX,\n minY,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize\n );\n }\n\n context.fill();\n }\n\n if (headerSeparatorHoverColor) {\n let highlightedSeparator = draggingRowSeparator;\n if (highlightedSeparator == null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(\n mouseX,\n mouseY,\n metrics,\n theme\n );\n }\n\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n\n const rowY = visibleRowYs.get(highlightedSeparator);\n const rowHeight = visibleRowHeights.get(highlightedSeparator);\n const y = gridY + rowY + rowHeight + 0.5;\n\n const visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n const nextRow =\n visibleRowIndex < visibleRows.length - 1\n ? visibleRows[visibleRowIndex + 1]\n : null;\n const nextRowHeight =\n nextRow != null ? visibleRowHeights.get(nextRow) : null;\n const isRowHidden = rowHeight === 0;\n const isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(\n hiddenX,\n y - headerHiddenSeparatorSize * 0.5,\n hiddenSeparatorWidth,\n headerHiddenSeparatorSize * 0.5\n );\n }\n\n context.beginPath();\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth + 0.5, y);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(x, gridY, rowFooterWidth, height);\n context.clip();\n\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n\n const textX = x + cellHorizontalPadding;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = visibleRowHeights.get(row);\n if (rowHeight > 0) {\n const rowY = visibleRowYs.get(row) + gridY;\n const modelRow = modelRows.get(row);\n const textY = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n\n context.restore();\n }\n\n drawSelectedRanges(context, state, viewport = {}) {\n const {\n cursorColumn: column,\n cursorRow: row,\n draggingRow,\n draggingColumn,\n editingCell,\n metrics,\n model,\n selectedRanges,\n theme,\n } = state;\n const {\n visibleColumnWidths,\n visibleColumnXs,\n visibleRowHeights,\n visibleRowYs,\n width,\n height,\n } = metrics;\n const {\n left = metrics.left,\n top = metrics.top,\n right = metrics.right,\n bottom = metrics.bottom,\n minY = -10,\n maxY = height + 10,\n minX = -10,\n maxX = width + 10,\n } = viewport;\n if (selectedRanges.length === 0) {\n return;\n }\n\n const isCursorVisible =\n model.isEditable &&\n editingCell == null &&\n draggingRow == null &&\n draggingColumn == null &&\n visibleColumnXs.has(column) &&\n visibleRowYs.has(row);\n if (isCursorVisible) {\n // Punch a hole out where the active cell is, it gets styled differently.\n const x = visibleColumnXs.get(column);\n const y = visibleRowYs.get(row);\n const w = visibleColumnWidths.get(column);\n const h = visibleRowHeights.get(row);\n\n context.save();\n\n context.beginPath();\n\n context.rect(0, 0, width, height);\n context.rect(x, y, w, h);\n\n context.clip('evenodd');\n }\n\n // Draw selection ranges\n context.beginPath();\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const selectedRange = selectedRanges[i];\n const startColumn =\n selectedRange.startColumn !== null ? selectedRange.startColumn : left;\n const startRow =\n selectedRange.startRow !== null ? selectedRange.startRow : top;\n const endColumn =\n selectedRange.endColumn !== null ? selectedRange.endColumn : right;\n const endRow =\n selectedRange.endRow !== null ? selectedRange.endRow : bottom;\n if (\n endRow >= top &&\n bottom >= startRow &&\n endColumn >= left &&\n right >= startColumn\n ) {\n // Need to offset the x/y coordinates so that the line draws nice and crisp\n const x =\n startColumn >= left && visibleColumnXs.has(startColumn)\n ? Math.round(visibleColumnXs.get(startColumn)) + 0.5\n : minX;\n const y =\n startRow >= top && visibleRowYs.has(startRow)\n ? Math.max(Math.round(visibleRowYs.get(startRow)) + 0.5, 0.5)\n : minY;\n\n const endX =\n endColumn <= right && visibleColumnXs.has(endColumn)\n ? Math.round(\n visibleColumnXs.get(endColumn) +\n visibleColumnWidths.get(endColumn)\n ) - 0.5\n : maxX;\n const endY =\n endRow <= bottom && visibleRowYs.has(endRow)\n ? Math.round(\n visibleRowYs.get(endRow) + visibleRowHeights.get(endRow)\n ) - 0.5\n : maxY;\n\n context.rect(x, y, endX - x, endY - y);\n }\n\n // draw the inner transparent fill\n context.fillStyle = theme.selectionColor;\n context.fill();\n\n /* \n draw an \"inner stroke\" that's clipped to just inside of the rects\n to act as a casing to the outer stroke. 3px width because 1px is outside\n the rect (but clipped), 1px is \"on\" the rect (technically this pixel is\n a half pixel clip as well due to rects offset, but we are immediately painting\n over it), and then the 1px inside (which is the desired pixel).\n */\n context.save();\n context.clip();\n context.strokeStyle = theme.selectionOutlineCasingColor;\n context.lineWidth = 3;\n context.stroke();\n context.restore();\n\n // draw the outerstroke border on top of the inner stroke\n context.strokeStyle = theme.selectionOutlineColor;\n context.lineWidth = 1;\n context.stroke();\n }\n\n if (isCursorVisible) {\n context.restore();\n\n this.drawActiveCell(context, state, column, row);\n }\n }\n\n drawActiveCell(\n context,\n state,\n column,\n row,\n borderWidth = GridRenderer.ACTIVE_CELL_BORDER_WIDTH\n ) {\n const { metrics, theme } = state;\n const {\n visibleColumnWidths,\n visibleColumnXs,\n visibleRowHeights,\n visibleRowYs,\n } = metrics;\n const cellX = visibleColumnXs.get(column);\n const cellY = visibleRowYs.get(row);\n const cellW = visibleColumnWidths.get(column);\n const cellH = visibleRowHeights.get(row);\n\n // Now get the outline for the active cell\n let x = cellX - borderWidth * 0.5;\n let y = cellY - borderWidth * 0.5;\n let w = cellW + borderWidth;\n let h = cellH + borderWidth;\n\n // Make sure the outline is interior on the edge\n if (x <= 0) {\n w += x - 1;\n x = 1;\n }\n if (y <= 0) {\n h += y - 1;\n y = 1;\n }\n\n const { lineWidth } = context;\n context.beginPath();\n context.lineWidth = borderWidth;\n context.strokeStyle = theme.selectionOutlineColor;\n this.drawRoundedRect(context, x, y, w, h);\n context.stroke();\n context.lineWidth = lineWidth;\n }\n\n /**\n * Draws a rounded rectangle using the current state of the canvas.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x coordinate of the left side\n * @param {number} y coordinate of the top side\n * @param {number} w width of the rectangle\n * @param {number} h height of the rectangle\n * @param {number} r corner radius of the rectangle\n */\n drawRoundedRect(context, x, y, w, h, r = GridRenderer.DEFAULT_EDGE_RADIUS) {\n context.beginPath();\n context.moveTo(x + r, y);\n context.lineTo(x + w - r, y);\n context.quadraticCurveTo(x + w, y, x + w, y + r);\n context.lineTo(x + w, y + h - r);\n context.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n context.lineTo(x + r, y + h);\n context.quadraticCurveTo(x, y + h, x, y + h - r);\n context.lineTo(x, y + r);\n context.quadraticCurveTo(x, y, x + r, y);\n context.closePath();\n }\n\n drawDraggingColumn(context, state) {\n const {\n draggingColumn,\n draggingColumnOffset,\n metrics,\n mouseX,\n theme,\n } = state;\n if (draggingColumn == null) {\n return;\n }\n\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleColumnWidths,\n height,\n } = metrics;\n const x = visibleColumnXs.get(draggingColumn);\n const columnWidth = visibleColumnWidths.get(draggingColumn) + 1;\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n context.save();\n\n context.translate(gridX, 0);\n\n // First, we need to draw over the row stripes where the column is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(x, 0, columnWidth, height);\n\n context.translate(\n mouseX - x - gridX - draggingColumnOffset,\n gridY + reorderOffset\n );\n\n // Then draw the shadow of the moving column\n context.save();\n\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(x, -gridY, columnWidth, height);\n\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this column and all it's contents\n context.beginPath();\n context.rect(x, -gridY, columnWidth, height);\n context.clip();\n\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n this.drawColumnCellContents(context, state, draggingColumn);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n\n context.font = headerFont;\n\n this.drawColumnHeaders(context, state);\n\n context.restore();\n }\n\n drawDraggingRow(context, state) {\n const { draggingRow, draggingRowOffset, metrics, mouseY, theme } = state;\n if (draggingRow == null) {\n return;\n }\n\n const { gridX, gridY, visibleRowYs, visibleRowHeights, width } = metrics;\n const y = visibleRowYs.get(draggingRow);\n const rowHeight = visibleRowHeights.get(draggingRow) + 1;\n const {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor,\n } = theme;\n\n context.save();\n\n context.translate(0, gridY);\n\n // First, we need to draw over the row stripes where the row is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(0, y, width, rowHeight);\n\n context.translate(\n gridX + reorderOffset,\n mouseY - y - gridY - draggingRowOffset\n );\n\n // Then draw the shadow of the moving row\n context.save();\n\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n\n context.fillStyle = backgroundColor;\n context.fillRect(-gridX, y, width, rowHeight);\n\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this row and all it's contents\n context.beginPath();\n context.rect(-gridX, y, width, rowHeight);\n context.clip();\n\n context.font = font;\n\n this.drawGridBackground(context, state);\n\n this.drawCellContents(context, state);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n\n context.font = headerFont;\n\n this.drawRowHeaders(context, state);\n\n context.restore();\n }\n\n drawScrollBars(context, state) {\n const {\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n metrics,\n mouseX,\n mouseY,\n theme,\n } = state;\n if (theme.scrollBarSize <= 0) {\n return;\n }\n\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n width,\n height,\n handleHeight,\n handleWidth,\n scrollX,\n scrollY,\n hasHorizontalBar,\n hasVerticalBar,\n barWidth,\n barHeight,\n } = metrics;\n const {\n scrollBarBackgroundColor,\n scrollBarHoverBackgroundColor,\n scrollBarCasingColor,\n scrollBarCornerColor,\n scrollBarColor,\n scrollBarHoverColor,\n scrollBarActiveColor,\n scrollBarSize,\n scrollBarHoverSize,\n scrollBarCasingWidth,\n } = theme;\n\n const isInbounds = mouseX <= width && mouseY <= height;\n\n const isVerticalBarHover =\n isDraggingVerticalScrollBar ||\n (hasVerticalBar &&\n !isDraggingHorizontalScrollBar &&\n !isDragging &&\n mouseX >= width - scrollBarHoverSize &&\n mouseY <= barHeight + columnHeaderHeight &&\n isInbounds);\n\n const isHorizontalBarHover =\n isDraggingHorizontalScrollBar ||\n (hasHorizontalBar &&\n !isDraggingVerticalScrollBar &&\n !isDragging &&\n !isVerticalBarHover && // vert bar gets priorty in overlapped corner hover area\n mouseY >= height - scrollBarHoverSize &&\n mouseX <= barWidth - rowHeaderWidth &&\n isInbounds);\n\n const hScrollBarSize = isHorizontalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n const vScrollBarSize = isVerticalBarHover\n ? scrollBarHoverSize\n : scrollBarSize;\n\n context.translate(rowHeaderWidth, columnHeaderHeight);\n\n if (hasHorizontalBar && hasVerticalBar) {\n // That little corner in the bottom right\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(\n width - rowHeaderWidth - scrollBarSize,\n height - columnHeaderHeight - scrollBarSize,\n scrollBarSize,\n scrollBarSize\n );\n context.fillStyle = scrollBarCornerColor;\n context.fillRect(\n width - rowHeaderWidth - scrollBarSize + scrollBarCasingWidth,\n height - columnHeaderHeight - scrollBarSize + scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth,\n scrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasHorizontalBar) {\n const x = scrollX;\n const y = height - columnHeaderHeight - hScrollBarSize;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(0, y, barWidth, hScrollBarSize - scrollBarCasingWidth);\n\n // scrollbar track\n context.fillStyle = isHorizontalBarHover\n ? scrollBarHoverBackgroundColor\n : scrollBarBackgroundColor;\n context.fillRect(\n 0,\n y + scrollBarCasingWidth,\n barWidth,\n hScrollBarSize - scrollBarCasingWidth\n );\n\n // scrollbar thumb\n if (isDraggingHorizontalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isHorizontalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n\n context.fillRect(\n x,\n y + scrollBarCasingWidth,\n handleWidth,\n hScrollBarSize - scrollBarCasingWidth\n );\n }\n\n if (hasVerticalBar) {\n const x = width - rowHeaderWidth - vScrollBarSize;\n const y = scrollY;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(x, 0, vScrollBarSize - scrollBarCasingWidth, barHeight);\n\n // scrollbar track\n context.fillStyle = isVerticalBarHover\n ? scrollBarHoverBackgroundColor\n : scrollBarBackgroundColor;\n context.fillRect(\n x + scrollBarCasingWidth,\n 0,\n vScrollBarSize - scrollBarCasingWidth,\n barHeight\n );\n\n // scrollbar thumb\n if (isDraggingVerticalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isVerticalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n\n context.fillRect(\n x + scrollBarCasingWidth,\n y,\n vScrollBarSize - scrollBarCasingWidth,\n handleHeight\n );\n }\n\n context.translate(-rowHeaderWidth, -columnHeaderHeight);\n }\n}\n\nexport default GridRenderer;\n"],"file":"GridRenderer.js"}