{"success":true,"data":{"block":{"id":"testimonials-grid-add-review","name":"Testimonials Grid with Add Review Card","title":"Testimonials Grid Add Review","category":"Testimonials","categorySlug":"testimonials","description":"A testimonial grid featuring customer reviews alongside an 'Add Review' card with dashed border and plus icon. Each review card displays star ratings, quote, and author info. The add review card encourages user engagement. Perfect for product pages and community-driven platforms.","thumbnail":{"desktop":"https://cdn.ing/assets/i/r/293667/f0pikmeb9eezcv6xm28kj6xyx1qu/cleanshot-2026-03-10-at-10-45-31-2x.png","mobile":"https://cdn.ing/assets/i/r/293666/l0asv65qty0ljm8fzuejrz9h9q07/cleanshot-2026-03-10-at-10-45-47-2x.png"},"componentPath":"blocks/testimonials/testimonials-grid-add-review.tsx","code":"import { TestimonialsGridAddReview } from \"@opensite/ui/blocks/testimonials/testimonials-grid-add-review\";\n\nexport default function Demo() {\n  return (\n    <TestimonialsGridAddReview\n      heading=\"Customer Reviews\"\n      description=\"Join thousands of satisfied customers sharing their experiences\"\n      addReviewText=\"Write a Review\"\n      addReviewSubtext=\"Share your experience with us\"\n      reviews={[\n        {\n          rating: 5,\n          quote:\n            \"Exceptional quality and service. The product arrived exactly as described and exceeded my expectations. Would definitely recommend to anyone looking for reliability.\",\n          author: \"Michael Torres\",\n          avatarSrc: \"https://toastability-production.s3.amazonaws.com/s4vho0wfbjhf758oife8qfuekou8\",\n        },\n        {\n          rating: 5,\n          quote:\n            \"Best purchase I've made this year. The attention to detail and customer support are unmatched. Worth every penny.\",\n          author: \"Sarah Mitchell\",\n          avatarSrc: \"https://toastability-production.s3.amazonaws.com/vvkma6b8whdkiq5nq8z4eyfe00vo\",\n        },\n        {\n          rating: 4,\n          quote:\n            \"Great product overall. Installation was straightforward and it works as advertised. Only minor issue was shipping took longer than expected.\",\n          author: \"James Wilson\",\n          avatarSrc: \"https://toastability-production.s3.amazonaws.com/e83zsyvl0an0owzdmpwjnnty641x\",\n        },\n        {\n          rating: 5,\n          quote:\n            \"I've tried several similar products, and this one stands out for its quality and durability. Customer service was also very responsive.\",\n          author: \"Emily Chen\",\n          avatarSrc: \"https://toastability-production.s3.amazonaws.com/0g6t701zqr2r7najmdgftpeqnxmz\",\n        },\n        {\n          rating: 5,\n          quote:\n            \"Absolutely love it! The design is sleek and modern, and it fits perfectly with my setup. Highly recommended for anyone hesitating.\",\n          author: \"Robert Anderson\",\n          avatarSrc: \"https://toastability-production.s3.amazonaws.com/yw5f7iwyypf4kctpr5ye5e495swt\",\n        },\n      ]}\n      actions={[\n        {\n          label: \"Read All Reviews\",\n          href: \"#\",\n          variant: \"default\",\n          size: \"lg\",\n        },\n      ]}\n      onAddReview={() => console.log(\"Open review form\")}\n      background=\"dark\"\n      pattern=\"diagonalCrossFadeTop\"\n      patternOpacity={0.15}\n      spacing=\"lg\"\n    />\n  );\n}","propsSchema":{"reviews":{"type":"array","description":"Array of reviews to display","items":{"type":"object","description":"","fields":{"quote":{"type":"object","description":"Testimonial quote text","typeLabel":"ReactNode","required":true},"author":{"type":"object","description":"Author name","typeLabel":"ReactNode","required":false},"role":{"type":"object","description":"Author role/title","typeLabel":"ReactNode","required":false},"company":{"type":"object","description":"Author company","typeLabel":"ReactNode","required":false},"avatarSrc":{"type":"string","description":"Author avatar image URL","required":false},"avatar":{"type":"object","description":"Author avatar configuration (alternative to avatarSrc)","fields":{"src":{"type":"string","description":"","required":true},"alt":{"type":"string","description":"","required":false},"fallback":{"type":"string","description":"","required":false}},"typeLabel":"{ src: string; alt?: string; fallback?: string; }","required":false},"logoSrc":{"type":"string","description":"Company logo URL","required":false},"rating":{"type":"number","description":"Star rating (1-5)","required":false},"className":{"type":"string","description":"Additional CSS classes","required":false},"linkConfig":{"type":"object","description":"Review linking config","fields":{"label":{"type":"object","description":"","typeLabel":"React__default.ReactNode","required":true},"href":{"type":"string","description":"","required":true},"className":{"type":"string","description":"","required":false}},"typeLabel":"{ label: React__default.ReactNode; href: string; className?: string; }","required":false}},"typeLabel":"TestimonialItem"},"typeLabel":"TestimonialItem[]","required":true,"minItems":3,"maxItems":8,"mediaHints":{"path":"reviews[].avatarSrc","roles":["profile","avatar"],"disallowedRoles":["logo","favicon","video-thumbnail"],"minPixelClass":"small","required":false,"preferredAspect":"1:1","note":"Reviewer avatar. IMAGE MEDIA ONLY. Do not use logos, favicons, or video assets."}},"reviewsSlot":{"type":"object","description":"Custom slot for rendering reviews (overrides reviews array)","typeLabel":"React.ReactNode","required":false},"heading":{"type":"object","description":"Main heading content","typeLabel":"React.ReactNode","required":false},"description":{"type":"object","description":"Description text below heading","typeLabel":"React.ReactNode","required":false},"addReviewText":{"type":"object","description":"Text for the add review button","typeLabel":"React.ReactNode","required":false},"addReviewSubtext":{"type":"object","description":"Subtitle for the add review card","typeLabel":"React.ReactNode","required":false},"onAddReview":{"type":"object","description":"Callback when add review is clicked","typeLabel":"() => void","required":false},"className":{"type":"string","description":"Additional CSS classes for the section wrapper","required":false},"headerClassName":{"type":"string","description":"Additional CSS classes for the header container","required":false},"headingClassName":{"type":"string","description":"Additional CSS classes for the heading","required":false},"descriptionClassName":{"type":"string","description":"Additional CSS classes for the description","required":false},"gridClassName":{"type":"string","description":"Additional CSS classes for the grid container","required":false},"cardClassName":{"type":"string","description":"Additional CSS classes for each card","required":false},"addReviewCardClassName":{"type":"string","description":"Additional CSS classes for the add review card","required":false},"authorClassName":{"type":"string","description":"Additional CSS classes for the author section","required":false},"background":{"type":"string","description":"Background style for the section","typeLabel":"SectionBackground","required":false},"spacing":{"type":"object","description":"Vertical spacing for the section","fields":{},"typeLabel":"SectionSpacing","required":false},"pattern":{"type":"object","description":"Optional background pattern name or URL","fields":{},"typeLabel":"PatternName","required":false},"patternOpacity":{"type":"number","description":"Pattern overlay opacity (0-1)","required":false},"containerClassName":{"type":"string","description":"Additional CSS classes for the container","required":false},"actions":{"type":"array","description":"Array of action configurations for CTA buttons","items":{"type":"object","description":"","fields":{"variant":{"type":"string","description":"","typeLabel":"\"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\"","required":false},"size":{"type":"string","description":"","typeLabel":"\"default\" | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\" | \"icon-lg\"","required":false},"label":{"type":"object","description":"Button/link label text or ReactNode","typeLabel":"ReactNode","required":false},"icon":{"type":"object","description":"Icon to display (typically before label)","typeLabel":"ReactNode","required":false},"iconAfter":{"type":"object","description":"Icon to display after the label","typeLabel":"ReactNode","required":false},"href":{"type":"string","description":"URL for link behavior","required":false},"onClick":{"type":"object","description":"Click handler for button behavior","typeLabel":"MouseEventHandler","required":false},"className":{"type":"string","description":"Additional CSS classes for the action","required":false},"children":{"type":"object","description":"Custom children (overrides label + icon rendering)","typeLabel":"ReactNode","required":false},"aria-label":{"type":"string","description":"ARIA label for accessibility","required":false},"asButton":{"type":"boolean","description":"Render as a button element instead of an anchor/link","required":false}},"typeLabel":"ActionConfig"},"typeLabel":"ActionConfig[]","required":false},"actionsSlot":{"type":"object","description":"Custom slot for rendering actions (overrides actions array)","typeLabel":"React.ReactNode","required":false},"actionsClassName":{"type":"string","description":"Additional CSS classes for the actions container","required":false},"quoteClassName":{"type":"string","description":"Additional CSS classes for the quote text","required":false},"sectionId":{"type":"string","description":"Optional Section ID","required":false},"reviews[].quote":{"type":"object","description":"","required":true,"maxLength":300},"reviews[].rating":{"type":"object","description":""}},"exampleProps":{"heading":"What Our Customers Think","description":"Join thousands of satisfied customers who have transformed their workflows.","addReviewText":"Share Your Experience","addReviewSubtext":"Your feedback helps others make better decisions.","reviews":[{"quote":"Exceptional value and outstanding support. We saw results within days.","author":"James Liu","role":"Product Manager","company":"ScaleUp","avatarSrc":"https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp","rating":5},{"quote":"The ease of integration saved us weeks of engineering time.","author":"Rachel Torres","role":"CTO","company":"DevForge","avatarSrc":"https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp","rating":5},{"quote":"Best decision we made this year. The entire team loves it.","author":"Naomi Brooks","role":"Head of Operations","company":"OpsFirst","avatarSrc":"https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp","rating":5}]},"dependencies":["@opensite/ui"],"tags":["testimonials","grid","add-review","interactive","ratings","stars","user-generated","engagement"],"performance":{},"importantUsageNotes":"Testimonials must come from real, sourced reviews or testimonials. Do not fabricate quotes, names, or company affiliations. This block includes a call-to-action card prompting users to add a review — ensure addReviewText and the CTA action link to a real review submission page, not a placeholder.","usageRequirements":{"requiredProps":["reviews"],"propConstraints":{"reviews":{"required":true,"minItems":3,"maxItems":8},"reviews[].quote":{"required":true,"maxLength":300},"reviews[].rating":{"note":"Integer 1–5 if provided."}},"mediaSlots":{"reviews[].avatarSrc":{"path":"reviews[].avatarSrc","roles":["profile","avatar"],"disallowedRoles":["logo","favicon","video-thumbnail"],"minPixelClass":"small","required":false,"preferredAspect":"1:1","note":"Reviewer avatar. IMAGE MEDIA ONLY. Do not use logos, favicons, or video assets."}},"requiresSiteCapabilities":["reviews_or_testimonials"],"notes":["All media src values must be absolute URLs to real assets; relative paths and placeholder media variables are not allowed."]}}},"timestamp":"2026-06-27T20:16:39.936Z"}