From fda04a2389f4be84f87ca688f6416b3c8a00d2d3 Mon Sep 17 00:00:00 2001 From: bender Date: Fri, 17 Apr 2026 21:18:19 +0000 Subject: [PATCH] Switch to version 2: added registry/components/FeatureCardTwentyOne.json --- registry/components/FeatureCardTwentyOne.json | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 registry/components/FeatureCardTwentyOne.json diff --git a/registry/components/FeatureCardTwentyOne.json b/registry/components/FeatureCardTwentyOne.json new file mode 100644 index 0000000..93cc830 --- /dev/null +++ b/registry/components/FeatureCardTwentyOne.json @@ -0,0 +1,109 @@ +{ + "name": "FeatureCardTwentyOne", + "description": "Split layout with media on one side and TextBox with accordion items on the other.", + "details": "Use for feature sections that need expandable content areas. Layout: 50/50 split with image/video on one side and TextBox + accordion on the other. Media position configurable (left/right). First accordion item open by default. Accordion items have divider lines between them. Mobile: stacked vertically with centered text. Supports inverted backgrounds.", + "constraints": { + "textRules": { + "title": { + "required": true, + "example": "Custom designs", + "minChars": 2, + "maxChars": 60 + }, + "description": { + "required": true, + "example": "Explore our range of customizable solutions designed to meet your unique needs.", + "minChars": 10, + "maxChars": 300 + }, + "tag": { + "required": false, + "example": "Features", + "minChars": 2, + "maxChars": 30 + } + }, + "accordionRules": { + "id": { + "required": true, + "example": "1", + "note": "Unique identifier for each accordion item" + }, + "title": { + "required": true, + "example": "Inspiration + innovation", + "minChars": 2, + "maxChars": 60, + "note": "Accordion header text" + }, + "content": { + "required": true, + "example": "From custom colourways to bespoke elements built from the ground up.", + "minChars": 10, + "maxChars": 500, + "note": "Accordion expanded content (supports HTML)" + } + }, + "itemRules": { + "minItems": 2, + "maxItems": 6, + "recommendedItems": 3 + } + }, + "propsSchema": { + "title": "string", + "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title", + "description": "string", + "tag?": "string", + "tagIcon?": "LucideIcon", + "tagAnimation?": "'none' | 'opacity' | 'slide-up' | 'blur-reveal'", + "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>", + "buttonAnimation?": "'none' | 'opacity' | 'slide-up' | 'blur-reveal'", + "accordionItems": "Array<{ id: string, title: string, content: string }>", + "imageSrc?": "string (either imageSrc or videoSrc required)", + "imageAlt?": "string", + "videoSrc?": "string (either imageSrc or videoSrc required)", + "videoAriaLabel?": "string", + "mediaAnimation": "'none' | 'opacity' | 'slide-up' | 'blur-reveal'", + "useInvertedBackground": "boolean", + "mediaPosition?": "'left' | 'right' (default: 'left')", + "ariaLabel?": "string (default: 'Feature section')", + "className?": "string", + "containerClassName?": "string", + "mediaWrapperClassName?": "string", + "mediaClassName?": "string", + "contentClassName?": "string", + "textBoxClassName?": "string", + "titleClassName?": "string", + "descriptionClassName?": "string", + "tagClassName?": "string", + "buttonContainerClassName?": "string", + "buttonClassName?": "string", + "buttonTextClassName?": "string", + "titleImageWrapperClassName?": "string", + "titleImageClassName?": "string", + "accordionContainerClassName?": "string", + "accordionClassName?": "string", + "accordionTitleClassName?": "string", + "accordionContentClassName?": "string", + "accordionIconContainerClassName?": "string", + "accordionIconClassName?": "string" + }, + "usageExample": "", + "do": [ + "Use for feature showcases", + "Use for capability displays", + "Requires titleSegments?[]", + "Requires buttons?[]", + "Requires accordionItems[]" + ], + "dont": [ + "Do not use less than 2 items", + "Do not use more than 6 items" + ], + "editRules": { + "textOnly": true, + "layoutLocked": true, + "styleLocked": true + } +}