{"version":3,"file":"index.cjs","sources":["../../../../src/components/Grid/Grid.tsx"],"sourcesContent":["import {\n  CSSProperties,\n  HTMLAttributes,\n  KeyboardEventHandler,\n  MouseEventHandler,\n  PointerEventHandler,\n  ReactElement,\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react';\nimport {\n  GridOnScrollProps,\n  VariableSizeGrid,\n  GridOnItemsRenderedProps,\n  GridChildComponentProps,\n} from 'react-window';\nimport AutoSizer, { Size } from 'react-virtualized-auto-sizer';\nimport RowNumberColumn from './RowNumberColumn';\nimport Header from './Header';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './Grid.module.css';\nimport {\n  GetResizerPositionFn,\n  GridContextMenuItemProps,\n  GridProps,\n  ItemDataType,\n  ResizerPosition,\n  RoundedType,\n  SelectedRegion,\n  SelectionAction,\n  SelectionFocus,\n  onSelectFn,\n} from './types';\nimport { useSelectionActions } from './useSelectionActions';\nimport { mergeRefs } from '@/utils/mergeRefs';\nimport { Cell } from './Cell';\nimport { ContextMenu } from '@/components/ContextMenu';\nimport { createToast } from '@/components/Toast/toastEmitter';\nimport copyGridElements from './copyGridElements';\nimport useColumns from './useColumns';\nimport useResizingState from './useResizingState';\n\nconst gridVariants = cva(styles['grid'], {\n  variants: {\n    bordered: { true: styles['grid_bordered'] },\n  },\n});\n\nconst NO_BUTTONS_PRESSED = 0;\nconst LEFT_BUTTON_PRESSED = 1;\nconst RIGHT_BUTTON_PRESSED = 2;\n\nconst getRenderedCursor = (children: ReactElement[]) =>\n  children.reduce(\n    ([minRow, maxRow, minColumn, maxColumn], { props: { columnIndex, rowIndex } }) => {\n      if (rowIndex < minRow) {\n        minRow = rowIndex;\n      }\n      if (rowIndex > maxRow) {\n        maxRow = rowIndex;\n      }\n      if (columnIndex < minColumn) {\n        minColumn = columnIndex;\n      }\n      if (columnIndex > maxColumn) {\n        maxColumn = columnIndex;\n      }\n\n      return [minRow, maxRow, minColumn, maxColumn];\n    },\n    [\n      Number.POSITIVE_INFINITY,\n      Number.NEGATIVE_INFINITY,\n      Number.POSITIVE_INFINITY,\n      Number.NEGATIVE_INFINITY,\n    ]\n  );\n\nconst roundedRadii: Record<RoundedType, string> = {\n  none: 'var(--click-grid-radii-none)',\n  lg: 'var(--click-grid-radii-lg)',\n  md: 'var(--click-grid-radii-md)',\n  sm: 'var(--click-grid-radii-sm)',\n};\n\ninterface InnerElementTypeTypes extends HTMLAttributes<HTMLDivElement> {\n  children: ReactElement[];\n}\n\nconst OuterElementType = forwardRef<HTMLDivElement>((props, ref) => (\n  <div\n    ref={ref}\n    data-testid=\"grid-outer-element\"\n    // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- react-window scroll region; focusable for axe scrollable-region-focusable, keys are handled by the grid container\n    tabIndex={0}\n    {...props}\n  />\n));\n\nexport const Grid = forwardRef<HTMLDivElement, GridProps>(\n  (\n    {\n      autoFocus,\n      autoHeight = false,\n      rowStart = 0,\n      showRowNumber = true,\n      rounded = 'none',\n      showHeader = true,\n      focus: focusProp,\n      useIsScrolling = true,\n      rowHeight = 33,\n      columnCount,\n      columnWidth: columnWidthProp,\n      onSelect: onSelectProp,\n      headerHeight = 33,\n      rowCount,\n      cell,\n      onColumnResize: onColumnResizeProp,\n      onFocusChange: onFocusChangeProp,\n      getMenuOptions,\n      onKeyDown: onKeyDownProp,\n      selection: selectionProp,\n      showToast,\n      onMouseDown: onMouseDownProp,\n      onMouseMove: onMouseMoveProp,\n      showBorder = false,\n      onCopy: onCopyProp,\n      onCopyCallback,\n      onContextMenu: onContextMenuProp,\n      forwardedGridRef,\n      onItemsRendered: onItemsRenderedProp,\n      rowAutoHeight,\n      ...props\n    },\n    forwardedRef\n  ) => {\n    const [focus, setFocus] = useState<SelectionFocus>(\n      focusProp ?? {\n        row: rowStart,\n        column: 0,\n      }\n    );\n    const [selection, setSelection] = useState<SelectedRegion>(\n      selectionProp ?? {\n        type: 'empty',\n      }\n    );\n\n    const defaultOnCopy: () => Promise<void> = useCallback(async () => {\n      try {\n        await copyGridElements({\n          cell,\n          selection,\n          focus: focusProp ?? focus,\n          rowCount,\n          columnCount,\n          outerRef: outerRef,\n        });\n\n        if (onCopyCallback) {\n          onCopyCallback(true);\n        }\n        if (showToast) {\n          createToast({\n            title: 'Copied successfully',\n            description: 'Now you can paste the content',\n            type: 'success',\n          });\n        }\n      } catch (e) {\n        console.error(e);\n\n        if (onCopyCallback) {\n          onCopyCallback(false);\n        }\n\n        if (showToast) {\n          createToast({\n            title: 'Failed to copy',\n            description: 'Encountered an error while copying. Try again after sometime',\n            type: 'danger',\n          });\n        }\n      }\n    }, [\n      cell,\n      columnCount,\n      focus,\n      focusProp,\n      rowCount,\n      selection,\n      showToast,\n      onCopyCallback,\n    ]);\n\n    const customOnCopy: () => Promise<void> = useMemo(() => {\n      const result = async () => {\n        if (onCopyProp) {\n          await onCopyProp(selection, focus);\n        }\n      };\n      return result;\n    }, [onCopyProp, selection, focus]);\n\n    const onCopy: () => Promise<void> =\n      typeof onCopyProp === 'function' ? customOnCopy : defaultOnCopy;\n\n    const defaultMenuOptions = [\n      {\n        label: 'Copy',\n        onSelect: onCopy,\n      },\n    ];\n\n    const [menuOptions, setMenuOptions] =\n      useState<GridContextMenuItemProps[]>(defaultMenuOptions);\n    const [contextMenuOpen, setContextMenuOpen] = useState(false);\n    const [scrolledVertical, setScrolledVertical] = useState(false);\n    const [scrolledHorizontal, setScrolledHorizontal] = useState(false);\n    const dragState = useRef<number | false>(false);\n    const gridRef = useRef<VariableSizeGrid>(null);\n    const containerRef = useRef<HTMLDivElement>(null);\n    const outerRef = useRef<HTMLDivElement>(null);\n    const elementBorderRef = useRef({\n      top: 0,\n      bottom: 0,\n      left: 0,\n      right: 0,\n      scrollBarWidth: 0,\n      scrollBarHeight: 0,\n      width: 0,\n      height: 0,\n    });\n    const onCellSelect: onSelectFn = useCallback(\n      (action, selection, focus) => {\n        setSelection(selection);\n        if (typeof onSelectProp === 'function') {\n          onSelectProp(action, selection, focus);\n        }\n      },\n      [onSelectProp]\n    );\n    const resizingState = useResizingState();\n\n    const [rowHeights, setRowHeights] = useState<{ [key: number]: number }>({});\n\n    const getRowHeight = useCallback(\n      (index: number) => {\n        if (rowAutoHeight && rowHeights[index] !== undefined) {\n          return rowHeights[index] + rowHeight;\n        }\n        return rowHeight;\n      },\n      [rowHeight, rowAutoHeight, rowHeights]\n    );\n\n    const updateRowHeight = useCallback(\n      (rowIndex: number, height: number) => {\n        if (!rowAutoHeight) {\n          return;\n        }\n\n        setRowHeights(prevRowHeights => {\n          if (height > (prevRowHeights[rowIndex] || 0) && gridRef.current) {\n            const newRowHeights = { ...prevRowHeights, [rowIndex]: height };\n            gridRef.current.resetAfterRowIndex(rowIndex);\n            return newRowHeights;\n          }\n          return prevRowHeights;\n        });\n      },\n      [rowAutoHeight, gridRef]\n    );\n\n    const onFocusChange = useCallback(\n      (row: number, column: number) => {\n        setFocus(focus => ({\n          row: row ?? focusProp?.row ?? focus.row,\n          column: column ?? focusProp?.column ?? focus.column,\n        }));\n        if (typeof onFocusChangeProp === 'function') {\n          onFocusChangeProp(row, column);\n        }\n      },\n      [onFocusChangeProp, focusProp]\n    );\n\n    const rowNumberWidth = ((rowStart + rowCount).toString().length + 2) * 8 + 3; // 128 includes 8px left and right padding and (8px + 8px + 8x(1ch) * rowcount) and 3 is for avoiding ellipsis\n\n    const { getColumnHorizontalPosition, onColumnResize, columnWidth, initColumnSize } =\n      useColumns({\n        columnCount,\n        columnWidth: columnWidthProp,\n        outerGridRef: outerRef,\n        gridRef,\n        onColumnResize: onColumnResizeProp,\n      });\n\n    const scrollGridTo = useCallback(\n      async ({ row, column }: { row?: number; column?: number }) => {\n        if (!outerRef.current || !gridRef.current) {\n          return;\n        }\n\n        const rowIndex = row ?? 0;\n        const columnIndex = column ?? 0;\n        let element = outerRef.current?.querySelector<HTMLElement>(\n          `[data-row=\"${rowIndex}\"][data-column=\"${columnIndex}\"]`\n        );\n        if (!element) {\n          return;\n        }\n\n        const { scrollTop, scrollLeft } = outerRef.current;\n        // this is for the test to perform correctly\n        if (typeof element?.scrollIntoView === 'function') {\n          element?.scrollIntoView({\n            block: 'nearest',\n            inline: 'nearest',\n          });\n          // This is for the element to be available after the scroll.\n          await new Promise(requestAnimationFrame);\n        }\n        element = outerRef.current?.querySelector<HTMLElement>(\n          `[data-row=\"${rowIndex}\"][data-column=\"${columnIndex}\"]`\n        );\n        if (!element) {\n          return;\n        }\n        if (scrollLeft > element.offsetLeft || scrollTop > element.offsetTop) {\n          outerRef.current?.scrollBy(\n            scrollLeft > element.offsetLeft ? -rowNumberWidth : 0,\n            scrollTop > element.offsetTop ? -headerHeight : 0\n          );\n        }\n      },\n      [headerHeight, rowNumberWidth]\n    );\n\n    const getFixedResizerLeftPosition = useCallback(\n      (clientX: number, width: number, columnIndex: number): string | number => {\n        const columnPosition = getColumnHorizontalPosition(columnIndex);\n        const columnLeft = columnPosition + width;\n        const { width: containerWidth, left, scrollBarWidth } = elementBorderRef.current;\n        const scrollLeft = outerRef.current?.scrollLeft ?? 0;\n        if (clientX + rowNumberWidth - left > containerWidth + scrollBarWidth) {\n          return scrollLeft + containerWidth - scrollBarWidth - 4;\n        }\n\n        if (width < 50) {\n          //50 is the minWidth for the column\n          return columnPosition + rowNumberWidth + 50;\n        }\n\n        return columnLeft + rowNumberWidth - 4;\n      },\n      [getColumnHorizontalPosition, rowNumberWidth]\n    );\n\n    const getResizerPosition: GetResizerPositionFn = useCallback(\n      (clientX, width, columnIndex) => {\n        const result: ResizerPosition = {\n          left: `${getFixedResizerLeftPosition(clientX, width, columnIndex)}px`,\n        };\n\n        if (outerRef.current) {\n          result.top = `${outerRef.current.scrollTop}px`;\n        }\n        return result;\n      },\n      [getFixedResizerLeftPosition]\n    );\n\n    const clearSelectionAndFocus = useCallback(\n      (force: boolean) => {\n        setSelection(selection => {\n          if (selection.type === 'columns' && !force) {\n            return selection;\n          } else {\n            return { type: 'empty' };\n          }\n        });\n        const newFocus = focusProp ?? focus;\n        onFocusChange(newFocus.row, newFocus.column);\n        scrollGridTo(newFocus);\n      },\n      [focus, focusProp, onFocusChange, scrollGridTo]\n    );\n\n    useEffect(() => {\n      clearSelectionAndFocus(true);\n      // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [rowStart]);\n\n    const { getSelectionType, onSelection, mouseMoveCellSelect, moveSelection } =\n      useSelectionActions({\n        onCellSelect,\n        focus: focusProp ?? focus,\n        columnCount,\n        rowCount,\n        onFocusChange,\n        scrollGridTo,\n        selection: selectionProp ?? selection,\n        rowStart,\n      });\n\n    const data: ItemDataType = {\n      showRowNumber,\n      cell,\n      rowCount,\n      columnCount,\n      showHeader,\n      focus: focusProp ?? focus,\n      getSelectionType,\n      rowHeight,\n      headerHeight,\n      rowNumberWidth,\n      rowStart,\n      rowAutoHeight,\n      updateRowHeight,\n      getRowHeight,\n    };\n\n    const InnerElementType = forwardRef<HTMLDivElement, InnerElementTypeTypes>(\n      ({ children, ...containerProps }, ref) => {\n        const [minRow, maxRow, minColumn, maxColumn] = getRenderedCursor(children);\n        return (\n          <div\n            {...containerProps}\n            className={cn(\n              styles['grid__inner'],\n              `sticky-grid__container grid-outer ${props.className ?? ''}`\n            )}\n          >\n            <div\n              className={styles['grid__data']}\n              style={\n                {\n                  '--grid-data-top': `${showHeader ? headerHeight : 0}px`,\n                  '--grid-data-left': `${showRowNumber ? rowNumberWidth : 0}px`,\n                } as CSSProperties\n              }\n              ref={ref}\n            >\n              {children}\n            </div>\n            {showRowNumber && (\n              <RowNumberColumn\n                scrolledHorizontal={scrolledHorizontal}\n                minRow={minRow}\n                maxRow={maxRow}\n                rowHeight={rowHeight}\n                headerHeight={headerHeight}\n                rowWidth={rowNumberWidth}\n                rowCount={rowCount}\n                getSelectionType={getSelectionType}\n                rowStart={rowStart}\n                showBorder={showBorder}\n                rowAutoHeight={rowAutoHeight}\n              />\n            )}\n\n            {showHeader && (\n              <Header\n                scrolledVertical={scrolledVertical}\n                scrolledHorizontal={scrolledHorizontal}\n                showRowNumber={showRowNumber}\n                minColumn={minColumn}\n                maxColumn={maxColumn}\n                height={headerHeight}\n                getColumnWidth={columnWidth}\n                cell={cell}\n                rowNumberWidth={rowNumberWidth}\n                getSelectionType={getSelectionType}\n                columnCount={columnCount}\n                onColumnResize={onColumnResize}\n                getColumnHorizontalPosition={getColumnHorizontalPosition}\n                getResizerPosition={getResizerPosition}\n                showBorder={showBorder}\n                resizingState={resizingState}\n              />\n            )}\n          </div>\n        );\n      }\n    );\n    useEffect(() => {\n      if (autoFocus) {\n        containerRef.current?.focus();\n      }\n    }, [autoFocus]);\n\n    const onMouseDown: MouseEventHandler<HTMLDivElement> = useCallback(\n      e => {\n        containerRef.current?.focus();\n        if (typeof onMouseDownProp === 'function' && e.buttons === LEFT_BUTTON_PRESSED) {\n          onMouseDownProp(e);\n        }\n        const target = (e.target as HTMLElement).closest(\n          '[data-grid-row][data-grid-column]'\n        ) as HTMLElement;\n        if (\n          !target ||\n          target.dataset.gridRow === undefined ||\n          target.dataset.gridColumn === undefined\n        ) {\n          return;\n        }\n\n        if (e.buttons === RIGHT_BUTTON_PRESSED && target.dataset.selected === 'true') {\n          return;\n        }\n\n        const { gridRow: rowIndexString, gridColumn: columnIndexString } = target.dataset;\n        const row = parseInt(rowIndexString);\n        const column = parseInt(columnIndexString);\n        if (row === -1 && column === -1) {\n          onSelection({ type: 'all' });\n          return;\n        }\n        const shiftKeyPressed = e.shiftKey;\n\n        if (row === -1) {\n          onSelection({\n            type: shiftKeyPressed ? 'shiftColumnSelection' : 'columnSelection',\n            column,\n            event: 'click',\n          });\n          if (!shiftKeyPressed) {\n            onFocusChange(rowStart, column);\n          }\n          return;\n        }\n        if (column === -1) {\n          onSelection({\n            type: shiftKeyPressed ? 'shiftRowSelection' : 'rowSelection',\n            row,\n            event: 'click',\n          });\n          if (!shiftKeyPressed) {\n            onFocusChange(row, 0);\n          }\n          return;\n        }\n        onSelection({\n          type: shiftKeyPressed ? 'shiftSelection' : 'normal',\n          row,\n          column,\n          event: 'click',\n        });\n        if (!shiftKeyPressed) {\n          onFocusChange(row, column);\n        }\n      },\n      [onFocusChange, onMouseDownProp, onSelection, rowStart]\n    );\n\n    const onPointerDown: PointerEventHandler<HTMLDivElement> = useCallback(e => {\n      dragState.current = e.pointerId;\n    }, []);\n\n    const setPointerCapture: PointerEventHandler<HTMLDivElement> = useCallback(e => {\n      if (e.buttons === NO_BUTTONS_PRESSED || dragState.current === false) {\n        return;\n      }\n\n      containerRef.current?.setPointerCapture(dragState.current);\n    }, []);\n\n    const onPointerUp: PointerEventHandler<HTMLDivElement> = useCallback(\n      e => {\n        if (containerRef.current) {\n          containerRef.current.releasePointerCapture(e.pointerId);\n          if (!contextMenuOpen) {\n            containerRef.current.focus();\n          }\n        }\n\n        dragState.current = false;\n        const newFocus = focusProp ?? focus;\n        onFocusChange(newFocus.row, newFocus.column);\n      },\n      [contextMenuOpen, focus, focusProp, onFocusChange]\n    );\n\n    const onMouseMove: MouseEventHandler<HTMLDivElement> = useCallback(\n      async e => {\n        e.preventDefault();\n        e.stopPropagation();\n        if (typeof onMouseMoveProp === 'function') {\n          onMouseMoveProp(e);\n        }\n        if (\n          dragState.current === false ||\n          e.buttons === NO_BUTTONS_PRESSED ||\n          !containerRef.current ||\n          !outerRef.current\n        ) {\n          return;\n        }\n\n        containerRef.current.setPointerCapture(dragState.current);\n        let verticalSign = 0,\n          horizontalSign = 0,\n          x = e.clientX,\n          y = e.clientY;\n        if (\n          elementBorderRef.current.left >= e.clientX ||\n          e.clientX >=\n            elementBorderRef.current.right - elementBorderRef.current.scrollBarWidth\n        ) {\n          const scrollHorizontalDirection =\n            e.clientX <= elementBorderRef.current.left ? 'left' : 'right';\n          if (\n            (scrollHorizontalDirection === 'left' && e.movementX < 0) ||\n            (scrollHorizontalDirection === 'right' && e.movementX > 0)\n          ) {\n            horizontalSign = scrollHorizontalDirection === 'left' ? -1 : 1;\n          }\n          x =\n            scrollHorizontalDirection === 'left'\n              ? elementBorderRef.current.left + rowNumberWidth + 10\n              : elementBorderRef.current.right -\n                elementBorderRef.current.scrollBarWidth -\n                10;\n        }\n\n        if (\n          elementBorderRef.current.top >= e.clientY ||\n          e.clientY >=\n            elementBorderRef.current.bottom - elementBorderRef.current.scrollBarHeight\n        ) {\n          const scrollVerticalDirection =\n            e.clientY <= elementBorderRef.current.top ? 'top' : 'bottom';\n          if (\n            (scrollVerticalDirection === 'top' && e.movementY < 0) ||\n            (scrollVerticalDirection === 'bottom' && e.movementY > 0)\n          ) {\n            verticalSign = scrollVerticalDirection === 'top' ? -1 : 1;\n          }\n          y =\n            scrollVerticalDirection === 'top'\n              ? elementBorderRef.current.top + headerHeight + 10\n              : elementBorderRef.current.bottom -\n                elementBorderRef.current.scrollBarHeight -\n                10;\n        }\n\n        await new Promise(requestAnimationFrame);\n        const cell = document.elementFromPoint(x, y) as HTMLElement | null;\n\n        if (!cell) {\n          return;\n        }\n\n        const { gridRow, gridColumn } = cell.dataset;\n        if (!gridRow || !gridColumn) {\n          return;\n        }\n        const rowIndex = Number(gridRow) + verticalSign;\n        const columnIndex = Number(gridColumn) + horizontalSign;\n\n        mouseMoveCellSelect(rowIndex, columnIndex);\n      },\n      [headerHeight, mouseMoveCellSelect, onMouseMoveProp, rowNumberWidth]\n    );\n\n    const onScroll = ({ scrollLeft, scrollTop }: GridOnScrollProps) => {\n      setScrolledVertical(scrollTop > 0);\n      setScrolledHorizontal(scrollLeft > 0);\n    };\n\n    const onResize = useCallback(\n      ({ height, width }: Size) => {\n        setTimeout(() => {\n          if (!outerRef.current) {\n            return;\n          }\n\n          const { top, bottom, left, right } =\n            outerRef.current.getBoundingClientRect() ?? {};\n          elementBorderRef.current = {\n            top,\n            bottom,\n            left,\n            right,\n            scrollBarWidth: width - outerRef.current.clientWidth,\n            scrollBarHeight: height - outerRef.current.clientHeight,\n            width,\n            height,\n          };\n          initColumnSize(outerRef.current.clientWidth - rowNumberWidth);\n        }, 0);\n      },\n      [initColumnSize, rowNumberWidth]\n    );\n\n    const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n      async e => {\n        if (typeof onKeyDownProp === 'function') {\n          onKeyDownProp(e);\n        }\n        if (!e.defaultPrevented) {\n          e.preventDefault();\n          e.stopPropagation();\n        }\n        const moveAnchor = e.shiftKey;\n        const { row, column } = focusProp ?? focus;\n\n        const applyAction = (action: SelectionAction | null): void => {\n          if (action) {\n            onSelection({ ...action, event: 'keypress' });\n          }\n          if (action?.type === 'normal') {\n            onFocusChange(action.row, action.column);\n          }\n        };\n        if ((e.ctrlKey || e.metaKey) && e.key === 'c') {\n          onCopy();\n          return;\n        }\n\n        switch (e.key) {\n          case 'ArrowLeft':\n            applyAction(moveSelection(-1, 0, moveAnchor, 'keypress'));\n            break;\n          case 'ArrowRight':\n            applyAction(moveSelection(1, 0, moveAnchor, 'keypress'));\n            break;\n          case 'ArrowUp':\n            applyAction(moveSelection(0, -1, moveAnchor, 'keypress'));\n            break;\n          case 'ArrowDown':\n            applyAction(moveSelection(0, 1, moveAnchor, 'keypress'));\n            break;\n          case 'Enter':\n            onSelection({\n              type: 'normal',\n              row,\n              column,\n              event: 'keypress',\n            });\n            onFocusChange(row, column);\n            break;\n          case 'Escape':\n            clearSelectionAndFocus(true);\n            break;\n        }\n        containerRef.current?.focus();\n      },\n      [\n        onKeyDownProp,\n        focusProp,\n        focus,\n        onSelection,\n        onFocusChange,\n        onCopy,\n        moveSelection,\n        clearSelectionAndFocus,\n      ]\n    );\n    const onContextMenu: MouseEventHandler<HTMLDivElement> = e => {\n      onMouseDown(e);\n\n      if (typeof onContextMenuProp === 'function') {\n        onContextMenuProp(e);\n      }\n      if (typeof getMenuOptions === 'function') {\n        const newOptions = getMenuOptions(selection, focusProp ?? focus);\n        setMenuOptions([...defaultMenuOptions, ...newOptions]);\n      }\n    };\n\n    const lastItemsRenderedProps = useRef<GridOnItemsRenderedProps>();\n    const lastRowStart = useRef(rowStart);\n\n    const onItemsRendered = useCallback(\n      (props: GridOnItemsRenderedProps) => {\n        lastItemsRenderedProps.current = props;\n        return onItemsRenderedProp?.({\n          ...props,\n          visibleRowStartIndex: props.visibleRowStartIndex + rowStart,\n          visibleRowStopIndex: props.visibleRowStopIndex + rowStart,\n          overscanRowStartIndex: props.overscanRowStartIndex + rowStart,\n          overscanRowStopIndex: props.overscanRowStopIndex + rowStart,\n        });\n      },\n      [onItemsRenderedProp, rowStart]\n    );\n\n    // handles the case where rowStart changes, make sure to inform caller\n    // of the new visible rows.\n    useEffect(() => {\n      if (lastItemsRenderedProps.current && rowStart !== lastRowStart.current) {\n        onItemsRendered(lastItemsRenderedProps.current);\n        lastRowStart.current = rowStart;\n      }\n    }, [rowStart, onItemsRendered]);\n\n    const CellWithWidth = (\n      args: GridChildComponentProps<ItemDataType>\n    ): React.JSX.Element => {\n      const width = columnWidth(args.columnIndex);\n      return (\n        <Cell\n          {...args}\n          width={width}\n        />\n      );\n    };\n\n    // Handles the case when rowCount/columnCount changes, rerenders styles\n    useEffect(() => {\n      if (gridRef.current) {\n        gridRef.current.resetAfterRowIndex(0);\n      }\n    }, [rowCount, columnCount]);\n\n    const contextMenuTriggerHeight = autoHeight\n      ? rowCount * rowHeight +\n        (showHeader ? headerHeight : 0) +\n        elementBorderRef.current.scrollBarHeight\n      : undefined;\n\n    return (\n      <ContextMenu\n        modal={false}\n        onOpenChange={setContextMenuOpen}\n      >\n        <ContextMenu.Trigger\n          className={gridVariants({ bordered: showBorder })}\n          style={\n            {\n              '--grid-radius': roundedRadii[rounded],\n              '--grid-height': contextMenuTriggerHeight\n                ? `${contextMenuTriggerHeight}px`\n                : '100%',\n            } as CSSProperties\n          }\n          ref={mergeRefs([forwardedRef, containerRef])}\n          tabIndex={0}\n          onMouseDown={onMouseDown}\n          onMouseMove={onMouseMove}\n          onKeyDown={onKeyDown}\n          onPointerDown={onPointerDown}\n          onPointerUp={onPointerUp}\n          onPointerLeave={setPointerCapture}\n          onPointerEnter={setPointerCapture}\n          onContextMenu={onContextMenu}\n        >\n          <AutoSizer onResize={onResize}>\n            {({ height, width }) => (\n              <VariableSizeGrid\n                ref={forwardedGridRef ? mergeRefs([forwardedGridRef, gridRef]) : gridRef}\n                height={height}\n                width={width}\n                columnCount={columnCount}\n                rowHeight={getRowHeight}\n                useIsScrolling={useIsScrolling}\n                innerElementType={InnerElementType}\n                itemData={data}\n                initialScrollTop={\n                  focus.row < rowStart\n                    ? focus.row * rowHeight\n                    : (focus.row - rowStart) * rowHeight\n                }\n                initialScrollLeft={getColumnHorizontalPosition(focus.column)}\n                columnWidth={columnWidth}\n                rowCount={rowCount}\n                onScroll={onScroll}\n                outerRef={outerRef}\n                outerElementType={OuterElementType}\n                onItemsRendered={onItemsRendered}\n                {...props}\n              >\n                {CellWithWidth}\n              </VariableSizeGrid>\n            )}\n          </AutoSizer>\n        </ContextMenu.Trigger>\n        <ContextMenu.Content>\n          {menuOptions.map((option, index) => (\n            <ContextMenu.Item\n              key={`grid-${index}`}\n              onSelect={option.onSelect}\n            >\n              {option.label}\n            </ContextMenu.Item>\n          ))}\n        </ContextMenu.Content>\n      </ContextMenu>\n    );\n  }\n);\n"],"names":["cva","styles","forwardRef","jsx","useState","useCallback","copyGridElements","createToast","useMemo","useRef","selection","focus","useResizingState","useColumns","useEffect","useSelectionActions","jsxs","cn","RowNumberColumn","Header","cell","props","Cell","ContextMenu","mergeRefs","AutoSizer","VariableSizeGrid"],"mappings":"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"}