{
  "name": "search-page",
  "title": "SearchPage",
  "description": "Dedicated search page with input and results grid.",
  "type": "component",
  "registryDependencies": [
    "product-grid",
    "cn"
  ],
  "files": [
    {
      "path": "search-page.tsx",
      "content": "\"use client\";\n\nimport React from \"react\";\nimport type { Product, Category, PropertyFacet } from \"@cimplify/sdk\";\nimport { useSearch } from \"@cimplify/sdk/react\";\nimport type { UseSearchOptions } from \"./hooks/use-search\";\nimport type { SearchLayoutProps } from \"./search-layouts/shared\";\nimport { DefaultSearchLayout } from \"./search-layouts/default-search-layout\";\nimport { CompactSearchLayout } from \"./search-layouts/compact-search-layout\";\nimport { cn } from \"@cimplify/sdk/react\";\n\nexport type { SearchLayoutProps };\n\nexport enum SearchTemplate {\n  Default = \"default\",\n  Compact = \"compact\",\n}\n\nexport interface SearchPageClassNames {\n  root?: string;\n}\n\nexport interface SearchPageProps {\n  /** Explicit search template. */\n  template?: SearchTemplate;\n  /** Layout map for overrides. AI or developer can provide custom layouts keyed by template name. */\n  layouts?: Partial<Record<SearchTemplate | string, React.ComponentType<SearchLayoutProps>>>;\n  /** Pre-fetched categories for filters. */\n  categories?: Category[];\n  /** Pre-fetched property facets for sidebar. */\n  facets?: PropertyFacet[];\n  /** Search options passed to useSearch. */\n  searchOptions?: UseSearchOptions;\n  /** Placeholder text for search input. */\n  placeholder?: string;\n  /** Custom card renderer. */\n  renderCard?: (product: Product) => React.ReactNode;\n  /** Custom image renderer. */\n  renderImage?: (props: { src: string; alt: string; className?: string }) => React.ReactNode;\n  /** Custom link renderer. */\n  renderLink?: (props: { href: string; className?: string; children: React.ReactNode }) => React.ReactElement;\n  /** Quick-add handler. */\n  onQuickAdd?: (product: Product) => void;\n  className?: string;\n  classNames?: SearchPageClassNames;\n}\n\nconst BUILT_IN_LAYOUTS: Record<string, React.ComponentType<SearchLayoutProps>> = {\n  [SearchTemplate.Default]: DefaultSearchLayout,\n  [SearchTemplate.Compact]: CompactSearchLayout,\n};\n\nexport function SearchPage({\n  template,\n  layouts,\n  categories,\n  facets,\n  searchOptions,\n  placeholder,\n  renderCard,\n  renderImage,\n  renderLink,\n  onQuickAdd,\n  className,\n  classNames,\n}: SearchPageProps): React.ReactElement {\n  const search = useSearch(searchOptions);\n\n  const key = template ?? SearchTemplate.Default;\n  const Layout = layouts?.[key] ?? BUILT_IN_LAYOUTS[key] ?? DefaultSearchLayout;\n\n  return (\n    <div data-cimplify-search-page className={cn(className, classNames?.root)}>\n      <Layout\n        search={search}\n        facets={facets}\n        categories={categories}\n        renderCard={renderCard}\n        renderImage={renderImage}\n        renderLink={renderLink}\n        onQuickAdd={onQuickAdd}\n        placeholder={placeholder}\n      />\n    </div>\n  );\n}\n"
    }
  ]
}
