@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.
- package/dist/Grid.d.ts +102 -43
- package/dist/Grid.d.ts.map +1 -1
- package/dist/Grid.js +442 -390
- package/dist/Grid.js.map +1 -1
- package/dist/GridA11yFallback.d.ts +26 -0
- package/dist/GridA11yFallback.d.ts.map +1 -0
- package/dist/GridA11yFallback.js +115 -0
- package/dist/GridA11yFallback.js.map +1 -0
- package/dist/GridA11yUtils.d.ts +89 -0
- package/dist/GridA11yUtils.d.ts.map +1 -0
- package/dist/GridA11yUtils.js +321 -0
- package/dist/GridA11yUtils.js.map +1 -0
- package/dist/GridRenderer.d.ts +9 -0
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +187 -39
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridRendererTypes.d.ts +3 -4
- package/dist/GridRendererTypes.d.ts.map +1 -1
- package/dist/GridRendererTypes.js.map +1 -1
- package/dist/GridSelectionUtils.d.ts +98 -0
- package/dist/GridSelectionUtils.d.ts.map +1 -0
- package/dist/GridSelectionUtils.js +180 -0
- package/dist/GridSelectionUtils.js.map +1 -0
- package/dist/RangedSelection.d.ts +120 -0
- package/dist/RangedSelection.d.ts.map +1 -0
- package/dist/RangedSelection.js +375 -0
- package/dist/RangedSelection.js.map +1 -0
- package/dist/Selection.d.ts +221 -0
- package/dist/Selection.d.ts.map +1 -0
- package/dist/Selection.js +71 -0
- package/dist/Selection.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/EditKeyHandler.js +3 -3
- package/dist/key-handlers/EditKeyHandler.js.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.d.ts +1 -0
- package/dist/key-handlers/SelectionKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.js +144 -138
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.js +6 -3
- package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts +1 -0
- package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +7 -0
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts +0 -9
- package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +41 -39
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridTokenMouseHandler.js +4 -1
- package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -1
- 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;
|
|
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
|
-
|
|
19
|
-
if (
|
|
20
|
-
|
|
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","
|
|
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;
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
var isInRange =
|
|
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
|
|
193
|
-
if (!isInRange &&
|
|
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
|
-
|
|
197
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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": "
|
|
46
|
+
"gitHead": "ad3cce03a83989bc2ac6bc4f1847ab40a5cca760"
|
|
47
47
|
}
|