diff --git a/packages/studio/src/components/sidebar/BlocksTab.tsx b/packages/studio/src/components/sidebar/BlocksTab.tsx index d85d465cf..e16766305 100644 --- a/packages/studio/src/components/sidebar/BlocksTab.tsx +++ b/packages/studio/src/components/sidebar/BlocksTab.tsx @@ -15,11 +15,12 @@ export interface BlockPreviewInfo { } interface BlocksTabProps { + onAddBlock?: (blockName: string) => void; onPreviewBlock?: (preview: BlockPreviewInfo | null) => void; } // fallow-ignore-next-line complexity -export const BlocksTab = memo(function BlocksTab({ onPreviewBlock }: BlocksTabProps) { +export const BlocksTab = memo(function BlocksTab({ onAddBlock, onPreviewBlock }: BlocksTabProps) { const { loading, error, search, setSearch, category, setCategory, filteredBlocks } = useBlockCatalog(); @@ -117,6 +118,11 @@ export const BlocksTab = memo(function BlocksTab({ onPreviewBlock }: BlocksTabPr posterUrl={block.preview?.poster} videoUrl={block.preview?.video} onPreview={onPreviewBlock} + onAdd={ + block.type === "hyperframes:component" + ? () => onAddBlock?.(block.name) + : undefined + } /> ); })} @@ -280,9 +286,11 @@ function BlockCard({ tags?: string[]; posterUrl?: string; videoUrl?: string; + onAdd?: () => void; onPreview?: (preview: BlockPreviewInfo | null) => void; }) { const [hovered, setHovered] = useState(false); + const [adding, setAdding] = useState(false); const [copied, setCopied] = useState(false); const hoverTimer = useRef | null>(null); const colors = getCategoryColors(category); @@ -310,6 +318,17 @@ function BlockCard({ }; }, []); + const handleAdd = useCallback( + (e: React.MouseEvent) => { + e.stopPropagation(); + if (adding || !onAdd) return; + setAdding(true); + onAdd(); + setTimeout(() => setAdding(false), 1000); + }, + [adding], + ); + const { activeCompPath, compositionDimensions } = useStudioContext(); const handleCopyPrompt = useCallback( @@ -372,28 +391,46 @@ function BlockCard({ )} - {/* Ask agent overlay */} - + + {/* Badges */}
diff --git a/packages/studio/src/components/sidebar/LeftSidebar.tsx b/packages/studio/src/components/sidebar/LeftSidebar.tsx index 634fe6e1f..dcadab0b0 100644 --- a/packages/studio/src/components/sidebar/LeftSidebar.tsx +++ b/packages/studio/src/components/sidebar/LeftSidebar.tsx @@ -84,6 +84,7 @@ export const LeftSidebar = memo( onLint, linting, onToggleCollapse, + onAddBlock, onPreviewBlock, takeoverContent, }, @@ -246,7 +247,7 @@ export const LeftSidebar = memo( )} {STUDIO_BLOCKS_PANEL_ENABLED && tab === "blocks" && ( - + )} {/* Lint button pinned at the bottom */}