Files
2026-02-09 17:11:37 +00:00

70 lines
2.4 KiB
JSON

{
"name": "ContactFaq",
"description": "Split-panel contact section with CTA card on left and FAQ accordions on right.",
"constraints": {
"textRules": {
"ctaTitle": {
"required": true,
"example": "Book an intro call",
"minChars": 2,
"maxChars": 50
},
"ctaDescription": {
"required": true,
"example": "Let's get started with a brief intro call.",
"minChars": 5,
"maxChars": 100
}
},
"faqRules": {
"id": {
"required": true,
"example": "1",
"minChars": 1,
"maxChars": 20
},
"title": {
"required": true,
"example": "What's included in the subscription?",
"minChars": 5,
"maxChars": 100
},
"content": {
"required": true,
"example": "Your subscription covers end-to-end digital design services...",
"minChars": 10,
"maxChars": 500,
"note": "Supports HTML content"
}
}
},
"propsSchema": {
"faqs": "Array<{ id: string, title: string, content: string }>",
"ctaTitle": "string",
"ctaDescription": "string",
"ctaButton": "{text: string, onClick?: () => void, href?: string}",
"ctaIcon": "LucideIcon (required)",
"useInvertedBackground": "'noInvert' | 'invertDefault'",
"animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect on panels)",
"accordionAnimationType?": "'smooth' | 'instant' (default: 'smooth')",
"showCard?": "boolean (default: true - controls accordion card styling)",
"ariaLabel?": "string (default: 'Contact and FAQ section')",
"className?": "string"
},
"usageExample": "<ContactFaq faqs={[{ id: '1', title: \"What's included?\", content: 'Your subscription covers...' }]} ctaTitle=\"Book an intro call\" ctaDescription=\"Let's get started with a brief intro call.\" ctaButton={{ text: 'Book a Free Call', href: '#contact' }} ctaIcon={Phone} useInvertedBackground=\"noInvert\" animationType=\"slide-up\" />",
"do": [
"Use for contact pages",
"Use for lead generation",
"Use for help pages",
"Use for support sections",
"Requires faqs[]"
],
"dont": [
"Do not use more than 4 items"
],
"editRules": {
"textOnly": true,
"layoutLocked": true,
"styleLocked": true
}
}