{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "snapp-catalogue-hero", "title": "Snapp Catalogue Hero", "description": "Shared responsive catalogue hero with title, supporting copy, search form, and entry-card region.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "@snapp/snapp-theme", "@snapp/snapp-utils" ], "files": [ { "path": "registry/radix-nova/components/catalogue/catalogue-hero.tsx", "content": "import type * as React from \"react\"\nimport { useState } from \"react\"\nimport { Search } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface CatalogueHeroProps\n extends Omit, \"children\" | \"title\"> {\n children: React.ReactNode\n description: React.ReactNode\n onSearch: (query: string) => void\n searchLabel: string\n searchPlaceholder: string\n title: React.ReactNode\n}\n\nfunction CatalogueHero({\n children,\n className,\n description,\n onSearch,\n searchLabel,\n searchPlaceholder,\n title,\n ...props\n}: CatalogueHeroProps) {\n const [query, setQuery] = useState(\"\")\n\n function submitSearch(event: React.FormEvent) {\n event.preventDefault()\n const trimmedQuery = query.trim()\n if (trimmedQuery) onSearch(trimmedQuery)\n }\n\n return (\n \n
\n
\n
\n

\n {title}\n

\n

\n {description}\n

\n
\n \n setQuery(event.target.value)}\n />\n \n \n \n \n
\n \n {children}\n
\n \n \n )\n}\n\nexport { CatalogueHero }\nexport type { CatalogueHeroProps }\n", "type": "registry:component", "target": "@components/snapp/catalogue/catalogue-hero.tsx" } ], "type": "registry:component" }