From 99e75340a74c51690042aaaaf5e80258745950fd Mon Sep 17 00:00:00 2001 From: Dave Page Date: Thu, 15 Oct 2026 12:25:38 +0100 Subject: [PATCH] Fix CI: typecheck, lint, bundle and keyboard navigation regressions. The range selection change diverted every shift + key press away from normal handling, which broke shift + space row selection and shift + tab navigation even when enableRangeSelection was off. Only shift + arrow keys now extend the range, and only when range selection is enabled; the range mouse handlers are likewise only attached when it is enabled. Group rows no longer spread the range selection props onto their div (the TS2322 typecheck failure), and TreeDataGrid no longer leaks selectedCellsRange into group rows. The build toolchain floated to versions that no longer work: rolldown 1.x dropped cssEntryFileNames and CSS bundling, newer TanStack router rejects the route files, and newer rolldown-vite no longer pulls in esbuild for cssMinify. Pin rolldown and rolldown-plugin-dts exactly and commit a package-lock.json resolved as of 24 October 2025, so CI installs the toolchain the range selection change was written against. Also fix the ESLint warnings, keep Prettier off the generated lib/, add browser tests for the range selection keyboard behaviour and rebuild lib/. --- .gitignore | 1 - .prettierignore | 1 + lib/index.d.ts | 26 +- lib/index.js | 107 +- lib/index.js.map | 2 +- package-lock.json | 10701 +++++++++++++++++++++++++ package.json | 4 +- src/DataGrid.tsx | 93 +- src/GroupRow.tsx | 5 + src/TreeDataGrid.tsx | 4 +- test/browser/rangeSelection.test.tsx | 55 + website/routes/RangeSelection.tsx | 13 +- 12 files changed, 10898 insertions(+), 114 deletions(-) create mode 100644 package-lock.json create mode 100644 test/browser/rangeSelection.test.tsx diff --git a/.gitignore b/.gitignore index e792aa891d..4ff4b6de92 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ /coverage /dist /node_modules -/package-lock.json __screenshots__ npm-debug.log diff --git a/.prettierignore b/.prettierignore index 3b8c0ad9fb..c98035c9c7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ package.json /website/routeTree.gen.ts +/lib diff --git a/lib/index.d.ts b/lib/index.d.ts index a5fbdeebde..836660163e 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,14 +1,6 @@ -import * as react0$1 from "react"; import * as react0 from "react"; -import * as react6 from "react"; import { Key, ReactElement, ReactNode } from "react"; -import * as react_jsx_runtime0$1 from "react/jsx-runtime"; import * as react_jsx_runtime0 from "react/jsx-runtime"; -import * as react_jsx_runtime10 from "react/jsx-runtime"; -import * as react_jsx_runtime8 from "react/jsx-runtime"; -import * as react_jsx_runtime6 from "react/jsx-runtime"; -import * as react_jsx_runtime3 from "react/jsx-runtime"; -import * as react_jsx_runtime4 from "react/jsx-runtime"; //#region src/types.d.ts type Omit = Pick>; @@ -448,7 +440,7 @@ interface DataGridProps extends Shared * * */ -declare function DataGrid(props: DataGridProps): react_jsx_runtime0$1.JSX.Element; +declare function DataGrid(props: DataGridProps): react_jsx_runtime0.JSX.Element; //#endregion //#region src/TreeDataGrid.d.ts interface TreeDataGridProps extends Omit, 'columns' | 'role' | 'aria-rowcount' | 'rowHeight' | 'onFill' | 'isRowSelectionDisabled'> { @@ -481,7 +473,7 @@ declare function TreeDataGrid({ }: TreeDataGridProps): react_jsx_runtime0.JSX.Element; //#endregion //#region src/DataGridDefaultRenderersContext.d.ts -declare const DataGridDefaultRenderersContext: react0$1.Context>>; +declare const DataGridDefaultRenderersContext: react0.Context>>; //#endregion //#region src/Row.d.ts declare const RowComponent: (props: RenderRowProps) => React.JSX.Element; @@ -498,16 +490,16 @@ declare function renderCheckbox({ onChange, indeterminate, ...props -}: RenderCheckboxProps): react_jsx_runtime10.JSX.Element; +}: RenderCheckboxProps): react_jsx_runtime0.JSX.Element; //#endregion //#region src/cellRenderers/renderToggleGroup.d.ts -declare function renderToggleGroup(props: RenderGroupCellProps): react_jsx_runtime8.JSX.Element; +declare function renderToggleGroup(props: RenderGroupCellProps): react_jsx_runtime0.JSX.Element; declare function ToggleGroup({ groupKey, isExpanded, tabIndex, toggleGroup -}: RenderGroupCellProps): react_jsx_runtime8.JSX.Element; +}: RenderGroupCellProps): react_jsx_runtime0.JSX.Element; //#endregion //#region src/cellRenderers/renderValue.d.ts declare function renderValue(props: RenderCellProps): react0.ReactNode; @@ -525,7 +517,7 @@ declare function SelectCellFormatter({ onChange, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy -}: SelectCellFormatterProps): react6.ReactNode; +}: SelectCellFormatterProps): react0.ReactNode; //#endregion //#region src/editors/textEditor.d.ts declare function textEditor({ @@ -533,19 +525,19 @@ declare function textEditor({ column, onRowChange, onClose -}: RenderEditCellProps): react_jsx_runtime6.JSX.Element; +}: RenderEditCellProps): react_jsx_runtime0.JSX.Element; //#endregion //#region src/renderHeaderCell.d.ts declare function renderHeaderCell({ column, sortDirection, priority -}: RenderHeaderCellProps): string | react_jsx_runtime3.JSX.Element; +}: RenderHeaderCellProps): string | react_jsx_runtime0.JSX.Element; //#endregion //#region src/sortStatus.d.ts declare function renderSortIcon({ sortDirection -}: RenderSortIconProps): react_jsx_runtime4.JSX.Element | null; +}: RenderSortIconProps): react_jsx_runtime0.JSX.Element | null; declare function renderSortPriority({ priority }: RenderSortPriorityProps): number | undefined; diff --git a/lib/index.js b/lib/index.js index f54f59ce7c..b4adecfb54 100644 --- a/lib/index.js +++ b/lib/index.js @@ -616,7 +616,7 @@ function useCalculatedColumns({ rawColumns, defaultColumnOptions, getColumnWidth defaultDraggable ]); const { templateColumns, layoutCssVars, totalFrozenColumnWidth, columnMetrics } = useMemo(() => { - const columnMetrics$1 = new Map(); + const columnMetrics$1 = /* @__PURE__ */ new Map(); let left = 0; let totalFrozenColumnWidth$1 = 0; const templateColumns$1 = []; @@ -759,7 +759,7 @@ function useColumnWidths(columns, viewportColumns, templateColumns, gridRef, gri const { key: resizingKey } = column; flushSync(() => { if (columnsCanFlex) { - const columnsToRemeasure = new Set(); + const columnsToRemeasure = /* @__PURE__ */ new Set(); for (const { key, width } of viewportColumns) if (resizingKey !== key && typeof width === "string" && columnWidths.get(key)?.type !== "resized") columnsToRemeasure.add(key); setColumnsToMeasureOnResize(columnsToRemeasure); } @@ -1480,7 +1480,7 @@ var HeaderRow_default = memo(HeaderRow); //#region src/GroupedColumnHeaderRow.tsx function GroupedColumnHeaderRow({ rowIdx, level, columns, selectedCellIdx, selectCell }) { const cells = []; - const renderedParents = new Set(); + const renderedParents = /* @__PURE__ */ new Set(); for (const column of columns) { let { parent } = column; if (parent === void 0) continue; @@ -1712,6 +1712,9 @@ const initialSelectedRange = { endRowIdx: -1, endColumnIdx: -1 }; +function isRangeSelectionKey(key) { + return key === "ArrowUp" || key === "ArrowDown" || key === "ArrowLeft" || key === "ArrowRight"; +} /** * Main API Component to render a data grid of rows and columns * @@ -1742,7 +1745,7 @@ function DataGrid(props) { */ const [scrollTop, setScrollTop] = useState(0); const [scrollLeft, setScrollLeft] = useState(0); - const [columnWidthsInternal, setColumnWidthsInternal] = useState(() => columnWidthsRaw ?? new Map()); + const [columnWidthsInternal, setColumnWidthsInternal] = useState(() => columnWidthsRaw ?? /* @__PURE__ */ new Map()); const [isColumnResizing, setColumnResizing] = useState(false); const [isDragging, setDragging] = useState(false); const [draggedOverRowIdx, setDraggedOverRowIdx] = useState(void 0); @@ -1966,34 +1969,37 @@ function DataGrid(props) { const isCellEvent = event.target.closest(".rdg-cell") !== null; const isRowEvent = isTreeGrid && event.target === focusSinkRef.current; if (!isCellEvent && !isRowEvent) return; - if (event.shiftKey) switch (event.key) { - case "ArrowUp": - if (selectedRange.endRowIdx > 0) setSelectedRangeWithBoundary({ - ...selectedRange, - endRowIdx: selectedRange.endRowIdx - 1 - }); - break; - case "ArrowDown": - if (selectedRange.endRowIdx < rows.length - 1) setSelectedRangeWithBoundary({ - ...selectedRange, - endRowIdx: selectedRange.endRowIdx + 1 - }); - break; - case "ArrowRight": - if (selectedRange.endColumnIdx < columns.length - 1) setSelectedRangeWithBoundary({ - ...selectedRange, - endColumnIdx: selectedRange.endColumnIdx + 1 - }); - break; - case "ArrowLeft": - if (selectedRange.endColumnIdx > 0) setSelectedRangeWithBoundary({ - ...selectedRange, - endColumnIdx: selectedRange.endColumnIdx - 1 - }); - break; - default: break; + if (enableRangeSelection && event.shiftKey && isRangeSelectionKey(event.key)) { + switch (event.key) { + case "ArrowUp": + if (selectedRange.endRowIdx > 0) setSelectedRangeWithBoundary({ + ...selectedRange, + endRowIdx: selectedRange.endRowIdx - 1 + }); + break; + case "ArrowDown": + if (selectedRange.endRowIdx < rows.length - 1) setSelectedRangeWithBoundary({ + ...selectedRange, + endRowIdx: selectedRange.endRowIdx + 1 + }); + break; + case "ArrowRight": + if (selectedRange.endColumnIdx < columns.length - 1) setSelectedRangeWithBoundary({ + ...selectedRange, + endColumnIdx: selectedRange.endColumnIdx + 1 + }); + break; + case "ArrowLeft": + if (selectedRange.endColumnIdx > 0) setSelectedRangeWithBoundary({ + ...selectedRange, + endColumnIdx: selectedRange.endColumnIdx - 1 + }); + break; + default: break; + } + return; } - else switch (event.key) { + switch (event.key) { case "ArrowUp": case "ArrowDown": case "ArrowLeft": @@ -2010,6 +2016,18 @@ function DataGrid(props) { break; } } + function handleRangeMouseDown() { + setIsMouseRangeSelectionMode(true); + } + function handleRangeMouseUp() { + setIsMouseRangeSelectionMode(false); + setSelectedRange((boundValue) => ({ + startColumnIdx: Math.min(boundValue.startColumnIdx, boundValue.endColumnIdx), + endColumnIdx: Math.max(boundValue.startColumnIdx, boundValue.endColumnIdx), + startRowIdx: Math.min(boundValue.startRowIdx, boundValue.endRowIdx), + endRowIdx: Math.max(boundValue.startRowIdx, boundValue.endRowIdx) + })); + } function handleScroll(event) { const { scrollTop: scrollTop$1, scrollLeft: scrollLeft$1 } = event.currentTarget; flushSync(() => { @@ -2450,23 +2468,15 @@ function DataGrid(props) { selectCell: selectCellLatest, selectedCellEditor: getCellEditor(rowIdx), rangeSelectionMode: enableRangeSelection, - onMouseDownCapture: () => setIsMouseRangeSelectionMode(true), - onMouseUpCapture: () => { - setIsMouseRangeSelectionMode(false); - setSelectedRange((boundValue) => ({ - startColumnIdx: Math.min(boundValue.startColumnIdx, boundValue.endColumnIdx), - endColumnIdx: Math.max(boundValue.startColumnIdx, boundValue.endColumnIdx), - startRowIdx: Math.min(boundValue.startRowIdx, boundValue.endRowIdx), - endRowIdx: Math.max(boundValue.startRowIdx, boundValue.endRowIdx) - })); - }, - onMouseEnter: ({ column }) => { - if (isMouseRangeSelectionMode && enableRangeSelection) setSelectedRangeWithBoundary({ + onMouseDownCapture: enableRangeSelection ? handleRangeMouseDown : void 0, + onMouseUpCapture: enableRangeSelection ? handleRangeMouseUp : void 0, + onMouseEnter: enableRangeSelection ? ({ column }) => { + if (isMouseRangeSelectionMode) setSelectedRangeWithBoundary({ ...selectedRange, endRowIdx: rowIdx, endColumnIdx: column.idx }); - } + } : void 0 })); } return rowElements; @@ -2656,7 +2666,7 @@ var GroupCell_default = memo(GroupCell); //#region src/GroupRow.tsx const groupRow = "g1yxluv37-0-0-beta-58"; const groupRowClassname = `rdg-group-row ${groupRow}`; -function GroupedRow({ className, row: row$1, rowIdx, viewportColumns, selectedCellIdx, isRowSelected, selectCell, gridRowStart, groupBy, toggleGroup, isRowSelectionDisabled,...props }) { +function GroupedRow({ className, row: row$1, rowIdx, viewportColumns, selectedCellIdx, isRowSelected, selectCell, gridRowStart, groupBy, toggleGroup, isRowSelectionDisabled, rangeSelectionMode, onMouseDownCapture, onMouseUpCapture, onMouseEnter,...props }) { const idx = viewportColumns[0].key === SELECT_COLUMN_KEY ? row$1.level + 1 : row$1.level; function handleSelectGroup() { selectCell({ @@ -2756,7 +2766,7 @@ function TreeDataGrid({ columns: rawColumns, rows: rawRows, rowHeight: rawRowHei rawRows ]); const [rows, isGroupRow] = useMemo(() => { - const allGroupRows = new Set(); + const allGroupRows = /* @__PURE__ */ new Set(); if (!groupedRows) return [rawRows, isGroupRow$1]; const flattenedRows = []; const expandGroup = (rows$1, parentId, level) => { @@ -2916,7 +2926,7 @@ function TreeDataGrid({ columns: rawColumns, rows: rawRows, rowHeight: rawRowHei else newExpandedGroupIds.add(groupId); onExpandedGroupIdsChange(newExpandedGroupIds); } - function renderRow(key, { row: row$1, rowClass, onCellMouseDown, onCellClick, onCellDoubleClick, onCellContextMenu, onRowChange, lastFrozenColumnIndex, draggedOverCellIdx, selectedCellEditor,...rowProps }) { + function renderRow(key, { row: row$1, rowClass, onCellMouseDown, onCellClick, onCellDoubleClick, onCellContextMenu, onRowChange, lastFrozenColumnIndex, draggedOverCellIdx, selectedCellEditor, selectedCellsRange,...rowProps }) { if (isGroupRow(row$1)) { const { startRowIndex } = row$1; return /* @__PURE__ */ jsx(GroupRow_default, { @@ -2946,7 +2956,8 @@ function TreeDataGrid({ columns: rawColumns, rows: rawRows, rowHeight: rawRowHei onRowChange, lastFrozenColumnIndex, draggedOverCellIdx, - selectedCellEditor + selectedCellEditor, + selectedCellsRange }); } return /* @__PURE__ */ jsx(DataGrid, { diff --git a/lib/index.js.map b/lib/index.js.map index c9aec1dcf2..2fcc4aa026 100644 --- a/lib/index.js.map +++ b/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","names":["column: CalculatedColumn","lastFrozenColumnIndex: number","args: ColSpanArgs","event: React.SyntheticEvent","element: Maybe","behavior: ScrollBehavior","event: E","e: React.KeyboardEvent","event: React.KeyboardEvent","isUserHandlingPaste: boolean","direction: Maybe","CalculatedColumn","measuringCellClassname","renderMeasuringCells","viewportColumns","R","SR","map","key","idx","minWidth","maxWidth","gridColumnStart","row","column: CalculatedColumn","row: R","moveNext: boolean","moveNext","parent: CalculatedColumnParent","cell","cellClassname","cellFrozen","cellFrozenClassname","cellDragHandle","cellDragHandleFrozenClassname","cellDragHandleClassname","rowIdx: number","column: CalculatedColumnOrColumnGroup","rowSpan: number","column: CalculatedColumn","keyGetter: Maybe<(row: NoInfer) => K>","width: number","column: CalculatedColumnOrColumnGroup","rowIdx: number","value: number","num1: number","num2: number","RenderCheckboxProps","checkbox","checkboxClassname","renderCheckbox","onChange","indeterminate","props","handleChange","e","React","ChangeEvent","HTMLInputElement","target","checked","nativeEvent","MouseEvent","shiftKey","el","RenderGroupCellProps","groupCellContent","groupCellContentClassname","caret","caretClassname","renderToggleGroup","props","R","SR","ToggleGroup","groupKey","isExpanded","tabIndex","toggleGroup","handleKeyDown","key","React","KeyboardEvent","HTMLSpanElement","d","props: RenderCellProps","renderCheckbox","props: RenderHeaderCellProps","props: RenderCellProps","props: RenderGroupCellProps","SelectColumn: Column","RenderHeaderCellProps","useDefaultRenderers","headerSortCellClassname","headerSortName","headerSortNameClassname","renderHeaderCell","column","sortDirection","priority","R","SR","sortable","name","SharedHeaderCellProps","Pick","SortableHeaderCellProps","children","React","ReactNode","SortableHeaderCell","renderSortStatus","defaultRenderCell","lastFrozenColumnIndex","headerRowsCount","columns: MutableCalculatedColumn[]","rawColumns: readonly ColumnOrColumnGroup[]","level: number","parent?: MutableCalculatedColumnParent","rawColumns","calculatedColumnParent: MutableCalculatedColumnParent","column: MutableCalculatedColumn","colSpanColumns: CalculatedColumn[]","columnMetrics","totalFrozenColumnWidth","templateColumns: string[]","layoutCssVars: Record","colOverscanStartIdx","colOverscanEndIdx","column: MutableCalculatedColumn | MutableCalculatedColumnParent","index: number","columns: readonly CalculatedColumn[]","viewportColumns: readonly CalculatedColumn[]","templateColumns: readonly string[]","gridRef: React.RefObject","gridWidth: number","columnWidths: ColumnWidths","onColumnWidthsChange: (columnWidths: ColumnWidths) => void","onColumnResize: DataGridProps['onColumnResize']","setColumnResizing: (isColumnResizing: boolean) => void","columnsCanFlex: boolean","columnsToMeasure: string[]","column: CalculatedColumn","nextWidth: ResizedWidth","key: string","offsetHeight","clientHeight","fn: T","isSelected: boolean","event: React.FocusEvent","startIdx","colIdx: number","colSpan: number | undefined","row","viewportColumns: CalculatedColumn[]","rowIdx: number","offset: number","totalRowHeight","gridTemplateRows","currentHeight: number | null","row","memo","MouseEvent","useRovingTabIndex","createCellEvent","getCellClassname","getCellStyle","isCellEditableUtil","CellMouseEventHandler","CellRendererProps","cellDraggedOver","cellDraggedOverClassname","Cell","column","colSpan","isCellSelected","isDraggedOver","row","rowIdx","className","onMouseDown","onCellMouseDown","onClick","onCellClick","onDoubleClick","onCellDoubleClick","onContextMenu","onCellContextMenu","onRowChange","selectCell","style","rangeSelectionMode","onMouseDownCapture","onMouseUpCapture","onMouseEnter","props","R","SR","tabIndex","childTabIndex","onFocus","cellClass","isEditable","selectCellWrapper","enableEditor","idx","handleMouseEvent","event","React","HTMLDivElement","eventHandler","eventHandled","cellEvent","isGridDefaultPrevented","handleMouseDown","handleClick","handleDoubleClick","handleContextMenu","handleRowChange","newRow","undefined","e","renderCell","isCellEditable","CellComponent","JSX","Element","defaultRenderCell","key","Key","useEffectEvent","useLayoutEffect","useRef","createCellEvent","getCellClassname","getCellStyle","onEditorNavigation","CellKeyboardEvent","CellRendererProps","EditCellKeyDownArgs","Maybe","Omit","RenderEditCellProps","global","scheduler","Scheduler","postTask","callback","options","priority","signal","AbortSignal","delay","Promise","canUsePostTask","cellEditing","SharedCellRendererProps","Pick","R","SR","EditCellProps","rowIdx","onRowChange","row","commitChanges","shouldFocusCell","closeEditor","navigate","event","React","KeyboardEvent","HTMLDivElement","onKeyDown","args","EditCell","column","colSpan","captureEventRef","MouseEvent","undefined","abortControllerRef","AbortController","frameRequestRef","commitOnOutsideClick","editorOptions","commitOnOutsideMouseDown","onClose","onWindowCaptureMouseDown","current","abortController","catch","requestAnimationFrame","onWindowMouseDown","addEventListener","capture","removeEventListener","cancelTask","abort","cancelAnimationFrame","handleKeyDown","cellEvent","mode","isGridDefaultPrevented","key","onEditorRowChange","commitChangesAndFocus","cellClass","className","displayCellContent","idx","renderEditCell","renderCell","isCellEditable","tabIndex","useRef","useState","flushSync","useRovingTabIndex","clampColumnWidth","getCellClassname","getCellStyle","getHeaderCellRowSpan","getHeaderCellStyle","getLeftRightKey","isCtrlKeyHeldDown","stopPropagation","CalculatedColumn","SortColumn","HeaderRowProps","cellSortableClassname","cellResizable","cellResizableClassname","resizeHandle","resizeHandleClassname","cellDraggableClassname","cellDragging","cellDraggingClassname","cellOver","cellOverClassname","dragImageClassname","SharedHeaderRowProps","Pick","R","SR","React","Key","HeaderCellProps","column","colSpan","rowIdx","isCellSelected","draggedColumnKey","setDraggedColumnKey","HeaderCell","onColumnResize","onColumnResizeEnd","onColumnsReorder","sortColumns","onSortColumnsChange","selectCell","shouldFocusGrid","direction","isOver","setIsOver","dragImageRef","HTMLDivElement","isDragging","key","rowSpan","tabIndex","childTabIndex","onFocus","sortIndex","findIndex","sort","columnKey","sortColumn","undefined","sortDirection","priority","length","ariaSort","sortable","resizable","draggable","className","headerCellClass","onSort","ctrlClick","sortDescendingFirst","nextSort","nextSortColumn","nextSortColumns","splice","handleFocus","event","FocusEvent","idx","onMouseDown","onClick","MouseEvent","HTMLSpanElement","ctrlKey","metaKey","onKeyDown","KeyboardEvent","preventDefault","width","currentTarget","getBoundingClientRect","leftKey","offset","newWidth","onDragStart","DragEvent","dataTransfer","setDragImage","current","dropEffect","onDragEnd","onDragOver","onDrop","onDragEnter","isEventPertinent","onDragLeave","dragTargetProps","ComponentProps","dropTargetProps","style","CSSProperties","content","renderHeaderCell","ResizeHandleProps","ResizeHandle","resizingOffsetRef","isRtl","onPointerDown","PointerEvent","pointerType","buttons","pointerId","setPointerCapture","headerCell","parentElement","right","left","clientX","onPointerMove","onLostPointerCapture","onDoubleClick","relatedTarget","HTMLElement","contains","row","rowClassname","rowSelected","rowSelectedClassname","rowSelectedWithFrozenCell","topSummaryRowClassname","bottomSummaryRowClassname","memo","useState","classnames","getColSpan","CalculatedColumn","Direction","Maybe","Position","ResizedWidth","DataGridProps","HeaderCell","rowSelectedClassname","SharedDataGridProps","React","Key","Pick","R","SR","K","HeaderRowProps","rowIdx","columns","onColumnResize","column","width","onColumnResizeEnd","selectCell","position","lastFrozenColumnIndex","selectedCellIdx","shouldFocusGrid","direction","headerRowClass","headerRow","headerRowClassname","HeaderRow","onColumnsReorder","sortColumns","onSortColumnsChange","draggedColumnKey","setDraggedColumnKey","cells","index","length","colSpan","type","undefined","push","key","idx","props","JSX","Element","column: CalculatedColumn","newRow: R","row","key: React.Key","props: RenderRowProps","RenderSortIconProps","RenderSortPriorityProps","RenderSortStatusProps","arrow","arrowClassname","renderSortStatus","sortDirection","priority","renderSortIcon","renderSortPriority","undefined","root","rootClassname","viewportDragging","viewportDraggingClassname","focusSinkClassname","focusSinkHeaderAndSummaryClassname","memo","useRovingTabIndex","getCellClassname","getCellStyle","CellRendererProps","summaryCellClassname","SharedCellRendererProps","Pick","R","SR","SummaryCellProps","row","SummaryCell","column","colSpan","rowIdx","isCellSelected","selectCell","tabIndex","childTabIndex","onFocus","summaryCellClass","className","onMouseDown","idx","renderSummaryCell","props","React","JSX","Element","memo","classnames","getColSpan","getRowStyle","RenderRowProps","bottomSummaryRowClassname","rowClassname","rowSelectedClassname","topSummaryRowClassname","SummaryCell","SharedRenderRowProps","Pick","R","SR","SummaryRowProps","row","top","bottom","lastFrozenColumnIndex","selectedCellIdx","isTop","summaryRow","topSummaryRow","summaryRowClassname","SummaryRow","rowIdx","gridRowStart","viewportColumns","selectCell","ariaRowIndex","cells","index","length","column","colSpan","type","undefined","isCellSelected","idx","push","key","props","React","JSX","Element","initialSelectedRange: CellsRange","props: DataGridProps","renderSortStatus","defaultRenderSortStatus","renderCheckbox","defaultRenderCheckbox","columnWidths: ColumnWidths","columnWidths","column: CalculatedColumn","row","value: CellsRange","cell","args: SelectHeaderRowEvent","args: SelectRowEvent","event: KeyboardEvent","event: React.UIEvent","scrollTop","scrollLeft","rowIdx: number","row: R","event: CellClipboardEvent","event: React.PointerEvent","event: React.MouseEvent","startRowIdx: number","endRowIdx: number","indexes: number[]","idx: number","position: Position","options?: SelectCellOptions","key: string","ctrlKey: boolean","shiftKey: boolean","cellNavigationMode: CellNavigationMode","currentRowIdx: number","style","dragHandleStyle: React.CSSProperties","shouldFocusCell: boolean","shouldFocusCell","commitChanges: boolean","rowElements: React.ReactNode[]","key: K | number","GroupedColumnHeaderRow","HeaderRow","SummaryRow","gridEl: HTMLDivElement","p1: Position","p2: Position","memo","useMemo","RowSelectionContext","RowSelectionContextValue","classnames","getRowStyle","BaseRenderRowProps","GroupRow","SELECT_COLUMN_KEY","GroupCell","rowClassname","rowSelectedClassname","groupRow","groupRowClassname","GroupRowRendererProps","R","SR","row","groupBy","toggleGroup","expandedGroupId","GroupedRow","className","rowIdx","viewportColumns","selectedCellIdx","isRowSelected","selectCell","gridRowStart","isRowSelectionDisabled","props","idx","key","level","handleSelectGroup","shouldFocusCell","selectionValue","setSize","posInSet","isExpanded","map","column","id","groupKey","childRows","includes","React","JSX","Element","columns","groupBy: string[]","rows: readonly R[]","startRowIndex: number","groups: GroupByDictionary","rows","isGroupRow","flattenedRows: Array>","rows: GroupByDictionary | readonly R[]","parentId: string | undefined","level: number","groupRow: GroupRow","groupRow","row: R | GroupRow","row","selectedRows","newSelectedRows: Set","args: CellKeyDownArgs","event: CellKeyboardEvent","event: CellClipboardEvent","updatedRows: R[]","rawIndexes: number[]","groupId: unknown","key: Key","GroupedRow","groupKey: string","arr: unknown","RenderEditCellProps","textEditorInternalClassname","textEditorClassname","autoFocusAndSelect","input","HTMLInputElement","focus","select","textEditor","row","column","onRowChange","onClose","TRow","TSummaryRow","key","event","target","value"],"sources":["../src/utils/colSpanUtils.ts","../src/utils/domUtils.ts","../src/utils/eventUtils.ts","../src/utils/keyboardUtils.ts","../src/utils/renderMeasuringCells.tsx","../src/utils/selectedCellUtils.ts","../src/style/cell.ts","../src/utils/styleUtils.ts","../src/utils/index.ts","../src/cellRenderers/renderCheckbox.tsx","../src/cellRenderers/renderToggleGroup.tsx","../src/cellRenderers/renderValue.tsx","../src/DataGridDefaultRenderersContext.ts","../src/cellRenderers/SelectCellFormatter.tsx","../src/hooks/useRowSelection.ts","../src/Columns.tsx","../src/renderHeaderCell.tsx","../src/hooks/useCalculatedColumns.ts","../src/hooks/useColumnWidths.ts","../src/hooks/useGridDimensions.ts","../src/hooks/useLatestFunc.ts","../src/hooks/useRovingTabIndex.ts","../src/hooks/useViewportColumns.ts","../src/hooks/useViewportRows.ts","../src/Cell.tsx","../src/EditCell.tsx","../src/GroupedColumnHeaderCell.tsx","../src/HeaderCell.tsx","../src/style/row.ts","../src/HeaderRow.tsx","../src/GroupedColumnHeaderRow.tsx","../src/Row.tsx","../src/ScrollToCell.tsx","../src/sortStatus.tsx","../src/style/core.ts","../src/SummaryCell.tsx","../src/SummaryRow.tsx","../src/DataGrid.tsx","../src/GroupCell.tsx","../src/GroupRow.tsx","../src/TreeDataGrid.tsx","../src/editors/textEditor.tsx"],"sourcesContent":["import type { CalculatedColumn, ColSpanArgs } from '../types';\n\nexport function getColSpan(\n column: CalculatedColumn,\n lastFrozenColumnIndex: number,\n args: ColSpanArgs\n): number | undefined {\n const colSpan = typeof column.colSpan === 'function' ? column.colSpan(args) : 1;\n if (\n Number.isInteger(colSpan) &&\n colSpan! > 1 &&\n // ignore colSpan if it spans over both frozen and regular columns\n (!column.frozen || column.idx + colSpan! - 1 <= lastFrozenColumnIndex)\n ) {\n return colSpan!;\n }\n return undefined;\n}\n","import type { Maybe } from '../types';\n\nexport function stopPropagation(event: React.SyntheticEvent) {\n event.stopPropagation();\n}\n\nexport function scrollIntoView(element: Maybe, behavior: ScrollBehavior = 'instant') {\n element?.scrollIntoView({ inline: 'nearest', block: 'nearest', behavior });\n}\n","import type { CellEvent } from '../types';\n\nexport function createCellEvent>(\n event: E\n): CellEvent {\n let defaultPrevented = false;\n const cellEvent = {\n ...event,\n preventGridDefault() {\n defaultPrevented = true;\n },\n isGridDefaultPrevented() {\n return defaultPrevented;\n }\n };\n\n Object.setPrototypeOf(cellEvent, Object.getPrototypeOf(event));\n\n return cellEvent;\n}\n","import type { Direction, Maybe } from '../types';\n\n// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\nconst nonInputKeys = new Set([\n // Special keys\n 'Unidentified',\n // Modifier keys\n 'Alt',\n 'AltGraph',\n 'CapsLock',\n 'Control',\n 'Fn',\n 'FnLock',\n 'Meta',\n 'NumLock',\n 'ScrollLock',\n 'Shift',\n // Whitespace keys\n 'Tab',\n // Navigation keys\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'End',\n 'Home',\n 'PageDown',\n 'PageUp',\n // Editing\n 'Insert',\n // UI keys\n 'ContextMenu',\n 'Escape',\n 'Pause',\n 'Play',\n // Device keys\n 'PrintScreen',\n // Function keys\n 'F1',\n // 'F2', /!\\ specifically allowed, do not edit\n 'F3',\n 'F4',\n 'F5',\n 'F6',\n 'F7',\n 'F8',\n 'F9',\n 'F10',\n 'F11',\n 'F12'\n]);\n\nexport function isCtrlKeyHeldDown(e: React.KeyboardEvent): boolean {\n return (e.ctrlKey || e.metaKey) && e.key !== 'Control';\n}\n\n// event.key may differ by keyboard input language, so we use event.keyCode instead\n// event.nativeEvent.code cannot be used either as it would break copy/paste for the DVORAK layout\nconst vKey = 86;\n\nexport function isDefaultCellInput(\n event: React.KeyboardEvent,\n isUserHandlingPaste: boolean\n): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (isCtrlKeyHeldDown(event) && (event.keyCode !== vKey || isUserHandlingPaste)) return false;\n return !nonInputKeys.has(event.key);\n}\n\n/**\n * By default, the following navigation keys are enabled while an editor is open, under specific conditions:\n * - Tab:\n * - The editor must be an , a