summaryrefslogtreecommitdiff
path: root/apps/web/src/components/editor/properties-panel
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2025-08-02 12:21:24 +0200
committerMaze Winther <mazewinther@gmail.com>2025-08-02 12:21:24 +0200
commit7891ed2cc1487270a847081c4ad93be1900adc8e (patch)
treeef7b12d568c85183acb2b8a1346b331f653c6e38 /apps/web/src/components/editor/properties-panel
parentdd09bf2949b63d17b3e7311a688d7d84c5d6dc52 (diff)
downloadopencut-7891ed2cc1487270a847081c4ad93be1900adc8e.tar.gz
feat: make settings items expandable
Diffstat (limited to 'apps/web/src/components/editor/properties-panel')
-rw-r--r--apps/web/src/components/editor/properties-panel/property-item.tsx33
1 files changed, 33 insertions, 0 deletions
diff --git a/apps/web/src/components/editor/properties-panel/property-item.tsx b/apps/web/src/components/editor/properties-panel/property-item.tsx
index 86a8d378..dc6b6d74 100644
--- a/apps/web/src/components/editor/properties-panel/property-item.tsx
+++ b/apps/web/src/components/editor/properties-panel/property-item.tsx
@@ -1,4 +1,6 @@
import { cn } from "@/lib/utils";
+import { ChevronDown } from "lucide-react";
+import { useState } from "react";
interface PropertyItemProps {
direction?: "row" | "column";
@@ -49,3 +51,34 @@ export function PropertyItemValue({
}) {
return <div className={cn("flex-1 text-sm", className)}>{children}</div>;
}
+
+interface PropertyGroupProps {
+ title: string;
+ children: React.ReactNode;
+ defaultExpanded?: boolean;
+ className?: string;
+}
+
+export function PropertyGroup({
+ title,
+ children,
+ defaultExpanded = true,
+ className,
+}: PropertyGroupProps) {
+ const [isExpanded, setIsExpanded] = useState(defaultExpanded);
+
+ return (
+ <PropertyItem direction="column" className={cn("gap-3", className)}>
+ <div
+ className="flex items-center gap-1.5 cursor-pointer"
+ onClick={() => setIsExpanded(!isExpanded)}
+ >
+ <PropertyItemLabel className="cursor-pointer">
+ {title}
+ </PropertyItemLabel>
+ <ChevronDown className={cn("size-3", !isExpanded && "-rotate-90")} />
+ </div>
+ {isExpanded && <PropertyItemValue>{children}</PropertyItemValue>}
+ </PropertyItem>
+ );
+}