From 117a0b3085437348eae149e6786efc483562253d Mon Sep 17 00:00:00 2001 From: Oliver Bryan Date: Sun, 25 Jan 2026 09:28:46 +0000 Subject: [PATCH] sidebar controls (shape selection and roundness slider) --- src/Index.tsx | 33 ++++++++++++++++++++-- src/components/controls/PresetSelector.tsx | 31 ++++++++++++++++++++ src/components/ui/button.tsx | 2 +- 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/components/controls/PresetSelector.tsx diff --git a/src/Index.tsx b/src/Index.tsx index 34b515e..56f52ad 100644 --- a/src/Index.tsx +++ b/src/Index.tsx @@ -1,7 +1,10 @@ -import { useEffect, useState } from "react"; import ShapeCanvas from "@/components/canvas/ShapeCanvas"; +import PresetSelector from "@/components/controls/PresetSelector"; +import { Slider } from "@/components/ui/slider"; import { useShapeState } from "@/hooks/useShapeState"; +import { useEffect, useState } from "react"; import Layout from "./Layout"; +import { cn } from "./lib/utils"; function Index() { const [dimensions, setDimensions] = useState({ @@ -26,8 +29,34 @@ function Index() { const [state, setState] = useShapeState(centerX, centerY); + const sidebarContent = ( +
+
+ Shape + setState({ ...state, preset })} /> +
+
+ + Roundness + + setState({ ...state, roundness: v })} + className={state.preset === "circle" ? "opacity-50 pointer-events-none" : ""} + /> +
+
+ ); + return ( - controls here}> + ); diff --git a/src/components/controls/PresetSelector.tsx b/src/components/controls/PresetSelector.tsx new file mode 100644 index 0000000..eb5f689 --- /dev/null +++ b/src/components/controls/PresetSelector.tsx @@ -0,0 +1,31 @@ +import { Button } from "@/components/ui/button"; +import type { Preset } from "@/types/shape"; + +const presets: { value: Preset; label: string }[] = [ + { value: "triangle", label: "Triangle" }, + { value: "square", label: "Square" }, + { value: "circle", label: "Circle" }, +]; + +export default function PresetSelector({ + value, + onChange, +}: { + value: Preset; + onChange: (preset: Preset) => void; +}) { + return ( +
+ {presets.map((preset) => ( + + ))} +
+ ); +} diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index 846eda8..a881f32 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -9,7 +9,7 @@ const buttonVariants = cva( { variants: { variant: { - default: "bg-primary text-primary-foreground hover:bg-primary/90", + default: "bg-primary text-primary-foreground hover:bg-primary/90 border border-primary", destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", outline: