@deephaven/grid 0.52.1-beta.2 → 0.52.1-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Grid.d.ts CHANGED
@@ -12,10 +12,6 @@ import KeyHandler, { GridKeyboardEvent } from './KeyHandler';
12
12
  import GridMetrics, { Coordinate, ModelIndex, MoveOperation, VisibleIndex } from './GridMetrics';
13
13
  import { DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';
14
14
  import { EditingCell, GridRenderState, EditingCellTextSelectionRange } from './GridRendererTypes';
15
- export type StickyOptions = {
16
- shouldStickBottom?: boolean;
17
- shouldStickRight?: boolean;
18
- };
19
15
  export type GridProps = typeof Grid.defaultProps & {
20
16
  canvasOptions?: CanvasRenderingContext2DSettings;
21
17
  isStickyBottom?: boolean;
@@ -315,9 +311,8 @@ declare class Grid extends PureComponent<GridProps, GridState> {
315
311
  * @param deltaColumn Number of columns to move the cursor
316
312
  * @param deltaRow Number of rows to move the cursor
317
313
  * @param extendSelection True if the current selection should be extended, false to start a new selection
318
- * @param stickyOptions Options for sticky behavior
319
314
  */
320
- moveCursor(deltaColumn: number, deltaRow: number, extendSelection: boolean, stickyOptions?: StickyOptions): void;
315
+ moveCursor(deltaColumn: number, deltaRow: number, extendSelection: boolean): void;
321
316
  /**
322
317
  * Move the cursor in the provided selection direction
323
318
  * @param direction The direction to move the cursor in
@@ -330,25 +325,22 @@ declare class Grid extends PureComponent<GridProps, GridState> {
330
325
  * @param extendSelection Whether to extend the current selection (eg. holding Shift)
331
326
  * @param keepCursorInView Whether to move the viewport so that the cursor is in view
332
327
  * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started
333
- * @param stickyOptions Options for sticky behavior
334
328
  */
335
- moveCursorToPosition(column: GridRangeIndex, row: GridRangeIndex, extendSelection?: boolean, keepCursorInView?: boolean, maximizePreviousRange?: boolean, stickyOptions?: StickyOptions): void;
329
+ moveCursorToPosition(column: GridRangeIndex, row: GridRangeIndex, extendSelection?: boolean, keepCursorInView?: boolean, maximizePreviousRange?: boolean): void;
336
330
  /**
337
331
  * Moves the view to make the specified cell visible
338
332
  *
339
333
  * @param column The column index to bring into view
340
334
  * @param row The row index to bring into view
341
- * @param stickyOptions Options for sticky behavior
342
335
  */
343
- moveViewToCell(column: GridRangeIndex, row: GridRangeIndex, stickyOptions?: StickyOptions): void;
336
+ moveViewToCell(column: GridRangeIndex, row: GridRangeIndex): void;
344
337
  /**
345
338
  * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties
346
339
  * Should be called when user interaction occurs
347
340
  * @param viewState New state properties to set.
348
341
  * @param forceUpdate Whether to force an update.
349
- * @param stickyOptions Options for sticky behavior
350
342
  */
351
- setViewState(viewState: Partial<GridState>, forceUpdate?: boolean, stickyOptions?: StickyOptions): void;
343
+ setViewState(viewState: Partial<GridState>, forceUpdate?: boolean): void;
352
344
  /**
353
345
  * Start editing the data at the given index
354
346
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../src/Grid.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../src/Grid.tsx"],"names":[],"mappings":"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"}
package/dist/Grid.js CHANGED
@@ -920,9 +920,8 @@ class Grid extends PureComponent {
920
920
  * @param deltaColumn Number of columns to move the cursor
921
921
  * @param deltaRow Number of rows to move the cursor
922
922
  * @param extendSelection True if the current selection should be extended, false to start a new selection
923
- * @param stickyOptions Options for sticky behavior
924
923
  */
925
- moveCursor(deltaColumn, deltaRow, extendSelection, stickyOptions) {
924
+ moveCursor(deltaColumn, deltaRow, extendSelection) {
926
925
  var {
927
926
  cursorRow,
928
927
  cursorColumn,
@@ -936,7 +935,7 @@ class Grid extends PureComponent {
936
935
  left,
937
936
  top
938
937
  } = this.state;
939
- this.moveCursorToPosition(left, top, extendSelection, true, false, stickyOptions);
938
+ this.moveCursorToPosition(left, top, extendSelection);
940
939
  } else {
941
940
  var {
942
941
  model
@@ -947,7 +946,7 @@ class Grid extends PureComponent {
947
946
  } = model;
948
947
  var _left = clamp(column + deltaColumn, 0, columnCount - 1);
949
948
  var _top = clamp(row + deltaRow, 0, rowCount - 1);
950
- this.moveCursorToPosition(_left, _top, extendSelection, true, false, stickyOptions);
949
+ this.moveCursorToPosition(_left, _top, extendSelection);
951
950
  }
952
951
  }
953
952
 
@@ -1008,19 +1007,17 @@ class Grid extends PureComponent {
1008
1007
  * @param extendSelection Whether to extend the current selection (eg. holding Shift)
1009
1008
  * @param keepCursorInView Whether to move the viewport so that the cursor is in view
1010
1009
  * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started
1011
- * @param stickyOptions Options for sticky behavior
1012
1010
  */
1013
1011
  moveCursorToPosition(column, row) {
1014
1012
  var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1015
1013
  var keepCursorInView = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
1016
1014
  var maximizePreviousRange = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
1017
- var stickyOptions = arguments.length > 5 ? arguments[5] : undefined;
1018
1015
  if (!extendSelection) {
1019
1016
  this.beginSelection(column, row);
1020
1017
  }
1021
1018
  this.moveSelection(column, row, extendSelection, maximizePreviousRange);
1022
1019
  if (keepCursorInView) {
1023
- this.moveViewToCell(column, row, stickyOptions);
1020
+ this.moveViewToCell(column, row);
1024
1021
  }
1025
1022
  }
1026
1023
 
@@ -1029,9 +1026,8 @@ class Grid extends PureComponent {
1029
1026
  *
1030
1027
  * @param column The column index to bring into view
1031
1028
  * @param row The row index to bring into view
1032
- * @param stickyOptions Options for sticky behavior
1033
1029
  */
1034
- moveViewToCell(column, row, stickyOptions) {
1030
+ moveViewToCell(column, row) {
1035
1031
  if (!this.metrics) throw new Error('metrics not set');
1036
1032
  var {
1037
1033
  metricCalculator
@@ -1072,7 +1068,7 @@ class Grid extends PureComponent {
1072
1068
  left,
1073
1069
  topOffset,
1074
1070
  leftOffset
1075
- }, false, stickyOptions);
1071
+ });
1076
1072
  }
1077
1073
 
1078
1074
  /**
@@ -1080,13 +1076,9 @@ class Grid extends PureComponent {
1080
1076
  * Should be called when user interaction occurs
1081
1077
  * @param viewState New state properties to set.
1082
1078
  * @param forceUpdate Whether to force an update.
1083
- * @param stickyOptions Options for sticky behavior
1084
1079
  */
1085
-
1086
1080
  setViewState(viewState) {
1087
- var _stickyOptions$should, _stickyOptions$should2;
1088
1081
  var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1089
- var stickyOptions = arguments.length > 2 ? arguments[2] : undefined;
1090
1082
  if (!this.metrics) throw new Error('metrics not set');
1091
1083
  var {
1092
1084
  isStickyBottom,
@@ -1098,14 +1090,16 @@ class Grid extends PureComponent {
1098
1090
  } = viewState;
1099
1091
  var {
1100
1092
  lastTop,
1101
- lastLeft
1093
+ lastLeft,
1094
+ hasVerticalBar,
1095
+ hasHorizontalBar
1102
1096
  } = this.metrics;
1103
- if (top != null && ((_stickyOptions$should = stickyOptions === null || stickyOptions === void 0 ? void 0 : stickyOptions.shouldStickBottom) !== null && _stickyOptions$should !== void 0 ? _stickyOptions$should : false)) {
1097
+ if (top != null && hasVerticalBar) {
1104
1098
  this.setState({
1105
1099
  isStuckToBottom: isStickyBottom && top >= lastTop
1106
1100
  });
1107
1101
  }
1108
- if (left != null && ((_stickyOptions$should2 = stickyOptions === null || stickyOptions === void 0 ? void 0 : stickyOptions.shouldStickRight) !== null && _stickyOptions$should2 !== void 0 ? _stickyOptions$should2 : false)) {
1102
+ if (left != null && hasHorizontalBar) {
1109
1103
  this.setState({
1110
1104
  isStuckToRight: isStickyRight && left >= lastLeft
1111
1105
  });
@@ -1687,16 +1681,12 @@ class Grid extends PureComponent {
1687
1681
  }
1688
1682
  }
1689
1683
  }
1690
- var stickyOptions = {
1691
- shouldStickBottom: event.deltaY > 0,
1692
- shouldStickRight: event.deltaX > 0
1693
- };
1694
1684
  this.setViewState({
1695
1685
  top,
1696
1686
  left,
1697
1687
  leftOffset,
1698
1688
  topOffset
1699
- }, false, stickyOptions);
1689
+ });
1700
1690
  event.stopPropagation();
1701
1691
  event.preventDefault();
1702
1692
  }
package/dist/Grid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.js","names":["React","PureComponent","classNames","memoize","clamp","assertNotNull","EMPTY_ARRAY","GridMetricCalculator","GridTheme","GridRange","SELECTION_DIRECTION","GridRenderer","GridUtils","isLinkToken","GridSelectionMouseHandler","GridColumnMoveMouseHandler","GridColumnSeparatorMouseHandler","GridHorizontalScrollBarMouseHandler","GridRowMoveMouseHandler","GridRowSeparatorMouseHandler","GridRowTreeMouseHandler","GridScrollBarCornerMouseHandler","GridVerticalScrollBarMouseHandler","EditMouseHandler","GridTokenMouseHandler","EditKeyHandler","PasteKeyHandler","SelectionKeyHandler","TreeKeyHandler","CellInputField","PasteError","isExpandableGridModel","assertIsEditableGridModel","isEditableGridModel","assertIsDefined","ThemeContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Grid","getScale","context","_ref","_ref2","_ref3","_ref4","_legacyContext$webkit","devicePixelRatio","window","legacyContext","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","getCursorClassName","cursor","concat","constructor","props","_defineProperty","keyHandlers","sort","a","b","order","mouseHandlers","handleClick","bind","handleContextMenu","handleEditCellCancel","handleEditCellChange","handleEditCellCommit","handleDoubleClick","handleKeyDown","handleMouseDown","handleMouseDrag","handleMouseMove","handleMouseLeave","handleMouseUp","handleResize","handleWheel","isStuckToBottom","isStuckToRight","metricCalculator","movedColumns","movedRows","renderer","canvas","canvasContext","animationFrame","prevMetrics","metrics","renderState","documentCursor","dragTimer","state","top","left","topOffset","leftOffset","draggingColumn","draggingRow","draggingRowOffset","draggingColumnSeparator","draggingRowSeparator","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","isDragging","mouseX","mouseY","cursorRow","cursorColumn","selectionStartRow","selectionStartColumn","selectionEndRow","selectionEndColumn","selectedRanges","lastSelectedRanges","editingCell","componentDidMount","_this$canvas","initContext","addEventListener","passive","updateCanvas","scrollToBottom","scrollToRight","componentDidUpdate","prevProps","prevState","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","currentStateMovedColumns","currentStateMovedRows","setState","updateMetrics","requestUpdateCanvas","checkStickyScroll","validateSelection","checkSelectionChange","componentWillUnmount","_this$canvas2","cancelAnimationFrame","removeEventListener","stopDragTimer","getTheme","theme","getGridPointFromEvent","event","rect","getBoundingClientRect","x","clientX","y","clientY","getGridPointFromXY","Error","getMetricState","arguments","length","undefined","model","stateOverride","width","clientWidth","height","clientHeight","_objectSpread","getKeyHandlers","getCachedKeyHandlers","getMouseHandlers","getCachedMouseHandlers","getModelColumn","columnIndex","_this$metrics","_this$metrics$modelCo","modelIndex","modelColumns","get","getModelRow","rowIndex","_this$metrics2","_this$metrics2$modelR","modelRows","toggleRowExpanded","row","expandDescendants","modelRow","isRowExpandable","setRowExpanded","isRowExpanded","clearSelectedRanges","commitSelection","moveCursorToPosition","bottomVisible","rowCount","lastTop","rightVisible","columnCount","lastLeft","setSelectedRanges","gridRanges","range","boundedRange","newCursorRow","newCursorColumn","containsCell","column","startCell","startColumn","startRow","endColumn","endRow","canvasOptions","getContext","requestAnimationFrame","updateCanvasScale","updateRenderState","configureContext","onViewChanged","drawCanvas","parentElement","scale","Math","floor","style","updateScrollBounds","prevRowCount","prevColumnCount","prevHeight","prevWidth","metricState","getMetrics","oldSelectedRanges","onSelectionChanged","i","trimSelectedRanges","slice","beginSelection","moveSelection","extendSelection","maximizePreviousRange","autoSelectRow","autoSelectColumn","lastSelectedRange","right","bottom","_lastSelectedRange$st","_lastSelectedRange$st2","_lastSelectedRange$en","_lastSelectedRange$en2","min","max","selectedRange","makeNormalized","equals","newRanges","selectedColumn","selectedRow","push","cellCount","rangeArraysEqual","newSelectedRanges","lastRange","contains","remainder","subtract","pop","splice","consolidate","nextCursor","nextCell","boundedRanges","setFocusRow","focusedRow","_userRowHeights$get","gridY","userRowHeights","rowHeight","tableHeight","halfViewportHeight","round","newTop","getLastTop","selectAll","moveCursor","deltaColumn","deltaRow","stickyOptions","moveCursorInDirection","direction","DOWN","ranges","makeCell","_gridRange$nextCell","gridRange","moveViewToCell","keepCursorInView","topVisible","leftVisible","isFloatingRow","getTopForTopVisible","getTopForBottomVisible","isFloatingColumn","getLeftForLeftVisible","getLeftForRightVisible","setViewState","viewState","_stickyOptions$should","_stickyOptions$should2","forceUpdate","shouldStickBottom","shouldStickRight","startEditing","isQuickEdit","selectionRange","value","modelColumn","cell","editValueForCell","isValidForCell","pasteValue","_this","_asyncToGenerator","isEditable","every","isEditableRange","edits","modelRanges","getModelRanges","forEachCell","text","setValues","tableWidth","_range$startColumn","_range$startRow","map","_range$startColumn2","_range$startRow2","forEach","_range$startColumn3","_range$startRow3","e","onError","setValueForCell","setValueForRanges","isSelected","_selectedRange$endRow","_selectedRange$endCol","rowSelected","columnSelected","addDocumentCursor","document","documentElement","classList","remove","add","removeDocumentCursor","startDragTimer","mouseEvent","MouseEvent","nativeEvent","setTimeout","dragTimeout","clearTimeout","save","restore","focus","_this$canvas3","isFocused","activeElement","_this$canvas4","gridPoint","mouseHandler","onClick","stopPropagation","preventDefault","onContextMenu","keyHandler","result","onDown","_options$stopPropagat","_options$preventDefau","options","notifyMouseHandlers","functionName","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","button","defaultPrevented","scrollableContentWidth","scrollableViewportWidth","scrollableContentHeight","scrollableViewportHeight","hasHorizontalBar","hasVerticalBar","deltaX","deltaY","getScrollDelta","barWidth","barHeight","maxLeftOffset","_metrics$allColumnWid","columnWidth","allColumnWidths","getVisibleColumnWidth","scrollSnapToColumn","_metrics$allColumnWid2","abs","maxTopOffset","_metrics$allRowHeight","allRowHeights","getVisibleRowHeight","scrollSnapToRow","_metrics$allRowHeight2","_ref5","fillRange","renderInputField","gridX","allColumnXs","allRowYs","w","h","wrapperStyle","position","opacity","inputStyle","textAlign","textAlignForCell","isValid","children","className","error","onCancel","onChange","onDone","render","ref","onDoubleClick","onKeyDown","onMouseDown","onMouseMove","onMouseLeave","tabIndex","alpha","moveOperations","onTokenClicked","token","open","href","contextTheme","userTheme"],"sources":["../src/Grid.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { CSSProperties, PureComponent, ReactNode } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport clamp from 'lodash.clamp';\nimport { assertNotNull, EMPTY_ARRAY } from '@deephaven/utils';\nimport GridMetricCalculator, { GridMetricState } from './GridMetricCalculator';\nimport GridModel from './GridModel';\nimport GridMouseHandler, {\n GridMouseEvent,\n GridMouseHandlerFunctionName,\n} from './GridMouseHandler';\nimport GridTheme, { GridTheme as GridThemeType } from './GridTheme';\nimport GridRange, { GridRangeIndex, SELECTION_DIRECTION } from './GridRange';\nimport GridRenderer from './GridRenderer';\nimport GridUtils, { GridPoint, isLinkToken, Token } from './GridUtils';\nimport {\n GridSelectionMouseHandler,\n GridColumnMoveMouseHandler,\n GridColumnSeparatorMouseHandler,\n GridHorizontalScrollBarMouseHandler,\n GridRowMoveMouseHandler,\n GridRowSeparatorMouseHandler,\n GridRowTreeMouseHandler,\n GridScrollBarCornerMouseHandler,\n GridVerticalScrollBarMouseHandler,\n EditMouseHandler,\n GridSeparator,\n GridTokenMouseHandler,\n} from './mouse-handlers';\nimport './Grid.scss';\nimport KeyHandler, { GridKeyboardEvent } from './KeyHandler';\nimport {\n EditKeyHandler,\n PasteKeyHandler,\n SelectionKeyHandler,\n TreeKeyHandler,\n} from './key-handlers';\nimport CellInputField from './CellInputField';\nimport PasteError from './errors/PasteError';\nimport GridMetrics, {\n Coordinate,\n ModelIndex,\n MoveOperation,\n VisibleIndex,\n} from './GridMetrics';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport {\n assertIsEditableGridModel,\n EditOperation,\n isEditableGridModel,\n} from './EditableGridModel';\nimport { EventHandlerResultOptions } from './EventHandlerResult';\nimport { assertIsDefined } from './errors';\nimport ThemeContext from './ThemeContext';\nimport { DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';\nimport {\n EditingCell,\n GridRenderState,\n EditingCellTextSelectionRange,\n} from './GridRendererTypes';\n\ntype LegacyCanvasRenderingContext2D = CanvasRenderingContext2D & {\n webkitBackingStorePixelRatio?: number;\n mozBackingStorePixelRatio?: number;\n msBackingStorePixelRatio?: number;\n oBackingStorePixelRatio?: number;\n backingStorePixelRatio?: number;\n};\n\nexport type StickyOptions = {\n shouldStickBottom?: boolean;\n shouldStickRight?: boolean;\n};\n\nexport type GridProps = typeof Grid.defaultProps & {\n // Options to set on the canvas\n canvasOptions?: CanvasRenderingContext2DSettings;\n\n // Whether the grid should stick to the bottom or the right once scrolled to the end\n // Only matters with ticking grids\n isStickyBottom?: boolean;\n isStickyRight?: boolean;\n\n // Whether the grid is currently stuck to the bottom or the right\n isStuckToBottom?: boolean;\n isStuckToRight?: boolean;\n\n // Calculate all the metrics required for drawing the grid\n metricCalculator?: GridMetricCalculator;\n\n // The model to pull data from\n model: GridModel;\n\n // Optional key and mouse handlers\n keyHandlers?: readonly KeyHandler[];\n mouseHandlers?: readonly GridMouseHandler[];\n\n // Initial state of moved columns or rows\n movedColumns?: readonly MoveOperation[];\n movedRows?: readonly MoveOperation[];\n\n // Callback for if an error occurs\n onError?: (e: Error) => void;\n\n // Callback when the selection within the grid changes\n onSelectionChanged?: (ranges: readonly GridRange[]) => void;\n\n // Callback when the moved columns or rows have changed\n onMovedColumnsChanged?: (movedColumns: readonly MoveOperation[]) => void;\n onMovedRowsChanged?: (movedRows: readonly MoveOperation[]) => void;\n\n // Callback when a move operation is completed\n onMoveColumnComplete?: (movedColumns: readonly MoveOperation[]) => void;\n onMoveRowComplete?: (movedRows: readonly MoveOperation[]) => void;\n\n // Callback when the viewport has scrolled or changed\n onViewChanged?: (metrics: GridMetrics) => void;\n\n // Callback when a token is clicked\n // eslint-disable-next-line react/no-unused-prop-types\n onTokenClicked?: (token: Token) => void;\n\n // Renderer for the grid canvas\n renderer?: GridRenderer;\n\n // Optional state override to pass in to the metric and render state\n // Can be used to add custom properties as well\n stateOverride?: Record<string, unknown>;\n\n theme?: Partial<GridThemeType>;\n};\n\nexport type GridState = {\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: VisibleIndex;\n left: VisibleIndex;\n\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n topOffset: number; // Should be less than the height of the row\n leftOffset: number; // Should be less than the width of the column\n\n // current column/row that user is dragging\n draggingColumn: DraggingColumn | null;\n draggingRow: VisibleIndex | null;\n\n // Offset when dragging a row\n draggingRowOffset: number | null;\n\n // When drawing header separators for resizing\n // Keeps hover style when mouse is in buffer before resize starts\n draggingColumnSeparator: GridSeparator | null;\n draggingRowSeparator: GridSeparator | null;\n\n // Dragging a scroll bar status\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n\n // Anything is performing a drag, for blocking hover rendering\n isDragging: boolean;\n\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: number | null;\n mouseY: number | null;\n\n // Move operations the user has performed on this grids columns/rows\n movedColumns: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n\n // Cursor (highlighted cell) location and active selected range\n cursorRow: VisibleIndex | null;\n cursorColumn: VisibleIndex | null;\n selectionStartRow: VisibleIndex | null;\n selectionStartColumn: VisibleIndex | null;\n selectionEndRow: VisibleIndex | null;\n selectionEndColumn: VisibleIndex | 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: readonly GridRange[];\n lastSelectedRanges: readonly GridRange[];\n\n // The mouse cursor style to use when hovering over the grid element\n cursor: string | 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: EditingCell | null;\n\n // Whether we're stuck to the bottom or the right\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n};\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<GridProps, GridState> {\n static contextType = ThemeContext;\n\n static defaultProps = {\n canvasOptions: { alpha: false } as CanvasRenderingContext2DSettings,\n isStickyBottom: false,\n isStickyRight: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n keyHandlers: EMPTY_ARRAY as readonly KeyHandler[],\n mouseHandlers: EMPTY_ARRAY as readonly GridMouseHandler[],\n movedColumns: EMPTY_ARRAY as readonly MoveOperation[],\n movedRows: EMPTY_ARRAY as readonly MoveOperation[],\n onError: (): void => undefined,\n onSelectionChanged: (): void => undefined,\n onMovedColumnsChanged: (moveOperations: readonly MoveOperation[]): void =>\n undefined,\n onMoveColumnComplete: (): void => undefined,\n onMovedRowsChanged: (): void => undefined,\n onMoveRowComplete: (): void => undefined,\n onViewChanged: (metrics: GridMetrics): void => undefined,\n onTokenClicked: (token: Token): void => {\n if (isLinkToken(token)) {\n window.open(token.href, '_blank', 'noopener,noreferrer');\n }\n },\n stateOverride: {} as Record<string, unknown>,\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false,\n } as Partial<GridThemeType>,\n };\n\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(\n (\n contextTheme: Partial<GridThemeType>,\n userTheme: Partial<GridThemeType>\n ) => ({\n ...GridTheme,\n ...contextTheme,\n ...userTheme,\n })\n );\n\n /**\n * On some devices there may be different scaling required for high DPI. Get the scale required for the canvas.\n * @param context The canvas context\n * @returns The scale to use\n */\n static getScale(context: CanvasRenderingContext2D): number {\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n // backingStorePixelRatio is deprecated, but check it just in case\n const legacyContext = context as LegacyCanvasRenderingContext2D;\n\n const backingStorePixelRatio =\n // Not worth converting to a massive if structure\n // Converting would reduce readability and maintainability\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n legacyContext.webkitBackingStorePixelRatio ??\n legacyContext.mozBackingStorePixelRatio ??\n legacyContext.msBackingStorePixelRatio ??\n legacyContext.oBackingStorePixelRatio ??\n legacyContext.backingStorePixelRatio ??\n 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n /**\n * Get the class name from the cursor provided\n * @param cursor The grid cursor to use\n * @returns Class name with the grid-cursor prefix or null if no cursor provided\n */\n static getCursorClassName(cursor: string | null): string | null {\n return cursor != null && cursor !== '' ? `grid-cursor-${cursor}` : null;\n }\n\n // Need to disable react/sort-comp so I can put the fields here\n /* eslint-disable react/sort-comp */\n renderer: GridRenderer;\n\n metricCalculator: GridMetricCalculator;\n\n canvas: HTMLCanvasElement | null;\n\n canvasContext: CanvasRenderingContext2D | null;\n\n // We draw the canvas on the next animation frame, keep track of the next one\n animationFrame: number | null;\n\n // Keep track of previous metrics and new metrics for comparison\n prevMetrics: GridMetrics | null;\n\n metrics: GridMetrics | null;\n\n renderState: GridRenderState;\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 documentCursor: string | null;\n\n dragTimer: ReturnType<typeof setTimeout> | null;\n\n keyHandlers: readonly KeyHandler[];\n\n mouseHandlers: readonly GridMouseHandler[];\n\n /* eslint-enable react/sort-comp */\n\n constructor(props: GridProps) {\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 {\n isStuckToBottom,\n isStuckToRight,\n metricCalculator,\n movedColumns,\n movedRows,\n renderer,\n } = 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.renderState = {} as GridRenderState;\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 GridTokenMouseHandler(875),\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 row\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: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\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 isStuckToBottom,\n isStuckToRight,\n };\n }\n\n componentDidMount(): void {\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, {\n passive: false,\n });\n window.addEventListener('resize', this.handleResize);\n\n this.updateCanvas();\n\n // apply on mount, so that it works with a static model\n // https://github.com/deephaven/web-client-ui/issues/581\n const { isStuckToBottom, isStuckToRight } = this.props;\n if (isStuckToBottom) {\n this.scrollToBottom();\n }\n if (isStuckToRight) {\n this.scrollToRight();\n }\n }\n\n componentDidUpdate(prevProps: GridProps, prevState: GridState): void {\n const {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n onMovedRowsChanged,\n onMoveRowComplete,\n } = this.props;\n\n const {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevPropMovedRows,\n } = prevProps;\n const {\n movedColumns: prevStateMovedColumns,\n movedRows: prevStateMovedRows,\n } = prevState;\n const {\n draggingColumn,\n draggingRow,\n movedColumns: currentStateMovedColumns,\n movedRows: currentStateMovedRows,\n } = this.state;\n\n if (prevPropMovedColumns !== movedColumns) {\n this.setState({ movedColumns });\n }\n\n if (prevPropMovedRows !== 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 (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n\n if (isStickyBottom !== prevIsStickyBottom) {\n this.setState({ isStuckToBottom: false });\n }\n\n if (isStickyRight !== prevIsStickyRight) {\n this.setState({ isStuckToRight: false });\n }\n\n this.updateMetrics();\n\n this.requestUpdateCanvas();\n\n this.checkStickyScroll();\n\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n }\n\n componentWillUnmount(): void {\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n\n this.canvas?.removeEventListener('wheel', this.handleWheel);\n\n window.removeEventListener(\n 'mousemove',\n this.handleMouseDrag as unknown as EventListenerOrEventListenerObject,\n true\n );\n window.removeEventListener(\n 'mouseup',\n this.handleMouseUp as unknown as EventListenerOrEventListenerObject,\n true\n );\n window.removeEventListener('resize', this.handleResize);\n\n this.stopDragTimer();\n }\n\n getTheme(): GridThemeType {\n const { theme } = this.props;\n return Grid.getTheme(this.context, theme);\n }\n\n getGridPointFromEvent(event: GridMouseEvent): GridPoint {\n assertIsDefined(this.canvas);\n\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: Coordinate, y: Coordinate): GridPoint {\n if (!this.metrics) throw new Error('metrics must be set');\n\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n\n getMetricState(state = this.state): GridMetricState {\n const theme = this.getTheme();\n const { model, stateOverride } = this.props;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\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 draggingColumn,\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 draggingColumn,\n ...stateOverride,\n };\n }\n\n getCachedKeyHandlers = memoize((keyHandlers: readonly KeyHandler[]) =>\n [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)\n );\n\n getKeyHandlers(): readonly KeyHandler[] {\n const { keyHandlers } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n\n getCachedMouseHandlers = memoize(\n (mouseHandlers: readonly GridMouseHandler[]): readonly GridMouseHandler[] =>\n [...mouseHandlers, ...this.mouseHandlers].sort(\n (a, b) => a.order - b.order\n )\n );\n\n getMouseHandlers(): readonly GridMouseHandler[] {\n const { mouseHandlers } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex: VisibleIndex): ModelIndex {\n const modelIndex = this.metrics?.modelColumns?.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(`Unable to get ModelIndex for column ${columnIndex}`);\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex: VisibleIndex): ModelIndex {\n const modelIndex = this.metrics?.modelRows?.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(`Unable to get ModelIndex for row ${rowIndex}`);\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row: VisibleIndex, expandDescendants = false): void {\n const modelRow = this.getModelRow(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 (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(\n modelRow,\n !model.isRowExpanded(modelRow),\n expandDescendants\n );\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.setState({ isStuckToBottom: false });\n }\n\n /**\n * Scrolls to bottom, if not already at bottom\n */\n scrollToBottom(): void {\n if (!this.metrics) return;\n const { bottomVisible, rowCount, top, lastTop } = this.metrics;\n if ((bottomVisible < rowCount - 1 && bottomVisible > 0) || top > lastTop) {\n this.setState({ top: lastTop });\n }\n }\n\n /**\n * Scrolls to right, if not already at right\n */\n scrollToRight(): void {\n if (!this.metrics) return;\n const { rightVisible, columnCount, left, lastLeft } = this.metrics;\n if (\n (rightVisible < columnCount - 1 && rightVisible > 0) ||\n left > lastLeft\n ) {\n this.setState({ left: lastLeft });\n }\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges: readonly GridRange[]): void {\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(): void {\n const { canvas } = this;\n const { canvasOptions } = this.props;\n\n if (!canvas) throw new Error('Canvas not set');\n\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n\n requestUpdateCanvas(): void {\n if (this.animationFrame != null) {\n return;\n }\n\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n\n this.updateCanvas();\n });\n }\n\n updateCanvas(): void {\n this.updateCanvasScale();\n\n this.updateMetrics();\n\n this.updateRenderState();\n\n const { canvasContext, metrics, renderState } = this;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n\n this.renderer.configureContext(canvasContext, renderState);\n\n const { onViewChanged } = this.props;\n onViewChanged(metrics);\n\n this.drawCanvas(metrics);\n }\n\n private updateCanvasScale(): void {\n const { canvas, canvasContext } = this;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvas.parentElement) throw new Error('Canvas has no parent element');\n\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 rect = canvas.parentElement.getBoundingClientRect();\n const width = Math.floor(rect.width);\n const height = Math.floor(rect.height);\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n\n updateScrollBounds(): void {\n if (!this.metrics) throw new Error('metrics not set');\n const { left, top } = this.state;\n const { lastLeft, lastTop } = this.metrics;\n if (left > lastLeft) {\n this.setState({ left: lastLeft, leftOffset: 0 });\n }\n if (top > lastTop) {\n this.setState({ top: lastTop, topOffset: 0 });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n checkStickyScroll(): void {\n if (!this.metrics) {\n return;\n }\n\n if (this.prevMetrics) {\n const { rowCount, columnCount, height, width } = this.metrics;\n const {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth,\n } = this.prevMetrics;\n\n if (prevRowCount !== rowCount || height !== prevHeight) {\n const { isStuckToBottom } = this.state;\n if (isStuckToBottom) {\n this.scrollToBottom();\n }\n }\n\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n const { isStuckToRight } = this.state;\n if (isStuckToRight) {\n this.scrollToRight();\n }\n }\n }\n this.prevMetrics = this.metrics;\n }\n\n updateMetrics(state = this.state): GridMetrics {\n this.prevMetrics = this.metrics;\n\n const { metricCalculator } = this;\n const metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState: GridState): void {\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 /**\n * Validate the current selection, and reset if it is invalid\n * @returns True if the selection is valid, false if the selection was invalid and has been reset\n */\n validateSelection(): boolean {\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 /**\n * Clears all selected ranges\n */\n clearSelectedRanges(): void {\n const { selectedRanges } = this.state;\n this.setState({ selectedRanges: [], lastSelectedRanges: selectedRanges });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges(): void {\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 /**\n * Begin a selection operation at the provided location\n * @param column Column where the selection is beginning\n * @param row Row where the selection is beginning\n */\n beginSelection(column: GridRangeIndex, row: GridRangeIndex): void {\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 column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(\n column: GridRangeIndex,\n row: GridRangeIndex,\n extendSelection = false,\n maximizePreviousRange = false\n ): void {\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 =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : Math.min(column ?? 0, lastSelectedRange.startColumn ?? 0);\n top =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : Math.min(row ?? 0, lastSelectedRange.startRow ?? 0);\n right =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : Math.max(column ?? 0, lastSelectedRange.endColumn ?? 0);\n bottom =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : Math.max(row ?? 0, lastSelectedRange.endRow ?? 0);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (autoSelectRow === undefined || !autoSelectRow) {\n left = selectionStartColumn;\n }\n if (autoSelectColumn === undefined || !autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow !== undefined && autoSelectRow ? null : column;\n bottom =\n autoSelectColumn !== undefined && 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 = [...selectedRanges];\n newRanges[newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n }\n const newRanges = [...selectedRanges];\n const selectedColumn =\n autoSelectRow !== undefined && autoSelectRow ? null : column;\n const selectedRow =\n autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n\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(): void {\n this.setState((state: GridState) => {\n const { theme } = this.props;\n const { autoSelectRow } = theme;\n const { selectedRanges, lastSelectedRanges, cursorRow, cursorColumn } =\n state;\n\n if (\n selectedRanges.length === 1 &&\n (autoSelectRow !== undefined && 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 {\n selectedRanges: [],\n lastSelectedRanges: [],\n cursorColumn: null,\n cursorRow: null,\n };\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\n if (newSelectedRanges.length === 0) {\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 setFocusRow(focusedRow: number): void {\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n\n const { gridY, height, lastTop, userRowHeights, rowHeight } = this.metrics;\n\n const tableHeight = height - gridY;\n\n const halfViewportHeight =\n Math.round(tableHeight / 2) +\n (userRowHeights.get(focusedRow) ?? rowHeight);\n\n const metricState = this.getMetricState();\n const newTop = this.metricCalculator.getLastTop(\n metricState,\n focusedRow + 1,\n halfViewportHeight\n );\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false,\n });\n const { cursorColumn } = this.state;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll(): void {\n const { model, theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n const top = autoSelectColumn !== undefined && autoSelectColumn ? null : 0;\n const bottom =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : model.rowCount - 1;\n const left = autoSelectRow !== undefined && autoSelectRow ? null : 0;\n const right =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n /**\n * Move the cursor in relation to the current cursor position\n * @param deltaColumn Number of columns to move the cursor\n * @param deltaRow Number of rows to move the cursor\n * @param extendSelection True if the current selection should be extended, false to start a new selection\n * @param stickyOptions Options for sticky behavior\n */\n moveCursor(\n deltaColumn: number,\n deltaRow: number,\n extendSelection: boolean,\n stickyOptions?: StickyOptions\n ): void {\n const { cursorRow, cursorColumn, selectionEndColumn, 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(\n left,\n top,\n extendSelection,\n true,\n false,\n stickyOptions\n );\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(\n left,\n top,\n extendSelection,\n true,\n false,\n stickyOptions\n );\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param direction The direction to move the cursor in\n */\n moveCursorInDirection(direction = GridRange.SELECTION_DIRECTION.DOWN): void {\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 column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n * @param stickyOptions Options for sticky behavior\n */\n moveCursorToPosition(\n column: GridRangeIndex,\n row: GridRangeIndex,\n extendSelection = false,\n keepCursorInView = true,\n maximizePreviousRange = false,\n stickyOptions?: StickyOptions\n ): void {\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, stickyOptions);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param column The column index to bring into view\n * @param row The row index to bring into view\n * @param stickyOptions Options for sticky behavior\n */\n moveViewToCell(\n column: GridRangeIndex,\n row: GridRangeIndex,\n stickyOptions?: StickyOptions\n ): void {\n if (!this.metrics) throw new Error('metrics not set');\n\n const { metricCalculator } = this;\n const { bottomVisible, rightVisible, topVisible, 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(\n { top, left, topOffset, leftOffset },\n false,\n stickyOptions\n );\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 viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n * @param stickyOptions Options for sticky behavior\n */\n\n setViewState(\n viewState: Partial<GridState>,\n forceUpdate = false,\n stickyOptions?: StickyOptions\n ): void {\n if (!this.metrics) throw new Error('metrics not set');\n\n const { isStickyBottom, isStickyRight } = this.props;\n const { top, left } = viewState;\n const { lastTop, lastLeft } = this.metrics;\n\n if (top != null && (stickyOptions?.shouldStickBottom ?? false)) {\n this.setState({\n isStuckToBottom: isStickyBottom && top >= lastTop,\n });\n }\n if (left != null && (stickyOptions?.shouldStickRight ?? false)) {\n this.setState({\n isStuckToRight: isStickyRight && left >= lastLeft,\n });\n }\n\n this.setState(viewState as GridState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(\n column: VisibleIndex,\n row: VisibleIndex,\n isQuickEdit = false,\n selectionRange?: EditingCellTextSelectionRange,\n value?: string\n ): void {\n const { model } = this.props;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n\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 /**\n * Check if a value is valid for a specific cell\n * @param column Column index of the cell to check\n * @param row Row index of the cell to check\n * @param value Value to check\n * @returns True if the value is valid for the provided cell, false otherwise\n */\n isValidForCell(\n column: VisibleIndex,\n row: VisibleIndex,\n value: string\n ): boolean {\n const { model } = this.props;\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n return (\n isEditableGridModel(model) &&\n model.isValidForCell(modelColumn, modelRow, value)\n );\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 value Table or a string that is being pasted\n */\n async pasteValue(value: string[][] | string): Promise<void> {\n const { model } = this.props;\n const { movedColumns, movedRows, selectedRanges } = this.state;\n\n try {\n assertIsEditableGridModel(model);\n\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: EditOperation[] = [];\n\n const modelRanges = GridUtils.getModelRanges(\n selectedRanges,\n movedColumns,\n movedRows\n );\n GridRange.forEachCell(modelRanges, (column, row) => {\n edits.push({ column, row, 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 ?? 0) + tableWidth <= columnCount &&\n (range.startRow ?? 0) + 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 ?? 0) + tableWidth - 1,\n (range.startRow ?? 0) + 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: EditOperation[] = [];\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 column: (range.startColumn ?? 0) + x,\n row: (range.startRow ?? 0) + 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 instanceof Error ? e : new Error(`${e}`));\n }\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(\n column: VisibleIndex,\n row: VisibleIndex,\n value: string\n ): boolean {\n const { model } = this.props;\n assertIsEditableGridModel(model);\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 return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges: readonly GridRange[], value: string): void {\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 if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value);\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row: VisibleIndex, column: VisibleIndex): boolean {\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 ?? 0));\n const columnSelected =\n selectedRange.startColumn === null ||\n (selectedRange.startColumn <= column &&\n column <= (selectedRange.endColumn ?? 0));\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n\n return false;\n }\n\n addDocumentCursor(cursor: string | null = null): void {\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n }\n this.documentCursor = Grid.getCursorClassName(cursor);\n if (this.documentCursor != null) {\n document.documentElement.classList.add(this.documentCursor);\n }\n document.documentElement.classList.add('grid-block-events');\n }\n\n removeDocumentCursor(): void {\n if (this.documentCursor != null) {\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: React.MouseEvent): void {\n this.stopDragTimer();\n\n const mouseEvent = new MouseEvent('custom', event.nativeEvent);\n\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n\n stopDragTimer(): void {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\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 * @param metrics Metrics to use for rendering the grid\n */\n private drawCanvas(metrics = this.updateMetrics()): void {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n\n const { renderer, canvasContext: context, renderState } = this;\n\n context.save();\n\n renderer.drawCanvas(renderState);\n\n context.restore();\n }\n\n /**\n * Set focus to this grid element\n */\n focus(): void {\n this.canvas?.focus();\n }\n\n /**\n * Check if this grid is currently focused\n * @returns True if the active element is this grid\n */\n isFocused(): boolean {\n return document.activeElement === this.canvas;\n }\n\n /**\n * Handle a mouse click event. Pass the event to the registered mouse handlers until one handles it.\n * Focuses the grid after the click.\n * @param event The mouse event\n */\n handleClick(event: React.MouseEvent): void {\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) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n\n this.canvas?.focus();\n }\n\n /**\n * Handle a mouse context menu event. Pass the event to the registered mouse handlers until one handles it.\n * @param event The mouse event triggering the context menu\n */\n handleContextMenu(event: React.MouseEvent): void {\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) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Handle a key down event from the keyboard. Pass the event to the registered keyboard handlers until one handles it.\n * @param event Keyboard event\n */\n handleKeyDown(event: GridKeyboardEvent): void {\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(event, this);\n if (result !== false) {\n const options = result as EventHandlerResultOptions;\n if (options?.stopPropagation ?? true) event.stopPropagation();\n if (options?.preventDefault ?? true) event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(\n functionName: GridMouseHandlerFunctionName,\n event: GridMouseEvent,\n updateCoordinates = true,\n addCursorToDocument = false\n ): void {\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] != null &&\n mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\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 const options = result as EventHandlerResultOptions;\n if (options?.stopPropagation ?? true) event.stopPropagation();\n if (options?.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: React.MouseEvent): void {\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('onDown', event);\n\n this.startDragTimer(event);\n }\n\n handleDoubleClick(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n\n handleMouseMove(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onMove', event);\n }\n\n handleMouseLeave(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({ mouseX: null, mouseY: null });\n }\n\n handleMouseDrag(event: MouseEvent): void {\n this.setState({ isDragging: true });\n this.notifyMouseHandlers('onDrag', event, true, true);\n\n this.stopDragTimer();\n }\n\n handleMouseUp(event: MouseEvent): void {\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('onUp', event, false);\n\n this.stopDragTimer();\n\n this.removeDocumentCursor();\n }\n\n handleResize(): void {\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.updateCanvas();\n\n if (!this.metrics) throw new Error('metrics not set');\n\n this.forceUpdate();\n }\n\n handleWheel(event: WheelEvent): void {\n this.notifyMouseHandlers('onWheel', event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n const { metricCalculator, metrics } = this;\n const metricState = this.getMetricState();\n\n if (!metrics) throw new Error('metrics not set');\n\n const {\n lastTop,\n lastLeft,\n columnCount,\n rowCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n scrollableContentHeight,\n scrollableViewportHeight,\n hasHorizontalBar,\n hasVerticalBar,\n } = metrics;\n let { top, left, topOffset, leftOffset } = metrics;\n\n const theme = this.getTheme();\n\n let { deltaX, deltaY } = GridUtils.getScrollDelta(\n event,\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 (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n\n if (columnCount > 1) {\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 } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n\n const maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n\n if (leftOffset > 0) {\n // scroll right\n\n // get width of next column\n const columnWidth =\n metrics.allColumnWidths.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 && columnCount > 1) {\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.allColumnWidths.get(left - 1) ??\n metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n\n if (\n Math.abs(leftOffset) <= columnWidth &&\n theme.scrollSnapToColumn &&\n columnCount > 1\n ) {\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 (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if ((topOffset > 0 && top >= lastTop) || (topOffset < 0 && top <= 0)) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n\n const maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n\n if (topOffset > 0) {\n // scroll direction down\n\n // get height of next row\n const rowHeight =\n metrics.allRowHeights.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 && rowCount > 1) {\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.allRowHeights.get(top - 1) ??\n metricCalculator.getVisibleRowHeight(top - 1, metricState);\n\n if (\n Math.abs(topOffset) <= rowHeight &&\n theme.scrollSnapToRow &&\n rowCount > 1\n ) {\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 const stickyOptions: StickyOptions = {\n shouldStickBottom: event.deltaY > 0,\n shouldStickRight: event.deltaX > 0,\n };\n this.setViewState(\n { top, left, leftOffset, topOffset },\n false,\n stickyOptions\n );\n\n event.stopPropagation();\n event.preventDefault();\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel(): void {\n this.setState({ editingCell: null });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value: string): void {\n this.setState(({ editingCell }) => {\n try {\n assertIsDefined(editingCell);\n\n return {\n editingCell: { ...editingCell, value } as EditingCell,\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n const { onError } = this.props;\n onError(e instanceof Error ? e : new Error(`${e}`));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(\n value: string,\n {\n direction = SELECTION_DIRECTION.DOWN,\n fillRange = false,\n }: { direction?: SELECTION_DIRECTION | null; fillRange?: boolean } = {}\n ): void {\n const { editingCell, selectedRanges } = this.state;\n if (!editingCell) throw new Error('editingCell not set');\n\n const { column, row } = editingCell;\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(): ReactNode {\n const { model } = this.props;\n const { editingCell } = this.state;\n const { metrics } = this;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n const { selectionRange, value, isQuickEdit } = editingCell;\n const { column, row } = editingCell;\n const {\n gridX,\n gridY,\n allColumnXs,\n allRowYs,\n allColumnWidths,\n allRowHeights,\n } = metrics;\n\n const x = allColumnXs.get(column);\n const y = allRowYs.get(row);\n const w = allColumnWidths.get(column);\n const h = allRowHeights.get(row);\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n const wrapperStyle: CSSProperties =\n x != null && y != null && w != null && h != null\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: CSSProperties | undefined =\n modelColumn != null && modelRow != null\n ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow),\n }\n : undefined;\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 /**\n * Gets the render state\n * @returns The render state\n */\n updateRenderState(): GridRenderState {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n\n const {\n cursorColumn,\n cursorRow,\n draggingColumn,\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 { metrics } = this;\n const context = this.canvasContext;\n const theme = this.getTheme();\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n\n assertNotNull(metrics);\n\n this.renderState = {\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\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 return this.renderState;\n }\n\n render(): ReactNode {\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\nexport default Grid;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Grid.js","names":["React","PureComponent","classNames","memoize","clamp","assertNotNull","EMPTY_ARRAY","GridMetricCalculator","GridTheme","GridRange","SELECTION_DIRECTION","GridRenderer","GridUtils","isLinkToken","GridSelectionMouseHandler","GridColumnMoveMouseHandler","GridColumnSeparatorMouseHandler","GridHorizontalScrollBarMouseHandler","GridRowMoveMouseHandler","GridRowSeparatorMouseHandler","GridRowTreeMouseHandler","GridScrollBarCornerMouseHandler","GridVerticalScrollBarMouseHandler","EditMouseHandler","GridTokenMouseHandler","EditKeyHandler","PasteKeyHandler","SelectionKeyHandler","TreeKeyHandler","CellInputField","PasteError","isExpandableGridModel","assertIsEditableGridModel","isEditableGridModel","assertIsDefined","ThemeContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Grid","getScale","context","_ref","_ref2","_ref3","_ref4","_legacyContext$webkit","devicePixelRatio","window","legacyContext","backingStorePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","getCursorClassName","cursor","concat","constructor","props","_defineProperty","keyHandlers","sort","a","b","order","mouseHandlers","handleClick","bind","handleContextMenu","handleEditCellCancel","handleEditCellChange","handleEditCellCommit","handleDoubleClick","handleKeyDown","handleMouseDown","handleMouseDrag","handleMouseMove","handleMouseLeave","handleMouseUp","handleResize","handleWheel","isStuckToBottom","isStuckToRight","metricCalculator","movedColumns","movedRows","renderer","canvas","canvasContext","animationFrame","prevMetrics","metrics","renderState","documentCursor","dragTimer","state","top","left","topOffset","leftOffset","draggingColumn","draggingRow","draggingRowOffset","draggingColumnSeparator","draggingRowSeparator","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","isDragging","mouseX","mouseY","cursorRow","cursorColumn","selectionStartRow","selectionStartColumn","selectionEndRow","selectionEndColumn","selectedRanges","lastSelectedRanges","editingCell","componentDidMount","_this$canvas","initContext","addEventListener","passive","updateCanvas","scrollToBottom","scrollToRight","componentDidUpdate","prevProps","prevState","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","currentStateMovedColumns","currentStateMovedRows","setState","updateMetrics","requestUpdateCanvas","checkStickyScroll","validateSelection","checkSelectionChange","componentWillUnmount","_this$canvas2","cancelAnimationFrame","removeEventListener","stopDragTimer","getTheme","theme","getGridPointFromEvent","event","rect","getBoundingClientRect","x","clientX","y","clientY","getGridPointFromXY","Error","getMetricState","arguments","length","undefined","model","stateOverride","width","clientWidth","height","clientHeight","_objectSpread","getKeyHandlers","getCachedKeyHandlers","getMouseHandlers","getCachedMouseHandlers","getModelColumn","columnIndex","_this$metrics","_this$metrics$modelCo","modelIndex","modelColumns","get","getModelRow","rowIndex","_this$metrics2","_this$metrics2$modelR","modelRows","toggleRowExpanded","row","expandDescendants","modelRow","isRowExpandable","setRowExpanded","isRowExpanded","clearSelectedRanges","commitSelection","moveCursorToPosition","bottomVisible","rowCount","lastTop","rightVisible","columnCount","lastLeft","setSelectedRanges","gridRanges","range","boundedRange","newCursorRow","newCursorColumn","containsCell","column","startCell","startColumn","startRow","endColumn","endRow","canvasOptions","getContext","requestAnimationFrame","updateCanvasScale","updateRenderState","configureContext","onViewChanged","drawCanvas","parentElement","scale","Math","floor","style","updateScrollBounds","prevRowCount","prevColumnCount","prevHeight","prevWidth","metricState","getMetrics","oldSelectedRanges","onSelectionChanged","i","trimSelectedRanges","slice","beginSelection","moveSelection","extendSelection","maximizePreviousRange","autoSelectRow","autoSelectColumn","lastSelectedRange","right","bottom","_lastSelectedRange$st","_lastSelectedRange$st2","_lastSelectedRange$en","_lastSelectedRange$en2","min","max","selectedRange","makeNormalized","equals","newRanges","selectedColumn","selectedRow","push","cellCount","rangeArraysEqual","newSelectedRanges","lastRange","contains","remainder","subtract","pop","splice","consolidate","nextCursor","nextCell","boundedRanges","setFocusRow","focusedRow","_userRowHeights$get","gridY","userRowHeights","rowHeight","tableHeight","halfViewportHeight","round","newTop","getLastTop","selectAll","moveCursor","deltaColumn","deltaRow","moveCursorInDirection","direction","DOWN","ranges","makeCell","_gridRange$nextCell","gridRange","moveViewToCell","keepCursorInView","topVisible","leftVisible","isFloatingRow","getTopForTopVisible","getTopForBottomVisible","isFloatingColumn","getLeftForLeftVisible","getLeftForRightVisible","setViewState","viewState","forceUpdate","hasVerticalBar","hasHorizontalBar","startEditing","isQuickEdit","selectionRange","value","modelColumn","cell","editValueForCell","isValidForCell","pasteValue","_this","_asyncToGenerator","isEditable","every","isEditableRange","edits","modelRanges","getModelRanges","forEachCell","text","setValues","tableWidth","_range$startColumn","_range$startRow","map","_range$startColumn2","_range$startRow2","forEach","_range$startColumn3","_range$startRow3","e","onError","setValueForCell","setValueForRanges","isSelected","_selectedRange$endRow","_selectedRange$endCol","rowSelected","columnSelected","addDocumentCursor","document","documentElement","classList","remove","add","removeDocumentCursor","startDragTimer","mouseEvent","MouseEvent","nativeEvent","setTimeout","dragTimeout","clearTimeout","save","restore","focus","_this$canvas3","isFocused","activeElement","_this$canvas4","gridPoint","mouseHandler","onClick","stopPropagation","preventDefault","onContextMenu","keyHandler","result","onDown","_options$stopPropagat","_options$preventDefau","options","notifyMouseHandlers","functionName","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","button","defaultPrevented","scrollableContentWidth","scrollableViewportWidth","scrollableContentHeight","scrollableViewportHeight","deltaX","deltaY","getScrollDelta","barWidth","barHeight","maxLeftOffset","_metrics$allColumnWid","columnWidth","allColumnWidths","getVisibleColumnWidth","scrollSnapToColumn","_metrics$allColumnWid2","abs","maxTopOffset","_metrics$allRowHeight","allRowHeights","getVisibleRowHeight","scrollSnapToRow","_metrics$allRowHeight2","_ref5","fillRange","renderInputField","gridX","allColumnXs","allRowYs","w","h","wrapperStyle","position","opacity","inputStyle","textAlign","textAlignForCell","isValid","children","className","error","onCancel","onChange","onDone","render","ref","onDoubleClick","onKeyDown","onMouseDown","onMouseMove","onMouseLeave","tabIndex","alpha","moveOperations","onTokenClicked","token","open","href","contextTheme","userTheme"],"sources":["../src/Grid.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { CSSProperties, PureComponent, ReactNode } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport clamp from 'lodash.clamp';\nimport { assertNotNull, EMPTY_ARRAY } from '@deephaven/utils';\nimport GridMetricCalculator, { GridMetricState } from './GridMetricCalculator';\nimport GridModel from './GridModel';\nimport GridMouseHandler, {\n GridMouseEvent,\n GridMouseHandlerFunctionName,\n} from './GridMouseHandler';\nimport GridTheme, { GridTheme as GridThemeType } from './GridTheme';\nimport GridRange, { GridRangeIndex, SELECTION_DIRECTION } from './GridRange';\nimport GridRenderer from './GridRenderer';\nimport GridUtils, { GridPoint, isLinkToken, Token } from './GridUtils';\nimport {\n GridSelectionMouseHandler,\n GridColumnMoveMouseHandler,\n GridColumnSeparatorMouseHandler,\n GridHorizontalScrollBarMouseHandler,\n GridRowMoveMouseHandler,\n GridRowSeparatorMouseHandler,\n GridRowTreeMouseHandler,\n GridScrollBarCornerMouseHandler,\n GridVerticalScrollBarMouseHandler,\n EditMouseHandler,\n GridSeparator,\n GridTokenMouseHandler,\n} from './mouse-handlers';\nimport './Grid.scss';\nimport KeyHandler, { GridKeyboardEvent } from './KeyHandler';\nimport {\n EditKeyHandler,\n PasteKeyHandler,\n SelectionKeyHandler,\n TreeKeyHandler,\n} from './key-handlers';\nimport CellInputField from './CellInputField';\nimport PasteError from './errors/PasteError';\nimport GridMetrics, {\n Coordinate,\n ModelIndex,\n MoveOperation,\n VisibleIndex,\n} from './GridMetrics';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport {\n assertIsEditableGridModel,\n EditOperation,\n isEditableGridModel,\n} from './EditableGridModel';\nimport { EventHandlerResultOptions } from './EventHandlerResult';\nimport { assertIsDefined } from './errors';\nimport ThemeContext from './ThemeContext';\nimport { DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';\nimport {\n EditingCell,\n GridRenderState,\n EditingCellTextSelectionRange,\n} from './GridRendererTypes';\n\ntype LegacyCanvasRenderingContext2D = CanvasRenderingContext2D & {\n webkitBackingStorePixelRatio?: number;\n mozBackingStorePixelRatio?: number;\n msBackingStorePixelRatio?: number;\n oBackingStorePixelRatio?: number;\n backingStorePixelRatio?: number;\n};\n\nexport type GridProps = typeof Grid.defaultProps & {\n // Options to set on the canvas\n canvasOptions?: CanvasRenderingContext2DSettings;\n\n // Whether the grid should stick to the bottom or the right once scrolled to the end\n // Only matters with ticking grids\n isStickyBottom?: boolean;\n isStickyRight?: boolean;\n\n // Whether the grid is currently stuck to the bottom or the right\n isStuckToBottom?: boolean;\n isStuckToRight?: boolean;\n\n // Calculate all the metrics required for drawing the grid\n metricCalculator?: GridMetricCalculator;\n\n // The model to pull data from\n model: GridModel;\n\n // Optional key and mouse handlers\n keyHandlers?: readonly KeyHandler[];\n mouseHandlers?: readonly GridMouseHandler[];\n\n // Initial state of moved columns or rows\n movedColumns?: readonly MoveOperation[];\n movedRows?: readonly MoveOperation[];\n\n // Callback for if an error occurs\n onError?: (e: Error) => void;\n\n // Callback when the selection within the grid changes\n onSelectionChanged?: (ranges: readonly GridRange[]) => void;\n\n // Callback when the moved columns or rows have changed\n onMovedColumnsChanged?: (movedColumns: readonly MoveOperation[]) => void;\n onMovedRowsChanged?: (movedRows: readonly MoveOperation[]) => void;\n\n // Callback when a move operation is completed\n onMoveColumnComplete?: (movedColumns: readonly MoveOperation[]) => void;\n onMoveRowComplete?: (movedRows: readonly MoveOperation[]) => void;\n\n // Callback when the viewport has scrolled or changed\n onViewChanged?: (metrics: GridMetrics) => void;\n\n // Callback when a token is clicked\n // eslint-disable-next-line react/no-unused-prop-types\n onTokenClicked?: (token: Token) => void;\n\n // Renderer for the grid canvas\n renderer?: GridRenderer;\n\n // Optional state override to pass in to the metric and render state\n // Can be used to add custom properties as well\n stateOverride?: Record<string, unknown>;\n\n theme?: Partial<GridThemeType>;\n};\n\nexport type GridState = {\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: VisibleIndex;\n left: VisibleIndex;\n\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n topOffset: number; // Should be less than the height of the row\n leftOffset: number; // Should be less than the width of the column\n\n // current column/row that user is dragging\n draggingColumn: DraggingColumn | null;\n draggingRow: VisibleIndex | null;\n\n // Offset when dragging a row\n draggingRowOffset: number | null;\n\n // When drawing header separators for resizing\n // Keeps hover style when mouse is in buffer before resize starts\n draggingColumnSeparator: GridSeparator | null;\n draggingRowSeparator: GridSeparator | null;\n\n // Dragging a scroll bar status\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n\n // Anything is performing a drag, for blocking hover rendering\n isDragging: boolean;\n\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: number | null;\n mouseY: number | null;\n\n // Move operations the user has performed on this grids columns/rows\n movedColumns: readonly MoveOperation[];\n movedRows: readonly MoveOperation[];\n\n // Cursor (highlighted cell) location and active selected range\n cursorRow: VisibleIndex | null;\n cursorColumn: VisibleIndex | null;\n selectionStartRow: VisibleIndex | null;\n selectionStartColumn: VisibleIndex | null;\n selectionEndRow: VisibleIndex | null;\n selectionEndColumn: VisibleIndex | 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: readonly GridRange[];\n lastSelectedRanges: readonly GridRange[];\n\n // The mouse cursor style to use when hovering over the grid element\n cursor: string | 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: EditingCell | null;\n\n // Whether we're stuck to the bottom or the right\n isStuckToBottom: boolean;\n isStuckToRight: boolean;\n};\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<GridProps, GridState> {\n static contextType = ThemeContext;\n\n static defaultProps = {\n canvasOptions: { alpha: false } as CanvasRenderingContext2DSettings,\n isStickyBottom: false,\n isStickyRight: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n keyHandlers: EMPTY_ARRAY as readonly KeyHandler[],\n mouseHandlers: EMPTY_ARRAY as readonly GridMouseHandler[],\n movedColumns: EMPTY_ARRAY as readonly MoveOperation[],\n movedRows: EMPTY_ARRAY as readonly MoveOperation[],\n onError: (): void => undefined,\n onSelectionChanged: (): void => undefined,\n onMovedColumnsChanged: (moveOperations: readonly MoveOperation[]): void =>\n undefined,\n onMoveColumnComplete: (): void => undefined,\n onMovedRowsChanged: (): void => undefined,\n onMoveRowComplete: (): void => undefined,\n onViewChanged: (metrics: GridMetrics): void => undefined,\n onTokenClicked: (token: Token): void => {\n if (isLinkToken(token)) {\n window.open(token.href, '_blank', 'noopener,noreferrer');\n }\n },\n stateOverride: {} as Record<string, unknown>,\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false,\n } as Partial<GridThemeType>,\n };\n\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(\n (\n contextTheme: Partial<GridThemeType>,\n userTheme: Partial<GridThemeType>\n ) => ({\n ...GridTheme,\n ...contextTheme,\n ...userTheme,\n })\n );\n\n /**\n * On some devices there may be different scaling required for high DPI. Get the scale required for the canvas.\n * @param context The canvas context\n * @returns The scale to use\n */\n static getScale(context: CanvasRenderingContext2D): number {\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n // backingStorePixelRatio is deprecated, but check it just in case\n const legacyContext = context as LegacyCanvasRenderingContext2D;\n\n const backingStorePixelRatio =\n // Not worth converting to a massive if structure\n // Converting would reduce readability and maintainability\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n legacyContext.webkitBackingStorePixelRatio ??\n legacyContext.mozBackingStorePixelRatio ??\n legacyContext.msBackingStorePixelRatio ??\n legacyContext.oBackingStorePixelRatio ??\n legacyContext.backingStorePixelRatio ??\n 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n /**\n * Get the class name from the cursor provided\n * @param cursor The grid cursor to use\n * @returns Class name with the grid-cursor prefix or null if no cursor provided\n */\n static getCursorClassName(cursor: string | null): string | null {\n return cursor != null && cursor !== '' ? `grid-cursor-${cursor}` : null;\n }\n\n // Need to disable react/sort-comp so I can put the fields here\n /* eslint-disable react/sort-comp */\n renderer: GridRenderer;\n\n metricCalculator: GridMetricCalculator;\n\n canvas: HTMLCanvasElement | null;\n\n canvasContext: CanvasRenderingContext2D | null;\n\n // We draw the canvas on the next animation frame, keep track of the next one\n animationFrame: number | null;\n\n // Keep track of previous metrics and new metrics for comparison\n prevMetrics: GridMetrics | null;\n\n metrics: GridMetrics | null;\n\n renderState: GridRenderState;\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 documentCursor: string | null;\n\n dragTimer: ReturnType<typeof setTimeout> | null;\n\n keyHandlers: readonly KeyHandler[];\n\n mouseHandlers: readonly GridMouseHandler[];\n\n /* eslint-enable react/sort-comp */\n\n constructor(props: GridProps) {\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 {\n isStuckToBottom,\n isStuckToRight,\n metricCalculator,\n movedColumns,\n movedRows,\n renderer,\n } = 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.renderState = {} as GridRenderState;\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 GridTokenMouseHandler(875),\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 row\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: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\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 isStuckToBottom,\n isStuckToRight,\n };\n }\n\n componentDidMount(): void {\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, {\n passive: false,\n });\n window.addEventListener('resize', this.handleResize);\n\n this.updateCanvas();\n\n // apply on mount, so that it works with a static model\n // https://github.com/deephaven/web-client-ui/issues/581\n const { isStuckToBottom, isStuckToRight } = this.props;\n if (isStuckToBottom) {\n this.scrollToBottom();\n }\n if (isStuckToRight) {\n this.scrollToRight();\n }\n }\n\n componentDidUpdate(prevProps: GridProps, prevState: GridState): void {\n const {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n onMovedRowsChanged,\n onMoveRowComplete,\n } = this.props;\n\n const {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevPropMovedRows,\n } = prevProps;\n const {\n movedColumns: prevStateMovedColumns,\n movedRows: prevStateMovedRows,\n } = prevState;\n const {\n draggingColumn,\n draggingRow,\n movedColumns: currentStateMovedColumns,\n movedRows: currentStateMovedRows,\n } = this.state;\n\n if (prevPropMovedColumns !== movedColumns) {\n this.setState({ movedColumns });\n }\n\n if (prevPropMovedRows !== 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 (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n\n if (isStickyBottom !== prevIsStickyBottom) {\n this.setState({ isStuckToBottom: false });\n }\n\n if (isStickyRight !== prevIsStickyRight) {\n this.setState({ isStuckToRight: false });\n }\n\n this.updateMetrics();\n\n this.requestUpdateCanvas();\n\n this.checkStickyScroll();\n\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n }\n\n componentWillUnmount(): void {\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n\n this.canvas?.removeEventListener('wheel', this.handleWheel);\n\n window.removeEventListener(\n 'mousemove',\n this.handleMouseDrag as unknown as EventListenerOrEventListenerObject,\n true\n );\n window.removeEventListener(\n 'mouseup',\n this.handleMouseUp as unknown as EventListenerOrEventListenerObject,\n true\n );\n window.removeEventListener('resize', this.handleResize);\n\n this.stopDragTimer();\n }\n\n getTheme(): GridThemeType {\n const { theme } = this.props;\n return Grid.getTheme(this.context, theme);\n }\n\n getGridPointFromEvent(event: GridMouseEvent): GridPoint {\n assertIsDefined(this.canvas);\n\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: Coordinate, y: Coordinate): GridPoint {\n if (!this.metrics) throw new Error('metrics must be set');\n\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n\n getMetricState(state = this.state): GridMetricState {\n const theme = this.getTheme();\n const { model, stateOverride } = this.props;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\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 draggingColumn,\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 draggingColumn,\n ...stateOverride,\n };\n }\n\n getCachedKeyHandlers = memoize((keyHandlers: readonly KeyHandler[]) =>\n [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)\n );\n\n getKeyHandlers(): readonly KeyHandler[] {\n const { keyHandlers } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n\n getCachedMouseHandlers = memoize(\n (mouseHandlers: readonly GridMouseHandler[]): readonly GridMouseHandler[] =>\n [...mouseHandlers, ...this.mouseHandlers].sort(\n (a, b) => a.order - b.order\n )\n );\n\n getMouseHandlers(): readonly GridMouseHandler[] {\n const { mouseHandlers } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex: VisibleIndex): ModelIndex {\n const modelIndex = this.metrics?.modelColumns?.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(`Unable to get ModelIndex for column ${columnIndex}`);\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex: VisibleIndex): ModelIndex {\n const modelIndex = this.metrics?.modelRows?.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(`Unable to get ModelIndex for row ${rowIndex}`);\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row: VisibleIndex, expandDescendants = false): void {\n const modelRow = this.getModelRow(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 (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(\n modelRow,\n !model.isRowExpanded(modelRow),\n expandDescendants\n );\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.setState({ isStuckToBottom: false });\n }\n\n /**\n * Scrolls to bottom, if not already at bottom\n */\n scrollToBottom(): void {\n if (!this.metrics) return;\n const { bottomVisible, rowCount, top, lastTop } = this.metrics;\n if ((bottomVisible < rowCount - 1 && bottomVisible > 0) || top > lastTop) {\n this.setState({ top: lastTop });\n }\n }\n\n /**\n * Scrolls to right, if not already at right\n */\n scrollToRight(): void {\n if (!this.metrics) return;\n const { rightVisible, columnCount, left, lastLeft } = this.metrics;\n if (\n (rightVisible < columnCount - 1 && rightVisible > 0) ||\n left > lastLeft\n ) {\n this.setState({ left: lastLeft });\n }\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges: readonly GridRange[]): void {\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(): void {\n const { canvas } = this;\n const { canvasOptions } = this.props;\n\n if (!canvas) throw new Error('Canvas not set');\n\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n\n requestUpdateCanvas(): void {\n if (this.animationFrame != null) {\n return;\n }\n\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n\n this.updateCanvas();\n });\n }\n\n updateCanvas(): void {\n this.updateCanvasScale();\n\n this.updateMetrics();\n\n this.updateRenderState();\n\n const { canvasContext, metrics, renderState } = this;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n\n this.renderer.configureContext(canvasContext, renderState);\n\n const { onViewChanged } = this.props;\n onViewChanged(metrics);\n\n this.drawCanvas(metrics);\n }\n\n private updateCanvasScale(): void {\n const { canvas, canvasContext } = this;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvas.parentElement) throw new Error('Canvas has no parent element');\n\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 rect = canvas.parentElement.getBoundingClientRect();\n const width = Math.floor(rect.width);\n const height = Math.floor(rect.height);\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n\n updateScrollBounds(): void {\n if (!this.metrics) throw new Error('metrics not set');\n const { left, top } = this.state;\n const { lastLeft, lastTop } = this.metrics;\n if (left > lastLeft) {\n this.setState({ left: lastLeft, leftOffset: 0 });\n }\n if (top > lastTop) {\n this.setState({ top: lastTop, topOffset: 0 });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n checkStickyScroll(): void {\n if (!this.metrics) {\n return;\n }\n\n if (this.prevMetrics) {\n const { rowCount, columnCount, height, width } = this.metrics;\n const {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth,\n } = this.prevMetrics;\n\n if (prevRowCount !== rowCount || height !== prevHeight) {\n const { isStuckToBottom } = this.state;\n if (isStuckToBottom) {\n this.scrollToBottom();\n }\n }\n\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n const { isStuckToRight } = this.state;\n if (isStuckToRight) {\n this.scrollToRight();\n }\n }\n }\n this.prevMetrics = this.metrics;\n }\n\n updateMetrics(state = this.state): GridMetrics {\n this.prevMetrics = this.metrics;\n\n const { metricCalculator } = this;\n const metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState: GridState): void {\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 /**\n * Validate the current selection, and reset if it is invalid\n * @returns True if the selection is valid, false if the selection was invalid and has been reset\n */\n validateSelection(): boolean {\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 /**\n * Clears all selected ranges\n */\n clearSelectedRanges(): void {\n const { selectedRanges } = this.state;\n this.setState({ selectedRanges: [], lastSelectedRanges: selectedRanges });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges(): void {\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 /**\n * Begin a selection operation at the provided location\n * @param column Column where the selection is beginning\n * @param row Row where the selection is beginning\n */\n beginSelection(column: GridRangeIndex, row: GridRangeIndex): void {\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 column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(\n column: GridRangeIndex,\n row: GridRangeIndex,\n extendSelection = false,\n maximizePreviousRange = false\n ): void {\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 =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : Math.min(column ?? 0, lastSelectedRange.startColumn ?? 0);\n top =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : Math.min(row ?? 0, lastSelectedRange.startRow ?? 0);\n right =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : Math.max(column ?? 0, lastSelectedRange.endColumn ?? 0);\n bottom =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : Math.max(row ?? 0, lastSelectedRange.endRow ?? 0);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (autoSelectRow === undefined || !autoSelectRow) {\n left = selectionStartColumn;\n }\n if (autoSelectColumn === undefined || !autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow !== undefined && autoSelectRow ? null : column;\n bottom =\n autoSelectColumn !== undefined && 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 = [...selectedRanges];\n newRanges[newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row,\n };\n }\n const newRanges = [...selectedRanges];\n const selectedColumn =\n autoSelectRow !== undefined && autoSelectRow ? null : column;\n const selectedRow =\n autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n\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(): void {\n this.setState((state: GridState) => {\n const { theme } = this.props;\n const { autoSelectRow } = theme;\n const { selectedRanges, lastSelectedRanges, cursorRow, cursorColumn } =\n state;\n\n if (\n selectedRanges.length === 1 &&\n (autoSelectRow !== undefined && 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 {\n selectedRanges: [],\n lastSelectedRanges: [],\n cursorColumn: null,\n cursorRow: null,\n };\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\n if (newSelectedRanges.length === 0) {\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 setFocusRow(focusedRow: number): void {\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n\n const { gridY, height, lastTop, userRowHeights, rowHeight } = this.metrics;\n\n const tableHeight = height - gridY;\n\n const halfViewportHeight =\n Math.round(tableHeight / 2) +\n (userRowHeights.get(focusedRow) ?? rowHeight);\n\n const metricState = this.getMetricState();\n const newTop = this.metricCalculator.getLastTop(\n metricState,\n focusedRow + 1,\n halfViewportHeight\n );\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false,\n });\n const { cursorColumn } = this.state;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll(): void {\n const { model, theme } = this.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n\n const top = autoSelectColumn !== undefined && autoSelectColumn ? null : 0;\n const bottom =\n autoSelectColumn !== undefined && autoSelectColumn\n ? null\n : model.rowCount - 1;\n const left = autoSelectRow !== undefined && autoSelectRow ? null : 0;\n const right =\n autoSelectRow !== undefined && autoSelectRow\n ? null\n : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n /**\n * Move the cursor in relation to the current cursor position\n * @param deltaColumn Number of columns to move the cursor\n * @param deltaRow Number of rows to move the cursor\n * @param extendSelection True if the current selection should be extended, false to start a new selection\n */\n moveCursor(\n deltaColumn: number,\n deltaRow: number,\n extendSelection: boolean\n ): void {\n const { cursorRow, cursorColumn, selectionEndColumn, 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 direction The direction to move the cursor in\n */\n moveCursorInDirection(direction = GridRange.SELECTION_DIRECTION.DOWN): void {\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 column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param 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: GridRangeIndex,\n row: GridRangeIndex,\n extendSelection = false,\n keepCursorInView = true,\n maximizePreviousRange = false\n ): void {\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 column The column index to bring into view\n * @param row The row index to bring into view\n */\n moveViewToCell(column: GridRangeIndex, row: GridRangeIndex): void {\n if (!this.metrics) throw new Error('metrics not set');\n\n const { metricCalculator } = this;\n const { bottomVisible, rightVisible, topVisible, 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 viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n */\n setViewState(viewState: Partial<GridState>, forceUpdate = false): void {\n if (!this.metrics) throw new Error('metrics not set');\n\n const { isStickyBottom, isStickyRight } = this.props;\n const { top, left } = viewState;\n const { lastTop, lastLeft, hasVerticalBar, hasHorizontalBar } =\n this.metrics;\n if (top != null && hasVerticalBar) {\n this.setState({ isStuckToBottom: isStickyBottom && top >= lastTop });\n }\n if (left != null && hasHorizontalBar) {\n this.setState({ isStuckToRight: isStickyRight && left >= lastLeft });\n }\n\n this.setState(viewState as GridState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(\n column: VisibleIndex,\n row: VisibleIndex,\n isQuickEdit = false,\n selectionRange?: EditingCellTextSelectionRange,\n value?: string\n ): void {\n const { model } = this.props;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n\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 /**\n * Check if a value is valid for a specific cell\n * @param column Column index of the cell to check\n * @param row Row index of the cell to check\n * @param value Value to check\n * @returns True if the value is valid for the provided cell, false otherwise\n */\n isValidForCell(\n column: VisibleIndex,\n row: VisibleIndex,\n value: string\n ): boolean {\n const { model } = this.props;\n\n const modelColumn = this.getModelColumn(column);\n const modelRow = this.getModelRow(row);\n return (\n isEditableGridModel(model) &&\n model.isValidForCell(modelColumn, modelRow, value)\n );\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 value Table or a string that is being pasted\n */\n async pasteValue(value: string[][] | string): Promise<void> {\n const { model } = this.props;\n const { movedColumns, movedRows, selectedRanges } = this.state;\n\n try {\n assertIsEditableGridModel(model);\n\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: EditOperation[] = [];\n\n const modelRanges = GridUtils.getModelRanges(\n selectedRanges,\n movedColumns,\n movedRows\n );\n GridRange.forEachCell(modelRanges, (column, row) => {\n edits.push({ column, row, 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 ?? 0) + tableWidth <= columnCount &&\n (range.startRow ?? 0) + 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 ?? 0) + tableWidth - 1,\n (range.startRow ?? 0) + 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: EditOperation[] = [];\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 column: (range.startColumn ?? 0) + x,\n row: (range.startRow ?? 0) + 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 instanceof Error ? e : new Error(`${e}`));\n }\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(\n column: VisibleIndex,\n row: VisibleIndex,\n value: string\n ): boolean {\n const { model } = this.props;\n assertIsEditableGridModel(model);\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 return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges: readonly GridRange[], value: string): void {\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 if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value);\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row: VisibleIndex, column: VisibleIndex): boolean {\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 ?? 0));\n const columnSelected =\n selectedRange.startColumn === null ||\n (selectedRange.startColumn <= column &&\n column <= (selectedRange.endColumn ?? 0));\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n\n return false;\n }\n\n addDocumentCursor(cursor: string | null = null): void {\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n }\n this.documentCursor = Grid.getCursorClassName(cursor);\n if (this.documentCursor != null) {\n document.documentElement.classList.add(this.documentCursor);\n }\n document.documentElement.classList.add('grid-block-events');\n }\n\n removeDocumentCursor(): void {\n if (this.documentCursor != null) {\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: React.MouseEvent): void {\n this.stopDragTimer();\n\n const mouseEvent = new MouseEvent('custom', event.nativeEvent);\n\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n\n stopDragTimer(): void {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\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 * @param metrics Metrics to use for rendering the grid\n */\n private drawCanvas(metrics = this.updateMetrics()): void {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n\n const { renderer, canvasContext: context, renderState } = this;\n\n context.save();\n\n renderer.drawCanvas(renderState);\n\n context.restore();\n }\n\n /**\n * Set focus to this grid element\n */\n focus(): void {\n this.canvas?.focus();\n }\n\n /**\n * Check if this grid is currently focused\n * @returns True if the active element is this grid\n */\n isFocused(): boolean {\n return document.activeElement === this.canvas;\n }\n\n /**\n * Handle a mouse click event. Pass the event to the registered mouse handlers until one handles it.\n * Focuses the grid after the click.\n * @param event The mouse event\n */\n handleClick(event: React.MouseEvent): void {\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) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n\n this.canvas?.focus();\n }\n\n /**\n * Handle a mouse context menu event. Pass the event to the registered mouse handlers until one handles it.\n * @param event The mouse event triggering the context menu\n */\n handleContextMenu(event: React.MouseEvent): void {\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) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Handle a key down event from the keyboard. Pass the event to the registered keyboard handlers until one handles it.\n * @param event Keyboard event\n */\n handleKeyDown(event: GridKeyboardEvent): void {\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(event, this);\n if (result !== false) {\n const options = result as EventHandlerResultOptions;\n if (options?.stopPropagation ?? true) event.stopPropagation();\n if (options?.preventDefault ?? true) event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(\n functionName: GridMouseHandlerFunctionName,\n event: GridMouseEvent,\n updateCoordinates = true,\n addCursorToDocument = false\n ): void {\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] != null &&\n mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\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 const options = result as EventHandlerResultOptions;\n if (options?.stopPropagation ?? true) event.stopPropagation();\n if (options?.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: React.MouseEvent): void {\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('onDown', event);\n\n this.startDragTimer(event);\n }\n\n handleDoubleClick(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n\n handleMouseMove(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onMove', event);\n }\n\n handleMouseLeave(event: React.MouseEvent): void {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({ mouseX: null, mouseY: null });\n }\n\n handleMouseDrag(event: MouseEvent): void {\n this.setState({ isDragging: true });\n this.notifyMouseHandlers('onDrag', event, true, true);\n\n this.stopDragTimer();\n }\n\n handleMouseUp(event: MouseEvent): void {\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('onUp', event, false);\n\n this.stopDragTimer();\n\n this.removeDocumentCursor();\n }\n\n handleResize(): void {\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.updateCanvas();\n\n if (!this.metrics) throw new Error('metrics not set');\n\n this.forceUpdate();\n }\n\n handleWheel(event: WheelEvent): void {\n this.notifyMouseHandlers('onWheel', event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n const { metricCalculator, metrics } = this;\n const metricState = this.getMetricState();\n\n if (!metrics) throw new Error('metrics not set');\n\n const {\n lastTop,\n lastLeft,\n columnCount,\n rowCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n scrollableContentHeight,\n scrollableViewportHeight,\n hasHorizontalBar,\n hasVerticalBar,\n } = metrics;\n let { top, left, topOffset, leftOffset } = metrics;\n\n const theme = this.getTheme();\n\n let { deltaX, deltaY } = GridUtils.getScrollDelta(\n event,\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 (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n\n if (columnCount > 1) {\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 } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n\n const maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n\n if (leftOffset > 0) {\n // scroll right\n\n // get width of next column\n const columnWidth =\n metrics.allColumnWidths.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 && columnCount > 1) {\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.allColumnWidths.get(left - 1) ??\n metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n\n if (\n Math.abs(leftOffset) <= columnWidth &&\n theme.scrollSnapToColumn &&\n columnCount > 1\n ) {\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 (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if ((topOffset > 0 && top >= lastTop) || (topOffset < 0 && top <= 0)) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n\n const maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n\n if (topOffset > 0) {\n // scroll direction down\n\n // get height of next row\n const rowHeight =\n metrics.allRowHeights.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 && rowCount > 1) {\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.allRowHeights.get(top - 1) ??\n metricCalculator.getVisibleRowHeight(top - 1, metricState);\n\n if (\n Math.abs(topOffset) <= rowHeight &&\n theme.scrollSnapToRow &&\n rowCount > 1\n ) {\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 event.stopPropagation();\n event.preventDefault();\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel(): void {\n this.setState({ editingCell: null });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value: string): void {\n this.setState(({ editingCell }) => {\n try {\n assertIsDefined(editingCell);\n\n return {\n editingCell: { ...editingCell, value } as EditingCell,\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n const { onError } = this.props;\n onError(e instanceof Error ? e : new Error(`${e}`));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(\n value: string,\n {\n direction = SELECTION_DIRECTION.DOWN,\n fillRange = false,\n }: { direction?: SELECTION_DIRECTION | null; fillRange?: boolean } = {}\n ): void {\n const { editingCell, selectedRanges } = this.state;\n if (!editingCell) throw new Error('editingCell not set');\n\n const { column, row } = editingCell;\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(): ReactNode {\n const { model } = this.props;\n const { editingCell } = this.state;\n const { metrics } = this;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n const { selectionRange, value, isQuickEdit } = editingCell;\n const { column, row } = editingCell;\n const {\n gridX,\n gridY,\n allColumnXs,\n allRowYs,\n allColumnWidths,\n allRowHeights,\n } = metrics;\n\n const x = allColumnXs.get(column);\n const y = allRowYs.get(row);\n const w = allColumnWidths.get(column);\n const h = allRowHeights.get(row);\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n const wrapperStyle: CSSProperties =\n x != null && y != null && w != null && h != null\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: CSSProperties | undefined =\n modelColumn != null && modelRow != null\n ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow),\n }\n : undefined;\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 /**\n * Gets the render state\n * @returns The render state\n */\n updateRenderState(): GridRenderState {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n\n const {\n cursorColumn,\n cursorRow,\n draggingColumn,\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 { metrics } = this;\n const context = this.canvasContext;\n const theme = this.getTheme();\n const width = this.canvas.clientWidth;\n const height = this.canvas.clientHeight;\n\n assertNotNull(metrics);\n\n this.renderState = {\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\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 return this.renderState;\n }\n\n render(): ReactNode {\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\nexport default Grid;\n"],"mappings":";;;;;;;AAAA;AACA,OAAOA,KAAK,IAAmBC,aAAa,QAAmB,OAAO;AACtE,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,OAAO,MAAM,aAAa;AACjC,OAAOC,KAAK,MAAM,cAAc;AAChC,SAASC,aAAa,EAAEC,WAAW,QAAQ,kBAAkB;AAAC,OACvDC,oBAAoB;AAAA,OAMpBC,SAAS;AAAA,OACTC,SAAS,IAAoBC,mBAAmB;AAAA,OAChDC,YAAY;AAAA,OACZC,SAAS,IAAeC,WAAW;AAAA,SAExCC,yBAAyB,EACzBC,0BAA0B,EAC1BC,+BAA+B,EAC/BC,mCAAmC,EACnCC,uBAAuB,EACvBC,4BAA4B,EAC5BC,uBAAuB,EACvBC,+BAA+B,EAC/BC,iCAAiC,EACjCC,gBAAgB,EAEhBC,qBAAqB;AAAA;AAAA,SAKrBC,cAAc,EACdC,eAAe,EACfC,mBAAmB,EACnBC,cAAc;AAAA,OAETC,cAAc;AAAA,OACdC,UAAU;AAAA,SAORC,qBAAqB;AAAA,SAE5BC,yBAAyB,EAEzBC,mBAAmB;AAAA,SAGZC,eAAe;AAAA,OACjBC,YAAY;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAwInB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,IAAI,SAASzC,aAAa,CAAuB;EAiCrD;EACA;EAgBA;AACF;AACA;AACA;AACA;EACE,OAAO0C,QAAQA,CAACC,OAAiC,EAAU;IAAA,IAAAC,IAAA,EAAAC,KAAA,EAAAC,KAAA,EAAAC,KAAA,EAAAC,qBAAA;IACzD,IAAMC,gBAAgB,GAAGC,MAAM,CAACD,gBAAgB,IAAI,CAAC;;IAErD;IACA,IAAME,aAAa,GAAGR,OAAyC;IAE/D,IAAMS,sBAAsB,GAC1B;IACA;IACA;IAAA,CAAAR,IAAA,IAAAC,KAAA,IAAAC,KAAA,IAAAC,KAAA,IAAAC,qBAAA,GACAG,aAAa,CAACE,4BAA4B,cAAAL,qBAAA,cAAAA,qBAAA,GAC1CG,aAAa,CAACG,yBAAyB,cAAAP,KAAA,cAAAA,KAAA,GACvCI,aAAa,CAACI,wBAAwB,cAAAT,KAAA,cAAAA,KAAA,GACtCK,aAAa,CAACK,uBAAuB,cAAAX,KAAA,cAAAA,KAAA,GACrCM,aAAa,CAACC,sBAAsB,cAAAR,IAAA,cAAAA,IAAA,GACpC,CAAC;IACH,OAAOK,gBAAgB,GAAGG,sBAAsB;EAClD;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOK,kBAAkBA,CAACC,MAAqB,EAAiB;IAC9D,OAAOA,MAAM,IAAI,IAAI,IAAIA,MAAM,KAAK,EAAE,kBAAAC,MAAA,CAAkBD,MAAM,IAAK,IAAI;EACzE;;EAEA;EACA,qCASA;EAGA;EAOA;EACA;EACA;EACA;EASA;;EAEAE,WAAWA,CAACC,KAAgB,EAAE;IAC5B,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,+BAkTQ5D,OAAO,CAAE6D,WAAkC,IAChE,CAAC,GAAGA,WAAW,EAAE,GAAG,IAAI,CAACA,WAAW,CAAC,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KAAK,CACxE,CAAC;IAAAL,eAAA,iCAOwB5D,OAAO,CAC7BkE,aAA0C,IACzC,CAAC,GAAGA,aAAa,EAAE,GAAG,IAAI,CAACA,aAAa,CAAC,CAACJ,IAAI,CAC5C,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KACxB,CACJ,CAAC;IA9TC,IAAI,CAACE,WAAW,GAAG,IAAI,CAACA,WAAW,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACE,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACF,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACG,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACH,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACI,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACK,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACL,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACM,aAAa,GAAG,IAAI,CAACA,aAAa,CAACN,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACO,eAAe,GAAG,IAAI,CAACA,eAAe,CAACP,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACQ,eAAe,GAAG,IAAI,CAACA,eAAe,CAACR,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACS,eAAe,GAAG,IAAI,CAACA,eAAe,CAACT,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACU,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACV,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACW,aAAa,GAAG,IAAI,CAACA,aAAa,CAACX,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACY,YAAY,GAAG,IAAI,CAACA,YAAY,CAACZ,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACa,WAAW,GAAG,IAAI,CAACA,WAAW,CAACb,IAAI,CAAC,IAAI,CAAC;IAE9C,IAAM;MACJc,eAAe;MACfC,cAAc;MACdC,gBAAgB;MAChBC,YAAY;MACZC,SAAS;MACTC;IACF,CAAC,GAAG5B,KAAK;IAET,IAAI,CAAC4B,QAAQ,GAAGA,QAAQ,IAAI,IAAI/E,YAAY,CAAC,CAAC;IAC9C,IAAI,CAAC4E,gBAAgB,GAAGA,gBAAgB,IAAI,IAAIhF,oBAAoB,CAAC,CAAC;IAEtE,IAAI,CAACoF,MAAM,GAAG,IAAI;IAClB,IAAI,CAACC,aAAa,GAAG,IAAI;IACzB,IAAI,CAACC,cAAc,GAAG,IAAI;IAE1B,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,OAAO,GAAG,IAAI;IAEnB,IAAI,CAACC,WAAW,GAAG,CAAC,CAAoB;;IAExC;IACA;IACA;IACA;IACA,IAAI,CAACC,cAAc,GAAG,IAAI;IAE1B,IAAI,CAACC,SAAS,GAAG,IAAI;;IAErB;IACA,IAAI,CAAClC,WAAW,GAAG,CACjB,IAAIvC,cAAc,CAAC,GAAG,CAAC,EACvB,IAAIC,eAAe,CAAC,GAAG,CAAC,EACxB,IAAIC,mBAAmB,CAAC,GAAG,CAAC,EAC5B,IAAIC,cAAc,CAAC,GAAG,CAAC,CACxB;IACD,IAAI,CAACyC,aAAa,GAAG,CACnB,IAAIlD,4BAA4B,CAAC,GAAG,CAAC,EACrC,IAAIH,+BAA+B,CAAC,GAAG,CAAC,EACxC,IAAIE,uBAAuB,CAAC,GAAG,CAAC,EAChC,IAAIH,0BAA0B,CAAC,GAAG,CAAC,EACnC,IAAIQ,gBAAgB,CAAC,GAAG,CAAC,EACzB,IAAID,iCAAiC,CAAC,GAAG,CAAC,EAC1C,IAAIL,mCAAmC,CAAC,GAAG,CAAC,EAC5C,IAAII,+BAA+B,CAAC,GAAG,CAAC,EACxC,IAAID,uBAAuB,CAAC,GAAG,CAAC,EAChC,IAAII,qBAAqB,CAAC,GAAG,CAAC,EAC9B,IAAIV,yBAAyB,CAAC,GAAG,CAAC,CACnC;IAED,IAAI,CAACqF,KAAK,GAAG;MACX;MACAC,GAAG,EAAE,CAAC;MACNC,IAAI,EAAE,CAAC;MAEP;MACA;MACAC,SAAS,EAAE,CAAC;MACZC,UAAU,EAAE,CAAC;MAEb;MACAC,cAAc,EAAE,IAAI;MACpBC,WAAW,EAAE,IAAI;MAEjB;MACAC,iBAAiB,EAAE,IAAI;MAEvB;MACAC,uBAAuB,EAAE,IAAI;MAC7BC,oBAAoB,EAAE,IAAI;MAE1BC,6BAA6B,EAAE,KAAK;MACpCC,2BAA2B,EAAE,KAAK;MAElC;MACAC,UAAU,EAAE,KAAK;MAEjB;MACAC,MAAM,EAAE,IAAI;MACZC,MAAM,EAAE,IAAI;MAEZ;MACAzB,YAAY;MACZC,SAAS;MAET;MACAyB,SAAS,EAAE,IAAI;MACfC,YAAY,EAAE,IAAI;MAClBC,iBAAiB,EAAE,IAAI;MACvBC,oBAAoB,EAAE,IAAI;MAC1BC,eAAe,EAAE,IAAI;MACrBC,kBAAkB,EAAE,IAAI;MAExB;MACA;MACA;MACAC,cAAc,EAAElH,WAAW;MAC3BmH,kBAAkB,EAAEnH,WAAW;MAE/B;MACAqD,MAAM,EAAE,IAAI;MAEZ;MACA;MACA+D,WAAW,EAAE,IAAI;MAEjBrC,eAAe;MACfC;IACF,CAAC;EACH;EAEAqC,iBAAiBA,CAAA,EAAS;IAAA,IAAAC,YAAA;IACxB,IAAI,CAACC,WAAW,CAAC,CAAC;;IAElB;IACA;IACA;IACA,CAAAD,YAAA,OAAI,CAACjC,MAAM,cAAAiC,YAAA,uBAAXA,YAAA,CAAaE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC1C,WAAW,EAAE;MACvD2C,OAAO,EAAE;IACX,CAAC,CAAC;IACF5E,MAAM,CAAC2E,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC3C,YAAY,CAAC;IAEpD,IAAI,CAAC6C,YAAY,CAAC,CAAC;;IAEnB;IACA;IACA,IAAM;MAAE3C,eAAe;MAAEC;IAAe,CAAC,GAAG,IAAI,CAACxB,KAAK;IACtD,IAAIuB,eAAe,EAAE;MACnB,IAAI,CAAC4C,cAAc,CAAC,CAAC;IACvB;IACA,IAAI3C,cAAc,EAAE;MAClB,IAAI,CAAC4C,aAAa,CAAC,CAAC;IACtB;EACF;EAEAC,kBAAkBA,CAACC,SAAoB,EAAEC,SAAoB,EAAQ;IACnE,IAAM;MACJC,cAAc;MACdC,aAAa;MACb/C,YAAY;MACZC,SAAS;MACT+C,qBAAqB;MACrBC,oBAAoB;MACpBC,kBAAkB;MAClBC;IACF,CAAC,GAAG,IAAI,CAAC7E,KAAK;IAEd,IAAM;MACJwE,cAAc,EAAEM,kBAAkB;MAClCL,aAAa,EAAEM,iBAAiB;MAChCrD,YAAY,EAAEsD,oBAAoB;MAClCrD,SAAS,EAAEsD;IACb,CAAC,GAAGX,SAAS;IACb,IAAM;MACJ5C,YAAY,EAAEwD,qBAAqB;MACnCvD,SAAS,EAAEwD;IACb,CAAC,GAAGZ,SAAS;IACb,IAAM;MACJ7B,cAAc;MACdC,WAAW;MACXjB,YAAY,EAAE0D,wBAAwB;MACtCzD,SAAS,EAAE0D;IACb,CAAC,GAAG,IAAI,CAAChD,KAAK;IAEd,IAAI2C,oBAAoB,KAAKtD,YAAY,EAAE;MACzC,IAAI,CAAC4D,QAAQ,CAAC;QAAE5D;MAAa,CAAC,CAAC;IACjC;IAEA,IAAIuD,iBAAiB,KAAKtD,SAAS,EAAE;MACnC,IAAI,CAAC2D,QAAQ,CAAC;QAAE3D;MAAU,CAAC,CAAC;IAC9B;IAEA,IAAIuD,qBAAqB,KAAKE,wBAAwB,EAAE;MACtDV,qBAAqB,CAACU,wBAAwB,CAAC;IACjD;IAEA,IAAIb,SAAS,CAAC7B,cAAc,IAAI,IAAI,IAAIA,cAAc,IAAI,IAAI,EAAE;MAC9DiC,oBAAoB,CAACS,wBAAwB,CAAC;IAChD;IAEA,IAAID,kBAAkB,KAAKE,qBAAqB,EAAE;MAChDT,kBAAkB,CAACS,qBAAqB,CAAC;IAC3C;IAEA,IAAId,SAAS,CAAC5B,WAAW,IAAI,IAAI,IAAIA,WAAW,IAAI,IAAI,EAAE;MACxDkC,iBAAiB,CAACQ,qBAAqB,CAAC;IAC1C;IAEA,IAAIb,cAAc,KAAKM,kBAAkB,EAAE;MACzC,IAAI,CAACQ,QAAQ,CAAC;QAAE/D,eAAe,EAAE;MAAM,CAAC,CAAC;IAC3C;IAEA,IAAIkD,aAAa,KAAKM,iBAAiB,EAAE;MACvC,IAAI,CAACO,QAAQ,CAAC;QAAE9D,cAAc,EAAE;MAAM,CAAC,CAAC;IAC1C;IAEA,IAAI,CAAC+D,aAAa,CAAC,CAAC;IAEpB,IAAI,CAACC,mBAAmB,CAAC,CAAC;IAE1B,IAAI,CAACC,iBAAiB,CAAC,CAAC;IAExB,IAAI,IAAI,CAACC,iBAAiB,CAAC,CAAC,EAAE;MAC5B,IAAI,CAACC,oBAAoB,CAACpB,SAAS,CAAC;IACtC;EACF;EAEAqB,oBAAoBA,CAAA,EAAS;IAAA,IAAAC,aAAA;IAC3B,IAAI,IAAI,CAAC9D,cAAc,IAAI,IAAI,EAAE;MAC/B+D,oBAAoB,CAAC,IAAI,CAAC/D,cAAc,CAAC;IAC3C;IAEA,CAAA8D,aAAA,OAAI,CAAChE,MAAM,cAAAgE,aAAA,uBAAXA,aAAA,CAAaE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACzE,WAAW,CAAC;IAE3DjC,MAAM,CAAC0G,mBAAmB,CACxB,WAAW,EACX,IAAI,CAAC9E,eAAe,EACpB,IACF,CAAC;IACD5B,MAAM,CAAC0G,mBAAmB,CACxB,SAAS,EACT,IAAI,CAAC3E,aAAa,EAClB,IACF,CAAC;IACD/B,MAAM,CAAC0G,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC1E,YAAY,CAAC;IAEvD,IAAI,CAAC2E,aAAa,CAAC,CAAC;EACtB;EAEAC,QAAQA,CAAA,EAAkB;IACxB,IAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAAClG,KAAK;IAC5B,OAAOpB,IAAI,CAACqH,QAAQ,CAAC,IAAI,CAACnH,OAAO,EAAEoH,KAAK,CAAC;EAC3C;EAEAC,qBAAqBA,CAACC,KAAqB,EAAa;IACtDhI,eAAe,CAAC,IAAI,CAACyD,MAAM,CAAC;IAE5B,IAAMwE,IAAI,GAAG,IAAI,CAACxE,MAAM,CAACyE,qBAAqB,CAAC,CAAC;IAChD,IAAMC,CAAC,GAAGH,KAAK,CAACI,OAAO,GAAGH,IAAI,CAAC9D,IAAI;IACnC,IAAMkE,CAAC,GAAGL,KAAK,CAACM,OAAO,GAAGL,IAAI,CAAC/D,GAAG;IAClC,OAAO,IAAI,CAACqE,kBAAkB,CAACJ,CAAC,EAAEE,CAAC,CAAC;EACtC;EAEAE,kBAAkBA,CAACJ,CAAa,EAAEE,CAAa,EAAa;IAC1D,IAAI,CAAC,IAAI,CAACxE,OAAO,EAAE,MAAM,IAAI2E,KAAK,CAAC,qBAAqB,CAAC;IAEzD,OAAO9J,SAAS,CAAC6J,kBAAkB,CAACJ,CAAC,EAAEE,CAAC,EAAE,IAAI,CAACxE,OAAO,CAAC;EACzD;EAEA4E,cAAcA,CAAA,EAAsC;IAAA,IAArCxE,KAAK,GAAAyE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI,CAACzE,KAAK;IAC/B,IAAM6D,KAAK,GAAG,IAAI,CAACD,QAAQ,CAAC,CAAC;IAC7B,IAAM;MAAEgB,KAAK;MAAEC;IAAc,CAAC,GAAG,IAAI,CAAClH,KAAK;IAC3C,IAAI,CAAC,IAAI,CAAC8B,aAAa,IAAI,CAAC,IAAI,CAACD,MAAM,EAAE;MACvC,MAAM,IAAI+E,KAAK,CAAC,mDAAmD,CAAC;IACtE;IACA,IAAM9H,OAAO,GAAG,IAAI,CAACgD,aAAa;IAClC,IAAMqF,KAAK,GAAG,IAAI,CAACtF,MAAM,CAACuF,WAAW;IACrC,IAAMC,MAAM,GAAG,IAAI,CAACxF,MAAM,CAACyF,YAAY;IACvC,IAAM;MACJ/E,IAAI;MACJD,GAAG;MACHG,UAAU;MACVD,SAAS;MACTd,YAAY;MACZC,SAAS;MACToB,6BAA6B;MAC7BC,2BAA2B;MAC3BN;IACF,CAAC,GAAGL,KAAK;IAET,OAAAkF,aAAA;MACEhF,IAAI;MACJD,GAAG;MACHG,UAAU;MACVD,SAAS;MACT2E,KAAK;MACLE,MAAM;MACNvI,OAAO;MACPoH,KAAK;MACLe,KAAK;MACLvF,YAAY;MACZC,SAAS;MACToB,6BAA6B;MAC7BC,2BAA2B;MAC3BN;IAAc,GACXwE,aAAa;EAEpB;EAMAM,cAAcA,CAAA,EAA0B;IACtC,IAAM;MAAEtH;IAAY,CAAC,GAAG,IAAI,CAACF,KAAK;IAClC,OAAO,IAAI,CAACyH,oBAAoB,CAACvH,WAAW,CAAC;EAC/C;EASAwH,gBAAgBA,CAAA,EAAgC;IAC9C,IAAM;MAAEnH;IAAc,CAAC,GAAG,IAAI,CAACP,KAAK;IACpC,OAAO,IAAI,CAAC2H,sBAAsB,CAACpH,aAAa,CAAC;EACnD;;EAEA;AACF;AACA;AACA;AACA;EACEqH,cAAcA,CAACC,WAAyB,EAAc;IAAA,IAAAC,aAAA,EAAAC,qBAAA;IACpD,IAAMC,UAAU,IAAAF,aAAA,GAAG,IAAI,CAAC7F,OAAO,cAAA6F,aAAA,wBAAAC,qBAAA,GAAZD,aAAA,CAAcG,YAAY,cAAAF,qBAAA,uBAA1BA,qBAAA,CAA4BG,GAAG,CAACL,WAAW,CAAC;IAC/D,IAAIG,UAAU,KAAKhB,SAAS,EAAE;MAC5B,MAAM,IAAIJ,KAAK,wCAAA9G,MAAA,CAAwC+H,WAAW,CAAE,CAAC;IACvE;IACA,OAAOG,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;EACEG,WAAWA,CAACC,QAAsB,EAAc;IAAA,IAAAC,cAAA,EAAAC,qBAAA;IAC9C,IAAMN,UAAU,IAAAK,cAAA,GAAG,IAAI,CAACpG,OAAO,cAAAoG,cAAA,wBAAAC,qBAAA,GAAZD,cAAA,CAAcE,SAAS,cAAAD,qBAAA,uBAAvBA,qBAAA,CAAyBJ,GAAG,CAACE,QAAQ,CAAC;IACzD,IAAIJ,UAAU,KAAKhB,SAAS,EAAE;MAC5B,MAAM,IAAIJ,KAAK,qCAAA9G,MAAA,CAAqCsI,QAAQ,CAAE,CAAC;IACjE;IACA,OAAOJ,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;EACEQ,iBAAiBA,CAACC,GAAiB,EAAmC;IAAA,IAAjCC,iBAAiB,GAAA5B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAC5D,IAAM6B,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,IAAM;MAAExB;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAC5B;IACA;IACA,IAAI/B,qBAAqB,CAACgJ,KAAK,CAAC,IAAIA,KAAK,CAAC2B,eAAe,CAACD,QAAQ,CAAC,EAAE;MACnE1B,KAAK,CAAC4B,cAAc,CAClBF,QAAQ,EACR,CAAC1B,KAAK,CAAC6B,aAAa,CAACH,QAAQ,CAAC,EAC9BD,iBACF,CAAC;IACH;IACA,IAAI,CAACK,mBAAmB,CAAC,CAAC;IAC1B,IAAI,CAACC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAACC,oBAAoB,CAAC,CAAC,EAAER,GAAG,CAAC;IACjC,IAAI,CAACO,eAAe,CAAC,CAAC;IAEtB,IAAI,CAAC1D,QAAQ,CAAC;MAAE/D,eAAe,EAAE;IAAM,CAAC,CAAC;EAC3C;;EAEA;AACF;AACA;EACE4C,cAAcA,CAAA,EAAS;IACrB,IAAI,CAAC,IAAI,CAAClC,OAAO,EAAE;IACnB,IAAM;MAAEiH,aAAa;MAAEC,QAAQ;MAAE7G,GAAG;MAAE8G;IAAQ,CAAC,GAAG,IAAI,CAACnH,OAAO;IAC9D,IAAKiH,aAAa,GAAGC,QAAQ,GAAG,CAAC,IAAID,aAAa,GAAG,CAAC,IAAK5G,GAAG,GAAG8G,OAAO,EAAE;MACxE,IAAI,CAAC9D,QAAQ,CAAC;QAAEhD,GAAG,EAAE8G;MAAQ,CAAC,CAAC;IACjC;EACF;;EAEA;AACF;AACA;EACEhF,aAAaA,CAAA,EAAS;IACpB,IAAI,CAAC,IAAI,CAACnC,OAAO,EAAE;IACnB,IAAM;MAAEoH,YAAY;MAAEC,WAAW;MAAE/G,IAAI;MAAEgH;IAAS,CAAC,GAAG,IAAI,CAACtH,OAAO;IAClE,IACGoH,YAAY,GAAGC,WAAW,GAAG,CAAC,IAAID,YAAY,GAAG,CAAC,IACnD9G,IAAI,GAAGgH,QAAQ,EACf;MACA,IAAI,CAACjE,QAAQ,CAAC;QAAE/C,IAAI,EAAEgH;MAAS,CAAC,CAAC;IACnC;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEC,iBAAiBA,CAACC,UAAgC,EAAQ;IACxD,IAAM;MAAExC;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAC5B,IAAM;MAAEsJ,WAAW;MAAEH;IAAS,CAAC,GAAGlC,KAAK;IACvC,IAAM;MAAE7D,SAAS;MAAEC,YAAY;MAAEK;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAC9D,IAAI,CAACiD,QAAQ,CAAC;MACZ5B,cAAc,EAAE+F,UAAU;MAC1B9F,kBAAkB,EAAED;IACtB,CAAC,CAAC;IACF,IAAI+F,UAAU,CAAC1C,MAAM,GAAG,CAAC,EAAE;MACzB,IAAM2C,KAAK,GAAG/M,SAAS,CAACgN,YAAY,CAClCF,UAAU,CAAC,CAAC,CAAC,EACbH,WAAW,EACXH,QACF,CAAC;MACD,IAAIS,YAAY,GAAGxG,SAAS;MAC5B,IAAIyG,eAAe,GAAGxG,YAAY;MAClC,IAAI,CAACqG,KAAK,CAACI,YAAY,CAACzG,YAAY,EAAED,SAAS,CAAC,EAAE;QAChD,CAAC;UAAEqF,GAAG,EAAEmB,YAAY;UAAEG,MAAM,EAAEF;QAAgB,CAAC,GAAGH,KAAK,CAACM,SAAS,CAAC,CAAC;MACrE;MAEA,IAAI,CAAC1E,QAAQ,CAAC;QACZ/B,oBAAoB,EAAEmG,KAAK,CAACO,WAAW;QACvC3G,iBAAiB,EAAEoG,KAAK,CAACQ,QAAQ;QACjCzG,kBAAkB,EAAEiG,KAAK,CAACS,SAAS;QACnC3G,eAAe,EAAEkG,KAAK,CAACU,MAAM;QAC7B/G,YAAY,EAAEwG,eAAe;QAC7BzG,SAAS,EAAEwG;MACb,CAAC,CAAC;IACJ;EACF;EAEA7F,WAAWA,CAAA,EAAS;IAClB,IAAM;MAAElC;IAAO,CAAC,GAAG,IAAI;IACvB,IAAM;MAAEwI;IAAc,CAAC,GAAG,IAAI,CAACrK,KAAK;IAEpC,IAAI,CAAC6B,MAAM,EAAE,MAAM,IAAI+E,KAAK,CAAC,gBAAgB,CAAC;IAE9C,IAAI,CAAC9E,aAAa,GAAGD,MAAM,CAACyI,UAAU,CAAC,IAAI,EAAED,aAAa,CAAC;EAC7D;EAEA7E,mBAAmBA,CAAA,EAAS;IAC1B,IAAI,IAAI,CAACzD,cAAc,IAAI,IAAI,EAAE;MAC/B;IACF;IAEA,IAAI,CAACA,cAAc,GAAGwI,qBAAqB,CAAC,MAAM;MAChD,IAAI,CAACxI,cAAc,GAAG,IAAI;MAE1B,IAAI,CAACmC,YAAY,CAAC,CAAC;IACrB,CAAC,CAAC;EACJ;EAEAA,YAAYA,CAAA,EAAS;IACnB,IAAI,CAACsG,iBAAiB,CAAC,CAAC;IAExB,IAAI,CAACjF,aAAa,CAAC,CAAC;IAEpB,IAAI,CAACkF,iBAAiB,CAAC,CAAC;IAExB,IAAM;MAAE3I,aAAa;MAAEG,OAAO;MAAEC;IAAY,CAAC,GAAG,IAAI;IACpD3F,aAAa,CAACuF,aAAa,CAAC;IAC5BvF,aAAa,CAAC0F,OAAO,CAAC;IACtB1F,aAAa,CAAC2F,WAAW,CAAC;IAE1B,IAAI,CAACN,QAAQ,CAAC8I,gBAAgB,CAAC5I,aAAa,EAAEI,WAAW,CAAC;IAE1D,IAAM;MAAEyI;IAAc,CAAC,GAAG,IAAI,CAAC3K,KAAK;IACpC2K,aAAa,CAAC1I,OAAO,CAAC;IAEtB,IAAI,CAAC2I,UAAU,CAAC3I,OAAO,CAAC;EAC1B;EAEQuI,iBAAiBA,CAAA,EAAS;IAChC,IAAM;MAAE3I,MAAM;MAAEC;IAAc,CAAC,GAAG,IAAI;IACtC,IAAI,CAACD,MAAM,EAAE,MAAM,IAAI+E,KAAK,CAAC,gBAAgB,CAAC;IAC9C,IAAI,CAAC9E,aAAa,EAAE,MAAM,IAAI8E,KAAK,CAAC,uBAAuB,CAAC;IAC5D,IAAI,CAAC/E,MAAM,CAACgJ,aAAa,EAAE,MAAM,IAAIjE,KAAK,CAAC,8BAA8B,CAAC;IAE1E,IAAMkE,KAAK,GAAGlM,IAAI,CAACC,QAAQ,CAACiD,aAAa,CAAC;IAC1C;IACA;IACA;IACA;IACA,IAAMuE,IAAI,GAAGxE,MAAM,CAACgJ,aAAa,CAACvE,qBAAqB,CAAC,CAAC;IACzD,IAAMa,KAAK,GAAG4D,IAAI,CAACC,KAAK,CAAC3E,IAAI,CAACc,KAAK,CAAC;IACpC,IAAME,MAAM,GAAG0D,IAAI,CAACC,KAAK,CAAC3E,IAAI,CAACgB,MAAM,CAAC;IACtCxF,MAAM,CAACoJ,KAAK,CAAC9D,KAAK,MAAArH,MAAA,CAAMqH,KAAK,OAAI;IACjCtF,MAAM,CAACoJ,KAAK,CAAC5D,MAAM,MAAAvH,MAAA,CAAMuH,MAAM,OAAI;IACnCxF,MAAM,CAACsF,KAAK,GAAGA,KAAK,GAAG2D,KAAK;IAC5BjJ,MAAM,CAACwF,MAAM,GAAGA,MAAM,GAAGyD,KAAK;IAC9BhJ,aAAa,CAACgJ,KAAK,CAACA,KAAK,EAAEA,KAAK,CAAC;EACnC;EAEAI,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAAC,IAAI,CAACjJ,OAAO,EAAE,MAAM,IAAI2E,KAAK,CAAC,iBAAiB,CAAC;IACrD,IAAM;MAAErE,IAAI;MAAED;IAAI,CAAC,GAAG,IAAI,CAACD,KAAK;IAChC,IAAM;MAAEkH,QAAQ;MAAEH;IAAQ,CAAC,GAAG,IAAI,CAACnH,OAAO;IAC1C,IAAIM,IAAI,GAAGgH,QAAQ,EAAE;MACnB,IAAI,CAACjE,QAAQ,CAAC;QAAE/C,IAAI,EAAEgH,QAAQ;QAAE9G,UAAU,EAAE;MAAE,CAAC,CAAC;IAClD;IACA,IAAIH,GAAG,GAAG8G,OAAO,EAAE;MACjB,IAAI,CAAC9D,QAAQ,CAAC;QAAEhD,GAAG,EAAE8G,OAAO;QAAE5G,SAAS,EAAE;MAAE,CAAC,CAAC;IAC/C;EACF;;EAEA;AACF;AACA;EACEiD,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAAC,IAAI,CAACxD,OAAO,EAAE;MACjB;IACF;IAEA,IAAI,IAAI,CAACD,WAAW,EAAE;MACpB,IAAM;QAAEmH,QAAQ;QAAEG,WAAW;QAAEjC,MAAM;QAAEF;MAAM,CAAC,GAAG,IAAI,CAAClF,OAAO;MAC7D,IAAM;QACJkH,QAAQ,EAAEgC,YAAY;QACtB7B,WAAW,EAAE8B,eAAe;QAC5B/D,MAAM,EAAEgE,UAAU;QAClBlE,KAAK,EAAEmE;MACT,CAAC,GAAG,IAAI,CAACtJ,WAAW;MAEpB,IAAImJ,YAAY,KAAKhC,QAAQ,IAAI9B,MAAM,KAAKgE,UAAU,EAAE;QACtD,IAAM;UAAE9J;QAAgB,CAAC,GAAG,IAAI,CAACc,KAAK;QACtC,IAAId,eAAe,EAAE;UACnB,IAAI,CAAC4C,cAAc,CAAC,CAAC;QACvB;MACF;MAEA,IAAIiH,eAAe,KAAK9B,WAAW,IAAInC,KAAK,KAAKmE,SAAS,EAAE;QAC1D,IAAM;UAAE9J;QAAe,CAAC,GAAG,IAAI,CAACa,KAAK;QACrC,IAAIb,cAAc,EAAE;UAClB,IAAI,CAAC4C,aAAa,CAAC,CAAC;QACtB;MACF;IACF;IACA,IAAI,CAACpC,WAAW,GAAG,IAAI,CAACC,OAAO;EACjC;EAEAsD,aAAaA,CAAA,EAAkC;IAAA,IAAjClD,KAAK,GAAAyE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI,CAACzE,KAAK;IAC9B,IAAI,CAACL,WAAW,GAAG,IAAI,CAACC,OAAO;IAE/B,IAAM;MAAER;IAAiB,CAAC,GAAG,IAAI;IACjC,IAAM8J,WAAW,GAAG,IAAI,CAAC1E,cAAc,CAACxE,KAAK,CAAC;IAC9C,IAAI,CAACJ,OAAO,GAAGR,gBAAgB,CAAC+J,UAAU,CAACD,WAAW,CAAC;IACvD,IAAI,CAACL,kBAAkB,CAAC,CAAC;IAEzB,OAAO,IAAI,CAACjJ,OAAO;EACrB;;EAEA;AACF;AACA;AACA;EACE0D,oBAAoBA,CAACpB,SAAoB,EAAQ;IAC/C,IAAM;MAAEb,cAAc,EAAE+H;IAAkB,CAAC,GAAGlH,SAAS;IACvD,IAAM;MAAEb;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAErC,IAAIqB,cAAc,KAAK+H,iBAAiB,EAAE;MACxC,IAAM;QAAEC;MAAmB,CAAC,GAAG,IAAI,CAAC1L,KAAK;MACzC0L,kBAAkB,CAAChI,cAAc,CAAC;IACpC;EACF;;EAEA;AACF;AACA;AACA;EACEgC,iBAAiBA,CAAA,EAAY;IAC3B,IAAM;MAAEuB;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAC5B,IAAM;MAAE0D;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IACrC,IAAM;MAAEiH,WAAW;MAAEH;IAAS,CAAC,GAAGlC,KAAK;IAEvC,KAAK,IAAI0E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGjI,cAAc,CAACqD,MAAM,EAAE4E,CAAC,IAAI,CAAC,EAAE;MACjD,IAAMjC,KAAK,GAAGhG,cAAc,CAACiI,CAAC,CAAC;MAC/B,IACGjC,KAAK,CAACS,SAAS,IAAI,IAAI,IAAIT,KAAK,CAACS,SAAS,IAAIb,WAAW,IACzDI,KAAK,CAACU,MAAM,IAAI,IAAI,IAAIV,KAAK,CAACU,MAAM,IAAIjB,QAAS,EAClD;QACA;QACA,IAAI,CAAC7D,QAAQ,CAAC;UAAE5B,cAAc,EAAE,EAAE;UAAEC,kBAAkB,EAAE;QAAG,CAAC,CAAC;QAC7D,OAAO,KAAK;MACd;IACF;IACA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;EACEoF,mBAAmBA,CAAA,EAAS;IAC1B,IAAM;MAAErF;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IACrC,IAAI,CAACiD,QAAQ,CAAC;MAAE5B,cAAc,EAAE,EAAE;MAAEC,kBAAkB,EAAED;IAAe,CAAC,CAAC;EAC3E;;EAEA;EACAkI,kBAAkBA,CAAA,EAAS;IACzB,IAAM;MAAElI;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IACrC,IAAIqB,cAAc,CAACqD,MAAM,GAAG,CAAC,EAAE;MAC7B,IAAI,CAACzB,QAAQ,CAAC;QACZ5B,cAAc,EAAEA,cAAc,CAACmI,KAAK,CAACnI,cAAc,CAACqD,MAAM,GAAG,CAAC;MAChE,CAAC,CAAC;IACJ;EACF;;EAEA;AACF;AACA;AACA;AACA;EACE+E,cAAcA,CAAC/B,MAAsB,EAAEtB,GAAmB,EAAQ;IAChE,IAAI,CAACnD,QAAQ,CAAC;MACZ/B,oBAAoB,EAAEwG,MAAM;MAC5BzG,iBAAiB,EAAEmF,GAAG;MACtBhF,kBAAkB,EAAEsG,MAAM;MAC1BvG,eAAe,EAAEiF,GAAG;MACpBpF,YAAY,EAAE0G,MAAM;MACpB3G,SAAS,EAAEqF;IACb,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEsD,aAAaA,CACXhC,MAAsB,EACtBtB,GAAmB,EAGb;IAAA,IAFNuD,eAAe,GAAAlF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAAA,IACvBmF,qBAAqB,GAAAnF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAE7B,IAAI,CAACxB,QAAQ,CAACjD,KAAK,IAAI;MACrB,IAAM;QAAEqB,cAAc;QAAEJ,iBAAiB;QAAEC;MAAqB,CAAC,GAAGlB,KAAK;MACzE,IAAM;QAAE6D;MAAM,CAAC,GAAG,IAAI,CAAClG,KAAK;MAC5B,IAAM;QAAEkM,aAAa;QAAEC;MAAiB,CAAC,GAAGjG,KAAK;MAEjD,IAAI8F,eAAe,IAAItI,cAAc,CAACqD,MAAM,GAAG,CAAC,EAAE;QAChD,IAAMqF,iBAAiB,GAAG1I,cAAc,CAACA,cAAc,CAACqD,MAAM,GAAG,CAAC,CAAC;QACnE,IAAIxE,IAAI,GAAG,IAAI;QACf,IAAID,GAAG,GAAG,IAAI;QACd,IAAI+J,KAAK,GAAG,IAAI;QAChB,IAAIC,MAAM,GAAG,IAAI;QACjB,IAAIL,qBAAqB,EAAE;UAAA,IAAAM,qBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,sBAAA;UACzBnK,IAAI,GACF2J,aAAa,KAAKlF,SAAS,IAAIkF,aAAa,GACxC,IAAI,GACJnB,IAAI,CAAC4B,GAAG,CAAC5C,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,CAAC,GAAAwC,qBAAA,GAAEH,iBAAiB,CAACnC,WAAW,cAAAsC,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;UAC/DjK,GAAG,GACD6J,gBAAgB,KAAKnF,SAAS,IAAImF,gBAAgB,GAC9C,IAAI,GACJpB,IAAI,CAAC4B,GAAG,CAAClE,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,CAAC,GAAA+D,sBAAA,GAAEJ,iBAAiB,CAAClC,QAAQ,cAAAsC,sBAAA,cAAAA,sBAAA,GAAI,CAAC,CAAC;UACzDH,KAAK,GACHH,aAAa,KAAKlF,SAAS,IAAIkF,aAAa,GACxC,IAAI,GACJnB,IAAI,CAAC6B,GAAG,CAAC7C,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,CAAC,GAAA0C,qBAAA,GAAEL,iBAAiB,CAACjC,SAAS,cAAAsC,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;UAC7DH,MAAM,GACJH,gBAAgB,KAAKnF,SAAS,IAAImF,gBAAgB,GAC9C,IAAI,GACJpB,IAAI,CAAC6B,GAAG,CAACnE,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,CAAC,GAAAiE,sBAAA,GAAEN,iBAAiB,CAAChC,MAAM,cAAAsC,sBAAA,cAAAA,sBAAA,GAAI,CAAC,CAAC;QACzD,CAAC,MAAM;UACLnK,IAAI,GAAG6J,iBAAiB,CAACnC,WAAW;UACpC3H,GAAG,GAAG8J,iBAAiB,CAAClC,QAAQ;UAEhC,IAAI3G,oBAAoB,IAAI,IAAI,IAAID,iBAAiB,IAAI,IAAI,EAAE;YAC7D,IAAI4I,aAAa,KAAKlF,SAAS,IAAI,CAACkF,aAAa,EAAE;cACjD3J,IAAI,GAAGgB,oBAAoB;YAC7B;YACA,IAAI4I,gBAAgB,KAAKnF,SAAS,IAAI,CAACmF,gBAAgB,EAAE;cACvD7J,GAAG,GAAGgB,iBAAiB;YACzB;UACF;UACA+I,KAAK,GAAGH,aAAa,KAAKlF,SAAS,IAAIkF,aAAa,GAAG,IAAI,GAAGnC,MAAM;UACpEuC,MAAM,GACJH,gBAAgB,KAAKnF,SAAS,IAAImF,gBAAgB,GAAG,IAAI,GAAG1D,GAAG;QACnE;QACA,IAAMoE,aAAa,GAAGlQ,SAAS,CAACmQ,cAAc,CAC5CvK,IAAI,EACJD,GAAG,EACH+J,KAAK,EACLC,MACF,CAAC;QAED,IAAIF,iBAAiB,CAACW,MAAM,CAACF,aAAa,CAAC,EAAE;UAC3C,OAAO,IAAI;QACb;QAEA,IAAMG,UAAS,GAAG,CAAC,GAAGtJ,cAAc,CAAC;QACrCsJ,UAAS,CAACA,UAAS,CAACjG,MAAM,GAAG,CAAC,CAAC,GAAG8F,aAAa;QAC/C,OAAO;UACLnJ,cAAc,EAAEsJ,UAAS;UACzBvJ,kBAAkB,EAAEsG,MAAM;UAC1BvG,eAAe,EAAEiF;QACnB,CAAC;MACH;MACA,IAAMuE,SAAS,GAAG,CAAC,GAAGtJ,cAAc,CAAC;MACrC,IAAMuJ,cAAc,GAClBf,aAAa,KAAKlF,SAAS,IAAIkF,aAAa,GAAG,IAAI,GAAGnC,MAAM;MAC9D,IAAMmD,WAAW,GACff,gBAAgB,KAAKnF,SAAS,IAAImF,gBAAgB,GAAG,IAAI,GAAG1D,GAAG;MAEjEuE,SAAS,CAACG,IAAI,CACZxQ,SAAS,CAACmQ,cAAc,CACtBG,cAAc,EACdC,WAAW,EACXD,cAAc,EACdC,WACF,CACF,CAAC;MACD,OAAO;QACLxJ,cAAc,EAAEsJ,SAAS;QACzBvJ,kBAAkB,EAAEsG,MAAM;QAC1BvG,eAAe,EAAEiF;MACnB,CAAC;IACH,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEO,eAAeA,CAAA,EAAS;IACtB,IAAI,CAAC1D,QAAQ,CAAEjD,KAAgB,IAAK;MAClC,IAAM;QAAE6D;MAAM,CAAC,GAAG,IAAI,CAAClG,KAAK;MAC5B,IAAM;QAAEkM;MAAc,CAAC,GAAGhG,KAAK;MAC/B,IAAM;QAAExC,cAAc;QAAEC,kBAAkB;QAAEP,SAAS;QAAEC;MAAa,CAAC,GACnEhB,KAAK;MAEP,IACEqB,cAAc,CAACqD,MAAM,KAAK,CAAC,KAC1BmF,aAAa,KAAKlF,SAAS,IAAIkF,aAAa,GACzCvP,SAAS,CAACwM,QAAQ,CAACzF,cAAc,CAAC,KAAK,CAAC,GACxC/G,SAAS,CAACyQ,SAAS,CAAC1J,cAAc,CAAC,KAAK,CAAC,CAAC,IAC9C/G,SAAS,CAAC0Q,gBAAgB,CAAC3J,cAAc,EAAEC,kBAAkB,CAAC,EAC9D;QACA;QACA;QACA,OAAO;UACLD,cAAc,EAAE,EAAE;UAClBC,kBAAkB,EAAE,EAAE;UACtBN,YAAY,EAAE,IAAI;UAClBD,SAAS,EAAE;QACb,CAAC;MACH;MAEA,IAAIkK,iBAAiB,GAAG5J,cAAc,CAACmI,KAAK,CAAC,CAAC;MAC9C,IAAIyB,iBAAiB,CAACvG,MAAM,GAAG,CAAC,EAAE;QAChC;QACA;QACA,IAAMwG,SAAS,GAAGD,iBAAiB,CAACA,iBAAiB,CAACvG,MAAM,GAAG,CAAC,CAAC;QACjE,KAAK,IAAI4E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2B,iBAAiB,CAACvG,MAAM,GAAG,CAAC,EAAE4E,CAAC,IAAI,CAAC,EAAE;UACxD,IAAMkB,aAAa,GAAGS,iBAAiB,CAAC3B,CAAC,CAAC;UAC1C,IAAIkB,aAAa,CAACW,QAAQ,CAACD,SAAS,CAAC,EAAE;YACrC;YACA;YACA,IAAME,SAAS,GAAGZ,aAAa,CAACa,QAAQ,CAACH,SAAS,CAAC;YACnDD,iBAAiB,CAACK,GAAG,CAAC,CAAC;YACvBL,iBAAiB,CAACM,MAAM,CAACjC,CAAC,EAAE,CAAC,CAAC;YAC9B2B,iBAAiB,GAAGA,iBAAiB,CAACxN,MAAM,CAAC2N,SAAS,CAAC;YACvD;UACF;QACF;QAEAH,iBAAiB,GAAG3Q,SAAS,CAACkR,WAAW,CAACP,iBAAiB,CAAC;MAC9D;MAEA,IAAIzD,eAAe,GAAGxG,YAAY;MAClC,IAAIuG,YAAY,GAAGxG,SAAS;MAC5B,IAAI,CAACzG,SAAS,CAACmN,YAAY,CAACwD,iBAAiB,EAAEjK,YAAY,EAAED,SAAS,CAAC,EAAE;QACvE,IAAM;UAAE6D;QAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;QAC5B,IAAM;UAAEsJ,WAAW;UAAEH;QAAS,CAAC,GAAGlC,KAAK;QACvC,IAAM6G,UAAU,GAAGnR,SAAS,CAACoR,QAAQ,CACnCpR,SAAS,CAACqR,aAAa,CAACtK,cAAc,EAAE4F,WAAW,EAAEH,QAAQ,CAC/D,CAAC;QACD,IAAI2E,UAAU,IAAI,IAAI,EAAE;UACtB,CAAC;YAAE/D,MAAM,EAAEF,eAAe;YAAEpB,GAAG,EAAEmB;UAAa,CAAC,GAAGkE,UAAU;QAC9D,CAAC,MAAM;UACLjE,eAAe,GAAG,IAAI;UACtBD,YAAY,GAAG,IAAI;QACrB;MACF;MAEA,IAAI0D,iBAAiB,CAACvG,MAAM,KAAK,CAAC,EAAE;QAClC8C,eAAe,GAAG,IAAI;QACtBD,YAAY,GAAG,IAAI;MACrB;MAEA,OAAO;QACLxG,SAAS,EAAEwG,YAAY;QACvBvG,YAAY,EAAEwG,eAAe;QAC7BnG,cAAc,EAAE4J,iBAAiB;QACjC3J,kBAAkB,EAAED;MACtB,CAAC;IACH,CAAC,CAAC;EACJ;EAEAuK,WAAWA,CAACC,UAAkB,EAAQ;IAAA,IAAAC,mBAAA;IACpC,IAAI,CAAC,IAAI,CAAClM,OAAO,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;MACtC;IACF;IAEA,IAAM;MAAEoM,KAAK;MAAE/G,MAAM;MAAE+B,OAAO;MAAEiF,cAAc;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACrM,OAAO;IAE1E,IAAMsM,WAAW,GAAGlH,MAAM,GAAG+G,KAAK;IAElC,IAAMI,kBAAkB,GACtBzD,IAAI,CAAC0D,KAAK,CAACF,WAAW,GAAG,CAAC,CAAC,KAAAJ,mBAAA,GAC1BE,cAAc,CAACnG,GAAG,CAACgG,UAAU,CAAC,cAAAC,mBAAA,cAAAA,mBAAA,GAAIG,SAAS,CAAC;IAE/C,IAAM/C,WAAW,GAAG,IAAI,CAAC1E,cAAc,CAAC,CAAC;IACzC,IAAM6H,MAAM,GAAG,IAAI,CAACjN,gBAAgB,CAACkN,UAAU,CAC7CpD,WAAW,EACX2C,UAAU,GAAG,CAAC,EACdM,kBACF,CAAC;IACD,IAAI,CAAClJ,QAAQ,CAAC;MACZhD,GAAG,EAAEyI,IAAI,CAAC4B,GAAG,CAACvD,OAAO,EAAEsF,MAAM,CAAC;MAC9BhL,cAAc,EAAE,CAAC,IAAI/G,SAAS,CAAC,IAAI,EAAEuR,UAAU,EAAE,IAAI,EAAEA,UAAU,CAAC,CAAC;MACnE3M,eAAe,EAAE;IACnB,CAAC,CAAC;IACF,IAAM;MAAE8B;IAAa,CAAC,GAAG,IAAI,CAAChB,KAAK;IACnC,IAAI,CAAC4G,oBAAoB,CAAC5F,YAAY,EAAE6K,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC;EACnE;;EAEA;AACF;AACA;EACEU,SAASA,CAAA,EAAS;IAChB,IAAM;MAAE3H,KAAK;MAAEf;IAAM,CAAC,GAAG,IAAI,CAAClG,KAAK;IACnC,IAAM;MAAEkM,aAAa;MAAEC;IAAiB,CAAC,GAAGjG,KAAK;IAEjD,IAAM5D,GAAG,GAAG6J,gBAAgB,KAAKnF,SAAS,IAAImF,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACzE,IAAMG,MAAM,GACVH,gBAAgB,KAAKnF,SAAS,IAAImF,gBAAgB,GAC9C,IAAI,GACJlF,KAAK,CAACkC,QAAQ,GAAG,CAAC;IACxB,IAAM5G,IAAI,GAAG2J,aAAa,KAAKlF,SAAS,IAAIkF,aAAa,GAAG,IAAI,GAAG,CAAC;IACpE,IAAMG,KAAK,GACTH,aAAa,KAAKlF,SAAS,IAAIkF,aAAa,GACxC,IAAI,GACJjF,KAAK,CAACqC,WAAW,GAAG,CAAC;IAC3B,IAAI,CAACE,iBAAiB,CAAC,CAAC,IAAI7M,SAAS,CAAC4F,IAAI,EAAED,GAAG,EAAE+J,KAAK,EAAEC,MAAM,CAAC,CAAC,CAAC;EACnE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEuC,UAAUA,CACRC,WAAmB,EACnBC,QAAgB,EAChB/C,eAAwB,EAClB;IACN,IAAM;MAAE5I,SAAS;MAAEC,YAAY;MAAEI,kBAAkB;MAAED;IAAgB,CAAC,GACpE,IAAI,CAACnB,KAAK;IACZ,IAAM0H,MAAM,GAAGiC,eAAe,GAAGvI,kBAAkB,GAAGJ,YAAY;IAClE,IAAMoF,GAAG,GAAGuD,eAAe,GAAGxI,eAAe,GAAGJ,SAAS;IACzD,IAAIqF,GAAG,KAAK,IAAI,IAAIsB,MAAM,KAAK,IAAI,EAAE;MACnC,IAAM;QAAExH,IAAI;QAAED;MAAI,CAAC,GAAG,IAAI,CAACD,KAAK;MAChC,IAAI,CAAC4G,oBAAoB,CAAC1G,IAAI,EAAED,GAAG,EAAE0J,eAAe,CAAC;IACvD,CAAC,MAAM;MACL,IAAM;QAAE/E;MAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;MAC5B,IAAM;QAAEsJ,WAAW;QAAEH;MAAS,CAAC,GAAGlC,KAAK;MAEvC,IAAM1E,KAAI,GAAGjG,KAAK,CAACyN,MAAM,GAAG+E,WAAW,EAAE,CAAC,EAAExF,WAAW,GAAG,CAAC,CAAC;MAC5D,IAAMhH,IAAG,GAAGhG,KAAK,CAACmM,GAAG,GAAGsG,QAAQ,EAAE,CAAC,EAAE5F,QAAQ,GAAG,CAAC,CAAC;MAClD,IAAI,CAACF,oBAAoB,CAAC1G,KAAI,EAAED,IAAG,EAAE0J,eAAe,CAAC;IACvD;EACF;;EAEA;AACF;AACA;AACA;EACEgD,qBAAqBA,CAAA,EAAuD;IAAA,IAAtDC,SAAS,GAAAnI,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGnK,SAAS,CAACC,mBAAmB,CAACsS,IAAI;IAClE,IAAM;MAAEjI;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAC5B,IAAM;MAAEsJ,WAAW;MAAEH;IAAS,CAAC,GAAGlC,KAAK;IACvC,IAAM;MAAE7D,SAAS;MAAEC,YAAY;MAAEK;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAC9D,IAAM8M,MAAM,GACVzL,cAAc,CAACqD,MAAM,GAAG,CAAC,GACrBrD,cAAc,GACd,CAAC/G,SAAS,CAACyS,QAAQ,CAAC/L,YAAY,EAAED,SAAS,CAAC,CAAC;IACnD,IAAI0K,UAAU,GAAG,IAAI;IACrB,IAAIqB,MAAM,CAACpI,MAAM,KAAK,CAAC,IAAIpK,SAAS,CAACyQ,SAAS,CAAC+B,MAAM,CAAC,KAAK,CAAC,EAAE;MAAA,IAAAE,mBAAA;MAC5D;MACA,IAAMC,SAAS,GAAG,IAAI3S,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE2M,WAAW,GAAG,CAAC,EAAEH,QAAQ,GAAG,CAAC,CAAC;MACpE2E,UAAU,IAAAuB,mBAAA,GACRC,SAAS,CAACvB,QAAQ,CAAC1K,YAAY,EAAED,SAAS,EAAE6L,SAAS,CAAC,cAAAI,mBAAA,cAAAA,mBAAA,GACtDC,SAAS,CAACtF,SAAS,CAACiF,SAAS,CAAC;IAClC,CAAC,MAAM;MACLnB,UAAU,GAAGnR,SAAS,CAACoR,QAAQ,CAC7BpR,SAAS,CAACqR,aAAa,CAACmB,MAAM,EAAE7F,WAAW,EAAEH,QAAQ,CAAC,EACtD9F,YAAY,EACZD,SAAS,EACT6L,SACF,CAAC;IACH;IAEA,IAAInB,UAAU,IAAI,IAAI,EAAE;MACtB,IAAM;QAAE/D,MAAM;QAAEtB;MAAI,CAAC,GAAGqF,UAAU;MAClC,IAAI,CAACxI,QAAQ,CAAC;QACZjC,YAAY,EAAE0G,MAAM;QACpB3G,SAAS,EAAEqF;MACb,CAAC,CAAC;MAEF,IAAI,CAAC9L,SAAS,CAACmN,YAAY,CAACpG,cAAc,EAAEqG,MAAM,EAAEtB,GAAG,CAAC,EAAE;QACxD,IAAI,CAACnD,QAAQ,CAAC;UACZ5B,cAAc,EAAE,CAAC/G,SAAS,CAACyS,QAAQ,CAACrF,MAAM,EAAEtB,GAAG,CAAC,CAAC;UACjDlF,oBAAoB,EAAEwG,MAAM;UAC5BzG,iBAAiB,EAAEmF,GAAG;UACtBhF,kBAAkB,EAAEsG,MAAM;UAC1BvG,eAAe,EAAEiF;QACnB,CAAC,CAAC;MACJ;MAEA,IAAI,CAAC8G,cAAc,CAACzB,UAAU,CAAC/D,MAAM,EAAE+D,UAAU,CAACrF,GAAG,CAAC;IACxD;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEQ,oBAAoBA,CAClBc,MAAsB,EACtBtB,GAAmB,EAIb;IAAA,IAHNuD,eAAe,GAAAlF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAAA,IACvB0I,gBAAgB,GAAA1I,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;IAAA,IACvBmF,qBAAqB,GAAAnF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAE7B,IAAI,CAACkF,eAAe,EAAE;MACpB,IAAI,CAACF,cAAc,CAAC/B,MAAM,EAAEtB,GAAG,CAAC;IAClC;IAEA,IAAI,CAACsD,aAAa,CAAChC,MAAM,EAAEtB,GAAG,EAAEuD,eAAe,EAAEC,qBAAqB,CAAC;IAEvE,IAAIuD,gBAAgB,EAAE;MACpB,IAAI,CAACD,cAAc,CAACxF,MAAM,EAAEtB,GAAG,CAAC;IAClC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE8G,cAAcA,CAACxF,MAAsB,EAAEtB,GAAmB,EAAQ;IAChE,IAAI,CAAC,IAAI,CAACxG,OAAO,EAAE,MAAM,IAAI2E,KAAK,CAAC,iBAAiB,CAAC;IAErD,IAAM;MAAEnF;IAAiB,CAAC,GAAG,IAAI;IACjC,IAAM;MAAEyH,aAAa;MAAEG,YAAY;MAAEoG,UAAU;MAAEC;IAAY,CAAC,GAC5D,IAAI,CAACzN,OAAO;IACd,IAAMsJ,WAAW,GAAG,IAAI,CAAC1E,cAAc,CAAC,IAAI,CAACxE,KAAK,CAAC;IACnD,IAAI;MAAEC,GAAG;MAAEC,IAAI;MAAEC,SAAS;MAAEC;IAAW,CAAC,GAAG,IAAI,CAACJ,KAAK;IAErD,IAAIoG,GAAG,IAAI,IAAI,IAAI,CAAC3L,SAAS,CAAC6S,aAAa,CAAClH,GAAG,EAAE,IAAI,CAACxG,OAAO,CAAC,EAAE;MAC9D,IAAIwG,GAAG,GAAGgH,UAAU,EAAE;QACpBnN,GAAG,GAAGb,gBAAgB,CAACmO,mBAAmB,CAACrE,WAAW,EAAE9C,GAAG,CAAC;QAC5DjG,SAAS,GAAG,CAAC;MACf,CAAC,MAAM,IAAIiG,GAAG,GAAGS,aAAa,EAAE;QAC9B5G,GAAG,GAAGb,gBAAgB,CAACoO,sBAAsB,CAACtE,WAAW,EAAE9C,GAAG,CAAC;QAC/DjG,SAAS,GAAG,CAAC;MACf;IACF;IAEA,IAAIuH,MAAM,IAAI,IAAI,IAAI,CAACjN,SAAS,CAACgT,gBAAgB,CAAC/F,MAAM,EAAE,IAAI,CAAC9H,OAAO,CAAC,EAAE;MACvE,IAAI8H,MAAM,GAAG2F,WAAW,EAAE;QACxBnN,IAAI,GAAGd,gBAAgB,CAACsO,qBAAqB,CAACxE,WAAW,EAAExB,MAAM,CAAC;QAClEtH,UAAU,GAAG,CAAC;MAChB,CAAC,MAAM,IAAIsH,MAAM,GAAGV,YAAY,EAAE;QAChC9G,IAAI,GAAGd,gBAAgB,CAACuO,sBAAsB,CAACzE,WAAW,EAAExB,MAAM,CAAC;QACnEtH,UAAU,GAAG,CAAC;MAChB;IACF;IAEA,IAAI,CAACwN,YAAY,CAAC;MAAE3N,GAAG;MAAEC,IAAI;MAAEC,SAAS;MAAEC;IAAW,CAAC,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEwN,YAAYA,CAACC,SAA6B,EAA6B;IAAA,IAA3BC,WAAW,GAAArJ,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAC7D,IAAI,CAAC,IAAI,CAAC7E,OAAO,EAAE,MAAM,IAAI2E,KAAK,CAAC,iBAAiB,CAAC;IAErD,IAAM;MAAEpC,cAAc;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACzE,KAAK;IACpD,IAAM;MAAEsC,GAAG;MAAEC;IAAK,CAAC,GAAG2N,SAAS;IAC/B,IAAM;MAAE9G,OAAO;MAAEG,QAAQ;MAAE6G,cAAc;MAAEC;IAAiB,CAAC,GAC3D,IAAI,CAACpO,OAAO;IACd,IAAIK,GAAG,IAAI,IAAI,IAAI8N,cAAc,EAAE;MACjC,IAAI,CAAC9K,QAAQ,CAAC;QAAE/D,eAAe,EAAEiD,cAAc,IAAIlC,GAAG,IAAI8G;MAAQ,CAAC,CAAC;IACtE;IACA,IAAI7G,IAAI,IAAI,IAAI,IAAI8N,gBAAgB,EAAE;MACpC,IAAI,CAAC/K,QAAQ,CAAC;QAAE9D,cAAc,EAAEiD,aAAa,IAAIlC,IAAI,IAAIgH;MAAS,CAAC,CAAC;IACtE;IAEA,IAAI,CAACjE,QAAQ,CAAC4K,SAAsB,CAAC;IACrC,IAAIC,WAAW,EAAE;MACf,IAAI,CAACA,WAAW,CAAC,CAAC;IACpB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,YAAYA,CACVvG,MAAoB,EACpBtB,GAAiB,EAIX;IAAA,IAHN8H,WAAW,GAAAzJ,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAAA,IACnB0J,cAA8C,GAAA1J,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IAAA,IAC9CyJ,KAAc,GAAA3J,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IAEd,IAAM;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAC5B,IAAI,CAAC7B,mBAAmB,CAAC8I,KAAK,CAAC,EAAE,MAAM,IAAIL,KAAK,CAAC,uBAAuB,CAAC;IAEzE,IAAM8J,WAAW,GAAG,IAAI,CAAC9I,cAAc,CAACmC,MAAM,CAAC;IAC/C,IAAMpB,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,IAAMkI,IAAI,GAAG;MACX5G,MAAM;MACNtB,GAAG;MACH+H,cAAc;MACdC,KAAK,EACHA,KAAK,KAAKzJ,SAAS,GACfyJ,KAAK,GACLxJ,KAAK,CAAC2J,gBAAgB,CAACF,WAAW,EAAE/H,QAAQ,CAAC;MACnD4H;IACF,CAAC;IAED,IAAI,CAACjL,QAAQ,CAAC;MAAE1B,WAAW,EAAE+M,IAAI;MAAEtN,YAAY,EAAE0G,MAAM;MAAE3G,SAAS,EAAEqF;IAAI,CAAC,CAAC;IAC1E,IAAI,CAAC8G,cAAc,CAACxF,MAAM,EAAEtB,GAAG,CAAC;EAClC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEoI,cAAcA,CACZ9G,MAAoB,EACpBtB,GAAiB,EACjBgI,KAAa,EACJ;IACT,IAAM;MAAExJ;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAE5B,IAAM0Q,WAAW,GAAG,IAAI,CAAC9I,cAAc,CAACmC,MAAM,CAAC;IAC/C,IAAMpB,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,OACEtK,mBAAmB,CAAC8I,KAAK,CAAC,IAC1BA,KAAK,CAAC4J,cAAc,CAACH,WAAW,EAAE/H,QAAQ,EAAE8H,KAAK,CAAC;EAEtD;;EAEA;AACF;AACA;AACA;AACA;AACA;EACQK,UAAUA,CAACL,KAA0B,EAAiB;IAAA,IAAAM,KAAA;IAAA,OAAAC,iBAAA;MAC1D,IAAM;QAAE/J;MAAM,CAAC,GAAG8J,KAAI,CAAC/Q,KAAK;MAC5B,IAAM;QAAE0B,YAAY;QAAEC,SAAS;QAAE+B;MAAe,CAAC,GAAGqN,KAAI,CAAC1O,KAAK;MAE9D,IAAI;QACFnE,yBAAyB,CAAC+I,KAAK,CAAC;QAEhC,IACE,CAACA,KAAK,CAACgK,UAAU,IACjB,CAACvN,cAAc,CAACwN,KAAK,CAACxH,KAAK,IAAIzC,KAAK,CAACkK,eAAe,CAACzH,KAAK,CAAC,CAAC,EAC5D;UACA,MAAM,IAAI1L,UAAU,CAAC,mCAAmC,CAAC;QAC3D;QAEA,IAAI0F,cAAc,CAACqD,MAAM,IAAI,CAAC,EAAE;UAC9B,MAAM,IAAI/I,UAAU,CAAC,6BAA6B,CAAC;QACrD;QAEA,IAAI,OAAOyS,KAAK,KAAK,QAAQ,EAAE;UAC7B;UACA,IAAMW,MAAsB,GAAG,EAAE;UAEjC,IAAMC,WAAW,GAAGvU,SAAS,CAACwU,cAAc,CAC1C5N,cAAc,EACdhC,YAAY,EACZC,SACF,CAAC;UACDhF,SAAS,CAAC4U,WAAW,CAACF,WAAW,EAAE,CAACtH,MAAM,EAAEtB,GAAG,KAAK;YAClD2I,MAAK,CAACjE,IAAI,CAAC;cAAEpD,MAAM;cAAEtB,GAAG;cAAE+I,IAAI,EAAEf;YAAM,CAAC,CAAC;UAC1C,CAAC,CAAC;UACF,MAAMxJ,KAAK,CAACwK,SAAS,CAACL,MAAK,CAAC;UAC5B;QACF;;QAEA;QACA,IAAM7C,WAAW,GAAGkC,KAAK,CAAC1J,MAAM;QAChC,IAAM2K,UAAU,GAAGjB,KAAK,CAAC,CAAC,CAAC,CAAC1J,MAAM;QAClC,IAAM;UAAEuC,WAAW;UAAEH;QAAS,CAAC,GAAGlC,KAAK;QACvC,IAAIkI,OAAM,GAAGzL,cAAc;QAC3B;QACA,IACEyL,OAAM,CAAC+B,KAAK,CACVxH,KAAK;UAAA,IAAAiI,kBAAA,EAAAC,eAAA;UAAA,OACHjV,SAAS,CAACyQ,SAAS,CAAC,CAAC1D,KAAK,CAAC,CAAC,KAAK,CAAC,IAClC,EAAAiI,kBAAA,GAACjI,KAAK,CAACO,WAAW,cAAA0H,kBAAA,cAAAA,kBAAA,GAAI,CAAC,IAAID,UAAU,IAAIpI,WAAW,IACpD,EAAAsI,eAAA,GAAClI,KAAK,CAACQ,QAAQ,cAAA0H,eAAA,cAAAA,eAAA,GAAI,CAAC,IAAIrD,WAAW,IAAIpF,QAAQ;QAAA,CACnD,CAAC,EACD;UACA;UACAgG,OAAM,GAAGA,OAAM,CAAC0C,GAAG,CACjBnI,KAAK;YAAA,IAAAoI,mBAAA,EAAAC,gBAAA;YAAA,OACH,IAAIpV,SAAS,CACX+M,KAAK,CAACO,WAAW,EACjBP,KAAK,CAACQ,QAAQ,EACd,EAAA4H,mBAAA,GAACpI,KAAK,CAACO,WAAW,cAAA6H,mBAAA,cAAAA,mBAAA,GAAI,CAAC,IAAIJ,UAAU,GAAG,CAAC,EACzC,EAAAK,gBAAA,GAACrI,KAAK,CAACQ,QAAQ,cAAA6H,gBAAA,cAAAA,gBAAA,GAAI,CAAC,IAAIxD,WAAW,GAAG,CACxC,CAAC;UAAA,CACL,CAAC;UACDwC,KAAI,CAACvH,iBAAiB,CAAC2F,OAAM,CAAC;QAChC;QAEA,IACE,CAACA,OAAM,CAAC+B,KAAK,CACXxH,KAAK,IACH/M,SAAS,CAACwM,QAAQ,CAAC,CAACO,KAAK,CAAC,CAAC,KAAK6E,WAAW,IAC3C5R,SAAS,CAAC2M,WAAW,CAAC,CAACI,KAAK,CAAC,CAAC,KAAKgI,UACvC,CAAC,EACD;UACA,MAAM,IAAI1T,UAAU,CAAC,wCAAwC,CAAC;QAChE;QAEA,IAAMoT,KAAsB,GAAG,EAAE;QACjCjC,OAAM,CAAC6C,OAAO,CAACtI,KAAK,IAAI;UACtB,KAAK,IAAInD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmL,UAAU,EAAEnL,CAAC,IAAI,CAAC,EAAE;YACtC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8H,WAAW,EAAE9H,CAAC,IAAI,CAAC,EAAE;cAAA,IAAAwL,mBAAA,EAAAC,gBAAA;cACvCd,KAAK,CAACjE,IAAI,CAAC;gBACTpD,MAAM,EAAE,EAAAkI,mBAAA,GAACvI,KAAK,CAACO,WAAW,cAAAgI,mBAAA,cAAAA,mBAAA,GAAI,CAAC,IAAI1L,CAAC;gBACpCkC,GAAG,EAAE,EAAAyJ,gBAAA,GAACxI,KAAK,CAACQ,QAAQ,cAAAgI,gBAAA,cAAAA,gBAAA,GAAI,CAAC,IAAIzL,CAAC;gBAC9B+K,IAAI,EAAEf,KAAK,CAAChK,CAAC,CAAC,CAACF,CAAC;cAClB,CAAC,CAAC;YACJ;UACF;QACF,CAAC,CAAC;QACF,MAAMU,KAAK,CAACwK,SAAS,CAACL,KAAK,CAAC;MAC9B,CAAC,CAAC,OAAOe,CAAC,EAAE;QACV,IAAM;UAAEC;QAAQ,CAAC,GAAGrB,KAAI,CAAC/Q,KAAK;QAC9BoS,OAAO,CAACD,CAAC,YAAYvL,KAAK,GAAGuL,CAAC,GAAG,IAAIvL,KAAK,IAAA9G,MAAA,CAAIqS,CAAC,CAAE,CAAC,CAAC;MACrD;IAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEE,eAAeA,CACbtI,MAAoB,EACpBtB,GAAiB,EACjBgI,KAAa,EACJ;IACT,IAAM;MAAExJ;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAC5B9B,yBAAyB,CAAC+I,KAAK,CAAC;IAEhC,IAAMyJ,WAAW,GAAG,IAAI,CAAC9I,cAAc,CAACmC,MAAM,CAAC;IAC/C,IAAMpB,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,IAAIxB,KAAK,CAAC4J,cAAc,CAACH,WAAW,EAAE/H,QAAQ,EAAE8H,KAAK,CAAC,EAAE;MACtDxJ,KAAK,CAACoL,eAAe,CAAC3B,WAAW,EAAE/H,QAAQ,EAAE8H,KAAK,CAAC;MACnD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;AACA;AACA;EACE6B,iBAAiBA,CAACnD,MAA4B,EAAEsB,KAAa,EAAQ;IACnE,IAAM;MAAExJ;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAC5B,IAAM;MAAE0B,YAAY;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACU,KAAK;IAE9C,IAAMgP,WAAW,GAAGvU,SAAS,CAACwU,cAAc,CAC1CnC,MAAM,EACNzN,YAAY,EACZC,SACF,CAAC;IACD,IAAIxD,mBAAmB,CAAC8I,KAAK,CAAC,EAAE;MAC9BA,KAAK,CAACqL,iBAAiB,CAACjB,WAAW,EAAEZ,KAAK,CAAC;IAC7C;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE8B,UAAUA,CAAC9J,GAAiB,EAAEsB,MAAoB,EAAW;IAC3D,IAAM;MAAErG;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAErC,KAAK,IAAIsJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGjI,cAAc,CAACqD,MAAM,EAAE4E,CAAC,IAAI,CAAC,EAAE;MAAA,IAAA6G,qBAAA,EAAAC,qBAAA;MACjD,IAAM5F,aAAa,GAAGnJ,cAAc,CAACiI,CAAC,CAAC;MACvC,IAAM+G,WAAW,GACf7F,aAAa,CAAC3C,QAAQ,KAAK,IAAI,IAC9B2C,aAAa,CAAC3C,QAAQ,IAAIzB,GAAG,IAAIA,GAAG,MAAA+J,qBAAA,GAAK3F,aAAa,CAACzC,MAAM,cAAAoI,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAE;MACvE,IAAMG,cAAc,GAClB9F,aAAa,CAAC5C,WAAW,KAAK,IAAI,IACjC4C,aAAa,CAAC5C,WAAW,IAAIF,MAAM,IAClCA,MAAM,MAAA0I,qBAAA,GAAK5F,aAAa,CAAC1C,SAAS,cAAAsI,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAE;MAC7C,IAAIC,WAAW,IAAIC,cAAc,EAAE;QACjC,OAAO,IAAI;MACb;IACF;IAEA,OAAO,KAAK;EACd;EAEAC,iBAAiBA,CAAA,EAAqC;IAAA,IAApC/S,MAAqB,GAAAiH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;IAC5C,IAAI,IAAI,CAAC3E,cAAc,KAAKvD,IAAI,CAACgB,kBAAkB,CAACC,MAAM,CAAC,EAAE;IAC7D,IAAI,IAAI,CAACsC,cAAc,IAAI,IAAI,EAAE;MAC/B0Q,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACC,MAAM,CAAC,IAAI,CAAC7Q,cAAc,CAAC;IAChE;IACA,IAAI,CAACA,cAAc,GAAGvD,IAAI,CAACgB,kBAAkB,CAACC,MAAM,CAAC;IACrD,IAAI,IAAI,CAACsC,cAAc,IAAI,IAAI,EAAE;MAC/B0Q,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACE,GAAG,CAAC,IAAI,CAAC9Q,cAAc,CAAC;IAC7D;IACA0Q,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACE,GAAG,CAAC,mBAAmB,CAAC;EAC7D;EAEAC,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,IAAI,CAAC/Q,cAAc,IAAI,IAAI,EAAE;MAC/B0Q,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACC,MAAM,CAAC,IAAI,CAAC7Q,cAAc,CAAC;MAC9D0Q,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACC,MAAM,CAAC,mBAAmB,CAAC;MAC9D,IAAI,CAAC7Q,cAAc,GAAG,IAAI;IAC5B;EACF;EAEAgR,cAAcA,CAAC/M,KAAuB,EAAQ;IAC5C,IAAI,CAACJ,aAAa,CAAC,CAAC;IAEpB,IAAMoN,UAAU,GAAG,IAAIC,UAAU,CAAC,QAAQ,EAAEjN,KAAK,CAACkN,WAAW,CAAC;IAE9D,IAAI,CAAClR,SAAS,GAAGmR,UAAU,CAAC,MAAM;MAChC,IAAI,CAACtS,eAAe,CAACmS,UAAU,CAAC;IAClC,CAAC,EAAExU,IAAI,CAAC4U,WAAW,CAAC;EACtB;EAEAxN,aAAaA,CAAA,EAAS;IACpB,IAAI,IAAI,CAAC5D,SAAS,EAAE;MAClBqR,YAAY,CAAC,IAAI,CAACrR,SAAS,CAAC;MAC5B,IAAI,CAACA,SAAS,GAAG,IAAI;IACvB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACUwI,UAAUA,CAAA,EAAuC;IAAA,IAAtC3I,OAAO,GAAA6E,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI,CAACvB,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,CAAC1D,MAAM,EAAE,MAAM,IAAI+E,KAAK,CAAC,mBAAmB,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC9E,aAAa,EAAE,MAAM,IAAI8E,KAAK,CAAC,iBAAiB,CAAC;IAE3D,IAAM;MAAEhF,QAAQ;MAAEE,aAAa,EAAEhD,OAAO;MAAEoD;IAAY,CAAC,GAAG,IAAI;IAE9DpD,OAAO,CAAC4U,IAAI,CAAC,CAAC;IAEd9R,QAAQ,CAACgJ,UAAU,CAAC1I,WAAW,CAAC;IAEhCpD,OAAO,CAAC6U,OAAO,CAAC,CAAC;EACnB;;EAEA;AACF;AACA;EACEC,KAAKA,CAAA,EAAS;IAAA,IAAAC,aAAA;IACZ,CAAAA,aAAA,OAAI,CAAChS,MAAM,cAAAgS,aAAA,uBAAXA,aAAA,CAAaD,KAAK,CAAC,CAAC;EACtB;;EAEA;AACF;AACA;AACA;EACEE,SAASA,CAAA,EAAY;IACnB,OAAOjB,QAAQ,CAACkB,aAAa,KAAK,IAAI,CAAClS,MAAM;EAC/C;;EAEA;AACF;AACA;AACA;AACA;EACErB,WAAWA,CAAC4F,KAAuB,EAAQ;IAAA,IAAA4N,aAAA;IACzC,IAAMC,SAAS,GAAG,IAAI,CAAC9N,qBAAqB,CAACC,KAAK,CAAC;IAEnD,IAAM7F,aAAa,GAAG,IAAI,CAACmH,gBAAgB,CAAC,CAAC;IAC7C,KAAK,IAAIiE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGpL,aAAa,CAACwG,MAAM,EAAE4E,CAAC,IAAI,CAAC,EAAE;MAChD,IAAMuI,YAAY,GAAG3T,aAAa,CAACoL,CAAC,CAAC;MACrC,IAAIuI,YAAY,CAACC,OAAO,CAACF,SAAS,EAAE,IAAI,EAAE7N,KAAK,CAAC,KAAK,KAAK,EAAE;QAC1DA,KAAK,CAACgO,eAAe,CAAC,CAAC;QACvBhO,KAAK,CAACiO,cAAc,CAAC,CAAC;QACtB;MACF;IACF;IAEA,CAAAL,aAAA,OAAI,CAACnS,MAAM,cAAAmS,aAAA,uBAAXA,aAAA,CAAaJ,KAAK,CAAC,CAAC;EACtB;;EAEA;AACF;AACA;AACA;EACElT,iBAAiBA,CAAC0F,KAAuB,EAAQ;IAC/C,IAAM6N,SAAS,GAAG,IAAI,CAAC9N,qBAAqB,CAACC,KAAK,CAAC;IAEnD,IAAM7F,aAAa,GAAG,IAAI,CAACmH,gBAAgB,CAAC,CAAC;IAC7C,KAAK,IAAIiE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGpL,aAAa,CAACwG,MAAM,EAAE4E,CAAC,IAAI,CAAC,EAAE;MAChD,IAAMuI,YAAY,GAAG3T,aAAa,CAACoL,CAAC,CAAC;MACrC,IAAIuI,YAAY,CAACI,aAAa,CAACL,SAAS,EAAE,IAAI,EAAE7N,KAAK,CAAC,KAAK,KAAK,EAAE;QAChEA,KAAK,CAACgO,eAAe,CAAC,CAAC;QACvBhO,KAAK,CAACiO,cAAc,CAAC,CAAC;QACtB;MACF;IACF;EACF;;EAEA;AACF;AACA;AACA;EACEtT,aAAaA,CAACqF,KAAwB,EAAQ;IAC5C,IAAMlG,WAAW,GAAG,IAAI,CAACsH,cAAc,CAAC,CAAC;IACzC,KAAK,IAAImE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGzL,WAAW,CAAC6G,MAAM,EAAE4E,CAAC,IAAI,CAAC,EAAE;MAC9C,IAAM4I,UAAU,GAAGrU,WAAW,CAACyL,CAAC,CAAC;MACjC,IAAM6I,MAAM,GAAGD,UAAU,CAACE,MAAM,CAACrO,KAAK,EAAE,IAAI,CAAC;MAC7C,IAAIoO,MAAM,KAAK,KAAK,EAAE;QAAA,IAAAE,qBAAA,EAAAC,qBAAA;QACpB,IAAMC,OAAO,GAAGJ,MAAmC;QACnD,KAAAE,qBAAA,GAAIE,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAER,eAAe,cAAAM,qBAAA,cAAAA,qBAAA,GAAI,IAAI,EAAEtO,KAAK,CAACgO,eAAe,CAAC,CAAC;QAC7D,KAAAO,qBAAA,GAAIC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEP,cAAc,cAAAM,qBAAA,cAAAA,qBAAA,GAAI,IAAI,EAAEvO,KAAK,CAACiO,cAAc,CAAC,CAAC;QAC3D;MACF;IACF;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEQ,mBAAmBA,CACjBC,YAA0C,EAC1C1O,KAAqB,EAGf;IAAA,IAFN2O,iBAAiB,GAAAjO,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;IAAA,IACxBkO,mBAAmB,GAAAlO,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAE3B,IAAMmN,SAAS,GAAG,IAAI,CAAC9N,qBAAqB,CAACC,KAAK,CAAC;IACnD,IAAM7F,aAAa,GAAG,IAAI,CAACmH,gBAAgB,CAAC,CAAC;IAC7C,IAAI7H,MAAM,GAAG,IAAI;IACjB,KAAK,IAAI8L,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGpL,aAAa,CAACwG,MAAM,EAAE4E,CAAC,IAAI,CAAC,EAAE;MAChD,IAAMuI,YAAY,GAAG3T,aAAa,CAACoL,CAAC,CAAC;MACrC,IAAM6I,MAAM,GACVN,YAAY,CAACY,YAAY,CAAC,IAAI,IAAI,IAClCZ,YAAY,CAACY,YAAY,CAAC,CAACb,SAAS,EAAE,IAAI,EAAE7N,KAAK,CAAC;MACpD,IAAIoO,MAAM,KAAK,KAAK,EAAE;QAAA,IAAAS,sBAAA,EAAAC,sBAAA;QACpB,IAAIhB,YAAY,CAACrU,MAAM,IAAI,IAAI,EAAE;UAC/B,CAAC;YAAEA;UAAO,CAAC,GAAGqU,YAAY;UAC1B,IAAIc,mBAAmB,EAAE;YACvB,IAAI,CAACpC,iBAAiB,CAAC/S,MAAM,CAAC;UAChC;QACF;;QAEA;QACA,IAAM+U,OAAO,GAAGJ,MAAmC;QACnD,KAAAS,sBAAA,GAAIL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAER,eAAe,cAAAa,sBAAA,cAAAA,sBAAA,GAAI,IAAI,EAAE7O,KAAK,CAACgO,eAAe,CAAC,CAAC;QAC7D,KAAAc,sBAAA,GAAIN,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEP,cAAc,cAAAa,sBAAA,cAAAA,sBAAA,GAAI,IAAI,EAAE9O,KAAK,CAACiO,cAAc,CAAC,CAAC;QAC3D;MACF;IACF;IAEA,IAAI,CAAC/O,QAAQ,CAAC;MAAEzF;IAAO,CAAC,CAAC;IAEzB,IAAIkV,iBAAiB,EAAE;MACrB,IAAM;QAAExO,CAAC;QAAEE;MAAE,CAAC,GAAGwN,SAAS;MAC1B,IAAI,CAAC3O,QAAQ,CAAC;QAAEpC,MAAM,EAAEqD,CAAC;QAAEpD,MAAM,EAAEsD;MAAE,CAAC,CAAC;IACzC;EACF;EAEAzF,eAAeA,CAACoF,KAAuB,EAAQ;IAC7C/G,MAAM,CAAC2E,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC/C,eAAe,EAAE,IAAI,CAAC;IAChE5B,MAAM,CAAC2E,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC5C,aAAa,EAAE,IAAI,CAAC;IAE5D,IAAIgF,KAAK,CAAC+O,MAAM,IAAI,IAAI,IAAI/O,KAAK,CAAC+O,MAAM,KAAK,CAAC,EAAE;MAC9C;IACF;IAEA,IAAI,CAACN,mBAAmB,CAAC,QAAQ,EAAEzO,KAAK,CAAC;IAEzC,IAAI,CAAC+M,cAAc,CAAC/M,KAAK,CAAC;EAC5B;EAEAtF,iBAAiBA,CAACsF,KAAuB,EAAQ;IAC/C,IAAI,CAACyO,mBAAmB,CAAC,eAAe,EAAEzO,KAAK,CAAC;EAClD;EAEAlF,eAAeA,CAACkF,KAAuB,EAAQ;IAC7C,IAAI,CAACyO,mBAAmB,CAAC,QAAQ,EAAEzO,KAAK,CAAC;EAC3C;EAEAjF,gBAAgBA,CAACiF,KAAuB,EAAQ;IAC9C,IAAI,CAACyO,mBAAmB,CAAC,SAAS,EAAEzO,KAAK,EAAE,KAAK,CAAC;IACjD,IAAI,CAACd,QAAQ,CAAC;MAAEpC,MAAM,EAAE,IAAI;MAAEC,MAAM,EAAE;IAAK,CAAC,CAAC;EAC/C;EAEAlC,eAAeA,CAACmF,KAAiB,EAAQ;IACvC,IAAI,CAACd,QAAQ,CAAC;MAAErC,UAAU,EAAE;IAAK,CAAC,CAAC;IACnC,IAAI,CAAC4R,mBAAmB,CAAC,QAAQ,EAAEzO,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IAErD,IAAI,CAACJ,aAAa,CAAC,CAAC;EACtB;EAEA5E,aAAaA,CAACgF,KAAiB,EAAQ;IACrC/G,MAAM,CAAC0G,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC9E,eAAe,EAAE,IAAI,CAAC;IACnE5B,MAAM,CAAC0G,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC3E,aAAa,EAAE,IAAI,CAAC;IAE/D,IAAIgF,KAAK,CAAC+O,MAAM,IAAI,IAAI,IAAI/O,KAAK,CAAC+O,MAAM,KAAK,CAAC,EAAE;MAC9C;IACF;IAEA,IAAI,CAACN,mBAAmB,CAAC,MAAM,EAAEzO,KAAK,EAAE,KAAK,CAAC;IAE9C,IAAI,CAACJ,aAAa,CAAC,CAAC;IAEpB,IAAI,CAACkN,oBAAoB,CAAC,CAAC;EAC7B;EAEA7R,YAAYA,CAAA,EAAS;IACnB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAI,CAAC6C,YAAY,CAAC,CAAC;IAEnB,IAAI,CAAC,IAAI,CAACjC,OAAO,EAAE,MAAM,IAAI2E,KAAK,CAAC,iBAAiB,CAAC;IAErD,IAAI,CAACuJ,WAAW,CAAC,CAAC;EACpB;EAEA7O,WAAWA,CAAC8E,KAAiB,EAAQ;IACnC,IAAI,CAACyO,mBAAmB,CAAC,SAAS,EAAEzO,KAAK,CAAC;IAE1C,IAAIA,KAAK,CAACgP,gBAAgB,EAAE;MAC1B;IACF;IAEA,IAAM;MAAE3T,gBAAgB;MAAEQ;IAAQ,CAAC,GAAG,IAAI;IAC1C,IAAMsJ,WAAW,GAAG,IAAI,CAAC1E,cAAc,CAAC,CAAC;IAEzC,IAAI,CAAC5E,OAAO,EAAE,MAAM,IAAI2E,KAAK,CAAC,iBAAiB,CAAC;IAEhD,IAAM;MACJwC,OAAO;MACPG,QAAQ;MACRD,WAAW;MACXH,QAAQ;MACRkM,sBAAsB;MACtBC,uBAAuB;MACvBC,uBAAuB;MACvBC,wBAAwB;MACxBnF,gBAAgB;MAChBD;IACF,CAAC,GAAGnO,OAAO;IACX,IAAI;MAAEK,GAAG;MAAEC,IAAI;MAAEC,SAAS;MAAEC;IAAW,CAAC,GAAGR,OAAO;IAElD,IAAMiE,KAAK,GAAG,IAAI,CAACD,QAAQ,CAAC,CAAC;IAE7B,IAAI;MAAEwP,MAAM;MAAEC;IAAO,CAAC,GAAG5Y,SAAS,CAAC6Y,cAAc,CAC/CvP,KAAK,EACLnE,OAAO,CAAC2T,QAAQ,EAChB3T,OAAO,CAAC4T,SAAS,EACjB5T,OAAO,CAACqM,SAAS,EACjBrM,OAAO,CAACqM,SACV,CAAC;;IAED;IACA;IACA,OAAO+B,gBAAgB,IAAIoF,MAAM,KAAK,CAAC,EAAE;MACvChT,UAAU,IAAIgT,MAAM;MACpBA,MAAM,GAAG,CAAC;MAEV,IAAInM,WAAW,GAAG,CAAC,EAAE;QACnB;QACA,IACG7G,UAAU,GAAG,CAAC,IAAIF,IAAI,IAAIgH,QAAQ,IAClC9G,UAAU,GAAG,CAAC,IAAIF,IAAI,IAAI,CAAE,EAC7B;UACAE,UAAU,GAAG,CAAC;UACd;QACF;MACF,CAAC,MAAM;QACL;QACA,IAAIA,UAAU,IAAI,CAAC,EAAE;UACnBA,UAAU,GAAG,CAAC;UACd;QACF;QAEA,IAAMqT,aAAa,GAAGT,sBAAsB,GAAGC,uBAAuB;QACtE,IAAI7S,UAAU,IAAIqT,aAAa,EAAE;UAC/BrT,UAAU,GAAGqT,aAAa;UAC1B;QACF;MACF;MAEA,IAAIrT,UAAU,GAAG,CAAC,EAAE;QAAA,IAAAsT,qBAAA;QAClB;;QAEA;QACA,IAAMC,WAAW,IAAAD,qBAAA,GACf9T,OAAO,CAACgU,eAAe,CAAC/N,GAAG,CAAC3F,IAAI,CAAC,cAAAwT,qBAAA,cAAAA,qBAAA,GACjCtU,gBAAgB,CAACyU,qBAAqB,CAAC3T,IAAI,EAAEgJ,WAAW,CAAC;QAE3D,IAAI9I,UAAU,IAAIuT,WAAW,EAAE;UAC7B;UACAP,MAAM,GAAGhT,UAAU,GAAGuT,WAAW;UACjCvT,UAAU,GAAG,CAAC;UACdF,IAAI,IAAI,CAAC;QACX,CAAC,MAAM,IAAI2D,KAAK,CAACiQ,kBAAkB,IAAI7M,WAAW,GAAG,CAAC,EAAE;UACtD;UACA7G,UAAU,GAAG,CAAC;UACdF,IAAI,IAAI,CAAC;QACX;MACF,CAAC,MAAM,IAAIE,UAAU,GAAG,CAAC,EAAE;QAAA,IAAA2T,sBAAA;QACzB;;QAEA;QACA,IAAMJ,YAAW,IAAAI,sBAAA,GACfnU,OAAO,CAACgU,eAAe,CAAC/N,GAAG,CAAC3F,IAAI,GAAG,CAAC,CAAC,cAAA6T,sBAAA,cAAAA,sBAAA,GACrC3U,gBAAgB,CAACyU,qBAAqB,CAAC3T,IAAI,GAAG,CAAC,EAAEgJ,WAAW,CAAC;QAE/D,IACER,IAAI,CAACsL,GAAG,CAAC5T,UAAU,CAAC,IAAIuT,YAAW,IACnC9P,KAAK,CAACiQ,kBAAkB,IACxB7M,WAAW,GAAG,CAAC,EACf;UACA;UACA7G,UAAU,GAAG,CAAC;UACdF,IAAI,IAAI,CAAC;QACX,CAAC,MAAM;UACL;UACAkT,MAAM,GAAGhT,UAAU,GAAGuT,YAAW;UACjCvT,UAAU,GAAG,CAAC;UACdF,IAAI,IAAI,CAAC;QACX;MACF;IACF;;IAEA;IACA;IACA,OAAO6N,cAAc,IAAIsF,MAAM,KAAK,CAAC,EAAE;MACrClT,SAAS,IAAIkT,MAAM;MACnBA,MAAM,GAAG,CAAC;MAEV,IAAIvM,QAAQ,GAAG,CAAC,EAAE;QAChB;QACA,IAAK3G,SAAS,GAAG,CAAC,IAAIF,GAAG,IAAI8G,OAAO,IAAM5G,SAAS,GAAG,CAAC,IAAIF,GAAG,IAAI,CAAE,EAAE;UACpEE,SAAS,GAAG,CAAC;UACb;QACF;MACF,CAAC,MAAM;QACL;QACA,IAAIA,SAAS,IAAI,CAAC,EAAE;UAClBA,SAAS,GAAG,CAAC;UACb;QACF;QAEA,IAAM8T,YAAY,GAAGf,uBAAuB,GAAGC,wBAAwB;QACvE,IAAIhT,SAAS,IAAI8T,YAAY,EAAE;UAC7B9T,SAAS,GAAG8T,YAAY;UACxB;QACF;MACF;MAEA,IAAI9T,SAAS,GAAG,CAAC,EAAE;QAAA,IAAA+T,qBAAA;QACjB;;QAEA;QACA,IAAMjI,SAAS,IAAAiI,qBAAA,GACbtU,OAAO,CAACuU,aAAa,CAACtO,GAAG,CAAC5F,GAAG,CAAC,cAAAiU,qBAAA,cAAAA,qBAAA,GAC9B9U,gBAAgB,CAACgV,mBAAmB,CAACnU,GAAG,EAAEiJ,WAAW,CAAC;QAExD,IAAI/I,SAAS,IAAI8L,SAAS,EAAE;UAC1B;UACAoH,MAAM,GAAGlT,SAAS,GAAG8L,SAAS;UAC9B9L,SAAS,GAAG,CAAC;UACbF,GAAG,IAAI,CAAC;QACV,CAAC,MAAM,IAAI4D,KAAK,CAACwQ,eAAe,IAAIvN,QAAQ,GAAG,CAAC,EAAE;UAChD;UACA3G,SAAS,GAAG,CAAC;UACbF,GAAG,IAAI,CAAC;QACV;MACF,CAAC,MAAM,IAAIE,SAAS,GAAG,CAAC,EAAE;QAAA,IAAAmU,sBAAA;QACxB;;QAEA;QACA,IAAMrI,UAAS,IAAAqI,sBAAA,GACb1U,OAAO,CAACuU,aAAa,CAACtO,GAAG,CAAC5F,GAAG,GAAG,CAAC,CAAC,cAAAqU,sBAAA,cAAAA,sBAAA,GAClClV,gBAAgB,CAACgV,mBAAmB,CAACnU,GAAG,GAAG,CAAC,EAAEiJ,WAAW,CAAC;QAE5D,IACER,IAAI,CAACsL,GAAG,CAAC7T,SAAS,CAAC,IAAI8L,UAAS,IAChCpI,KAAK,CAACwQ,eAAe,IACrBvN,QAAQ,GAAG,CAAC,EACZ;UACA;UACA3G,SAAS,GAAG,CAAC;UACbF,GAAG,IAAI,CAAC;QACV,CAAC,MAAM;UACL;UACAoT,MAAM,GAAGlT,SAAS,GAAG8L,UAAS;UAC9B9L,SAAS,GAAG,CAAC;UACbF,GAAG,IAAI,CAAC;QACV;MACF;IACF;IAEA,IAAI,CAAC2N,YAAY,CAAC;MAAE3N,GAAG;MAAEC,IAAI;MAAEE,UAAU;MAAED;IAAU,CAAC,CAAC;IAEvD4D,KAAK,CAACgO,eAAe,CAAC,CAAC;IACvBhO,KAAK,CAACiO,cAAc,CAAC,CAAC;EACxB;;EAEA;AACF;AACA;EACE1T,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,CAAC2E,QAAQ,CAAC;MAAE1B,WAAW,EAAE;IAAK,CAAC,CAAC;IACpC,IAAI,CAACgQ,KAAK,CAAC,CAAC;EACd;;EAEA;AACF;AACA;AACA;EACEhT,oBAAoBA,CAAC6P,KAAa,EAAQ;IACxC,IAAI,CAACnL,QAAQ,CAACsR,KAAA,IAAqB;MAAA,IAApB;QAAEhT;MAAY,CAAC,GAAAgT,KAAA;MAC5B,IAAI;QACFxY,eAAe,CAACwF,WAAW,CAAC;QAE5B,OAAO;UACLA,WAAW,EAAA2D,aAAA,CAAAA,aAAA,KAAO3D,WAAW;YAAE6M;UAAK;QACtC,CAAC;MACH,CAAC,CAAC,OAAO0B,CAAC,EAAE;QACV;QACA,IAAM;UAAEC;QAAQ,CAAC,GAAG,IAAI,CAACpS,KAAK;QAC9BoS,OAAO,CAACD,CAAC,YAAYvL,KAAK,GAAGuL,CAAC,GAAG,IAAIvL,KAAK,IAAA9G,MAAA,CAAIqS,CAAC,CAAE,CAAC,CAAC;QACnD,OAAO,IAAI;MACb;IACF,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACEtR,oBAAoBA,CAClB4P,KAAa,EAKP;IAAA,IAJN;MACExB,SAAS,GAAGrS,mBAAmB,CAACsS,IAAI;MACpC2H,SAAS,GAAG;IACmD,CAAC,GAAA/P,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAEvE,IAAM;MAAElD,WAAW;MAAEF;IAAe,CAAC,GAAG,IAAI,CAACrB,KAAK;IAClD,IAAI,CAACuB,WAAW,EAAE,MAAM,IAAIgD,KAAK,CAAC,qBAAqB,CAAC;IAExD,IAAM;MAAEmD,MAAM;MAAEtB;IAAI,CAAC,GAAG7E,WAAW;IACnC,IAAI,CAAC,IAAI,CAACiN,cAAc,CAAC9G,MAAM,EAAEtB,GAAG,EAAEgI,KAAK,CAAC,EAAE;MAC5C;MACA,IAAIxB,SAAS,KAAK,IAAI,EAAE;QACtB;QACA,IAAI,CAAC3J,QAAQ,CAAC;UAAE1B,WAAW,EAAE;QAAK,CAAC,CAAC;MACtC;MACA;IACF;IAEA,IAAIiT,SAAS,EAAE;MACb,IAAI,CAACvE,iBAAiB,CAAC5O,cAAc,EAAE+M,KAAK,CAAC;IAC/C,CAAC,MAAM;MACL,IAAI,CAAC4B,eAAe,CAACtI,MAAM,EAAEtB,GAAG,EAAEgI,KAAK,CAAC;IAC1C;IAEA,IAAIxB,SAAS,KAAK,IAAI,EAAE;MACtB,IAAI,CAACD,qBAAqB,CAACC,SAAS,CAAC;IACvC;IAEA,IAAI,CAAC3J,QAAQ,CAAC;MAAE1B,WAAW,EAAE;IAAK,CAAC,CAAC;IAEpC,IAAI,CAACgQ,KAAK,CAAC,CAAC;EACd;EAEAkD,gBAAgBA,CAAA,EAAc;IAC5B,IAAM;MAAE7P;IAAM,CAAC,GAAG,IAAI,CAACjH,KAAK;IAC5B,IAAM;MAAE4D;IAAY,CAAC,GAAG,IAAI,CAACvB,KAAK;IAClC,IAAM;MAAEJ;IAAQ,CAAC,GAAG,IAAI;IACxB,IAAI2B,WAAW,IAAI,IAAI,IAAI3B,OAAO,IAAI,IAAI,IAAI,CAAC9D,mBAAmB,CAAC8I,KAAK,CAAC,EAAE;MACzE,OAAO,IAAI;IACb;IACA,IAAM;MAAEuJ,cAAc;MAAEC,KAAK;MAAEF;IAAY,CAAC,GAAG3M,WAAW;IAC1D,IAAM;MAAEmG,MAAM;MAAEtB;IAAI,CAAC,GAAG7E,WAAW;IACnC,IAAM;MACJmT,KAAK;MACL3I,KAAK;MACL4I,WAAW;MACXC,QAAQ;MACRhB,eAAe;MACfO;IACF,CAAC,GAAGvU,OAAO;IAEX,IAAMsE,CAAC,GAAGyQ,WAAW,CAAC9O,GAAG,CAAC6B,MAAM,CAAC;IACjC,IAAMtD,CAAC,GAAGwQ,QAAQ,CAAC/O,GAAG,CAACO,GAAG,CAAC;IAC3B,IAAMyO,CAAC,GAAGjB,eAAe,CAAC/N,GAAG,CAAC6B,MAAM,CAAC;IACrC,IAAMoN,CAAC,GAAGX,aAAa,CAACtO,GAAG,CAACO,GAAG,CAAC;;IAEhC;IACA,IAAM2O,YAA2B,GAC/B7Q,CAAC,IAAI,IAAI,IAAIE,CAAC,IAAI,IAAI,IAAIyQ,CAAC,IAAI,IAAI,IAAIC,CAAC,IAAI,IAAI,GAC5C;MACEE,QAAQ,EAAE,UAAU;MACpB9U,IAAI,EAAEwU,KAAK,GAAGxQ,CAAC;MACfjE,GAAG,EAAE8L,KAAK,GAAG3H,CAAC;MACdU,KAAK,EAAE+P,CAAC;MACR7P,MAAM,EAAE8P;IACV,CAAC,GACD;MAAEG,OAAO,EAAE;IAAE,CAAC;IAEpB,IAAM5G,WAAW,GAAG,IAAI,CAAC9I,cAAc,CAACmC,MAAM,CAAC;IAC/C,IAAMpB,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACM,GAAG,CAAC;IACtC,IAAM8O,UAAqC,GACzC7G,WAAW,IAAI,IAAI,IAAI/H,QAAQ,IAAI,IAAI,GACnC;MACE6O,SAAS,EAAEvQ,KAAK,CAACwQ,gBAAgB,CAAC/G,WAAW,EAAE/H,QAAQ;IACzD,CAAC,GACD3B,SAAS;IACf,IAAM0Q,OAAO,GAAGzQ,KAAK,CAAC4J,cAAc,CAACH,WAAW,EAAE/H,QAAQ,EAAE8H,KAAK,CAAC;IAElE,oBACElS,IAAA;MAAK0M,KAAK,EAAEmM,YAAa;MAAAO,QAAA,eACvBpZ,IAAA,CAACR,cAAc;QAEbyS,cAAc,EAAEA,cAAe;QAC/BoH,SAAS,EAAExb,UAAU,CAAC;UAAEyb,KAAK,EAAE,CAACH;QAAQ,CAAC,CAAE;QAC3CI,QAAQ,EAAE,IAAI,CAACnX,oBAAqB;QACpCoX,QAAQ,EAAE,IAAI,CAACnX,oBAAqB;QACpCoX,MAAM,EAAE,IAAI,CAACnX,oBAAqB;QAClC0P,WAAW,EAAEA,WAAY;QACzBtF,KAAK,EAAEsM,UAAW;QAClB9G,KAAK,EAAEA;MAAM,MAAA3Q,MAAA,CARLiK,MAAM,OAAAjK,MAAA,CAAI2I,GAAG,CAStB;IAAC,CACC,CAAC;EAEV;;EAEA;AACF;AACA;AACA;EACEgC,iBAAiBA,CAAA,EAAoB;IACnC,IAAI,CAAC,IAAI,CAAC5I,MAAM,EAAE,MAAM,IAAI+E,KAAK,CAAC,mBAAmB,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC9E,aAAa,EAAE,MAAM,IAAI8E,KAAK,CAAC,iBAAiB,CAAC;IAE3D,IAAM;MACJvD,YAAY;MACZD,SAAS;MACTV,cAAc;MACdG,uBAAuB;MACvBF,WAAW;MACXC,iBAAiB;MACjBE,oBAAoB;MACpBc,WAAW;MACXb,6BAA6B;MAC7BC,2BAA2B;MAC3BC,UAAU;MACVC,MAAM;MACNC,MAAM;MACNO;IACF,CAAC,GAAG,IAAI,CAACrB,KAAK;IACd,IAAM;MAAE4E,KAAK;MAAEC;IAAc,CAAC,GAAG,IAAI,CAAClH,KAAK;IAC3C,IAAM;MAAEiC;IAAQ,CAAC,GAAG,IAAI;IACxB,IAAMnD,OAAO,GAAG,IAAI,CAACgD,aAAa;IAClC,IAAMoE,KAAK,GAAG,IAAI,CAACD,QAAQ,CAAC,CAAC;IAC7B,IAAMkB,KAAK,GAAG,IAAI,CAACtF,MAAM,CAACuF,WAAW;IACrC,IAAMC,MAAM,GAAG,IAAI,CAACxF,MAAM,CAACyF,YAAY;IAEvC/K,aAAa,CAAC0F,OAAO,CAAC;IAEtB,IAAI,CAACC,WAAW,GAAAqF,aAAA;MACdJ,KAAK;MACLE,MAAM;MACNvI,OAAO;MACPoH,KAAK;MACLe,KAAK;MACLhF,OAAO;MACPiB,MAAM;MACNC,MAAM;MACNO,cAAc;MACdhB,cAAc;MACdG,uBAAuB;MACvBF,WAAW;MACXC,iBAAiB;MACjBE,oBAAoB;MACpBc,WAAW;MACXb,6BAA6B;MAC7BC,2BAA2B;MAC3BC,UAAU;MACVI,YAAY;MACZD;IAAS,GACN8D,aAAa,CACjB;IAED,OAAO,IAAI,CAAChF,WAAW;EACzB;EAEA+V,MAAMA,CAAA,EAAc;IAClB,IAAM;MAAEpY;IAAO,CAAC,GAAG,IAAI,CAACwC,KAAK;IAE7B,oBACE1D,KAAA,CAAAF,SAAA;MAAAkZ,QAAA,gBACEpZ,IAAA;QACEqZ,SAAS,EAAExb,UAAU,CAAC,aAAa,EAAEwC,IAAI,CAACgB,kBAAkB,CAACC,MAAM,CAAC,CAAE;QACtEqY,GAAG,EAAErW,MAAM,IAAI;UACb,IAAI,CAACA,MAAM,GAAGA,MAAM;QACtB,CAAE;QACFsS,OAAO,EAAE,IAAI,CAAC3T,WAAY;QAC1B8T,aAAa,EAAE,IAAI,CAAC5T,iBAAkB;QACtCyX,aAAa,EAAE,IAAI,CAACrX,iBAAkB;QACtCsX,SAAS,EAAE,IAAI,CAACrX,aAAc;QAC9BsX,WAAW,EAAE,IAAI,CAACrX,eAAgB;QAClCsX,WAAW,EAAE,IAAI,CAACpX,eAAgB;QAClCqX,YAAY,EAAE,IAAI,CAACpX,gBAAiB;QACpCqX,QAAQ,EAAE,CAAE;QAAAb,QAAA,EACb;MAED,CAAQ,CAAC,EACR,IAAI,CAACb,gBAAgB,CAAC,CAAC;IAAA,CACxB,CAAC;EAEP;AACF;AAAC7W,eAAA,CA/8DKrB,IAAI,iBACaP,YAAY;AAAA4B,eAAA,CAD7BrB,IAAI,kBAGc;EACpByL,aAAa,EAAE;IAAEoO,KAAK,EAAE;EAAM,CAAqC;EACnEjU,cAAc,EAAE,KAAK;EACrBC,aAAa,EAAE,KAAK;EACpBlD,eAAe,EAAE,KAAK;EACtBC,cAAc,EAAE,KAAK;EACrBtB,WAAW,EAAE1D,WAAoC;EACjD+D,aAAa,EAAE/D,WAA0C;EACzDkF,YAAY,EAAElF,WAAuC;EACrDmF,SAAS,EAAEnF,WAAuC;EAClD4V,OAAO,EAAEA,CAAA,KAAYpL,SAAS;EAC9B0E,kBAAkB,EAAEA,CAAA,KAAY1E,SAAS;EACzCtC,qBAAqB,EAAGgU,cAAwC,IAC9D1R,SAAS;EACXrC,oBAAoB,EAAEA,CAAA,KAAYqC,SAAS;EAC3CpC,kBAAkB,EAAEA,CAAA,KAAYoC,SAAS;EACzCnC,iBAAiB,EAAEA,CAAA,KAAYmC,SAAS;EACxC2D,aAAa,EAAG1I,OAAoB,IAAW+E,SAAS;EACxD2R,cAAc,EAAGC,KAAY,IAAW;IACtC,IAAI7b,WAAW,CAAC6b,KAAK,CAAC,EAAE;MACtBvZ,MAAM,CAACwZ,IAAI,CAACD,KAAK,CAACE,IAAI,EAAE,QAAQ,EAAE,qBAAqB,CAAC;IAC1D;EACF,CAAC;EACD5R,aAAa,EAAE,CAAC,CAA4B;EAC5ChB,KAAK,EAAE;IACLiG,gBAAgB,EAAE,KAAK;IACvBD,aAAa,EAAE;EACjB;AACF,CAAC;AAAAjM,eAAA,CA/BGrB,IAAI,mBAmCe,GAAG,GAAG,CAAC;AAAAqB,eAAA,CAnC1BrB,IAAI,iBAqCa,IAAI;AAAAqB,eAAA,CArCrBrB,IAAI,cAuCUvC,OAAO,CACvB,CACE0c,YAAoC,EACpCC,SAAiC,KAAAzR,aAAA,CAAAA,aAAA,CAAAA,aAAA,KAE9B7K,SAAS,GACTqc,YAAY,GACZC,SAAS,CAEhB,CAAC;AAi6DH,eAAepa,IAAI"}
@@ -5,7 +5,7 @@ declare class SelectionKeyHandler extends KeyHandler {
5
5
  onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult;
6
6
  handleArrowMove(deltaColumn: number, deltaRow: number, event: GridKeyboardEvent, grid: Grid): boolean;
7
7
  handlePageUp(e: GridKeyboardEvent, grid: Grid): boolean;
8
- handlePageDown(event: GridKeyboardEvent, grid: Grid): boolean;
8
+ handlePageDown(e: GridKeyboardEvent, grid: Grid): boolean;
9
9
  }
10
10
  export default SelectionKeyHandler;
11
11
  //# sourceMappingURL=SelectionKeyHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,IAAuB,MAAM,SAAS,CAAC;AAG9C,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE9D,cAAM,mBAAoB,SAAQ,UAAU;IAC1C,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAuHhE,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO;IA8EV,YAAY,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAwCvD,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CA8C9D;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"SelectionKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,OAAO,UAAU,EAAE,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE9D,cAAM,mBAAoB,SAAQ,UAAU;IAC1C,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAuHhE,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO;IAuEV,YAAY,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAwCvD,cAAc,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CAyC1D;AAED,eAAe,mBAAmB,CAAC"}
@@ -124,10 +124,6 @@ class SelectionKeyHandler extends KeyHandler {
124
124
  } = grid.state;
125
125
  var column = isShiftKey ? selectionEndColumn : cursorColumn;
126
126
  var row = isShiftKey ? selectionEndRow : cursorRow;
127
- var stickyOptions = {
128
- shouldStickBottom: deltaRow > 0,
129
- shouldStickRight: deltaColumn > 0
130
- };
131
127
  if (isModifierKey) {
132
128
  var {
133
129
  model
@@ -153,7 +149,7 @@ class SelectionKeyHandler extends KeyHandler {
153
149
  moveToRow = rowCount - 1;
154
150
  }
155
151
  if (moveToColumn != null && moveToRow != null) {
156
- grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange, stickyOptions);
152
+ grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);
157
153
  }
158
154
  } else {
159
155
  if (!grid.metrics) throw new Error('grid.metrics are not set');
@@ -175,7 +171,7 @@ class SelectionKeyHandler extends KeyHandler {
175
171
  grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);
176
172
  grid.setViewState({
177
173
  left
178
- }, false, stickyOptions);
174
+ });
179
175
  } else if (autoSelectColumn && deltaRow !== 0) {
180
176
  var {
181
177
  lastTop
@@ -187,9 +183,9 @@ class SelectionKeyHandler extends KeyHandler {
187
183
  grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);
188
184
  grid.setViewState({
189
185
  top
190
- }, false, stickyOptions);
186
+ });
191
187
  } else {
192
- grid.moveCursor(deltaColumn, deltaRow, isShiftKey, stickyOptions);
188
+ grid.moveCursor(deltaColumn, deltaRow, isShiftKey);
193
189
  }
194
190
  }
195
191
  return true;
@@ -231,8 +227,8 @@ class SelectionKeyHandler extends KeyHandler {
231
227
  });
232
228
  return true;
233
229
  }
234
- handlePageDown(event, grid) {
235
- var isShiftKey = event.shiftKey;
230
+ handlePageDown(e, grid) {
231
+ var isShiftKey = e.shiftKey;
236
232
  if (isShiftKey) {
237
233
  grid.trimSelectedRanges();
238
234
  } else {
@@ -266,13 +262,9 @@ class SelectionKeyHandler extends KeyHandler {
266
262
  selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);
267
263
  var viewportPosition = Math.min(lastTop, selectRangeEndPosition - (row - topVisible));
268
264
  grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);
269
- var stickyOptions = {
270
- shouldStickBottom: true,
271
- shouldStickRight: false
272
- };
273
265
  grid.setViewState({
274
266
  top: viewportPosition
275
- }, false, stickyOptions);
267
+ });
276
268
  return true;
277
269
  }
278
270
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionKeyHandler.js","names":["clamp","GridRange","GridUtils","KeyHandler","SelectionKeyHandler","onDown","event","grid","key","isModifierKeyDown","selectAll","handleArrowMove","handlePageUp","handlePageDown","shiftKey","clearSelectedRanges","moveCursorToPosition","state","cursorRow","model","props","columnCount","cursorColumn","rowCount","preventDefault","stopPropagation","selectedRanges","length","moveCursorInDirection","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","isShiftKey","isModifierKey","trimSelectedRanges","selectionEndColumn","selectionEndRow","column","row","stickyOptions","shouldStickBottom","shouldStickRight","maximizePreviousRange","moveToColumn","moveToRow","metrics","Error","theme","autoSelectRow","autoSelectColumn","lastLeft","left","setViewState","lastTop","top","moveCursor","e","metricState","getMetricState","metricCalculator","bottomVisible","topVisible","hasHorizontalBar","getMetrics","selectRangeEndPosition","Math","max","viewportPosition","lastRowIndex","min"],"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport Grid, { StickyOptions } from '../Grid';\nimport GridRange from '../GridRange';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { GridKeyboardEvent } from '../KeyHandler';\n\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(event)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, event, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, event, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, event, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, event, grid);\n /**\n * h/j/k/l keys are grouped together for quick navigation by power users.\n * Bender added these as shortcuts in the original commit of keyboard shortcuts.\n * We have no idea why, or what might have inspired them (not excel, not swing, vim?).\n * Maybe lack of page up keys on a laptop at the time?\n */\n case 'k':\n case 'K':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (GridUtils.isModifierKeyDown(event)) return false;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(0, grid.state.cursorRow, event.shiftKey);\n return true;\n case 'l':\n case 'L': {\n if (GridUtils.isModifierKeyDown(event)) return false;\n const { model } = grid.props;\n const { columnCount } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n columnCount - 1,\n grid.state.cursorRow,\n event.shiftKey\n );\n return true;\n }\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0,\n GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow,\n event.shiftKey,\n true,\n true\n );\n return true;\n case 'End': {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(event)\n ? grid.state.cursorColumn\n : columnCount - 1,\n GridUtils.isModifierKeyDown(event)\n ? rowCount - 1\n : grid.state.cursorRow,\n event.shiftKey,\n true,\n true\n );\n return true;\n }\n case 'Escape':\n grid.clearSelectedRanges();\n // Event consumed, but propagation not stopped\n // so the shortcut could be handled by the global handler\n return { preventDefault: false, stopPropagation: false };\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.LEFT\n : GridRange.SELECTION_DIRECTION.RIGHT\n );\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n\n handleArrowMove(\n deltaColumn: number,\n deltaRow: number,\n event: GridKeyboardEvent,\n grid: Grid\n ): boolean {\n const isShiftKey = event.shiftKey;\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { cursorRow, cursorColumn, selectionEndColumn, selectionEndRow } =\n grid.state;\n const column = isShiftKey ? selectionEndColumn : cursorColumn;\n const row = isShiftKey ? selectionEndRow : cursorRow;\n const stickyOptions: StickyOptions = {\n shouldStickBottom: deltaRow > 0,\n shouldStickRight: deltaColumn > 0,\n };\n\n if (isModifierKey) {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n const maximizePreviousRange = isModifierKey && isShiftKey;\n let moveToColumn = null;\n let moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(\n moveToColumn,\n moveToRow,\n isShiftKey,\n true,\n maximizePreviousRange,\n stickyOptions\n );\n }\n } else {\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n\n const { theme } = grid.props;\n const { autoSelectRow = false, autoSelectColumn = false } = theme;\n\n if (autoSelectRow && deltaColumn !== 0) {\n const { lastLeft } = grid.metrics;\n let { left } = grid.state;\n\n left = clamp(left + deltaColumn, 0, lastLeft);\n\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n\n grid.setViewState({ left }, false, stickyOptions);\n } else if (autoSelectColumn && deltaRow !== 0) {\n const { lastTop } = grid.metrics;\n let { top } = grid.state;\n\n top = clamp(top + deltaRow, 0, lastTop);\n\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n\n grid.setViewState({ top }, false, stickyOptions);\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey, stickyOptions);\n }\n }\n return true;\n }\n\n handlePageUp(e: GridKeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { cursorColumn, selectionEndRow } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row == null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const { bottomVisible, topVisible, hasHorizontalBar } =\n metricCalculator.getMetrics(metricState);\n\n let selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n const viewportPosition = Math.max(\n selectRangeEndPosition - (row - topVisible),\n 0\n );\n\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n return true;\n }\n\n handlePageDown(event: GridKeyboardEvent, grid: Grid): boolean {\n const isShiftKey = event.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { selectionEndRow, cursorColumn } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row === null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const { bottomVisible, topVisible, hasHorizontalBar, rowCount, lastTop } =\n metricCalculator.getMetrics(metricState);\n const lastRowIndex = rowCount - 1;\n\n let selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n\n const viewportPosition = Math.min(\n lastTop,\n selectRangeEndPosition - (row - topVisible)\n );\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n\n const stickyOptions: StickyOptions = {\n shouldStickBottom: true,\n shouldStickRight: false,\n };\n grid.setViewState({ top: viewportPosition }, false, stickyOptions);\n\n return true;\n }\n}\n\nexport default SelectionKeyHandler;\n"],"mappings":"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"}
1
+ {"version":3,"file":"SelectionKeyHandler.js","names":["clamp","GridRange","GridUtils","KeyHandler","SelectionKeyHandler","onDown","event","grid","key","isModifierKeyDown","selectAll","handleArrowMove","handlePageUp","handlePageDown","shiftKey","clearSelectedRanges","moveCursorToPosition","state","cursorRow","model","props","columnCount","cursorColumn","rowCount","preventDefault","stopPropagation","selectedRanges","length","moveCursorInDirection","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","isShiftKey","isModifierKey","trimSelectedRanges","selectionEndColumn","selectionEndRow","column","row","maximizePreviousRange","moveToColumn","moveToRow","metrics","Error","theme","autoSelectRow","autoSelectColumn","lastLeft","left","setViewState","lastTop","top","moveCursor","e","metricState","getMetricState","metricCalculator","bottomVisible","topVisible","hasHorizontalBar","getMetrics","selectRangeEndPosition","Math","max","viewportPosition","lastRowIndex","min"],"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { GridKeyboardEvent } from '../KeyHandler';\n\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n switch (event.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(event)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, event, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, event, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, event, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, event, grid);\n /**\n * h/j/k/l keys are grouped together for quick navigation by power users.\n * Bender added these as shortcuts in the original commit of keyboard shortcuts.\n * We have no idea why, or what might have inspired them (not excel, not swing, vim?).\n * Maybe lack of page up keys on a laptop at the time?\n */\n case 'k':\n case 'K':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (GridUtils.isModifierKeyDown(event)) return false;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(0, grid.state.cursorRow, event.shiftKey);\n return true;\n case 'l':\n case 'L': {\n if (GridUtils.isModifierKeyDown(event)) return false;\n const { model } = grid.props;\n const { columnCount } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n columnCount - 1,\n grid.state.cursorRow,\n event.shiftKey\n );\n return true;\n }\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0,\n GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow,\n event.shiftKey,\n true,\n true\n );\n return true;\n case 'End': {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(event)\n ? grid.state.cursorColumn\n : columnCount - 1,\n GridUtils.isModifierKeyDown(event)\n ? rowCount - 1\n : grid.state.cursorRow,\n event.shiftKey,\n true,\n true\n );\n return true;\n }\n case 'Escape':\n grid.clearSelectedRanges();\n // Event consumed, but propagation not stopped\n // so the shortcut could be handled by the global handler\n return { preventDefault: false, stopPropagation: false };\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n event.shiftKey\n ? GridRange.SELECTION_DIRECTION.LEFT\n : GridRange.SELECTION_DIRECTION.RIGHT\n );\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n\n handleArrowMove(\n deltaColumn: number,\n deltaRow: number,\n event: GridKeyboardEvent,\n grid: Grid\n ): boolean {\n const isShiftKey = event.shiftKey;\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { cursorRow, cursorColumn, selectionEndColumn, selectionEndRow } =\n grid.state;\n const column = isShiftKey ? selectionEndColumn : cursorColumn;\n const row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n const maximizePreviousRange = isModifierKey && isShiftKey;\n let moveToColumn = null;\n let moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(\n moveToColumn,\n moveToRow,\n isShiftKey,\n true,\n maximizePreviousRange\n );\n }\n } else {\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n\n const { theme } = grid.props;\n const { autoSelectRow = false, autoSelectColumn = false } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n const { lastLeft } = grid.metrics;\n let { left } = grid.state;\n\n left = clamp(left + deltaColumn, 0, lastLeft);\n\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n\n grid.setViewState({ left });\n } else if (autoSelectColumn && deltaRow !== 0) {\n const { lastTop } = grid.metrics;\n let { top } = grid.state;\n\n top = clamp(top + deltaRow, 0, lastTop);\n\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n\n grid.setViewState({ top });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n\n handlePageUp(e: GridKeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { cursorColumn, selectionEndRow } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row == null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const { bottomVisible, topVisible, hasHorizontalBar } =\n metricCalculator.getMetrics(metricState);\n\n let selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n const viewportPosition = Math.max(\n selectRangeEndPosition - (row - topVisible),\n 0\n );\n\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n return true;\n }\n\n handlePageDown(e: GridKeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { selectionEndRow, cursorColumn } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row === null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const { bottomVisible, topVisible, hasHorizontalBar, rowCount, lastTop } =\n metricCalculator.getMetrics(metricState);\n const lastRowIndex = rowCount - 1;\n\n let selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n\n const viewportPosition = Math.min(\n lastTop,\n selectRangeEndPosition - (row - topVisible)\n );\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n\n return true;\n }\n}\n\nexport default SelectionKeyHandler;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "0.52.1-beta.2+787c5420",
3
+ "version": "0.52.1-beta.8+3d4499b2",
4
4
  "description": "Deephaven React grid component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -31,7 +31,7 @@
31
31
  "*.css"
32
32
  ],
33
33
  "dependencies": {
34
- "@deephaven/utils": "^0.52.1-beta.2+787c5420",
34
+ "@deephaven/utils": "^0.52.1-beta.8+3d4499b2",
35
35
  "classnames": "^2.3.1",
36
36
  "color-convert": "^2.0.1",
37
37
  "event-target-shim": "^6.0.2",
@@ -44,5 +44,5 @@
44
44
  "publishConfig": {
45
45
  "access": "public"
46
46
  },
47
- "gitHead": "787c5420ecb90661ae5032e174f292707e908820"
47
+ "gitHead": "3d4499b24375090267f6f631e6a72c259dc97651"
48
48
  }