+
-
+
Layers
-
- Canvas Nodes
-
+
+ Canvas hierarchy
+
-
+
0 ? "success" : "neutral"}>
+ {nodes.length}
+
-
-
-
-
-
+
+ {nodes.length === 0 ? (
+
+ ) : (
+
+ {[...nodes].reverse().map((node, reversedIndex) => {
+ const index = nodes.length - reversedIndex - 1;
+ const isSelected = selectedNodeIds.includes(node.id);
- {nodes.length === 0 ? (
-
- No layers yet. Add a rectangle or text node.
-
- ) : (
-
- {[...nodes].reverse().map((node, reverseIndex) => {
- const originalIndex = nodes.length - reverseIndex - 1;
- const isSelected = selectedNodeIds.includes(node.id);
+ return (
+
- )}
-
+
+ {isSelected ? "Selected" : `#${index + 1}`}
+
+
+ );
+ })}
+
+ )}
+
+
);
}
\ No newline at end of file
diff --git a/apps/web/src/features/canvas-studio/components/canvas-properties-panel.tsx b/apps/web/src/features/canvas-studio/components/canvas-properties-panel.tsx
index 8e64e20..d0c2648 100644
--- a/apps/web/src/features/canvas-studio/components/canvas-properties-panel.tsx
+++ b/apps/web/src/features/canvas-studio/components/canvas-properties-panel.tsx
@@ -1,5 +1,7 @@
"use client";
+import { RbcBadge } from "@/components/ui/rbc-badge";
+import { RbcButton } from "@/components/ui/rbc-button";
import { useCanvasStore } from "@/features/canvas-studio/store/canvas-store";
import type { CanvasNode } from "@/features/canvas-studio/types/canvas-node";
@@ -22,7 +24,7 @@ function NumberField({ id, label, value, min, onChange }: NumberFieldProps) {
@@ -32,7 +34,7 @@ function NumberField({ id, label, value, min, onChange }: NumberFieldProps) {
min={min}
value={Math.round(value)}
onChange={(event) => onChange(toNumber(event.currentTarget.value))}
- className="mt-1 h-10 w-full rounded-xl border border-slate-200 bg-slate-50 px-3 text-sm text-slate-950 outline-none focus:bg-white focus:ring-2 focus:ring-slate-300 dark:border-slate-800 dark:bg-slate-900 dark:text-white dark:focus:ring-slate-700"
+ className="mt-1 h-10 w-full rounded-xl border border-slate-200 bg-slate-50 px-3 text-sm font-semibold text-slate-950 outline-none transition focus:border-indigo-300 focus:bg-white focus:ring-4 focus:ring-indigo-500/10 dark:border-slate-800 dark:bg-slate-900 dark:text-white"
/>
);
@@ -80,9 +82,9 @@ function CanvasPropertiesFields({ node }: CanvasPropertiesFieldsProps) {
/>
-
- Group contains {node.childNodeIds.length} child nodes. Group movement
- and ungroup will be added in upcoming issues.
+
+ Group contains {node.childNodeIds.length} child
+ nodes. Moving or resizing this group updates child nodes together.
);
@@ -125,7 +127,7 @@ function CanvasPropertiesFields({ node }: CanvasPropertiesFieldsProps) {
+
+ ⚙
+
+
+
+ Nothing selected
+
+
+
+ Select a layer or canvas object to edit size, position, color, text, or
+ group behavior.
+
+
+
+
+ Add Node
+
+ applyTemplate("hero")}>
+ Use Template
+
+
+
+ );
+}
+
export function CanvasPropertiesPanel() {
const nodes = useCanvasStore((state) => state.nodes);
const selectedNodeIds = useCanvasStore((state) => state.selectedNodeIds);
@@ -191,19 +224,22 @@ export function CanvasPropertiesPanel() {
return (