{"version":3,"file":"bundle.cjs","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/style/cell.ts","../src/style/core.ts","../src/style/row.ts","../src/hooks/useLayoutEffect.ts","../src/hooks/useFocusRef.ts","../src/formatters/SelectCellFormatter.tsx","../src/formatters/ValueFormatter.tsx","../src/formatters/ToggleGroupFormatter.tsx","../src/hooks/useRowSelection.ts","../src/utils/colSpanUtils.ts","../src/utils/domUtils.ts","../src/utils/keyboardUtils.ts","../src/utils/selectedCellUtils.ts","../src/utils/index.ts","../src/Columns.tsx","../src/hooks/useCalculatedColumns.ts","../src/hooks/useCombinedRefs.ts","../src/hooks/useGridDimensions.ts","../src/hooks/useLatestFunc.ts","../src/hooks/useRovingCellRef.ts","../src/hooks/useRovingRowRef.ts","../src/hooks/useViewportColumns.ts","../src/hooks/useViewportRows.ts","../src/headerCells/SortableHeaderCell.tsx","../src/HeaderCell.tsx","../src/HeaderRow.tsx","../src/Cell.tsx","../src/Row.tsx","../src/GroupCell.tsx","../src/GroupRow.tsx","../src/SummaryCell.tsx","../src/SummaryRow.tsx","../src/EditCell.tsx","../src/DragHandle.tsx","../src/DataGrid.tsx","../src/editors/TextEditor.tsx"],"sourcesContent":["function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n","import { css } from '@linaria/core';\n\nexport const cell = css`\n  contain: strict;\n  contain: size layout style paint;\n  padding: 0 8px;\n  border-right: 1px solid var(--border-color);\n  border-bottom: 1px solid var(--border-color);\n  background-color: inherit;\n\n  white-space: nowrap;\n  overflow: hidden;\n  overflow: clip;\n  text-overflow: ellipsis;\n  outline: none;\n\n  &[aria-selected='true'] {\n    box-shadow: inset 0 0 0 2px var(--selection-color);\n  }\n`;\n\nexport const cellClassname = `rdg-cell ${cell}`;\n\nconst cellFrozen = css`\n  position: sticky;\n  /* Should have a higher value than 0 to show up above unfrozen cells */\n  z-index: 1;\n`;\n\nexport const cellFrozenClassname = `rdg-cell-frozen ${cellFrozen}`;\n\nexport const cellFrozenLast = css`\n  box-shadow: 2px 0 5px -2px rgba(136, 136, 136, 0.3);\n`;\n\nexport const cellFrozenLastClassname = `rdg-cell-frozen-last ${cellFrozenLast}`;\n","import { css } from '@linaria/core';\nimport { row } from './row';\n\nconst lightTheme = `\n  --color: #000;\n  --border-color: #ddd;\n  --summary-border-color: #aaa;\n  --background-color: hsl(0deg 0% 100%);\n  --header-background-color: hsl(0deg 0% 97.5%);\n  --row-hover-background-color: hsl(0deg 0% 96%);\n  --row-selected-background-color: hsl(207deg 76% 92%);\n  --row-selected-hover-background-color: hsl(207deg 76% 88%);\n\n  --checkbox-color: hsl(207deg 100% 29%);\n  --checkbox-focus-color: hsl(207deg 100% 69%);\n  --checkbox-disabled-border-color: #ccc;\n  --checkbox-disabled-background-color: #ddd;\n`;\n\nconst darkTheme = `\n  --color: #ddd;\n  --border-color: #444;\n  --summary-border-color: #555;\n  --background-color: hsl(0deg 0% 13%);\n  --header-background-color: hsl(0deg 0% 10.5%);\n  --row-hover-background-color: hsl(0deg 0% 9%);\n  --row-selected-background-color: hsl(207deg 76% 42%);\n  --row-selected-hover-background-color: hsl(207deg 76% 38%);\n\n  --checkbox-color: hsl(207deg 100% 79%);\n  --checkbox-focus-color: hsl(207deg 100% 89%);\n  --checkbox-disabled-border-color: #000;\n  --checkbox-disabled-background-color: #333;\n`;\n\nconst root = css`\n  ${lightTheme}\n  --selection-color: #66afe9;\n  --font-size: 14px;\n\n  color-scheme: var(--color-scheme, light dark);\n\n  /* https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context */\n  /* We set a stacking context so internal elements don't render on top of external components. */\n  contain: strict;\n  contain: size layout style paint;\n  content-visibility: auto;\n  height: 350px;\n  border: 1px solid var(--border-color);\n  box-sizing: border-box;\n  overflow: auto;\n  user-select: none;\n  background-color: var(--background-color);\n  color: var(--color);\n  font-size: var(--font-size);\n  direction: ltr;\n\n  /* set stacking context in safari */\n  @supports not (contain: strict) {\n    position: relative;\n    z-index: 0;\n  }\n\n  *,\n  *::before,\n  *::after {\n    box-sizing: inherit;\n  }\n\n  &.rdg-dark {\n    --color-scheme: dark;\n    ${darkTheme}\n  }\n\n  &.rdg-light {\n    --color-scheme: light;\n  }\n\n  @media (prefers-color-scheme: dark) {\n    &:not(.rdg-light) {\n      ${darkTheme}\n    }\n  }\n`;\n\nexport const rootClassname = `rdg ${root}`;\n\nconst viewportDragging = css`\n  &.${row} {\n    cursor: move;\n  }\n`;\n\nexport const viewportDraggingClassname = `rdg-viewport-dragging ${viewportDragging}`;\n","import { css } from '@linaria/core';\n\nexport const row = css`\n  contain: strict;\n  contain: size layout style paint;\n  display: grid;\n  grid-template-rows: var(--row-height);\n  grid-template-columns: var(--template-columns);\n  position: absolute;\n  left: 0;\n  width: var(--row-width);\n  height: var(--row-height); /* needed on Firefox */\n  line-height: var(--row-height);\n  background-color: var(--background-color);\n\n  &:hover {\n    background-color: var(--row-hover-background-color);\n  }\n\n  &[aria-selected='true'] {\n    background-color: var(--row-selected-background-color);\n\n    &:hover {\n      background-color: var(--row-selected-hover-background-color);\n    }\n  }\n`;\n\nexport const rowClassname = `rdg-row ${row}`;\n","// eslint-disable-next-line no-restricted-imports\nimport { useEffect, useLayoutEffect as useOriginalLayoutEffect } from 'react';\n\n// Silence silly warning\n// https://reactjs.org/link/uselayouteffect-ssr\nexport const useLayoutEffect = typeof window === 'undefined' ? useEffect : useOriginalLayoutEffect;\n","import { useRef } from 'react';\nimport { useLayoutEffect } from './useLayoutEffect';\n\nexport function useFocusRef<T extends HTMLOrSVGElement>(isSelected: boolean) {\n  const ref = useRef<T>(null);\n\n  useLayoutEffect(() => {\n    if (!isSelected) return;\n    ref.current?.focus({ preventScroll: true });\n  }, [isSelected]);\n\n  return {\n    ref,\n    tabIndex: isSelected ? 0 : -1\n  };\n}\n","import clsx from 'clsx';\nimport { css } from '@linaria/core';\nimport { useFocusRef } from '../hooks/useFocusRef';\n\nconst checkboxLabel = css`\n  cursor: pointer;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  position: absolute;\n  inset: 0;\n  margin-right: 1px; /* align checkbox in row group cell */\n`;\n\nconst checkboxLabelClassname = `rdg-checkbox-label ${checkboxLabel}`;\n\nconst checkboxInput = css`\n  all: unset;\n  width: 0;\n  margin: 0;\n`;\n\nconst checkboxInputClassname = `rdg-checkbox-input ${checkboxInput}`;\n\nconst checkbox = css`\n  content: '';\n  width: 20px;\n  height: 20px;\n  border: 2px solid var(--border-color);\n  background-color: var(--background-color);\n\n  .${checkboxInput}:checked + & {\n    background-color: var(--checkbox-color);\n    box-shadow: inset 0px 0px 0px 4px var(--background-color);\n  }\n\n  .${checkboxInput}:focus + & {\n    border-color: var(--checkbox-focus-color);\n  }\n`;\n\nconst checkboxClassname = `rdg-checkbox ${checkbox}`;\n\nconst checkboxLabelDisabled = css`\n  cursor: default;\n\n  .${checkbox} {\n    border-color: var(--checkbox-disabled-border-color);\n    background-color: var(--checkbox-disabled-background-color);\n  }\n`;\n\nconst checkboxLabelDisabledClassname = `rdg-checkbox-label-disabled ${checkboxLabelDisabled}`;\n\ntype SharedInputProps = Pick<\n  React.InputHTMLAttributes<HTMLInputElement>,\n  'disabled' | 'onClick' | 'aria-label' | '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  isCellSelected,\n  disabled,\n  onClick,\n  onChange,\n  'aria-label': ariaLabel,\n  'aria-labelledby': ariaLabelledBy\n}: SelectCellFormatterProps) {\n  const { ref, tabIndex } = 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(checkboxLabelClassname, { [checkboxLabelDisabledClassname]: disabled })}>\n      <input\n        aria-label={ariaLabel}\n        aria-labelledby={ariaLabelledBy}\n        ref={ref}\n        type=\"checkbox\"\n        tabIndex={tabIndex}\n        className={checkboxInputClassname}\n        disabled={disabled}\n        checked={value}\n        onChange={handleChange}\n        onClick={onClick}\n      />\n      <div className={checkboxClassname} />\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 { css } from '@linaria/core';\nimport type { GroupFormatterProps } from '../types';\nimport { useFocusRef } from '../hooks/useFocusRef';\n\nconst groupCellContent = css`\n  outline: none;\n`;\n\nconst groupCellContentClassname = `rdg-group-cell-content ${groupCellContent}`;\n\nconst caret = css`\n  margin-left: 4px;\n  stroke: currentColor;\n  stroke-width: 1.5px;\n  fill: transparent;\n  vertical-align: middle;\n\n  > path {\n    transition: d 0.1s;\n  }\n`;\n\nconst caretClassname = `rdg-caret ${caret}`;\n\nexport function ToggleGroupFormatter<R, SR>({\n  groupKey,\n  isExpanded,\n  isCellSelected,\n  toggleGroup\n}: GroupFormatterProps<R, SR>) {\n  const { ref, tabIndex } = 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={ref}\n      className={groupCellContentClassname}\n      tabIndex={tabIndex}\n      onKeyDown={handleKeyDown}\n    >\n      {groupKey}\n      <svg viewBox=\"0 0 14 8\" width=\"14\" height=\"8\" className={caretClassname} aria-hidden>\n        <path d={d} />\n      </svg>\n    </span>\n  );\n}\n","import { createContext, useContext } from 'react';\nimport type { SelectRowEvent } from '../types';\n\nconst RowSelectionContext = createContext<boolean | undefined>(undefined);\n\nexport const RowSelectionProvider = RowSelectionContext.Provider;\n\nconst RowSelectionChangeContext = createContext<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  ((selectRowEvent: SelectRowEvent<any>) => void) | undefined\n>(undefined);\n\nexport const RowSelectionChangeProvider = RowSelectionChangeContext.Provider;\n\nexport function useRowSelection<R>(): [boolean, (selectRowEvent: SelectRowEvent<R>) => void] {\n  const rowSelectionContext = useContext(RowSelectionContext);\n  const rowSelectionChangeContext = useContext(RowSelectionChangeContext);\n\n  if (rowSelectionContext === undefined || rowSelectionChangeContext === undefined) {\n    throw new Error('useRowSelection must be used within DataGrid cells');\n  }\n\n  return [rowSelectionContext, rowSelectionChangeContext];\n}\n","import type { CalculatedColumn, ColSpanArgs } from '../types';\n\nexport function getColSpan<R, SR>(\n  column: CalculatedColumn<R, SR>,\n  lastFrozenColumnIndex: number,\n  args: ColSpanArgs<R, SR>\n): number | undefined {\n  const colSpan = typeof column.colSpan === 'function' ? column.colSpan(args) : 1;\n  if (\n    Number.isInteger(colSpan) &&\n    colSpan! > 1 &&\n    // ignore colSpan if it spans over both frozen and regular columns\n    (!column.frozen || column.idx + colSpan! - 1 <= lastFrozenColumnIndex)\n  ) {\n    return colSpan!;\n  }\n  return undefined;\n}\n","export function stopPropagation(event: React.SyntheticEvent) {\n  event.stopPropagation();\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 (\n    key === 'Tab' &&\n    (target instanceof HTMLInputElement ||\n      target instanceof HTMLTextAreaElement ||\n      target instanceof HTMLSelectElement)\n  ) {\n    return target.matches(\n      '.rdg-editor-container > :only-child, .rdg-editor-container > label:only-child > :only-child'\n    );\n  }\n  return false;\n}\n","import type { CalculatedColumn, Position, GroupRow, CellNavigationMode, Maybe } from '../types';\nimport { getColSpan } from './colSpanUtils';\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>({\n  selectedPosition,\n  columns,\n  rows,\n  isGroupRow\n}: IsSelectedCellEditableOpts<R, SR>): boolean {\n  const column = columns[selectedPosition.idx];\n  const row = rows[selectedPosition.rowIdx];\n  return !isGroupRow(row) && isCellEditable(column, row);\n}\n\nexport function isCellEditable<R, SR>(column: CalculatedColumn<R, SR>, row: R): boolean {\n  return (\n    column.editor != null &&\n    !column.rowGroup &&\n    (typeof column.editable === 'function' ? column.editable(row) : column.editable) !== false\n  );\n}\n\ninterface GetNextSelectedCellPositionOpts<R, SR> {\n  cellNavigationMode: CellNavigationMode;\n  columns: readonly CalculatedColumn<R, SR>[];\n  colSpanColumns: readonly CalculatedColumn<R, SR>[];\n  rows: readonly (R | GroupRow<R>)[];\n  summaryRows: Maybe<readonly SR[]>;\n  minRowIdx: number;\n  maxRowIdx: number;\n  currentPosition: Position;\n  nextPosition: Position;\n  lastFrozenColumnIndex: number;\n  isCellWithinBounds: (position: Position) => boolean;\n  isGroupRow: (row: R | GroupRow<R>) => row is GroupRow<R>;\n}\n\nexport function getSelectedCellColSpan<R, SR>({\n  rows,\n  summaryRows,\n  rowIdx,\n  lastFrozenColumnIndex,\n  column,\n  isGroupRow\n}: Pick<\n  GetNextSelectedCellPositionOpts<R, SR>,\n  'rows' | 'summaryRows' | 'isGroupRow' | 'lastFrozenColumnIndex'\n> & {\n  rowIdx: number;\n  column: CalculatedColumn<R, SR>;\n}) {\n  if (rowIdx === -1) {\n    return getColSpan(column, lastFrozenColumnIndex, { type: 'HEADER' });\n  }\n\n  if (rowIdx >= 0 && rowIdx < rows.length) {\n    const row = rows[rowIdx];\n    if (!isGroupRow(row)) {\n      return getColSpan(column, lastFrozenColumnIndex, { type: 'ROW', row });\n    }\n    return undefined;\n  }\n\n  if (summaryRows) {\n    return getColSpan(column, lastFrozenColumnIndex, {\n      type: 'SUMMARY',\n      row: summaryRows[rowIdx - rows.length]\n    });\n  }\n\n  return undefined;\n}\n\nexport function getNextSelectedCellPosition<R, SR>({\n  cellNavigationMode,\n  columns,\n  colSpanColumns,\n  rows,\n  summaryRows,\n  minRowIdx,\n  maxRowIdx,\n  currentPosition: { idx: currentIdx },\n  nextPosition,\n  lastFrozenColumnIndex,\n  isCellWithinBounds,\n  isGroupRow\n}: GetNextSelectedCellPositionOpts<R, SR>): Position {\n  let { idx: nextIdx, rowIdx: nextRowIdx } = nextPosition;\n\n  const setColSpan = (moveRight: boolean) => {\n    if (nextRowIdx >= 0 && nextRowIdx < rows.length) {\n      const row = rows[nextRowIdx];\n      if (isGroupRow(row)) return;\n    }\n    // If a cell within the colspan range is selected then move to the\n    // previous or the next cell depending on the navigation direction\n    for (const column of colSpanColumns) {\n      const colIdx = column.idx;\n      if (colIdx > nextIdx) break;\n      const colSpan = getSelectedCellColSpan({\n        rows,\n        summaryRows,\n        rowIdx: nextRowIdx,\n        lastFrozenColumnIndex,\n        column,\n        isGroupRow\n      });\n\n      if (colSpan && nextIdx > colIdx && nextIdx < colSpan + colIdx) {\n        nextIdx = colIdx + (moveRight ? colSpan : 0);\n        break;\n      }\n    }\n  };\n\n  if (isCellWithinBounds(nextPosition)) {\n    setColSpan(nextIdx - currentIdx > 0);\n  }\n\n  if (cellNavigationMode !== 'NONE') {\n    const columnsCount = columns.length;\n    const isAfterLastColumn = nextIdx === columnsCount;\n    const isBeforeFirstColumn = nextIdx === -1;\n\n    if (isAfterLastColumn) {\n      if (cellNavigationMode === 'CHANGE_ROW') {\n        const isLastRow = nextRowIdx === maxRowIdx;\n        if (!isLastRow) {\n          nextIdx = 0;\n          nextRowIdx += 1;\n        }\n      } else {\n        nextIdx = 0;\n      }\n    } else if (isBeforeFirstColumn) {\n      if (cellNavigationMode === 'CHANGE_ROW') {\n        const isFirstRow = nextRowIdx === minRowIdx;\n        if (!isFirstRow) {\n          nextRowIdx -= 1;\n          nextIdx = columnsCount - 1;\n        }\n      } else {\n        nextIdx = columnsCount - 1;\n      }\n      setColSpan(false);\n    }\n  }\n\n  return { idx: nextIdx, rowIdx: nextRowIdx };\n}\n\ninterface CanExitGridOpts {\n  cellNavigationMode: CellNavigationMode;\n  maxColIdx: number;\n  minRowIdx: number;\n  maxRowIdx: number;\n  selectedPosition: Position;\n  shiftKey: boolean;\n}\n\nexport function canExitGrid({\n  cellNavigationMode,\n  maxColIdx,\n  minRowIdx,\n  maxRowIdx,\n  selectedPosition: { rowIdx, idx },\n  shiftKey\n}: CanExitGridOpts): 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 === maxColIdx;\n    const atFirstCellInRow = idx === 0;\n    const atLastRow = rowIdx === maxRowIdx;\n    const atFirstRow = rowIdx === minRowIdx;\n\n    return shiftKey ? atFirstCellInRow && atFirstRow : atLastCellInRow && atLastRow;\n  }\n\n  return false;\n}\n","import clsx from 'clsx';\n\nimport type { CalculatedColumn } from '../types';\nimport { cellClassname, cellFrozenClassname, cellFrozenLastClassname } from '../style';\n\nexport * from './colSpanUtils';\nexport * from './domUtils';\nexport * from './keyboardUtils';\nexport * from './selectedCellUtils';\n\nexport const { min, max, floor, sign } = Math;\n\nexport function assertIsValidKeyGetter<R, K extends React.Key>(\n  keyGetter: unknown\n): asserts keyGetter is (row: R) => K {\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>(\n  column: CalculatedColumn<R, SR>,\n  colSpan?: number\n): React.CSSProperties {\n  return {\n    gridColumnStart: column.idx + 1,\n    gridColumnEnd: colSpan !== undefined ? `span ${colSpan}` : undefined,\n    left: column.frozen ? `var(--frozen-left-${column.idx})` : undefined\n  };\n}\n\nexport function getCellClassname<R, SR>(\n  column: CalculatedColumn<R, SR>,\n  ...extraClasses: Parameters<typeof clsx>\n): string {\n  return clsx(\n    cellClassname,\n    {\n      [cellFrozenClassname]: column.frozen,\n      [cellFrozenLastClassname]: column.isLastFrozenColumn\n    },\n    ...extraClasses\n  );\n}\n","import { SelectCellFormatter } from './formatters';\nimport { useRowSelection } from './hooks/useRowSelection';\nimport type { Column, FormatterProps, GroupFormatterProps } from './types';\nimport { stopPropagation } from './utils';\n\nexport const SELECT_COLUMN_KEY = 'select-row';\n\nfunction SelectFormatter(props: FormatterProps<unknown>) {\n  const [isRowSelected, onRowSelectionChange] = useRowSelection();\n\n  return (\n    <SelectCellFormatter\n      aria-label=\"Select\"\n      isCellSelected={props.isCellSelected}\n      value={isRowSelected}\n      onClick={stopPropagation}\n      onChange={(checked, isShiftClick) => {\n        onRowSelectionChange({ row: props.row, checked, isShiftClick });\n      }}\n    />\n  );\n}\n\nfunction SelectGroupFormatter(props: GroupFormatterProps<unknown>) {\n  const [isRowSelected, onRowSelectionChange] = useRowSelection();\n\n  return (\n    <SelectCellFormatter\n      aria-label=\"Select Group\"\n      isCellSelected={props.isCellSelected}\n      value={isRowSelected}\n      onChange={(checked) => {\n        onRowSelectionChange({ row: props.row, checked, isShiftClick: false });\n      }}\n      // Stop propagation to prevent row selection\n      onClick={stopPropagation}\n    />\n  );\n}\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        isCellSelected={props.isCellSelected}\n        value={props.allRowsSelected}\n        onChange={props.onAllRowsSelectionChange}\n        // Stop propagation to prevent row selection\n        onClick={stopPropagation}\n      />\n    );\n  },\n  formatter: SelectFormatter,\n  groupFormatter: SelectGroupFormatter\n};\n","import { useMemo } from 'react';\n\nimport type { CalculatedColumn, Column, Maybe } from '../types';\nimport type { DataGridProps } from '../DataGrid';\nimport { ValueFormatter, ToggleGroupFormatter } from '../formatters';\nimport { SELECT_COLUMN_KEY } from '../Columns';\nimport { floor, max, min } from '../utils';\n\ntype Mutable<T> = {\n  -readonly [P in keyof T]: T[P];\n};\n\ninterface ColumnMetric {\n  width: number;\n  left: number;\n}\n\ninterface CalculatedColumnsArgs<R, SR> extends Pick<DataGridProps<R, SR>, 'defaultColumnOptions'> {\n  rawColumns: readonly Column<R, SR>[];\n  rawGroupBy: Maybe<readonly string[]>;\n  viewportWidth: number;\n  scrollLeft: number;\n  columnWidths: ReadonlyMap<string, number>;\n  enableVirtualization: boolean;\n}\n\nexport function useCalculatedColumns<R, SR>({\n  rawColumns,\n  columnWidths,\n  viewportWidth,\n  scrollLeft,\n  defaultColumnOptions,\n  rawGroupBy,\n  enableVirtualization\n}: CalculatedColumnsArgs<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, colSpanColumns, lastFrozenColumnIndex, groupBy } = useMemo((): {\n    columns: readonly CalculatedColumn<R, SR>[];\n    colSpanColumns: readonly CalculatedColumn<R, SR>[];\n    lastFrozenColumnIndex: number;\n    groupBy: readonly string[];\n  } => {\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 rowGroup = rawGroupBy?.includes(rawColumn.key) ?? false;\n      // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n      const frozen = rowGroup || rawColumn.frozen || false;\n\n      const column: Mutable<CalculatedColumn<R, SR>> = {\n        ...rawColumn,\n        idx: 0,\n        frozen,\n        isLastFrozenColumn: false,\n        rowGroup,\n        sortable: rawColumn.sortable ?? defaultSortable,\n        resizable: rawColumn.resizable ?? defaultResizable,\n        formatter: rawColumn.formatter ?? defaultFormatter\n      };\n\n      if (rowGroup) {\n        column.groupFormatter ??= ToggleGroupFormatter;\n      }\n\n      if (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    const colSpanColumns: CalculatedColumn<R, SR>[] = [];\n    columns.forEach((column, idx) => {\n      column.idx = idx;\n\n      if (column.rowGroup) {\n        groupBy.push(column.key);\n      }\n\n      if (column.colSpan != null) {\n        colSpanColumns.push(column);\n      }\n    });\n\n    if (lastFrozenColumnIndex !== -1) {\n      columns[lastFrozenColumnIndex].isLastFrozenColumn = true;\n    }\n\n    return {\n      columns,\n      colSpanColumns,\n      lastFrozenColumnIndex,\n      groupBy\n    };\n  }, [rawColumns, defaultFormatter, defaultResizable, defaultSortable, rawGroupBy]);\n\n  const { layoutCssVars, totalColumnWidth, totalFrozenColumnWidth, columnMetrics } = useMemo((): {\n    layoutCssVars: Readonly<Record<string, string>>;\n    totalColumnWidth: number;\n    totalFrozenColumnWidth: number;\n    columnMetrics: ReadonlyMap<CalculatedColumn<R, SR>, ColumnMetric>;\n  } => {\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: number;\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.idx}`] = `${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    if (!enableVirtualization) {\n      return [0, columns.length - 1];\n    }\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 = 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 = max(firstUnfrozenColumnIdx, colVisibleStartIdx - 1);\n    const colOverscanEndIdx = min(lastColIdx, colVisibleEndIdx + 1);\n\n    return [colOverscanStartIdx, colOverscanEndIdx];\n  }, [\n    columnMetrics,\n    columns,\n    lastFrozenColumnIndex,\n    scrollLeft,\n    totalFrozenColumnWidth,\n    viewportWidth,\n    enableVirtualization\n  ]);\n\n  return {\n    columns,\n    colSpanColumns,\n    colOverscanStartIdx,\n    colOverscanEndIdx,\n    layoutCssVars,\n    columnMetrics,\n    totalColumnWidth,\n    lastFrozenColumnIndex,\n    totalFrozenColumnWidth,\n    groupBy\n  };\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 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 = max(width, minWidth ?? minColumnWidth);\n\n  if (typeof maxWidth === 'number') {\n    return min(width, maxWidth);\n  }\n\n  return width;\n}\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 && 'current' in ref) {\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, useState } from 'react';\nimport { useLayoutEffect } from './useLayoutEffect';\n\nexport function useGridDimensions(): [\n  ref: React.RefObject<HTMLDivElement>,\n  width: number,\n  height: number\n] {\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;\n\n    // don't break in Node.js (SSR), jest/jsdom, and browsers that don't support ResizeObserver\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\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      // TODO: remove once fixed upstream\n      // we reduce width by 1px here to avoid layout issues in Chrome\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=1206298\n      setGridWidth(clientWidth - (devicePixelRatio % 1 === 0 ? 0 : 1));\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 { 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 { useRef, useState } from 'react';\nimport { useLayoutEffect } from './useLayoutEffect';\n\n// https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_roving_tabindex\nexport function useRovingCellRef(isSelected: boolean) {\n  const ref = useRef<HTMLDivElement>(null);\n  // https://www.w3.org/TR/wai-aria-practices-1.1/#gridNav_focus\n  const isChildFocused = useRef(false);\n  const [, forceRender] = useState<unknown>({});\n\n  useLayoutEffect(() => {\n    if (!isSelected) {\n      isChildFocused.current = false;\n      return;\n    }\n\n    if (isChildFocused.current) {\n      // When the child is focused, we need to rerender\n      // the cell again so tabIndex is updated to -1\n      forceRender({});\n      return;\n    }\n    ref.current?.focus();\n  }, [isSelected]);\n\n  function onFocus(event: React.FocusEvent<HTMLDivElement>) {\n    if (event.target !== ref.current) {\n      isChildFocused.current = true;\n    }\n  }\n\n  const isFocused = isSelected && !isChildFocused.current;\n\n  return {\n    ref,\n    tabIndex: isFocused ? 0 : -1,\n    onFocus\n  };\n}\n","import { css } from '@linaria/core';\n\nimport { cell } from '../style';\nimport { useFocusRef } from './useFocusRef';\n\nconst rowSelected = css`\n  outline: none;\n\n  &::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    box-shadow: inset 0 0 0 2px var(--selection-color);\n    pointer-events: none;\n    z-index: 2;\n  }\n\n  > .${cell}:first-child {\n    /* preserve left border on the first frozen cell after scrolling to the right */\n    box-shadow: inset 2px 0 0 0 var(--selection-color);\n  }\n`;\n\nexport const rowSelectedClassname = `rdg-row-selected ${rowSelected}`;\n\nexport function useRovingRowRef(selectedCellIdx: number | undefined) {\n  const isSelected = selectedCellIdx === -1;\n  const { ref, tabIndex } = useFocusRef<HTMLDivElement>(isSelected);\n\n  return {\n    ref,\n    tabIndex,\n    className: isSelected ? rowSelectedClassname : undefined\n  };\n}\n","import { useMemo } from 'react';\n\nimport { getColSpan } from '../utils';\nimport type { CalculatedColumn, GroupRow, Maybe } from '../types';\n\ninterface ViewportColumnsArgs<R, SR> {\n  columns: readonly CalculatedColumn<R, SR>[];\n  colSpanColumns: readonly CalculatedColumn<R, SR>[];\n  rows: readonly (R | GroupRow<R>)[];\n  summaryRows: Maybe<readonly SR[]>;\n  colOverscanStartIdx: number;\n  colOverscanEndIdx: number;\n  lastFrozenColumnIndex: number;\n  rowOverscanStartIdx: number;\n  rowOverscanEndIdx: number;\n  isGroupRow: (row: R | GroupRow<R>) => row is GroupRow<R>;\n}\n\nexport function useViewportColumns<R, SR>({\n  columns,\n  colSpanColumns,\n  rows,\n  summaryRows,\n  colOverscanStartIdx,\n  colOverscanEndIdx,\n  lastFrozenColumnIndex,\n  rowOverscanStartIdx,\n  rowOverscanEndIdx,\n  isGroupRow\n}: ViewportColumnsArgs<R, SR>) {\n  // find the column that spans over a column within the visible columns range and adjust colOverscanStartIdx\n  const startIdx = useMemo(() => {\n    if (colOverscanStartIdx === 0) return 0;\n\n    let startIdx = colOverscanStartIdx;\n\n    const updateStartIdx = (colIdx: number, colSpan: number | undefined) => {\n      if (colSpan !== undefined && colIdx + colSpan > colOverscanStartIdx) {\n        startIdx = colIdx;\n        return true;\n      }\n      return false;\n    };\n\n    for (const column of colSpanColumns) {\n      // check header row\n      const colIdx = column.idx;\n      if (colIdx >= startIdx) break;\n      if (updateStartIdx(colIdx, getColSpan(column, lastFrozenColumnIndex, { type: 'HEADER' }))) {\n        break;\n      }\n\n      // check viewport rows\n      for (let rowIdx = rowOverscanStartIdx; rowIdx <= rowOverscanEndIdx; rowIdx++) {\n        const row = rows[rowIdx];\n        if (isGroupRow(row)) continue;\n        if (\n          updateStartIdx(colIdx, getColSpan(column, lastFrozenColumnIndex, { type: 'ROW', row }))\n        ) {\n          break;\n        }\n      }\n\n      // check summary rows\n      if (summaryRows != null) {\n        for (const row of summaryRows) {\n          if (\n            updateStartIdx(\n              colIdx,\n              getColSpan(column, lastFrozenColumnIndex, { type: 'SUMMARY', row })\n            )\n          ) {\n            break;\n          }\n        }\n      }\n    }\n\n    return startIdx;\n  }, [\n    rowOverscanStartIdx,\n    rowOverscanEndIdx,\n    rows,\n    summaryRows,\n    colOverscanStartIdx,\n    lastFrozenColumnIndex,\n    colSpanColumns,\n    isGroupRow\n  ]);\n\n  return 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 < startIdx && !column.frozen) continue;\n      viewportColumns.push(column);\n    }\n\n    return viewportColumns;\n  }, [startIdx, colOverscanEndIdx, columns]);\n}\n","import { useMemo } from 'react';\nimport { floor, max, min } from '../utils';\nimport type { GroupRow, Maybe, RowHeightArgs } from '../types';\n\ntype GroupByDictionary<TRow> = Record<\n  string,\n  {\n    readonly childRows: readonly TRow[];\n    readonly childGroups: readonly TRow[] | Readonly<GroupByDictionary<TRow>>;\n    readonly startRowIndex: number;\n  }\n>;\n\ninterface ViewportRowsArgs<R> {\n  rawRows: readonly R[];\n  rowHeight: number | ((args: RowHeightArgs<R>) => number);\n  clientHeight: number;\n  scrollTop: number;\n  groupBy: readonly string[];\n  rowGrouper: Maybe<(rows: readonly R[], columnKey: string) => Record<string, readonly R[]>>;\n  expandedGroupIds: Maybe<ReadonlySet<unknown>>;\n  enableVirtualization: boolean;\n}\n\n// TODO: 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  enableVirtualization\n}: ViewportRowsArgs<R>) {\n  const [groupedRows, rowsCount] = useMemo(() => {\n    if (groupBy.length === 0 || rowGrouper == null) return [undefined, rawRows.length];\n\n    const groupRows = (\n      rows: readonly R[],\n      [groupByKey, ...remainingGroupByKeys]: readonly string[],\n      startRowIndex: number\n    ): [Readonly<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] =\n          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, isGroupRow] = useMemo((): [\n    ReadonlyArray<R | GroupRow<R>>,\n    (row: R | GroupRow<R>) => row is GroupRow<R>\n  ] => {\n    const allGroupRows = new Set<unknown>();\n    if (!groupedRows) return [rawRows, isGroupRow];\n\n    const flattenedRows: Array<R | GroupRow<R>> = [];\n    const expandGroup = (\n      rows: GroupByDictionary<R> | readonly R[],\n      parentId: string | undefined,\n      level: number\n    ): 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, isGroupRow];\n\n    function isGroupRow(row: R | GroupRow<R>): row is GroupRow<R> {\n      return allGroupRows.has(row);\n    }\n  }, [expandedGroupIds, groupedRows, rawRows]);\n\n  const { totalRowHeight, getRowTop, getRowHeight, findRowIdx } = useMemo(() => {\n    if (typeof rowHeight === 'number') {\n      return {\n        totalRowHeight: rowHeight * rows.length,\n        getRowTop: (rowIdx: number) => rowIdx * rowHeight,\n        getRowHeight: () => rowHeight,\n        findRowIdx: (offset: number) => floor(offset / rowHeight)\n      };\n    }\n\n    let totalRowHeight = 0;\n    // Calcule the height of all the rows upfront. This can cause performance issues\n    // and we can consider using a similar approach as react-window\n    // https://github.com/bvaughn/react-window/blob/b0a470cc264e9100afcaa1b78ed59d88f7914ad4/src/VariableSizeList.js#L68\n    const rowPositions = rows.map((row: R | GroupRow<R>) => {\n      const currentRowHeight = isGroupRow(row)\n        ? rowHeight({ type: 'GROUP', row })\n        : rowHeight({ type: 'ROW', row });\n      const position = { top: totalRowHeight, height: currentRowHeight };\n      totalRowHeight += currentRowHeight;\n      return position;\n    });\n\n    const validateRowIdx = (rowIdx: number) => {\n      return max(0, min(rows.length - 1, rowIdx));\n    };\n\n    return {\n      totalRowHeight,\n      getRowTop: (rowIdx: number) => rowPositions[validateRowIdx(rowIdx)].top,\n      getRowHeight: (rowIdx: number) => rowPositions[validateRowIdx(rowIdx)].height,\n      findRowIdx(offset: number) {\n        let start = 0;\n        let end = rowPositions.length - 1;\n        while (start <= end) {\n          const middle = start + floor((end - start) / 2);\n          const currentOffset = rowPositions[middle].top;\n\n          if (currentOffset === offset) return middle;\n\n          if (currentOffset < offset) {\n            start = middle + 1;\n          } else if (currentOffset > offset) {\n            end = middle - 1;\n          }\n\n          if (start > end) return end;\n        }\n        return 0;\n      }\n    };\n  }, [isGroupRow, rowHeight, rows]);\n\n  if (!enableVirtualization) {\n    return {\n      rowOverscanStartIdx: 0,\n      rowOverscanEndIdx: rows.length - 1,\n      rows,\n      rowsCount,\n      totalRowHeight,\n      isGroupRow,\n      getRowTop,\n      getRowHeight,\n      findRowIdx\n    };\n  }\n\n  const overscanThreshold = 4;\n  const rowVisibleStartIdx = findRowIdx(scrollTop);\n  const rowVisibleEndIdx = findRowIdx(scrollTop + clientHeight);\n  const rowOverscanStartIdx = max(0, rowVisibleStartIdx - overscanThreshold);\n  const rowOverscanEndIdx = min(rows.length - 1, rowVisibleEndIdx + overscanThreshold);\n\n  return {\n    rowOverscanStartIdx,\n    rowOverscanEndIdx,\n    rows,\n    rowsCount,\n    totalRowHeight,\n    isGroupRow,\n    getRowTop,\n    getRowHeight,\n    findRowIdx\n  };\n}\n","import { css } from '@linaria/core';\nimport { useFocusRef } from '../hooks';\nimport type { HeaderRendererProps } from '../types';\n\nconst headerSortCell = css`\n  cursor: pointer;\n  display: flex;\n\n  &:focus {\n    outline: none;\n  }\n`;\n\nconst headerSortCellClassname = `rdg-header-sort-cell ${headerSortCell}`;\n\nconst headerSortName = css`\n  flex-grow: 1;\n  overflow: hidden;\n  overflow: clip;\n  text-overflow: ellipsis;\n`;\n\nconst headerSortNameClassname = `rdg-header-sort-name ${headerSortName}`;\n\nconst arrow = css`\n  fill: currentColor;\n\n  > path {\n    transition: d 0.1s;\n  }\n`;\n\nconst arrowClassname = `rdg-sort-arrow ${arrow}`;\n\ntype SharedHeaderCellProps<R, SR> = Pick<\n  HeaderRendererProps<R, SR>,\n  'sortDirection' | 'onSort' | 'priority' | 'isCellSelected'\n>;\n\ninterface Props<R, SR> extends SharedHeaderCellProps<R, SR> {\n  children: React.ReactNode;\n}\n\nexport default function SortableHeaderCell<R, SR>({\n  onSort,\n  sortDirection,\n  priority,\n  children,\n  isCellSelected\n}: Props<R, SR>) {\n  const { ref, tabIndex } = useFocusRef<HTMLSpanElement>(isCellSelected);\n\n  function handleKeyDown(event: React.KeyboardEvent<HTMLSpanElement>) {\n    if (event.key === ' ' || event.key === 'Enter') {\n      // stop propagation to prevent scrolling\n      event.preventDefault();\n      onSort(event.ctrlKey || event.metaKey);\n    }\n  }\n\n  function handleClick(event: React.MouseEvent<HTMLSpanElement>) {\n    onSort(event.ctrlKey || event.metaKey);\n  }\n\n  return (\n    <span\n      ref={ref}\n      tabIndex={tabIndex}\n      className={headerSortCellClassname}\n      onClick={handleClick}\n      onKeyDown={handleKeyDown}\n    >\n      <span className={headerSortNameClassname}>{children}</span>\n      <span>\n        {sortDirection !== undefined && (\n          <svg viewBox=\"0 0 12 8\" width=\"12\" height=\"8\" className={arrowClassname} aria-hidden>\n            <path d={sortDirection === 'ASC' ? 'M0 8 6 0 12 8' : 'M0 0 6 8 12 0'} />\n          </svg>\n        )}\n        {priority}\n      </span>\n    </span>\n  );\n}\n","import { css } from '@linaria/core';\n\nimport type { CalculatedColumn, SortColumn } from './types';\nimport type { HeaderRowProps } from './HeaderRow';\nimport SortableHeaderCell from './headerCells/SortableHeaderCell';\nimport { getCellStyle, getCellClassname } from './utils';\nimport { useRovingCellRef } from './hooks';\n\nconst cellResizable = css`\n  touch-action: none;\n  &::after {\n    content: '';\n    cursor: col-resize;\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    width: 10px;\n  }\n`;\n\nconst cellResizableClassname = `rdg-cell-resizable ${cellResizable}`;\n\ntype SharedHeaderRowProps<R, SR> = Pick<\n  HeaderRowProps<R, SR, React.Key>,\n  | 'sortColumns'\n  | 'onSortColumnsChange'\n  | 'allRowsSelected'\n  | 'onAllRowsSelectionChange'\n  | 'selectCell'\n  | 'onColumnResize'\n  | 'shouldFocusGrid'\n>;\n\nexport interface HeaderCellProps<R, SR> extends SharedHeaderRowProps<R, SR> {\n  column: CalculatedColumn<R, SR>;\n  colSpan: number | undefined;\n  isCellSelected: boolean;\n}\n\nexport default function HeaderCell<R, SR>({\n  column,\n  colSpan,\n  isCellSelected,\n  onColumnResize,\n  allRowsSelected,\n  onAllRowsSelectionChange,\n  sortColumns,\n  onSortColumnsChange,\n  selectCell,\n  shouldFocusGrid\n}: HeaderCellProps<R, SR>) {\n  const { ref, tabIndex, onFocus } = useRovingCellRef(isCellSelected);\n  const sortIndex = sortColumns?.findIndex((sort) => sort.columnKey === column.key);\n  const sortColumn =\n    sortIndex !== undefined && sortIndex > -1 ? sortColumns![sortIndex] : undefined;\n  const sortDirection = sortColumn?.direction;\n  const priority = sortColumn !== undefined && sortColumns!.length > 1 ? sortIndex! + 1 : undefined;\n  const ariaSort =\n    sortDirection && !priority ? (sortDirection === 'ASC' ? 'ascending' : 'descending') : undefined;\n\n  const className = getCellClassname(column, column.headerCellClass, {\n    [cellResizableClassname]: column.resizable\n  });\n\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      const width = event.clientX + offset - currentTarget.getBoundingClientRect().left;\n      if (width > 0) {\n        onColumnResize(column, width);\n      }\n    }\n\n    function onLostPointerCapture() {\n      currentTarget.removeEventListener('pointermove', onPointerMove);\n      currentTarget.removeEventListener('lostpointercapture', onLostPointerCapture);\n    }\n\n    currentTarget.setPointerCapture(pointerId);\n    currentTarget.addEventListener('pointermove', onPointerMove);\n    currentTarget.addEventListener('lostpointercapture', onLostPointerCapture);\n  }\n\n  function onSort(ctrlClick: boolean) {\n    if (onSortColumnsChange == null) return;\n    const { sortDescendingFirst } = column;\n    if (sortColumn === undefined) {\n      // not currently sorted\n      const nextSort: SortColumn = {\n        columnKey: column.key,\n        direction: sortDescendingFirst ? 'DESC' : 'ASC'\n      };\n      onSortColumnsChange(sortColumns && ctrlClick ? [...sortColumns, nextSort] : [nextSort]);\n    } else {\n      let nextSortColumn: SortColumn | undefined;\n      if (\n        (sortDescendingFirst && sortDirection === 'DESC') ||\n        (!sortDescendingFirst && sortDirection === 'ASC')\n      ) {\n        nextSortColumn = {\n          columnKey: column.key,\n          direction: sortDirection === 'ASC' ? 'DESC' : 'ASC'\n        };\n      }\n      if (ctrlClick) {\n        const nextSortColumns = [...sortColumns!];\n        if (nextSortColumn) {\n          // swap direction\n          nextSortColumns[sortIndex!] = nextSortColumn;\n        } else {\n          // remove sort\n          nextSortColumns.splice(sortIndex!, 1);\n        }\n        onSortColumnsChange(nextSortColumns);\n      } else {\n        onSortColumnsChange(nextSortColumn ? [nextSortColumn] : []);\n      }\n    }\n  }\n\n  function onClick() {\n    selectCell(column.idx);\n  }\n\n  function handleFocus(event: React.FocusEvent<HTMLDivElement>) {\n    onFocus(event);\n    if (shouldFocusGrid) {\n      // Select the first header cell if there is no selected cell\n      selectCell(0);\n    }\n  }\n\n  function getCell() {\n    if (column.headerRenderer) {\n      return (\n        <column.headerRenderer\n          column={column}\n          sortDirection={sortDirection}\n          priority={priority}\n          onSort={onSort}\n          allRowsSelected={allRowsSelected}\n          onAllRowsSelectionChange={onAllRowsSelectionChange}\n          isCellSelected={isCellSelected}\n        />\n      );\n    }\n\n    if (column.sortable) {\n      return (\n        <SortableHeaderCell\n          onSort={onSort}\n          sortDirection={sortDirection}\n          priority={priority}\n          isCellSelected={isCellSelected}\n        >\n          {column.name}\n        </SortableHeaderCell>\n      );\n    }\n\n    return column.name;\n  }\n\n  return (\n    <div\n      role=\"columnheader\"\n      aria-colindex={column.idx + 1}\n      aria-selected={isCellSelected}\n      aria-sort={ariaSort}\n      aria-colspan={colSpan}\n      ref={ref}\n      // set the tabIndex to 0 when there is no selected cell so grid can receive focus\n      tabIndex={shouldFocusGrid ? 0 : tabIndex}\n      className={className}\n      style={getCellStyle(column, colSpan)}\n      onFocus={handleFocus}\n      onClick={onClick}\n      onPointerDown={column.resizable ? onPointerDown : undefined}\n    >\n      {getCell()}\n    </div>\n  );\n}","import { memo } from 'react';\nimport clsx from 'clsx';\nimport { css } from '@linaria/core';\n\nimport HeaderCell from './HeaderCell';\nimport type { CalculatedColumn } from './types';\nimport { getColSpan } from './utils';\nimport type { DataGridProps } from './DataGrid';\nimport { useRovingRowRef } from './hooks';\n\ntype SharedDataGridProps<R, SR, K extends React.Key> = Pick<\n  DataGridProps<R, SR, K>,\n  'sortColumns' | 'onSortColumnsChange'\n>;\n\nexport interface HeaderRowProps<R, SR, K extends React.Key> extends SharedDataGridProps<R, SR, K> {\n  columns: readonly CalculatedColumn<R, SR>[];\n  allRowsSelected: boolean;\n  onAllRowsSelectionChange: (checked: boolean) => void;\n  onColumnResize: (column: CalculatedColumn<R, SR>, width: number) => void;\n  selectCell: (columnIdx: number) => void;\n  lastFrozenColumnIndex: number;\n  selectedCellIdx: number | undefined;\n  shouldFocusGrid: boolean;\n}\n\nconst headerRow = css`\n  contain: strict;\n  contain: size layout style paint;\n  display: grid;\n  grid-template-columns: var(--template-columns);\n  grid-template-rows: var(--header-row-height);\n  height: var(--header-row-height); /* needed on Firefox */\n  line-height: var(--header-row-height);\n  width: var(--row-width);\n  position: sticky;\n  top: 0;\n  background-color: var(--header-background-color);\n  font-weight: bold;\n  z-index: 3;\n  outline: none;\n  &[aria-selected='true'] {\n    box-shadow: inset 0 0 0 2px var(--selection-color);\n  }\n`;\n\nconst headerRowClassname = `rdg-header-row ${headerRow}`;\n\nfunction HeaderRow<R, SR, K extends React.Key>({\n  columns,\n  allRowsSelected,\n  onAllRowsSelectionChange,\n  onColumnResize,\n  sortColumns,\n  onSortColumnsChange,\n  lastFrozenColumnIndex,\n  selectedCellIdx,\n  selectCell,\n  shouldFocusGrid\n}: HeaderRowProps<R, SR, K>) {\n  const { ref, tabIndex, className } = useRovingRowRef(selectedCellIdx);\n\n  const cells = [];\n  for (let index = 0; index < columns.length; index++) {\n    const column = columns[index];\n    const colSpan = getColSpan(column, lastFrozenColumnIndex, { type: 'HEADER' });\n    if (colSpan !== undefined) {\n      index += colSpan - 1;\n    }\n\n    cells.push(\n      <HeaderCell<R, SR>\n        key={column.key}\n        column={column}\n        colSpan={colSpan}\n        isCellSelected={selectedCellIdx === column.idx}\n        onColumnResize={onColumnResize}\n        allRowsSelected={allRowsSelected}\n        onAllRowsSelectionChange={onAllRowsSelectionChange}\n        onSortColumnsChange={onSortColumnsChange}\n        sortColumns={sortColumns}\n        selectCell={selectCell}\n        shouldFocusGrid={shouldFocusGrid && index === 0}\n      />\n    );\n  }\n\n  return (\n    <div\n      role=\"row\"\n      aria-rowindex={1} // aria-rowindex is 1 based\n      ref={ref}\n      tabIndex={tabIndex}\n      className={clsx(headerRowClassname, className)}\n    >\n      {cells}\n    </div>\n  );\n}\n\nexport default memo(HeaderRow) as <R, SR, K extends React.Key>(\n  props: HeaderRowProps<R, SR, K>\n) => JSX.Element;","import { memo } from 'react';\nimport { css } from '@linaria/core';\n\nimport { getCellStyle, getCellClassname, isCellEditable } from './utils';\nimport type { CellRendererProps } from './types';\nimport { useRovingCellRef } from './hooks';\n\nconst cellCopied = css`\n  background-color: #ccccff;\n`;\n\nconst cellCopiedClassname = `rdg-cell-copied ${cellCopied}`;\n\nconst cellDraggedOver = css`\n  background-color: #ccccff;\n\n  &.${cellCopied} {\n    background-color: #9999ff;\n  }\n`;\n\nconst cellDraggedOverClassname = `rdg-cell-dragged-over ${cellDraggedOver}`;\n\nfunction Cell<R, SR>({\n  column,\n  colSpan,\n  isCellSelected,\n  isCopied,\n  isDraggedOver,\n  row,\n  dragHandle,\n  onRowClick,\n  onRowDoubleClick,\n  onRowChange,\n  selectCell,\n  ...props\n}: CellRendererProps<R, SR>) {\n  const { ref, tabIndex, onFocus } = useRovingCellRef(isCellSelected);\n\n  const { cellClass } = column;\n  const className = getCellClassname(\n    column,\n    {\n      [cellCopiedClassname]: isCopied,\n      [cellDraggedOverClassname]: isDraggedOver\n    },\n    typeof cellClass === 'function' ? cellClass(row) : cellClass\n  );\n\n  function selectCellWrapper(openEditor?: boolean | null) {\n    selectCell(row, column, openEditor);\n  }\n\n  function handleClick() {\n    selectCellWrapper(column.editorOptions?.editOnClick);\n    onRowClick?.(row, column);\n  }\n\n  function handleContextMenu() {\n    selectCellWrapper();\n  }\n\n  function handleDoubleClick() {\n    selectCellWrapper(true);\n    onRowDoubleClick?.(row, column);\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      aria-colspan={colSpan}\n      aria-readonly={!isCellEditable(column, row) || undefined}\n      ref={ref}\n      tabIndex={tabIndex}\n      className={className}\n      style={getCellStyle(column, colSpan)}\n      onClick={handleClick}\n      onDoubleClick={handleDoubleClick}\n      onContextMenu={handleContextMenu}\n      onFocus={onFocus}\n      {...props}\n    >\n      {!column.rowGroup && (\n        <>\n          <column.formatter\n            column={column}\n            row={row}\n            isCellSelected={isCellSelected}\n            onRowChange={onRowChange}\n          />\n          {dragHandle}\n        </>\n      )}\n    </div>\n  );\n}\n\nexport default memo(Cell) as <R, SR>(props: CellRendererProps<R, SR>) => JSX.Element;\n","import { memo, forwardRef } from 'react';\nimport type { RefAttributes, CSSProperties } from 'react';\nimport clsx from 'clsx';\n\nimport Cell from './Cell';\nimport { RowSelectionProvider, useLatestFunc, useCombinedRefs, useRovingRowRef } from './hooks';\nimport { getColSpan } from './utils';\nimport { rowClassname } from './style';\nimport type { RowRendererProps } from './types';\n\nfunction Row<R, SR>(\n  {\n    className,\n    rowIdx,\n    selectedCellIdx,\n    isRowSelected,\n    copiedCellIdx,\n    draggedOverCellIdx,\n    lastFrozenColumnIndex,\n    row,\n    viewportColumns,\n    selectedCellEditor,\n    selectedCellDragHandle,\n    onRowClick,\n    onRowDoubleClick,\n    rowClass,\n    setDraggedOverRowIdx,\n    onMouseEnter,\n    top,\n    height,\n    onRowChange,\n    selectCell,\n    ...props\n  }: RowRendererProps<R, SR>,\n  ref: React.Ref<HTMLDivElement>\n) {\n  const { ref: rowRef, tabIndex, className: rovingClassName } = useRovingRowRef(selectedCellIdx);\n\n  const handleRowChange = useLatestFunc((newRow: R) => {\n    onRowChange(rowIdx, newRow);\n  });\n\n  function handleDragEnter(event: React.MouseEvent<HTMLDivElement>) {\n    setDraggedOverRowIdx?.(rowIdx);\n    onMouseEnter?.(event);\n  }\n\n  className = clsx(\n    rowClassname,\n    `rdg-row-${rowIdx % 2 === 0 ? 'even' : 'odd'}`,\n    rovingClassName,\n    rowClass?.(row),\n    className\n  );\n\n  const cells = [];\n\n  for (let index = 0; index < viewportColumns.length; index++) {\n    const column = viewportColumns[index];\n    const { idx } = column;\n    const colSpan = getColSpan(column, lastFrozenColumnIndex, { type: 'ROW', row });\n    if (colSpan !== undefined) {\n      index += colSpan - 1;\n    }\n\n    const isCellSelected = selectedCellIdx === idx;\n\n    if (isCellSelected && selectedCellEditor) {\n      cells.push(selectedCellEditor);\n    } else {\n      cells.push(\n        <Cell\n          key={column.key}\n          column={column}\n          colSpan={colSpan}\n          row={row}\n          isCopied={copiedCellIdx === idx}\n          isDraggedOver={draggedOverCellIdx === idx}\n          isCellSelected={isCellSelected}\n          dragHandle={isCellSelected ? selectedCellDragHandle : undefined}\n          onRowClick={onRowClick}\n          onRowDoubleClick={onRowDoubleClick}\n          onRowChange={handleRowChange}\n          selectCell={selectCell}\n        />\n      );\n    }\n  }\n\n  return (\n    <RowSelectionProvider value={isRowSelected}>\n      <div\n        role=\"row\"\n        ref={useCombinedRefs(ref, rowRef)}\n        tabIndex={tabIndex}\n        className={className}\n        onMouseEnter={handleDragEnter}\n        style={\n          {\n            top,\n            '--row-height': `${height}px`\n          } as unknown as CSSProperties\n        }\n        {...props}\n      >\n        {cells}\n      </div>\n    </RowSelectionProvider>\n  );\n}\n\nexport default memo(Row) as <R, SR>(props: RowRendererProps<R, SR>) => JSX.Element;\n\nexport const RowWithRef = memo(forwardRef(Row)) as <R, SR>(\n  props: RowRendererProps<R, SR> & RefAttributes<HTMLDivElement>\n) => JSX.Element;\n","import { memo } from 'react';\n\nimport { getCellStyle, getCellClassname } from './utils';\nimport type { CalculatedColumn, GroupRow } from './types';\nimport type { GroupRowRendererProps } from './GroupRow';\nimport { useRovingCellRef } from './hooks';\n\ntype SharedGroupRowRendererProps<R, SR> = Pick<\n  GroupRowRendererProps<R, SR>,\n  'id' | 'groupKey' | 'childRows' | 'isExpanded' | 'toggleGroup'\n>;\n\ninterface GroupCellProps<R, SR> extends SharedGroupRowRendererProps<R, SR> {\n  column: CalculatedColumn<R, SR>;\n  row: GroupRow<R>;\n  isCellSelected: boolean;\n  groupColumnIndex: number;\n}\n\nfunction GroupCell<R, SR>({\n  id,\n  groupKey,\n  childRows,\n  isExpanded,\n  isCellSelected,\n  column,\n  row,\n  groupColumnIndex,\n  toggleGroup: toggleGroupWrapper\n}: GroupCellProps<R, SR>) {\n  const { ref, tabIndex, onFocus } = useRovingCellRef(isCellSelected);\n\n  function toggleGroup() {\n    toggleGroupWrapper(id);\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      aria-selected={isCellSelected}\n      ref={ref}\n      tabIndex={tabIndex}\n      key={column.key}\n      className={getCellClassname(column)}\n      style={{\n        ...getCellStyle(column),\n        cursor: isLevelMatching ? 'pointer' : 'default'\n      }}\n      onClick={isLevelMatching ? toggleGroup : undefined}\n      onFocus={onFocus}\n    >\n      {(!column.rowGroup || groupColumnIndex === column.idx) && column.groupFormatter && (\n        <column.groupFormatter\n          groupKey={groupKey}\n          childRows={childRows}\n          column={column}\n          row={row}\n          isExpanded={isExpanded}\n          isCellSelected={isCellSelected}\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 type { CSSProperties } from 'react';\nimport { memo } from 'react';\nimport clsx from 'clsx';\nimport { css } from '@linaria/core';\n\nimport { cell, cellFrozenLast, rowClassname } from './style';\nimport { SELECT_COLUMN_KEY } from './Columns';\nimport GroupCell from './GroupCell';\nimport type { CalculatedColumn, GroupRow, Omit } from './types';\nimport { RowSelectionProvider, useRovingRowRef } from './hooks';\n\nexport interface GroupRowRendererProps<R, SR>\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  row: GroupRow<R>;\n  top: number;\n  height: number;\n  level: number;\n  selectedCellIdx: number | undefined;\n  isExpanded: boolean;\n  isRowSelected: boolean;\n  selectGroup: (rowIdx: number) => void;\n  toggleGroup: (expandedGroupId: unknown) => void;\n}\n\nconst groupRow = css`\n  &:not([aria-selected='true']) {\n    background-color: var(--header-background-color);\n  }\n\n  > .${cell}:not(:last-child):not(.${cellFrozenLast}) {\n    border-right: none;\n  }\n`;\n\nconst groupRowClassname = `rdg-group-row ${groupRow}`;\n\nfunction GroupedRow<R, SR>({\n  id,\n  groupKey,\n  viewportColumns,\n  childRows,\n  rowIdx,\n  row,\n  top,\n  height,\n  level,\n  isExpanded,\n  selectedCellIdx,\n  isRowSelected,\n  selectGroup,\n  toggleGroup,\n  ...props\n}: GroupRowRendererProps<R, SR>) {\n  const { ref, tabIndex, className } = useRovingRowRef(selectedCellIdx);\n\n  // Select is always the first column\n  const idx = viewportColumns[0].key === SELECT_COLUMN_KEY ? level + 1 : level;\n\n  function handleSelectGroup() {\n    selectGroup(rowIdx);\n  }\n\n  return (\n    <RowSelectionProvider value={isRowSelected}>\n      <div\n        role=\"row\"\n        aria-level={level}\n        aria-expanded={isExpanded}\n        ref={ref}\n        tabIndex={tabIndex}\n        className={clsx(\n          rowClassname,\n          groupRowClassname,\n          `rdg-row-${rowIdx % 2 === 0 ? 'even' : 'odd'}`,\n          className\n        )}\n        onClick={handleSelectGroup}\n        style={\n          {\n            top,\n            '--row-height': `${height}px`\n          } as unknown as CSSProperties\n        }\n        {...props}\n      >\n        {viewportColumns.map((column) => (\n          <GroupCell\n            key={column.key}\n            id={id}\n            groupKey={groupKey}\n            childRows={childRows}\n            isExpanded={isExpanded}\n            isCellSelected={selectedCellIdx === column.idx}\n            column={column}\n            row={row}\n            groupColumnIndex={idx}\n            toggleGroup={toggleGroup}\n          />\n        ))}\n      </div>\n    </RowSelectionProvider>\n  );\n}\n\nexport default memo(GroupedRow) as <R, SR>(props: GroupRowRendererProps<R, SR>) => JSX.Element;\n","import { memo } from 'react';\n\nimport { getCellStyle, getCellClassname } from './utils';\nimport type { CalculatedColumn, CellRendererProps } from './types';\nimport { useRovingCellRef } from './hooks';\n\ninterface SharedCellRendererProps<R, SR>\n  extends Pick<CellRendererProps<R, SR>, 'column' | 'colSpan' | 'isCellSelected'> {\n  selectCell: (row: SR, column: CalculatedColumn<R, SR>) => void;\n}\n\ninterface SummaryCellProps<R, SR> extends SharedCellRendererProps<R, SR> {\n  row: SR;\n}\n\nfunction SummaryCell<R, SR>({\n  column,\n  colSpan,\n  row,\n  isCellSelected,\n  selectCell\n}: SummaryCellProps<R, SR>) {\n  const { ref, tabIndex, onFocus } = useRovingCellRef(isCellSelected);\n  const { summaryFormatter: SummaryFormatter, summaryCellClass } = column;\n  const className = getCellClassname(\n    column,\n    typeof summaryCellClass === 'function' ? summaryCellClass(row) : summaryCellClass\n  );\n\n  function onClick() {\n    selectCell(row, column);\n  }\n\n  return (\n    <div\n      role=\"gridcell\"\n      aria-colindex={column.idx + 1}\n      aria-colspan={colSpan}\n      aria-selected={isCellSelected}\n      ref={ref}\n      tabIndex={tabIndex}\n      className={className}\n      style={getCellStyle(column, colSpan)}\n      onClick={onClick}\n      onFocus={onFocus}\n    >\n      {SummaryFormatter && (\n        <SummaryFormatter column={column} row={row} isCellSelected={isCellSelected} />\n      )}\n    </div>\n  );\n}\n\nexport default memo(SummaryCell) as <R, SR>(props: SummaryCellProps<R, SR>) => JSX.Element;\n","import { memo } from 'react';\nimport clsx from 'clsx';\nimport { css } from '@linaria/core';\n\nimport { cell, row, rowClassname } from './style';\nimport { getColSpan } from './utils';\nimport SummaryCell from './SummaryCell';\nimport type { CalculatedColumn, RowRendererProps } from './types';\nimport { useRovingRowRef } from './hooks';\n\ntype SharedRowRendererProps<R, SR> = Pick<RowRendererProps<R, SR>, 'viewportColumns' | 'rowIdx'>;\n\ninterface SummaryRowProps<R, SR> extends SharedRowRendererProps<R, SR> {\n  'aria-rowindex': number;\n  row: SR;\n  bottom: number;\n  lastFrozenColumnIndex: number;\n  selectedCellIdx: number | undefined;\n  selectCell: (row: SR, column: CalculatedColumn<R, SR>) => void;\n}\n\nconst summaryRow = css`\n  &.${row} {\n    position: sticky;\n    z-index: 3;\n    grid-template-rows: var(--summary-row-height);\n    height: var(--summary-row-height); /* needed on Firefox */\n    line-height: var(--summary-row-height);\n  }\n`;\n\nconst summaryRowBorderClassname = css`\n  & > .${cell} {\n    border-top: 2px solid var(--summary-border-color);\n  }\n`;\n\nconst summaryRowClassname = `rdg-summary-row ${summaryRow}`;\n\nfunction SummaryRow<R, SR>({\n  rowIdx,\n  row,\n  viewportColumns,\n  bottom,\n  lastFrozenColumnIndex,\n  selectedCellIdx,\n  selectCell,\n  'aria-rowindex': ariaRowIndex\n}: SummaryRowProps<R, SR>) {\n  const { ref, tabIndex, className } = useRovingRowRef(selectedCellIdx);\n  const cells = [];\n  for (let index = 0; index < viewportColumns.length; index++) {\n    const column = viewportColumns[index];\n    const colSpan = getColSpan(column, lastFrozenColumnIndex, { type: 'SUMMARY', row });\n    if (colSpan !== undefined) {\n      index += colSpan - 1;\n    }\n\n    const isCellSelected = selectedCellIdx === column.idx;\n\n    cells.push(\n      <SummaryCell<R, SR>\n        key={column.key}\n        column={column}\n        colSpan={colSpan}\n        row={row}\n        isCellSelected={isCellSelected}\n        selectCell={selectCell}\n      />\n    );\n  }\n\n  return (\n    <div\n      role=\"row\"\n      aria-rowindex={ariaRowIndex}\n      ref={ref}\n      tabIndex={tabIndex}\n      className={clsx(\n        rowClassname,\n        `rdg-row-${rowIdx % 2 === 0 ? 'even' : 'odd'}`,\n        summaryRowClassname,\n        { [summaryRowBorderClassname]: rowIdx === 0 },\n        className\n      )}\n      style={{ bottom }}\n    >\n      {cells}\n    </div>\n  );\n}\n\nexport default memo(SummaryRow) as <R, SR>(props: SummaryRowProps<R, SR>) => JSX.Element;\n","import { useEffect, useRef } from 'react';\nimport { css } from '@linaria/core';\n\nimport { useLatestFunc } from './hooks';\nimport { getCellStyle, getCellClassname } from './utils';\nimport type { CellRendererProps, EditorProps } from './types';\n\n/*\n * To check for outside `mousedown` events, we listen to all `mousedown` events at their birth,\n * i.e. on the window during the capture phase, and at their death, i.e. on the window during the bubble phase.\n *\n * We schedule a check at the birth of the event, cancel the check when the event reaches the \"inside\" container,\n * and trigger the \"outside\" callback when the event bubbles back up to the window.\n *\n * The event can be `stopPropagation()`ed halfway through, so they may not always bubble back up to the window,\n * so an alternative check must be used. The check must happen after the event can reach the \"inside\" container,\n * and not before it run to completion. `requestAnimationFrame` is the best way we know how to achieve this.\n * Usually we want click event handlers from parent components to access the latest commited values,\n * so `mousedown` is used instead of `click`.\n *\n * We must also rely on React's event capturing/bubbling to handle elements rendered in a portal.\n */\n\nconst cellEditing = css`\n  &.rdg-cell {\n    padding: 0;\n  }\n`;\n\ntype SharedCellRendererProps<R, SR> = Pick<CellRendererProps<R, SR>, 'colSpan'>;\n\ninterface EditCellProps<R, SR> extends EditorProps<R, SR>, SharedCellRendererProps<R, SR> {}\n\nexport default function EditCell<R, SR>({\n  column,\n  colSpan,\n  row,\n  onRowChange,\n  onClose\n}: EditCellProps<R, SR>) {\n  const frameRequestRef = useRef<number | undefined>();\n\n  // We need to prevent the `useEffect` from cleaning up between re-renders,\n  // as `onWindowCaptureMouseDown` might otherwise miss valid mousedown events.\n  // To that end we instead access the latest props via useLatestFunc.\n  const commitOnOutsideMouseDown = useLatestFunc(() => {\n    onRowChange(row, true);\n  });\n\n  function cancelFrameRequest() {\n    cancelAnimationFrame(frameRequestRef.current!);\n  }\n\n  useEffect(() => {\n    function onWindowCaptureMouseDown() {\n      frameRequestRef.current = requestAnimationFrame(commitOnOutsideMouseDown);\n    }\n\n    addEventListener('mousedown', onWindowCaptureMouseDown, { capture: true });\n\n    return () => {\n      removeEventListener('mousedown', onWindowCaptureMouseDown, { capture: true });\n      cancelFrameRequest();\n    };\n  }, [commitOnOutsideMouseDown]);\n\n  const { cellClass } = column;\n  const className = getCellClassname(\n    column,\n    'rdg-editor-container',\n    !column.editorOptions?.renderFormatter && cellEditing,\n    typeof cellClass === 'function' ? cellClass(row) : cellClass\n  );\n\n  return (\n    <div\n      role=\"gridcell\"\n      aria-colindex={column.idx + 1} // aria-colindex is 1-based\n      aria-colspan={colSpan}\n      aria-selected\n      className={className}\n      style={getCellStyle(column, colSpan)}\n      onMouseDownCapture={cancelFrameRequest}\n    >\n      {column.editor != null && (\n        <>\n          <column.editor column={column} row={row} onRowChange={onRowChange} onClose={onClose} />\n          {column.editorOptions?.renderFormatter && (\n            <column.formatter column={column} row={row} isCellSelected onRowChange={onRowChange} />\n          )}\n        </>\n      )}\n    </div>\n  );\n}\n","import { css } from '@linaria/core';\n\nimport type { CalculatedColumn, FillEvent, Position } from './types';\nimport type { DataGridProps, SelectCellState } from './DataGrid';\n\nconst cellDragHandle = css`\n  cursor: move;\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  width: 8px;\n  height: 8px;\n  background-color: var(--selection-color);\n\n  &:hover {\n    width: 16px;\n    height: 16px;\n    border: 2px solid var(--selection-color);\n    background-color: var(--background-color);\n  }\n`;\n\nconst cellDragHandleClassname = `rdg-cell-drag-handle ${cellDragHandle}`;\n\ninterface Props<R, SR> extends Pick<DataGridProps<R, SR>, 'rows' | 'onRowsChange'> {\n  columns: readonly CalculatedColumn<R, SR>[];\n  selectedPosition: SelectCellState;\n  latestDraggedOverRowIdx: React.MutableRefObject<number | undefined>;\n  isCellEditable: (position: Position) => boolean;\n  onFill: (event: FillEvent<R>) => R;\n  setDragging: (isDragging: boolean) => void;\n  setDraggedOverRowIdx: (overRowIdx: number | undefined) => void;\n}\n\nexport default function DragHandle<R, SR>({\n  rows,\n  columns,\n  selectedPosition,\n  latestDraggedOverRowIdx,\n  isCellEditable,\n  onRowsChange,\n  onFill,\n  setDragging,\n  setDraggedOverRowIdx\n}: Props<R, SR>) {\n  function handleMouseDown(event: React.MouseEvent<HTMLDivElement, MouseEvent>) {\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 handleDragEnd() {\n    const overRowIdx = latestDraggedOverRowIdx.current;\n    if (overRowIdx === undefined) return;\n\n    const { rowIdx } = selectedPosition;\n    const startRowIndex = rowIdx < overRowIdx ? rowIdx + 1 : overRowIdx;\n    const endRowIndex = rowIdx < overRowIdx ? overRowIdx + 1 : rowIdx;\n    updateRows(startRowIndex, endRowIndex);\n    setDraggedOverRowIdx(undefined);\n  }\n\n  function handleDoubleClick(event: React.MouseEvent<HTMLDivElement>) {\n    event.stopPropagation();\n    updateRows(selectedPosition.rowIdx + 1, rows.length);\n  }\n\n  function updateRows(startRowIdx: number, endRowIdx: number) {\n    const { idx, rowIdx } = selectedPosition;\n    const column = columns[idx];\n    const sourceRow = rows[rowIdx];\n    const updatedRows = [...rows];\n    const indexes: number[] = [];\n    for (let i = startRowIdx; i < endRowIdx; i++) {\n      if (isCellEditable({ rowIdx: i, idx })) {\n        const updatedRow = onFill({ columnKey: column.key, sourceRow, targetRow: rows[i] });\n        if (updatedRow !== rows[i]) {\n          updatedRows[i] = updatedRow;\n          indexes.push(i);\n        }\n      }\n    }\n\n    if (indexes.length > 0) {\n      onRowsChange?.(updatedRows, { indexes, column });\n    }\n  }\n\n  return (\n    <div\n      className={cellDragHandleClassname}\n      onMouseDown={handleMouseDown}\n      onDoubleClick={handleDoubleClick}\n    />\n  );\n}\n","import { forwardRef, useState, useRef, useImperativeHandle, useCallback, useMemo } from 'react';\nimport type { Key, RefAttributes } from 'react';\nimport clsx from 'clsx';\n\nimport { rootClassname, viewportDraggingClassname } from './style';\nimport {\n  useLayoutEffect,\n  useGridDimensions,\n  useCalculatedColumns,\n  useViewportColumns,\n  useViewportRows,\n  useLatestFunc,\n  RowSelectionChangeProvider\n} from './hooks';\nimport HeaderRow from './HeaderRow';\nimport Row from './Row';\nimport GroupRowRenderer from './GroupRow';\nimport SummaryRow from './SummaryRow';\nimport EditCell from './EditCell';\nimport DragHandle from './DragHandle';\nimport {\n  assertIsValidKeyGetter,\n  onEditorNavigation,\n  getNextSelectedCellPosition,\n  isSelectedCellEditable,\n  canExitGrid,\n  isCtrlKeyHeldDown,\n  isDefaultCellInput,\n  getColSpan,\n  max,\n  sign,\n  getSelectedCellColSpan\n} from './utils';\n\nimport type {\n  CalculatedColumn,\n  Column,\n  Position,\n  RowRendererProps,\n  RowsChangeData,\n  SelectRowEvent,\n  FillEvent,\n  PasteEvent,\n  CellNavigationMode,\n  SortColumn,\n  RowHeightArgs,\n  Maybe\n} from './types';\n\nexport interface SelectCellState extends Position {\n  readonly mode: 'SELECT';\n}\n\ninterface EditCellState<R> extends Position {\n  readonly mode: 'EDIT';\n  readonly row: R;\n  readonly originalRow: R;\n}\n\ntype DefaultColumnOptions<R, SR> = Pick<\n  Column<R, SR>,\n  'formatter' | 'minWidth' | 'resizable' | 'sortable'\n>;\n\nconst initialPosition: SelectCellState = {\n  idx: -1,\n  rowIdx: -2,\n  mode: 'SELECT'\n};\n\nexport interface DataGridHandle {\n  element: HTMLDivElement | null;\n  scrollToColumn: (colIdx: number) => void;\n  scrollToRow: (rowIdx: number) => void;\n  selectCell: (position: Position, enableEditor?: Maybe<boolean>) => 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, K extends Key = Key> 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?: Maybe<readonly SR[]>;\n  /** The getter should return a unique key for each row */\n  rowKeyGetter?: Maybe<(row: R) => K>;\n  onRowsChange?: Maybe<(rows: R[], data: RowsChangeData<R, SR>) => void>;\n\n  /**\n   * Dimensions props\n   */\n  /**\n   * The height of each row in pixels\n   * @default 35\n   */\n  rowHeight?: Maybe<number | ((args: RowHeightArgs<R>) => number)>;\n  /**\n   * The height of the header row in pixels\n   * @default 35\n   */\n  headerRowHeight?: Maybe<number>;\n  /**\n   * The height of each summary row in pixels\n   * @default 35\n   */\n  summaryRowHeight?: Maybe<number>;\n\n  /**\n   * Feature props\n   */\n  /** Set of selected row keys */\n  selectedRows?: Maybe<ReadonlySet<K>>;\n  /** Function called whenever row selection is changed */\n  onSelectedRowsChange?: Maybe<(selectedRows: Set<K>) => void>;\n  /** Used for multi column sorting */\n  sortColumns?: Maybe<readonly SortColumn[]>;\n  onSortColumnsChange?: Maybe<(sortColumns: SortColumn[]) => void>;\n  defaultColumnOptions?: Maybe<DefaultColumnOptions<R, SR>>;\n  groupBy?: Maybe<readonly string[]>;\n  rowGrouper?: Maybe<(rows: readonly R[], columnKey: string) => Record<string, readonly R[]>>;\n  expandedGroupIds?: Maybe<ReadonlySet<unknown>>;\n  onExpandedGroupIdsChange?: Maybe<(expandedGroupIds: Set<unknown>) => void>;\n  onFill?: Maybe<(event: FillEvent<R>) => R>;\n  onPaste?: Maybe<(event: PasteEvent<R>) => R>;\n\n  /**\n   * Event props\n   */\n  /** Function called whenever a row is clicked */\n  onRowClick?: Maybe<(row: R, column: CalculatedColumn<R, SR>) => void>;\n  /** Function called whenever a row is double clicked */\n  onRowDoubleClick?: Maybe<(row: R, column: CalculatedColumn<R, SR>) => void>;\n  /** Called when the grid is scrolled */\n  onScroll?: Maybe<(event: React.UIEvent<HTMLDivElement>) => void>;\n  /** Called when a column is resized */\n  onColumnResize?: Maybe<(idx: number, width: number) => void>;\n  /** Function called whenever selected cell is changed */\n  onSelectedCellChange?: Maybe<(position: Position) => void>;\n\n  /**\n   * Toggles and modes\n   */\n  /** @default 'NONE' */\n  cellNavigationMode?: Maybe<CellNavigationMode>;\n  /** @default true */\n  enableVirtualization?: Maybe<boolean>;\n\n  /**\n   * Miscellaneous\n   */\n  rowRenderer?: Maybe<React.ComponentType<RowRendererProps<R, SR>>>;\n  noRowsFallback?: React.ReactNode;\n  rowClass?: Maybe<(row: R) => Maybe<string>>;\n  'data-testid'?: Maybe<string>;\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 */\n\nfunction DataGrid<R, SR, K extends Key>(\n  {\n    // Grid and data Props\n    columns: rawColumns,\n    rows: rawRows,\n    summaryRows,\n    rowKeyGetter,\n    onRowsChange,\n    // Dimensions props\n    rowHeight,\n    headerRowHeight: rawHeaderRowHeight,\n    summaryRowHeight: rawSummaryRowHeight,\n    // Feature props\n    selectedRows,\n    onSelectedRowsChange,\n    sortColumns,\n    onSortColumnsChange,\n    defaultColumnOptions,\n    groupBy: rawGroupBy,\n    rowGrouper,\n    expandedGroupIds,\n    onExpandedGroupIdsChange,\n    // Event props\n    onRowClick,\n    onRowDoubleClick,\n    onScroll,\n    onColumnResize,\n    onSelectedCellChange,\n    onFill,\n    onPaste,\n    // Toggles and modes\n    cellNavigationMode: rawCellNavigationMode,\n    enableVirtualization,\n    // Miscellaneous\n    rowRenderer,\n    noRowsFallback,\n    className,\n    style,\n    rowClass,\n    // ARIA\n    'aria-label': ariaLabel,\n    'aria-labelledby': ariaLabelledBy,\n    'aria-describedby': ariaDescribedBy,\n    'data-testid': testId\n  }: DataGridProps<R, SR, K>,\n  ref: React.Ref<DataGridHandle>\n) {\n  /**\n   * defaults\n   */\n  rowHeight ??= 35;\n  const headerRowHeight = rawHeaderRowHeight ?? (typeof rowHeight === 'number' ? rowHeight : 35);\n  const summaryRowHeight = rawSummaryRowHeight ?? (typeof rowHeight === 'number' ? rowHeight : 35);\n  const RowRenderer = rowRenderer ?? Row;\n  const cellNavigationMode = rawCellNavigationMode ?? 'NONE';\n  enableVirtualization ??= true;\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>>(() => new Map());\n  const [selectedPosition, setSelectedPosition] = useState<SelectCellState | EditCellState<R>>(\n    initialPosition\n  );\n  const [copiedCell, setCopiedCell] = useState<{ row: R; columnKey: string } | null>(null);\n  const [isDragging, setDragging] = useState(false);\n  const [draggedOverRowIdx, setOverRowIdx] = useState<number | undefined>(undefined);\n\n  /**\n   * refs\n   */\n  const prevSelectedPosition = useRef(selectedPosition);\n  const latestDraggedOverRowIdx = useRef(draggedOverRowIdx);\n  const lastSelectedRowIdx = useRef(-1);\n\n  /**\n   * computed values\n   */\n  const [gridRef, gridWidth, gridHeight] = useGridDimensions();\n  const headerRowsCount = 1;\n  const summaryRowsCount = summaryRows?.length ?? 0;\n  const clientHeight = gridHeight - headerRowHeight - summaryRowsCount * summaryRowHeight;\n  const isSelectable = selectedRows != null && onSelectedRowsChange != null;\n  const isHeaderRowSelected = selectedPosition.rowIdx === -1;\n\n  const allRowsSelected = useMemo((): boolean => {\n    // no rows to select = explicitely unchecked\n    const { length } = rawRows;\n    return (\n      length !== 0 &&\n      selectedRows != null &&\n      rowKeyGetter != null &&\n      selectedRows.size >= length &&\n      rawRows.every((row) => selectedRows.has(rowKeyGetter(row)))\n    );\n  }, [rawRows, selectedRows, rowKeyGetter]);\n\n  const {\n    columns,\n    colSpanColumns,\n    colOverscanStartIdx,\n    colOverscanEndIdx,\n    layoutCssVars,\n    columnMetrics,\n    totalColumnWidth,\n    lastFrozenColumnIndex,\n    totalFrozenColumnWidth,\n    groupBy\n  } = useCalculatedColumns({\n    rawColumns,\n    columnWidths,\n    scrollLeft,\n    viewportWidth: gridWidth,\n    defaultColumnOptions,\n    rawGroupBy: rowGrouper ? rawGroupBy : undefined,\n    enableVirtualization\n  });\n\n  const {\n    rowOverscanStartIdx,\n    rowOverscanEndIdx,\n    rows,\n    rowsCount,\n    totalRowHeight,\n    isGroupRow,\n    getRowTop,\n    getRowHeight,\n    findRowIdx\n  } = useViewportRows({\n    rawRows,\n    groupBy,\n    rowGrouper,\n    rowHeight,\n    clientHeight,\n    scrollTop,\n    expandedGroupIds,\n    enableVirtualization\n  });\n\n  const viewportColumns = useViewportColumns({\n    columns,\n    colSpanColumns,\n    colOverscanStartIdx,\n    colOverscanEndIdx,\n    lastFrozenColumnIndex,\n    rowOverscanStartIdx,\n    rowOverscanEndIdx,\n    rows,\n    summaryRows,\n    isGroupRow\n  });\n\n  const hasGroups = groupBy.length > 0 && typeof rowGrouper === 'function';\n  const minColIdx = hasGroups ? -1 : 0;\n  const maxColIdx = columns.length - 1;\n  const minRowIdx = -1; // change it to 0?\n  const maxRowIdx = headerRowsCount + rows.length + summaryRowsCount - 2;\n  const selectedCellIsWithinSelectionBounds = isCellWithinSelectionBounds(selectedPosition);\n  const selectedCellIsWithinViewportBounds = isCellWithinViewportBounds(selectedPosition);\n\n  /**\n   * The identity of the wrapper function is stable so it won't break memoization\n   */\n  const selectRowLatest = useLatestFunc(selectRow);\n  const selectAllRowsLatest = useLatestFunc(selectAllRows);\n  const handleFormatterRowChangeLatest = useLatestFunc(updateRow);\n  const selectViewportCellLatest = useLatestFunc(\n    (row: R, column: CalculatedColumn<R, SR>, enableEditor: Maybe<boolean>) => {\n      const rowIdx = rows.indexOf(row);\n      selectCell({ rowIdx, idx: column.idx }, enableEditor);\n    }\n  );\n  const selectGroupLatest = useLatestFunc((rowIdx: number) => {\n    selectCell({ rowIdx, idx: -1 });\n  });\n  const selectHeaderCellLatest = useLatestFunc((idx: number) => {\n    selectCell({ rowIdx: -1, idx });\n  });\n  const selectSummaryCellLatest = useLatestFunc(\n    (summaryRow: SR, column: CalculatedColumn<R, SR>) => {\n      const rowIdx = summaryRows!.indexOf(summaryRow) + headerRowsCount + rows.length - 1;\n      selectCell({ rowIdx, idx: column.idx });\n    }\n  );\n  const toggleGroupLatest = useLatestFunc(toggleGroup);\n\n  /**\n   * effects\n   */\n  useLayoutEffect(() => {\n    if (\n      !selectedCellIsWithinSelectionBounds ||\n      selectedPosition === prevSelectedPosition.current ||\n      selectedPosition.mode === 'EDIT'\n    ) {\n      return;\n    }\n    prevSelectedPosition.current = selectedPosition;\n    scrollToCell(selectedPosition);\n  });\n\n  useImperativeHandle(ref, () => ({\n    element: gridRef.current,\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: getRowTop(rowIdx),\n        behavior: 'smooth'\n      });\n    },\n    selectCell\n  }));\n\n  /**\n   * callbacks\n   */\n  const handleColumnResize = useCallback(\n    (column: CalculatedColumn<R, SR>, width: number) => {\n      setColumnWidths((columnWidths) => {\n        const newColumnWidths = new Map(columnWidths);\n        newColumnWidths.set(column.key, width);\n        return newColumnWidths;\n      });\n\n      onColumnResize?.(column.idx, width);\n    },\n    [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({ row, checked, isShiftClick }: SelectRowEvent<R>) {\n    if (!onSelectedRowsChange) return;\n\n    assertIsValidKeyGetter<R, K>(rowKeyGetter);\n    const newSelectedRows = new Set(selectedRows);\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      const rowIdx = rows.indexOf(row);\n      lastSelectedRowIdx.current = rowIdx;\n      if (isShiftClick && previousRowIdx !== -1 && previousRowIdx !== rowIdx) {\n        const step = 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 selectAllRows(checked: boolean) {\n    if (!onSelectedRowsChange) return;\n\n    assertIsValidKeyGetter<R, K>(rowKeyGetter);\n    const newSelectedRows = new Set(selectedRows);\n\n    for (const row of rawRows) {\n      const rowKey = rowKeyGetter(row);\n      if (checked) {\n        newSelectedRows.add(rowKey);\n      } else {\n        newSelectedRows.delete(rowKey);\n      }\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    if (!(event.target instanceof Element)) return;\n    const isCellEvent = event.target.closest('.rdg-cell') !== null;\n    const isRowEvent = hasGroups && event.target.matches('.rdg-row, .rdg-header-row');\n    if (!isCellEvent && !isRowEvent) return;\n\n    const { key, keyCode } = event;\n    const { rowIdx } = selectedPosition;\n\n    if (\n      selectedCellIsWithinViewportBounds &&\n      onPaste != null &&\n      isCtrlKeyHeldDown(event) &&\n      !isGroupRow(rows[rowIdx]) &&\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 (isRowIdxWithinViewportBounds(rowIdx)) {\n      const row = rows[rowIdx];\n\n      if (\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\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        handleCellInput(event);\n        break;\n    }\n  }\n\n  function handleScroll(event: React.UIEvent<HTMLDivElement>) {\n    const { scrollTop, scrollLeft } = event.currentTarget;\n    setScrollTop(scrollTop);\n    setScrollLeft(scrollLeft);\n    onScroll?.(event);\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    const rawRowIdx = getRawRowIdx(rowIdx);\n    if (row === rawRows[rawRowIdx]) return;\n    const updatedRows = [...rawRows];\n    updatedRows[rawRowIdx] = row;\n    onRowsChange(updatedRows, {\n      indexes: [rawRowIdx],\n      column: columns[selectedPosition.idx]\n    });\n  }\n\n  function commitEditorChanges() {\n    if (\n      columns[selectedPosition.idx]?.editor == null ||\n      selectedPosition.mode === 'SELECT' ||\n      selectedPosition.row === selectedPosition.originalRow\n    ) {\n      return;\n    }\n\n    updateRow(selectedPosition.rowIdx, selectedPosition.row);\n  }\n\n  function handleCopy() {\n    const { idx, rowIdx } = selectedPosition;\n    setCopiedCell({ row: rawRows[getRawRowIdx(rowIdx)], columnKey: columns[idx].key });\n  }\n\n  function handlePaste() {\n    if (!onPaste || !onRowsChange || copiedCell === null || !isCellEditable(selectedPosition)) {\n      return;\n    }\n\n    const { idx, rowIdx } = selectedPosition;\n    const targetRow = rawRows[getRawRowIdx(rowIdx)];\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 (!selectedCellIsWithinViewportBounds) return;\n    const row = rows[selectedPosition.rowIdx];\n    if (isGroupRow(row)) return;\n    const { key, shiftKey } = event;\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    // Select the row on Shift + Space\n    if (isSelectable && shiftKey && key === ' ') {\n      assertIsValidKeyGetter<R, K>(rowKeyGetter);\n      const rowKey = rowKeyGetter(row);\n      selectRow({ row, checked: !selectedRows.has(rowKey), isShiftClick: false });\n      // do not scroll\n      event.preventDefault();\n      return;\n    }\n\n    const column = columns[selectedPosition.idx];\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        mode: 'EDIT',\n        row,\n        originalRow: row\n      }));\n    }\n  }\n\n  function handleEditorRowChange(row: R, commitChanges?: boolean) {\n    if (selectedPosition.mode === 'SELECT') return;\n    if (commitChanges) {\n      updateRow(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 isColIdxWithinSelectionBounds(idx: number) {\n    return idx >= minColIdx && idx <= maxColIdx;\n  }\n\n  function isRowIdxWithinViewportBounds(rowIdx: number) {\n    return rowIdx >= 0 && rowIdx < rows.length;\n  }\n\n  function isCellWithinSelectionBounds({ idx, rowIdx }: Position): boolean {\n    return rowIdx >= minRowIdx && rowIdx <= maxRowIdx && isColIdxWithinSelectionBounds(idx);\n  }\n\n  function isCellWithinViewportBounds({ idx, rowIdx }: Position): boolean {\n    return isRowIdxWithinViewportBounds(rowIdx) && isColIdxWithinSelectionBounds(idx);\n  }\n\n  function isCellEditable(position: Position): boolean {\n    return (\n      isCellWithinViewportBounds(position) &&\n      isSelectedCellEditable({ columns, rows, selectedPosition: position, isGroupRow })\n    );\n  }\n\n  function selectCell(position: Position, enableEditor?: Maybe<boolean>): void {\n    if (!isCellWithinSelectionBounds(position)) return;\n    commitEditorChanges();\n\n    if (enableEditor && isCellEditable(position)) {\n      const row = rows[position.rowIdx] as R;\n      setSelectedPosition({ ...position, mode: 'EDIT', row, originalRow: row });\n      onSelectedCellChange?.(position);\n    } else if (\n      selectedPosition.mode !== 'SELECT' ||\n      selectedPosition.idx !== position.idx ||\n      selectedPosition.rowIdx !== position.rowIdx\n    ) {\n      // Avoid re-renders if the selected cell state is the same\n      // TODO: replace with a #record? https://github.com/microsoft/TypeScript/issues/39831\n      setSelectedPosition({ ...position, mode: 'SELECT' });\n      onSelectedCellChange?.(position);\n    }\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      rowIdx ??= selectedPosition.rowIdx;\n      if (!isCellWithinSelectionBounds({ rowIdx, idx })) return;\n      const { clientWidth } = current;\n      const column = columns[idx];\n      const { left, width } = columnMetrics.get(column)!;\n      let right = left + width;\n\n      const colSpan = getSelectedCellColSpan({\n        rows,\n        summaryRows,\n        rowIdx,\n        lastFrozenColumnIndex,\n        column,\n        isGroupRow\n      });\n\n      if (colSpan !== undefined) {\n        const { left, width } = columnMetrics.get(columns[column.idx + colSpan - 1])!;\n        right = left + width;\n      }\n\n      const isCellAtLeftBoundary = left < scrollLeft + totalFrozenColumnWidth;\n      const isCellAtRightBoundary = right > clientWidth + scrollLeft;\n      if (isCellAtLeftBoundary) {\n        current.scrollLeft = left - totalFrozenColumnWidth;\n      } else if (isCellAtRightBoundary) {\n        current.scrollLeft = right - clientWidth;\n      }\n    }\n\n    if (typeof rowIdx === 'number' && isRowIdxWithinViewportBounds(rowIdx)) {\n      const rowTop = getRowTop(rowIdx);\n      const rowHeight = getRowHeight(rowIdx);\n      if (rowTop < scrollTop) {\n        // at top boundary, scroll to the row's top\n        current.scrollTop = rowTop;\n      } else if (rowTop + rowHeight > scrollTop + clientHeight) {\n        // at bottom boundary, scroll the next row's top to the bottom of the viewport\n        current.scrollTop = rowTop + rowHeight - clientHeight;\n      }\n    }\n  }\n\n  function getNextPosition(key: string, ctrlKey: boolean, shiftKey: boolean): Position {\n    const { idx, rowIdx } = selectedPosition;\n    const row = rows[rowIdx];\n    const isRowSelected = selectedCellIsWithinSelectionBounds && 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    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: idx - 1, rowIdx };\n      case 'ArrowRight':\n        return { idx: idx + 1, rowIdx };\n      case 'Tab':\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 { idx: 0, rowIdx: ctrlKey ? minRowIdx : 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 { idx: maxColIdx, rowIdx: ctrlKey ? maxRowIdx : rowIdx };\n      case 'PageUp': {\n        if (selectedPosition.rowIdx === minRowIdx) return selectedPosition;\n        const nextRowY = getRowTop(rowIdx) + getRowHeight(rowIdx) - clientHeight;\n        return { idx, rowIdx: nextRowY > 0 ? findRowIdx(nextRowY) : 0 };\n      }\n      case 'PageDown': {\n        if (selectedPosition.rowIdx >= rows.length) return selectedPosition;\n        const nextRowY = getRowTop(rowIdx) + clientHeight;\n        return { idx, rowIdx: nextRowY < totalRowHeight ? findRowIdx(nextRowY) : rows.length - 1 };\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 ?? onEditorNavigation;\n      if (!onNavigation(event)) return;\n    }\n    const { key, shiftKey } = event;\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          maxColIdx,\n          minRowIdx,\n          maxRowIdx,\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    const ctrlKey = isCtrlKeyHeldDown(event);\n    const nextPosition = getNextPosition(key, ctrlKey, shiftKey);\n    if (\n      nextPosition.rowIdx === selectedPosition.rowIdx &&\n      nextPosition.idx === selectedPosition.idx\n    ) {\n      return;\n    }\n\n    const nextSelectedCellPosition = getNextSelectedCellPosition({\n      columns,\n      colSpanColumns,\n      rows,\n      summaryRows,\n      minRowIdx,\n      maxRowIdx,\n      lastFrozenColumnIndex,\n      cellNavigationMode: mode,\n      currentPosition: selectedPosition,\n      nextPosition,\n      isCellWithinBounds: isCellWithinSelectionBounds,\n      isGroupRow\n    });\n\n    selectCell(nextSelectedCellPosition);\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 getDragHandle(rowIdx: number) {\n    if (\n      selectedPosition.rowIdx !== rowIdx ||\n      selectedPosition.mode === 'EDIT' ||\n      hasGroups || // drag fill is not supported when grouping is enabled\n      onFill == null\n    ) {\n      return;\n    }\n\n    return (\n      <DragHandle\n        rows={rawRows}\n        columns={columns}\n        selectedPosition={selectedPosition}\n        isCellEditable={isCellEditable}\n        latestDraggedOverRowIdx={latestDraggedOverRowIdx}\n        onRowsChange={onRowsChange}\n        onFill={onFill}\n        setDragging={setDragging}\n        setDraggedOverRowIdx={setDraggedOverRowIdx}\n      />\n    );\n  }\n\n  function getCellEditor(rowIdx: number) {\n    if (selectedPosition.rowIdx !== rowIdx || selectedPosition.mode === 'SELECT') return;\n\n    const { idx, row } = selectedPosition;\n    const column = columns[idx];\n    const colSpan = getColSpan(column, lastFrozenColumnIndex, { type: 'ROW', row });\n\n    return (\n      <EditCell\n        key={column.key}\n        column={column}\n        colSpan={colSpan}\n        row={row}\n        onRowChange={handleEditorRowChange}\n        onClose={handleOnClose}\n      />\n    );\n  }\n\n  function getViewportRows() {\n    const rowElements = [];\n    let startRowIndex = 0;\n\n    const { idx: selectedIdx, rowIdx: selectedRowIdx } = selectedPosition;\n    const startRowIdx =\n      selectedCellIsWithinViewportBounds && selectedRowIdx < rowOverscanStartIdx\n        ? rowOverscanStartIdx - 1\n        : rowOverscanStartIdx;\n    const endRowIdx =\n      selectedCellIsWithinViewportBounds && selectedRowIdx > rowOverscanEndIdx\n        ? rowOverscanEndIdx + 1\n        : rowOverscanEndIdx;\n\n    for (let viewportRowIdx = startRowIdx; viewportRowIdx <= endRowIdx; viewportRowIdx++) {\n      const isRowOutsideViewport =\n        viewportRowIdx === rowOverscanStartIdx - 1 || viewportRowIdx === rowOverscanEndIdx + 1;\n      const rowIdx = isRowOutsideViewport ? selectedRowIdx : viewportRowIdx;\n\n      let rowColumns = viewportColumns;\n      const selectedColumn = columns[selectedIdx];\n      // selectedIdx can be -1 if grouping is enabled\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n      if (selectedColumn !== undefined) {\n        if (isRowOutsideViewport) {\n          // if the row is outside the viewport then only render the selected cell\n          rowColumns = [selectedColumn];\n        } else if (selectedRowIdx === rowIdx && !viewportColumns.includes(selectedColumn)) {\n          // if the row is within the viewport and cell is not, add the selected column to viewport columns\n          rowColumns =\n            selectedIdx > viewportColumns[viewportColumns.length - 1].idx\n              ? [...viewportColumns, selectedColumn]\n              : [\n                  ...viewportColumns.slice(0, lastFrozenColumnIndex + 1),\n                  selectedColumn,\n                  ...viewportColumns.slice(lastFrozenColumnIndex + 1)\n                ];\n        }\n      }\n\n      const row = rows[rowIdx];\n      const top = getRowTop(rowIdx) + headerRowHeight;\n      if (isGroupRow(row)) {\n        ({ startRowIndex } = row);\n        const isGroupRowSelected =\n          isSelectable && row.childRows.every((cr) => selectedRows.has(rowKeyGetter!(cr)));\n        rowElements.push(\n          <GroupRowRenderer\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            aria-selected={isSelectable ? isGroupRowSelected : undefined}\n            key={row.id}\n            id={row.id}\n            groupKey={row.groupKey}\n            viewportColumns={rowColumns}\n            childRows={row.childRows}\n            rowIdx={rowIdx}\n            row={row}\n            top={top}\n            height={getRowHeight(rowIdx)}\n            level={row.level}\n            isExpanded={row.isExpanded}\n            selectedCellIdx={selectedRowIdx === rowIdx ? selectedIdx : undefined}\n            isRowSelected={isGroupRowSelected}\n            selectGroup={selectGroupLatest}\n            toggleGroup={toggleGroupLatest}\n          />\n        );\n        continue;\n      }\n\n      startRowIndex++;\n      let key;\n      let isRowSelected = false;\n      if (typeof rowKeyGetter === 'function') {\n        key = rowKeyGetter(row);\n        isRowSelected = selectedRows?.has(key) ?? false;\n      } else {\n        key = hasGroups ? startRowIndex : rowIdx;\n      }\n\n      rowElements.push(\n        <RowRenderer\n          aria-rowindex={headerRowsCount + (hasGroups ? startRowIndex : rowIdx) + 1} // aria-rowindex is 1 based\n          aria-selected={isSelectable ? isRowSelected : undefined}\n          key={key}\n          rowIdx={rowIdx}\n          row={row}\n          viewportColumns={rowColumns}\n          isRowSelected={isRowSelected}\n          onRowClick={onRowClick}\n          onRowDoubleClick={onRowDoubleClick}\n          rowClass={rowClass}\n          top={top}\n          height={getRowHeight(rowIdx)}\n          copiedCellIdx={\n            copiedCell !== null && copiedCell.row === row\n              ? columns.findIndex((c) => c.key === copiedCell.columnKey)\n              : undefined\n          }\n          selectedCellIdx={selectedRowIdx === rowIdx ? selectedIdx : undefined}\n          draggedOverCellIdx={getDraggedOverCellIdx(rowIdx)}\n          setDraggedOverRowIdx={isDragging ? setDraggedOverRowIdx : undefined}\n          lastFrozenColumnIndex={lastFrozenColumnIndex}\n          onRowChange={handleFormatterRowChangeLatest}\n          selectCell={selectViewportCellLatest}\n          selectedCellDragHandle={getDragHandle(rowIdx)}\n          selectedCellEditor={getCellEditor(rowIdx)}\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 (selectedPosition.idx > maxColIdx || selectedPosition.rowIdx > maxRowIdx) {\n    setSelectedPosition(initialPosition);\n    setDraggedOverRowIdx(undefined);\n  }\n\n  if (\n    selectedPosition.mode === 'EDIT' &&\n    rows[selectedPosition.rowIdx] !== selectedPosition.originalRow\n  ) {\n    // Discard changes if rows are updated from outside\n    closeEditor();\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(rootClassname, { [viewportDraggingClassname]: isDragging }, className)}\n      style={\n        {\n          ...style,\n          '--header-row-height': `${headerRowHeight}px`,\n          '--row-width': `${totalColumnWidth}px`,\n          '--summary-row-height': `${summaryRowHeight}px`,\n          ...layoutCssVars\n        } as unknown as React.CSSProperties\n      }\n      ref={gridRef}\n      onScroll={handleScroll}\n      onKeyDown={handleKeyDown}\n      data-testid={testId}\n    >\n      <HeaderRow\n        columns={viewportColumns}\n        onColumnResize={handleColumnResize}\n        allRowsSelected={allRowsSelected}\n        onAllRowsSelectionChange={selectAllRowsLatest}\n        sortColumns={sortColumns}\n        onSortColumnsChange={onSortColumnsChange}\n        lastFrozenColumnIndex={lastFrozenColumnIndex}\n        selectedCellIdx={isHeaderRowSelected ? selectedPosition.idx : undefined}\n        selectCell={selectHeaderCellLatest}\n        shouldFocusGrid={!selectedCellIsWithinSelectionBounds}\n      />\n      {rows.length === 0 && noRowsFallback ? (\n        noRowsFallback\n      ) : (\n        <>\n          <div style={{ height: max(totalRowHeight, clientHeight) }} />\n          <RowSelectionChangeProvider value={selectRowLatest}>\n            {getViewportRows()}\n          </RowSelectionChangeProvider>\n          {summaryRows?.map((row, rowIdx) => {\n            const isSummaryRowSelected =\n              selectedPosition.rowIdx === headerRowsCount + rows.length + rowIdx - 1;\n            return (\n              <SummaryRow\n                aria-rowindex={headerRowsCount + rowsCount + rowIdx + 1}\n                key={rowIdx}\n                rowIdx={rowIdx}\n                row={row}\n                bottom={summaryRowHeight * (summaryRows.length - 1 - rowIdx)}\n                viewportColumns={viewportColumns}\n                lastFrozenColumnIndex={lastFrozenColumnIndex}\n                selectedCellIdx={isSummaryRowSelected ? selectedPosition.idx : undefined}\n                selectCell={selectSummaryCellLatest}\n              />\n            );\n          })}\n        </>\n      )}\n    </div>\n  );\n}\n\nexport default forwardRef(DataGrid) as <R, SR = unknown, K extends Key = Key>(\n  props: DataGridProps<R, SR, K> & RefAttributes<DataGridHandle>\n) => JSX.Element;\n","import { css } from '@linaria/core';\nimport type { EditorProps } from '../types';\n\nconst textEditor = css`\n  appearance: none;\n\n  box-sizing: border-box;\n  width: 100%;\n  height: 100%;\n  padding: 0px 6px 0 6px;\n  border: 2px solid #ccc;\n  vertical-align: top;\n  color: var(--color);\n  background-color: var(--background-color);\n\n  font-family: inherit;\n  font-size: var(--font-size);\n\n  &:focus {\n    border-color: var(--selection-color);\n    outline: none;\n  }\n\n  &::placeholder {\n    color: #999;\n    opacity: 1;\n  }\n`;\n\nexport const textEditorClassname = `rdg-text-editor ${textEditor}`;\n\nfunction autoFocusAndSelect(input: HTMLInputElement | null) {\n  input?.focus();\n  input?.select();\n}\n\nexport default function TextEditor<TRow, TSummaryRow>({\n  row,\n  column,\n  onRowChange,\n  onClose\n}: EditorProps<TRow, TSummaryRow>) {\n  return (\n    <input\n      className={textEditorClassname}\n      ref={autoFocusAndSelect}\n      value={row[column.key as keyof TRow] as unknown as string}\n      onChange={(event) => onRowChange({ ...row, [column.key]: event.target.value })}\n      onBlur={() => onClose(true)}\n    />\n  );\n}\n"],"names":["cell","cellClassname","cellFrozen","cellFrozenClassname","cellFrozenLast","cellFrozenLastClassname","root","rootClassname","viewportDragging","viewportDraggingClassname","row","rowClassname","useLayoutEffect","window","useEffect","useOriginalLayoutEffect","useFocusRef","isSelected","ref","useRef","current","focus","preventScroll","tabIndex","checkboxLabel","checkboxLabelClassname","checkboxInput","checkboxInputClassname","checkbox","checkboxClassname","checkboxLabelDisabled","checkboxLabelDisabledClassname","SelectCellFormatter","value","isCellSelected","disabled","onClick","onChange","ariaLabel","ariaLabelledBy","handleChange","e","target","checked","nativeEvent","shiftKey","_jsxs","clsx","_jsx","ValueFormatter","props","column","key","groupCellContent","groupCellContentClassname","caret","caretClassname","ToggleGroupFormatter","groupKey","isExpanded","toggleGroup","handleKeyDown","d","RowSelectionContext","createContext","undefined","RowSelectionProvider","Provider","RowSelectionChangeContext","RowSelectionChangeProvider","useRowSelection","rowSelectionContext","useContext","rowSelectionChangeContext","Error","getColSpan","lastFrozenColumnIndex","args","colSpan","Number","isInteger","frozen","idx","stopPropagation","event","nonInputKeys","Set","isCtrlKeyHeldDown","ctrlKey","metaKey","isDefaultCellInput","has","onEditorNavigation","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","matches","isSelectedCellEditable","selectedPosition","columns","rows","isGroupRow","rowIdx","isCellEditable","editor","rowGroup","editable","getSelectedCellColSpan","summaryRows","type","length","getNextSelectedCellPosition","cellNavigationMode","colSpanColumns","minRowIdx","maxRowIdx","currentPosition","currentIdx","nextPosition","isCellWithinBounds","nextIdx","nextRowIdx","setColSpan","moveRight","colIdx","columnsCount","isAfterLastColumn","isBeforeFirstColumn","isLastRow","isFirstRow","canExitGrid","maxColIdx","atLastCellInRow","atFirstCellInRow","atLastRow","atFirstRow","min","max","floor","sign","Math","assertIsValidKeyGetter","keyGetter","getCellStyle","gridColumnStart","gridColumnEnd","left","getCellClassname","extraClasses","isLastFrozenColumn","SELECT_COLUMN_KEY","SelectFormatter","isRowSelected","onRowSelectionChange","isShiftClick","SelectGroupFormatter","SelectColumn","name","width","maxWidth","resizable","sortable","headerRenderer","allRowsSelected","onAllRowsSelectionChange","formatter","groupFormatter","useCalculatedColumns","rawColumns","columnWidths","viewportWidth","scrollLeft","defaultColumnOptions","rawGroupBy","enableVirtualization","minColumnWidth","minWidth","defaultFormatter","defaultSortable","defaultResizable","groupBy","useMemo","map","rawColumn","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","colVisibleStartIdx","colVisibleEndIdx","test","parseInt","useCombinedRefs","refs","useCallback","handle","useGridDimensions","gridRef","gridWidth","setGridWidth","useState","gridHeight","setGridHeight","ResizeObserver","resizeObserver","clientWidth","clientHeight","devicePixelRatio","observe","disconnect","useLatestFunc","fn","useRovingCellRef","isChildFocused","forceRender","onFocus","isFocused","rowSelected","rowSelectedClassname","useRovingRowRef","selectedCellIdx","className","useViewportColumns","rowOverscanStartIdx","rowOverscanEndIdx","startIdx","updateStartIdx","viewportColumns","isReadonlyArray","arr","Array","isArray","useViewportRows","rawRows","rowHeight","scrollTop","rowGrouper","expandedGroupIds","groupedRows","rowsCount","groupRows","groupByKey","remainingGroupByKeys","startRowIndex","groupRowsCount","groups","childRows","Object","entries","childGroups","childRowsCount","allGroupRows","flattenedRows","expandGroup","parentId","level","keys","posInSet","id","groupRow","setSize","add","totalRowHeight","getRowTop","getRowHeight","findRowIdx","offset","rowPositions","currentRowHeight","position","top","height","validateRowIdx","start","end","middle","currentOffset","overscanThreshold","rowVisibleStartIdx","rowVisibleEndIdx","headerSortCell","headerSortCellClassname","headerSortName","headerSortNameClassname","arrow","arrowClassname","SortableHeaderCell","onSort","sortDirection","priority","children","preventDefault","handleClick","cellResizable","cellResizableClassname","HeaderCell","onColumnResize","sortColumns","onSortColumnsChange","selectCell","shouldFocusGrid","sortIndex","findIndex","columnKey","sortColumn","direction","ariaSort","headerCellClass","onPointerDown","pointerType","buttons","currentTarget","pointerId","right","getBoundingClientRect","clientX","onPointerMove","onLostPointerCapture","removeEventListener","setPointerCapture","addEventListener","ctrlClick","sortDescendingFirst","nextSort","nextSortColumn","nextSortColumns","splice","handleFocus","getCell","headerRow","headerRowClassname","HeaderRow","cells","index","memo","cellCopied","cellCopiedClassname","cellDraggedOver","cellDraggedOverClassname","Cell","isCopied","isDraggedOver","dragHandle","onRowClick","onRowDoubleClick","onRowChange","cellClass","selectCellWrapper","openEditor","editorOptions","editOnClick","handleContextMenu","handleDoubleClick","Row","copiedCellIdx","draggedOverCellIdx","selectedCellEditor","selectedCellDragHandle","rowClass","setDraggedOverRowIdx","onMouseEnter","rowRef","rovingClassName","handleRowChange","newRow","handleDragEnter","RowWithRef","forwardRef","GroupCell","groupColumnIndex","toggleGroupWrapper","isLevelMatching","cursor","groupRowClassname","GroupedRow","selectGroup","handleSelectGroup","SummaryCell","summaryFormatter","SummaryFormatter","summaryCellClass","summaryRow","summaryRowBorderClassname","summaryRowClassname","SummaryRow","bottom","ariaRowIndex","cellEditing","EditCell","onClose","frameRequestRef","commitOnOutsideMouseDown","cancelFrameRequest","cancelAnimationFrame","onWindowCaptureMouseDown","requestAnimationFrame","capture","renderFormatter","cellDragHandle","cellDragHandleClassname","DragHandle","latestDraggedOverRowIdx","onRowsChange","onFill","setDragging","handleMouseDown","onMouseOver","onMouseUp","handleDragEnd","overRowIdx","endRowIndex","updateRows","startRowIdx","endRowIdx","sourceRow","updatedRows","indexes","updatedRow","targetRow","initialPosition","mode","DataGrid","rowKeyGetter","headerRowHeight","rawHeaderRowHeight","summaryRowHeight","rawSummaryRowHeight","selectedRows","onSelectedRowsChange","onExpandedGroupIdsChange","onScroll","onSelectedCellChange","onPaste","rawCellNavigationMode","rowRenderer","noRowsFallback","style","ariaDescribedBy","testId","RowRenderer","setScrollTop","setScrollLeft","setColumnWidths","setSelectedPosition","copiedCell","setCopiedCell","isDragging","draggedOverRowIdx","setOverRowIdx","prevSelectedPosition","lastSelectedRowIdx","headerRowsCount","summaryRowsCount","isSelectable","isHeaderRowSelected","size","every","hasGroups","minColIdx","selectedCellIsWithinSelectionBounds","isCellWithinSelectionBounds","selectedCellIsWithinViewportBounds","isCellWithinViewportBounds","selectRowLatest","selectRow","selectAllRowsLatest","selectAllRows","handleFormatterRowChangeLatest","updateRow","selectViewportCellLatest","enableEditor","selectGroupLatest","selectHeaderCellLatest","selectSummaryCellLatest","toggleGroupLatest","scrollToCell","useImperativeHandle","element","scrollToColumn","scrollToRow","scrollTo","behavior","handleColumnResize","newColumnWidths","newSelectedRows","childRow","rowKey","delete","previousRowIdx","step","expandedGroupId","newExpandedGroupIds","Element","isCellEvent","closest","isRowEvent","keyCode","cKey","vKey","handleCopy","handlePaste","isRowIdxWithinViewportBounds","closeEditor","navigate","handleCellInput","handleScroll","getRawRowIdx","rawRowIdx","commitEditorChanges","originalRow","updatedTargetRow","sourceColumnKey","targetColumnKey","onCellKeyDown","isDefaultPrevented","handleEditorRowChange","commitChanges","handleOnClose","isColIdxWithinSelectionBounds","isCellAtLeftBoundary","isCellAtRightBoundary","rowTop","getNextPosition","parentRowIdx","parentRow","nextRowY","onNavigation","nextSelectedCellPosition","getDraggedOverCellIdx","currentRowIdx","getDragHandle","getCellEditor","getViewportRows","rowElements","selectedIdx","selectedRowIdx","viewportRowIdx","isRowOutsideViewport","rowColumns","selectedColumn","slice","isGroupRowSelected","cr","c","isSummaryRowSelected","textEditor","textEditorClassname","autoFocusAndSelect","input","select","TextEditor"],"mappings":"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"}