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}
);
}