@deephaven/grid 1.27.5-alpha-nodehttp2-config3.276eddc.0 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/Grid.d.ts +102 -43
  2. package/dist/Grid.d.ts.map +1 -1
  3. package/dist/Grid.js +442 -390
  4. package/dist/Grid.js.map +1 -1
  5. package/dist/GridA11yFallback.d.ts +26 -0
  6. package/dist/GridA11yFallback.d.ts.map +1 -0
  7. package/dist/GridA11yFallback.js +115 -0
  8. package/dist/GridA11yFallback.js.map +1 -0
  9. package/dist/GridA11yUtils.d.ts +89 -0
  10. package/dist/GridA11yUtils.d.ts.map +1 -0
  11. package/dist/GridA11yUtils.js +321 -0
  12. package/dist/GridA11yUtils.js.map +1 -0
  13. package/dist/GridRenderer.d.ts +9 -0
  14. package/dist/GridRenderer.d.ts.map +1 -1
  15. package/dist/GridRenderer.js +187 -39
  16. package/dist/GridRenderer.js.map +1 -1
  17. package/dist/GridRendererTypes.d.ts +3 -4
  18. package/dist/GridRendererTypes.d.ts.map +1 -1
  19. package/dist/GridRendererTypes.js.map +1 -1
  20. package/dist/GridSelectionUtils.d.ts +98 -0
  21. package/dist/GridSelectionUtils.d.ts.map +1 -0
  22. package/dist/GridSelectionUtils.js +180 -0
  23. package/dist/GridSelectionUtils.js.map +1 -0
  24. package/dist/RangedSelection.d.ts +120 -0
  25. package/dist/RangedSelection.d.ts.map +1 -0
  26. package/dist/RangedSelection.js +375 -0
  27. package/dist/RangedSelection.js.map +1 -0
  28. package/dist/Selection.d.ts +221 -0
  29. package/dist/Selection.d.ts.map +1 -0
  30. package/dist/Selection.js +71 -0
  31. package/dist/Selection.js.map +1 -0
  32. package/dist/index.d.ts +6 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +6 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/key-handlers/EditKeyHandler.js +3 -3
  37. package/dist/key-handlers/EditKeyHandler.js.map +1 -1
  38. package/dist/key-handlers/SelectionKeyHandler.d.ts +1 -0
  39. package/dist/key-handlers/SelectionKeyHandler.d.ts.map +1 -1
  40. package/dist/key-handlers/SelectionKeyHandler.js +144 -138
  41. package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
  42. package/dist/key-handlers/TreeKeyHandler.d.ts.map +1 -1
  43. package/dist/key-handlers/TreeKeyHandler.js +6 -3
  44. package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
  45. package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts +1 -0
  46. package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts.map +1 -1
  47. package/dist/mouse-handlers/GridRowTreeMouseHandler.js +7 -0
  48. package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
  49. package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts +0 -9
  50. package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts.map +1 -1
  51. package/dist/mouse-handlers/GridSelectionMouseHandler.js +41 -39
  52. package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
  53. package/dist/mouse-handlers/GridTokenMouseHandler.js +4 -1
  54. package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -1
  55. package/package.json +3 -3
