@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
package/dist/Grid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Grid.jsx"],"names":["React","PureComponent","classNames","memoize","PropTypes","clamp","GridMetricCalculator","GridModel","GridMouseHandler","GridTheme","GridRange","GridRenderer","GridUtils","GridSelectionMouseHandler","GridColumnMoveMouseHandler","GridColumnSeparatorMouseHandler","GridHorizontalScrollBarMouseHandler","GridRowMoveMouseHandler","GridRowSeparatorMouseHandler","GridRowTreeMouseHandler","GridScrollBarCornerMouseHandler","GridVerticalScrollBarMouseHandler","EditMouseHandler","KeyHandler","EditKeyHandler","PasteKeyHandler","SelectionKeyHandler","TreeKeyHandler","CellInputField","PasteError","Grid","getScale","context","devicePixelRatio","window","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","getCursorClassName","cursor","constructor","props","keyHandlers","sort","a","b","order","mouseHandlers","handleClick","bind","handleContextMenu","handleEditCellCancel","handleEditCellChange","handleEditCellCommit","handleDoubleClick","handleKeyDown","handleMouseDown","handleMouseDrag","handleMouseMove","handleMouseLeave","handleMouseUp","handleResize","handleWheel","metricCalculator","movedColumns","movedRows","renderer","canvas","canvasContext","animationFrame","prevMetrics","metrics","isStuckToBottom","isStuckToRight","documentCursor","dragTimer","state","top","left","topOffset","leftOffset","draggingColumn","draggingRow","draggingColumnOffset","draggingRowOffset","draggingColumnSeparator","draggingRowSeparator","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","isDragging","mouseX","mouseY","cursorRow","cursorColumn","selectionStartRow","selectionStartColumn","selectionEndRow","selectionEndColumn","selectedRanges","lastSelectedRanges","editingCell","componentDidMount","initContext","addEventListener","passive","updateCanvasScale","updateCanvas","componentDidUpdate","prevProps","prevState","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevMovedRows","prevStateMovedColumns","currentStateMovedColumns","setState","updateMetrics","requestUpdateCanvas","bottomVisible","rightVisible","rowCount","columnCount","height","width","prevRowCount","prevColumnCount","prevHeight","prevWidth","metricState","getMetricState","lastTop","getLastTop","lastLeft","getLastLeft","validateSelection","checkSelectionChange","componentWillUnmount","cancelAnimationFrame","removeEventListener","stopDragTimer","getTheme","theme","getGridPointFromEvent","event","rect","getBoundingClientRect","x","clientX","y","clientY","getGridPointFromXY","model","stateOverride","clientWidth","clientHeight","getKeyHandlers","getCachedKeyHandlers","getMouseHandlers","getCachedMouseHandlers","getModelColumn","columnIndex","modelColumns","get","getModelRow","rowIndex","modelRows","toggleRowExpanded","row","modelRow","isRowExpandable","setRowExpanded","isRowExpanded","clearSelectedRanges","commitSelection","moveCursorToPosition","setSelectedRanges","gridRanges","length","range","boundedRange","newCursorRow","newCursorColumn","containsCell","column","startCell","startColumn","startRow","endColumn","endRow","canvasOptions","getContext","requestAnimationFrame","onViewChanged","drawCanvas","scale","parentElement","style","Math","floor","getMetrics","oldSelectedRanges","onSelectionChanged","i","trimSelectedRanges","slice","beginSelection","moveSelection","extendSelection","maximizePreviousRange","autoSelectRow","autoSelectColumn","lastSelectedRange","right","bottom","min","max","selectedRange","makeNormalized","equals","newRanges","concat","selectedColumn","selectedRow","push","cellCount","rangeArraysEqual","newSelectedRanges","lastRange","contains","remainder","subtract","pop","splice","consolidate","nextCursor","nextCell","boundedRanges","selectAll","moveCursor","deltaColumn","deltaRow","moveCursorInDirection","direction","SELECTION_DIRECTION","DOWN","ranges","makeCell","gridRange","moveViewToCell","keepCursorInView","topVisible","leftVisible","isFloatingRow","getTopForTopVisible","getTopForBottomVisible","isFloatingColumn","getLeftForLeftVisible","getLeftForRightVisible","setViewState","viewState","forceUpdate","startEditing","isQuickEdit","selectionRange","value","undefined","modelColumn","cell","editValueForCell","isValidForCell","pasteValue","isEditable","every","isEditableRange","edits","modelRanges","getModelRanges","forEachCell","text","setValues","tableHeight","tableWidth","map","forEach","e","onError","setValueForCell","setValueForRanges","isSelected","rowSelected","columnSelected","addDocumentCursor","document","documentElement","classList","remove","add","removeDocumentCursor","startDragTimer","mouseEvent","MouseEvent","setTimeout","dragTimeout","clearTimeout","renderState","save","restore","focus","isFocused","activeElement","gridPoint","mouseHandler","onClick","stopPropagation","preventDefault","onContextMenu","keyHandler","result","onDown","notifyMouseHandlers","functionName","updateCoordinates","addCursorToDocument","button","FUNCTION_NAMES","DOUBLE_CLICK","MOVE","LEAVE","DRAG","UP","WHEEL","defaultPrevented","deltaX","deltaY","getScrollDelta","barWidth","barHeight","rowHeight","columnWidth","visibleColumnWidths","getVisibleColumnWidth","scrollSnapToColumn","abs","visibleRowHeights","getVisibleRowHeight","scrollSnapToRow","fillRange","renderInputField","gridX","gridY","visibleColumnXs","visibleRowYs","w","h","isVisible","wrapperStyle","position","opacity","inputStyle","textAlign","textAlignForCell","isValid","error","render","userTheme","propTypes","shape","bool","instanceOf","isRequired","arrayOf","from","number","to","func","defaultProps","alpha"],"mappings":"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","sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport clamp from 'lodash.clamp';\nimport GridMetricCalculator from './GridMetricCalculator';\nimport GridModel from './GridModel';\nimport GridMouseHandler from './GridMouseHandler';\nimport GridTheme from './GridTheme';\nimport GridRange from './GridRange';\nimport GridRenderer from './GridRenderer';\nimport GridUtils from './GridUtils';\nimport {\n GridSelectionMouseHandler,\n GridColumnMoveMouseHandler,\n GridColumnSeparatorMouseHandler,\n GridHorizontalScrollBarMouseHandler,\n GridRowMoveMouseHandler,\n GridRowSeparatorMouseHandler,\n GridRowTreeMouseHandler,\n GridScrollBarCornerMouseHandler,\n GridVerticalScrollBarMouseHandler,\n EditMouseHandler,\n} from './mouse-handlers';\nimport './Grid.scss';\nimport KeyHandler from './KeyHandler';\nimport {\n EditKeyHandler,\n PasteKeyHandler,\n SelectionKeyHandler,\n TreeKeyHandler,\n} from './key-handlers';\nimport CellInputField from './CellInputField';\nimport PasteError from './errors/PasteError';\n\n/**\n * High performance, extendible, themeable grid component.\n * Architectured to be fast and handle billions of rows/columns by default.\n * The base model does not provide support for sorting, filtering, etc.\n * To get that functionality, extend GridModel/GridRenderer, and add onClick/onContextMenu handlers to implement your own sort.\n *\n * Extend GridModel with your own data model to provide the data for the grid.\n * Extend GridTheme to change the appearance if the grid. See GridTheme for all the settable values.\n * Extend GridMetricCalculator to provide different metrics for the grid, such as column sizing, header sizing, etc.\n * Extend GridRenderer to have complete control over the rendering process. Can override just one method such as drawColumnHeader, or override the whole drawCanvas process.\n *\n * Add an onViewChanged callback to page in/out data as user moves around the grid\n * Can also add onClick and onContextMenu handlers to add custom functionality and menus.\n */\nclass Grid extends PureComponent {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n static pixelsPerLine = 100 / 3;\n\n static dragTimeout = 1000;\n\n static getTheme = memoize(userTheme => ({ ...GridTheme, ...userTheme }));\n\n static getScale(context) {\n const devicePixelRatio = window.devicePixelRatio || 1;\n const backingStorePixelRatio =\n context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio ||\n 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n static getCursorClassName(cursor) {\n return cursor ? `grid-cursor-${cursor}` : null;\n }\n\n constructor(props) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n\n const { metricCalculator, movedColumns, movedRows, renderer } = props;\n\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n\n this.canvas = null;\n this.canvasContext = null;\n this.animationFrame = null;\n\n this.prevMetrics = null;\n this.metrics = null;\n\n this.isStuckToBottom = false;\n this.isStuckToRight = false;\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [\n new EditKeyHandler(400),\n new PasteKeyHandler(450),\n new SelectionKeyHandler(500),\n new TreeKeyHandler(900),\n ];\n this.mouseHandlers = [\n new GridRowSeparatorMouseHandler(100),\n new GridColumnSeparatorMouseHandler(200),\n new GridRowMoveMouseHandler(300),\n new GridColumnMoveMouseHandler(400),\n new EditMouseHandler(450),\n new GridVerticalScrollBarMouseHandler(500),\n new GridHorizontalScrollBarMouseHandler(600),\n new GridScrollBarCornerMouseHandler(700),\n new GridRowTreeMouseHandler(800),\n new GridSelectionMouseHandler(900),\n ];\n\n this.state = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: 0,\n left: 0,\n\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n // Should be less than the width of the column\n topOffset: 0,\n leftOffset: 0,\n\n // current column/row that user is dragging\n draggingColumn: null,\n draggingRow: null,\n\n // Offset when dragging a column/row\n draggingColumnOffset: null,\n draggingRowOffset: null,\n\n // When drawing header separators for resizing\n draggingColumnSeparator: null,\n draggingRowSeparator: null,\n\n isDraggingHorizontalScrollBar: false,\n isDraggingVerticalScrollBar: false,\n\n // Anything is performing a drag, for blocking hover rendering\n isDragging: false,\n\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: null,\n mouseY: null,\n\n // Move operations the user has performed on this grids columns/rows\n movedColumns,\n movedRows,\n\n // Cursor (highlighted cell) location and active selected range\n cursorRow: null,\n cursorColumn: null,\n selectionStartRow: null,\n selectionStartColumn: null,\n selectionEndRow: null,\n selectionEndColumn: null,\n\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: [],\n lastSelectedRanges: [],\n\n // The mouse cursor style to use when hovering over the grid element\n cursor: null,\n\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: null,\n };\n }\n\n componentDidMount() {\n this.initContext();\n\n // Need to explicitly add wheel event to canvas so we can preventDefault/avoid passive listener issue\n // Otherwise React attaches listener at doc level and you can't prevent default\n // https://github.com/facebook/react/issues/14856\n this.canvas.addEventListener('wheel', this.handleWheel, { passive: false });\n window.addEventListener('resize', this.handleResize);\n\n this.updateCanvasScale();\n this.updateCanvas();\n }\n\n componentDidUpdate(prevProps, prevState) {\n const {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n } = this.props;\n const {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevMovedRows,\n } = prevProps;\n const { movedColumns: prevStateMovedColumns } = prevState;\n const {\n draggingColumn,\n movedColumns: currentStateMovedColumns,\n } = this.state;\n\n if (prevPropMovedColumns !== movedColumns) {\n this.setState({ movedColumns });\n }\n\n if (prevMovedRows !== movedRows) {\n this.setState({ movedRows });\n }\n\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n\n if (isStickyBottom !== prevIsStickyBottom) {\n this.isStuckToBottom = false;\n }\n\n if (isStickyRight !== prevIsStickyRight) {\n this.isStuckToRight = false;\n }\n\n this.updateMetrics();\n\n this.requestUpdateCanvas();\n\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n\n const {\n bottomVisible,\n rightVisible,\n rowCount,\n columnCount,\n top,\n left,\n height,\n width,\n } = this.metrics;\n const {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth,\n } = this.prevMetrics;\n const metricState = this.getMetricState();\n\n if (prevRowCount !== rowCount || height !== prevHeight) {\n const lastTop = this.metricCalculator.getLastTop(metricState);\n if (\n (this.isStuckToBottom &&\n bottomVisible < rowCount - 1 &&\n bottomVisible > 0 &&\n top > 0) ||\n top > lastTop\n ) {\n this.setState({ top: lastTop });\n }\n }\n\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n const lastLeft = this.metricCalculator.getLastLeft(metricState);\n if (\n (this.isStuckToRight &&\n rightVisible < columnCount - 1 &&\n rightVisible > 0 &&\n left > 0) ||\n left > lastLeft\n ) {\n this.setState({ left: lastLeft });\n }\n }\n\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n }\n\n componentWillUnmount() {\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n\n this.canvas.removeEventListener('wheel', this.handleWheel, {\n passive: false,\n });\n\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('resize', this.handleResize);\n\n this.stopDragTimer();\n }\n\n getTheme() {\n const { theme } = this.props;\n return Grid.getTheme(theme);\n }\n\n getGridPointFromEvent(event) {\n const rect = this.canvas.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n\n getGridPointFromXY(x, y) {\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n\n getMetricState(state = this.state) {\n const theme = this.getTheme();\n const { model, stateOverride } = this.props;\n const context = this.canvasContext;\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n const {\n left,\n top,\n leftOffset,\n topOffset,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n } = state;\n\n return {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n ...stateOverride,\n };\n }\n\n getCachedKeyHandlers = memoize(keyHandlers =>\n [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)\n );\n\n getKeyHandlers() {\n const { keyHandlers } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n\n getCachedMouseHandlers = memoize(mouseHandlers =>\n [...mouseHandlers, ...this.mouseHandlers].sort((a, b) => a.order - b.order)\n );\n\n getMouseHandlers() {\n const { mouseHandlers } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n getModelColumn(columnIndex) {\n return this.metrics?.modelColumns?.get(columnIndex);\n }\n\n getModelRow(rowIndex) {\n return this.metrics?.modelRows?.get(rowIndex);\n }\n\n toggleRowExpanded(row) {\n const { metrics } = this;\n const { modelRows } = metrics;\n\n const modelRow = modelRows.get(row);\n const { model } = this.props;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (model.isRowExpandable(modelRow)) {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow));\n }\n this.clearSelectedRanges();\n this.commitSelection(); // Need to commit before moving in case we're selecting same row again\n this.moveCursorToPosition(0, row);\n this.commitSelection();\n\n this.isStuckToBottom = false;\n }\n\n /** Allows the selected range to be set programatically */\n setSelectedRanges(gridRanges) {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const { cursorRow, cursorColumn, selectedRanges } = this.state;\n this.setState({\n selectedRanges: gridRanges,\n lastSelectedRanges: selectedRanges,\n });\n if (gridRanges.length > 0) {\n const range = GridRange.boundedRange(\n gridRanges[0],\n columnCount,\n rowCount\n );\n let newCursorRow = cursorRow;\n let newCursorColumn = cursorColumn;\n if (!range.containsCell(cursorColumn, cursorRow)) {\n ({ row: newCursorRow, column: newCursorColumn } = range.startCell());\n }\n\n this.setState({\n selectionStartColumn: range.startColumn,\n selectionStartRow: range.startRow,\n selectionEndColumn: range.endColumn,\n selectionEndRow: range.endRow,\n cursorColumn: newCursorColumn,\n cursorRow: newCursorRow,\n });\n }\n }\n\n initContext() {\n const { canvas } = this;\n const { canvasOptions } = this.props;\n\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n\n requestUpdateCanvas() {\n if (this.animationFrame != null) {\n return;\n }\n\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n\n this.updateCanvas(this.metrics);\n });\n }\n\n updateCanvas(metrics = this.updateMetrics()) {\n this.updateCanvasScale();\n\n const { onViewChanged } = this.props;\n onViewChanged(metrics);\n\n this.drawCanvas(metrics);\n }\n\n updateCanvasScale() {\n const { canvas, canvasContext } = this;\n const scale = Grid.getScale(canvasContext);\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n const { width, height } = canvas.parentElement.getBoundingClientRect();\n canvas.style.width = `${Math.floor(width)}px`;\n canvas.style.height = `${Math.floor(height)}px`;\n canvas.width = Math.floor(width) * scale;\n canvas.height = Math.floor(height) * scale;\n canvasContext.scale(scale, scale);\n }\n\n updateMetrics(state = this.state) {\n this.prevMetrics = this.metrics;\n\n const { metricCalculator } = this;\n const metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n\n return this.metrics;\n }\n\n checkSelectionChange(prevState) {\n const { selectedRanges: oldSelectedRanges } = prevState;\n const { selectedRanges } = this.state;\n\n if (selectedRanges !== oldSelectedRanges) {\n const { onSelectionChanged } = this.props;\n onSelectionChanged(selectedRanges);\n }\n }\n\n validateSelection() {\n const { model } = this.props;\n const { selectedRanges } = this.state;\n const { columnCount, rowCount } = model;\n\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const range = selectedRanges[i];\n if (\n (range.endColumn != null && range.endColumn >= columnCount) ||\n (range.endRow != null && range.endRow >= rowCount)\n ) {\n // Just clear the selection rather than trying to trim it.\n this.setState({ selectedRanges: [], lastSelectedRanges: [] });\n return false;\n }\n }\n return true;\n }\n\n clearSelectedRanges() {\n const { selectedRanges } = this.state;\n this.setState({ selectedRanges: [], lastSelectedRanges: selectedRanges });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges() {\n const { selectedRanges } = this.state;\n if (selectedRanges.length > 0) {\n this.setState({\n selectedRanges: selectedRanges.slice(selectedRanges.length - 1),\n });\n }\n }\n\n beginSelection(column, row) {\n this.setState({\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n cursorColumn: column,\n cursorRow: row,\n });\n }\n\n /**\n * Moves the selection to the cell specified\n * @param {number} column The column index to move the cursor to\n * @param {number} row The row index to move the cursor to\n * @param {boolean} extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param {boolean} maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(\n column,\n row,\n extendSelection = false,\n maximizePreviousRange = false\n ) {\n this.setState(state => {\n const { selectedRanges, selectionStartRow, selectionStartColumn } = state;\n const { theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n if (extendSelection && selectedRanges.length > 0) {\n const lastSelectedRange = selectedRanges[selectedRanges.length - 1];\n let left = null;\n let top = null;\n let right = null;\n let bottom = null;\n if (maximizePreviousRange) {\n left = autoSelectRow\n ? null\n : Math.min(column, lastSelectedRange.startColumn);\n top = autoSelectColumn\n ? null\n : Math.min(row, lastSelectedRange.startRow);\n right = autoSelectRow\n ? null\n : Math.max(column, lastSelectedRange.endColumn);\n bottom = autoSelectColumn\n ? null\n : Math.max(row, lastSelectedRange.endRow);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (!autoSelectRow) {\n left = selectionStartColumn;\n }\n if (!autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow ? null : column;\n bottom = autoSelectColumn ? null : row;\n }\n const selectedRange = GridRange.makeNormalized(\n left,\n top,\n right,\n bottom\n );\n\n if (lastSelectedRange.equals(selectedRange)) {\n return null;\n }\n\n const newRanges = [].concat(selectedRanges);\n newRanges[newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n }\n const newRanges = [].concat(selectedRanges);\n const selectedColumn = autoSelectRow ? null : column;\n const selectedRow = autoSelectColumn ? null : row;\n newRanges.push(\n GridRange.makeNormalized(\n selectedColumn,\n selectedRow,\n selectedColumn,\n selectedRow\n )\n );\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n });\n }\n\n /**\n * Commits the last selected range to the selected ranges.\n * First checks if the last range is completely contained within another range, and if it\n * is then it blows those ranges apart.\n * Then it consolidates all the selected ranges, reducing them.\n */\n commitSelection() {\n this.setState(state => {\n const { theme } = this.props;\n const { autoSelectRow } = theme;\n const {\n selectedRanges,\n lastSelectedRanges,\n cursorRow,\n cursorColumn,\n } = state;\n\n if (\n selectedRanges.length === 1 &&\n (autoSelectRow\n ? GridRange.rowCount(selectedRanges) === 1\n : GridRange.cellCount(selectedRanges) === 1) &&\n GridRange.rangeArraysEqual(selectedRanges, lastSelectedRanges)\n ) {\n // If it's the exact same single selection, then deselect.\n // For if we click on one cell multiple times.\n return { selectedRanges: [], lastSelectedRanges: [] };\n }\n\n let newSelectedRanges = selectedRanges.slice();\n if (newSelectedRanges.length > 1) {\n // Check if the latest selection is entirely within a previously selected range\n // If that's the case, then deselect that section instead\n const lastRange = newSelectedRanges[newSelectedRanges.length - 1];\n for (let i = 0; i < newSelectedRanges.length - 1; i += 1) {\n const selectedRange = newSelectedRanges[i];\n if (selectedRange.contains(lastRange)) {\n // We found a match, now remove the two matching ranges, and add back\n // the remainder of the two\n const remainder = selectedRange.subtract(lastRange);\n newSelectedRanges.pop();\n newSelectedRanges.splice(i, 1);\n newSelectedRanges = newSelectedRanges.concat(remainder);\n break;\n }\n }\n\n newSelectedRanges = GridRange.consolidate(newSelectedRanges);\n }\n\n let newCursorColumn = cursorColumn;\n let newCursorRow = cursorRow;\n if (!GridRange.containsCell(newSelectedRanges, cursorColumn, cursorRow)) {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const nextCursor = GridRange.nextCell(\n GridRange.boundedRanges(selectedRanges, columnCount, rowCount)\n );\n if (nextCursor != null) {\n ({ column: newCursorColumn, row: newCursorRow } = nextCursor);\n } else {\n newCursorColumn = null;\n newCursorRow = null;\n }\n }\n return {\n cursorRow: newCursorRow,\n cursorColumn: newCursorColumn,\n selectedRanges: newSelectedRanges,\n lastSelectedRanges: selectedRanges,\n };\n });\n }\n\n selectAll() {\n const { model, theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n const top = autoSelectColumn ? null : 0;\n const bottom = autoSelectColumn ? null : model.rowCount - 1;\n const left = autoSelectRow ? null : 0;\n const right = autoSelectRow ? null : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n moveCursor(deltaColumn, deltaRow, extendSelection) {\n const {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow,\n } = this.state;\n const column = extendSelection ? selectionEndColumn : cursorColumn;\n const row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n const { left, top } = this.state;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n\n const left = clamp(column + deltaColumn, 0, columnCount - 1);\n const top = clamp(row + deltaRow, 0, rowCount - 1);\n this.moveCursorToPosition(left, top, extendSelection);\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param {string} direction The direction to move the cursor in\n */\n moveCursorInDirection(direction = GridRange.SELECTION_DIRECTION.DOWN) {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const { cursorRow, cursorColumn, selectedRanges } = this.state;\n const ranges =\n selectedRanges.length > 0\n ? selectedRanges\n : [GridRange.makeCell(cursorColumn, cursorRow)];\n let nextCursor = null;\n if (ranges.length === 1 && GridRange.cellCount(ranges) === 1) {\n // If we only have one cell selected, we want to update the cursor and we want to update the selected cells\n const gridRange = new GridRange(0, 0, columnCount - 1, rowCount - 1);\n nextCursor =\n gridRange.nextCell(cursorColumn, cursorRow, direction) ??\n gridRange.startCell(direction);\n } else {\n nextCursor = GridRange.nextCell(\n GridRange.boundedRanges(ranges, columnCount, rowCount),\n cursorColumn,\n cursorRow,\n direction\n );\n }\n\n if (nextCursor != null) {\n const { column, row } = nextCursor;\n this.setState({\n cursorColumn: column,\n cursorRow: row,\n });\n\n if (!GridRange.containsCell(selectedRanges, column, row)) {\n this.setState({\n selectedRanges: [GridRange.makeCell(column, row)],\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n });\n }\n\n this.moveViewToCell(nextCursor.column, nextCursor.row);\n }\n }\n\n /**\n * Move a cursor to the specified position in the grid.\n * @param {number|null} column The column index to move the cursor to\n * @param {number|null} row The row index to move the cursor to\n * @param {boolean} extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param {boolean} keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param {boolean} maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n */\n moveCursorToPosition(\n column,\n row,\n extendSelection = false,\n keepCursorInView = true,\n maximizePreviousRange = false\n ) {\n if (!extendSelection) {\n this.beginSelection(column, row);\n }\n\n this.moveSelection(column, row, extendSelection, maximizePreviousRange);\n\n if (keepCursorInView) {\n this.moveViewToCell(column, row);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param {number|null} column The column index to bring into view\n * @param {number|null} row The row index to bring into view\n */\n moveViewToCell(column, row) {\n const { metricCalculator } = this;\n const {\n bottomVisible,\n rightVisible,\n topVisible,\n leftVisible,\n } = this.metrics;\n const metricState = this.getMetricState(this.state);\n let { top, left, topOffset, leftOffset } = this.state;\n\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n\n this.setViewState({ top, left, topOffset, leftOffset });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param {object} viewState New state properties to set.\n * @param {boolean} forceUpdate Whether to force an update.\n */\n setViewState(viewState, forceUpdate = false) {\n const { isStickyBottom, isStickyRight } = this.props;\n const { top, left } = viewState;\n const { lastTop, lastLeft } = this.metrics;\n if (top != null) {\n this.isStuckToBottom = isStickyBottom && top >= lastTop;\n }\n if (left != null) {\n this.isStuckToRight = isStickyRight && left >= lastLeft;\n }\n\n this.setState(viewState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param {number} column The visible column index to start editing\n * @param {number} row The visible row index to start editing\n * @param {boolean} isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param {number[]|null} selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param {string?} value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(\n column,\n row,\n isQuickEdit = false,\n selectionRange = null,\n value = undefined\n ) {\n const { model } = this.props;\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n const cell = {\n column,\n row,\n selectionRange,\n value:\n value !== undefined\n ? value\n : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit,\n };\n\n this.setState({ editingCell: cell, cursorColumn: column, cursorRow: row });\n this.moveViewToCell(column, row);\n }\n\n isValidForCell(column, row, value) {\n const { model } = this.props;\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n return model.isValidForCell(modelColumn, modelRow, value);\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param {string[][] | string} value Table or a string that is being pasted\n */\n async pasteValue(value) {\n const { model } = this.props;\n const { movedColumns, movedRows, selectedRanges } = this.state;\n\n try {\n if (\n !model.isEditable ||\n !selectedRanges.every(range => model.isEditableRange(range))\n ) {\n throw new PasteError(\"Can't paste in to read-only area.\");\n }\n\n if (selectedRanges.length <= 0) {\n throw new PasteError('Select an area to paste to.');\n }\n\n if (typeof value === 'string') {\n // Just paste the value into all the selected cells\n const edits = [];\n\n const modelRanges = GridUtils.getModelRanges(\n selectedRanges,\n movedColumns,\n movedRows\n );\n GridRange.forEachCell(modelRanges, (x, y) => {\n edits.push({ x, y, text: value });\n });\n await model.setValues(edits);\n return;\n }\n\n // Otherwise it's a table of data\n const tableHeight = value.length;\n const tableWidth = value[0].length;\n const { columnCount, rowCount } = model;\n let ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n if (\n ranges.every(\n range =>\n GridRange.cellCount([range]) === 1 &&\n range.startColumn + tableWidth <= columnCount &&\n range.startRow + tableHeight <= rowCount\n )\n ) {\n // Remap the selected ranges\n ranges = ranges.map(\n range =>\n new GridRange(\n range.startColumn,\n range.startRow,\n range.startColumn + tableWidth - 1,\n range.startRow + tableHeight - 1\n )\n );\n this.setSelectedRanges(ranges);\n }\n\n if (\n !ranges.every(\n range =>\n GridRange.rowCount([range]) === tableHeight &&\n GridRange.columnCount([range]) === tableWidth\n )\n ) {\n throw new PasteError('Copy and paste area are not same size.');\n }\n\n const edits = [];\n ranges.forEach(range => {\n for (let x = 0; x < tableWidth; x += 1) {\n for (let y = 0; y < tableHeight; y += 1) {\n edits.push({\n x: range.startColumn + x,\n y: range.startRow + y,\n text: value[y][x],\n });\n }\n }\n });\n await model.setValues(edits);\n } catch (e) {\n const { onError } = this.props;\n onError(e);\n }\n }\n\n setValueForCell(column, row, value) {\n const { model } = this.props;\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value);\n }\n }\n\n setValueForRanges(ranges, value) {\n const { model } = this.props;\n const { movedColumns, movedRows } = this.state;\n\n const modelRanges = GridUtils.getModelRanges(\n ranges,\n movedColumns,\n movedRows\n );\n model.setValueForRanges(modelRanges, value);\n }\n\n isSelected(row, column) {\n const { selectedRanges } = this.state;\n\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const selectedRange = selectedRanges[i];\n const rowSelected =\n selectedRange.startRow === null ||\n (selectedRange.startRow <= row && row <= selectedRange.endRow);\n const columnSelected =\n selectedRange.startColumn === null ||\n (selectedRange.startColumn <= column &&\n column <= selectedRange.endColumn);\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n\n return false;\n }\n\n addDocumentCursor(cursor = null) {\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n document.documentElement.classList.remove(this.documentCursor);\n this.documentCursor = Grid.getCursorClassName(cursor);\n document.documentElement.classList.add(this.documentCursor);\n document.documentElement.classList.add('grid-block-events');\n }\n\n removeDocumentCursor() {\n if (this.documentCursor) {\n document.documentElement.classList.remove(this.documentCursor);\n document.documentElement.classList.remove('grid-block-events');\n this.documentCursor = null;\n }\n }\n\n startDragTimer(event) {\n this.stopDragTimer();\n\n const mouseEvent = new MouseEvent('custom', event);\n\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n\n stopDragTimer() {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n */\n drawCanvas(metrics = this.updateMetrics()) {\n const {\n left,\n top,\n cursorColumn,\n cursorRow,\n draggingColumn,\n draggingColumnOffset,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n mouseX,\n mouseY,\n selectedRanges,\n } = this.state;\n const { model, stateOverride } = this.props;\n const { renderer } = this;\n const context = this.canvasContext;\n const theme = this.getTheme();\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n const renderState = {\n left,\n top,\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\n draggingColumnOffset,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n cursorColumn,\n cursorRow,\n ...stateOverride,\n };\n\n context.save();\n\n renderer.drawCanvas(renderState);\n\n context.restore();\n }\n\n focus() {\n this.canvas.focus();\n }\n\n isFocused() {\n return document.activeElement === this.canvas;\n }\n\n handleClick(event) {\n const gridPoint = this.getGridPointFromEvent(event);\n\n const mouseHandlers = this.getMouseHandlers();\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n if (mouseHandler.onClick(gridPoint, this, event)) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n\n this.canvas.focus();\n }\n\n handleContextMenu(event) {\n const gridPoint = this.getGridPointFromEvent(event);\n\n const mouseHandlers = this.getMouseHandlers();\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n if (mouseHandler.onContextMenu(gridPoint, this, event)) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n handleKeyDown(e) {\n const keyHandlers = this.getKeyHandlers();\n for (let i = 0; i < keyHandlers.length; i += 1) {\n const keyHandler = keyHandlers[i];\n const result = keyHandler.onDown(e, this);\n if (result) {\n if (result?.stopPropagation ?? true) e.stopPropagation();\n if (result?.preventDefault ?? true) e.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param {String} functionName The name of the function in the mouse handler to call\n * @param {MouseEvent} event The mouse event to notify\n * @param {Boolean} updateCoordinates Whether to update the mouse coordinates\n * @param {Boolean} addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(\n functionName,\n event,\n updateCoordinates = true,\n addCursorToDocument = false\n ) {\n const gridPoint = this.getGridPointFromEvent(event);\n const mouseHandlers = this.getMouseHandlers();\n let cursor = null;\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n const result =\n mouseHandler[functionName] &&\n mouseHandler[functionName](gridPoint, this, event);\n if (result) {\n if (mouseHandler.cursor != null) {\n ({ cursor } = mouseHandler);\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n if (result?.stopPropagation ?? true) event.stopPropagation();\n if (result?.preventDefault ?? true) event.preventDefault();\n break;\n }\n }\n\n this.setState({ cursor });\n\n if (updateCoordinates) {\n const { x, y } = gridPoint;\n this.setState({ mouseX: x, mouseY: y });\n }\n }\n\n handleMouseDown(event) {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n\n if (event.button != null && event.button !== 0) {\n return;\n }\n\n this.notifyMouseHandlers(GridMouseHandler.FUNCTION_NAMES.DOWN, event);\n\n this.startDragTimer(event);\n }\n\n handleDoubleClick(event) {\n this.notifyMouseHandlers(\n GridMouseHandler.FUNCTION_NAMES.DOUBLE_CLICK,\n event\n );\n }\n\n handleMouseMove(event) {\n this.notifyMouseHandlers(GridMouseHandler.FUNCTION_NAMES.MOVE, event);\n }\n\n handleMouseLeave(event) {\n this.notifyMouseHandlers(\n GridMouseHandler.FUNCTION_NAMES.LEAVE,\n event,\n false\n );\n this.setState({ mouseX: null, mouseY: null });\n }\n\n handleMouseDrag(event) {\n this.setState({ isDragging: true });\n this.notifyMouseHandlers(\n GridMouseHandler.FUNCTION_NAMES.DRAG,\n event,\n true,\n true\n );\n\n this.stopDragTimer();\n }\n\n handleMouseUp(event) {\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n\n if (event.button != null && event.button !== 0) {\n return;\n }\n\n this.notifyMouseHandlers(GridMouseHandler.FUNCTION_NAMES.UP, event, false);\n\n this.stopDragTimer();\n\n this.removeDocumentCursor();\n }\n\n handleResize() {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvasScale();\n this.updateCanvas();\n this.forceUpdate();\n }\n\n handleWheel(e) {\n this.notifyMouseHandlers(GridMouseHandler.FUNCTION_NAMES.WHEEL, e);\n\n if (e.defaultPrevented) {\n return;\n }\n\n const { metricCalculator, metrics } = this;\n const metricState = this.getMetricState();\n\n const { lastTop, lastLeft } = metrics;\n let { top, left, topOffset, leftOffset } = metrics;\n\n const theme = this.getTheme();\n\n let { deltaX, deltaY } = GridUtils.getScrollDelta(\n e,\n metrics.barWidth,\n metrics.barHeight,\n metrics.rowHeight,\n metrics.rowHeight\n );\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n\n // no scrolling needed, at directional edge\n if (\n (leftOffset > 0 && left >= lastLeft) ||\n (leftOffset < 0 && left <= 0)\n ) {\n leftOffset = 0;\n break;\n }\n\n if (leftOffset > 0) {\n // scroll right\n\n // get width of next column\n const columnWidth =\n metrics.visibleColumnWidths.get(left) ??\n metricCalculator.getVisibleColumnWidth(left, metricState);\n\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n // scroll left\n\n // get width of next column\n const columnWidth =\n metrics.visibleColumnWidths.get(left - 1) ??\n metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n\n if (Math.abs(leftOffset) <= columnWidth && theme.scrollSnapToColumn) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n\n // no scrolling needed, at directional edge\n if ((topOffset > 0 && top >= lastTop) || (topOffset < 0 && top <= 0)) {\n topOffset = 0;\n break;\n }\n\n if (topOffset > 0) {\n // scroll direction down\n\n // get height of next row\n const rowHeight =\n metrics.visibleRowHeights.get(top) ??\n metricCalculator.getVisibleRowHeight(top, metricState);\n\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n // scroll direction up\n\n // get height of next row\n const rowHeight =\n metrics.visibleRowHeights.get(top - 1) ??\n metricCalculator.getVisibleRowHeight(top - 1, metricState);\n\n if (Math.abs(topOffset) <= rowHeight && theme.scrollSnapToRow) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n\n this.setViewState({ top, left, leftOffset, topOffset });\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n handleEditCellCancel() {\n this.setState({ editingCell: null });\n this.focus();\n }\n\n handleEditCellChange(value) {\n this.setState(({ editingCell }) => ({\n editingCell: { ...editingCell, value },\n }));\n }\n\n handleEditCellCommit(\n value,\n { direction = GridRange.SELECTION_DIRECTION.DOWN, fillRange = false } = {}\n ) {\n const { cursorColumn: column, cursorRow: row, selectedRanges } = this.state;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction == null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({ editingCell: null });\n }\n return;\n }\n\n if (fillRange) {\n this.setValueForRanges(selectedRanges, value);\n } else {\n this.setValueForCell(column, row, value);\n }\n\n if (direction != null) {\n this.moveCursorInDirection(direction);\n }\n\n this.setState({ editingCell: null });\n\n this.focus();\n }\n\n renderInputField() {\n const { model } = this.props;\n const { editingCell } = this.state;\n const { metrics } = this;\n if (editingCell == null || metrics == null) {\n return null;\n }\n const { selectionRange = null, value, isQuickEdit } = editingCell;\n const { cursorRow: row, cursorColumn: column } = this.state;\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleRowYs,\n visibleColumnWidths,\n visibleRowHeights,\n } = metrics;\n\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 const isVisible = x != null && y != null && w != null && h != null;\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n const wrapperStyle = isVisible\n ? {\n position: 'absolute',\n left: gridX + x,\n top: gridY + y,\n width: w,\n height: h,\n }\n : { opacity: 0 };\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n const inputStyle =\n modelColumn != null && modelRow != null\n ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow),\n }\n : null;\n const isValid = model.isValidForCell(modelColumn, modelRow, value);\n\n return (\n <div style={wrapperStyle}>\n <CellInputField\n key={`${column},${row}`}\n selectionRange={selectionRange}\n className={classNames({ error: !isValid })}\n onCancel={this.handleEditCellCancel}\n onChange={this.handleEditCellChange}\n onDone={this.handleEditCellCommit}\n isQuickEdit={isQuickEdit}\n style={inputStyle}\n value={value}\n />\n </div>\n );\n }\n\n render() {\n const { cursor } = this.state;\n\n return (\n <>\n <canvas\n className={classNames('grid-canvas', Grid.getCursorClassName(cursor))}\n ref={canvas => {\n this.canvas = canvas;\n }}\n onClick={this.handleClick}\n onContextMenu={this.handleContextMenu}\n onDoubleClick={this.handleDoubleClick}\n onKeyDown={this.handleKeyDown}\n onMouseDown={this.handleMouseDown}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n tabIndex={0}\n >\n Your browser does not support HTML canvas. Update your browser?\n </canvas>\n {this.renderInputField()}\n </>\n );\n }\n}\n\nGrid.propTypes = {\n canvasOptions: PropTypes.shape({}),\n isStickyBottom: PropTypes.bool,\n isStickyRight: PropTypes.bool,\n metricCalculator: PropTypes.instanceOf(GridMetricCalculator),\n model: PropTypes.instanceOf(GridModel).isRequired,\n keyHandlers: PropTypes.arrayOf(PropTypes.instanceOf(KeyHandler)),\n mouseHandlers: PropTypes.arrayOf(PropTypes.instanceOf(GridMouseHandler)),\n movedColumns: PropTypes.arrayOf(\n PropTypes.shape({\n from: PropTypes.number.isRequired,\n to: PropTypes.number.isRequired,\n })\n ),\n movedRows: PropTypes.arrayOf(\n PropTypes.shape({\n from: PropTypes.number.isRequired,\n to: PropTypes.number.isRequired,\n })\n ),\n onError: PropTypes.func,\n onSelectionChanged: PropTypes.func,\n onMovedColumnsChanged: PropTypes.func,\n onMoveColumnComplete: PropTypes.func,\n onViewChanged: PropTypes.func,\n renderer: PropTypes.instanceOf(GridRenderer),\n stateOverride: PropTypes.shape({}),\n theme: PropTypes.shape({\n autoSelectColumn: PropTypes.bool,\n autoSelectRow: PropTypes.bool,\n }),\n};\n\nGrid.defaultProps = {\n canvasOptions: { alpha: false },\n isStickyBottom: false,\n isStickyRight: false,\n metricCalculator: null,\n keyHandlers: [],\n mouseHandlers: [],\n movedColumns: [],\n movedRows: [],\n onError: () => {},\n onSelectionChanged: () => {},\n onMovedColumnsChanged: () => {},\n onMoveColumnComplete: () => {},\n onViewChanged: () => {},\n renderer: null,\n stateOverride: {},\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false,\n },\n};\n\nexport default Grid;\n"],"file":"Grid.js"}
1
+ {"version":3,"sources":["../src/Grid.jsx"],"names":["React","PureComponent","classNames","memoize","PropTypes","clamp","GridMetricCalculator","GridModel","GridMouseHandler","GridTheme","GridRange","GridRenderer","GridUtils","GridSelectionMouseHandler","GridColumnMoveMouseHandler","GridColumnSeparatorMouseHandler","GridHorizontalScrollBarMouseHandler","GridRowMoveMouseHandler","GridRowSeparatorMouseHandler","GridRowTreeMouseHandler","GridScrollBarCornerMouseHandler","GridVerticalScrollBarMouseHandler","EditMouseHandler","KeyHandler","EditKeyHandler","PasteKeyHandler","SelectionKeyHandler","TreeKeyHandler","CellInputField","PasteError","Grid","props","keyHandlers","sort","a","b","order","mouseHandlers","handleClick","bind","handleContextMenu","handleEditCellCancel","handleEditCellChange","handleEditCellCommit","handleDoubleClick","handleKeyDown","handleMouseDown","handleMouseDrag","handleMouseMove","handleMouseLeave","handleMouseUp","handleResize","handleWheel","metricCalculator","movedColumns","movedRows","renderer","canvas","canvasContext","animationFrame","prevMetrics","metrics","isStuckToBottom","isStuckToRight","documentCursor","dragTimer","state","top","left","topOffset","leftOffset","draggingColumn","draggingRow","draggingColumnOffset","draggingRowOffset","draggingColumnSeparator","draggingRowSeparator","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","isDragging","mouseX","mouseY","cursorRow","cursorColumn","selectionStartRow","selectionStartColumn","selectionEndRow","selectionEndColumn","selectedRanges","lastSelectedRanges","cursor","editingCell","initContext","addEventListener","passive","window","updateCanvasScale","updateCanvas","prevProps","prevState","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevMovedRows","prevStateMovedColumns","currentStateMovedColumns","setState","updateMetrics","requestUpdateCanvas","bottomVisible","rightVisible","rowCount","columnCount","height","width","prevRowCount","prevColumnCount","prevHeight","prevWidth","metricState","getMetricState","lastTop","getLastTop","lastLeft","getLastLeft","validateSelection","checkSelectionChange","cancelAnimationFrame","removeEventListener","stopDragTimer","theme","getTheme","event","rect","getBoundingClientRect","x","clientX","y","clientY","getGridPointFromXY","model","stateOverride","context","clientWidth","clientHeight","getCachedKeyHandlers","getCachedMouseHandlers","columnIndex","modelColumns","get","rowIndex","modelRows","row","modelRow","isRowExpandable","setRowExpanded","isRowExpanded","clearSelectedRanges","commitSelection","moveCursorToPosition","gridRanges","length","range","boundedRange","newCursorRow","newCursorColumn","containsCell","startCell","column","startColumn","startRow","endColumn","endRow","canvasOptions","getContext","requestAnimationFrame","onViewChanged","drawCanvas","scale","getScale","parentElement","style","Math","floor","getMetrics","oldSelectedRanges","onSelectionChanged","i","slice","extendSelection","maximizePreviousRange","autoSelectRow","autoSelectColumn","lastSelectedRange","right","bottom","min","max","selectedRange","makeNormalized","equals","newRanges","concat","selectedColumn","selectedRow","push","cellCount","rangeArraysEqual","newSelectedRanges","lastRange","contains","remainder","subtract","pop","splice","consolidate","nextCursor","nextCell","boundedRanges","setSelectedRanges","deltaColumn","deltaRow","direction","SELECTION_DIRECTION","DOWN","ranges","makeCell","gridRange","moveViewToCell","keepCursorInView","beginSelection","moveSelection","topVisible","leftVisible","isFloatingRow","getTopForTopVisible","getTopForBottomVisible","isFloatingColumn","getLeftForLeftVisible","getLeftForRightVisible","setViewState","viewState","forceUpdate","isQuickEdit","selectionRange","value","undefined","modelColumn","getModelColumn","getModelRow","cell","editValueForCell","isValidForCell","isEditable","every","isEditableRange","edits","modelRanges","getModelRanges","forEachCell","text","setValues","tableHeight","tableWidth","map","forEach","onError","setValueForCell","setValueForRanges","rowSelected","columnSelected","getCursorClassName","document","documentElement","classList","remove","add","mouseEvent","MouseEvent","setTimeout","dragTimeout","clearTimeout","renderState","save","restore","focus","activeElement","gridPoint","getGridPointFromEvent","getMouseHandlers","mouseHandler","onClick","stopPropagation","preventDefault","onContextMenu","e","getKeyHandlers","keyHandler","result","onDown","functionName","updateCoordinates","addCursorToDocument","addDocumentCursor","button","notifyMouseHandlers","FUNCTION_NAMES","startDragTimer","DOUBLE_CLICK","MOVE","LEAVE","DRAG","UP","removeDocumentCursor","WHEEL","defaultPrevented","getScrollDelta","barWidth","barHeight","rowHeight","deltaX","deltaY","columnWidth","visibleColumnWidths","getVisibleColumnWidth","scrollSnapToColumn","abs","visibleRowHeights","getVisibleRowHeight","scrollSnapToRow","fillRange","moveCursorInDirection","gridX","gridY","visibleColumnXs","visibleRowYs","w","h","isVisible","wrapperStyle","position","opacity","inputStyle","textAlign","textAlignForCell","isValid","error","renderInputField","devicePixelRatio","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","userTheme","propTypes","shape","bool","instanceOf","isRequired","arrayOf","from","number","to","func","defaultProps","alpha"],"mappings":"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","sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport clamp from 'lodash.clamp';\nimport GridMetricCalculator from './GridMetricCalculator';\nimport GridModel from './GridModel';\nimport GridMouseHandler from './GridMouseHandler';\nimport GridTheme from './GridTheme';\nimport GridRange from './GridRange';\nimport GridRenderer from './GridRenderer';\nimport GridUtils from './GridUtils';\nimport {\n GridSelectionMouseHandler,\n GridColumnMoveMouseHandler,\n GridColumnSeparatorMouseHandler,\n GridHorizontalScrollBarMouseHandler,\n GridRowMoveMouseHandler,\n GridRowSeparatorMouseHandler,\n GridRowTreeMouseHandler,\n GridScrollBarCornerMouseHandler,\n GridVerticalScrollBarMouseHandler,\n EditMouseHandler,\n} from './mouse-handlers';\nimport './Grid.scss';\nimport KeyHandler from './KeyHandler';\nimport {\n EditKeyHandler,\n PasteKeyHandler,\n SelectionKeyHandler,\n TreeKeyHandler,\n} from './key-handlers';\nimport CellInputField from './CellInputField';\nimport PasteError from './errors/PasteError';\n\n/**\n * High performance, extendible, themeable grid component.\n * Architectured to be fast and handle billions of rows/columns by default.\n * The base model does not provide support for sorting, filtering, etc.\n * To get that functionality, extend GridModel/GridRenderer, and add onClick/onContextMenu handlers to implement your own sort.\n *\n * Extend GridModel with your own data model to provide the data for the grid.\n * Extend GridTheme to change the appearance if the grid. See GridTheme for all the settable values.\n * Extend GridMetricCalculator to provide different metrics for the grid, such as column sizing, header sizing, etc.\n * Extend GridRenderer to have complete control over the rendering process. Can override just one method such as drawColumnHeader, or override the whole drawCanvas process.\n *\n * Add an onViewChanged callback to page in/out data as user moves around the grid\n * Can also add onClick and onContextMenu handlers to add custom functionality and menus.\n */\nclass Grid extends PureComponent {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n static pixelsPerLine = 100 / 3;\n\n static dragTimeout = 1000;\n\n static getTheme = memoize(userTheme => ({ ...GridTheme, ...userTheme }));\n\n static getScale(context) {\n const devicePixelRatio = window.devicePixelRatio || 1;\n const backingStorePixelRatio =\n context.webkitBackingStorePixelRatio ||\n context.mozBackingStorePixelRatio ||\n context.msBackingStorePixelRatio ||\n context.oBackingStorePixelRatio ||\n context.backingStorePixelRatio ||\n 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n static getCursorClassName(cursor) {\n return cursor ? `grid-cursor-${cursor}` : null;\n }\n\n constructor(props) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n\n const { metricCalculator, movedColumns, movedRows, renderer } = props;\n\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n\n this.canvas = null;\n this.canvasContext = null;\n this.animationFrame = null;\n\n this.prevMetrics = null;\n this.metrics = null;\n\n this.isStuckToBottom = false;\n this.isStuckToRight = false;\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [\n new EditKeyHandler(400),\n new PasteKeyHandler(450),\n new SelectionKeyHandler(500),\n new TreeKeyHandler(900),\n ];\n this.mouseHandlers = [\n new GridRowSeparatorMouseHandler(100),\n new GridColumnSeparatorMouseHandler(200),\n new GridRowMoveMouseHandler(300),\n new GridColumnMoveMouseHandler(400),\n new EditMouseHandler(450),\n new GridVerticalScrollBarMouseHandler(500),\n new GridHorizontalScrollBarMouseHandler(600),\n new GridScrollBarCornerMouseHandler(700),\n new GridRowTreeMouseHandler(800),\n new GridSelectionMouseHandler(900),\n ];\n\n this.state = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: 0,\n left: 0,\n\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n // Should be less than the width of the column\n topOffset: 0,\n leftOffset: 0,\n\n // current column/row that user is dragging\n draggingColumn: null,\n draggingRow: null,\n\n // Offset when dragging a column/row\n draggingColumnOffset: null,\n draggingRowOffset: null,\n\n // When drawing header separators for resizing\n draggingColumnSeparator: null,\n draggingRowSeparator: null,\n\n isDraggingHorizontalScrollBar: false,\n isDraggingVerticalScrollBar: false,\n\n // Anything is performing a drag, for blocking hover rendering\n isDragging: false,\n\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: null,\n mouseY: null,\n\n // Move operations the user has performed on this grids columns/rows\n movedColumns,\n movedRows,\n\n // Cursor (highlighted cell) location and active selected range\n cursorRow: null,\n cursorColumn: null,\n selectionStartRow: null,\n selectionStartColumn: null,\n selectionEndRow: null,\n selectionEndColumn: null,\n\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: [],\n lastSelectedRanges: [],\n\n // The mouse cursor style to use when hovering over the grid element\n cursor: null,\n\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: null,\n };\n }\n\n componentDidMount() {\n this.initContext();\n\n // Need to explicitly add wheel event to canvas so we can preventDefault/avoid passive listener issue\n // Otherwise React attaches listener at doc level and you can't prevent default\n // https://github.com/facebook/react/issues/14856\n this.canvas.addEventListener('wheel', this.handleWheel, { passive: false });\n window.addEventListener('resize', this.handleResize);\n\n this.updateCanvasScale();\n this.updateCanvas();\n }\n\n componentDidUpdate(prevProps, prevState) {\n const {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n } = this.props;\n const {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevMovedRows,\n } = prevProps;\n const { movedColumns: prevStateMovedColumns } = prevState;\n const {\n draggingColumn,\n movedColumns: currentStateMovedColumns,\n } = this.state;\n\n if (prevPropMovedColumns !== movedColumns) {\n this.setState({ movedColumns });\n }\n\n if (prevMovedRows !== movedRows) {\n this.setState({ movedRows });\n }\n\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n\n if (isStickyBottom !== prevIsStickyBottom) {\n this.isStuckToBottom = false;\n }\n\n if (isStickyRight !== prevIsStickyRight) {\n this.isStuckToRight = false;\n }\n\n this.updateMetrics();\n\n this.requestUpdateCanvas();\n\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n\n const {\n bottomVisible,\n rightVisible,\n rowCount,\n columnCount,\n top,\n left,\n height,\n width,\n } = this.metrics;\n const {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth,\n } = this.prevMetrics;\n const metricState = this.getMetricState();\n\n if (prevRowCount !== rowCount || height !== prevHeight) {\n const lastTop = this.metricCalculator.getLastTop(metricState);\n if (\n (this.isStuckToBottom &&\n bottomVisible < rowCount - 1 &&\n bottomVisible > 0 &&\n top > 0) ||\n top > lastTop\n ) {\n this.setState({ top: lastTop });\n }\n }\n\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n const lastLeft = this.metricCalculator.getLastLeft(metricState);\n if (\n (this.isStuckToRight &&\n rightVisible < columnCount - 1 &&\n rightVisible > 0 &&\n left > 0) ||\n left > lastLeft\n ) {\n this.setState({ left: lastLeft });\n }\n }\n\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n }\n\n componentWillUnmount() {\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n\n this.canvas.removeEventListener('wheel', this.handleWheel, {\n passive: false,\n });\n\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('resize', this.handleResize);\n\n this.stopDragTimer();\n }\n\n getTheme() {\n const { theme } = this.props;\n return Grid.getTheme(theme);\n }\n\n getGridPointFromEvent(event) {\n const rect = this.canvas.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n\n getGridPointFromXY(x, y) {\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n\n getMetricState(state = this.state) {\n const theme = this.getTheme();\n const { model, stateOverride } = this.props;\n const context = this.canvasContext;\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n const {\n left,\n top,\n leftOffset,\n topOffset,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n } = state;\n\n return {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n ...stateOverride,\n };\n }\n\n getCachedKeyHandlers = memoize(keyHandlers =>\n [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)\n );\n\n getKeyHandlers() {\n const { keyHandlers } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n\n getCachedMouseHandlers = memoize(mouseHandlers =>\n [...mouseHandlers, ...this.mouseHandlers].sort((a, b) => a.order - b.order)\n );\n\n getMouseHandlers() {\n const { mouseHandlers } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n getModelColumn(columnIndex) {\n return this.metrics?.modelColumns?.get(columnIndex);\n }\n\n getModelRow(rowIndex) {\n return this.metrics?.modelRows?.get(rowIndex);\n }\n\n toggleRowExpanded(row) {\n const { metrics } = this;\n const { modelRows } = metrics;\n\n const modelRow = modelRows.get(row);\n const { model } = this.props;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (model.isRowExpandable(modelRow)) {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow));\n }\n this.clearSelectedRanges();\n this.commitSelection(); // Need to commit before moving in case we're selecting same row again\n this.moveCursorToPosition(0, row);\n this.commitSelection();\n\n this.isStuckToBottom = false;\n }\n\n /** Allows the selected range to be set programatically */\n setSelectedRanges(gridRanges) {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const { cursorRow, cursorColumn, selectedRanges } = this.state;\n this.setState({\n selectedRanges: gridRanges,\n lastSelectedRanges: selectedRanges,\n });\n if (gridRanges.length > 0) {\n const range = GridRange.boundedRange(\n gridRanges[0],\n columnCount,\n rowCount\n );\n let newCursorRow = cursorRow;\n let newCursorColumn = cursorColumn;\n if (!range.containsCell(cursorColumn, cursorRow)) {\n ({ row: newCursorRow, column: newCursorColumn } = range.startCell());\n }\n\n this.setState({\n selectionStartColumn: range.startColumn,\n selectionStartRow: range.startRow,\n selectionEndColumn: range.endColumn,\n selectionEndRow: range.endRow,\n cursorColumn: newCursorColumn,\n cursorRow: newCursorRow,\n });\n }\n }\n\n initContext() {\n const { canvas } = this;\n const { canvasOptions } = this.props;\n\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n\n requestUpdateCanvas() {\n if (this.animationFrame != null) {\n return;\n }\n\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n\n this.updateCanvas(this.metrics);\n });\n }\n\n updateCanvas(metrics = this.updateMetrics()) {\n this.updateCanvasScale();\n\n const { onViewChanged } = this.props;\n onViewChanged(metrics);\n\n this.drawCanvas(metrics);\n }\n\n updateCanvasScale() {\n const { canvas, canvasContext } = this;\n const scale = Grid.getScale(canvasContext);\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n const { width, height } = canvas.parentElement.getBoundingClientRect();\n canvas.style.width = `${Math.floor(width)}px`;\n canvas.style.height = `${Math.floor(height)}px`;\n canvas.width = Math.floor(width) * scale;\n canvas.height = Math.floor(height) * scale;\n canvasContext.scale(scale, scale);\n }\n\n updateMetrics(state = this.state) {\n this.prevMetrics = this.metrics;\n\n const { metricCalculator } = this;\n const metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n\n return this.metrics;\n }\n\n checkSelectionChange(prevState) {\n const { selectedRanges: oldSelectedRanges } = prevState;\n const { selectedRanges } = this.state;\n\n if (selectedRanges !== oldSelectedRanges) {\n const { onSelectionChanged } = this.props;\n onSelectionChanged(selectedRanges);\n }\n }\n\n validateSelection() {\n const { model } = this.props;\n const { selectedRanges } = this.state;\n const { columnCount, rowCount } = model;\n\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const range = selectedRanges[i];\n if (\n (range.endColumn != null && range.endColumn >= columnCount) ||\n (range.endRow != null && range.endRow >= rowCount)\n ) {\n // Just clear the selection rather than trying to trim it.\n this.setState({ selectedRanges: [], lastSelectedRanges: [] });\n return false;\n }\n }\n return true;\n }\n\n clearSelectedRanges() {\n const { selectedRanges } = this.state;\n this.setState({ selectedRanges: [], lastSelectedRanges: selectedRanges });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges() {\n const { selectedRanges } = this.state;\n if (selectedRanges.length > 0) {\n this.setState({\n selectedRanges: selectedRanges.slice(selectedRanges.length - 1),\n });\n }\n }\n\n beginSelection(column, row) {\n this.setState({\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n cursorColumn: column,\n cursorRow: row,\n });\n }\n\n /**\n * Moves the selection to the cell specified\n * @param {number} column The column index to move the cursor to\n * @param {number} row The row index to move the cursor to\n * @param {boolean} extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param {boolean} maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(\n column,\n row,\n extendSelection = false,\n maximizePreviousRange = false\n ) {\n this.setState(state => {\n const { selectedRanges, selectionStartRow, selectionStartColumn } = state;\n const { theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n if (extendSelection && selectedRanges.length > 0) {\n const lastSelectedRange = selectedRanges[selectedRanges.length - 1];\n let left = null;\n let top = null;\n let right = null;\n let bottom = null;\n if (maximizePreviousRange) {\n left = autoSelectRow\n ? null\n : Math.min(column, lastSelectedRange.startColumn);\n top = autoSelectColumn\n ? null\n : Math.min(row, lastSelectedRange.startRow);\n right = autoSelectRow\n ? null\n : Math.max(column, lastSelectedRange.endColumn);\n bottom = autoSelectColumn\n ? null\n : Math.max(row, lastSelectedRange.endRow);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (!autoSelectRow) {\n left = selectionStartColumn;\n }\n if (!autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow ? null : column;\n bottom = autoSelectColumn ? null : row;\n }\n const selectedRange = GridRange.makeNormalized(\n left,\n top,\n right,\n bottom\n );\n\n if (lastSelectedRange.equals(selectedRange)) {\n return null;\n }\n\n const newRanges = [].concat(selectedRanges);\n newRanges[newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n }\n const newRanges = [].concat(selectedRanges);\n const selectedColumn = autoSelectRow ? null : column;\n const selectedRow = autoSelectColumn ? null : row;\n newRanges.push(\n GridRange.makeNormalized(\n selectedColumn,\n selectedRow,\n selectedColumn,\n selectedRow\n )\n );\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n });\n }\n\n /**\n * Commits the last selected range to the selected ranges.\n * First checks if the last range is completely contained within another range, and if it\n * is then it blows those ranges apart.\n * Then it consolidates all the selected ranges, reducing them.\n */\n commitSelection() {\n this.setState(state => {\n const { theme } = this.props;\n const { autoSelectRow } = theme;\n const {\n selectedRanges,\n lastSelectedRanges,\n cursorRow,\n cursorColumn,\n } = state;\n\n if (\n selectedRanges.length === 1 &&\n (autoSelectRow\n ? GridRange.rowCount(selectedRanges) === 1\n : GridRange.cellCount(selectedRanges) === 1) &&\n GridRange.rangeArraysEqual(selectedRanges, lastSelectedRanges)\n ) {\n // If it's the exact same single selection, then deselect.\n // For if we click on one cell multiple times.\n return { selectedRanges: [], lastSelectedRanges: [] };\n }\n\n let newSelectedRanges = selectedRanges.slice();\n if (newSelectedRanges.length > 1) {\n // Check if the latest selection is entirely within a previously selected range\n // If that's the case, then deselect that section instead\n const lastRange = newSelectedRanges[newSelectedRanges.length - 1];\n for (let i = 0; i < newSelectedRanges.length - 1; i += 1) {\n const selectedRange = newSelectedRanges[i];\n if (selectedRange.contains(lastRange)) {\n // We found a match, now remove the two matching ranges, and add back\n // the remainder of the two\n const remainder = selectedRange.subtract(lastRange);\n newSelectedRanges.pop();\n newSelectedRanges.splice(i, 1);\n newSelectedRanges = newSelectedRanges.concat(remainder);\n break;\n }\n }\n\n newSelectedRanges = GridRange.consolidate(newSelectedRanges);\n }\n\n let newCursorColumn = cursorColumn;\n let newCursorRow = cursorRow;\n if (!GridRange.containsCell(newSelectedRanges, cursorColumn, cursorRow)) {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const nextCursor = GridRange.nextCell(\n GridRange.boundedRanges(selectedRanges, columnCount, rowCount)\n );\n if (nextCursor != null) {\n ({ column: newCursorColumn, row: newCursorRow } = nextCursor);\n } else {\n newCursorColumn = null;\n newCursorRow = null;\n }\n }\n return {\n cursorRow: newCursorRow,\n cursorColumn: newCursorColumn,\n selectedRanges: newSelectedRanges,\n lastSelectedRanges: selectedRanges,\n };\n });\n }\n\n selectAll() {\n const { model, theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n const top = autoSelectColumn ? null : 0;\n const bottom = autoSelectColumn ? null : model.rowCount - 1;\n const left = autoSelectRow ? null : 0;\n const right = autoSelectRow ? null : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n moveCursor(deltaColumn, deltaRow, extendSelection) {\n const {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow,\n } = this.state;\n const column = extendSelection ? selectionEndColumn : cursorColumn;\n const row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n const { left, top } = this.state;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n\n const left = clamp(column + deltaColumn, 0, columnCount - 1);\n const top = clamp(row + deltaRow, 0, rowCount - 1);\n this.moveCursorToPosition(left, top, extendSelection);\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param {string} direction The direction to move the cursor in\n */\n moveCursorInDirection(direction = GridRange.SELECTION_DIRECTION.DOWN) {\n const { model } = this.props;\n const { columnCount, rowCount } = model;\n const { cursorRow, cursorColumn, selectedRanges } = this.state;\n const ranges =\n selectedRanges.length > 0\n ? selectedRanges\n : [GridRange.makeCell(cursorColumn, cursorRow)];\n let nextCursor = null;\n if (ranges.length === 1 && GridRange.cellCount(ranges) === 1) {\n // If we only have one cell selected, we want to update the cursor and we want to update the selected cells\n const gridRange = new GridRange(0, 0, columnCount - 1, rowCount - 1);\n nextCursor =\n gridRange.nextCell(cursorColumn, cursorRow, direction) ??\n gridRange.startCell(direction);\n } else {\n nextCursor = GridRange.nextCell(\n GridRange.boundedRanges(ranges, columnCount, rowCount),\n cursorColumn,\n cursorRow,\n direction\n );\n }\n\n if (nextCursor != null) {\n const { column, row } = nextCursor;\n this.setState({\n cursorColumn: column,\n cursorRow: row,\n });\n\n if (!GridRange.containsCell(selectedRanges, column, row)) {\n this.setState({\n selectedRanges: [GridRange.makeCell(column, row)],\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n });\n }\n\n this.moveViewToCell(nextCursor.column, nextCursor.row);\n }\n }\n\n /**\n * Move a cursor to the specified position in the grid.\n * @param {number|null} column The column index to move the cursor to\n * @param {number|null} row The row index to move the cursor to\n * @param {boolean} extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param {boolean} keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param {boolean} maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n */\n moveCursorToPosition(\n column,\n row,\n extendSelection = false,\n keepCursorInView = true,\n maximizePreviousRange = false\n ) {\n if (!extendSelection) {\n this.beginSelection(column, row);\n }\n\n this.moveSelection(column, row, extendSelection, maximizePreviousRange);\n\n if (keepCursorInView) {\n this.moveViewToCell(column, row);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param {number|null} column The column index to bring into view\n * @param {number|null} row The row index to bring into view\n */\n moveViewToCell(column, row) {\n const { metricCalculator } = this;\n const {\n bottomVisible,\n rightVisible,\n topVisible,\n leftVisible,\n } = this.metrics;\n const metricState = this.getMetricState(this.state);\n let { top, left, topOffset, leftOffset } = this.state;\n\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n\n this.setViewState({ top, left, topOffset, leftOffset });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param {object} viewState New state properties to set.\n * @param {boolean} forceUpdate Whether to force an update.\n */\n setViewState(viewState, forceUpdate = false) {\n const { isStickyBottom, isStickyRight } = this.props;\n const { top, left } = viewState;\n const { lastTop, lastLeft } = this.metrics;\n if (top != null) {\n this.isStuckToBottom = isStickyBottom && top >= lastTop;\n }\n if (left != null) {\n this.isStuckToRight = isStickyRight && left >= lastLeft;\n }\n\n this.setState(viewState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param {number} column The visible column index to start editing\n * @param {number} row The visible row index to start editing\n * @param {boolean} isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param {number[]|null} selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param {string?} value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(\n column,\n row,\n isQuickEdit = false,\n selectionRange = null,\n value = undefined\n ) {\n const { model } = this.props;\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n const cell = {\n column,\n row,\n selectionRange,\n value:\n value !== undefined\n ? value\n : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit,\n };\n\n this.setState({ editingCell: cell, cursorColumn: column, cursorRow: row });\n this.moveViewToCell(column, row);\n }\n\n isValidForCell(column, row, value) {\n const { model } = this.props;\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n return model.isValidForCell(modelColumn, modelRow, value);\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param {string[][] | string} value Table or a string that is being pasted\n */\n async pasteValue(value) {\n const { model } = this.props;\n const { movedColumns, movedRows, selectedRanges } = this.state;\n\n try {\n if (\n !model.isEditable ||\n !selectedRanges.every(range => model.isEditableRange(range))\n ) {\n throw new PasteError(\"Can't paste in to read-only area.\");\n }\n\n if (selectedRanges.length <= 0) {\n throw new PasteError('Select an area to paste to.');\n }\n\n if (typeof value === 'string') {\n // Just paste the value into all the selected cells\n const edits = [];\n\n const modelRanges = GridUtils.getModelRanges(\n selectedRanges,\n movedColumns,\n movedRows\n );\n GridRange.forEachCell(modelRanges, (x, y) => {\n edits.push({ x, y, text: value });\n });\n await model.setValues(edits);\n return;\n }\n\n // Otherwise it's a table of data\n const tableHeight = value.length;\n const tableWidth = value[0].length;\n const { columnCount, rowCount } = model;\n let ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n if (\n ranges.every(\n range =>\n GridRange.cellCount([range]) === 1 &&\n range.startColumn + tableWidth <= columnCount &&\n range.startRow + tableHeight <= rowCount\n )\n ) {\n // Remap the selected ranges\n ranges = ranges.map(\n range =>\n new GridRange(\n range.startColumn,\n range.startRow,\n range.startColumn + tableWidth - 1,\n range.startRow + tableHeight - 1\n )\n );\n this.setSelectedRanges(ranges);\n }\n\n if (\n !ranges.every(\n range =>\n GridRange.rowCount([range]) === tableHeight &&\n GridRange.columnCount([range]) === tableWidth\n )\n ) {\n throw new PasteError('Copy and paste area are not same size.');\n }\n\n const edits = [];\n ranges.forEach(range => {\n for (let x = 0; x < tableWidth; x += 1) {\n for (let y = 0; y < tableHeight; y += 1) {\n edits.push({\n x: range.startColumn + x,\n y: range.startRow + y,\n text: value[y][x],\n });\n }\n }\n });\n await model.setValues(edits);\n } catch (e) {\n const { onError } = this.props;\n onError(e);\n }\n }\n\n setValueForCell(column, row, value) {\n const { model } = this.props;\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value);\n }\n }\n\n setValueForRanges(ranges, value) {\n const { model } = this.props;\n const { movedColumns, movedRows } = this.state;\n\n const modelRanges = GridUtils.getModelRanges(\n ranges,\n movedColumns,\n movedRows\n );\n model.setValueForRanges(modelRanges, value);\n }\n\n isSelected(row, column) {\n const { selectedRanges } = this.state;\n\n for (let i = 0; i < selectedRanges.length; i += 1) {\n const selectedRange = selectedRanges[i];\n const rowSelected =\n selectedRange.startRow === null ||\n (selectedRange.startRow <= row && row <= selectedRange.endRow);\n const columnSelected =\n selectedRange.startColumn === null ||\n (selectedRange.startColumn <= column &&\n column <= selectedRange.endColumn);\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n\n return false;\n }\n\n addDocumentCursor(cursor = null) {\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n document.documentElement.classList.remove(this.documentCursor);\n this.documentCursor = Grid.getCursorClassName(cursor);\n document.documentElement.classList.add(this.documentCursor);\n document.documentElement.classList.add('grid-block-events');\n }\n\n removeDocumentCursor() {\n if (this.documentCursor) {\n document.documentElement.classList.remove(this.documentCursor);\n document.documentElement.classList.remove('grid-block-events');\n this.documentCursor = null;\n }\n }\n\n startDragTimer(event) {\n this.stopDragTimer();\n\n const mouseEvent = new MouseEvent('custom', event);\n\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n\n stopDragTimer() {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n */\n drawCanvas(metrics = this.updateMetrics()) {\n const {\n left,\n top,\n cursorColumn,\n cursorRow,\n draggingColumn,\n draggingColumnOffset,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n mouseX,\n mouseY,\n selectedRanges,\n } = this.state;\n const { model, stateOverride } = this.props;\n const { renderer } = this;\n const context = this.canvasContext;\n const theme = this.getTheme();\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n const renderState = {\n left,\n top,\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\n draggingColumnOffset,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n cursorColumn,\n cursorRow,\n ...stateOverride,\n };\n\n context.save();\n\n renderer.drawCanvas(renderState);\n\n context.restore();\n }\n\n focus() {\n this.canvas.focus();\n }\n\n isFocused() {\n return document.activeElement === this.canvas;\n }\n\n handleClick(event) {\n const gridPoint = this.getGridPointFromEvent(event);\n\n const mouseHandlers = this.getMouseHandlers();\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n if (mouseHandler.onClick(gridPoint, this, event)) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n\n this.canvas.focus();\n }\n\n handleContextMenu(event) {\n const gridPoint = this.getGridPointFromEvent(event);\n\n const mouseHandlers = this.getMouseHandlers();\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n if (mouseHandler.onContextMenu(gridPoint, this, event)) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n handleKeyDown(e) {\n const keyHandlers = this.getKeyHandlers();\n for (let i = 0; i < keyHandlers.length; i += 1) {\n const keyHandler = keyHandlers[i];\n const result = keyHandler.onDown(e, this);\n if (result) {\n if (result?.stopPropagation ?? true) e.stopPropagation();\n if (result?.preventDefault ?? true) e.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param {String} functionName The name of the function in the mouse handler to call\n * @param {MouseEvent} event The mouse event to notify\n * @param {Boolean} updateCoordinates Whether to update the mouse coordinates\n * @param {Boolean} addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(\n functionName,\n event,\n updateCoordinates = true,\n addCursorToDocument = false\n ) {\n const gridPoint = this.getGridPointFromEvent(event);\n const mouseHandlers = this.getMouseHandlers();\n let cursor = null;\n for (let i = 0; i < mouseHandlers.length; i += 1) {\n const mouseHandler = mouseHandlers[i];\n const result =\n mouseHandler[functionName] &&\n mouseHandler[functionName](gridPoint, this, event);\n if (result) {\n if (mouseHandler.cursor != null) {\n ({ cursor } = mouseHandler);\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n if (result?.stopPropagation ?? true) event.stopPropagation();\n if (result?.preventDefault ?? true) event.preventDefault();\n break;\n }\n }\n\n this.setState({ cursor });\n\n if (updateCoordinates) {\n const { x, y } = gridPoint;\n this.setState({ mouseX: x, mouseY: y });\n }\n }\n\n handleMouseDown(event) {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n\n if (event.button != null && event.button !== 0) {\n return;\n }\n\n this.notifyMouseHandlers(GridMouseHandler.FUNCTION_NAMES.DOWN, event);\n\n this.startDragTimer(event);\n }\n\n handleDoubleClick(event) {\n this.notifyMouseHandlers(\n GridMouseHandler.FUNCTION_NAMES.DOUBLE_CLICK,\n event\n );\n }\n\n handleMouseMove(event) {\n this.notifyMouseHandlers(GridMouseHandler.FUNCTION_NAMES.MOVE, event);\n }\n\n handleMouseLeave(event) {\n this.notifyMouseHandlers(\n GridMouseHandler.FUNCTION_NAMES.LEAVE,\n event,\n false\n );\n this.setState({ mouseX: null, mouseY: null });\n }\n\n handleMouseDrag(event) {\n this.setState({ isDragging: true });\n this.notifyMouseHandlers(\n GridMouseHandler.FUNCTION_NAMES.DRAG,\n event,\n true,\n true\n );\n\n this.stopDragTimer();\n }\n\n handleMouseUp(event) {\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n\n if (event.button != null && event.button !== 0) {\n return;\n }\n\n this.notifyMouseHandlers(GridMouseHandler.FUNCTION_NAMES.UP, event, false);\n\n this.stopDragTimer();\n\n this.removeDocumentCursor();\n }\n\n handleResize() {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvasScale();\n this.updateCanvas();\n this.forceUpdate();\n }\n\n handleWheel(e) {\n this.notifyMouseHandlers(GridMouseHandler.FUNCTION_NAMES.WHEEL, e);\n\n if (e.defaultPrevented) {\n return;\n }\n\n const { metricCalculator, metrics } = this;\n const metricState = this.getMetricState();\n\n const { lastTop, lastLeft } = metrics;\n let { top, left, topOffset, leftOffset } = metrics;\n\n const theme = this.getTheme();\n\n let { deltaX, deltaY } = GridUtils.getScrollDelta(\n e,\n metrics.barWidth,\n metrics.barHeight,\n metrics.rowHeight,\n metrics.rowHeight\n );\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n\n // no scrolling needed, at directional edge\n if (\n (leftOffset > 0 && left >= lastLeft) ||\n (leftOffset < 0 && left <= 0)\n ) {\n leftOffset = 0;\n break;\n }\n\n if (leftOffset > 0) {\n // scroll right\n\n // get width of next column\n const columnWidth =\n metrics.visibleColumnWidths.get(left) ??\n metricCalculator.getVisibleColumnWidth(left, metricState);\n\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n // scroll left\n\n // get width of next column\n const columnWidth =\n metrics.visibleColumnWidths.get(left - 1) ??\n metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n\n if (Math.abs(leftOffset) <= columnWidth && theme.scrollSnapToColumn) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n\n // no scrolling needed, at directional edge\n if ((topOffset > 0 && top >= lastTop) || (topOffset < 0 && top <= 0)) {\n topOffset = 0;\n break;\n }\n\n if (topOffset > 0) {\n // scroll direction down\n\n // get height of next row\n const rowHeight =\n metrics.visibleRowHeights.get(top) ??\n metricCalculator.getVisibleRowHeight(top, metricState);\n\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n // scroll direction up\n\n // get height of next row\n const rowHeight =\n metrics.visibleRowHeights.get(top - 1) ??\n metricCalculator.getVisibleRowHeight(top - 1, metricState);\n\n if (Math.abs(topOffset) <= rowHeight && theme.scrollSnapToRow) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n\n this.setViewState({ top, left, leftOffset, topOffset });\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n handleEditCellCancel() {\n this.setState({ editingCell: null });\n this.focus();\n }\n\n handleEditCellChange(value) {\n this.setState(({ editingCell }) => ({\n editingCell: { ...editingCell, value },\n }));\n }\n\n handleEditCellCommit(\n value,\n { direction = GridRange.SELECTION_DIRECTION.DOWN, fillRange = false } = {}\n ) {\n const { cursorColumn: column, cursorRow: row, selectedRanges } = this.state;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction == null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({ editingCell: null });\n }\n return;\n }\n\n if (fillRange) {\n this.setValueForRanges(selectedRanges, value);\n } else {\n this.setValueForCell(column, row, value);\n }\n\n if (direction != null) {\n this.moveCursorInDirection(direction);\n }\n\n this.setState({ editingCell: null });\n\n this.focus();\n }\n\n renderInputField() {\n const { model } = this.props;\n const { editingCell } = this.state;\n const { metrics } = this;\n if (editingCell == null || metrics == null) {\n return null;\n }\n const { selectionRange = null, value, isQuickEdit } = editingCell;\n const { cursorRow: row, cursorColumn: column } = this.state;\n const {\n gridX,\n gridY,\n visibleColumnXs,\n visibleRowYs,\n visibleColumnWidths,\n visibleRowHeights,\n } = metrics;\n\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 const isVisible = x != null && y != null && w != null && h != null;\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n const wrapperStyle = isVisible\n ? {\n position: 'absolute',\n left: gridX + x,\n top: gridY + y,\n width: w,\n height: h,\n }\n : { opacity: 0 };\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n const inputStyle =\n modelColumn != null && modelRow != null\n ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow),\n }\n : null;\n const isValid = model.isValidForCell(modelColumn, modelRow, value);\n\n return (\n <div style={wrapperStyle}>\n <CellInputField\n key={`${column},${row}`}\n selectionRange={selectionRange}\n className={classNames({ error: !isValid })}\n onCancel={this.handleEditCellCancel}\n onChange={this.handleEditCellChange}\n onDone={this.handleEditCellCommit}\n isQuickEdit={isQuickEdit}\n style={inputStyle}\n value={value}\n />\n </div>\n );\n }\n\n render() {\n const { cursor } = this.state;\n\n return (\n <>\n <canvas\n className={classNames('grid-canvas', Grid.getCursorClassName(cursor))}\n ref={canvas => {\n this.canvas = canvas;\n }}\n onClick={this.handleClick}\n onContextMenu={this.handleContextMenu}\n onDoubleClick={this.handleDoubleClick}\n onKeyDown={this.handleKeyDown}\n onMouseDown={this.handleMouseDown}\n onMouseMove={this.handleMouseMove}\n onMouseLeave={this.handleMouseLeave}\n tabIndex={0}\n >\n Your browser does not support HTML canvas. Update your browser?\n </canvas>\n {this.renderInputField()}\n </>\n );\n }\n}\n\nGrid.propTypes = {\n canvasOptions: PropTypes.shape({}),\n isStickyBottom: PropTypes.bool,\n isStickyRight: PropTypes.bool,\n metricCalculator: PropTypes.instanceOf(GridMetricCalculator),\n model: PropTypes.instanceOf(GridModel).isRequired,\n keyHandlers: PropTypes.arrayOf(PropTypes.instanceOf(KeyHandler)),\n mouseHandlers: PropTypes.arrayOf(PropTypes.instanceOf(GridMouseHandler)),\n movedColumns: PropTypes.arrayOf(\n PropTypes.shape({\n from: PropTypes.number.isRequired,\n to: PropTypes.number.isRequired,\n })\n ),\n movedRows: PropTypes.arrayOf(\n PropTypes.shape({\n from: PropTypes.number.isRequired,\n to: PropTypes.number.isRequired,\n })\n ),\n onError: PropTypes.func,\n onSelectionChanged: PropTypes.func,\n onMovedColumnsChanged: PropTypes.func,\n onMoveColumnComplete: PropTypes.func,\n onViewChanged: PropTypes.func,\n renderer: PropTypes.instanceOf(GridRenderer),\n stateOverride: PropTypes.shape({}),\n theme: PropTypes.shape({\n autoSelectColumn: PropTypes.bool,\n autoSelectRow: PropTypes.bool,\n }),\n};\n\nGrid.defaultProps = {\n canvasOptions: { alpha: false },\n isStickyBottom: false,\n isStickyRight: false,\n metricCalculator: null,\n keyHandlers: [],\n mouseHandlers: [],\n movedColumns: [],\n movedRows: [],\n onError: () => {},\n onSelectionChanged: () => {},\n onMovedColumnsChanged: () => {},\n onMoveColumnComplete: () => {},\n onViewChanged: () => {},\n renderer: null,\n stateOverride: {},\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false,\n },\n};\n\nexport default Grid;\n"],"file":"Grid.js"}
@@ -1,26 +1,59 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+
3
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+
5
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
+
7
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
+
9
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
10
+
11
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
+
13
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
14
+
15
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
16
+
17
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
18
+
1
19
  import convert from 'color-convert';
2
20
 
3
- class GridColorUtils {
4
- /**
5
- *
6
- * @param {string} color The color in hex format to convert (with #)
7
- * @param {number} depth The depth to convert the color to
8
- * @param {number} maxDepth The maximum depth. Defaults to 6
9
- * @returns {string} The darkened colour in hex format
10
- */
11
- static darkenForDepth(color, depth) {
12
- var maxDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 6;
13
- var lab = convert.hex.lab(color);
14
- lab[0] = Math.max(lab[0] - lab[0] / maxDepth * depth, 0);
15
- return "#".concat(convert.lab.hex(lab));
21
+ var GridColorUtils = /*#__PURE__*/function () {
22
+ function GridColorUtils() {
23
+ _classCallCheck(this, GridColorUtils);
16
24
  }
17
25
 
18
- static colorWithAlpha(color, alpha) {
19
- var [r, g, b] = convert.hex.rgb(color);
20
- return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(alpha, ")");
21
- }
26
+ _createClass(GridColorUtils, null, [{
27
+ key: "darkenForDepth",
28
+ value:
29
+ /**
30
+ *
31
+ * @param {string} color The color in hex format to convert (with #)
32
+ * @param {number} depth The depth to convert the color to
33
+ * @param {number} maxDepth The maximum depth. Defaults to 6
34
+ * @returns {string} The darkened colour in hex format
35
+ */
36
+ function darkenForDepth(color, depth) {
37
+ var maxDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 6;
38
+ var lab = convert.hex.lab(color);
39
+ lab[0] = Math.max(lab[0] - lab[0] / maxDepth * depth, 0);
40
+ return "#".concat(convert.lab.hex(lab));
41
+ }
42
+ }, {
43
+ key: "colorWithAlpha",
44
+ value: function colorWithAlpha(color, alpha) {
45
+ var _convert$hex$rgb = convert.hex.rgb(color),
46
+ _convert$hex$rgb2 = _slicedToArray(_convert$hex$rgb, 3),
47
+ r = _convert$hex$rgb2[0],
48
+ g = _convert$hex$rgb2[1],
49
+ b = _convert$hex$rgb2[2];
50
+
51
+ return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(alpha, ")");
52
+ }
53
+ }]);
22
54
 
23
- }
55
+ return GridColorUtils;
56
+ }();
24
57
 
25
58
  export default GridColorUtils;
26
59
  //# sourceMappingURL=GridColorUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GridColorUtils.js"],"names":["convert","GridColorUtils","darkenForDepth","color","depth","maxDepth","lab","hex","Math","max","colorWithAlpha","alpha","r","g","b","rgb"],"mappings":"AAAA,OAAOA,OAAP,MAAoB,eAApB;;AAEA,MAAMC,cAAN,CAAqB;AACnB;AACF;AACA;AACA;AACA;AACA;AACA;AACuB,SAAdC,cAAc,CAACC,KAAD,EAAQC,KAAR,EAA6B;AAAA,QAAdC,QAAc,uEAAH,CAAG;AAChD,QAAMC,GAAG,GAAGN,OAAO,CAACO,GAAR,CAAYD,GAAZ,CAAgBH,KAAhB,CAAZ;AACAG,IAAAA,GAAG,CAAC,CAAD,CAAH,GAASE,IAAI,CAACC,GAAL,CAASH,GAAG,CAAC,CAAD,CAAH,GAAUA,GAAG,CAAC,CAAD,CAAH,GAASD,QAAV,GAAsBD,KAAxC,EAA+C,CAA/C,CAAT;AACA,sBAAWJ,OAAO,CAACM,GAAR,CAAYC,GAAZ,CAAgBD,GAAhB,CAAX;AACD;;AAEoB,SAAdI,cAAc,CAACP,KAAD,EAAQQ,KAAR,EAAe;AAClC,QAAM,CAACC,CAAD,EAAIC,CAAJ,EAAOC,CAAP,IAAYd,OAAO,CAACO,GAAR,CAAYQ,GAAZ,CAAgBZ,KAAhB,CAAlB;AACA,0BAAeS,CAAf,eAAqBC,CAArB,eAA2BC,CAA3B,eAAiCH,KAAjC;AACD;;AAjBkB;;AAoBrB,eAAeV,cAAf","sourcesContent":["import convert from 'color-convert';\n\nclass GridColorUtils {\n /**\n *\n * @param {string} color The color in hex format to convert (with #)\n * @param {number} depth The depth to convert the color to\n * @param {number} maxDepth The maximum depth. Defaults to 6\n * @returns {string} The darkened colour in hex format\n */\n static darkenForDepth(color, depth, maxDepth = 6) {\n const lab = convert.hex.lab(color);\n lab[0] = Math.max(lab[0] - (lab[0] / maxDepth) * depth, 0);\n return `#${convert.lab.hex(lab)}`;\n }\n\n static colorWithAlpha(color, alpha) {\n const [r, g, b] = convert.hex.rgb(color);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n}\n\nexport default GridColorUtils;\n"],"file":"GridColorUtils.js"}
1
+ {"version":3,"sources":["../src/GridColorUtils.js"],"names":["convert","GridColorUtils","color","depth","maxDepth","lab","hex","Math","max","alpha","rgb","r","g","b"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAOA,OAAP,MAAoB,eAApB;;IAEMC,c;;;;;;;;AACJ;AACF;AACA;AACA;AACA;AACA;AACA;AACE,4BAAsBC,KAAtB,EAA6BC,KAA7B,EAAkD;AAAA,UAAdC,QAAc,uEAAH,CAAG;AAChD,UAAMC,GAAG,GAAGL,OAAO,CAACM,GAAR,CAAYD,GAAZ,CAAgBH,KAAhB,CAAZ;AACAG,MAAAA,GAAG,CAAC,CAAD,CAAH,GAASE,IAAI,CAACC,GAAL,CAASH,GAAG,CAAC,CAAD,CAAH,GAAUA,GAAG,CAAC,CAAD,CAAH,GAASD,QAAV,GAAsBD,KAAxC,EAA+C,CAA/C,CAAT;AACA,wBAAWH,OAAO,CAACK,GAAR,CAAYC,GAAZ,CAAgBD,GAAhB,CAAX;AACD;;;WAED,wBAAsBH,KAAtB,EAA6BO,KAA7B,EAAoC;AAClC,6BAAkBT,OAAO,CAACM,GAAR,CAAYI,GAAZ,CAAgBR,KAAhB,CAAlB;AAAA;AAAA,UAAOS,CAAP;AAAA,UAAUC,CAAV;AAAA,UAAaC,CAAb;;AACA,4BAAeF,CAAf,eAAqBC,CAArB,eAA2BC,CAA3B,eAAiCJ,KAAjC;AACD;;;;;;AAGH,eAAeR,cAAf","sourcesContent":["import convert from 'color-convert';\n\nclass GridColorUtils {\n /**\n *\n * @param {string} color The color in hex format to convert (with #)\n * @param {number} depth The depth to convert the color to\n * @param {number} maxDepth The maximum depth. Defaults to 6\n * @returns {string} The darkened colour in hex format\n */\n static darkenForDepth(color, depth, maxDepth = 6) {\n const lab = convert.hex.lab(color);\n lab[0] = Math.max(lab[0] - (lab[0] / maxDepth) * depth, 0);\n return `#${convert.lab.hex(lab)}`;\n }\n\n static colorWithAlpha(color, alpha) {\n const [r, g, b] = convert.hex.rgb(color);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n}\n\nexport default GridColorUtils;\n"],"file":"GridColorUtils.js"}