import { useState } from "react"; import { ChevronRight } from "lucide-react"; import { CANVAS_GRID_SPLIT_MAX, CANVAS_GRID_SPLIT_PRESETS, clampGridSplitSize, isValidGridSplit } from "@/lib/canvas/canvas-grid-split"; import type { ImageSplitParams } from "@/lib/canvas/canvas-image-data"; import "./canvas-grid-split-picker.css"; function MiniGridIcon({ n }: { n: number }) { return ( {Array.from({ length: n * n }, (_, index) => )} ); } export function CanvasGridSplitPicker({ onPick }: { onPick: (params: ImageSplitParams) => void }) { const [customOpen, setCustomOpen] = useState(false); const [hoverRows, setHoverRows] = useState(2); const [hoverCols, setHoverCols] = useState(2); const pick = (rows: number, columns: number) => { const params = { rows: clampGridSplitSize(rows), columns: clampGridSplitSize(columns) }; if (!isValidGridSplit(params)) return; onPick(params); }; return (
event.stopPropagation()} onMouseDown={(event) => event.stopPropagation()} onClick={(event) => event.stopPropagation()} >
{CANVAS_GRID_SPLIT_PRESETS.map((preset) => ( ))}
{customOpen ? (
自定义宫格 {hoverCols} × {hoverRows}
{ setHoverRows(2); setHoverCols(2); }} > {Array.from({ length: CANVAS_GRID_SPLIT_MAX * CANVAS_GRID_SPLIT_MAX }, (_, index) => { const row = Math.floor(index / CANVAS_GRID_SPLIT_MAX) + 1; const col = (index % CANVAS_GRID_SPLIT_MAX) + 1; const active = row <= hoverRows && col <= hoverCols; return (
) : null}
); }