{ "layout": "'page' | 'section'", "products": "CatalogProduct[]", "searchValue?": "string (default: '')", "onSearchChange?": "(value: string) => void", "searchPlaceholder?": "string (default: 'Search products...')", "filters?": "Array<{ label: string; options: string[]; selected: string; onChange: (value: string) => void }>", "emptyMessage?": "string (default: 'No products found')", "className?": "string", "gridClassName?": "string", "cardClassName?": "string", "imageClassName?": "string", "searchClassName?": "string", "filterClassName?": "string", "toolbarClassName?": "string" }