+
+
+
+
Nothing selected
+
+ Click any element on the canvas to edit it, or drag to select several.
+
+
+
+
+ ●
+ Record a gesture
+
+
+ R
+
+
+
+
+ ✦
+ Describe a change to the agent
+
+
+ ⌘K
+
+
+
+
+ );
+}
+
+function elementKindGlyph(element: DomEditSelection): { glyph: string; className: string } {
+ if (element.tagName === "video" || element.tagName === "audio" || element.tagName === "img") {
+ return { glyph: "◆", className: "bg-panel-media/10 text-panel-media" };
+ }
+ if (element.textFields?.length > 0) {
+ return { glyph: "T", className: "bg-panel-accent/10 text-panel-accent" };
+ }
+ return { glyph: "▦", className: "bg-panel-container/10 text-panel-container" };
+}
+
+function FlatMultiSelectState({
+ multiSelectCount,
+ multiSelectedElements = [],
+ onGroupSelection,
+ onHideAllSelected,
+ onClearSelection,
+}: {
+ multiSelectCount: number;
+ multiSelectedElements?: DomEditSelection[];
+ onGroupSelection?: () => void;
+ onHideAllSelected?: () => void;
+ onClearSelection?: () => void;
+}) {
+ return (
+
+
+
+
+
+
+
+ {multiSelectCount} elements selected
+
+
+ shift-click to add or remove
+
+
+
+
+
+ {multiSelectedElements.map((element) => {
+ const { glyph, className } = elementKindGlyph(element);
+ return (
+
+
+ {glyph}
+
+
+ {element.label}
+
+
+ {element.id ? `#${element.id}` : element.selector}
+
+
+ );
+ })}
+
+
+
+
+
+
+ Select a single element to edit its properties
+
+
+ );
+}
+
+export function PropertyPanelEmptyState({
+ multiSelectCount,
+ flat,
+ multiSelectedElements,
+ onGroupSelection,
+ onHideAllSelected,
+ onClearSelection,
+}: {
+ multiSelectCount: number;
+ flat?: boolean;
+ multiSelectedElements?: DomEditSelection[];
+ onGroupSelection?: () => void;
+ onHideAllSelected?: () => void;
+ onClearSelection?: () => void;
+}) {
+ if (flat) {
+ return multiSelectCount > 1 ? (
+
diff --git a/packages/studio/src/components/editor/propertyPanelTypes.ts b/packages/studio/src/components/editor/propertyPanelTypes.ts
index 48dfef8c5..833264e01 100644
--- a/packages/studio/src/components/editor/propertyPanelTypes.ts
+++ b/packages/studio/src/components/editor/propertyPanelTypes.ts
@@ -25,6 +25,9 @@ export interface PropertyPanelProps {
assets: string[];
element: DomEditSelection | null;
multiSelectCount?: number;
+ multiSelectedElements?: DomEditSelection[];
+ onGroupSelection?: () => void;
+ onHideAllSelected?: () => void;
copiedAgentPrompt: boolean;
onClearSelection: () => void;
onUngroup?: () => void;