{"version":3,"file":"bundle.cjs","sources":["../src/utils/domUtils.ts","../src/utils/keyboardUtils.ts","../src/utils/selectedCellUtils.ts","../src/utils/index.ts","../src/FilterRow.tsx","../src/hooks/useFocusRef.ts","../src/formatters/SelectCellFormatter.tsx","../src/formatters/ValueFormatter.tsx","../src/formatters/ToggleGroupFormatter.tsx","../src/Columns.tsx","../src/GroupCell.tsx","../src/GroupRow.tsx","../src/headerCells/SortableHeaderCell.tsx","../src/HeaderCell.tsx","../src/HeaderRow.tsx","../src/hooks/useCombinedRefs.ts","../src/hooks/useClickOutside.ts","../src/hooks/useGridDimensions.ts","../src/hooks/useViewportColumns.ts","../src/hooks/useViewportRows.ts","../src/hooks/useLatestFunc.ts","../src/Cell.tsx","../src/editors/EditorContainer.tsx","../src/EditCell.tsx","../src/Row.tsx","../src/SummaryCell.tsx","../src/SummaryRow.tsx","../src/DataGrid.tsx","../src/editors/TextEditor.tsx"],"sourcesContent":["export function stopPropagation(event: React.SyntheticEvent) {\n  event.stopPropagation();\n}\n\nexport function wrapEvent<E extends React.SyntheticEvent>(ourHandler: React.EventHandler<E>, theirHandler: React.EventHandler<E> | undefined) {\n  if (theirHandler === undefined) return ourHandler;\n\n  return function(event: E) {\n    ourHandler(event);\n    theirHandler(event);\n  };\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\nexport function isDefaultCellInput(event: React.KeyboardEvent<HTMLDivElement>): boolean {\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 <input>, a <textarea>, or a <select> element.\n *   - The editor element must be the only immediate child of the editor container/a label.\n */\nexport function onEditorNavigation({ key, target }: React.KeyboardEvent<HTMLDivElement>): boolean {\n  if (key === 'Tab' && (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement)) {\n    return target.matches('.rdg-editor-container > :only-child, .rdg-editor-container > label:only-child > :only-child');\n  }\n  return false;\n}\n","import type { CellNavigationMode } from '../enums';\nimport type { CalculatedColumn, Position, GroupRow } from '../types';\n\ninterface IsSelectedCellEditableOpts<R, SR> {\n  selectedPosition: Position;\n  columns: readonly CalculatedColumn<R, SR>[];\n  rows: readonly (R | GroupRow<R>)[];\n  isGroupRow: (row: R | GroupRow<R>) => row is GroupRow<R>;\n}\n\nexport function isSelectedCellEditable<R, SR>({ selectedPosition, columns, rows, isGroupRow }: IsSelectedCellEditableOpts<R, SR>): boolean {\n  const column = columns[selectedPosition.idx];\n  const row = rows[selectedPosition.rowIdx];\n  return column.editor != null\n    && !column.rowGroup\n    && !isGroupRow(row)\n    && (typeof column.editable === 'function' ? column.editable(row) : column.editable) !== false;\n}\n\ninterface GetNextSelectedCellPositionOpts<R, SR> {\n  cellNavigationMode: CellNavigationMode;\n  columns: readonly CalculatedColumn<R, SR>[];\n  rowsCount: number;\n  nextPosition: Position;\n}\n\nexport function getNextSelectedCellPosition<R, SR>({ cellNavigationMode, columns, rowsCount, nextPosition }: GetNextSelectedCellPositionOpts<R, SR>): Position {\n  if (cellNavigationMode !== 'NONE') {\n    const { idx, rowIdx } = nextPosition;\n    const columnsCount = columns.length;\n    const isAfterLastColumn = idx === columnsCount;\n    const isBeforeFirstColumn = idx === -1;\n\n    if (isAfterLastColumn) {\n      if (cellNavigationMode === 'CHANGE_ROW') {\n        const isLastRow = rowIdx === rowsCount - 1;\n        if (!isLastRow) {\n          return {\n            idx: 0,\n            rowIdx: rowIdx + 1\n          };\n        }\n      } else if (cellNavigationMode === 'LOOP_OVER_ROW') {\n        return {\n          rowIdx,\n          idx: 0\n        };\n      }\n    } else if (isBeforeFirstColumn) {\n      if (cellNavigationMode === 'CHANGE_ROW') {\n        const isFirstRow = rowIdx === 0;\n        if (!isFirstRow) {\n          return {\n            rowIdx: rowIdx - 1,\n            idx: columnsCount - 1\n          };\n        }\n      } else if (cellNavigationMode === 'LOOP_OVER_ROW') {\n        return {\n          rowIdx,\n          idx: columnsCount - 1\n        };\n      }\n    }\n  }\n\n  return nextPosition;\n}\n\ninterface CanExitGridOpts<R, SR> {\n  cellNavigationMode: CellNavigationMode;\n  columns: readonly CalculatedColumn<R, SR>[];\n  rowsCount: number;\n  selectedPosition: Position;\n  shiftKey: boolean;\n}\n\nexport function canExitGrid<R, SR>({ cellNavigationMode, columns, rowsCount, selectedPosition: { rowIdx, idx }, shiftKey }: CanExitGridOpts<R, SR>): boolean {\n  // When the cellNavigationMode is 'none' or 'changeRow', you can exit the grid if you're at the first or last cell of the grid\n  // When the cellNavigationMode is 'loopOverRow', there is no logical exit point so you can't exit the grid\n  if (cellNavigationMode === 'NONE' || cellNavigationMode === 'CHANGE_ROW') {\n    const atLastCellInRow = idx === columns.length - 1;\n    const atFirstCellInRow = idx === 0;\n    const atLastRow = rowIdx === rowsCount - 1;\n    const atFirstRow = rowIdx === 0;\n\n    return shiftKey ? atFirstCellInRow && atFirstRow : atLastCellInRow && atLastRow;\n  }\n\n  return false;\n}\n","import type { CalculatedColumn } from '../types';\n\nexport * from './domUtils';\nexport * from './keyboardUtils';\nexport * from './selectedCellUtils';\n\nexport function assertIsValidKeyGetter<R>(keyGetter: unknown): asserts keyGetter is (row: R) => React.Key {\n  if (typeof keyGetter !== 'function') {\n    throw new Error('Please specify the rowKeyGetter prop to use selection');\n  }\n}\n\nexport function getCellStyle<R, SR>(column: CalculatedColumn<R, SR>): React.CSSProperties {\n  return column.frozen\n    ? { left: `var(--frozen-left-${column.key})` }\n    : { gridColumnStart: column.idx + 1 };\n}\n","import { memo } from 'react';\nimport clsx from 'clsx';\n\nimport { getCellStyle } from './utils';\nimport type { CalculatedColumn, Filters } from './types';\nimport type { DataGridProps } from './DataGrid';\n\ntype SharedDataGridProps<R, SR> = Pick<DataGridProps<R, SR>,\n  | 'filters'\n  | 'onFiltersChange'\n>;\n\ninterface FilterRowProps<R, SR> extends SharedDataGridProps<R, SR> {\n  columns: readonly CalculatedColumn<R, SR>[];\n}\n\nfunction FilterRow<R, SR>({\n  columns,\n  filters,\n  onFiltersChange\n}: FilterRowProps<R, SR>) {\n  function onChange(key: string, value: unknown) {\n    const newFilters: Filters = { ...filters };\n    newFilters[key] = value;\n    onFiltersChange?.(newFilters);\n  }\n\n  return (\n    <div\n      role=\"row\"\n      aria-rowindex={2}\n      className=\"rdg-filter-row\"\n    >\n      {columns.map(column => {\n        const { key } = column;\n        const className = clsx('rdg-cell', {\n          'rdg-cell-frozen': column.frozen,\n          'rdg-cell-frozen-last': column.isLastFrozenColumn\n        });\n\n        return (\n          <div\n            key={key}\n            className={className}\n            style={getCellStyle(column)}\n          >\n            {column.filterRenderer && (\n              <column.filterRenderer\n                column={column}\n                value={filters?.[column.key]}\n                onChange={value => onChange(key, value)}\n              />\n            )}\n          </div>\n        );\n      })}\n    </div>\n  );\n}\n\nexport default memo(FilterRow) as <R, SR>(props: FilterRowProps<R, SR>) => JSX.Element;\n","import { useRef, useLayoutEffect } from 'react';\n\nexport function useFocusRef<T extends HTMLOrSVGElement>(isCellSelected: boolean | undefined) {\n  const ref = useRef<T>(null);\n  useLayoutEffect(() => {\n    if (!isCellSelected) return;\n    ref.current?.focus({ preventScroll: true });\n  }, [isCellSelected]);\n\n  return ref;\n}\n","import clsx from 'clsx';\n\nimport { useFocusRef } from '../hooks/useFocusRef';\n\ntype SharedInputProps = Pick<React.InputHTMLAttributes<HTMLInputElement>,\n  | 'disabled'\n  | 'tabIndex'\n  | 'onClick'\n  | 'aria-label'\n  | 'aria-labelledby'\n>;\n\ninterface SelectCellFormatterProps extends SharedInputProps {\n  isCellSelected?: boolean;\n  value: boolean;\n  onChange: (value: boolean, isShiftClick: boolean) => void;\n}\n\nexport function SelectCellFormatter({\n  value,\n  tabIndex,\n  isCellSelected,\n  disabled,\n  onClick,\n  onChange,\n  'aria-label': ariaLabel,\n  'aria-labelledby': ariaLabelledBy\n}: SelectCellFormatterProps) {\n  const inputRef = useFocusRef<HTMLInputElement>(isCellSelected);\n\n  function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n    onChange(e.target.checked, (e.nativeEvent as MouseEvent).shiftKey);\n  }\n\n  return (\n    <label className={clsx('rdg-checkbox-label', { 'rdg-checkbox-label-disabled': disabled })}>\n      <input\n        aria-label={ariaLabel}\n        aria-labelledby={ariaLabelledBy}\n        tabIndex={tabIndex}\n        ref={inputRef}\n        type=\"checkbox\"\n        className=\"rdg-checkbox-input\"\n        disabled={disabled}\n        checked={value}\n        onChange={handleChange}\n        onClick={onClick}\n      />\n      <div className=\"rdg-checkbox\" />\n    </label>\n  );\n}\n","import type { FormatterProps } from '../types';\n\nexport function ValueFormatter<R, SR>(props: FormatterProps<R, SR>) {\n  try {\n    return <>{props.row[props.column.key as keyof R]}</>;\n  } catch {\n    return null;\n  }\n}\n","import type { GroupFormatterProps } from '../types';\nimport { useFocusRef } from '../hooks/useFocusRef';\n\nexport function ToggleGroupFormatter<R, SR>({\n  groupKey,\n  isExpanded,\n  isCellSelected,\n  toggleGroup\n}: GroupFormatterProps<R, SR>) {\n  const cellRef = useFocusRef<HTMLSpanElement>(isCellSelected);\n\n  function handleKeyDown({ key }: React.KeyboardEvent<HTMLSpanElement>) {\n    if (key === 'Enter') {\n      toggleGroup();\n    }\n  }\n\n  const d = isExpanded ? 'M1 1 L 7 7 L 13 1' : 'M1 7 L 7 1 L 13 7';\n\n  return (\n    <span\n      ref={cellRef}\n      className=\"rdg-group-cell-content\"\n      tabIndex={-1}\n      onKeyDown={handleKeyDown}\n    >\n      {groupKey}\n      <svg viewBox=\"0 0 14 8\" width=\"14\" height=\"8\" className=\"rdg-caret\">\n        <path d={d} />\n      </svg>\n    </span>\n  );\n}\n","import { SelectCellFormatter } from './formatters';\nimport type { Column } from './types';\nimport { stopPropagation } from './utils/domUtils';\n\nexport const SELECT_COLUMN_KEY = 'select-row';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const SelectColumn: Column<any, any> = {\n  key: SELECT_COLUMN_KEY,\n  name: '',\n  width: 35,\n  maxWidth: 35,\n  resizable: false,\n  sortable: false,\n  frozen: true,\n  headerRenderer(props) {\n    return (\n      <SelectCellFormatter\n        aria-label=\"Select All\"\n        value={props.allRowsSelected}\n        onChange={props.onAllRowsSelectionChange}\n      />\n    );\n  },\n  formatter(props) {\n    return (\n      <SelectCellFormatter\n        aria-label=\"Select\"\n        tabIndex={-1}\n        isCellSelected={props.isCellSelected}\n        value={props.isRowSelected}\n        onClick={stopPropagation}\n        onChange={props.onRowSelectionChange}\n      />\n    );\n  },\n  groupFormatter(props) {\n    return (\n      <SelectCellFormatter\n        aria-label=\"Select Group\"\n        tabIndex={-1}\n        isCellSelected={props.isCellSelected}\n        value={props.isRowSelected}\n        onChange={props.onRowSelectionChange}\n        // Stop propagation to prevent row selection\n        onClick={stopPropagation}\n      />\n    );\n  }\n};\n","import { memo } from 'react';\nimport clsx from 'clsx';\n\nimport { getCellStyle } from './utils';\nimport type { CalculatedColumn } from './types';\nimport type { GroupRowRendererProps } from './GroupRow';\n\ntype SharedGroupRowRendererProps<R, SR> = Pick<GroupRowRendererProps<R, SR>,\n  | 'id'\n  | 'rowIdx'\n  | 'groupKey'\n  | 'childRows'\n  | 'isExpanded'\n  | 'isRowSelected'\n  | 'selectRow'\n  | 'toggleGroup'\n>;\n\ninterface GroupCellProps<R, SR> extends SharedGroupRowRendererProps<R, SR> {\n  column: CalculatedColumn<R, SR>;\n  isCellSelected: boolean;\n  groupColumnIndex: number;\n}\n\nfunction GroupCell<R, SR>({\n  id,\n  rowIdx,\n  groupKey,\n  childRows,\n  isExpanded,\n  isCellSelected,\n  isRowSelected,\n  column,\n  groupColumnIndex,\n  selectRow,\n  toggleGroup: toggleGroupWrapper\n}: GroupCellProps<R, SR>) {\n  function toggleGroup() {\n    toggleGroupWrapper(id);\n  }\n\n  function onRowSelectionChange(checked: boolean) {\n    selectRow({ rowIdx, checked, isShiftClick: false });\n  }\n\n  // Only make the cell clickable if the group level matches\n  const isLevelMatching = column.rowGroup && groupColumnIndex === column.idx;\n\n  return (\n    <div\n      role=\"gridcell\"\n      aria-colindex={column.idx + 1}\n      key={column.key}\n      className={clsx('rdg-cell', {\n        'rdg-cell-frozen': column.frozen,\n        'rdg-cell-frozen-last': column.isLastFrozenColumn,\n        'rdg-cell-selected': isCellSelected\n      })}\n      style={{\n        ...getCellStyle(column),\n        cursor: isLevelMatching ? 'pointer' : 'default'\n      }}\n      onClick={isLevelMatching ? toggleGroup : undefined}\n    >\n      {column.groupFormatter && (!column.rowGroup || groupColumnIndex === column.idx) && (\n        <column.groupFormatter\n          groupKey={groupKey}\n          childRows={childRows}\n          column={column}\n          isExpanded={isExpanded}\n          isCellSelected={isCellSelected}\n          isRowSelected={isRowSelected}\n          onRowSelectionChange={onRowSelectionChange}\n          toggleGroup={toggleGroup}\n        />\n      )}\n    </div>\n  );\n}\n\nexport default memo(GroupCell) as <R, SR>(props: GroupCellProps<R, SR>) => JSX.Element;\n","import clsx from \"clsx\";\nimport { memo } from \"react\";\nimport { SELECT_COLUMN_KEY } from \"./Columns\";\nimport GroupCell from \"./GroupCell\";\nimport type { CalculatedColumn, Omit, Position, SelectRowEvent } from \"./types\";\n\nexport interface GroupRowRendererProps<R, SR = unknown>\n  extends Omit<React.HTMLAttributes<HTMLDivElement>, \"style\" | \"children\"> {\n  id: string;\n  groupKey: unknown;\n  viewportColumns: readonly CalculatedColumn<R, SR>[];\n  childRows: readonly R[];\n  rowIdx: number;\n  top: number;\n  level: number;\n  selectedCellIdx?: number;\n  isExpanded: boolean;\n  isRowSelected: boolean;\n  selectCell: (\n    position: Position,\n    enableEditor?: boolean,\n    shiftKey?: boolean\n  ) => void;\n  selectRow: (selectRowEvent: SelectRowEvent) => void;\n  toggleGroup: (expandedGroupId: unknown) => void;\n}\n\nfunction GroupedRow<R, SR>({\n  id,\n  groupKey,\n  viewportColumns,\n  childRows,\n  rowIdx,\n  top,\n  level,\n  isExpanded,\n  selectedCellIdx,\n  isRowSelected,\n  selectCell,\n  selectRow,\n  toggleGroup,\n  ...props\n}: GroupRowRendererProps<R, SR>) {\n  // Select is always the first column\n  const idx = viewportColumns[0].key === SELECT_COLUMN_KEY ? level + 1 : level;\n\n  function selectGroup() {\n    selectCell({ rowIdx, idx: -1 });\n  }\n\n  return (\n    <div\n      role=\"row\"\n      aria-level={level}\n      aria-expanded={isExpanded}\n      className={clsx(\n        \"rdg-row\",\n        \"rdg-group-row\",\n        `rdg-row-${rowIdx % 2 === 0 ? \"even\" : \"odd\"}`,\n        {\n          \"rdg-row-selected\": isRowSelected,\n          \"rdg-group-row-selected\": selectedCellIdx === -1, // Select row if there is no selected cell\n        }\n      )}\n      onClick={selectGroup}\n      style={{ top }}\n      {...props}\n    >\n      {viewportColumns.map((column) => (\n        <GroupCell<R, SR>\n          key={column.key}\n          id={id}\n          rowIdx={rowIdx}\n          groupKey={groupKey}\n          childRows={childRows}\n          isExpanded={isExpanded}\n          isRowSelected={isRowSelected}\n          isCellSelected={selectedCellIdx === column.idx}\n          column={column}\n          groupColumnIndex={idx}\n          selectRow={selectRow}\n          toggleGroup={toggleGroup}\n        />\n      ))}\n    </div>\n  );\n}\n\nexport default memo(GroupedRow) as <R, SR>(\n  props: GroupRowRendererProps<R, SR>\n) => JSX.Element;\n","import type { HeaderCellProps } from '../HeaderCell';\nimport type { SortDirection } from '../enums';\n\ntype SharedHeaderCellProps<R, SR> = Pick<HeaderCellProps<R, SR>,\n  | 'column'\n  | 'sortColumn'\n  | 'sortDirection'\n  | 'onSort'\n>;\n\ninterface Props<R, SR> extends SharedHeaderCellProps<R, SR> {\n  children: React.ReactNode;\n}\n\nexport default function SortableHeaderCell<R, SR>({\n  column,\n  onSort,\n  sortColumn,\n  sortDirection,\n  children\n}: Props<R, SR>) {\n  sortDirection = sortColumn === column.key && sortDirection || 'NONE';\n  let sortText = '';\n  if (sortDirection === 'ASC') {\n    sortText = '\\u25B2';\n  } else if (sortDirection === 'DESC') {\n    sortText = '\\u25BC';\n  }\n\n  function onClick() {\n    if (!onSort) return;\n    const { sortDescendingFirst } = column;\n    let direction: SortDirection;\n    switch (sortDirection) {\n      case 'ASC':\n        direction = sortDescendingFirst ? 'NONE' : 'DESC';\n        break;\n      case 'DESC':\n        direction = sortDescendingFirst ? 'ASC' : 'NONE';\n        break;\n      default:\n        direction = sortDescendingFirst ? 'DESC' : 'ASC';\n        break;\n    }\n    onSort(column.key, direction);\n  }\n\n  return (\n    <span className=\"rdg-header-sort-cell\" onClick={onClick}>\n      <span className=\"rdg-header-sort-name\">{children}</span>\n      <span>{sortText}</span>\n    </span>\n  );\n}\n","import clsx from 'clsx';\nimport type { SortDirection } from './enums';\nimport SortableHeaderCell from './headerCells/SortableHeaderCell';\nimport type { HeaderRowProps } from './HeaderRow';\nimport type { CalculatedColumn } from './types';\nimport { getCellStyle } from './utils';\n\nfunction getAriaSort(sortDirection?: SortDirection) {\n  switch (sortDirection) {\n    case 'ASC':\n      return 'ascending';\n    case 'DESC':\n      return 'descending';\n    default:\n      return 'none';\n  }\n}\n\ntype SharedHeaderRowProps<R, SR> = Pick<\n  HeaderRowProps<R, SR>,\n  'sortColumn' | 'sortDirection' | 'onSort' | 'allRowsSelected'\n>;\n\nexport interface HeaderCellProps<R, SR> extends SharedHeaderRowProps<R, SR> {\n  column: CalculatedColumn<R, SR>;\n  onResize: (column: CalculatedColumn<R, SR>, width: number) => void;\n  onAllRowsSelectionChange: (checked: boolean) => void;\n}\n\nexport default function HeaderCell<R, SR>({\n  column,\n  onResize,\n  allRowsSelected,\n  onAllRowsSelectionChange,\n  sortColumn,\n  sortDirection,\n  onSort\n}: HeaderCellProps<R, SR>) {\n  function onPointerDown(event: React.PointerEvent<HTMLDivElement>) {\n    if (event.pointerType === 'mouse' && event.buttons !== 1) {\n      return;\n    }\n\n    const { currentTarget, pointerId } = event;\n    const { right } = currentTarget.getBoundingClientRect();\n    const offset = right - event.clientX;\n\n    if (offset > 11) {\n      // +1px to account for the border size\n      return;\n    }\n\n    function onPointerMove(event: PointerEvent) {\n      if (event.pointerId !== pointerId) return;\n      if (event.pointerType === 'mouse' && event.buttons !== 1) {\n        onPointerUp(event);\n        return;\n      }\n      const width =\n        event.clientX + offset - currentTarget.getBoundingClientRect().left;\n      if (width > 0) {\n        onResize(column, width);\n      }\n    }\n\n    function onPointerUp(event: PointerEvent) {\n      if (event.pointerId !== pointerId) return;\n      window.removeEventListener('pointermove', onPointerMove);\n      window.removeEventListener('pointerup', onPointerUp);\n    }\n\n    event.preventDefault();\n    window.addEventListener('pointermove', onPointerMove);\n    window.addEventListener('pointerup', onPointerUp);\n  }\n\n  function getCell() {\n    if (column.headerRenderer) {\n      return (\n        <column.headerRenderer\n          column={column}\n          sortColumn={sortColumn}\n          sortDirection={sortDirection}\n          onSort={onSort}\n          allRowsSelected={allRowsSelected}\n          onAllRowsSelectionChange={onAllRowsSelectionChange}\n        />\n      );\n    }\n\n    if (column.sortable) {\n      return (\n        <SortableHeaderCell\n          column={column}\n          onSort={onSort}\n          sortColumn={sortColumn}\n          sortDirection={sortDirection}\n        >\n          {column.name}\n        </SortableHeaderCell>\n      );\n    }\n\n    return column.name;\n  }\n\n  const className = clsx('rdg-cell', column.headerCellClass, {\n    'rdg-cell-resizable': column.resizable,\n    'rdg-cell-frozen': column.frozen,\n    'rdg-cell-frozen-last': column.isLastFrozenColumn\n  });\n\n  return (\n    <div\n      role=\"columnheader\"\n      aria-colindex={column.idx + 1}\n      aria-sort={\n        sortColumn === column.key ? getAriaSort(sortDirection) : undefined\n      }\n      className={className}\n      style={getCellStyle(column)}\n      onPointerDown={column.resizable ? onPointerDown : undefined}\n    >\n      {getCell()}\n    </div>\n  );\n}\n","import { useCallback, memo } from 'react';\n\nimport HeaderCell from './HeaderCell';\nimport type { CalculatedColumn } from './types';\nimport { assertIsValidKeyGetter } from './utils';\nimport type { DataGridProps } from './DataGrid';\n\ntype SharedDataGridProps<R, SR> = Pick<DataGridProps<R, SR>,\n  | 'rows'\n  | 'onSelectedRowsChange'\n  | 'sortColumn'\n  | 'sortDirection'\n  | 'onSort'\n  | 'rowKeyGetter'\n>;\n\nexport interface HeaderRowProps<R, SR> extends SharedDataGridProps<R, SR> {\n  columns: readonly CalculatedColumn<R, SR>[];\n  allRowsSelected: boolean;\n  onColumnResize: (column: CalculatedColumn<R, SR>, width: number) => void;\n}\n\nfunction HeaderRow<R, SR>({\n  columns,\n  rows,\n  rowKeyGetter,\n  onSelectedRowsChange,\n  allRowsSelected,\n  onColumnResize,\n  sortColumn,\n  sortDirection,\n  onSort\n}: HeaderRowProps<R, SR>) {\n  const handleAllRowsSelectionChange = useCallback((checked: boolean) => {\n    if (!onSelectedRowsChange) return;\n\n    assertIsValidKeyGetter(rowKeyGetter);\n\n    const newSelectedRows = new Set<React.Key>();\n    if (checked) {\n      for (const row of rows) {\n        newSelectedRows.add(rowKeyGetter(row));\n      }\n    }\n\n    onSelectedRowsChange(newSelectedRows);\n  }, [onSelectedRowsChange, rows, rowKeyGetter]);\n\n  return (\n    <div\n      role=\"row\"\n      aria-rowindex={1} // aria-rowindex is 1 based\n      className=\"rdg-header-row\"\n    >\n      {columns.map(column => {\n        return (\n          <HeaderCell<R, SR>\n            key={column.key}\n            column={column}\n            onResize={onColumnResize}\n            allRowsSelected={allRowsSelected}\n            onAllRowsSelectionChange={handleAllRowsSelectionChange}\n            onSort={onSort}\n            sortColumn={sortColumn}\n            sortDirection={sortDirection}\n          />\n        );\n      })}\n    </div>\n  );\n}\n\nexport default memo(HeaderRow) as <R, SR>(props: HeaderRowProps<R, SR>) => JSX.Element;\n","import { useCallback } from 'react';\n\nexport function useCombinedRefs<T>(...refs: readonly React.Ref<T>[]) {\n  return useCallback(\n    (handle: T | null) => {\n      for (const ref of refs) {\n        if (typeof ref === 'function') {\n          ref(handle);\n        } else if (ref !== null) {\n          // @ts-expect-error: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n          ref.current = handle;\n        }\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    refs\n  );\n}\n","import { useRef, useEffect } from 'react';\n\n/**\n * Detecting outside click on a react component is surprisingly hard.\n * A general approach is to have a global click handler on the document\n * which checks if the click target is inside the editor container or\n * not using editorContainer.contains(e.target). This approach works well\n * until portals are used for editors. Portals render children into a DOM\n * node that exists outside the DOM hierarchy of the parent component so\n * editorContainer.contains(e.target) does not work. Here are some examples\n * of the DOM structure with different types of editors\n *\n *\n * SimpleEditor for example Texbox (No Portals)\n *   <div data-grid>..</div>\n *   <div portal-created-by-the-grid-for-editors>\n *      <div editor-container>\n *        <div simple-editor>..</div>\n *      </div>\n *   </div>\n *\n * ComplexEditor for example Modals (using Portals)\n *   <div data-grid>..</div>\n *   <div portal-created-by-the-grid-for-editors>\n *      <div editor-container>\n *        // Nothing here\n *      </div>\n *   </div>\n *   <div portal-created-by-the-editor>\n *     <div complex-editor>..</div>\n *   </div>\n *\n *\n * One approach to detect outside click is to use synthetic event bubbling through\n * portals. An event fired from inside a portal will propagate to ancestors\n * in the containing React tree, even if those elements are not ancestors\n * in the DOM tree. This means a click handler can be attached on the window\n * and on the editor container. The editor container can set a flag to notify\n * that the click was inside the editor and the window click handler can use\n * this flag to call onClickOutside. This approach however has a few caveats\n * - Click handler on the window is set using window.addEventListener\n * - Click handler on the editor container is set using onClick prop\n *\n * This means if a child component inside the editor calls e.stopPropagation\n * then the click handler on the editor container will not be called whereas\n * the document click handler will be called.\n * https://github.com/facebook/react/issues/12518\n *\n * To solve this issue onClickCapture event is used.\n */\n\nexport function useClickOutside(onClick: () => void) {\n  const frameRequestRef = useRef<number | undefined>();\n\n  function cancelAnimationFrameRequest() {\n    if (typeof frameRequestRef.current === 'number') {\n      cancelAnimationFrame(frameRequestRef.current);\n      frameRequestRef.current = undefined;\n    }\n  }\n\n  // We need to prevent the `useEffect` from cleaning up between re-renders,\n  // as `handleDocumentClick` might otherwise miss valid click events.\n  // To that end we instead access the latest `onClick` prop via a ref.\n  const onClickRef = useRef((): void => {\n    throw new Error('Cannot call an event handler while rendering.');\n  });\n\n  useEffect(() => {\n    onClickRef.current = onClick;\n  });\n\n  useEffect(() => {\n    function onOutsideClick() {\n      frameRequestRef.current = undefined;\n      onClickRef.current();\n    }\n\n    function onWindowCaptureClick() {\n      cancelAnimationFrameRequest();\n      frameRequestRef.current = requestAnimationFrame(onOutsideClick);\n    }\n\n    window.addEventListener('click', onWindowCaptureClick, { capture: true });\n\n    return () => {\n      window.removeEventListener('click', onWindowCaptureClick, { capture: true });\n      cancelAnimationFrameRequest();\n    };\n  }, []);\n\n  return cancelAnimationFrameRequest;\n}\n","import { useRef, useState, useLayoutEffect } from 'react';\n\n// https://github.com/microsoft/TypeScript/issues/37861\ninterface ResizeObserverEntry {\n  contentRect: {\n    width: number;\n    height: number;\n  };\n}\n\ntype ResizeObserver = new (callback: (entries: readonly ResizeObserverEntry[]) => void) => {\n  observe: (target: Element) => void;\n  disconnect: () => void;\n};\n\nexport function useGridDimensions(): [React.RefObject<HTMLDivElement>, number, number] {\n  const gridRef = useRef<HTMLDivElement>(null);\n  const [gridWidth, setGridWidth] = useState(1);\n  const [gridHeight, setGridHeight] = useState(1);\n\n  useLayoutEffect(() => {\n    const { ResizeObserver } = window as typeof window & { ResizeObserver: ResizeObserver };\n\n    // don't break in jest/jsdom and browsers that don't support ResizeObserver\n    if (ResizeObserver == null) return;\n\n    const resizeObserver = new ResizeObserver(() => {\n      // Get dimensions without scrollbars.\n      // The dimensions given by the callback entries in Firefox do not substract the scrollbar sizes.\n      const { clientWidth, clientHeight } = gridRef.current!;\n      setGridWidth(clientWidth);\n      setGridHeight(clientHeight);\n    });\n\n    resizeObserver.observe(gridRef.current!);\n\n    return () => {\n      resizeObserver.disconnect();\n    };\n  }, []);\n\n  return [gridRef, gridWidth, gridHeight];\n}\n","import { useMemo } from 'react';\n\nimport type { CalculatedColumn, Column, ColumnMetric } from '../types';\nimport type { DataGridProps } from '../DataGrid';\nimport { ValueFormatter, ToggleGroupFormatter } from '../formatters';\nimport { SELECT_COLUMN_KEY } from '../Columns';\n\ninterface ViewportColumnsArgs<R, SR> extends Pick<DataGridProps<R, SR>, 'defaultColumnOptions'> {\n  rawColumns: readonly Column<R, SR>[];\n  rawGroupBy?: readonly string[];\n  viewportWidth: number;\n  scrollLeft: number;\n  columnWidths: ReadonlyMap<string, number>;\n}\n\nexport function useViewportColumns<R, SR>({\n  rawColumns,\n  columnWidths,\n  viewportWidth,\n  scrollLeft,\n  defaultColumnOptions,\n  rawGroupBy\n}: ViewportColumnsArgs<R, SR>) {\n  const minColumnWidth = defaultColumnOptions?.minWidth ?? 80;\n  const defaultFormatter = defaultColumnOptions?.formatter ?? ValueFormatter;\n  const defaultSortable = defaultColumnOptions?.sortable ?? false;\n  const defaultResizable = defaultColumnOptions?.resizable ?? false;\n\n  const { columns, lastFrozenColumnIndex, groupBy } = useMemo(() => {\n    // Filter rawGroupBy and ignore keys that do not match the columns prop\n    const groupBy: string[] = [];\n    let lastFrozenColumnIndex = -1;\n\n    const columns = rawColumns.map(rawColumn => {\n      const isGroup = rawGroupBy?.includes(rawColumn.key);\n\n      const column: CalculatedColumn<R, SR> = {\n        ...rawColumn,\n        idx: 0,\n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        frozen: isGroup || rawColumn.frozen || false,\n        isLastFrozenColumn: false,\n        rowGroup: isGroup,\n        sortable: rawColumn.sortable ?? defaultSortable,\n        resizable: rawColumn.resizable ?? defaultResizable,\n        formatter: rawColumn.formatter ?? defaultFormatter\n      };\n\n      if (column.frozen) {\n        lastFrozenColumnIndex++;\n      }\n\n      return column;\n    });\n\n    columns.sort(({ key: aKey, frozen: frozenA }, { key: bKey, frozen: frozenB }) => {\n      // Sort select column first:\n      if (aKey === SELECT_COLUMN_KEY) return -1;\n      if (bKey === SELECT_COLUMN_KEY) return 1;\n\n      // Sort grouped columns second, following the groupBy order:\n      if (rawGroupBy?.includes(aKey)) {\n        if (rawGroupBy.includes(bKey)) {\n          return rawGroupBy.indexOf(aKey) - rawGroupBy.indexOf(bKey);\n        }\n        return -1;\n      }\n      if (rawGroupBy?.includes(bKey)) return 1;\n\n      // Sort frozen columns third:\n      if (frozenA) {\n        if (frozenB) return 0;\n        return -1;\n      }\n      if (frozenB) return 1;\n\n      // Sort other columns last:\n      return 0;\n    });\n\n    columns.forEach((column, idx) => {\n      column.idx = idx;\n\n      if (idx === lastFrozenColumnIndex) {\n        column.isLastFrozenColumn = true;\n      }\n\n      if (column.rowGroup) {\n        groupBy.push(column.key);\n        column.groupFormatter ??= ToggleGroupFormatter;\n      }\n    });\n\n    return {\n      columns,\n      lastFrozenColumnIndex,\n      groupBy\n    };\n  }, [rawColumns, defaultFormatter, defaultResizable, defaultSortable, rawGroupBy]);\n\n  const { layoutCssVars, totalColumnWidth, totalFrozenColumnWidth, columnMetrics } = useMemo(() => {\n    const columnMetrics = new Map<CalculatedColumn<R, SR>, ColumnMetric>();\n    let left = 0;\n    let totalColumnWidth = 0;\n    let totalFrozenColumnWidth = 0;\n    let templateColumns = '';\n    let allocatedWidth = 0;\n    let unassignedColumnsCount = 0;\n\n    for (const column of columns) {\n      let width = getSpecifiedWidth(column, columnWidths, viewportWidth);\n\n      if (width === undefined) {\n        unassignedColumnsCount++;\n      } else {\n        width = clampColumnWidth(width, column, minColumnWidth);\n        allocatedWidth += width;\n        columnMetrics.set(column, { width, left: 0 });\n      }\n    }\n\n    const unallocatedWidth = viewportWidth - allocatedWidth;\n    const unallocatedColumnWidth = unallocatedWidth / unassignedColumnsCount;\n\n    for (const column of columns) {\n      let width;\n      if (columnMetrics.has(column)) {\n        const columnMetric = columnMetrics.get(column)!;\n        columnMetric.left = left;\n        ({ width } = columnMetric);\n      } else {\n        width = clampColumnWidth(unallocatedColumnWidth, column, minColumnWidth);\n        columnMetrics.set(column, { width, left });\n      }\n      totalColumnWidth += width;\n      left += width;\n      templateColumns += `${width}px `;\n    }\n\n    if (lastFrozenColumnIndex !== -1) {\n      const columnMetric = columnMetrics.get(columns[lastFrozenColumnIndex])!;\n      totalFrozenColumnWidth = columnMetric.left + columnMetric.width;\n    }\n\n    const layoutCssVars: Record<string, string> = {\n      '--template-columns': templateColumns\n    };\n\n    for (let i = 0; i <= lastFrozenColumnIndex; i++) {\n      const column = columns[i];\n      layoutCssVars[`--frozen-left-${column.key}`] = `${columnMetrics.get(column)!.left}px`;\n    }\n\n    return { layoutCssVars, totalColumnWidth, totalFrozenColumnWidth, columnMetrics };\n  }, [columnWidths, columns, viewportWidth, minColumnWidth, lastFrozenColumnIndex]);\n\n  const [colOverscanStartIdx, colOverscanEndIdx] = useMemo((): [number, number] => {\n    // get the viewport's left side and right side positions for non-frozen columns\n    const viewportLeft = scrollLeft + totalFrozenColumnWidth;\n    const viewportRight = scrollLeft + viewportWidth;\n    // get first and last non-frozen column indexes\n    const lastColIdx = columns.length - 1;\n    const firstUnfrozenColumnIdx = Math.min(lastFrozenColumnIndex + 1, lastColIdx);\n\n    // skip rendering non-frozen columns if the frozen columns cover the entire viewport\n    if (viewportLeft >= viewportRight) {\n      return [firstUnfrozenColumnIdx, firstUnfrozenColumnIdx];\n    }\n\n    // get the first visible non-frozen column index\n    let colVisibleStartIdx = firstUnfrozenColumnIdx;\n    while (colVisibleStartIdx < lastColIdx) {\n      const { left, width } = columnMetrics.get(columns[colVisibleStartIdx])!;\n      // if the right side of the columnn is beyond the left side of the available viewport,\n      // then it is the first column that's at least partially visible\n      if (left + width > viewportLeft) {\n        break;\n      }\n      colVisibleStartIdx++;\n    }\n\n    // get the last visible non-frozen column index\n    let colVisibleEndIdx = colVisibleStartIdx;\n    while (colVisibleEndIdx < lastColIdx) {\n      const { left, width } = columnMetrics.get(columns[colVisibleEndIdx])!;\n      // if the right side of the column is beyond or equal to the right side of the available viewport,\n      // then it the last column that's at least partially visible, as the previous column's right side is not beyond the viewport.\n      if (left + width >= viewportRight) {\n        break;\n      }\n      colVisibleEndIdx++;\n    }\n\n    const colOverscanStartIdx = Math.max(firstUnfrozenColumnIdx, colVisibleStartIdx - 1);\n    const colOverscanEndIdx = Math.min(lastColIdx, colVisibleEndIdx + 1);\n\n    return [colOverscanStartIdx, colOverscanEndIdx];\n  }, [columns, columnMetrics, lastFrozenColumnIndex, scrollLeft, totalFrozenColumnWidth, viewportWidth]);\n\n  const viewportColumns = useMemo((): readonly CalculatedColumn<R, SR>[] => {\n    const viewportColumns: CalculatedColumn<R, SR>[] = [];\n    for (let colIdx = 0; colIdx <= colOverscanEndIdx; colIdx++) {\n      const column = columns[colIdx];\n\n      if (colIdx < colOverscanStartIdx && !column.frozen) continue;\n      viewportColumns.push(column);\n    }\n\n    return viewportColumns;\n  }, [colOverscanEndIdx, colOverscanStartIdx, columns]);\n\n  return { columns, viewportColumns, layoutCssVars, columnMetrics, totalColumnWidth, lastFrozenColumnIndex, totalFrozenColumnWidth, groupBy };\n}\n\nfunction getSpecifiedWidth<R, SR>(\n  { key, width }: Column<R, SR>,\n  columnWidths: ReadonlyMap<string, number>,\n  viewportWidth: number\n): number | undefined {\n  if (columnWidths.has(key)) {\n    // Use the resized width if available\n    return columnWidths.get(key);\n  }\n  if (typeof width === 'number') {\n    return width;\n  }\n  if (typeof width === 'string' && /^\\d+%$/.test(width)) {\n    return Math.floor(viewportWidth * parseInt(width, 10) / 100);\n  }\n  return undefined;\n}\n\nfunction clampColumnWidth<R, SR>(\n  width: number,\n  { minWidth, maxWidth }: Column<R, SR>,\n  minColumnWidth: number\n): number {\n  width = Math.max(width, minWidth ?? minColumnWidth);\n\n  if (typeof maxWidth === 'number') {\n    return Math.min(width, maxWidth);\n  }\n\n  return width;\n}\n","import { useMemo } from 'react';\nimport type { GroupRow, GroupByDictionary } from '../types';\n\nconst RENDER_BACTCH_SIZE = 8;\n\ninterface ViewportRowsArgs<R> {\n  rawRows: readonly R[];\n  rowHeight: number;\n  clientHeight: number;\n  scrollTop: number;\n  groupBy: readonly string[];\n  rowGrouper?: (rows: readonly R[], columnKey: string) => Record<string, readonly R[]>;\n  expandedGroupIds?: ReadonlySet<unknown>;\n}\n\n// https://github.com/microsoft/TypeScript/issues/41808\nfunction isReadonlyArray(arr: unknown): arr is readonly unknown[] {\n  return Array.isArray(arr);\n}\n\nexport function useViewportRows<R>({\n  rawRows,\n  rowHeight,\n  clientHeight,\n  scrollTop,\n  groupBy,\n  rowGrouper,\n  expandedGroupIds\n}: ViewportRowsArgs<R>) {\n  const [groupedRows, rowsCount] = useMemo(() => {\n    if (groupBy.length === 0 || !rowGrouper) return [undefined, rawRows.length];\n\n    const groupRows = (rows: readonly R[], [groupByKey, ...remainingGroupByKeys]: readonly string[], startRowIndex: number): [GroupByDictionary<R>, number] => {\n      let groupRowsCount = 0;\n      const groups: GroupByDictionary<R> = {};\n      for (const [key, childRows] of Object.entries(rowGrouper(rows, groupByKey))) {\n        // Recursively group each parent group\n        const [childGroups, childRowsCount] = remainingGroupByKeys.length === 0\n          ? [childRows, childRows.length]\n          : groupRows(childRows, remainingGroupByKeys, startRowIndex + groupRowsCount + 1); // 1 for parent row\n        groups[key] = { childRows, childGroups, startRowIndex: startRowIndex + groupRowsCount };\n        groupRowsCount += childRowsCount + 1; // 1 for parent row\n      }\n\n      return [groups, groupRowsCount];\n    };\n\n    return groupRows(rawRows, groupBy, 0);\n  }, [groupBy, rowGrouper, rawRows]);\n\n  const [rows, allGroupRows] = useMemo(() => {\n    const allGroupRows = new Set<unknown>();\n    if (!groupedRows) return [rawRows, allGroupRows];\n\n    const flattenedRows: Array<R | GroupRow<R>> = [];\n    const expandGroup = (rows: GroupByDictionary<R> | readonly R[], parentId: string | undefined, level: number): void => {\n      if (isReadonlyArray(rows)) {\n        flattenedRows.push(...rows);\n        return;\n      }\n      Object.keys(rows).forEach((groupKey, posInSet, keys) => {\n        // TODO: should users have control over the generated key?\n        const id = parentId !== undefined ? `${parentId}__${groupKey}` : groupKey;\n        const isExpanded = expandedGroupIds?.has(id) ?? false;\n        const { childRows, childGroups, startRowIndex } = rows[groupKey];\n\n        const groupRow: GroupRow<R> = {\n          id,\n          parentId,\n          groupKey,\n          isExpanded,\n          childRows,\n          level,\n          posInSet,\n          startRowIndex,\n          setSize: keys.length\n        };\n        flattenedRows.push(groupRow);\n        allGroupRows.add(groupRow);\n\n        if (isExpanded) {\n          expandGroup(childGroups, id, level + 1);\n        }\n      });\n    };\n\n    expandGroup(groupedRows, undefined, 0);\n    return [flattenedRows, allGroupRows];\n  }, [expandedGroupIds, groupedRows, rawRows]);\n\n  const isGroupRow = <R>(row: unknown): row is GroupRow<R> => allGroupRows.has(row);\n\n  const overscanThreshold = 4;\n  const rowVisibleStartIdx = Math.floor(scrollTop / rowHeight);\n  const rowVisibleEndIdx = Math.min(rows.length - 1, Math.floor((scrollTop + clientHeight) / rowHeight));\n  const rowOverscanStartIdx = Math.max(0, Math.floor((rowVisibleStartIdx - overscanThreshold) / RENDER_BACTCH_SIZE) * RENDER_BACTCH_SIZE);\n  const rowOverscanEndIdx = Math.min(rows.length - 1, Math.ceil((rowVisibleEndIdx + overscanThreshold) / RENDER_BACTCH_SIZE) * RENDER_BACTCH_SIZE);\n\n  return {\n    rowOverscanStartIdx,\n    rowOverscanEndIdx,\n    rows,\n    rowsCount,\n    isGroupRow\n  };\n}\n","import { useRef, useEffect, useCallback } from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#what-can-i-do-if-my-effect-dependencies-change-too-often\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useLatestFunc<T extends (...args: any[]) => any>(fn: T) {\n  const ref = useRef(fn);\n\n  useEffect(() => {\n    ref.current = fn;\n  });\n\n  return useCallback((...args: Parameters<T>) => {\n    ref.current(...args);\n  }, []);\n}\n","import clsx from \"clsx\";\nimport React, { forwardRef, memo, useRef } from \"react\";\nimport { useCombinedRefs } from \"./hooks\";\nimport type { CellRendererProps } from \"./types\";\nimport { getCellStyle, wrapEvent } from \"./utils\";\n\nfunction Cell<R, SR>(\n  {\n    className,\n    column,\n    isCellSelected,\n    isCopied,\n    isDraggedOver,\n    isRowSelected,\n    row,\n    rowIdx,\n    dragHandleProps,\n    onRowClick,\n    onClick,\n    onDoubleClick,\n    onContextMenu,\n    onRowChange,\n    selectCell,\n    selectRow,\n    ...props\n  }: CellRendererProps<R, SR>,\n  ref: React.Ref<HTMLDivElement>\n) {\n  const cellRef = useRef<HTMLDivElement>(null);\n\n  const { cellClass } = column;\n  className = clsx(\n    \"rdg-cell\",\n    {\n      \"rdg-cell-frozen\": column.frozen,\n      \"rdg-cell-frozen-last\": column.isLastFrozenColumn,\n      \"rdg-cell-selected\": isCellSelected,\n      \"rdg-cell-copied\": isCopied,\n      \"rdg-cell-dragged-over\": isDraggedOver,\n    },\n    typeof cellClass === \"function\" ? cellClass(row) : cellClass,\n    className\n  );\n\n  function selectCellWrapper(openEditor?: boolean) {\n    selectCell({ idx: column.idx, rowIdx }, openEditor);\n  }\n\n  function handleClick(event: React.MouseEvent) {\n    selectCellWrapper(column.editorOptions?.editOnClick);\n    onRowClick?.(rowIdx, row, column, event);\n  }\n\n  function handleContextMenu() {\n    selectCellWrapper();\n  }\n\n  function handleDoubleClick() {\n    selectCellWrapper(true);\n  }\n\n  function handleRowChange(newRow: R) {\n    onRowChange(rowIdx, newRow);\n  }\n\n  function onRowSelectionChange(checked: boolean, isShiftClick: boolean) {\n    selectRow({ rowIdx, checked, isShiftClick });\n  }\n\n  return (\n    <div\n      role=\"gridcell\"\n      aria-colindex={column.idx + 1} // aria-colindex is 1-based\n      aria-selected={isCellSelected}\n      ref={useCombinedRefs(cellRef, ref)}\n      className={className}\n      style={getCellStyle(column)}\n      onClick={wrapEvent(handleClick, onClick)}\n      onDoubleClick={wrapEvent(handleDoubleClick, onDoubleClick)}\n      onContextMenu={wrapEvent(handleContextMenu, onContextMenu)}\n      {...props}\n    >\n      {!column.rowGroup && (\n        <>\n          <column.formatter\n            column={column}\n            rowIdx={rowIdx}\n            row={row}\n            isCellSelected={isCellSelected}\n            isRowSelected={isRowSelected}\n            onRowSelectionChange={onRowSelectionChange}\n            onRowChange={handleRowChange}\n          />\n          {dragHandleProps && (\n            <div className=\"rdg-cell-drag-handle\" {...dragHandleProps} />\n          )}\n        </>\n      )}\n    </div>\n  );\n}\n\nexport default memo(forwardRef(Cell)) as <R, SR = unknown>(\n  props: CellRendererProps<R, SR> & React.RefAttributes<HTMLDivElement>\n) => JSX.Element;\n","import { createPortal } from \"react-dom\";\nimport { useClickOutside } from \"../hooks\";\nimport type { EditorProps } from \"../types\";\n\nexport default function EditorContainer<R, SR>({\n  row,\n  column,\n  onRowChange,\n  isFromExternalChange,\n  setIsFromExternalChange,\n  ...props\n}: EditorProps<R, SR>) {\n  const onClickCapture = useClickOutside(() => onRowChange(row, true));\n  if (column.editor === undefined) return null;\n\n  const editor = (\n    <div className=\"rdg-editor-container\" onClickCapture={onClickCapture}>\n      <column.editor\n        row={row}\n        column={column}\n        onRowChange={onRowChange}\n        isFromExternalChange={isFromExternalChange}\n        setIsFromExternalChange={setIsFromExternalChange}\n        {...props}\n      />\n    </div>\n  );\n\n  if (column.editorOptions?.createPortal) {\n    return createPortal(editor, props.editorPortalTarget);\n  }\n\n  return editor;\n}\n","import clsx from \"clsx\";\nimport { useCallback, useState } from \"react\";\nimport EditorContainer from \"./editors/EditorContainer\";\nimport type { CellRendererProps, Omit, SharedEditorProps } from \"./types\";\nimport { getCellStyle } from \"./utils\";\n\ntype SharedCellRendererProps<R, SR> = Pick<\n  CellRendererProps<R, SR>,\n  \"rowIdx\" | \"row\" | \"column\"\n>;\n\ninterface EditCellProps<R, SR>\n  extends SharedCellRendererProps<R, SR>,\n    Omit<React.HTMLAttributes<HTMLDivElement>, \"style\" | \"children\"> {\n  editorProps: SharedEditorProps<R>;\n  isFromExternalChange: boolean;\n  setIsFromExternalChange: (value: boolean) => void;\n}\n\nexport default function EditCell<R, SR>({\n  className,\n  column,\n  row,\n  rowIdx,\n  editorProps,\n  isFromExternalChange,\n  setIsFromExternalChange,\n  ...props\n}: EditCellProps<R, SR>) {\n  const [dimensions, setDimensions] = useState<{\n    left: number;\n    top: number;\n  } | null>(null);\n\n  const cellRef = useCallback((node) => {\n    if (node !== null) {\n      const { left, top } = node.getBoundingClientRect();\n      setDimensions({ left, top });\n    }\n  }, []);\n\n  const { cellClass } = column;\n  className = clsx(\n    \"rdg-cell\",\n    {\n      \"rdg-cell-frozen\": column.frozen,\n      \"rdg-cell-frozen-last\": column.isLastFrozenColumn,\n    },\n    \"rdg-cell-selected\",\n    \"rdg-cell-editing\",\n    typeof cellClass === \"function\" ? cellClass(row) : cellClass,\n    className\n  );\n\n  function getCellContent() {\n    if (dimensions === null) return;\n    const { scrollTop: docTop, scrollLeft: docLeft } =\n      document.scrollingElement ?? document.documentElement;\n    const { left, top } = dimensions;\n    const gridLeft = left + docLeft;\n    const gridTop = top + docTop;\n\n    return (\n      <EditorContainer\n        {...editorProps}\n        rowIdx={rowIdx}\n        column={column}\n        left={gridLeft}\n        top={gridTop}\n        isFromExternalChange={isFromExternalChange}\n        setIsFromExternalChange={setIsFromExternalChange}\n      />\n    );\n  }\n\n  return (\n    <div\n      role=\"gridcell\"\n      aria-colindex={column.idx + 1} // aria-colindex is 1-based\n      aria-selected\n      ref={cellRef}\n      className={className}\n      style={getCellStyle(column)}\n      {...props}\n    >\n      {getCellContent()}\n    </div>\n  );\n}\n","import clsx from \"clsx\";\nimport { forwardRef, memo } from \"react\";\nimport Cell from \"./Cell\";\nimport EditCell from \"./EditCell\";\nimport type { RowRendererProps, SelectedCellProps } from \"./types\";\nimport { wrapEvent } from \"./utils\";\n\nfunction Row<R, SR = unknown>(\n  {\n    cellRenderer: CellRenderer = Cell,\n    className,\n    rowIdx,\n    isRowSelected,\n    copiedCellIdx,\n    draggedOverCellIdx,\n    row,\n    viewportColumns,\n    selectedCellProps,\n    onRowClick,\n    rowClass,\n    setDraggedOverRowIdx,\n    onMouseEnter,\n    top,\n    onRowChange,\n    selectCell,\n    selectRow,\n    isFromExternalChange,\n    setIsFromExternalChange,\n    \"aria-rowindex\": ariaRowIndex,\n    \"aria-selected\": ariaSelected,\n    ...props\n  }: RowRendererProps<R, SR>,\n  ref: React.Ref<HTMLDivElement>\n) {\n  function handleDragEnter() {\n    setDraggedOverRowIdx?.(rowIdx);\n  }\n\n  className = clsx(\n    \"rdg-row\",\n    `rdg-row-${rowIdx % 2 === 0 ? \"even\" : \"odd\"}`,\n    {\n      \"rdg-row-selected\": isRowSelected,\n      \"rdg-group-row-selected\": selectedCellProps?.idx === -1,\n    },\n    rowClass?.(row),\n    className\n  );\n\n  return (\n    <div\n      role=\"row\"\n      aria-rowindex={ariaRowIndex}\n      aria-selected={ariaSelected}\n      ref={ref}\n      className={className}\n      onMouseEnter={wrapEvent(handleDragEnter, onMouseEnter)}\n      style={{ top }}\n      {...props}\n    >\n      {viewportColumns.map((column) => {\n        const isCellSelected = selectedCellProps?.idx === column.idx;\n        if (selectedCellProps?.mode === \"EDIT\" && isCellSelected) {\n          return (\n            <EditCell<R, SR>\n              key={column.key}\n              rowIdx={rowIdx}\n              column={column}\n              row={row}\n              onKeyDown={selectedCellProps.onKeyDown}\n              editorProps={selectedCellProps.editorProps}\n              isFromExternalChange={isFromExternalChange}\n              setIsFromExternalChange={setIsFromExternalChange}\n            />\n          );\n        }\n\n        return (\n          <CellRenderer\n            key={column.key}\n            rowIdx={rowIdx}\n            column={column}\n            row={row}\n            isCopied={copiedCellIdx === column.idx}\n            isDraggedOver={draggedOverCellIdx === column.idx}\n            isCellSelected={isCellSelected}\n            isRowSelected={isRowSelected}\n            dragHandleProps={\n              isCellSelected\n                ? (selectedCellProps as SelectedCellProps).dragHandleProps\n                : undefined\n            }\n            onFocus={\n              isCellSelected\n                ? (selectedCellProps as SelectedCellProps).onFocus\n                : undefined\n            }\n            onKeyDown={\n              isCellSelected ? selectedCellProps!.onKeyDown : undefined\n            }\n            onRowClick={onRowClick}\n            onRowChange={onRowChange}\n            selectCell={selectCell}\n            selectRow={selectRow}\n          />\n        );\n      })}\n    </div>\n  );\n}\n\nexport default memo(forwardRef(Row)) as <R, SR = unknown>(\n  props: RowRendererProps<R, SR> & React.RefAttributes<HTMLDivElement>\n) => JSX.Element;\n","import { memo } from 'react';\nimport clsx from 'clsx';\n\nimport { getCellStyle } from './utils';\nimport type { CellRendererProps } from './types';\n\ntype SharedCellRendererProps<R, SR> = Pick<CellRendererProps<R, SR>, 'column'>;\n\ninterface SummaryCellProps<R, SR> extends SharedCellRendererProps<R, SR> {\n  row: SR;\n}\n\nfunction SummaryCell<R, SR>({\n  column,\n  row\n}: SummaryCellProps<R, SR>) {\n  const { summaryFormatter: SummaryFormatter, summaryCellClass } = column;\n  const className = clsx(\n    'rdg-cell',\n    {\n      'rdg-cell-frozen': column.frozen,\n      'rdg-cell-frozen-last': column.isLastFrozenColumn\n    },\n    typeof summaryCellClass === 'function' ? summaryCellClass(row) : summaryCellClass\n  );\n\n  return (\n    <div\n      role=\"gridcell\"\n      aria-colindex={column.idx + 1}\n      className={className}\n      style={getCellStyle(column)}\n    >\n      {SummaryFormatter && <SummaryFormatter column={column} row={row} />}\n    </div>\n  );\n}\n\nexport default memo(SummaryCell) as <R, SR>(props: SummaryCellProps<R, SR>) => JSX.Element;\n","import { memo } from 'react';\nimport SummaryCell from './SummaryCell';\nimport type { RowRendererProps } from './types';\n\ntype SharedRowRendererProps<R, SR> = Pick<RowRendererProps<R, SR>,\n  | 'viewportColumns'\n  | 'rowIdx'\n>;\n\ninterface SummaryRowProps<R, SR> extends SharedRowRendererProps<R, SR> {\n  'aria-rowindex': number;\n  row: SR;\n  bottom: number;\n}\n\nfunction SummaryRow<R, SR>({\n  rowIdx,\n  row,\n  viewportColumns,\n  bottom,\n  'aria-rowindex': ariaRowIndex\n}: SummaryRowProps<R, SR>) {\n  return (\n    <div\n      role=\"row\"\n      aria-rowindex={ariaRowIndex}\n      className={`rdg-row rdg-row-${rowIdx % 2 === 0 ? 'even' : 'odd'} rdg-summary-row`}\n      style={{ bottom }}\n    >\n      {viewportColumns.map(column => (\n        <SummaryCell<R, SR>\n          key={column.key}\n          column={column}\n          row={row}\n        />\n      ))}\n    </div>\n  );\n}\n\nexport default memo(SummaryRow) as <R, SR>(props: SummaryRowProps<R, SR>) => JSX.Element;\n","import clsx from \"clsx\";\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useLayoutEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport type { CellNavigationMode, SortDirection } from \"./enums\";\nimport FilterRow from \"./FilterRow\";\nimport GroupRowRenderer from \"./GroupRow\";\nimport HeaderRow from \"./HeaderRow\";\nimport {\n  useGridDimensions,\n  useLatestFunc,\n  useViewportColumns,\n  useViewportRows,\n} from \"./hooks\";\nimport Row from \"./Row\";\nimport SummaryRow from \"./SummaryRow\";\nimport type {\n  CalculatedColumn,\n  Column,\n  EditCellProps,\n  FillEvent,\n  Filters,\n  PasteEvent,\n  Position,\n  RowRendererProps,\n  RowsChangeData,\n  SelectedCellProps,\n  SelectRowEvent,\n} from \"./types\";\nimport {\n  assertIsValidKeyGetter,\n  canExitGrid,\n  getNextSelectedCellPosition,\n  isCtrlKeyHeldDown,\n  isDefaultCellInput,\n  isSelectedCellEditable,\n  onEditorNavigation,\n} from \"./utils\";\n\ninterface SelectCellState extends Position {\n  mode: \"SELECT\";\n}\n\ninterface EditCellState<R> extends Position {\n  mode: \"EDIT\";\n  row: R;\n  originalRow: R;\n  key: string | null;\n}\n\ntype DefaultColumnOptions<R, SR> = Pick<\n  Column<R, SR>,\n  \"formatter\" | \"minWidth\" | \"resizable\" | \"sortable\"\n>;\n\nconst body = globalThis.document?.body;\n\nexport interface DataGridHandle {\n  scrollToColumn: (colIdx: number) => void;\n  scrollToRow: (rowIdx: number) => void;\n  selectCell: (\n    position: Position,\n    openEditor?: boolean,\n    shiftKey?: boolean\n  ) => void;\n  updateSelectedPositionRowIdx: (rowIdx: number) => void;\n  focus: () => void;\n}\n\ntype SharedDivProps = Pick<\n  React.HTMLAttributes<HTMLDivElement>,\n  \"aria-label\" | \"aria-labelledby\" | \"aria-describedby\" | \"className\" | \"style\"\n>;\n\nexport interface DataGridProps<R, SR = unknown> extends SharedDivProps {\n  /**\n   * Grid and data Props\n   */\n  /** An array of objects representing each column on the grid */\n  columns: readonly Column<R, SR>[];\n  /** A function called for each rendered row that should return a plain key/value pair object */\n  rows: readonly R[];\n  /**\n   * Rows to be pinned at the bottom of the rows view for summary, the vertical scroll bar will not scroll these rows.\n   * Bottom horizontal scroll bar can move the row left / right. Or a customized row renderer can be used to disabled the scrolling support.\n   */\n  summaryRows?: readonly SR[];\n  /** The getter should return a unique key for each row */\n  rowKeyGetter?: (row: R) => React.Key;\n  onRowsChange?: (rows: R[], data: RowsChangeData<R, SR>) => void;\n  onCellChange?: (\n    rowIdx: number,\n    colIdx: number,\n    oldValue: string,\n    newValue: string\n  ) => void;\n\n  /**\n   * Dimensions props\n   */\n  /** The height of each row in pixels */\n  rowHeight?: number;\n  /** The height of the header row in pixels */\n  headerRowHeight?: number;\n  /** The height of the header filter row in pixels */\n  headerFiltersHeight?: number;\n\n  /**\n   * Feature props\n   */\n  /** Set of selected row keys */\n  selectedRows?: ReadonlySet<React.Key>;\n  /** Function called whenever row selection is changed */\n  onSelectedRowsChange?: (selectedRows: Set<React.Key>) => void;\n  /** The key of the column which is currently being sorted */\n  sortColumn?: string;\n  /** The direction to sort the sortColumn*/\n  sortDirection?: SortDirection;\n  /** Function called whenever grid is sorted*/\n  onSort?: (columnKey: string, direction: SortDirection) => void;\n  filters?: Filters;\n  onFiltersChange?: (filters: Filters) => void;\n  defaultColumnOptions?: DefaultColumnOptions<R, SR>;\n  groupBy?: readonly string[];\n  rowGrouper?: (\n    rows: readonly R[],\n    columnKey: string\n  ) => Record<string, readonly R[]>;\n  expandedGroupIds?: ReadonlySet<unknown>;\n  onExpandedGroupIdsChange?: (expandedGroupIds: Set<unknown>) => void;\n  onFill?: (event: FillEvent<R>) => R[];\n  onPaste?: (event: PasteEvent<R>) => R;\n  scrollEdgeSize?: number;\n  scrollEdgeStep?: number;\n\n  /**\n   * Custom renderers\n   */\n  rowRenderer?: React.ComponentType<RowRendererProps<R, SR>>;\n  emptyRowsRenderer?: React.ComponentType;\n\n  /**\n   * Event props\n   */\n  /** Function called whenever a row is clicked */\n  onRowClick?: (\n    rowIdx: number,\n    row: R,\n    column: CalculatedColumn<R, SR>,\n    event?: React.MouseEvent\n  ) => void;\n  /** Called when the grid is scrolled */\n  onScroll?: (\n    event: React.UIEvent<HTMLDivElement>,\n    left: number,\n    top: number\n  ) => void;\n  /** Called when a column is resized */\n  onColumnResize?: (idx: number, width: number) => void;\n  /** Function called whenever selected cell is changed */\n  onSelectedCellChange?: (\n    position: Position,\n    shiftKey?: boolean,\n    resetSelection?: boolean\n  ) => void;\n  /** Called when arrow keys are pressed while alt is pressed */\n  onAltArrowKeyPress?: (key: string) => void;\n\n  /**\n   * Toggles and modes\n   */\n  /** Toggles whether filters row is displayed or not */\n  enableFilterRow?: boolean;\n  cellNavigationMode?: CellNavigationMode;\n\n  /**\n   * Miscellaneous\n   */\n  /** The node where the editor portal should mount. */\n  editorPortalTarget?: Element;\n  rowClass?: (row: R) => string | undefined;\n}\n\n/**\n * Main API Component to render a data grid of rows and columns\n *\n * @example\n *\n * <DataGrid columns={columns} rows={rows} />\n */\nfunction DataGrid<R, SR>(\n  {\n    // Grid and data Props\n    columns: rawColumns,\n    rows: rawRows,\n    summaryRows,\n    rowKeyGetter,\n    onRowsChange,\n    onCellChange,\n    // Dimensions props\n    rowHeight = 35,\n    headerRowHeight = rowHeight,\n    headerFiltersHeight = 45,\n    // Feature props\n    selectedRows,\n    onSelectedRowsChange,\n    sortColumn,\n    sortDirection,\n    onSort,\n    filters,\n    onFiltersChange,\n    defaultColumnOptions,\n    groupBy: rawGroupBy,\n    rowGrouper,\n    expandedGroupIds,\n    onExpandedGroupIdsChange,\n    // Custom renderers\n    rowRenderer: RowRenderer = Row,\n    emptyRowsRenderer: EmptyRowsRenderer,\n    // Event props\n    onRowClick,\n    onScroll,\n    onColumnResize,\n    onSelectedCellChange,\n    onAltArrowKeyPress,\n    onFill,\n    onPaste,\n    scrollEdgeSize,\n    scrollEdgeStep,\n    // Toggles and modes\n    enableFilterRow = false,\n    cellNavigationMode = \"NONE\",\n    // Miscellaneous\n    editorPortalTarget = body,\n    className,\n    style,\n    rowClass,\n    // ARIA\n    \"aria-label\": ariaLabel,\n    \"aria-labelledby\": ariaLabelledBy,\n    \"aria-describedby\": ariaDescribedBy,\n  }: DataGridProps<R, SR>,\n  ref: React.Ref<DataGridHandle>\n) {\n  /**\n   * states\n   */\n  const [scrollTop, setScrollTop] = useState(0);\n  const [scrollLeft, setScrollLeft] = useState(0);\n  const [columnWidths, setColumnWidths] = useState<ReadonlyMap<string, number>>(\n    () => new Map()\n  );\n  const [selectedPosition, setSelectedPosition] = useState<\n    SelectCellState | EditCellState<R>\n  >({ idx: -1, rowIdx: -1, mode: \"SELECT\" });\n  const [copiedCell, setCopiedCell] = useState<{\n    row: R;\n    columnKey: string;\n  } | null>(null);\n  const [isDragging, setDragging] = useState(false);\n  const [draggedOverRowIdx, setOverRowIdx] = useState<number | undefined>(\n    undefined\n  );\n  const [isFromExternalChange, setIsFromExternalChange] = useState<boolean>(\n    false\n  );\n\n  /**\n   * refs\n   */\n  const focusSinkRef = useRef<HTMLDivElement>(null);\n  const prevSelectedPosition = useRef(selectedPosition);\n  const latestDraggedOverRowIdx = useRef(draggedOverRowIdx);\n  const lastSelectedRowIdx = useRef(-1);\n  const isCellFocusable = useRef(false);\n\n  /**\n   * The identity of the wrapper function is stable so it won't break memoization\n   */\n  const selectRowWrapper = useLatestFunc(selectRow);\n  const selectCellWrapper = useLatestFunc(selectCell);\n  const toggleGroupWrapper = useLatestFunc(toggleGroup);\n  const handleFormatterRowChangeWrapper = useLatestFunc(updateRow);\n\n  /**\n   * computed values\n   */\n  const [gridRef, gridWidth, gridHeight] = useGridDimensions();\n  const headerRowsCount = enableFilterRow ? 2 : 1;\n  const summaryRowsCount = summaryRows?.length ?? 0;\n  const totalHeaderHeight =\n    headerRowHeight + (enableFilterRow ? headerFiltersHeight : 0);\n  const clientHeight =\n    gridHeight - totalHeaderHeight - summaryRowsCount * rowHeight;\n  const isSelectable =\n    selectedRows !== undefined && onSelectedRowsChange !== undefined;\n\n  const {\n    columns,\n    viewportColumns,\n    layoutCssVars,\n    columnMetrics,\n    totalColumnWidth,\n    lastFrozenColumnIndex,\n    totalFrozenColumnWidth,\n    groupBy,\n  } = useViewportColumns({\n    rawColumns,\n    columnWidths,\n    scrollLeft,\n    viewportWidth: gridWidth,\n    defaultColumnOptions,\n    rawGroupBy: rowGrouper ? rawGroupBy : undefined,\n  });\n\n  const {\n    rowOverscanStartIdx,\n    rowOverscanEndIdx,\n    rows,\n    rowsCount,\n    isGroupRow,\n  } = useViewportRows({\n    rawRows,\n    groupBy,\n    rowGrouper,\n    rowHeight,\n    clientHeight,\n    scrollTop,\n    expandedGroupIds,\n  });\n\n  const hasGroups = groupBy.length > 0 && rowGrouper;\n  const minColIdx = hasGroups ? -1 : 0;\n\n  // Cell drag is not supported on a treegrid\n  const enableCellDragAndDrop = hasGroups ? false : onFill !== undefined;\n\n  /**\n   * effects\n   */\n  useLayoutEffect(() => {\n    if (\n      selectedPosition === prevSelectedPosition.current ||\n      selectedPosition.mode === \"EDIT\" ||\n      !isCellWithinBounds(selectedPosition)\n    )\n      return;\n    prevSelectedPosition.current = selectedPosition;\n    scrollToCell(selectedPosition);\n\n    if (isCellFocusable.current) {\n      isCellFocusable.current = false;\n      return;\n    }\n    focusSinkRef.current!.focus({ preventScroll: true });\n  });\n\n  useImperativeHandle(ref, () => ({\n    scrollToColumn(idx: number) {\n      scrollToCell({ idx });\n    },\n    scrollToRow(rowIdx: number) {\n      const { current } = gridRef;\n      if (!current) return;\n      current.scrollTo({\n        top: rowIdx * rowHeight,\n        behavior: \"smooth\",\n      });\n    },\n    selectCell,\n    updateSelectedPositionRowIdx(rowIdx: number) {\n      setSelectedPosition((prevPosition) => ({ ...prevPosition, rowIdx }));\n    },\n    focus() {\n      focusSinkRef.current!.focus({ preventScroll: true });\n    },\n  }));\n\n  /**\n   * callbacks\n   */\n  const handleColumnResize = useCallback(\n    (column: CalculatedColumn<R, SR>, width: number) => {\n      const newColumnWidths = new Map(columnWidths);\n      newColumnWidths.set(column.key, width);\n      setColumnWidths(newColumnWidths);\n\n      onColumnResize?.(column.idx, width);\n    },\n    [columnWidths, onColumnResize]\n  );\n\n  const setDraggedOverRowIdx = useCallback((rowIdx?: number) => {\n    setOverRowIdx(rowIdx);\n    latestDraggedOverRowIdx.current = rowIdx;\n  }, []);\n\n  /**\n   * event handlers\n   */\n  function selectRow({ rowIdx, checked, isShiftClick }: SelectRowEvent) {\n    if (!onSelectedRowsChange) return;\n\n    assertIsValidKeyGetter(rowKeyGetter);\n    const newSelectedRows = new Set(selectedRows);\n    const row = rows[rowIdx];\n    if (isGroupRow(row)) {\n      for (const childRow of row.childRows) {\n        const rowKey = rowKeyGetter(childRow);\n        if (checked) {\n          newSelectedRows.add(rowKey);\n        } else {\n          newSelectedRows.delete(rowKey);\n        }\n      }\n      onSelectedRowsChange(newSelectedRows);\n      return;\n    }\n\n    const rowKey = rowKeyGetter(row);\n    if (checked) {\n      newSelectedRows.add(rowKey);\n      const previousRowIdx = lastSelectedRowIdx.current;\n      lastSelectedRowIdx.current = rowIdx;\n      if (isShiftClick && previousRowIdx !== -1 && previousRowIdx !== rowIdx) {\n        const step = Math.sign(rowIdx - previousRowIdx);\n        for (let i = previousRowIdx + step; i !== rowIdx; i += step) {\n          const row = rows[i];\n          if (isGroupRow(row)) continue;\n          newSelectedRows.add(rowKeyGetter(row));\n        }\n      }\n    } else {\n      newSelectedRows.delete(rowKey);\n      lastSelectedRowIdx.current = -1;\n    }\n\n    onSelectedRowsChange(newSelectedRows);\n  }\n\n  function toggleGroup(expandedGroupId: unknown) {\n    if (!onExpandedGroupIdsChange) return;\n    const newExpandedGroupIds = new Set(expandedGroupIds);\n    if (newExpandedGroupIds.has(expandedGroupId)) {\n      newExpandedGroupIds.delete(expandedGroupId);\n    } else {\n      newExpandedGroupIds.add(expandedGroupId);\n    }\n    onExpandedGroupIdsChange(newExpandedGroupIds);\n  }\n\n  function handleKeyDown(event: React.KeyboardEvent<HTMLDivElement>) {\n    const { key, keyCode } = event;\n    const row = rows[selectedPosition.rowIdx];\n\n    if (\n      onPaste &&\n      isCtrlKeyHeldDown(event) &&\n      isCellWithinBounds(selectedPosition) &&\n      !isGroupRow(row) &&\n      selectedPosition.idx !== -1 &&\n      selectedPosition.mode === \"SELECT\"\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\n      const cKey = 67;\n      const vKey = 86;\n      if (keyCode === cKey) {\n        handleCopy();\n        return;\n      }\n      if (keyCode === vKey) {\n        handlePaste();\n        return;\n      }\n    }\n\n    if (\n      isCellWithinBounds(selectedPosition) &&\n      isGroupRow(row) &&\n      selectedPosition.idx === -1 &&\n      // Collapse the current group row if it is focused and is in expanded state\n      ((key === \"ArrowLeft\" && row.isExpanded) ||\n        // Expand the current group row if it is focused and is in collapsed state\n        (key === \"ArrowRight\" && !row.isExpanded))\n    ) {\n      event.preventDefault(); // Prevents scrolling\n      toggleGroup(row.id);\n      return;\n    }\n\n    switch (event.key) {\n      case \"Escape\":\n        setCopiedCell(null);\n        closeEditor();\n        return;\n      case \"ArrowUp\":\n      case \"ArrowDown\":\n      case \"ArrowLeft\":\n      case \"ArrowRight\":\n      case \"Tab\":\n      case \"Home\":\n      case \"End\":\n      case \"PageUp\":\n      case \"PageDown\":\n        navigate(event);\n        break;\n      default:\n        // Prevent certain key combinations from putting cell in edit mode\n        if (\n          isCtrlKeyHeldDown(event) ||\n          (event.key === \" \" && event.shiftKey) ||\n          event.key === \"Delete\"\n        ) {\n          return;\n        }\n\n        handleCellInput(event);\n        break;\n    }\n  }\n\n  function handleFocus() {\n    isCellFocusable.current = true;\n  }\n\n  function handleScroll(event: React.UIEvent<HTMLDivElement>) {\n    const { scrollTop, scrollLeft } = event.currentTarget;\n    setScrollTop(scrollTop);\n    setScrollLeft(scrollLeft);\n    onScroll?.(event, scrollLeft, scrollTop);\n  }\n\n  function getRawRowIdx(rowIdx: number) {\n    return hasGroups ? rawRows.indexOf(rows[rowIdx] as R) : rowIdx;\n  }\n\n  function updateRow(rowIdx: number, row: R) {\n    if (typeof onRowsChange !== \"function\") return;\n    if (row === rawRows[rowIdx]) return;\n    const updatedRows = [...rawRows];\n    updatedRows[rowIdx] = row;\n    onRowsChange(updatedRows, {\n      indexes: [rowIdx],\n      column: columns[selectedPosition.idx],\n    });\n\n    const colIdx = selectedPosition.idx;\n    const colKey = columns[colIdx].key as keyof R;\n    const newValue = String(row[colKey]);\n    const oldValue = String([...rawRows][rowIdx][colKey]);\n\n    onCellChange?.(rowIdx, colIdx, oldValue, newValue);\n  }\n\n  function commitEditorChanges() {\n    if (\n      columns[selectedPosition.idx]?.editor === undefined ||\n      selectedPosition.mode === \"SELECT\" ||\n      selectedPosition.row === selectedPosition.originalRow\n    ) {\n      return;\n    }\n\n    const rowIdx = getRawRowIdx(selectedPosition.rowIdx);\n    updateRow(rowIdx, selectedPosition.row);\n  }\n\n  function handleCopy() {\n    const { idx, rowIdx } = selectedPosition;\n    setCopiedCell({\n      row: rawRows[getRawRowIdx(rowIdx)],\n      columnKey: columns[idx].key,\n    });\n  }\n\n  function handlePaste() {\n    const { idx, rowIdx } = selectedPosition;\n    const targetRow = rawRows[getRawRowIdx(rowIdx)];\n    if (\n      !onPaste ||\n      !onRowsChange ||\n      copiedCell === null ||\n      !isCellEditable(selectedPosition)\n    ) {\n      return;\n    }\n\n    const updatedTargetRow = onPaste({\n      sourceRow: copiedCell.row,\n      sourceColumnKey: copiedCell.columnKey,\n      targetRow,\n      targetColumnKey: columns[idx].key,\n    });\n\n    updateRow(rowIdx, updatedTargetRow);\n  }\n\n  function handleCellInput(event: React.KeyboardEvent<HTMLDivElement>) {\n    if (!isCellWithinBounds(selectedPosition)) return;\n    const row = rows[selectedPosition.rowIdx];\n    if (isGroupRow(row)) return;\n    const { key } = event;\n    const column = columns[selectedPosition.idx];\n\n    if (selectedPosition.mode === \"EDIT\") {\n      if (key === \"Enter\") {\n        // Custom editors can listen for the event and stop propagation to prevent commit\n        commitEditorChanges();\n        closeEditor();\n      }\n      return;\n    }\n\n    column.editorOptions?.onCellKeyDown?.(event);\n    if (event.isDefaultPrevented()) return;\n\n    if (isCellEditable(selectedPosition) && isDefaultCellInput(event)) {\n      setSelectedPosition(({ idx, rowIdx }) => ({\n        idx,\n        rowIdx,\n        key,\n        mode: \"EDIT\",\n        row,\n        originalRow: row,\n      }));\n    }\n  }\n\n  function handleDragEnd() {\n    const overRowIdx = latestDraggedOverRowIdx.current;\n    if (overRowIdx === undefined || !onFill || !onRowsChange) return;\n\n    const { idx, rowIdx } = selectedPosition;\n    const sourceRow = rawRows[rowIdx];\n    const startRowIndex = rowIdx < overRowIdx ? rowIdx + 1 : overRowIdx;\n    const endRowIndex = rowIdx < overRowIdx ? overRowIdx + 1 : rowIdx;\n    const targetRows = rawRows.slice(startRowIndex, endRowIndex);\n    const column = columns[idx];\n    const updatedTargetRows = onFill({\n      columnKey: column.key,\n      sourceRow,\n      targetRows,\n    });\n    const updatedRows = [...rawRows];\n    const indexes: number[] = [];\n\n    for (let i = startRowIndex; i < endRowIndex; i++) {\n      const targetRowIdx = i - startRowIndex;\n      if (updatedRows[i] !== updatedTargetRows[targetRowIdx]) {\n        updatedRows[i] = updatedTargetRows[i - startRowIndex];\n        indexes.push(i);\n      }\n    }\n\n    if (indexes.length > 0) {\n      onRowsChange(updatedRows, { indexes, column });\n    }\n    setDraggedOverRowIdx(undefined);\n  }\n\n  function handleMouseDown(\n    event: React.MouseEvent<HTMLDivElement, MouseEvent>\n  ) {\n    if (event.buttons !== 1) return;\n    setDragging(true);\n    window.addEventListener(\"mouseover\", onMouseOver);\n    window.addEventListener(\"mouseup\", onMouseUp);\n\n    function onMouseOver(event: MouseEvent) {\n      // Trigger onMouseup in edge cases where we release the mouse button but `mouseup` isn't triggered,\n      // for example when releasing the mouse button outside the iframe the grid is rendered in.\n      // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n      if (event.buttons !== 1) onMouseUp();\n    }\n\n    function onMouseUp() {\n      window.removeEventListener(\"mouseover\", onMouseOver);\n      window.removeEventListener(\"mouseup\", onMouseUp);\n      setDragging(false);\n      handleDragEnd();\n    }\n  }\n\n  function handleDoubleClick(event: React.MouseEvent<HTMLDivElement>) {\n    event.stopPropagation();\n    if (!onFill || !onRowsChange) return;\n\n    const { idx, rowIdx } = selectedPosition;\n    const sourceRow = rawRows[rowIdx];\n    const targetRows = rawRows.slice(rowIdx + 1);\n    const column = columns[idx];\n    const updatedTargetRows = onFill({\n      columnKey: column.key,\n      sourceRow,\n      targetRows,\n    });\n    const updatedRows = [...rawRows];\n    const indexes: number[] = [];\n\n    for (let i = rowIdx + 1; i < updatedRows.length; i++) {\n      const targetRowIdx = i - rowIdx - 1;\n      if (updatedRows[i] !== updatedTargetRows[targetRowIdx]) {\n        updatedRows[i] = updatedTargetRows[i - rowIdx - 1];\n        indexes.push(i);\n      }\n    }\n\n    if (indexes.length > 0) {\n      onRowsChange(updatedRows, { indexes, column });\n    }\n  }\n\n  function handleEditorRowChange(row: Readonly<R>, commitChanges?: boolean) {\n    if (selectedPosition.mode === \"SELECT\") return;\n    if (commitChanges) {\n      updateRow(getRawRowIdx(selectedPosition.rowIdx), row);\n      closeEditor();\n    } else {\n      setSelectedPosition((position) => ({ ...position, row }));\n    }\n  }\n\n  function handleOnClose(commitChanges?: boolean) {\n    if (commitChanges) {\n      commitEditorChanges();\n    }\n    closeEditor();\n  }\n\n  /**\n   * utils\n   */\n  function isCellWithinBounds({ idx, rowIdx }: Position): boolean {\n    return (\n      rowIdx >= 0 &&\n      rowIdx < rows.length &&\n      idx >= minColIdx &&\n      idx < columns.length\n    );\n  }\n\n  function isCellEditable(position: Position): boolean {\n    return (\n      isCellWithinBounds(position) &&\n      isSelectedCellEditable<R, SR>({\n        columns,\n        rows,\n        selectedPosition: position,\n        isGroupRow,\n      })\n    );\n  }\n\n  function selectCell(\n    position: Position,\n    enableEditor = false,\n    shiftKey = false,\n    resetSelection = true\n  ): void {\n    if (!isCellWithinBounds(position)) return;\n    commitEditorChanges();\n\n    if (enableEditor && isCellEditable(position)) {\n      const row = rows[position.rowIdx] as R;\n      setSelectedPosition({\n        ...position,\n        mode: \"EDIT\",\n        key: null,\n        row,\n        originalRow: row,\n      });\n    } else {\n      setSelectedPosition({ ...position, mode: \"SELECT\" });\n    }\n    onSelectedCellChange?.({ ...position }, shiftKey, resetSelection);\n  }\n\n  function closeEditor() {\n    if (selectedPosition.mode === \"SELECT\") return;\n    setSelectedPosition(({ idx, rowIdx }) => ({ idx, rowIdx, mode: \"SELECT\" }));\n  }\n\n  function scrollToCell({ idx, rowIdx }: Partial<Position>): void {\n    const { current } = gridRef;\n    if (!current) return;\n\n    if (typeof idx === \"number\" && idx > lastFrozenColumnIndex) {\n      const { clientWidth } = current;\n      const { left, width } = columnMetrics.get(columns[idx])!;\n      const isCellAtLeftBoundary = left < scrollLeft + totalFrozenColumnWidth;\n      const isCellAtRightBoundary = left + width > clientWidth + scrollLeft;\n      if (isCellAtLeftBoundary) {\n        current.scrollLeft = left - totalFrozenColumnWidth;\n      } else if (isCellAtRightBoundary) {\n        current.scrollLeft = left + width - clientWidth;\n      }\n    }\n\n    if (typeof rowIdx === \"number\") {\n      if (rowIdx * rowHeight < scrollTop) {\n        // at top boundary, scroll to the row's top\n        current.scrollTop = rowIdx * rowHeight;\n      } else if ((rowIdx + 1) * rowHeight > scrollTop + clientHeight) {\n        // at bottom boundary, scroll the next row's top to the bottom of the viewport\n        current.scrollTop = (rowIdx + 1) * rowHeight - clientHeight;\n      }\n    }\n  }\n\n  function getNextPosition(\n    key: string,\n    ctrlKey: boolean,\n    shiftKey: boolean,\n    altKey: boolean\n  ): Position {\n    const { idx, rowIdx } = selectedPosition;\n    const row = rows[rowIdx];\n    const isRowSelected = isCellWithinBounds(selectedPosition) && idx === -1;\n\n    // If a group row is focused, and it is collapsed, move to the parent group row (if there is one).\n    if (\n      key === \"ArrowLeft\" &&\n      isRowSelected &&\n      isGroupRow(row) &&\n      !row.isExpanded &&\n      row.level !== 0\n    ) {\n      let parentRowIdx = -1;\n      for (let i = selectedPosition.rowIdx - 1; i >= 0; i--) {\n        const parentRow = rows[i];\n        if (isGroupRow(parentRow) && parentRow.id === row.parentId) {\n          parentRowIdx = i;\n          break;\n        }\n      }\n      if (parentRowIdx !== -1) {\n        return { idx, rowIdx: parentRowIdx };\n      }\n    }\n\n    const handleArrowKeyPress = (key: string) => {\n      if (altKey) {\n        onAltArrowKeyPress?.(key);\n        return selectedPosition;\n      }\n\n      if (ctrlKey) {\n        let colIndexDelta = 0;\n        let rowIndexDelta = 0;\n\n        switch (key) {\n          case \"ArrowUp\":\n            rowIndexDelta = -1;\n            break;\n          case \"ArrowDown\":\n            rowIndexDelta = 1;\n            break;\n          case \"ArrowLeft\":\n            colIndexDelta = -1;\n            break;\n          case \"ArrowRight\":\n            colIndexDelta = 1;\n            break;\n          default:\n            break;\n        }\n\n        const currColIndex = idx;\n        const nextColIndex = Math.max(\n          Math.min(idx + colIndexDelta, columns.length - 1),\n          1\n        );\n        const currRowIndex = rowIdx;\n        const nextRowIndex = Math.max(\n          Math.min(rowIdx + rowIndexDelta, rawRows.length - 1),\n          0\n        );\n\n        switch (key) {\n          case \"ArrowUp\":\n          case \"ArrowDown\":\n            if (currRowIndex !== nextRowIndex) {\n              const colKey = columns[currColIndex].key as keyof R;\n\n              const currValue = rawRows[currRowIndex][colKey];\n              const nextValue = rawRows[nextRowIndex][colKey];\n\n              let rowIndex = -1;\n\n              if (currValue && nextValue) {\n                // find last row with value\n                for (\n                  rowIndex = nextRowIndex + rowIndexDelta;\n                  rowIndex <= rawRows.length - 1 && rowIndex >= 0;\n                  rowIndex += rowIndexDelta\n                ) {\n                  const value = rawRows[rowIndex][colKey];\n\n                  if (!value) break;\n                }\n                rowIndex -= rowIndexDelta;\n              } else {\n                // find next row with value\n                for (\n                  rowIndex = nextRowIndex;\n                  rowIndex < rawRows.length - 1 && rowIndex > 0;\n                  rowIndex += rowIndexDelta\n                ) {\n                  const value = rawRows[rowIndex][colKey];\n\n                  if (value) break;\n                }\n              }\n\n              return { idx, rowIdx: rowIndex };\n            }\n          case \"ArrowLeft\":\n          case \"ArrowRight\":\n            if (currColIndex !== nextColIndex) {\n              const currColKey = columns[currColIndex].key as keyof R;\n              const currValue = rawRows[rowIdx][currColKey];\n              const nextColKey = columns[nextColIndex].key as keyof R;\n              const nextValue = rawRows[rowIdx][nextColKey];\n\n              let colIndex = -1;\n\n              if (currValue && nextValue) {\n                // find last column with value\n                for (\n                  colIndex = nextColIndex + colIndexDelta;\n                  colIndex <= columns.length - 1 && colIndex >= 1;\n                  colIndex += colIndexDelta\n                ) {\n                  const colKey = columns[colIndex].key as keyof R;\n                  const value = rawRows[rowIdx][colKey];\n\n                  if (!value) break;\n                }\n                colIndex -= colIndexDelta;\n              } else {\n                // find next column with value\n                for (\n                  colIndex = nextColIndex;\n                  colIndex < columns.length - 1 && colIndex > 1;\n                  colIndex += colIndexDelta\n                ) {\n                  const colKey = columns[colIndex].key as keyof R;\n                  const value = rawRows[rowIdx][colKey];\n\n                  if (value) break;\n                }\n              }\n\n              return { idx: colIndex, rowIdx };\n            }\n        }\n        return selectedPosition;\n      } else {\n        switch (key) {\n          case \"ArrowUp\":\n            return { idx, rowIdx: rowIdx - 1 };\n          case \"ArrowDown\":\n            return { idx, rowIdx: rowIdx + 1 };\n          case \"ArrowLeft\":\n            return { idx: Math.max(idx - 1, 1), rowIdx };\n          case \"ArrowRight\":\n            return { idx: idx + 1, rowIdx };\n          default:\n            return selectedPosition;\n        }\n      }\n    };\n\n    switch (key) {\n      case \"ArrowUp\":\n      case \"ArrowDown\":\n      case \"ArrowLeft\":\n      case \"ArrowRight\":\n        return handleArrowKeyPress(key);\n      case \"Tab\":\n        if (selectedPosition.idx === -1 && selectedPosition.rowIdx === -1) {\n          return shiftKey\n            ? { idx: columns.length - 1, rowIdx: rows.length - 1 }\n            : { idx: 0, rowIdx: 0 };\n        }\n        return { idx: idx + (shiftKey ? -1 : 1), rowIdx };\n      case \"Home\":\n        // If row is selected then move focus to the first row\n        if (isRowSelected) return { idx, rowIdx: 0 };\n        return ctrlKey ? { idx: 1, rowIdx: 0 } : { idx: 1, rowIdx };\n      case \"End\":\n        // If row is selected then move focus to the last row.\n        if (isRowSelected) return { idx, rowIdx: rows.length - 1 };\n        return ctrlKey\n          ? { idx: columns.length - 1, rowIdx: rows.length - 1 }\n          : { idx: columns.length - 1, rowIdx };\n      case \"PageUp\":\n        if (altKey) {\n          let workingWidth = gridWidth - totalFrozenColumnWidth;\n          const lastViewportColumn =\n            viewportColumns[viewportColumns.length - 2];\n          let index = lastViewportColumn.idx;\n\n          while (true) {\n            if (index === columns.length - 1) break;\n\n            const columnMetric = columnMetrics.get(columns[index]);\n\n            if (columnMetric && workingWidth >= columnMetric.width) {\n              workingWidth = workingWidth - columnMetric.width;\n              index++;\n            } else break;\n          }\n\n          return { idx: index, rowIdx };\n        } else {\n          const nextRowIdx = Math.max(\n            0,\n            rowIdx - Math.floor(clientHeight / rowHeight)\n          );\n          return { idx, rowIdx: nextRowIdx };\n        }\n      case \"PageDown\":\n        if (altKey) {\n          let workingWidth = gridWidth - totalFrozenColumnWidth;\n          const firstViewportColumn = viewportColumns.filter(\n            (column) => !column.frozen\n          )[1];\n          let index = firstViewportColumn.idx;\n\n          while (true) {\n            if (index === 0) break;\n\n            const columnMetric = columnMetrics.get(columns[index]);\n\n            if (columnMetric && workingWidth >= columnMetric.width) {\n              workingWidth = workingWidth - columnMetric.width;\n              index--;\n            } else break;\n          }\n\n          return { idx: index || 1, rowIdx };\n        } else {\n          const nextRowIdx = Math.min(\n            rawRows.length - 1,\n            rowIdx + Math.floor(clientHeight / rowHeight)\n          );\n          return { idx, rowIdx: nextRowIdx };\n        }\n      default:\n        return selectedPosition;\n    }\n  }\n\n  function navigate(event: React.KeyboardEvent<HTMLDivElement>) {\n    if (selectedPosition.mode === \"EDIT\") {\n      const onNavigation =\n        columns[selectedPosition.idx].editorOptions?.onNavigation ??\n        onEditorNavigation;\n      if (!onNavigation(event)) return;\n    }\n    const { key, shiftKey, altKey } = event;\n    const ctrlKey = isCtrlKeyHeldDown(event);\n    let nextPosition = getNextPosition(key, ctrlKey, shiftKey, altKey);\n    let mode = cellNavigationMode;\n    if (key === \"Tab\") {\n      // If we are in a position to leave the grid, stop editing but stay in that cell\n      if (\n        canExitGrid({\n          shiftKey,\n          cellNavigationMode,\n          columns,\n          rowsCount: rows.length,\n          selectedPosition,\n        })\n      ) {\n        commitEditorChanges();\n        // Allow focus to leave the grid so the next control in the tab order can be focused\n        return;\n      }\n\n      mode = cellNavigationMode === \"NONE\" ? \"CHANGE_ROW\" : cellNavigationMode;\n    }\n\n    // Do not allow focus to leave\n    event.preventDefault();\n\n    nextPosition = getNextSelectedCellPosition<R, SR>({\n      columns,\n      rowsCount: rows.length,\n      cellNavigationMode: mode,\n      nextPosition,\n    });\n\n    selectCell(nextPosition, false, key === \"Tab\" ? false : shiftKey);\n  }\n\n  function getDraggedOverCellIdx(currentRowIdx: number): number | undefined {\n    if (draggedOverRowIdx === undefined) return;\n    const { rowIdx } = selectedPosition;\n\n    const isDraggedOver =\n      rowIdx < draggedOverRowIdx\n        ? rowIdx < currentRowIdx && currentRowIdx <= draggedOverRowIdx\n        : rowIdx > currentRowIdx && currentRowIdx >= draggedOverRowIdx;\n\n    return isDraggedOver ? selectedPosition.idx : undefined;\n  }\n\n  function getSelectedCellProps(\n    rowIdx: number\n  ): SelectedCellProps | EditCellProps<R> | undefined {\n    if (selectedPosition.rowIdx !== rowIdx) return;\n\n    if (selectedPosition.mode === \"EDIT\") {\n      return {\n        mode: \"EDIT\",\n        idx: selectedPosition.idx,\n        onKeyDown: handleKeyDown,\n        editorProps: {\n          editorPortalTarget,\n          rowHeight,\n          row: selectedPosition.row,\n          onRowChange: handleEditorRowChange,\n          onClose: handleOnClose,\n        },\n      };\n    }\n\n    return {\n      mode: \"SELECT\",\n      idx: selectedPosition.idx,\n      onFocus: handleFocus,\n      onKeyDown: handleKeyDown,\n      dragHandleProps:\n        enableCellDragAndDrop && isCellEditable(selectedPosition)\n          ? { onMouseDown: handleMouseDown, onDoubleClick: handleDoubleClick }\n          : undefined,\n    };\n  }\n\n  function getViewportRows() {\n    const rowElements = [];\n    let startRowIndex = 0;\n    for (\n      let rowIdx = rowOverscanStartIdx;\n      rowIdx <= rowOverscanEndIdx;\n      rowIdx++\n    ) {\n      const row = rows[rowIdx];\n      const top = rowIdx * rowHeight + totalHeaderHeight;\n      if (isGroupRow(row)) {\n        ({ startRowIndex } = row);\n        rowElements.push(\n          <GroupRowRenderer<R, SR>\n            aria-level={row.level + 1} // aria-level is 1-based\n            aria-setsize={row.setSize}\n            aria-posinset={row.posInSet + 1} // aria-posinset is 1-based\n            aria-rowindex={headerRowsCount + startRowIndex + 1} // aria-rowindex is 1 based\n            key={row.id}\n            id={row.id}\n            groupKey={row.groupKey}\n            viewportColumns={viewportColumns}\n            childRows={row.childRows}\n            rowIdx={rowIdx}\n            top={top}\n            level={row.level}\n            isExpanded={row.isExpanded}\n            selectedCellIdx={\n              selectedPosition.rowIdx === rowIdx\n                ? selectedPosition.idx\n                : undefined\n            }\n            isRowSelected={\n              isSelectable &&\n              row.childRows.every((cr) => selectedRows?.has(rowKeyGetter!(cr)))\n            }\n            onFocus={\n              selectedPosition.rowIdx === rowIdx ? handleFocus : undefined\n            }\n            onKeyDown={\n              selectedPosition.rowIdx === rowIdx ? handleKeyDown : undefined\n            }\n            selectCell={selectCellWrapper}\n            selectRow={selectRowWrapper}\n            toggleGroup={toggleGroupWrapper}\n          />\n        );\n        continue;\n      }\n\n      startRowIndex++;\n      let key: React.Key = hasGroups ? startRowIndex : rowIdx;\n      let isRowSelected = false;\n      if (typeof rowKeyGetter === \"function\") {\n        key = rowKeyGetter(row);\n        isRowSelected = selectedRows?.has(key) ?? false;\n      }\n\n      rowElements.push(\n        <RowRenderer\n          aria-rowindex={\n            headerRowsCount + (hasGroups ? startRowIndex : rowIdx) + 1\n          } // aria-rowindex is 1 based\n          aria-selected={isSelectable ? isRowSelected : undefined}\n          key={key}\n          rowIdx={rowIdx}\n          row={row}\n          viewportColumns={viewportColumns}\n          isRowSelected={isRowSelected}\n          onRowClick={onRowClick}\n          rowClass={rowClass}\n          top={top}\n          copiedCellIdx={\n            copiedCell !== null && copiedCell.row === row\n              ? columns.findIndex((c) => c.key === copiedCell.columnKey)\n              : undefined\n          }\n          draggedOverCellIdx={getDraggedOverCellIdx(rowIdx)}\n          setDraggedOverRowIdx={isDragging ? setDraggedOverRowIdx : undefined}\n          selectedCellProps={getSelectedCellProps(rowIdx)}\n          onRowChange={handleFormatterRowChangeWrapper}\n          selectCell={selectCellWrapper}\n          selectRow={selectRowWrapper}\n          isFromExternalChange={isFromExternalChange}\n          setIsFromExternalChange={setIsFromExternalChange}\n        />\n      );\n    }\n\n    return rowElements;\n  }\n\n  // Reset the positions if the current values are no longer valid. This can happen if a column or row is removed\n  if (\n    selectedPosition.idx >= columns.length ||\n    selectedPosition.rowIdx >= rows.length\n  ) {\n    setSelectedPosition({ idx: -1, rowIdx: -1, mode: \"SELECT\" });\n    setDraggedOverRowIdx(undefined);\n  }\n\n  if (\n    selectedPosition.mode === \"EDIT\" &&\n    rows[selectedPosition.rowIdx] !== selectedPosition.originalRow\n  ) {\n    const colKey = columns[selectedPosition.idx].key as keyof R;\n    const newOriginalRow = rows[selectedPosition.rowIdx] as R;\n    const currentValue = selectedPosition.row[colKey];\n    const newEditedRow = { ...newOriginalRow, [colKey]: currentValue };\n\n    setSelectedPosition((oldData) => ({\n      ...oldData,\n      originalRow: newOriginalRow,\n      row: newEditedRow,\n    }));\n    setIsFromExternalChange(true);\n  }\n\n  let scrollTimer: number | undefined = undefined;\n\n  const handleEdgeScroll = useCallback(\n    (e: MouseEvent) => {\n      if (e.buttons === 1 && gridRef && gridRef.current) {\n        const { current } = gridRef;\n\n        const edgeSize = scrollEdgeSize || 100;\n\n        const pointerX = e.clientX;\n        const pointerY = e.clientY;\n\n        const boundingRect = current.getBoundingClientRect();\n\n        const edgeTop = boundingRect.top + edgeSize;\n        const edgeBottom = boundingRect.bottom - edgeSize;\n        const edgeLeft = boundingRect.left + totalFrozenColumnWidth + edgeSize;\n        const edgeRight = boundingRect.right - edgeSize;\n\n        const inElement =\n          pointerX > boundingRect.left &&\n          pointerX < boundingRect.right &&\n          pointerY > boundingRect.top &&\n          pointerY < boundingRect.bottom;\n\n        const inLeftEdge = pointerX < edgeLeft;\n        const inRightEdge = pointerX > edgeRight;\n        const inTopEdge = pointerY < edgeTop;\n        const inBottomEdge = pointerY > edgeBottom;\n\n        if (\n          !inElement ||\n          !(inLeftEdge || inRightEdge || inTopEdge || inBottomEdge)\n        ) {\n          clearTimeout(scrollTimer);\n          return;\n        }\n\n        const maxScrollLeft = totalColumnWidth;\n        const maxScrollTop = rowsCount * rowHeight;\n\n        const checkForWindowScroll = () => {\n          clearTimeout(scrollTimer);\n\n          if (adjustWindowScroll()) {\n            scrollTimer = setTimeout(checkForWindowScroll, 30);\n          }\n        };\n\n        const adjustWindowScroll = () => {\n          const currentScrollLeft = current.scrollLeft;\n          const currentScrollTop = current.scrollTop;\n\n          const canScrollTop = currentScrollTop > 0;\n          const canScrollBottom = currentScrollTop < maxScrollTop;\n          const canScrollLeft = currentScrollLeft > 0;\n          const canScrollRight = currentScrollLeft < maxScrollLeft;\n\n          let nextScrollLeft = currentScrollLeft;\n          let nextScrollTop = currentScrollTop;\n\n          const maxScrollStep = scrollEdgeStep || 20;\n\n          if (inRightEdge && canScrollRight) {\n            const intensity = (pointerX - edgeRight) / edgeSize;\n            nextScrollLeft = nextScrollLeft + maxScrollStep * intensity;\n          } else if (inLeftEdge && canScrollLeft) {\n            const intensity = (edgeLeft - pointerX) / edgeSize;\n            nextScrollLeft = nextScrollLeft - maxScrollStep * intensity;\n          }\n\n          if (inTopEdge && canScrollTop) {\n            const intensity = (edgeTop - pointerY) / edgeSize;\n            nextScrollTop = nextScrollTop - maxScrollStep * intensity;\n          } else if (inBottomEdge && canScrollBottom) {\n            const intensity = (pointerY - edgeBottom) / edgeSize;\n            nextScrollTop = nextScrollTop + maxScrollStep * intensity;\n          }\n\n          nextScrollLeft = Math.max(0, Math.min(maxScrollLeft, nextScrollLeft));\n          nextScrollTop = Math.max(0, Math.min(maxScrollTop, nextScrollTop));\n\n          if (\n            nextScrollLeft !== currentScrollLeft ||\n            nextScrollTop !== currentScrollTop\n          ) {\n            current.scrollTo({\n              top: nextScrollTop,\n              left: nextScrollLeft,\n            });\n            return true;\n          } else return false;\n        };\n\n        checkForWindowScroll();\n      } else {\n        clearTimeout(scrollTimer);\n      }\n    },\n    [scrollEdgeSize, scrollEdgeStep]\n  );\n\n  useEffect(() => {\n    window.addEventListener(\"mousemove\", handleEdgeScroll);\n    return () => {\n      window.removeEventListener(\"mousemove\", handleEdgeScroll);\n    };\n  }, []);\n\n  return (\n    <div\n      role={hasGroups ? \"treegrid\" : \"grid\"}\n      aria-label={ariaLabel}\n      aria-labelledby={ariaLabelledBy}\n      aria-describedby={ariaDescribedBy}\n      aria-multiselectable={isSelectable ? true : undefined}\n      aria-colcount={columns.length}\n      aria-rowcount={headerRowsCount + rowsCount + summaryRowsCount}\n      className={clsx(\n        \"rdg\",\n        { \"rdg-viewport-dragging\": isDragging },\n        className\n      )}\n      style={\n        ({\n          ...style,\n          \"--header-row-height\": `${headerRowHeight}px`,\n          \"--filter-row-height\": `${headerFiltersHeight}px`,\n          \"--row-width\": `${totalColumnWidth}px`,\n          \"--row-height\": `${rowHeight}px`,\n          ...layoutCssVars,\n        } as unknown) as React.CSSProperties\n      }\n      ref={gridRef}\n      onScroll={handleScroll}\n    >\n      <HeaderRow<R, SR>\n        rowKeyGetter={rowKeyGetter}\n        rows={rawRows}\n        columns={viewportColumns}\n        onColumnResize={handleColumnResize}\n        allRowsSelected={selectedRows?.size === rawRows.length}\n        onSelectedRowsChange={onSelectedRowsChange}\n        sortColumn={sortColumn}\n        sortDirection={sortDirection}\n        onSort={onSort}\n      />\n      {enableFilterRow && (\n        <FilterRow<R, SR>\n          columns={viewportColumns}\n          filters={filters}\n          onFiltersChange={onFiltersChange}\n        />\n      )}\n      {rows.length === 0 && EmptyRowsRenderer ? (\n        <EmptyRowsRenderer />\n      ) : (\n        <>\n          <div\n            ref={focusSinkRef}\n            tabIndex={0}\n            className=\"rdg-focus-sink\"\n            onKeyDown={handleKeyDown}\n          />\n          <div\n            style={{ height: Math.max(rows.length * rowHeight, clientHeight) }}\n          />\n          {getViewportRows()}\n          {summaryRows?.map((row, rowIdx) => (\n            <SummaryRow<R, SR>\n              aria-rowindex={headerRowsCount + rowsCount + rowIdx + 1}\n              key={rowIdx}\n              rowIdx={rowIdx}\n              row={row}\n              bottom={rowHeight * (summaryRows.length - 1 - rowIdx)}\n              viewportColumns={viewportColumns}\n            />\n          ))}\n        </>\n      )}\n    </div>\n  );\n}\n\nexport default forwardRef(DataGrid) as <R, SR = unknown>(\n  props: DataGridProps<R, SR> & React.RefAttributes<DataGridHandle>\n) => JSX.Element;\n","import { useCallback, useState } from \"react\";\nimport type { EditorProps } from \"../types\";\n\nexport default function TextEditor<TRow, TSummaryRow = unknown>({\n  row,\n  column,\n  onRowChange,\n  onClose,\n  isFromExternalChange,\n  setIsFromExternalChange,\n}: EditorProps<TRow, TSummaryRow>) {\n  const [isCellJustFocused, setIsCellJustFocused] = useState<boolean>(false);\n\n  const handleFocusAndSelect = useCallback(\n    (input: HTMLInputElement | null) => {\n      input?.focus();\n\n      if (isFromExternalChange) {\n        setIsCellJustFocused(true);\n        setIsFromExternalChange(false);\n      } else {\n        if (isCellJustFocused) setIsCellJustFocused(false);\n        else input?.select();\n      }\n    },\n    [setIsFromExternalChange, isFromExternalChange]\n  );\n\n  return (\n    <input\n      className=\"rdg-text-editor\"\n      ref={handleFocusAndSelect}\n      value={(row[column.key as keyof TRow] as unknown) as string}\n      onChange={(event) =>\n        onRowChange({ ...row, [column.key]: event.target.value })\n      }\n      onBlur={() => onClose(true)}\n    />\n  );\n}\n"],"names":["stopPropagation","event","wrapEvent","ourHandler","theirHandler","undefined","nonInputKeys","Set","isCtrlKeyHeldDown","e","ctrlKey","metaKey","key","isDefaultCellInput","has","onEditorNavigation","target","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","matches","isSelectedCellEditable","selectedPosition","columns","rows","isGroupRow","column","idx","row","rowIdx","editor","rowGroup","editable","getNextSelectedCellPosition","cellNavigationMode","rowsCount","nextPosition","columnsCount","length","isAfterLastColumn","isBeforeFirstColumn","isLastRow","isFirstRow","canExitGrid","shiftKey","atLastCellInRow","atFirstCellInRow","atLastRow","atFirstRow","assertIsValidKeyGetter","keyGetter","Error","getCellStyle","frozen","left","gridColumnStart","FilterRow","filters","onFiltersChange","onChange","value","newFilters","_jsx","map","className","clsx","isLastFrozenColumn","filterRenderer","memo","useFocusRef","isCellSelected","ref","useRef","useLayoutEffect","current","focus","preventScroll","SelectCellFormatter","tabIndex","disabled","onClick","ariaLabel","ariaLabelledBy","inputRef","handleChange","checked","nativeEvent","_jsxs","ValueFormatter","props","ToggleGroupFormatter","groupKey","isExpanded","toggleGroup","cellRef","handleKeyDown","d","SELECT_COLUMN_KEY","SelectColumn","name","width","maxWidth","resizable","sortable","headerRenderer","allRowsSelected","onAllRowsSelectionChange","formatter","isRowSelected","onRowSelectionChange","groupFormatter","GroupCell","id","childRows","groupColumnIndex","selectRow","toggleGroupWrapper","isShiftClick","isLevelMatching","cursor","GroupedRow","viewportColumns","top","level","selectedCellIdx","selectCell","selectGroup","SortableHeaderCell","onSort","sortColumn","sortDirection","children","sortText","sortDescendingFirst","direction","getAriaSort","HeaderCell","onResize","onPointerDown","pointerType","buttons","currentTarget","pointerId","right","getBoundingClientRect","offset","clientX","onPointerMove","onPointerUp","window","removeEventListener","preventDefault","addEventListener","getCell","headerCellClass","HeaderRow","rowKeyGetter","onSelectedRowsChange","onColumnResize","handleAllRowsSelectionChange","useCallback","newSelectedRows","add","useCombinedRefs","refs","handle","useClickOutside","frameRequestRef","cancelAnimationFrameRequest","cancelAnimationFrame","onClickRef","useEffect","onOutsideClick","onWindowCaptureClick","requestAnimationFrame","capture","useGridDimensions","gridRef","gridWidth","setGridWidth","useState","gridHeight","setGridHeight","ResizeObserver","resizeObserver","clientWidth","clientHeight","observe","disconnect","useViewportColumns","rawColumns","columnWidths","viewportWidth","scrollLeft","defaultColumnOptions","rawGroupBy","minColumnWidth","minWidth","defaultFormatter","defaultSortable","defaultResizable","lastFrozenColumnIndex","groupBy","useMemo","rawColumn","isGroup","includes","sort","aKey","frozenA","bKey","frozenB","indexOf","forEach","push","layoutCssVars","totalColumnWidth","totalFrozenColumnWidth","columnMetrics","Map","templateColumns","allocatedWidth","unassignedColumnsCount","getSpecifiedWidth","clampColumnWidth","set","unallocatedWidth","unallocatedColumnWidth","columnMetric","get","i","colOverscanStartIdx","colOverscanEndIdx","viewportLeft","viewportRight","lastColIdx","firstUnfrozenColumnIdx","Math","min","colVisibleStartIdx","colVisibleEndIdx","max","colIdx","test","floor","parseInt","RENDER_BACTCH_SIZE","isReadonlyArray","arr","Array","isArray","useViewportRows","rawRows","rowHeight","scrollTop","rowGrouper","expandedGroupIds","groupedRows","groupRows","groupByKey","remainingGroupByKeys","startRowIndex","groupRowsCount","groups","Object","entries","childGroups","childRowsCount","allGroupRows","flattenedRows","expandGroup","parentId","keys","posInSet","groupRow","setSize","overscanThreshold","rowVisibleStartIdx","rowVisibleEndIdx","rowOverscanStartIdx","rowOverscanEndIdx","ceil","useLatestFunc","fn","args","Cell","isCopied","isDraggedOver","dragHandleProps","onRowClick","onDoubleClick","onContextMenu","onRowChange","cellClass","selectCellWrapper","openEditor","handleClick","editorOptions","editOnClick","handleContextMenu","handleDoubleClick","handleRowChange","newRow","forwardRef","EditorContainer","isFromExternalChange","setIsFromExternalChange","onClickCapture","createPortal","editorPortalTarget","EditCell","editorProps","dimensions","setDimensions","node","getCellContent","docTop","docLeft","document","scrollingElement","documentElement","gridLeft","gridTop","Row","cellRenderer","CellRenderer","copiedCellIdx","draggedOverCellIdx","selectedCellProps","rowClass","setDraggedOverRowIdx","onMouseEnter","ariaRowIndex","ariaSelected","handleDragEnter","mode","onKeyDown","onFocus","SummaryCell","summaryFormatter","SummaryFormatter","summaryCellClass","SummaryRow","bottom","body","globalThis","DataGrid","summaryRows","onRowsChange","onCellChange","headerRowHeight","headerFiltersHeight","selectedRows","onExpandedGroupIdsChange","rowRenderer","RowRenderer","emptyRowsRenderer","EmptyRowsRenderer","onScroll","onSelectedCellChange","onAltArrowKeyPress","onFill","onPaste","scrollEdgeSize","scrollEdgeStep","enableFilterRow","style","ariaDescribedBy","setScrollTop","setScrollLeft","setColumnWidths","setSelectedPosition","copiedCell","setCopiedCell","isDragging","setDragging","draggedOverRowIdx","setOverRowIdx","focusSinkRef","prevSelectedPosition","latestDraggedOverRowIdx","lastSelectedRowIdx","isCellFocusable","selectRowWrapper","handleFormatterRowChangeWrapper","updateRow","headerRowsCount","summaryRowsCount","totalHeaderHeight","isSelectable","hasGroups","minColIdx","enableCellDragAndDrop","isCellWithinBounds","scrollToCell","useImperativeHandle","scrollToColumn","scrollToRow","scrollTo","behavior","updateSelectedPositionRowIdx","prevPosition","handleColumnResize","newColumnWidths","childRow","rowKey","delete","previousRowIdx","step","sign","expandedGroupId","newExpandedGroupIds","keyCode","cKey","vKey","handleCopy","handlePaste","closeEditor","navigate","handleCellInput","handleFocus","handleScroll","getRawRowIdx","updatedRows","indexes","colKey","newValue","String","oldValue","commitEditorChanges","originalRow","columnKey","targetRow","isCellEditable","updatedTargetRow","sourceRow","sourceColumnKey","targetColumnKey","onCellKeyDown","isDefaultPrevented","handleDragEnd","overRowIdx","endRowIndex","targetRows","slice","updatedTargetRows","targetRowIdx","handleMouseDown","onMouseOver","onMouseUp","handleEditorRowChange","commitChanges","position","handleOnClose","enableEditor","resetSelection","isCellAtLeftBoundary","isCellAtRightBoundary","getNextPosition","altKey","parentRowIdx","parentRow","handleArrowKeyPress","colIndexDelta","rowIndexDelta","currColIndex","nextColIndex","currRowIndex","nextRowIndex","currValue","nextValue","rowIndex","currColKey","nextColKey","colIndex","workingWidth","lastViewportColumn","index","nextRowIdx","firstViewportColumn","filter","onNavigation","getDraggedOverCellIdx","currentRowIdx","getSelectedCellProps","onClose","onMouseDown","getViewportRows","rowElements","every","cr","findIndex","c","newOriginalRow","currentValue","newEditedRow","oldData","scrollTimer","handleEdgeScroll","edgeSize","pointerX","pointerY","clientY","boundingRect","edgeTop","edgeBottom","edgeLeft","edgeRight","inElement","inLeftEdge","inRightEdge","inTopEdge","inBottomEdge","clearTimeout","maxScrollLeft","maxScrollTop","checkForWindowScroll","adjustWindowScroll","setTimeout","currentScrollLeft","currentScrollTop","canScrollTop","canScrollBottom","canScrollLeft","canScrollRight","nextScrollLeft","nextScrollTop","maxScrollStep","intensity","size","height","TextEditor","isCellJustFocused","setIsCellJustFocused","handleFocusAndSelect","input","select"],"mappings":"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"}