diff --git a/src/components/Spreadsheet/Spreadsheet.tsx b/src/components/Spreadsheet/Spreadsheet.tsx index 256664e..b3dd0bd 100644 --- a/src/components/Spreadsheet/Spreadsheet.tsx +++ b/src/components/Spreadsheet/Spreadsheet.tsx @@ -14,6 +14,8 @@ const Spreadsheet: FC = () => { }); const [selectedCell, setSelectedCell] = useState<{row: number, col: number} | null>(null); + const [columnWidths, setColumnWidths] = useState(Array(10).fill(96)); // 96px = w-24 + const [rowHeights, setRowHeights] = useState(Array(20).fill(32)); // 32px = h-8 const handleCellClick = (row: number, col: number) => { setSelectedCell({ row, col }); @@ -31,6 +33,22 @@ const Spreadsheet: FC = () => { return String.fromCharCode(65 + index); // A, B, C, ... }; + const handleResize = (colIndex: number, newWidth: number) => { + setColumnWidths(prev => { + const newWidths = [...prev]; + newWidths[colIndex] = Math.max(60, newWidth); // Минимальная ширина 60px + return newWidths; + }); + }; + + const handleRowResize = (rowIndex: number, newHeight: number) => { + setRowHeights(prev => { + const newHeights = [...prev]; + newHeights[rowIndex] = Math.max(24, newHeight); // Минимальная высота 24px + return newHeights; + }); + }; + return (
{/* Formula bar */} @@ -66,9 +84,32 @@ const Spreadsheet: FC = () => { {Array.from({ length: 10 }, (_, i) => ( {getColumnLabel(i)} + {/* Resize handle */} +
{ + e.preventDefault(); + const startX = e.clientX; + const startWidth = columnWidths[i]; + + const handleMouseMove = (e: MouseEvent) => { + const newWidth = startWidth + (e.clientX - startX); + handleResize(i, newWidth); + }; + + const handleMouseUp = () => { + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseup', handleMouseUp); + }; + + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseUp); + }} + /> ))} @@ -77,18 +118,44 @@ const Spreadsheet: FC = () => { {cells.map((row, rowIndex) => ( {/* Row header */} - + {rowIndex + 1} + {/* Resize handle */} +
{ + e.preventDefault(); + const startY = e.clientY; + const startHeight = rowHeights[rowIndex]; + + const handleMouseMove = (e: MouseEvent) => { + const newHeight = startHeight + (e.clientY - startY); + handleRowResize(rowIndex, newHeight); + }; + + const handleMouseUp = () => { + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseup', handleMouseUp); + }; + + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseUp); + }} + /> {/* Data cells */} {row.map((cell, colIndex) => ( handleCellClick(rowIndex, colIndex)} >