import Box from '@mui/material/Box'; import Divider, { type DividerProps } from '@mui/material/Divider'; import { type MRT_Header, type MRT_RowData, type MRT_TableInstance, } from '../../types'; import { parseFromValuesOrFunc } from '../../utils/utils'; export interface MRT_TableHeadCellResizeHandleProps extends DividerProps { header: MRT_Header; table: MRT_TableInstance; } export const MRT_TableHeadCellResizeHandle = ({ header, table, ...rest }: MRT_TableHeadCellResizeHandleProps) => { const { getState, options: { columnResizeDirection, columnResizeMode }, setColumnSizingInfo, } = table; const { density } = getState(); const { column } = header; const handler = header.getResizeHandler(); const mx = density === 'compact' ? '-8px' : density === 'comfortable' ? '-16px' : '-24px'; const lr = column.columnDef.columnDefType === 'display' ? '4px' : '0'; return ( { setColumnSizingInfo((old) => ({ ...old, isResizingColumn: false, })); column.resetSize(); }} onMouseDown={handler} onTouchStart={handler} style={{ transform: column.getIsResizing() && columnResizeMode === 'onEnd' ? `translateX(${ (columnResizeDirection === 'rtl' ? -1 : 1) * (getState().columnSizingInfo.deltaOffset ?? 0) }px)` : undefined, }} sx={(theme) => ({ '&:active > hr': { backgroundColor: theme.palette.info.main, opacity: header.subHeaders.length || columnResizeMode === 'onEnd' ? 1 : 0, }, cursor: 'col-resize', left: columnResizeDirection === 'rtl' ? lr : undefined, ml: columnResizeDirection === 'rtl' ? mx : undefined, mr: columnResizeDirection === 'ltr' ? mx : undefined, position: 'absolute', px: '4px', right: columnResizeDirection === 'ltr' ? lr : undefined, })} > ({ borderRadius: '2px', borderWidth: '2px', height: '24px', touchAction: 'none', transform: 'translateX(4px)', transition: column.getIsResizing() ? undefined : 'all 150ms ease-in-out', userSelect: 'none', zIndex: 4, ...(parseFromValuesOrFunc(rest?.sx, theme) as any), })} /> ); };