From de43eb05d2e43ab31effce3dcca62ad91a556b26 Mon Sep 17 00:00:00 2001
From: Elizabeth Hunt <me@liz.coffee>
Date: Sun, 5 Oct 2025 16:42:02 -0700
Subject: Init

---
 src/components/grid/GridComponent.tsx | 37 ++++++++++++++++++++++++++++++++---
 1 file changed, 34 insertions(+), 3 deletions(-)

(limited to 'src/components/grid/GridComponent.tsx')

diff --git a/src/components/grid/GridComponent.tsx b/src/components/grid/GridComponent.tsx
index 75d65aa..9ec528e 100644
--- a/src/components/grid/GridComponent.tsx
+++ b/src/components/grid/GridComponent.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useState } from 'react';
 
 import type { Grid, GridCell } from '@/types/grid';
 import { Cell } from '@/components/grid/Cell';
@@ -6,21 +6,52 @@ import { Cell } from '@/components/grid/Cell';
 interface GridProps {
     grid: Grid;
     onCellInteract?: (cell: GridCell) => void;
+    onDragStart?: () => void;
+    onDragEnd?: () => void;
 }
 
 export const GridComponent: React.FC<GridProps> = ({
     grid,
     onCellInteract,
+    onDragStart,
+    onDragEnd,
 }) => {
+    const [isDragging, setIsDragging] = useState(false);
+
+    const handleMouseDown = (e: React.MouseEvent) => {
+        e.preventDefault(); // Prevent text selection
+        setIsDragging(true);
+        onDragStart?.();
+    };
+
+    const handleMouseUp = () => {
+        setIsDragging(false);
+        onDragEnd?.();
+    };
+
+    const handleMouseLeave = () => {
+        if (isDragging) {
+            setIsDragging(false);
+            onDragEnd?.();
+        }
+    };
+
     return (
-        <div className='grid'>
+        <div
+            className='grid'
+            onMouseDown={handleMouseDown}
+            onMouseUp={handleMouseUp}
+            onMouseLeave={handleMouseLeave}
+            style={{ userSelect: 'none' }}
+        >
             {grid.map((row, i) => (
                 <div className='grid-row' key={i}>
                     {row.map((cell, j) => (
                         <Cell
                             key={j}
                             cell={cell}
-                            onClick={() => onCellInteract?.(cell)}
+                            onClick={onCellInteract ? () => onCellInteract(cell) : undefined}
+                            onMouseEnter={isDragging && onCellInteract ? () => onCellInteract(cell) : undefined}
                         />
                     ))}
                 </div>
-- 
cgit v1.3