@@ -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","selectedRanges","length","preventDefault","stopPropagation","moveCursorInDirection","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","isShiftKey","isModifierKey","trimSelectedRanges","_grid$state","selectionEndColumn","selectionEndRow","column","row","maximizePreviousRange","moveToColumn","moveToRow","metrics","Error","theme","_theme$autoSelectRow","autoSelectRow","_theme$autoSelectColu","autoSelectColumn","lastLeft","left","setViewState","lastTop","top","moveCursor","e","_grid$state2","metricState","getMetricState","metricCalculator","_metricCalculator$get","getMetrics","bottomVisible","topVisible","hasHorizontalBar","selectRangeEndPosition","Math","max","viewportPosition","_grid$state3","_metricCalculator$get2","lastRowIndex","min"],"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport GridUtils from '../GridUtils';\nimport KeyHandler, { type 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 if (grid.state.selectedRanges.length === 0) return false;\n grid.clearSelectedRanges();\n // consume the event, and stop propagation only if there were selected ranges to clear\n return { preventDefault: false, stopPropagation: true };\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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","ignoreList":[]}
1
+ {"version":3,"file":"SelectionKeyHandler.js","names":["clamp","GridRange","GridUtils","gestureModeFromModifiers","KeyHandler","SelectionKeyHandler","onDown","event","grid","isShiftKey","shiftKey","isModifierKey","isModifierKeyDown","key","selectAll","handleArrowMove","handlePageUp","handlePageDown","props","theme","autoSelectRow","handleRowEdge","model","columnCount","rowCount","_grid$state$selection","state","selection","cursorColumn","cursorRow","toEnd","targetColumn","targetRow","handleKeySelectAt","column","row","isEmpty","clearSelectedRanges","preventDefault","stopPropagation","handleKeyAdvanceCursor","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","_grid$state$selection2","selectionEndColumn","selectionEndRow","moveToColumn","moveToRow","metrics","Error","mode","_theme$autoSelectRow","_theme$autoSelectColu","autoSelectColumn","lastLeft","left","handleKeyMoveCursor","setViewState","lastTop","top","keepCursorInView","_grid$state","e","handleKeyPageUp","handleKeyPageDown"],"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport type { GridRangeIndex } from '../GridRange';\nimport GridUtils from '../GridUtils';\nimport { gestureModeFromModifiers } from '../GridSelectionUtils';\nimport KeyHandler, { type GridKeyboardEvent } from '../KeyHandler';\n\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n const isShiftKey = event.shiftKey;\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n switch (event.key) {\n case 'a':\n if (isModifierKey) {\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 (isModifierKey) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (isModifierKey) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (isModifierKey) return false;\n // In row-selection mode, column-edge movement is meaningless.\n if (grid.props.theme.autoSelectRow === true) return true;\n return this.handleRowEdge(0, event, grid);\n case 'l':\n case 'L':\n if (isModifierKey) return false;\n if (grid.props.theme.autoSelectRow === true) return true;\n return this.handleRowEdge(\n grid.props.model.columnCount - 1,\n event,\n grid\n );\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n case 'End': {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n const { cursorColumn, cursorRow } = grid.state.selection;\n const toEnd = event.key === 'End';\n // In row-selection mode, plain / Shift Home/End would only move the\n // cursor between columns and (via commit) toggle the row selection.\n // Ctrl+Home/End still jumps to top/bottom row, which is meaningful.\n if (grid.props.theme.autoSelectRow === true && !isModifierKey) {\n return true;\n }\n // Ctrl/Meta pins the column and jumps to the row edge; without it\n // Home/End jumps to the column edge on the current row.\n let targetColumn: GridRangeIndex;\n let targetRow: GridRangeIndex;\n if (isModifierKey) {\n targetColumn = cursorColumn;\n targetRow = toEnd ? rowCount - 1 : 0;\n } else {\n targetColumn = toEnd ? columnCount - 1 : 0;\n targetRow = cursorRow;\n }\n if (targetColumn == null || targetRow == null) return false;\n // Shift extends via maximize (grow the last range's furthest edge)\n // to preserve pre-refactor Shift+Home followed by Shift+End behavior.\n grid.handleKeySelectAt(\n { column: targetColumn, row: targetRow },\n isShiftKey ? 'maximize' : 'replace'\n );\n return true;\n }\n case 'Escape':\n if (grid.state.selection.isEmpty()) return false;\n grid.clearSelectedRanges();\n // consume the event, and stop propagation only if there were selected ranges to clear\n return { preventDefault: false, stopPropagation: true };\n case 'Enter':\n if (!grid.state.selection.isEmpty()) {\n grid.handleKeyAdvanceCursor(\n isShiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n return true;\n }\n break;\n case 'Tab':\n if (!grid.state.selection.isEmpty()) {\n grid.handleKeyAdvanceCursor(\n isShiftKey\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\n const { cursorRow, cursorColumn, selectionEndColumn, selectionEndRow } =\n grid.state.selection;\n const column = isShiftKey ? selectionEndColumn : cursorColumn;\n const row = isShiftKey ? selectionEndRow : cursorRow;\n\n // Ctrl+Arrow is an exception to the mode returned by gestureModeFromModifiers\n // It jumps to the edge of the grid in the arrow direction, and replaces the selection.\n if (isModifierKey) {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n let moveToColumn: number | null = null;\n let moveToRow: number | null = 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.handleKeySelectAt(\n { column: moveToColumn, row: moveToRow },\n isShiftKey ? 'maximize' : 'replace'\n );\n }\n return true;\n }\n\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n\n // Plain / Shift arrows: mode is derived from Shift alone here since `isModifierKey` was short-circuited above.\n const mode = gestureModeFromModifiers({ isShiftKey, isModifierKey: false });\n\n const { theme } = grid.props;\n const { autoSelectRow = false, autoSelectColumn = false } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n const { lastLeft } = grid.metrics;\n const left = clamp(grid.state.left + deltaColumn, 0, lastLeft);\n if (cursorRow != null) {\n grid.handleKeyMoveCursor(left, cursorRow);\n }\n grid.setViewState({ left });\n return true;\n }\n if (autoSelectColumn && deltaRow !== 0) {\n const { lastTop } = grid.metrics;\n const top = clamp(grid.state.top + deltaRow, 0, lastTop);\n // Preserves the (arguably surprising) original behavior of using `top`\n // as the column argument; kept identical to pre-refactor code paths.\n grid.handleKeySelectAt({ column: top, row: cursorColumn }, mode, {\n keepCursorInView: false,\n });\n grid.setViewState({ top });\n return true;\n }\n\n if (row === null || column === null) {\n const { left, top } = grid.state;\n grid.handleKeySelectAt({ column: left, row: top }, mode);\n return true;\n }\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n const targetColumn = clamp(column + deltaColumn, 0, columnCount - 1);\n const targetRow = clamp(row + deltaRow, 0, rowCount - 1);\n grid.handleKeySelectAt({ column: targetColumn, row: targetRow }, mode);\n return true;\n }\n\n handleRowEdge(\n targetColumn: number,\n event: GridKeyboardEvent,\n grid: Grid\n ): boolean {\n const isShiftKey = event.shiftKey;\n const { cursorRow } = grid.state.selection;\n if (cursorRow == null) return false;\n grid.handleKeySelectAt(\n { column: targetColumn, row: cursorRow },\n gestureModeFromModifiers({ isShiftKey, isModifierKey: false })\n );\n return true;\n }\n\n handlePageUp(e: GridKeyboardEvent, grid: Grid): boolean {\n const mode = gestureModeFromModifiers({\n isShiftKey: e.shiftKey,\n isModifierKey: false,\n });\n grid.handleKeyPageUp(mode);\n return true;\n }\n\n handlePageDown(e: GridKeyboardEvent, grid: Grid): boolean {\n const mode = gestureModeFromModifiers({\n isShiftKey: e.shiftKey,\n isModifierKey: false,\n });\n grid.handleKeyPageDown(mode);\n return true;\n }\n}\n\nexport default SelectionKeyHandler;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/TreeKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,UAAU,MAAM,eAAe,CAAC;AAEvC,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAYjD,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CA2B3D;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"TreeKeyHandler.d.ts","sourceRoot":"","sources":["../../src/key-handlers/TreeKeyHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAGhC,OAAO,UAAU,MAAM,eAAe,CAAC;AAEvC,cAAM,cAAe,SAAQ,UAAU;IACrC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAYjD,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;CA6B3D;AAED,eAAe,cAAc,CAAC"}
@@ -1,5 +1,6 @@
1
1
  /* eslint class-methods-use-this: "off" */
2
2
  import { isExpandableGridModel } from "../ExpandableGridModel.js";
3
+ import { isRangedSelection } from "../RangedSelection.js";
3
4
  import KeyHandler from "../KeyHandler.js";
4
5
  class TreeKeyHandler extends KeyHandler {
5
6
  onDown(event, grid) {
@@ -15,9 +16,11 @@ class TreeKeyHandler extends KeyHandler {
15
16
  return false;
16
17
  }
17
18
  handleExpandKey(event, grid) {
18
- var selectedRanges = grid.state.selectedRanges;
19
- if (selectedRanges.length === 1) {
20
- var range = selectedRanges[0];
19
+ // Keyed tables have no expandable rows; ignore the shortcut rather than throwing.
20
+ if (!isRangedSelection(grid.state.selection)) return false;
21
+ var ranges = grid.state.selection.toRanges();
22
+ if (ranges.length === 1) {
23
+ var range = ranges[0];
21
24
  if (range.startRow === range.endRow && range.startColumn === range.endColumn) {
22
25
  if (!grid.metrics) throw new Error('grid.metrics not set');
23
26
  var model = grid.props.model;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeKeyHandler.js","names":["isExpandableGridModel","KeyHandler","TreeKeyHandler","onDown","event","grid","key","handleExpandKey","selectedRanges","state","length","range","startRow","endRow","startColumn","endColumn","metrics","Error","model","props","row","column","modelRow","getModelRow","isRowExpandable","toggleRowExpanded"],"sources":["../../src/key-handlers/TreeKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { isExpandableGridModel } from '../ExpandableGridModel';\nimport type Grid from '../Grid';\nimport type GridRange from '../GridRange';\nimport KeyHandler from '../KeyHandler';\n\nclass TreeKeyHandler extends KeyHandler {\n onDown(event: KeyboardEvent, grid: Grid): boolean {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n return this.handleExpandKey(event, grid);\n }\n default:\n break;\n }\n return false;\n }\n\n handleExpandKey(event: KeyboardEvent, grid: Grid): boolean {\n const { selectedRanges } = grid.state;\n if (selectedRanges.length === 1) {\n const range = selectedRanges[0] as GridRange;\n if (\n range.startRow === range.endRow &&\n range.startColumn === range.endColumn\n ) {\n if (!grid.metrics) throw new Error('grid.metrics not set');\n\n const { model } = grid.props;\n const { startRow: row, startColumn: column } = range;\n if (row != null) {\n const modelRow = grid.getModelRow(row);\n if (\n (column === 0 || column == null) &&\n isExpandableGridModel(model) &&\n model.isRowExpandable(modelRow)\n ) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n }\n return false;\n }\n}\n\nexport default TreeKeyHandler;\n"],"mappings":"AAAA;AAAA,SACSA,qBAAqB;AAAA,OAGvBC,UAAU;AAEjB,MAAMC,cAAc,SAASD,UAAU,CAAC;EACtCE,MAAMA,CAACC,KAAoB,EAAEC,IAAU,EAAW;IAChD,QAAQD,KAAK,CAACE,GAAG;MACf,KAAK,OAAO;MACZ,KAAK,GAAG;QAAE;UACR,OAAO,IAAI,CAACC,eAAe,CAACH,KAAK,EAAEC,IAAI,CAAC;QAC1C;MACA;QACE;IACJ;IACA,OAAO,KAAK;EACd;EAEAE,eAAeA,CAACH,KAAoB,EAAEC,IAAU,EAAW;IACzD,IAAQG,cAAc,GAAKH,IAAI,CAACI,KAAK,CAA7BD,cAAc;IACtB,IAAIA,cAAc,CAACE,MAAM,KAAK,CAAC,EAAE;MAC/B,IAAMC,KAAK,GAAGH,cAAc,CAAC,CAAC,CAAc;MAC5C,IACEG,KAAK,CAACC,QAAQ,KAAKD,KAAK,CAACE,MAAM,IAC/BF,KAAK,CAACG,WAAW,KAAKH,KAAK,CAACI,SAAS,EACrC;QACA,IAAI,CAACV,IAAI,CAACW,OAAO,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;QAE1D,IAAQC,KAAK,GAAKb,IAAI,CAACc,KAAK,CAApBD,KAAK;QACb,IAAkBE,GAAG,GAA0BT,KAAK,CAA5CC,QAAQ;UAAoBS,MAAM,GAAKV,KAAK,CAA7BG,WAAW;QAClC,IAAIM,GAAG,IAAI,IAAI,EAAE;UACf,IAAME,QAAQ,GAAGjB,IAAI,CAACkB,WAAW,CAACH,GAAG,CAAC;UACtC,IACE,CAACC,MAAM,KAAK,CAAC,IAAIA,MAAM,IAAI,IAAI,KAC/BrB,qBAAqB,CAACkB,KAAK,CAAC,IAC5BA,KAAK,CAACM,eAAe,CAACF,QAAQ,CAAC,EAC/B;YACAjB,IAAI,CAACoB,iBAAiB,CAACL,GAAG,CAAC;YAC3B,OAAO,IAAI;UACb;QACF;MACF;IACF;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAelB,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"TreeKeyHandler.js","names":["isExpandableGridModel","isRangedSelection","KeyHandler","TreeKeyHandler","onDown","event","grid","key","handleExpandKey","state","selection","ranges","toRanges","length","range","startRow","endRow","startColumn","endColumn","metrics","Error","model","props","row","column","modelRow","getModelRow","isRowExpandable","toggleRowExpanded"],"sources":["../../src/key-handlers/TreeKeyHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { isExpandableGridModel } from '../ExpandableGridModel';\nimport type Grid from '../Grid';\nimport type GridRange from '../GridRange';\nimport { isRangedSelection } from '../RangedSelection';\nimport KeyHandler from '../KeyHandler';\n\nclass TreeKeyHandler extends KeyHandler {\n onDown(event: KeyboardEvent, grid: Grid): boolean {\n switch (event.key) {\n case 'Enter':\n case ' ': {\n return this.handleExpandKey(event, grid);\n }\n default:\n break;\n }\n return false;\n }\n\n handleExpandKey(event: KeyboardEvent, grid: Grid): boolean {\n // Keyed tables have no expandable rows; ignore the shortcut rather than throwing.\n if (!isRangedSelection(grid.state.selection)) return false;\n const ranges = grid.state.selection.toRanges();\n if (ranges.length === 1) {\n const range = ranges[0] as GridRange;\n if (\n range.startRow === range.endRow &&\n range.startColumn === range.endColumn\n ) {\n if (!grid.metrics) throw new Error('grid.metrics not set');\n\n const { model } = grid.props;\n const { startRow: row, startColumn: column } = range;\n if (row != null) {\n const modelRow = grid.getModelRow(row);\n if (\n (column === 0 || column == null) &&\n isExpandableGridModel(model) &&\n model.isRowExpandable(modelRow)\n ) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n }\n return false;\n }\n}\n\nexport default TreeKeyHandler;\n"],"mappings":"AAAA;AAAA,SACSA,qBAAqB;AAAA,SAGrBC,iBAAiB;AAAA,OACnBC,UAAU;AAEjB,MAAMC,cAAc,SAASD,UAAU,CAAC;EACtCE,MAAMA,CAACC,KAAoB,EAAEC,IAAU,EAAW;IAChD,QAAQD,KAAK,CAACE,GAAG;MACf,KAAK,OAAO;MACZ,KAAK,GAAG;QAAE;UACR,OAAO,IAAI,CAACC,eAAe,CAACH,KAAK,EAAEC,IAAI,CAAC;QAC1C;MACA;QACE;IACJ;IACA,OAAO,KAAK;EACd;EAEAE,eAAeA,CAACH,KAAoB,EAAEC,IAAU,EAAW;IACzD;IACA,IAAI,CAACL,iBAAiB,CAACK,IAAI,CAACG,KAAK,CAACC,SAAS,CAAC,EAAE,OAAO,KAAK;IAC1D,IAAMC,MAAM,GAAGL,IAAI,CAACG,KAAK,CAACC,SAAS,CAACE,QAAQ,CAAC,CAAC;IAC9C,IAAID,MAAM,CAACE,MAAM,KAAK,CAAC,EAAE;MACvB,IAAMC,KAAK,GAAGH,MAAM,CAAC,CAAC,CAAc;MACpC,IACEG,KAAK,CAACC,QAAQ,KAAKD,KAAK,CAACE,MAAM,IAC/BF,KAAK,CAACG,WAAW,KAAKH,KAAK,CAACI,SAAS,EACrC;QACA,IAAI,CAACZ,IAAI,CAACa,OAAO,EAAE,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;QAE1D,IAAQC,KAAK,GAAKf,IAAI,CAACgB,KAAK,CAApBD,KAAK;QACb,IAAkBE,GAAG,GAA0BT,KAAK,CAA5CC,QAAQ;UAAoBS,MAAM,GAAKV,KAAK,CAA7BG,WAAW;QAClC,IAAIM,GAAG,IAAI,IAAI,EAAE;UACf,IAAME,QAAQ,GAAGnB,IAAI,CAACoB,WAAW,CAACH,GAAG,CAAC;UACtC,IACE,CAACC,MAAM,KAAK,CAAC,IAAIA,MAAM,IAAI,IAAI,KAC/BxB,qBAAqB,CAACqB,KAAK,CAAC,IAC5BA,KAAK,CAACM,eAAe,CAACF,QAAQ,CAAC,EAC/B;YACAnB,IAAI,CAACsB,iBAAiB,CAACL,GAAG,CAAC;YAC3B,OAAO,IAAI;UACb;QACF;MACF;IACF;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAepB,cAAc","ignoreList":[]}
@@ -9,6 +9,7 @@ declare class GridRowTreeMouseHandler extends GridMouseHandler {
9
9
  static isInTreeBox(gridPoint: GridPoint, grid: Grid): boolean;
10
10
  onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult;
11
11
  onClick(gridPoint: GridPoint, grid: Grid, event: React.MouseEvent): EventHandlerResult;
12
+ onDoubleClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult;
12
13
  }
13
14
  export default GridRowTreeMouseHandler;
14
15
  //# sourceMappingURL=GridRowTreeMouseHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridRowTreeMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridRowTreeMouseHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD;;GAEG;AACH,cAAM,uBAAwB,SAAQ,gBAAgB;IACpD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAuC7D,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAI5D,OAAO,CACL,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,CAAC,UAAU,GACtB,kBAAkB;CAUtB;AAED,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"GridRowTreeMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridRowTreeMouseHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD;;GAEG;AACH,cAAM,uBAAwB,SAAQ,gBAAgB;IACpD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAuC7D,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAI5D,OAAO,CACL,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,CAAC,UAAU,GACtB,kBAAkB;IAcrB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAGpE;AAED,eAAe,uBAAuB,CAAC"}
@@ -45,6 +45,13 @@ class GridRowTreeMouseHandler extends GridMouseHandler {
45
45
  }
46
46
  return false;
47
47
  }
48
+
49
+ // Consume double-clicks in the tree box so `GridSelectionMouseHandler`
50
+ // doesn't fire a same-row `handleMouseSelectStart('replace')`, which would
51
+ // trigger deselect-on-reclick and wipe the row we just toggled.
52
+ onDoubleClick(gridPoint, grid) {
53
+ return GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid);
54
+ }
48
55
  }
49
56
  export default GridRowTreeMouseHandler;
50
57
  //# sourceMappingURL=GridRowTreeMouseHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GridRowTreeMouseHandler.js","names":["getOrThrow","GridMouseHandler","GridUtils","GridRowTreeMouseHandler","isInTreeBox","gridPoint","grid","column","row","x","y","metrics","Error","gridX","gridY","firstColumn","allColumnXs","allColumnWidths","allRowHeights","allRowYs","visibleRowTreeBoxes","get","columnX","width","rowY","height","onDown","onClick","event","toggleRowExpanded","isModifierKeyDown"],"sources":["../../src/mouse-handlers/GridRowTreeMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { getOrThrow } from '@deephaven/utils';\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridMouseHandler from '../GridMouseHandler';\nimport GridUtils, { type GridPoint } from '../GridUtils';\n\n/**\n * Detect when the tree expand/collapse button is clicked\n */\nclass GridRowTreeMouseHandler extends GridMouseHandler {\n static isInTreeBox(gridPoint: GridPoint, grid: Grid): boolean {\n const { column, row, x, y } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const {\n gridX,\n gridY,\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowHeights,\n allRowYs,\n visibleRowTreeBoxes,\n } = metrics;\n\n if (\n column === firstColumn &&\n row != null &&\n visibleRowTreeBoxes.get(row) != null &&\n x > gridX &&\n y > gridY\n ) {\n const columnX = getOrThrow(allColumnXs, column);\n const width = getOrThrow(allColumnWidths, column);\n const rowY = getOrThrow(allRowYs, row);\n const height = getOrThrow(allRowHeights, row);\n if (\n x >= gridX + columnX &&\n x <= gridX + columnX + width &&\n y >= gridY + rowY &&\n y <= gridY + rowY + height\n ) {\n return true;\n }\n }\n return false;\n }\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid);\n }\n\n onClick(\n gridPoint: GridPoint,\n grid: Grid,\n event: React.MouseEvent\n ): EventHandlerResult {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n const { row } = gridPoint;\n if (row !== null) {\n grid.toggleRowExpanded(row, GridUtils.isModifierKeyDown(event));\n return true;\n }\n }\n return false;\n }\n}\n\nexport default GridRowTreeMouseHandler;\n"],"mappings":"AAAA;AACA,SAASA,UAAU,QAAQ,kBAAkB;AAAC,OAGvCC,gBAAgB;AAAA,OAChBC,SAAS;AAEhB;AACA;AACA;AACA,MAAMC,uBAAuB,SAASF,gBAAgB,CAAC;EACrD,OAAOG,WAAWA,CAACC,SAAoB,EAAEC,IAAU,EAAW;IAC5D,IAAQC,MAAM,GAAgBF,SAAS,CAA/BE,MAAM;MAAEC,GAAG,GAAWH,SAAS,CAAvBG,GAAG;MAAEC,CAAC,GAAQJ,SAAS,CAAlBI,CAAC;MAAEC,CAAC,GAAKL,SAAS,CAAfK,CAAC;IACzB,IAAQC,OAAO,GAAKL,IAAI,CAAhBK,OAAO;IACf,IAAI,CAACA,OAAO,EAAE,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;IAEhD,IACEC,KAAK,GAQHF,OAAO,CARTE,KAAK;MACLC,KAAK,GAOHH,OAAO,CAPTG,KAAK;MACLC,WAAW,GAMTJ,OAAO,CANTI,WAAW;MACXC,WAAW,GAKTL,OAAO,CALTK,WAAW;MACXC,eAAe,GAIbN,OAAO,CAJTM,eAAe;MACfC,aAAa,GAGXP,OAAO,CAHTO,aAAa;MACbC,QAAQ,GAENR,OAAO,CAFTQ,QAAQ;MACRC,mBAAmB,GACjBT,OAAO,CADTS,mBAAmB;IAGrB,IACEb,MAAM,KAAKQ,WAAW,IACtBP,GAAG,IAAI,IAAI,IACXY,mBAAmB,CAACC,GAAG,CAACb,GAAG,CAAC,IAAI,IAAI,IACpCC,CAAC,GAAGI,KAAK,IACTH,CAAC,GAAGI,KAAK,EACT;MACA,IAAMQ,OAAO,GAAGtB,UAAU,CAACgB,WAAW,EAAET,MAAM,CAAC;MAC/C,IAAMgB,KAAK,GAAGvB,UAAU,CAACiB,eAAe,EAAEV,MAAM,CAAC;MACjD,IAAMiB,IAAI,GAAGxB,UAAU,CAACmB,QAAQ,EAAEX,GAAG,CAAC;MACtC,IAAMiB,MAAM,GAAGzB,UAAU,CAACkB,aAAa,EAAEV,GAAG,CAAC;MAC7C,IACEC,CAAC,IAAII,KAAK,GAAGS,OAAO,IACpBb,CAAC,IAAII,KAAK,GAAGS,OAAO,GAAGC,KAAK,IAC5Bb,CAAC,IAAII,KAAK,GAAGU,IAAI,IACjBd,CAAC,IAAII,KAAK,GAAGU,IAAI,GAAGC,MAAM,EAC1B;QACA,OAAO,IAAI;MACb;IACF;IACA,OAAO,KAAK;EACd;EAEAC,MAAMA,CAACrB,SAAoB,EAAEC,IAAU,EAAsB;IAC3D,OAAOH,uBAAuB,CAACC,WAAW,CAACC,SAAS,EAAEC,IAAI,CAAC;EAC7D;EAEAqB,OAAOA,CACLtB,SAAoB,EACpBC,IAAU,EACVsB,KAAuB,EACH;IACpB,IAAIzB,uBAAuB,CAACC,WAAW,CAACC,SAAS,EAAEC,IAAI,CAAC,EAAE;MACxD,IAAQE,GAAG,GAAKH,SAAS,CAAjBG,GAAG;MACX,IAAIA,GAAG,KAAK,IAAI,EAAE;QAChBF,IAAI,CAACuB,iBAAiB,CAACrB,GAAG,EAAEN,SAAS,CAAC4B,iBAAiB,CAACF,KAAK,CAAC,CAAC;QAC/D,OAAO,IAAI;MACb;IACF;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAezB,uBAAuB","ignoreList":[]}
1
+ {"version":3,"file":"GridRowTreeMouseHandler.js","names":["getOrThrow","GridMouseHandler","GridUtils","GridRowTreeMouseHandler","isInTreeBox","gridPoint","grid","column","row","x","y","metrics","Error","gridX","gridY","firstColumn","allColumnXs","allColumnWidths","allRowHeights","allRowYs","visibleRowTreeBoxes","get","columnX","width","rowY","height","onDown","onClick","event","toggleRowExpanded","isModifierKeyDown","onDoubleClick"],"sources":["../../src/mouse-handlers/GridRowTreeMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { getOrThrow } from '@deephaven/utils';\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridMouseHandler from '../GridMouseHandler';\nimport GridUtils, { type GridPoint } from '../GridUtils';\n\n/**\n * Detect when the tree expand/collapse button is clicked\n */\nclass GridRowTreeMouseHandler extends GridMouseHandler {\n static isInTreeBox(gridPoint: GridPoint, grid: Grid): boolean {\n const { column, row, x, y } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const {\n gridX,\n gridY,\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowHeights,\n allRowYs,\n visibleRowTreeBoxes,\n } = metrics;\n\n if (\n column === firstColumn &&\n row != null &&\n visibleRowTreeBoxes.get(row) != null &&\n x > gridX &&\n y > gridY\n ) {\n const columnX = getOrThrow(allColumnXs, column);\n const width = getOrThrow(allColumnWidths, column);\n const rowY = getOrThrow(allRowYs, row);\n const height = getOrThrow(allRowHeights, row);\n if (\n x >= gridX + columnX &&\n x <= gridX + columnX + width &&\n y >= gridY + rowY &&\n y <= gridY + rowY + height\n ) {\n return true;\n }\n }\n return false;\n }\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid);\n }\n\n onClick(\n gridPoint: GridPoint,\n grid: Grid,\n event: React.MouseEvent\n ): EventHandlerResult {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n const { row } = gridPoint;\n if (row !== null) {\n grid.toggleRowExpanded(row, GridUtils.isModifierKeyDown(event));\n return true;\n }\n }\n return false;\n }\n\n // Consume double-clicks in the tree box so `GridSelectionMouseHandler`\n // doesn't fire a same-row `handleMouseSelectStart('replace')`, which would\n // trigger deselect-on-reclick and wipe the row we just toggled.\n onDoubleClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid);\n }\n}\n\nexport default GridRowTreeMouseHandler;\n"],"mappings":"AAAA;AACA,SAASA,UAAU,QAAQ,kBAAkB;AAAC,OAGvCC,gBAAgB;AAAA,OAChBC,SAAS;AAEhB;AACA;AACA;AACA,MAAMC,uBAAuB,SAASF,gBAAgB,CAAC;EACrD,OAAOG,WAAWA,CAACC,SAAoB,EAAEC,IAAU,EAAW;IAC5D,IAAQC,MAAM,GAAgBF,SAAS,CAA/BE,MAAM;MAAEC,GAAG,GAAWH,SAAS,CAAvBG,GAAG;MAAEC,CAAC,GAAQJ,SAAS,CAAlBI,CAAC;MAAEC,CAAC,GAAKL,SAAS,CAAfK,CAAC;IACzB,IAAQC,OAAO,GAAKL,IAAI,CAAhBK,OAAO;IACf,IAAI,CAACA,OAAO,EAAE,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;IAEhD,IACEC,KAAK,GAQHF,OAAO,CARTE,KAAK;MACLC,KAAK,GAOHH,OAAO,CAPTG,KAAK;MACLC,WAAW,GAMTJ,OAAO,CANTI,WAAW;MACXC,WAAW,GAKTL,OAAO,CALTK,WAAW;MACXC,eAAe,GAIbN,OAAO,CAJTM,eAAe;MACfC,aAAa,GAGXP,OAAO,CAHTO,aAAa;MACbC,QAAQ,GAENR,OAAO,CAFTQ,QAAQ;MACRC,mBAAmB,GACjBT,OAAO,CADTS,mBAAmB;IAGrB,IACEb,MAAM,KAAKQ,WAAW,IACtBP,GAAG,IAAI,IAAI,IACXY,mBAAmB,CAACC,GAAG,CAACb,GAAG,CAAC,IAAI,IAAI,IACpCC,CAAC,GAAGI,KAAK,IACTH,CAAC,GAAGI,KAAK,EACT;MACA,IAAMQ,OAAO,GAAGtB,UAAU,CAACgB,WAAW,EAAET,MAAM,CAAC;MAC/C,IAAMgB,KAAK,GAAGvB,UAAU,CAACiB,eAAe,EAAEV,MAAM,CAAC;MACjD,IAAMiB,IAAI,GAAGxB,UAAU,CAACmB,QAAQ,EAAEX,GAAG,CAAC;MACtC,IAAMiB,MAAM,GAAGzB,UAAU,CAACkB,aAAa,EAAEV,GAAG,CAAC;MAC7C,IACEC,CAAC,IAAII,KAAK,GAAGS,OAAO,IACpBb,CAAC,IAAII,KAAK,GAAGS,OAAO,GAAGC,KAAK,IAC5Bb,CAAC,IAAII,KAAK,GAAGU,IAAI,IACjBd,CAAC,IAAII,KAAK,GAAGU,IAAI,GAAGC,MAAM,EAC1B;QACA,OAAO,IAAI;MACb;IACF;IACA,OAAO,KAAK;EACd;EAEAC,MAAMA,CAACrB,SAAoB,EAAEC,IAAU,EAAsB;IAC3D,OAAOH,uBAAuB,CAACC,WAAW,CAACC,SAAS,EAAEC,IAAI,CAAC;EAC7D;EAEAqB,OAAOA,CACLtB,SAAoB,EACpBC,IAAU,EACVsB,KAAuB,EACH;IACpB,IAAIzB,uBAAuB,CAACC,WAAW,CAACC,SAAS,EAAEC,IAAI,CAAC,EAAE;MACxD,IAAQE,GAAG,GAAKH,SAAS,CAAjBG,GAAG;MACX,IAAIA,GAAG,KAAK,IAAI,EAAE;QAChBF,IAAI,CAACuB,iBAAiB,CAACrB,GAAG,EAAEN,SAAS,CAAC4B,iBAAiB,CAACF,KAAK,CAAC,CAAC;QAC/D,OAAO,IAAI;MACb;IACF;IACA,OAAO,KAAK;EACd;;EAEA;EACA;EACA;EACAG,aAAaA,CAAC1B,SAAoB,EAAEC,IAAU,EAAsB;IAClE,OAAOH,uBAAuB,CAACC,WAAW,CAACC,SAAS,EAAEC,IAAI,CAAC;EAC7D;AACF;AAEA,eAAeH,uBAAuB","ignoreList":[]}
@@ -1,17 +1,8 @@
1
1
  import { type EventHandlerResult } from '../EventHandlerResult';
2
2
  import type Grid from '../Grid';
3
3
  import GridMouseHandler, { type GridMouseEvent } from '../GridMouseHandler';
4
- import GridRange, { type GridRangeIndex } from '../GridRange';
5
4
  import { type GridPoint } from '../GridUtils';
6
5
  declare class GridSelectionMouseHandler extends GridMouseHandler {
7
- /**
8
- * Returns the latest grid selection based on the current grid selection and where the user clicked
9
- * This code is dependent on the behavior of onContextMenu
10
- * @param originalSelection The selection from the current grid state which may be stale
11
- * @param columnIndex The column index where the user clicked
12
- * @param rowIndex The row index where the user clicked
13
- */
14
- static getLatestSelection(originalSelection: readonly GridRange[], columnIndex: GridRangeIndex, rowIndex: GridRangeIndex): readonly GridRange[];
15
6
  private startPoint?;
16
7
  private hasExtendedFloating;
17
8
  private timer?;
@@ -1 +1 @@
1
- {"version":3,"file":"GridSelectionMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridSelectionMouseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,gBAAgB,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,SAAS,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzD,cAAM,yBAA0B,SAAQ,gBAAgB;IACtD;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CACvB,iBAAiB,EAAE,SAAS,SAAS,EAAE,EACvC,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE,cAAc,GACvB,SAAS,SAAS,EAAE;IAcvB,OAAO,CAAC,UAAU,CAAC,CAAY;IAE/B,OAAO,CAAC,mBAAmB,CAAS;IAGpC,OAAO,CAAC,KAAK,CAAC,CAAgC;IAE9C,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,MAAM,CACJ,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAkDrB,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAsI5D,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAW1D,aAAa,CACX,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAarB,aAAa,CACX,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAoBrB,aAAa,CACX,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,IAAI;IAuBP,UAAU,CACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,IAAI;IAcP,SAAS,IAAI,IAAI;CAMlB;AAED,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"GridSelectionMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridSelectionMouseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,gBAAgB,EAAE,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAKzD,cAAM,yBAA0B,SAAQ,gBAAgB;IACtD,OAAO,CAAC,UAAU,CAAC,CAAY;IAE/B,OAAO,CAAC,mBAAmB,CAAS;IAGpC,OAAO,CAAC,KAAK,CAAC,CAAgC;IAE9C,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,MAAM,CACJ,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAsCrB,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAuI5D,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAW1D,aAAa,CACX,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAarB,aAAa,CACX,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,cAAc,GACpB,kBAAkB;IAmBrB,aAAa,CACX,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,IAAI;IAuBP,UAAU,CACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,IAAI;IAcP,SAAS,IAAI,IAAI;CAMlB;AAED,eAAe,yBAAyB,CAAC"}
@@ -2,8 +2,8 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
2
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
3
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
4
  import GridMouseHandler from "../GridMouseHandler.js";
5
- import GridRange from "../GridRange.js";
6
5
  import GridUtils from "../GridUtils.js";
6
+ import { gestureModeFromModifiers } from "../GridSelectionUtils.js";
7
7
  var DEFAULT_INTERVAL_MS = 100;
8
8
  class GridSelectionMouseHandler extends GridMouseHandler {
9
9
  constructor() {
@@ -14,20 +14,6 @@ class GridSelectionMouseHandler extends GridMouseHandler {
14
14
  _defineProperty(this, "timer", void 0);
15
15
  _defineProperty(this, "lastTriggerTime", void 0);
16
16
  }
17
- /**
18
- * Returns the latest grid selection based on the current grid selection and where the user clicked
19
- * This code is dependent on the behavior of onContextMenu
20
- * @param originalSelection The selection from the current grid state which may be stale
21
- * @param columnIndex The column index where the user clicked
22
- * @param rowIndex The row index where the user clicked
23
- */
24
- static getLatestSelection(originalSelection, columnIndex, rowIndex) {
25
- var clickedInOriginalSelection = GridRange.containsCell(originalSelection, columnIndex, rowIndex);
26
-
27
- // If the user clicked in a valid cell outside of the original selection,
28
- // the selection will be changed to just that cell.
29
- return clickedInOriginalSelection || columnIndex == null || rowIndex == null ? originalSelection : [GridRange.makeCell(columnIndex, rowIndex)];
30
- }
31
17
  onDown(gridPoint, grid, event) {
32
18
  var x = gridPoint.x,
33
19
  y = gridPoint.y,
@@ -46,20 +32,20 @@ class GridSelectionMouseHandler extends GridMouseHandler {
46
32
  }
47
33
  var isModifierKey = GridUtils.isModifierKeyDown(event);
48
34
  var isShiftKey = event.shiftKey;
49
- if (!isModifierKey) {
50
- if (isShiftKey) {
51
- grid.trimSelectedRanges();
52
- } else {
53
- grid.clearSelectedRanges();
54
- }
55
- }
56
35
  var theme = grid.getTheme();
57
36
  var autoSelectRow = theme.autoSelectRow,
58
37
  autoSelectColumn = theme.autoSelectColumn;
59
38
  // If they click a column/row header, don't want to select the whole table if auto select column/row is on
60
39
  if ((column !== null || !autoSelectColumn) && (row !== null || !autoSelectRow)) {
61
40
  grid.focus();
62
- grid.moveCursorToPosition(column, row, isShiftKey, false, isShiftKey && isModifierKey);
41
+ var mode = gestureModeFromModifiers({
42
+ isShiftKey,
43
+ isModifierKey
44
+ });
45
+ grid.handleMouseSelectStart({
46
+ row,
47
+ column
48
+ }, mode);
63
49
  }
64
50
  this.startPoint = gridPoint;
65
51
  this.hasExtendedFloating = false;
@@ -159,7 +145,11 @@ class GridSelectionMouseHandler extends GridMouseHandler {
159
145
  column = rightVisible + 1;
160
146
  }
161
147
  }
162
- grid.moveCursorToPosition(column, row, true, true);
148
+ // Transient overlay during drag — onUp performs the settled commit.
149
+ grid.handleMouseSelectDrag({
150
+ row,
151
+ column
152
+ });
163
153
  }
164
154
  return true;
165
155
  }
@@ -167,7 +157,7 @@ class GridSelectionMouseHandler extends GridMouseHandler {
167
157
  if (this.startPoint !== undefined) {
168
158
  this.startPoint = undefined;
169
159
  this.stopTimer();
170
- grid.commitSelection();
160
+ grid.handleMouseSelectEnd();
171
161
  }
172
162
  return false;
173
163
  }
@@ -179,22 +169,30 @@ class GridSelectionMouseHandler extends GridMouseHandler {
179
169
  if (row == null || column == null) {
180
170
  return false;
181
171
  }
182
- grid.clearSelectedRanges();
183
- grid.moveCursorToPosition(column, row);
184
- grid.commitSelection();
172
+
173
+ // dblclick has no follow-up mouseUp to settle a mouse gesture; use the
174
+ // settled path so selectedKeys / selectedKeyValues aren't left empty.
175
+ grid.handleKeySelectAt({
176
+ row,
177
+ column
178
+ }, 'replace');
185
179
  return true;
186
180
  }
187
181
  onContextMenu(gridPoint, grid, event) {
188
- // check if the selected is already in the selected range
189
- var selectedRanges = grid.getSelectedRanges();
190
- var isInRange = GridRange.containsCell(selectedRanges, gridPoint.column, gridPoint.row);
182
+ var row = gridPoint.row,
183
+ column = gridPoint.column;
184
+ var isInRange = row != null && column != null && grid.getSelection().isCellSelected(column, row);
191
185
 
192
- // only change the selected range if the selected cell is not in the selected range
193
- if (!isInRange && gridPoint.row !== null && gridPoint.column !== null) {
186
+ // only change the selected range if the clicked cell is not already selected
187
+ if (!isInRange && row != null && column != null) {
194
188
  this.startPoint = undefined;
195
189
  this.stopTimer();
196
- grid.clearSelectedRanges();
197
- grid.moveCursorToPosition(gridPoint.column, gridPoint.row);
190
+ // Right-click's mouseUp already fired before contextmenu; use the
191
+ // settled path so the menu operates on a fully committed selection.
192
+ grid.handleKeySelectAt({
193
+ row,
194
+ column
195
+ }, 'replace');
198
196
  }
199
197
  return false;
200
198
  }
@@ -203,9 +201,9 @@ class GridSelectionMouseHandler extends GridMouseHandler {
203
201
  column = gridPoint.column;
204
202
  var metrics = grid.metrics;
205
203
  if (!metrics) throw new Error('metrics not set');
206
- var _grid$state = grid.state,
207
- selectionEndRow = _grid$state.selectionEndRow,
208
- selectionEndColumn = _grid$state.selectionEndColumn;
204
+ var _grid$state$selection = grid.state.selection,
205
+ selectionEndRow = _grid$state$selection.selectionEndRow,
206
+ selectionEndColumn = _grid$state$selection.selectionEndColumn;
209
207
  if (selectionEndRow == null || selectionEndColumn == null) {
210
208
  throw new Error('selection not set');
211
209
  }
@@ -215,7 +213,11 @@ class GridSelectionMouseHandler extends GridMouseHandler {
215
213
  var maxX = deltaX > 0 && column != null ? column : columnCount - 1;
216
214
  var minY = deltaY < 0 && row != null ? row : 0;
217
215
  var maxY = deltaY > 0 && row != null ? row : rowCount - 1;
218
- grid.moveCursorToPosition(Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX), Math.min(Math.max(minY, selectionEndRow + deltaY), maxY), true);
216
+ // Transient overlay during auto-scroll drag — onUp performs the settled commit.
217
+ grid.handleMouseSelectDrag({
218
+ column: Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX),
219
+ row: Math.min(Math.max(minY, selectionEndRow + deltaY), maxY)
220
+ });
219
221
  this.lastTriggerTime = Date.now();
220
222
  }
221
223
  startTimer(grid, gridPoint, deltaX, deltaY) {
@@ -1 +1 @@
1
- {"version":3,"file":"GridSelectionMouseHandler.js","names":["GridMouseHandler","GridRange","GridUtils","DEFAULT_INTERVAL_MS","GridSelectionMouseHandler","constructor","arguments","_defineProperty","getLatestSelection","originalSelection","columnIndex","rowIndex","clickedInOriginalSelection","containsCell","makeCell","onDown","gridPoint","grid","event","x","y","column","row","metrics","Error","gridX","gridY","maxX","maxY","gridMouseX","gridMouseY","isModifierKey","isModifierKeyDown","isShiftKey","shiftKey","trimSelectedRanges","clearSelectedRanges","theme","getTheme","autoSelectRow","autoSelectColumn","focus","moveCursorToPosition","startPoint","hasExtendedFloating","onDrag","undefined","stopTimer","_this$startPoint","startRow","startColumn","left","lastLeft","top","lastTop","columnWidth","rowHeight","dragBounds","getScrollDragBounds","deltaX","deltaY","x1","x2","y1","y2","startTimer","Math","ceil","floor","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnCount","rowCount","bottom","right","topVisible","bottomVisible","leftVisible","rightVisible","isFloatingRow","isFloatingColumn","onUp","commitSelection","onDoubleClick","onContextMenu","selectedRanges","getSelectedRanges","isInRange","moveSelection","_grid$state","state","selectionEndRow","selectionEndColumn","minX","minY","min","max","lastTriggerTime","Date","now","timeout","timer","setTimeout","clearTimeout"],"sources":["../../src/mouse-handlers/GridSelectionMouseHandler.ts"],"sourcesContent":["import { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridMouseHandler, { type GridMouseEvent } from '../GridMouseHandler';\nimport GridRange, { type GridRangeIndex } from '../GridRange';\nimport GridUtils, { type GridPoint } from '../GridUtils';\n\nconst DEFAULT_INTERVAL_MS = 100;\n\nclass GridSelectionMouseHandler extends GridMouseHandler {\n /**\n * Returns the latest grid selection based on the current grid selection and where the user clicked\n * This code is dependent on the behavior of onContextMenu\n * @param originalSelection The selection from the current grid state which may be stale\n * @param columnIndex The column index where the user clicked\n * @param rowIndex The row index where the user clicked\n */\n static getLatestSelection(\n originalSelection: readonly GridRange[],\n columnIndex: GridRangeIndex,\n rowIndex: GridRangeIndex\n ): readonly GridRange[] {\n const clickedInOriginalSelection = GridRange.containsCell(\n originalSelection,\n columnIndex,\n rowIndex\n );\n\n // If the user clicked in a valid cell outside of the original selection,\n // the selection will be changed to just that cell.\n return clickedInOriginalSelection || columnIndex == null || rowIndex == null\n ? originalSelection\n : [GridRange.makeCell(columnIndex, rowIndex)];\n }\n\n private startPoint?: GridPoint;\n\n private hasExtendedFloating = false;\n\n // Timer used when holding a drag past the end of the grid\n private timer?: ReturnType<typeof setTimeout>;\n\n private lastTriggerTime?: number;\n\n onDown(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const { x, y, column, row } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { gridX, gridY, maxX, maxY } = metrics;\n const gridMouseX = x - gridX;\n const gridMouseY = y - gridY;\n if (\n gridMouseX < 0 ||\n gridMouseY < 0 ||\n (column == null && gridMouseX > maxX) ||\n (row == null && gridMouseY > maxY)\n ) {\n return false;\n }\n\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n const isShiftKey = event.shiftKey;\n if (!isModifierKey) {\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n }\n\n const theme = grid.getTheme();\n const { autoSelectRow, autoSelectColumn } = theme;\n // If they click a column/row header, don't want to select the whole table if auto select column/row is on\n if (\n (column !== null || !autoSelectColumn) &&\n (row !== null || !autoSelectRow)\n ) {\n grid.focus();\n grid.moveCursorToPosition(\n column,\n row,\n isShiftKey,\n false,\n isShiftKey && isModifierKey\n );\n }\n\n this.startPoint = gridPoint;\n this.hasExtendedFloating = false;\n\n return true;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.startPoint === undefined) {\n return false;\n }\n\n this.stopTimer();\n\n const { row: startRow, column: startColumn } = this.startPoint;\n const { x, y } = gridPoint;\n let { row, column } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { left, lastLeft, top, lastTop, columnWidth, rowHeight } = metrics;\n const dragBounds = GridUtils.getScrollDragBounds(\n metrics,\n startRow,\n startColumn\n );\n\n // If we're dragging outside of the grid entirely, then we should start scrolling\n let deltaX = 0;\n let deltaY = 0;\n if (left < lastLeft) {\n if (x < dragBounds.x1) {\n deltaX = x - dragBounds.x1;\n } else if (x > dragBounds.x2) {\n deltaX = x - dragBounds.x2;\n }\n }\n if (top < lastTop) {\n if (y < dragBounds.y1) {\n deltaY = y - dragBounds.y1;\n } else if (y > dragBounds.y2) {\n deltaY = y - dragBounds.y2;\n }\n }\n\n if (deltaX !== 0 || deltaY !== 0) {\n // Have it go faster depending on how far out they've dragged\n this.startTimer(\n grid,\n gridPoint,\n deltaX > 0\n ? Math.ceil(deltaX / columnWidth)\n : Math.floor(deltaX / columnWidth),\n deltaY > 0\n ? Math.ceil(deltaY / rowHeight)\n : Math.floor(deltaY / rowHeight)\n );\n } else if (row != null && column != null) {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n rowCount,\n bottom,\n right,\n topVisible,\n bottomVisible,\n leftVisible,\n rightVisible,\n } = metrics;\n // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area\n // So when that happens, just adjust the point to be past the new boundary\n if (!this.hasExtendedFloating) {\n if (\n startRow !== null &&\n startRow < floatingTopRowCount &&\n row >= floatingTopRowCount\n ) {\n // Extending from floating top into the view\n row = floatingTopRowCount;\n this.hasExtendedFloating = true;\n } else if (\n startRow !== null &&\n startRow >= rowCount - floatingBottomRowCount &&\n row < rowCount - floatingBottomRowCount\n ) {\n // Extending from floating bottom into the view\n row = rowCount - floatingBottomRowCount - 1;\n this.hasExtendedFloating = true;\n }\n\n if (\n startColumn !== null &&\n startColumn < floatingLeftColumnCount &&\n column >= floatingLeftColumnCount\n ) {\n // Extending from floating left into the view\n column = floatingLeftColumnCount;\n this.hasExtendedFloating = true;\n } else if (\n startColumn !== null &&\n startColumn >= columnCount - floatingRightColumnCount &&\n column < columnCount - floatingRightColumnCount\n ) {\n // Extending from floating right into the view\n column = columnCount - floatingRightColumnCount - 1;\n this.hasExtendedFloating = true;\n }\n }\n\n // When a selection is dragging from within the main area to over a floating area, scroll.\n if (\n startRow !== null &&\n !GridUtils.isFloatingRow(startRow, metrics) &&\n GridUtils.isFloatingRow(row, metrics)\n ) {\n // Need to scroll\n if (startRow > row && row < top) {\n row = topVisible - 1;\n } else if (startRow < row && row > bottom) {\n row = bottomVisible + 1;\n }\n }\n if (\n startColumn !== null &&\n !GridUtils.isFloatingColumn(startColumn, metrics) &&\n GridUtils.isFloatingColumn(column, metrics)\n ) {\n if (startColumn > column && column < left) {\n column = leftVisible - 1;\n } else if (startColumn < column && column > right) {\n column = rightVisible + 1;\n }\n }\n grid.moveCursorToPosition(column, row, true, true);\n }\n return true;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.startPoint !== undefined) {\n this.startPoint = undefined;\n this.stopTimer();\n grid.commitSelection();\n }\n\n return false;\n }\n\n // eslint-disable-next-line class-methods-use-this\n onDoubleClick(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const { column, row } = gridPoint;\n if (row == null || column == null) {\n return false;\n }\n\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(column, row);\n grid.commitSelection();\n\n return true;\n }\n\n onContextMenu(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n // check if the selected is already in the selected range\n const selectedRanges = grid.getSelectedRanges();\n const isInRange = GridRange.containsCell(\n selectedRanges,\n gridPoint.column,\n gridPoint.row\n );\n\n // only change the selected range if the selected cell is not in the selected range\n if (!isInRange && gridPoint.row !== null && gridPoint.column !== null) {\n this.startPoint = undefined;\n this.stopTimer();\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(gridPoint.column, gridPoint.row);\n }\n\n return false;\n }\n\n moveSelection(\n grid: Grid,\n gridPoint: GridPoint,\n deltaX: number,\n deltaY: number\n ): void {\n const { row, column } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { selectionEndRow, selectionEndColumn } = grid.state;\n if (selectionEndRow == null || selectionEndColumn == null) {\n throw new Error('selection not set');\n }\n\n const { rowCount, columnCount } = metrics;\n const minX = deltaX < 0 && column != null ? column : 0;\n const maxX = deltaX > 0 && column != null ? column : columnCount - 1;\n const minY = deltaY < 0 && row != null ? row : 0;\n const maxY = deltaY > 0 && row != null ? row : rowCount - 1;\n grid.moveCursorToPosition(\n Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX),\n Math.min(Math.max(minY, selectionEndRow + deltaY), maxY),\n true\n );\n this.lastTriggerTime = Date.now();\n }\n\n startTimer(\n grid: Grid,\n gridPoint: GridPoint,\n deltaX: number,\n deltaY: number\n ): void {\n this.stopTimer();\n\n const timeout =\n this.lastTriggerTime != null\n ? DEFAULT_INTERVAL_MS -\n Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime)\n : 0;\n this.timer = setTimeout(() => {\n this.moveSelection(grid, gridPoint, deltaX, deltaY);\n this.startTimer(grid, gridPoint, deltaX, deltaY);\n }, timeout);\n }\n\n stopTimer(): void {\n if (this.timer !== undefined) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\n\nexport default GridSelectionMouseHandler;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"GridSelectionMouseHandler.js","names":["GridMouseHandler","GridUtils","gestureModeFromModifiers","DEFAULT_INTERVAL_MS","GridSelectionMouseHandler","constructor","arguments","_defineProperty","onDown","gridPoint","grid","event","x","y","column","row","metrics","Error","gridX","gridY","maxX","maxY","gridMouseX","gridMouseY","isModifierKey","isModifierKeyDown","isShiftKey","shiftKey","theme","getTheme","autoSelectRow","autoSelectColumn","focus","mode","handleMouseSelectStart","startPoint","hasExtendedFloating","onDrag","undefined","stopTimer","_this$startPoint","startRow","startColumn","left","lastLeft","top","lastTop","columnWidth","rowHeight","dragBounds","getScrollDragBounds","deltaX","deltaY","x1","x2","y1","y2","startTimer","Math","ceil","floor","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnCount","rowCount","bottom","right","topVisible","bottomVisible","leftVisible","rightVisible","isFloatingRow","isFloatingColumn","handleMouseSelectDrag","onUp","handleMouseSelectEnd","onDoubleClick","handleKeySelectAt","onContextMenu","isInRange","getSelection","isCellSelected","moveSelection","_grid$state$selection","state","selection","selectionEndRow","selectionEndColumn","minX","minY","min","max","lastTriggerTime","Date","now","timeout","timer","setTimeout","clearTimeout"],"sources":["../../src/mouse-handlers/GridSelectionMouseHandler.ts"],"sourcesContent":["import { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridMouseHandler, { type GridMouseEvent } from '../GridMouseHandler';\nimport GridUtils, { type GridPoint } from '../GridUtils';\nimport { gestureModeFromModifiers } from '../GridSelectionUtils';\n\nconst DEFAULT_INTERVAL_MS = 100;\n\nclass GridSelectionMouseHandler extends GridMouseHandler {\n private startPoint?: GridPoint;\n\n private hasExtendedFloating = false;\n\n // Timer used when holding a drag past the end of the grid\n private timer?: ReturnType<typeof setTimeout>;\n\n private lastTriggerTime?: number;\n\n onDown(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const { x, y, column, row } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { gridX, gridY, maxX, maxY } = metrics;\n const gridMouseX = x - gridX;\n const gridMouseY = y - gridY;\n if (\n gridMouseX < 0 ||\n gridMouseY < 0 ||\n (column == null && gridMouseX > maxX) ||\n (row == null && gridMouseY > maxY)\n ) {\n return false;\n }\n\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n const isShiftKey = event.shiftKey;\n\n const theme = grid.getTheme();\n const { autoSelectRow, autoSelectColumn } = theme;\n // If they click a column/row header, don't want to select the whole table if auto select column/row is on\n if (\n (column !== null || !autoSelectColumn) &&\n (row !== null || !autoSelectRow)\n ) {\n grid.focus();\n const mode = gestureModeFromModifiers({ isShiftKey, isModifierKey });\n grid.handleMouseSelectStart({ row, column }, mode);\n }\n\n this.startPoint = gridPoint;\n this.hasExtendedFloating = false;\n\n return true;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.startPoint === undefined) {\n return false;\n }\n\n this.stopTimer();\n\n const { row: startRow, column: startColumn } = this.startPoint;\n const { x, y } = gridPoint;\n let { row, column } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { left, lastLeft, top, lastTop, columnWidth, rowHeight } = metrics;\n const dragBounds = GridUtils.getScrollDragBounds(\n metrics,\n startRow,\n startColumn\n );\n\n // If we're dragging outside of the grid entirely, then we should start scrolling\n let deltaX = 0;\n let deltaY = 0;\n if (left < lastLeft) {\n if (x < dragBounds.x1) {\n deltaX = x - dragBounds.x1;\n } else if (x > dragBounds.x2) {\n deltaX = x - dragBounds.x2;\n }\n }\n if (top < lastTop) {\n if (y < dragBounds.y1) {\n deltaY = y - dragBounds.y1;\n } else if (y > dragBounds.y2) {\n deltaY = y - dragBounds.y2;\n }\n }\n\n if (deltaX !== 0 || deltaY !== 0) {\n // Have it go faster depending on how far out they've dragged\n this.startTimer(\n grid,\n gridPoint,\n deltaX > 0\n ? Math.ceil(deltaX / columnWidth)\n : Math.floor(deltaX / columnWidth),\n deltaY > 0\n ? Math.ceil(deltaY / rowHeight)\n : Math.floor(deltaY / rowHeight)\n );\n } else if (row != null && column != null) {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n rowCount,\n bottom,\n right,\n topVisible,\n bottomVisible,\n leftVisible,\n rightVisible,\n } = metrics;\n // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area\n // So when that happens, just adjust the point to be past the new boundary\n if (!this.hasExtendedFloating) {\n if (\n startRow !== null &&\n startRow < floatingTopRowCount &&\n row >= floatingTopRowCount\n ) {\n // Extending from floating top into the view\n row = floatingTopRowCount;\n this.hasExtendedFloating = true;\n } else if (\n startRow !== null &&\n startRow >= rowCount - floatingBottomRowCount &&\n row < rowCount - floatingBottomRowCount\n ) {\n // Extending from floating bottom into the view\n row = rowCount - floatingBottomRowCount - 1;\n this.hasExtendedFloating = true;\n }\n\n if (\n startColumn !== null &&\n startColumn < floatingLeftColumnCount &&\n column >= floatingLeftColumnCount\n ) {\n // Extending from floating left into the view\n column = floatingLeftColumnCount;\n this.hasExtendedFloating = true;\n } else if (\n startColumn !== null &&\n startColumn >= columnCount - floatingRightColumnCount &&\n column < columnCount - floatingRightColumnCount\n ) {\n // Extending from floating right into the view\n column = columnCount - floatingRightColumnCount - 1;\n this.hasExtendedFloating = true;\n }\n }\n\n // When a selection is dragging from within the main area to over a floating area, scroll.\n if (\n startRow !== null &&\n !GridUtils.isFloatingRow(startRow, metrics) &&\n GridUtils.isFloatingRow(row, metrics)\n ) {\n // Need to scroll\n if (startRow > row && row < top) {\n row = topVisible - 1;\n } else if (startRow < row && row > bottom) {\n row = bottomVisible + 1;\n }\n }\n if (\n startColumn !== null &&\n !GridUtils.isFloatingColumn(startColumn, metrics) &&\n GridUtils.isFloatingColumn(column, metrics)\n ) {\n if (startColumn > column && column < left) {\n column = leftVisible - 1;\n } else if (startColumn < column && column > right) {\n column = rightVisible + 1;\n }\n }\n // Transient overlay during drag — onUp performs the settled commit.\n grid.handleMouseSelectDrag({ row, column });\n }\n return true;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.startPoint !== undefined) {\n this.startPoint = undefined;\n this.stopTimer();\n grid.handleMouseSelectEnd();\n }\n\n return false;\n }\n\n // eslint-disable-next-line class-methods-use-this\n onDoubleClick(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const { column, row } = gridPoint;\n if (row == null || column == null) {\n return false;\n }\n\n // dblclick has no follow-up mouseUp to settle a mouse gesture; use the\n // settled path so selectedKeys / selectedKeyValues aren't left empty.\n grid.handleKeySelectAt({ row, column }, 'replace');\n\n return true;\n }\n\n onContextMenu(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const { row, column } = gridPoint;\n const isInRange =\n row != null &&\n column != null &&\n grid.getSelection().isCellSelected(column, row);\n\n // only change the selected range if the clicked cell is not already selected\n if (!isInRange && row != null && column != null) {\n this.startPoint = undefined;\n this.stopTimer();\n // Right-click's mouseUp already fired before contextmenu; use the\n // settled path so the menu operates on a fully committed selection.\n grid.handleKeySelectAt({ row, column }, 'replace');\n }\n\n return false;\n }\n\n moveSelection(\n grid: Grid,\n gridPoint: GridPoint,\n deltaX: number,\n deltaY: number\n ): void {\n const { row, column } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { selectionEndRow, selectionEndColumn } = grid.state.selection;\n if (selectionEndRow == null || selectionEndColumn == null) {\n throw new Error('selection not set');\n }\n\n const { rowCount, columnCount } = metrics;\n const minX = deltaX < 0 && column != null ? column : 0;\n const maxX = deltaX > 0 && column != null ? column : columnCount - 1;\n const minY = deltaY < 0 && row != null ? row : 0;\n const maxY = deltaY > 0 && row != null ? row : rowCount - 1;\n // Transient overlay during auto-scroll drag — onUp performs the settled commit.\n grid.handleMouseSelectDrag({\n column: Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX),\n row: Math.min(Math.max(minY, selectionEndRow + deltaY), maxY),\n });\n this.lastTriggerTime = Date.now();\n }\n\n startTimer(\n grid: Grid,\n gridPoint: GridPoint,\n deltaX: number,\n deltaY: number\n ): void {\n this.stopTimer();\n\n const timeout =\n this.lastTriggerTime != null\n ? DEFAULT_INTERVAL_MS -\n Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime)\n : 0;\n this.timer = setTimeout(() => {\n this.moveSelection(grid, gridPoint, deltaX, deltaY);\n this.startTimer(grid, gridPoint, deltaX, deltaY);\n }, timeout);\n }\n\n stopTimer(): void {\n if (this.timer !== undefined) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\n\nexport default GridSelectionMouseHandler;\n"],"mappings":"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","ignoreList":[]}
@@ -111,7 +111,10 @@ class GridTokenMouseHandler extends GridMouseHandler {
111
111
  // After 1 second, select the row and if it is an input table, start editing
112
112
  grid.clearSelectedRanges();
113
113
  grid.focus();
114
- grid.moveCursorToPosition(column, row);
114
+ grid.handleKeySelectAt({
115
+ column,
116
+ row
117
+ }, 'replace');
115
118
  if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {
116
119
  grid.startEditing(column, row);
117
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GridTokenMouseHandler.js","names":["getOrThrow","isEditableGridModel","GridMouseHandler","GridRange","GridUtils","isLinkToken","isTokenBoxCellRenderer","GridTokenMouseHandler","constructor","arguments","_defineProperty","isHoveringLink","gridPoint","grid","column","row","x","y","renderer","metrics","props","model","currentLinkBox","undefined","modelRows","modelColumns","modelRow","modelColumn","renderType","renderTypeForCell","cellRenderer","getCellRenderer","_this$currentLinkBox","left","x1","top","y1","right","x2","bottom","y2","renderState","updateRenderState","tokensInCell","getTokenBoxesForVisibleCell","i","length","token","translatedTokenBox","translateTokenBox","setCursor","cursor","onMove","onDown","event","isUserHoveringLink","isModifierKeyDown","shiftKey","isDown","timeoutId","clearTimeout","isHold","setTimeout","clearSelectedRanges","focus","moveCursorToPosition","isEditableRange","makeCell","startEditing","HOLD_LENGTH","onClick","_this$currentLinkBox2","onTokenClicked"],"sources":["../../src/mouse-handlers/GridTokenMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n\nimport { getOrThrow } from '@deephaven/utils';\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridMouseHandler, { type GridMouseEvent } from '../GridMouseHandler';\nimport GridRange from '../GridRange';\nimport GridUtils, {\n type GridPoint,\n isLinkToken,\n type TokenBox,\n} from '../GridUtils';\nimport { isTokenBoxCellRenderer } from '../TokenBoxCellRenderer';\n\n// Handler also helps with other tooltips\nclass GridTokenMouseHandler extends GridMouseHandler {\n timeoutId?: ReturnType<typeof setTimeout>;\n\n private isHold = false;\n\n private isDown = false;\n\n // Stores the current hovered token box if it exists with translated coordinates\n protected currentLinkBox?: TokenBox;\n\n private static HOLD_LENGTH = 1000;\n\n isHoveringLink(gridPoint: GridPoint, grid: Grid): boolean {\n const { column, row, x, y } = gridPoint;\n const { renderer, metrics, props } = grid;\n const { model } = props;\n\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\n return false;\n }\n\n if (this.currentLinkBox != null) {\n const { x1: left, y1: top, x2: right, y2: bottom } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n\n const renderState = grid.updateRenderState();\n\n const tokensInCell = cellRenderer.getTokenBoxesForVisibleCell(\n column,\n row,\n renderState\n );\n\n // Loop through each link and check if cursor is in bounds\n for (let i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n const translatedTokenBox = GridUtils.translateTokenBox(\n tokensInCell[i],\n metrics\n );\n const { x1: left, x2: right, y1: top, y2: bottom } = translatedTokenBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n\n /**\n * Set the cursor to pointer when hovering over a link\n * @param gridPoint Mouse position information\n * @param grid The grid\n * @returns False\n */\n protected setCursor(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n } else {\n this.cursor = null;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.setCursor(gridPoint, grid);\n }\n\n onDown(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n // If a modifier key or shift is down, we don't want to handle it and set isDown to false so onUp won't handle it either\n if (\n GridUtils.isModifierKeyDown(event) ||\n event.shiftKey ||\n !isUserHoveringLink\n ) {\n return false;\n }\n\n this.isDown = true;\n\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.isHold = false;\n this.timeoutId = setTimeout(() => {\n this.isHold = true;\n const { column, row } = gridPoint;\n const { model } = grid.props;\n\n // After 1 second, select the row and if it is an input table, start editing\n grid.clearSelectedRanges();\n grid.focus();\n grid.moveCursorToPosition(column, row);\n if (\n isEditableGridModel(model) &&\n column != null &&\n row != null &&\n model.isEditableRange(GridRange.makeCell(column, row))\n ) {\n grid.startEditing(column, row);\n }\n }, GridTokenMouseHandler.HOLD_LENGTH);\n\n return true;\n }\n\n onClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n if (!isUserHoveringLink || !this.isDown || this.currentLinkBox == null) {\n this.isDown = false;\n this.isHold = false;\n return false;\n }\n\n // User is hovering a link, isDown is true\n // If isHold is true, then the select already happened so onUp shouldn't do anything\n if (!this.isHold) {\n // Cancel the timeout and open a new tab with the link\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.timeoutId = undefined;\n grid.props.onTokenClicked(this.currentLinkBox?.token);\n }\n\n this.isHold = false;\n this.isDown = false;\n\n return true;\n }\n}\n\nexport default GridTokenMouseHandler;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"GridTokenMouseHandler.js","names":["getOrThrow","isEditableGridModel","GridMouseHandler","GridRange","GridUtils","isLinkToken","isTokenBoxCellRenderer","GridTokenMouseHandler","constructor","arguments","_defineProperty","isHoveringLink","gridPoint","grid","column","row","x","y","renderer","metrics","props","model","currentLinkBox","undefined","modelRows","modelColumns","modelRow","modelColumn","renderType","renderTypeForCell","cellRenderer","getCellRenderer","_this$currentLinkBox","left","x1","top","y1","right","x2","bottom","y2","renderState","updateRenderState","tokensInCell","getTokenBoxesForVisibleCell","i","length","token","translatedTokenBox","translateTokenBox","setCursor","cursor","onMove","onDown","event","isUserHoveringLink","isModifierKeyDown","shiftKey","isDown","timeoutId","clearTimeout","isHold","setTimeout","clearSelectedRanges","focus","handleKeySelectAt","isEditableRange","makeCell","startEditing","HOLD_LENGTH","onClick","_this$currentLinkBox2","onTokenClicked"],"sources":["../../src/mouse-handlers/GridTokenMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n\nimport { getOrThrow } from '@deephaven/utils';\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { type EventHandlerResult } from '../EventHandlerResult';\nimport type Grid from '../Grid';\nimport GridMouseHandler, { type GridMouseEvent } from '../GridMouseHandler';\nimport GridRange from '../GridRange';\nimport GridUtils, {\n type GridPoint,\n isLinkToken,\n type TokenBox,\n} from '../GridUtils';\nimport { isTokenBoxCellRenderer } from '../TokenBoxCellRenderer';\n\n// Handler also helps with other tooltips\nclass GridTokenMouseHandler extends GridMouseHandler {\n timeoutId?: ReturnType<typeof setTimeout>;\n\n private isHold = false;\n\n private isDown = false;\n\n // Stores the current hovered token box if it exists with translated coordinates\n protected currentLinkBox?: TokenBox;\n\n private static HOLD_LENGTH = 1000;\n\n isHoveringLink(gridPoint: GridPoint, grid: Grid): boolean {\n const { column, row, x, y } = gridPoint;\n const { renderer, metrics, props } = grid;\n const { model } = props;\n\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n\n const { modelRows, modelColumns } = metrics;\n const modelRow = getOrThrow(modelRows, row);\n const modelColumn = getOrThrow(modelColumns, column);\n\n const renderType = model.renderTypeForCell(modelColumn, modelRow);\n const cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\n return false;\n }\n\n if (this.currentLinkBox != null) {\n const { x1: left, y1: top, x2: right, y2: bottom } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n\n const renderState = grid.updateRenderState();\n\n const tokensInCell = cellRenderer.getTokenBoxesForVisibleCell(\n column,\n row,\n renderState\n );\n\n // Loop through each link and check if cursor is in bounds\n for (let i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n const translatedTokenBox = GridUtils.translateTokenBox(\n tokensInCell[i],\n metrics\n );\n const { x1: left, x2: right, y1: top, y2: bottom } = translatedTokenBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n\n /**\n * Set the cursor to pointer when hovering over a link\n * @param gridPoint Mouse position information\n * @param grid The grid\n * @returns False\n */\n protected setCursor(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n } else {\n this.cursor = null;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.setCursor(gridPoint, grid);\n }\n\n onDown(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n // If a modifier key or shift is down, we don't want to handle it and set isDown to false so onUp won't handle it either\n if (\n GridUtils.isModifierKeyDown(event) ||\n event.shiftKey ||\n !isUserHoveringLink\n ) {\n return false;\n }\n\n this.isDown = true;\n\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.isHold = false;\n this.timeoutId = setTimeout(() => {\n this.isHold = true;\n const { column, row } = gridPoint;\n const { model } = grid.props;\n\n // After 1 second, select the row and if it is an input table, start editing\n grid.clearSelectedRanges();\n grid.focus();\n grid.handleKeySelectAt({ column, row }, 'replace');\n if (\n isEditableGridModel(model) &&\n column != null &&\n row != null &&\n model.isEditableRange(GridRange.makeCell(column, row))\n ) {\n grid.startEditing(column, row);\n }\n }, GridTokenMouseHandler.HOLD_LENGTH);\n\n return true;\n }\n\n onClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n if (!isUserHoveringLink || !this.isDown || this.currentLinkBox == null) {\n this.isDown = false;\n this.isHold = false;\n return false;\n }\n\n // User is hovering a link, isDown is true\n // If isHold is true, then the select already happened so onUp shouldn't do anything\n if (!this.isHold) {\n // Cancel the timeout and open a new tab with the link\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.timeoutId = undefined;\n grid.props.onTokenClicked(this.currentLinkBox?.token);\n }\n\n this.isHold = false;\n this.isDown = false;\n\n return true;\n }\n}\n\nexport default GridTokenMouseHandler;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "1.27.5-alpha-nodehttp2-config3.276eddc.0+276eddc",
3
+ "version": "1.29.0",
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": "^1.27.5-alpha-nodehttp2-config3.276eddc.0+276eddc",
34
+ "@deephaven/utils": "^1.29.0",
35
35
  "classnames": "^2.3.1",
36
36
  "color-convert": "^2.0.1",
37
37
  "event-target-shim": "^6.0.2",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "276eddcfddffb96837817e4c1d3ef3606f520b3c"
46
+ "gitHead": "ad3cce03a83989bc2ac6bc4f1847ab40a5cca760"
47
47
  }