diff --git a/.project_index.json b/.project_index.json
index 7f36d33..04e02b6 100644
--- a/.project_index.json
+++ b/.project_index.json
@@ -569,12 +569,12 @@
"role": "ui",
"tags": [],
"used_in": [
- "src/components/navbar/NavbarLayoutFloatingInline.tsx",
- "src/components/navbar/NavbarStyleApple/NavbarStyleApple.tsx",
- "src/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen.tsx",
"src/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay.tsx",
+ "src/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen.tsx",
"src/components/navbar/NavbarStyleCentered/NavbarStyleCentered.tsx",
- "src/components/navbar/NavbarStyleMinimal.tsx"
+ "src/components/navbar/NavbarStyleMinimal.tsx",
+ "src/components/navbar/NavbarStyleApple/NavbarStyleApple.tsx",
+ "src/components/navbar/NavbarLayoutFloatingInline.tsx"
],
"can_modify_directly": true,
"can_delete": true,
@@ -610,8 +610,8 @@
"button"
],
"used_in": [
- "src/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen.tsx",
- "src/components/navbar/NavbarStyleCentered/NavbarStyleCentered.tsx"
+ "src/components/navbar/NavbarStyleCentered/NavbarStyleCentered.tsx",
+ "src/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen.tsx"
],
"can_modify_directly": true,
"can_delete": true,
@@ -2694,9 +2694,9 @@
"role": "ui",
"tags": [],
"used_in": [
- "src/components/button/ButtonTextShift/ButtonTextShift.tsx",
"src/components/button/ButtonBounceEffect/ButtonBounceEffect.tsx",
"src/components/button/ButtonShiftHover/ButtonShiftHover.tsx",
+ "src/components/button/ButtonTextShift/ButtonTextShift.tsx",
"src/components/button/ButtonTextStagger/ButtonTextStagger.tsx"
],
"can_modify_directly": true,
@@ -2748,17 +2748,17 @@
"button"
],
"used_in": [
- "src/components/button/ButtonShiftHover/ButtonShiftHover.tsx",
- "src/components/button/ButtonBounceEffect/ButtonBounceEffect.tsx",
- "src/components/button/ButtonHoverBubble.tsx",
- "src/components/button/ButtonExpandHover.tsx",
- "src/components/button/ButtonTextStagger/ButtonTextStagger.tsx",
- "src/components/button/ButtonHoverMagnetic/ButtonHoverMagnetic.tsx",
- "src/components/button/ButtonIconArrow.tsx",
- "src/components/button/ButtonTextUnderline.tsx",
"src/components/button/ButtonDirectionalHover/ButtonDirectionalHover.tsx",
+ "src/components/button/ButtonShiftHover/ButtonShiftHover.tsx",
+ "src/components/button/ButtonIconArrow.tsx",
+ "src/components/button/ButtonHoverMagnetic/ButtonHoverMagnetic.tsx",
"src/components/button/ButtonTextShift/ButtonTextShift.tsx",
- "src/components/button/ButtonElasticEffect/ButtonElasticEffect.tsx"
+ "src/components/button/ButtonExpandHover.tsx",
+ "src/components/button/ButtonTextUnderline.tsx",
+ "src/components/button/ButtonTextStagger/ButtonTextStagger.tsx",
+ "src/components/button/ButtonElasticEffect/ButtonElasticEffect.tsx",
+ "src/components/button/ButtonHoverBubble.tsx",
+ "src/components/button/ButtonBounceEffect/ButtonBounceEffect.tsx"
],
"can_modify_directly": true,
"can_delete": true,
@@ -2815,10 +2815,10 @@
"button"
],
"used_in": [
- "src/components/navbar/NavbarLayoutFloatingInline.tsx",
"src/components/Textbox.tsx",
- "src/components/navbar/NavbarStyleMinimal.tsx",
- "src/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay.tsx"
+ "src/components/navbar/NavbarLayoutFloatingInline.tsx",
+ "src/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay.tsx",
+ "src/components/navbar/NavbarStyleMinimal.tsx"
],
"can_modify_directly": true,
"can_delete": true,
@@ -3143,14 +3143,14 @@
"product"
],
"used_in": [
+ "src/components/cardStack/layouts/timelines/TimelineBase.tsx",
+ "src/components/cardStack/layouts/carousels/FullWidthCarousel.tsx",
"src/components/cardStack/layouts/timelines/TimelineCardStack.tsx",
+ "src/components/cardStack/layouts/timelines/TimelinePhoneView.tsx",
"src/components/cardStack/layouts/carousels/ButtonCarousel.tsx",
"src/components/cardStack/layouts/grid/GridLayout.tsx",
- "src/components/cardStack/layouts/carousels/FullWidthCarousel.tsx",
- "src/components/cardStack/layouts/timelines/TimelineBase.tsx",
- "src/components/cardStack/layouts/timelines/TimelinePhoneView.tsx",
- "src/components/cardStack/layouts/timelines/TimelineProcessFlow.tsx",
"src/components/cardStack/layouts/carousels/AutoCarousel.tsx",
+ "src/components/cardStack/layouts/timelines/TimelineProcessFlow.tsx",
"src/components/cardStack/layouts/timelines/TimelineHorizontalCardStack.tsx"
],
"can_modify_directly": true,
@@ -3168,11 +3168,11 @@
"role": "ui",
"tags": [],
"used_in": [
- "src/components/cardStack/layouts/carousels/ButtonCarousel.tsx",
- "src/components/cardStack/layouts/grid/GridLayout.tsx",
"src/components/cardStack/layouts/carousels/FullWidthCarousel.tsx",
- "src/components/cardStack/layouts/carousels/AutoCarousel.tsx",
- "src/components/cardStack/CardStack.tsx"
+ "src/components/cardStack/layouts/carousels/ButtonCarousel.tsx",
+ "src/components/cardStack/CardStack.tsx",
+ "src/components/cardStack/layouts/grid/GridLayout.tsx",
+ "src/components/cardStack/layouts/carousels/AutoCarousel.tsx"
],
"can_modify_directly": true,
"can_delete": true,
@@ -3389,11 +3389,11 @@
"product"
],
"used_in": [
+ "src/components/cardStack/layouts/timelines/TimelineBase.tsx",
"src/components/cardStack/layouts/carousels/ButtonCarousel.tsx",
"src/components/cardStack/layouts/grid/GridLayout.tsx",
- "src/components/cardStack/layouts/timelines/TimelineBase.tsx",
- "src/components/cardStack/layouts/timelines/TimelineProcessFlow.tsx",
- "src/components/cardStack/layouts/carousels/AutoCarousel.tsx"
+ "src/components/cardStack/layouts/carousels/AutoCarousel.tsx",
+ "src/components/cardStack/layouts/timelines/TimelineProcessFlow.tsx"
],
"can_modify_directly": true,
"can_delete": true,
diff --git a/registry/README.md b/registry/README.md
deleted file mode 100644
index c85f065..0000000
--- a/registry/README.md
+++ /dev/null
@@ -1,84 +0,0 @@
-# LLM-Friendly Registry Structure
-
-Эта структура реорганизует `registry.json` для более эффективной работы с LLM, уменьшая галлюцинации и улучшая выбор компонентов.
-
-## Структура
-
-```
-registry/
-├── index.json ← КАТАЛОГ (LLM всегда видит)
-├── intents.json ← ПОЧЕМУ / КОГДА (WHY / WHEN)
-├── components/
-│ ├── FeatureCardSeven.json
-│ ├── FeatureCardEight.json
-│ └── ...
-└── schemas/
- ├── FeatureCardSeven.schema.json
- └── ...
-```
-
-## Файлы
-
-### `index.json` - Легковесный каталог
-
-Содержит минимальную информацию для выбора компонента:
-- `category` - категория компонента
-- `intent` - назначение компонента (почему/когда использовать)
-- `bestFor` - лучшие случаи использования
-- `avoidWhen` - когда НЕ использовать
-- `requires` - обязательные требования (например, `features[]`)
-- `import` - путь импорта
-
-**LLM всегда видит этот файл** для выбора компонента.
-
-### `intents.json` - Маппинг интентов
-
-Связывает интенты с компонентами:
-```json
-{
- "sequential process": ["FeatureCardSeven", "FeatureProcessSteps"],
- "horizontal timeline": ["FeatureCardEight", "TimelineHorizontalCardStack"],
- "hero with media": ["HeroBillboard"]
-}
-```
-
-Помогает LLM выбирать компоненты по смыслу, а не угадывать.
-
-### `components/*.json` - Детальная информация
-
-Загружается **ТОЛЬКО после выбора компонента**:
-- `name` - имя компонента
-- `description` - описание
-- `constraints` - ограничения и правила
-- `propsSchema` - упрощённая схема пропсов (без className)
-- `usageExample` - пример использования
-- `do` - что делать
-- `dont` - чего не делать
-- `editRules` - правила редактирования
-
-### `schemas/*.schema.json` - Полные схемы
-
-Полные схемы пропсов (включая все className) для генерации кода.
-
-## Использование
-
-### Для LLM
-
-1. **Выбор компонента**: Используй `index.json` + `intents.json`
-2. **Детали компонента**: Загрузи `components/{ComponentName}.json` после выбора
-3. **Генерация кода**: Используй `schemas/{ComponentName}.schema.json` для полной схемы пропсов
-
-### Преимущества
-
-- ✅ Уменьшение токенов в 3-5 раз
-- ✅ Снижение галлюцинаций
-- ✅ Предсказуемые правки
-- ✅ Масштабируемость для разных моделей
-
-## Обновление
-
-Для обновления структуры после изменений в `registry.json`:
-
-```bash
-node transform-registry.js
-```
diff --git a/registry/components/AboutMetric.json b/registry/components/AboutMetric.json
deleted file mode 100644
index e5e7a4e..0000000
--- a/registry/components/AboutMetric.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
- "name": "AboutMetric",
- "description": "About section with centered animated title and metric cards in a responsive grid.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "At Berco Inc. we redefine innovation by empowering businesses to reach their full potential",
- "minChars": 20,
- "maxChars": 300
- }
- },
- "metricRules": {
- "minMetrics": 2,
- "maxMetrics": 4,
- "structure": {
- "icon": "LucideIcon - Icon component from lucide-react (required)",
- "label": "string - Descriptive label for the metric (required, e.g., 'Conversions', 'Partnered Brands')",
- "value": "string - Metric value to display (required, e.g., '7,000+', '2018', '30+', '100M+')"
- },
- "note": "Provide 2-4 metrics for optimal layout. Grid automatically adjusts columns based on metric count (2 metrics = 2 cols, 3 metrics = 3 cols, 4 metrics = 4 cols). Import icons from lucide-react."
- }
- },
- "propsSchema": {
- "title": "string",
- "metrics": "Array<{ icon: LucideIcon, label: string, value: string }>",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'About metrics section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\nimport { TrendingUp, ShoppingCart, Users, Globe } from 'lucide-react';\n\n\n \n",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for about pages",
- "Use for company information",
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/AnimatedAuroraBackground.json b/registry/components/AnimatedAuroraBackground.json
deleted file mode 100644
index c014a17..0000000
--- a/registry/components/AnimatedAuroraBackground.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "AnimatedAuroraBackground",
- "description": "Aurora borealis effect with animated repeating gradients and mix-blend-difference.",
- "constraints": {},
- "propsSchema": {
- "className?": "string",
- "showRadialGradient?": "boolean (default: true)",
- "invertColors": "boolean (REQUIRED - true for light backgrounds, false for dark backgrounds)"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/AnimatedGridBackground.json b/registry/components/AnimatedGridBackground.json
deleted file mode 100644
index 3048590..0000000
--- a/registry/components/AnimatedGridBackground.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "AnimatedGridBackground",
- "description": "Grid pattern with animated pulsing squares using Framer Motion and optional 3D perspective.",
- "constraints": {},
- "propsSchema": {
- "squareSize?": "number (default: 100)",
- "numSquares?": "number (default: 50)",
- "maxOpacity?": "number (default: 0.15)",
- "perspectiveThreeD?": "boolean (default: true)",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/AuroraBackground.json b/registry/components/AuroraBackground.json
deleted file mode 100644
index 6143169..0000000
--- a/registry/components/AuroraBackground.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "AuroraBackground",
- "description": "Aurora borealis-style background with multiple rotated gradient bars and blur effect.",
- "constraints": {},
- "propsSchema": {
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/AvatarGroup.json b/registry/components/AvatarGroup.json
deleted file mode 100644
index 5e84eea..0000000
--- a/registry/components/AvatarGroup.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "AvatarGroup",
- "description": "Displays a group of user avatars with overlapping layout and optional text label.",
- "constraints": {
- "textRules": {
- "text": {
- "required": false,
- "example": "Join 1,000+ members",
- "minChars": 2,
- "maxChars": 50
- }
- }
- },
- "propsSchema": {
- "avatars": "Array<{ src: string, alt?: string }> - User avatar images",
- "text?": "string",
- "maxVisible?": "number (default: 5)",
- "className?": "string",
- "ariaLabel?": "string (default: 'User avatars')"
- },
- "usageExample": "",
- "do": [
- "Use for social proof",
- "Use for customer reviews",
- "Requires avatars[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/BlogCardEleven.json b/registry/components/BlogCardEleven.json
deleted file mode 100644
index 9975b67..0000000
--- a/registry/components/BlogCardEleven.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
- "name": "BlogCardEleven",
- "description": "Two-column blog card list with title, author, description, tags, and media.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Latest News",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Stay updated with our latest announcements",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "News",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "itemRules": {
- "minItems": 1,
- "maxItems": 10,
- "recommendedItems": "2-4",
- "note": "Each blog requires id, title, author, description, tags array. Media uses discriminated union: either imageSrc (with optional imageAlt) OR videoSrc (with optional videoAriaLabel)."
- }
- },
- "propsSchema": {
- "blogs": "Array<{ id: string, title: string, author: string, description: string, tags: string[], imageSrc?: string, imageAlt?: string, videoSrc?: string, videoAriaLabel?: string, onBlogClick?: () => void }> - Blog card items (requires imageSrc or videoSrc)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string (required)",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string (required)",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault' (required)",
- "ariaLabel?": "string (default: 'Blog section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for blog listings",
- "Use for article grids",
- "Requires blogs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 4 items",
- "Do not use more than 10 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/BlogCardFive.json b/registry/components/BlogCardFive.json
deleted file mode 100644
index 680f0cc..0000000
--- a/registry/components/BlogCardFive.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "name": "BlogCardFive",
- "description": "Blog section with TextBox header and fixed 2-column grid layout with horizontal blog cards and metadata items.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Latest Articles",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Discover our latest insights and stories",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Blog",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "blogRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "title": {
- "required": true,
- "example": "The Future of Web Development: Exploring New Technologies and Trends",
- "minChars": 10,
- "maxChars": 150,
- "note": "Blog post title shown at text-3xl size, supports longer titles"
- },
- "items": {
- "required": true,
- "minItems": 1,
- "maxItems": 5,
- "structure": "string[]",
- "example": "['Technology', 'Jan 15, 2025', '5 min read']",
- "note": "Flexible metadata items (category, date, author, read time, etc.) displayed inline with bullet separators"
- },
- "imageSrc": {
- "required": false,
- "example": "/blog-1.jpg",
- "note": "Either imageSrc or videoSrc should be provided"
- },
- "videoSrc": {
- "required": false,
- "example": "/blog-1.mp4",
- "note": "Either imageSrc or videoSrc should be provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Future of web development illustration",
- "note": "Falls back to blog title if not provided"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Future of web development video",
- "note": "Falls back to blog title if not provided"
- }
- },
- "itemRules": {
- "minItems": 1,
- "maxItems": 10,
- "recommendedItems": "2-6",
- "note": "Always displays as 2-column grid on desktop, 1 column on mobile. Works best with even number of posts (2, 4, 6)."
- }
- },
- "propsSchema": {
- "blogs": "Array<{ id: string, title: string, items: string[], imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Blog section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for blog listings",
- "Use for article grids",
- "Requires blogs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 4 items",
- "Do not use more than 10 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/BlogCardOne.json b/registry/components/BlogCardOne.json
deleted file mode 100644
index bababbf..0000000
--- a/registry/components/BlogCardOne.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "name": "BlogCardOne",
- "description": "Blog section with card grid/carousel layout featuring image, category, title, excerpt, and author info.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Latest Articles",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Insights and updates from our team",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Blog",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "blogRules": {
- "blogs": {
- "required": true,
- "minItems": 1,
- "example": "[{\"id\": \"1\", \"category\": \"Design\", \"title\": \"UX review presentations\", \"excerpt\": \"How to create compelling presentations\", \"imageSrc\": \"/blog-1.jpg\", \"authorName\": \"John Doe\", \"authorAvatar\": \"/avatar-1.jpg\", \"date\": \"20 Jan 2025\"}]",
- "note": "Array of blog items. Each item requires id, category, title, excerpt, imageSrc, authorName, authorAvatar, and date."
- }
- }
- },
- "propsSchema": {
- "blogs": "Array<{ id: string, category: string, title: string, excerpt: string, imageSrc: string, imageAlt?: string, authorName: string, authorAvatar: string, date: string, onBlogClick?: () => void }> - Blog card items",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Blog section')",
- "className?": "string"
- },
- "usageExample": " console.log('clicked')}]} title=\"Latest Articles\" description=\"Stay updated with our latest insights\" textboxLayout=\"default\" useInvertedBackground={\"noInvert\"} animationType=\"slide-up\" carouselMode=\"buttons\" />",
- "do": [
- "Use for blog listings",
- "Use for article grids",
- "Requires blogs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/BlogCardSix.json b/registry/components/BlogCardSix.json
deleted file mode 100644
index 953e452..0000000
--- a/registry/components/BlogCardSix.json
+++ /dev/null
@@ -1,99 +0,0 @@
-{
- "name": "BlogCardSix",
- "description": "Blog section with separate media and card layout, featuring tags and arrow navigation.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Recent articles",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Stay updated with the latest trends and insights",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Blog",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "blogRules": {
- "id": {
- "required": true,
- "example": "1",
- "note": "Unique identifier for the blog post"
- },
- "title": {
- "required": true,
- "example": "Discover the essential features of our app",
- "minChars": 10,
- "maxChars": 100
- },
- "tags": {
- "required": true,
- "minItems": 1,
- "maxItems": 4,
- "structure": "string[]",
- "example": "['Features', 'Jan 29, 2025']",
- "note": "Array of tag strings displayed using Tag component"
- },
- "imageSrc": {
- "required": false,
- "example": "/blog-1.jpg",
- "note": "Either imageSrc or videoSrc should be provided"
- },
- "videoSrc": {
- "required": false,
- "example": "/blog-1.mp4",
- "note": "Either imageSrc or videoSrc should be provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Blog post preview image",
- "note": "Falls back to blog title if not provided"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Blog post video",
- "note": "Falls back to blog title if not provided"
- }
- }
- },
- "propsSchema": {
- "blogs": "Array<{ id: string, title: string, tags: string[], imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string, onBlogClick?: () => void }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "ariaLabel?": "string (default: 'Blog section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for blog listings",
- "Use for article grids",
- "Requires blogs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/BlogCardThree.json b/registry/components/BlogCardThree.json
deleted file mode 100644
index 5856635..0000000
--- a/registry/components/BlogCardThree.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "name": "BlogCardThree",
- "description": "Blog section with vertical card layout featuring tag, title, description, and media with overlay button.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Featured Articles",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Explore our latest insights",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Blog",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "blogRules": {
- "blogs": {
- "required": true,
- "minItems": 1,
- "example": "[{\"id\": \"1\", \"category\": \"Software Development\", \"title\": \"Redefining Digital Performance\", \"description\": \"Optimizing speed and scalability\", \"imageSrc\": \"/blog-1.jpg\"}]",
- "note": "Array of blog items. Each item requires id, category, title, description, and either imageSrc or videoSrc."
- }
- }
- },
- "propsSchema": {
- "blogs": "Array<{ id: string, category: string, categoryIcon?: LucideIcon, title: string, description: string, imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string, onBlogClick?: () => void }> - Blog card items",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-[600px]')",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Blog section')",
- "className?": "string"
- },
- "usageExample": " console.log('clicked')}]} title=\"Featured Articles\" description=\"Explore our latest insights\" textboxLayout=\"default\" useInvertedBackground={\"noInvert\"} animationType=\"slide-up\" />",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for blog listings",
- "Use for article grids",
- "Requires blogs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/BlogCardTwo.json b/registry/components/BlogCardTwo.json
deleted file mode 100644
index b423359..0000000
--- a/registry/components/BlogCardTwo.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "name": "BlogCardTwo",
- "description": "Blog section with card grid/carousel layout featuring image, author/date, title, excerpt, and multiple tags.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Latest Articles",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Insights and updates from our team",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Blog",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "blogRules": {
- "blogs": {
- "required": true,
- "minItems": 1,
- "example": "[{\"id\": \"1\", \"tags\": [\"Design\", \"Research\"], \"title\": \"UX review presentations\", \"excerpt\": \"How to create compelling presentations\", \"imageSrc\": \"/blog-1.jpg\", \"authorName\": \"Olivia Rhye\", \"date\": \"20 Jan 2025\"}]",
- "note": "Array of blog items. Each item requires id, tags (array), title, excerpt, imageSrc, authorName, and date."
- }
- }
- },
- "propsSchema": {
- "blogs": "Array<{ id: string, tags: string[], title: string, excerpt: string, imageSrc: string, imageAlt?: string, authorName: string, date: string, onBlogClick?: () => void }> - Blog card items",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Blog section')",
- "className?": "string"
- },
- "usageExample": " console.log('clicked')}]} title=\"Latest Articles\" description=\"Stay updated with our latest insights\" textboxLayout=\"default\" useInvertedBackground={\"noInvert\"} animationType=\"slide-up\" carouselMode=\"buttons\" />",
- "do": [
- "Use for blog listings",
- "Use for article grids",
- "Requires blogs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/BlurBottomBackground.json b/registry/components/BlurBottomBackground.json
deleted file mode 100644
index 0132514..0000000
--- a/registry/components/BlurBottomBackground.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "name": "BlurBottomBackground",
- "description": "Backdrop blur effect positioned at the bottom of the page with linear gradient mask.",
- "constraints": {},
- "propsSchema": {
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonBounceEffect.json b/registry/components/ButtonBounceEffect.json
deleted file mode 100644
index c46ce9b..0000000
--- a/registry/components/ButtonBounceEffect.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonBounceEffect",
- "description": "CTA button with bouncing character animation on hover.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Get Started",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonDirectionalHover.json b/registry/components/ButtonDirectionalHover.json
deleted file mode 100644
index b4979be..0000000
--- a/registry/components/ButtonDirectionalHover.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonDirectionalHover",
- "description": "CTA button with a circle that expands from the mouse entry point on hover.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Get Started",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonElasticEffect.json b/registry/components/ButtonElasticEffect.json
deleted file mode 100644
index 2f26a22..0000000
--- a/registry/components/ButtonElasticEffect.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonElasticEffect",
- "description": "CTA button with elastic scale animation on hover.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Get Started",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonExpandHover.json b/registry/components/ButtonExpandHover.json
deleted file mode 100644
index 164f612..0000000
--- a/registry/components/ButtonExpandHover.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonExpandHover",
- "description": "CTA button with expanding background animation from right to left on hover, with a fixed arrow icon.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Get Started",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonHoverBubble.json b/registry/components/ButtonHoverBubble.json
deleted file mode 100644
index eae496e..0000000
--- a/registry/components/ButtonHoverBubble.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonHoverBubble",
- "description": "CTA button with expanding bubble animation where an arrow icon slides out and the text expands on hover.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Contact Us",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonHoverMagnetic.json b/registry/components/ButtonHoverMagnetic.json
deleted file mode 100644
index 4b8599e..0000000
--- a/registry/components/ButtonHoverMagnetic.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "ButtonHoverMagnetic",
- "description": "CTA button that subtly follows the cursor with a magnetic hover effect.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Button",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "strengthFactor?": "number (default: 20)",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonIconArrow.json b/registry/components/ButtonIconArrow.json
deleted file mode 100644
index 67a33c3..0000000
--- a/registry/components/ButtonIconArrow.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonIconArrow",
- "description": "Button with a trailing arrow icon that transforms on hover.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Button",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonShiftHover.json b/registry/components/ButtonShiftHover.json
deleted file mode 100644
index 4109308..0000000
--- a/registry/components/ButtonShiftHover.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "ButtonShiftHover",
- "description": "CTA button where the label nudges upward on hover and a trailing dot fills from outline to solid.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Get Started",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [
- "Do not use multiple items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonTextShift.json b/registry/components/ButtonTextShift.json
deleted file mode 100644
index 7c9b7e6..0000000
--- a/registry/components/ButtonTextShift.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonTextShift",
- "description": "CTA button with synchronized character shift animation on hover.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Get Started",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonTextStagger.json b/registry/components/ButtonTextStagger.json
deleted file mode 100644
index 8c4c724..0000000
--- a/registry/components/ButtonTextStagger.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonTextStagger",
- "description": "CTA button with character stagger animation on hover.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Get Started",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ButtonTextUnderline.json b/registry/components/ButtonTextUnderline.json
deleted file mode 100644
index c37ba41..0000000
--- a/registry/components/ButtonTextUnderline.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "ButtonTextUnderline",
- "description": "Text-only button where an underline animates in on hover.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Learn more",
- "minChars": 2,
- "maxChars": 25
- }
- }
- },
- "propsSchema": {
- "text": "string",
- "onClick?": "() => void",
- "href?": "string - External URLs open in new tab, internal values scroll to section",
- "className?": "string",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "type?": "'button' | 'submit' | 'reset' (default: 'button')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/CardStack.json b/registry/components/CardStack.json
deleted file mode 100644
index cf886f1..0000000
--- a/registry/components/CardStack.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "CardStack",
- "description": "Adaptive layout component that displays children in a grid, timeline, or carousel based on item count and variant.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Features",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Discover our products",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "New",
- "minChars": 2,
- "maxChars": 30
- }
- }
- },
- "propsSchema": {
- "children": "React.ReactNode",
- "mode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant?": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (default: 'uniform-all-items-equal')",
- "uniformGridCustomHeightClasses?": "string (default: varies by usage)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground?": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Card stack')",
- "className?": "string"
- },
- "usageExample": "{/* Card components */}",
- "do": [
- "Use for general use",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/CircleGradientBackground.json b/registry/components/CircleGradientBackground.json
deleted file mode 100644
index 8a24188..0000000
--- a/registry/components/CircleGradientBackground.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "CircleGradientBackground",
- "description": "Two large gradient circles positioned diagonally in corners.",
- "constraints": {},
- "propsSchema": {
- "diagonal?": "'primary' | 'secondary' (default: 'primary')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ContactCenter.json b/registry/components/ContactCenter.json
deleted file mode 100644
index 2d4209b..0000000
--- a/registry/components/ContactCenter.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "name": "ContactCenter",
- "description": "Centered contact section with tag, animated title and description, email signup form, and terms text.",
- "constraints": {
- "textRules": {
- "tag": {
- "required": true,
- "example": "Newsletter",
- "minChars": 2,
- "maxChars": 20
- },
- "title": {
- "required": true,
- "example": "Medium length heading goes here",
- "minChars": 4,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
- "minChars": 20,
- "maxChars": 200
- },
- "inputPlaceholder": {
- "required": false,
- "default": "Enter your email",
- "example": "Your email address",
- "minChars": 5,
- "maxChars": 30
- },
- "buttonText": {
- "required": false,
- "default": "Sign Up",
- "example": "Subscribe",
- "minChars": 2,
- "maxChars": 15
- },
- "termsText": {
- "required": false,
- "default": "By clicking Sign Up you're confirming that you agree with our Terms and Conditions.",
- "example": "We respect your privacy. Unsubscribe at any time.",
- "minChars": 10,
- "maxChars": 150
- }
- }
- },
- "propsSchema": {
- "tag": "string",
- "title": "string",
- "description": "string",
- "tagIcon?": "LucideIcon",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "inputPlaceholder?": "string (default: 'Enter your email')",
- "buttonText?": "string (default: 'Sign Up')",
- "termsText?": "string (default: 'By clicking Sign Up you're confirming that you agree with our Terms and Conditions.')",
- "onSubmit?": "(email: string) => void",
- "ariaLabel?": "string (default: 'Contact section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\n\n console.log(email)} />\n",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for contact pages",
- "Use for lead generation"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ContactFaq.json b/registry/components/ContactFaq.json
deleted file mode 100644
index dd0c9fa..0000000
--- a/registry/components/ContactFaq.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "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": "",
- "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
- }
-}
\ No newline at end of file
diff --git a/registry/components/ContactForm.json b/registry/components/ContactForm.json
deleted file mode 100644
index 7a8e098..0000000
--- a/registry/components/ContactForm.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "name": "ContactForm",
- "description": "Complete contact form component with tag, animated title and description, email signup form, and terms text.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Join our newsletter",
- "minChars": 4,
- "maxChars": 60
- },
- "description": {
- "required": true,
- "example": "Get the latest updates and exclusive content delivered to your inbox",
- "minChars": 10,
- "maxChars": 200
- },
- "tag": {
- "required": true,
- "example": "Newsletter",
- "minChars": 2,
- "maxChars": 30
- },
- "inputPlaceholder": {
- "required": false,
- "default": "Enter your email",
- "example": "Your email address",
- "minChars": 5,
- "maxChars": 50
- },
- "buttonText": {
- "required": false,
- "default": "Sign Up",
- "example": "Subscribe",
- "minChars": 2,
- "maxChars": 15
- },
- "termsText": {
- "required": false,
- "default": "By clicking Sign Up you're confirming that you agree with our Terms and Conditions.",
- "example": "We respect your privacy. Unsubscribe anytime.",
- "minChars": 10,
- "maxChars": 200
- }
- }
- },
- "propsSchema": {
- "title": "string (required)",
- "description": "string (required)",
- "tag": "string (required)",
- "tagIcon?": "LucideIcon",
- "inputPlaceholder?": "string (default: 'Enter your email')",
- "buttonText?": "string (default: 'Sign Up')",
- "termsText?": "string (default: 'By clicking Sign Up you're confirming that you agree with our Terms and Conditions.')",
- "onSubmit?": "(email: string) => void",
- "centered?": "boolean (default: false)",
- "className?": "string"
- },
- "usageExample": " console.log(email)} />",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for contact pages",
- "Use for lead generation"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ContactSplit.json b/registry/components/ContactSplit.json
deleted file mode 100644
index e68e6b3..0000000
--- a/registry/components/ContactSplit.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- "name": "ContactSplit",
- "description": "Split layout contact section with tag, animated title and description on one side, media content on the other, and email signup form.",
- "constraints": {
- "textRules": {
- "tag": {
- "required": true,
- "example": "Newsletter",
- "minChars": 2,
- "maxChars": 20
- },
- "title": {
- "required": true,
- "example": "Medium length heading goes here",
- "minChars": 4,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
- "minChars": 20,
- "maxChars": 200
- },
- "inputPlaceholder": {
- "required": false,
- "default": "Enter your email",
- "example": "Your email address",
- "minChars": 5,
- "maxChars": 30
- },
- "buttonText": {
- "required": false,
- "default": "Sign Up",
- "example": "Subscribe",
- "minChars": 2,
- "maxChars": 15
- },
- "termsText": {
- "required": false,
- "default": "By clicking Sign Up you're confirming that you agree with our Terms and Conditions.",
- "example": "We respect your privacy. Unsubscribe at any time.",
- "minChars": 10,
- "maxChars": 150
- }
- }
- },
- "propsSchema": {
- "tag": "string",
- "title": "string",
- "description": "string",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Contact section video')",
- "mediaPosition?": "'left' | 'right' (default: 'right')",
- "tagIcon?": "LucideIcon",
- "inputPlaceholder?": "string (default: 'Enter your email')",
- "buttonText?": "string (default: 'Sign Up')",
- "termsText?": "string (default: 'By clicking Sign Up you're confirming that you agree with our Terms and Conditions.')",
- "onSubmit?": "(email: string) => void",
- "ariaLabel?": "string (default: 'Contact section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\n\n console.log(email)} />\n",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for contact pages",
- "Use for lead generation"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ContactSplitForm.json b/registry/components/ContactSplitForm.json
deleted file mode 100644
index 9d8b827..0000000
--- a/registry/components/ContactSplitForm.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "name": "ContactSplitForm",
- "description": "Split layout contact form with animated title and description, dynamic input fields, optional textarea, submit button, and media content.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Medium length heading goes here",
- "minChars": 4,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.",
- "minChars": 20,
- "maxChars": 200
- },
- "buttonText": {
- "required": false,
- "default": "Submit",
- "example": "Send Message",
- "minChars": 2,
- "maxChars": 15
- }
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "inputs": "Array<{ name: string, type: string, placeholder: string, required?: boolean, className?: string }> - Form input fields (min 2 required)",
- "textarea?": "{ name: string, placeholder: string, rows?: number, required?: boolean, className?: string } - Optional textarea field",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Contact section video')",
- "mediaPosition?": "'left' | 'right' (default: 'right')",
- "buttonText?": "string (default: 'Submit')",
- "onSubmit?": "(data: Record) => void",
- "ariaLabel?": "string (default: 'Contact section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\n\n console.log(data)} />\n",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for contact pages",
- "Use for lead generation",
- "Requires inputs[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ContactText.json b/registry/components/ContactText.json
deleted file mode 100644
index b03b1aa..0000000
--- a/registry/components/ContactText.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "ContactText",
- "description": "Centered contact section with animated text and action buttons in a card container.",
- "constraints": {
- "textRules": {
- "text": {
- "required": true,
- "example": "Ready to start your next project? Let's create something amazing together.",
- "minChars": 10,
- "maxChars": 200
- },
- "animationType": {
- "required": false,
- "default": "entrance-slide",
- "options": [
- "entrance-slide",
- "reveal-blur",
- "background-highlight"
- ],
- "note": "GSAP scroll-triggered animation type for text"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "note": "Supports up to 2 buttons with px-8 spacing. Buttons use theme.defaultButtonVariant."
- }
- },
- "propsSchema": {
- "text": "string",
- "animationType?": "'entrance-slide' | 'reveal-blur' | 'background-highlight' (default: 'entrance-slide')",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Contact section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for contact pages",
- "Use for lead generation",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/DotGridBackground.json b/registry/components/DotGridBackground.json
deleted file mode 100644
index 102e61d..0000000
--- a/registry/components/DotGridBackground.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "DotGridBackground",
- "description": "Dot pattern background with radial gradient dots and optional 3D perspective effect.",
- "constraints": {},
- "propsSchema": {
- "size?": "'small' | 'medium' | 'large' (default: 'medium')",
- "perspectiveThreeD?": "boolean (default: false)",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/DownwardRaysBackground.json b/registry/components/DownwardRaysBackground.json
deleted file mode 100644
index b157144..0000000
--- a/registry/components/DownwardRaysBackground.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "DownwardRaysBackground",
- "description": "Atmospheric light rays emanating from top center directly downward with blur and radial gradient effects, with optional grid overlay.",
- "constraints": {},
- "propsSchema": {
- "animated": "boolean - Required. When true, rays animate with pulsing opacity. When false, rays display static opacity.",
- "showGrid": "boolean - Required. When true, displays a grid overlay fading from top center. When false, no grid is shown.",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for statistics displays",
- "Use for achievement showcases"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/EmailSignupForm.json b/registry/components/EmailSignupForm.json
deleted file mode 100644
index d7ec253..0000000
--- a/registry/components/EmailSignupForm.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "name": "EmailSignupForm",
- "description": "Compact email signup form with inline input and submit button in card container.",
- "constraints": {
- "textRules": {
- "inputPlaceholder": {
- "required": false,
- "default": "Enter your email",
- "example": "Your email address",
- "minChars": 5,
- "maxChars": 50
- },
- "buttonText": {
- "required": false,
- "default": "Sign Up",
- "example": "Subscribe",
- "minChars": 2,
- "maxChars": 15
- }
- }
- },
- "propsSchema": {
- "inputPlaceholder?": "string (default: 'Enter your email')",
- "buttonText?": "string (default: 'Sign Up')",
- "onSubmit?": "(email: string) => void",
- "className?": "string"
- },
- "usageExample": " console.log(email)} />",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FaqBase.json b/registry/components/FaqBase.json
deleted file mode 100644
index 8c13f4a..0000000
--- a/registry/components/FaqBase.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "name": "FaqBase",
- "description": "FAQ section with accordion items and optional header.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Frequently Asked Questions",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Find answers to common questions about our products and services",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Help",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "faqRules": {
- "faqs": {
- "required": true,
- "minItems": 1,
- "example": "[{\"id\": \"1\", \"title\": \"What is your return policy?\", \"content\": \"We offer a 30-day money-back guarantee.\"}]",
- "note": "Array of FAQ items. Each item requires unique id, title (question), and content (answer with HTML support)."
- },
- "animationType": {
- "required": false,
- "default": "smooth",
- "options": [
- "smooth",
- "instant"
- ],
- "note": "Animation type for accordion open/close. 'smooth' uses height transition, 'instant' shows/hides immediately."
- }
- }
- },
- "propsSchema": {
- "faqs": "Array<{ id: string, title: string, content: string }> - FAQ items",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "animationType?": "'smooth' | 'instant' (default: 'smooth')",
- "showCard?": "boolean (default: true)",
- "ariaLabel?": "string (default: 'FAQ section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for help pages",
- "Use for support sections",
- "Requires faqs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FaqDouble.json b/registry/components/FaqDouble.json
deleted file mode 100644
index 4e1283c..0000000
--- a/registry/components/FaqDouble.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "name": "FaqDouble",
- "description": "FAQ section with two-column accordion layout and optional header.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Frequently Asked Questions",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Find answers to common questions about our products and services",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Help",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "faqRules": {
- "faqs": {
- "required": true,
- "minItems": 1,
- "example": "[{\"id\": \"1\", \"title\": \"What is your return policy?\", \"content\": \"We offer a 30-day money-back guarantee.\"}]",
- "note": "Array of FAQ items. Each item requires unique id, title (question), and content (answer with HTML support). Items are automatically split into two columns."
- },
- "animationType": {
- "required": false,
- "default": "smooth",
- "options": [
- "smooth",
- "instant"
- ],
- "note": "Animation type for accordion open/close. 'smooth' uses height transition, 'instant' shows/hides immediately."
- }
- }
- },
- "propsSchema": {
- "faqs": "Array<{ id: string, title: string, content: string }> - FAQ items",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "animationType?": "'smooth' | 'instant' (default: 'smooth')",
- "ariaLabel?": "string (default: 'FAQ section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for help pages",
- "Use for support sections",
- "Requires faqs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FaqSplitMedia.json b/registry/components/FaqSplitMedia.json
deleted file mode 100644
index 1230577..0000000
--- a/registry/components/FaqSplitMedia.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "name": "FaqSplitMedia",
- "description": "FAQ section with split layout featuring media (image/video) on one side and accordion list on the other.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Frequently Asked Questions",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Find answers to common questions about our products and services",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Help",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "faqRules": {
- "faqs": {
- "required": true,
- "minItems": 1,
- "example": "[{\"id\": \"1\", \"title\": \"What is your return policy?\", \"content\": \"We offer a 30-day money-back guarantee.\"}]",
- "note": "Array of FAQ items. Each item requires unique id, title (question), and content (answer with HTML support)."
- },
- "animationType": {
- "required": false,
- "default": "smooth",
- "options": [
- "smooth",
- "instant"
- ],
- "note": "Animation type for accordion open/close. 'smooth' uses height transition, 'instant' shows/hides immediately."
- },
- "mediaPosition": {
- "required": false,
- "default": "left",
- "options": [
- "left",
- "right"
- ],
- "note": "Position of media relative to FAQ list."
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "note": "Path to image file. Either imageSrc or videoSrc should be provided."
- },
- "videoSrc": {
- "required": false,
- "note": "Path to video file. Either imageSrc or videoSrc should be provided."
- }
- }
- },
- "propsSchema": {
- "faqs": "Array<{ id: string, title: string, content: string }> - FAQ items",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'FAQ section video')",
- "mediaPosition?": "'left' | 'right' (default: 'left')",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "animationType?": "'smooth' | 'instant' (default: 'smooth')",
- "showCard?": "boolean (default: true)",
- "ariaLabel?": "string (default: 'FAQ section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for help pages",
- "Use for support sections",
- "Requires faqs[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FaqSplitText.json b/registry/components/FaqSplitText.json
deleted file mode 100644
index 59d9256..0000000
--- a/registry/components/FaqSplitText.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "name": "FaqSplitText",
- "description": "FAQ section with split layout featuring animated text on one side and accordion list on the other.",
- "constraints": {
- "textRules": {
- "sideTitle": {
- "required": true,
- "example": "Frequently Asked Questions",
- "minChars": 2,
- "maxChars": 100
- },
- "sideDescription": {
- "required": false,
- "example": "Everything you need to know",
- "minChars": 5,
- "maxChars": 250
- }
- },
- "faqRules": {
- "faqs": {
- "required": true,
- "minItems": 1,
- "example": "[{\"id\": \"1\", \"title\": \"What is your return policy?\", \"content\": \"We offer a 30-day money-back guarantee.\"}]",
- "note": "Array of FAQ items. Each item requires unique id, title (question), and content (answer with HTML support)."
- },
- "animationType": {
- "required": false,
- "default": "smooth",
- "options": [
- "smooth",
- "instant"
- ],
- "note": "Animation type for accordion open/close. 'smooth' uses height transition, 'instant' shows/hides immediately."
- },
- "textPosition": {
- "required": false,
- "default": "left",
- "options": [
- "left",
- "right"
- ],
- "note": "Position of title/description text relative to FAQ list."
- }
- }
- },
- "propsSchema": {
- "faqs": "Array<{ id: string, title: string, content: string }> - FAQ items",
- "sideTitle": "string",
- "sideDescription?": "string",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textPosition?": "'left' | 'right' (default: 'left')",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "animationType?": "'smooth' | 'instant' (default: 'smooth')",
- "showCard?": "boolean (default: true)",
- "ariaLabel?": "string (default: 'FAQ section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for help pages",
- "Use for support sections",
- "Requires faqs[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardEight.json b/registry/components/FeatureCardEight.json
deleted file mode 100644
index cf16ec4..0000000
--- a/registry/components/FeatureCardEight.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "name": "FeatureCardEight",
- "description": "Horizontal timeline feature section with auto-advancing progress bars, numbered step badges, and shared media display.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Process",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Discover how we bring ideas to life",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "How It Works",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featureCardRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 3,
- "note": "Step number displayed in circular badge"
- },
- "title": {
- "required": true,
- "example": "Research & Planning",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Understanding user needs, market trends, and project requirements",
- "minChars": 10,
- "maxChars": 300
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": true,
- "example": "/feature1.jpg",
- "note": "Either imageSrc or videoSrc required per card (discriminated union)"
- },
- "videoSrc": {
- "required": true,
- "example": "/feature1.mp4",
- "note": "Either imageSrc or videoSrc required per card (discriminated union)"
- },
- "imageAlt": {
- "required": false,
- "example": "Research and planning illustration",
- "note": "Falls back to feature title if not provided"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Research and planning video",
- "note": "Falls back to feature title if not provided"
- }
- },
- "itemRules": {
- "minItems": 2,
- "maxItems": 4,
- "recommendedItems": "2-4",
- "note": "Works best with 2-4 features. Grid layout adapts based on item count."
- }
- },
- "propsSchema": {
- "features": "Array<{ id: number, title: string, description: string } & ({ imageSrc: string, imageAlt?: string } | { videoSrc: string, videoAriaLabel?: string })>",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for process flows",
- "Use for roadmaps",
- "Use for step-by-step explanation",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires features[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use non-sequential content",
- "Do not use single item",
- "Do not use more than 4 items",
- "Do not use less than 2 items",
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardMedia.json b/registry/components/FeatureCardMedia.json
deleted file mode 100644
index 555a49d..0000000
--- a/registry/components/FeatureCardMedia.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "name": "FeatureCardMedia",
- "description": "Feature section with media cards displaying tag overlay, title, description, and optional buttons.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "From concept to launch, we've got you covered",
- "minChars": 10,
- "maxChars": 100
- },
- "description": {
- "required": true,
- "example": "Discover how we bring ideas to life through a proven methodology",
- "minChars": 20,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Our Process",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featuresRules": {
- "minItems": 2,
- "recommendedItems": 3,
- "maxItems": 6,
- "structure": {
- "id": "string - Unique identifier (required)",
- "title": "string - Card title (required)",
- "description": "string - Card description (required)",
- "tag": "string - Tag displayed on media top-right (required)",
- "imageSrc": "string - Image source URL (optional)",
- "videoSrc": "string - Video source URL (optional)",
- "buttons": "ButtonConfig[] - Optional action buttons for the card"
- },
- "note": "Each card requires id, title, description, and tag. Media (imageSrc or videoSrc) recommended. Buttons are optional per card."
- }
- },
- "propsSchema": {
- "features": "Array<{ id: string, title: string, description: string, tag: string, imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string, buttons?: ButtonConfig[], onCardClick?: () => void }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal'",
- "title": "string",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image'",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }>",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "ButtonConfig[]",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "ariaLabel?": "string (default: 'Features section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires features[]",
- "Requires titleSegments?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardNine.json b/registry/components/FeatureCardNine.json
deleted file mode 100644
index 56cb5d5..0000000
--- a/registry/components/FeatureCardNine.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "name": "FeatureCardNine",
- "description": "Scroll-based timeline feature section with two animated phone frames and centered content.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Powerful Features",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Everything you need to build amazing products",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Features",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featureCardRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 3,
- "note": "Feature identifier"
- },
- "title": {
- "required": true,
- "example": "Seamless Integration",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Connect your tools and workflows effortlessly. Our platform integrates with your existing systems.",
- "minChars": 10,
- "maxChars": 300
- }
- },
- "phoneMediaRules": {
- "phoneOne": {
- "imageSrc": {
- "required": true,
- "example": "/phone1.jpg",
- "note": "Either imageSrc or videoSrc required for phoneOne (discriminated union)"
- },
- "videoSrc": {
- "required": true,
- "example": "/phone1.mp4",
- "note": "Either imageSrc or videoSrc required for phoneOne (discriminated union)"
- },
- "imageAlt": {
- "required": false,
- "example": "First phone mockup",
- "note": "Falls back to '[title] - Phone 1' if not provided"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "First phone video",
- "note": "Falls back to '[title] - Phone 1 video' if not provided"
- }
- },
- "phoneTwo": {
- "imageSrc": {
- "required": true,
- "example": "/phone2.jpg",
- "note": "Either imageSrc or videoSrc required for phoneTwo (discriminated union)"
- },
- "videoSrc": {
- "required": true,
- "example": "/phone2.mp4",
- "note": "Either imageSrc or videoSrc required for phoneTwo (discriminated union)"
- },
- "imageAlt": {
- "required": false,
- "example": "Second phone mockup",
- "note": "Falls back to '[title] - Phone 2' if not provided"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Second phone video",
- "note": "Falls back to '[title] - Phone 2 video' if not provided"
- }
- }
- },
- "itemRules": {
- "minItems": 2,
- "maxItems": 4,
- "recommendedItems": "2-4",
- "note": "Each feature takes 100vh height. Recommend 2-4 features to avoid excessive scroll."
- }
- },
- "propsSchema": {
- "features": "Array<{ id: number, title: string, description: string, phoneOne: ({ imageSrc: string, imageAlt?: string } | { videoSrc: string, videoAriaLabel?: string }), phoneTwo: ({ imageSrc: string, imageAlt?: string } | { videoSrc: string, videoAriaLabel?: string }) }>",
- "showStepNumbers": "boolean (required - controls whether step number badges display)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires features[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use less than 2 items",
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardNineteen.json b/registry/components/FeatureCardNineteen.json
deleted file mode 100644
index 378ccc1..0000000
--- a/registry/components/FeatureCardNineteen.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "name": "FeatureCardNineteen",
- "description": "Timeline feature section with full-width cards showing step numbers and rotated media.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Process",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Discover how we bring ideas to life",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "How it works",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featureCardRules": {
- "id": {
- "required": true,
- "example": 1,
- "note": "Numeric ID used to generate step number (01, 02, etc.)"
- },
- "tag": {
- "required": true,
- "example": "Expertise",
- "minChars": 2,
- "maxChars": 30
- },
- "title": {
- "required": true,
- "example": "Strategy",
- "minChars": 2,
- "maxChars": 30
- },
- "subtitle": {
- "required": true,
- "example": "Data-driven decisions for growth.",
- "minChars": 5,
- "maxChars": 60
- },
- "description": {
- "required": true,
- "example": "We analyze market trends and user behavior to create strategies that drive real results.",
- "minChars": 10,
- "maxChars": 250
- },
- "imageSrc": {
- "required": false,
- "example": "/images/strategy.webp",
- "note": "Image source URL (either imageSrc or videoSrc)"
- },
- "videoSrc": {
- "required": false,
- "example": "/videos/strategy.mp4",
- "note": "Video source URL (either imageSrc or videoSrc)"
- },
- "buttons": {
- "required": false,
- "example": [
- {
- "text": "Learn more",
- "href": "/strategy"
- }
- ],
- "note": "Optional buttons per feature card (max 2)"
- }
- }
- },
- "propsSchema": {
- "features": "Array<{ id: number, tag: string, title: string, subtitle: string, description: string, imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string, buttons?: Array<{text: string, onClick?: () => void, href?: string}> }> (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for process flows",
- "Use for roadmaps",
- "Use for step-by-step explanation",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires features[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use multiple items",
- "Do not use non-sequential content",
- "Do not use single item"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardOne.json b/registry/components/FeatureCardOne.json
deleted file mode 100644
index eeb40dc..0000000
--- a/registry/components/FeatureCardOne.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "name": "FeatureCardOne",
- "description": "Adaptive feature section with image/video-based cards in customizable bento grid layouts or carousel.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Features",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Discover the tools and capabilities that make our platform powerful",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Features",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featureCardRules": {
- "title": {
- "required": true,
- "example": "Advanced Analytics",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Get detailed insights into your business performance",
- "minChars": 10,
- "maxChars": 250
- }
- }
- },
- "propsSchema": {
- "features": "Array<{ title: string, description: string, button?: {text: string, onClick?: () => void, href?: string} } & ({ imageSrc: string, imageAlt?: string } | { videoSrc: string, videoAriaLabel?: string })>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "string",
- "useInvertedBackground": "'noInvert' | 'invertDefault'"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires features[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardSeven.json b/registry/components/FeatureCardSeven.json
deleted file mode 100644
index c3c7fd4..0000000
--- a/registry/components/FeatureCardSeven.json
+++ /dev/null
@@ -1,103 +0,0 @@
-{
- "name": "FeatureCardSeven",
- "description": "Vertical stack feature section with alternating left/right layouts and numbered step cards with square images.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Features",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Sequential features with numbered badges",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Features",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featureCardRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 3,
- "note": "Step number displayed in circular badge"
- },
- "title": {
- "required": true,
- "example": "Modern Architecture",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Built with the latest technologies and best practices",
- "minChars": 10,
- "maxChars": 300
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/feature1.jpg",
- "note": "Either imageSrc or videoSrc required per card"
- },
- "videoSrc": {
- "required": false,
- "example": "/feature1.mp4",
- "note": "Either imageSrc or videoSrc required per card"
- },
- "imageAlt": {
- "required": false,
- "example": "Modern architecture illustration",
- "note": "Falls back to feature title if not provided"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Modern architecture video",
- "note": "Falls back to feature title if not provided"
- }
- }
- },
- "propsSchema": {
- "features": "Array<{ id: number, title: string, description: string } & ({ imageSrc: string, imageAlt?: string } | { videoSrc: string, videoAriaLabel?: string })>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for process flows",
- "Use for roadmaps",
- "Use for step-by-step explanation",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires features[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use non-sequential content",
- "Do not use single item"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardSix.json b/registry/components/FeatureCardSix.json
deleted file mode 100644
index db05762..0000000
--- a/registry/components/FeatureCardSix.json
+++ /dev/null
@@ -1,102 +0,0 @@
-{
- "name": "FeatureCardSix",
- "description": "Timeline-based feature section with scroll-triggered stacking animations and numbered step cards.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Process",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Discover how we bring ideas to life",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Process",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featureCardRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 3,
- "note": "Step number displayed in circular badge"
- },
- "title": {
- "required": true,
- "example": "Research & Planning",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Understanding user needs, market trends, and project requirements",
- "minChars": 10,
- "maxChars": 300
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/step1.jpg",
- "note": "Either imageSrc or videoSrc required per card"
- },
- "videoSrc": {
- "required": false,
- "example": "/step1.mp4",
- "note": "Either imageSrc or videoSrc required per card"
- },
- "imageAlt": {
- "required": false,
- "example": "Research phase illustration",
- "note": "Falls back to feature title if not provided"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Research phase video",
- "note": "Falls back to feature title if not provided"
- }
- }
- },
- "propsSchema": {
- "features": "Array<{ id: number, title: string, description: string } & ({ imageSrc: string, imageAlt?: string } | { videoSrc: string, videoAriaLabel?: string })>",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for process flows",
- "Use for roadmaps",
- "Use for step-by-step explanation",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires features[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use non-sequential content",
- "Do not use single item"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardSixteen.json b/registry/components/FeatureCardSixteen.json
deleted file mode 100644
index eee2328..0000000
--- a/registry/components/FeatureCardSixteen.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
- "name": "FeatureCardSixteen",
- "description": "Comparison section with negative and positive cards showing contrasting features.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "What makes us stand out",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "See how we compare to traditional approaches",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Why us",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "negativeCardRules": {
- "items": {
- "required": true,
- "example": [
- "Time-consuming processes",
- "Limited scalability",
- "Higher costs"
- ],
- "minItems": 2,
- "maxItems": 10,
- "note": "List of negative aspects displayed with X icons"
- }
- },
- "positiveCardRules": {
- "items": {
- "required": true,
- "example": [
- "Streamlined workflow",
- "Scalable solutions",
- "Better value"
- ],
- "minItems": 2,
- "maxItems": 10,
- "note": "List of positive aspects displayed with Check icons"
- }
- }
- },
- "propsSchema": {
- "negativeCard": "{ items: string[] } (required)",
- "positiveCard": "{ items: string[] } (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Feature comparison section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardThree.json b/registry/components/FeatureCardThree.json
deleted file mode 100644
index e27905a..0000000
--- a/registry/components/FeatureCardThree.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
- "name": "FeatureCardThree",
- "description": "Adaptive feature section with hover-reveal cards displaying numbered features with images.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Features",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Discover what makes us different",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Features",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featureCardRules": {
- "id": {
- "required": true,
- "example": "01",
- "minChars": 1,
- "maxChars": 3,
- "note": "Displayed in the flip badge"
- },
- "title": {
- "required": true,
- "example": "Advanced Analytics",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Get detailed insights into your business performance",
- "minChars": 10,
- "maxChars": 250
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": true,
- "example": "/feature.jpg",
- "note": "Supports external URLs with unoptimized prop"
- },
- "imageAlt": {
- "required": false,
- "example": "Feature background",
- "note": "Empty string marks image as decorative (aria-hidden)"
- }
- }
- },
- "propsSchema": {
- "features": "Array<{ id: string, title: string, description: string, imageSrc: string, imageAlt?: string }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "string",
- "useInvertedBackground": "'noInvert' | 'invertDefault'"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires features[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardTwelve.json b/registry/components/FeatureCardTwelve.json
deleted file mode 100644
index 1823b74..0000000
--- a/registry/components/FeatureCardTwelve.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "name": "FeatureCardTwelve",
- "description": "List-based feature section with large label on left and content with bullet points on right.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Choose Your Plan",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Find the perfect fit for your needs",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Plans",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "featureRules": {
- "id": {
- "required": true,
- "example": "premium",
- "note": "Unique identifier for the feature"
- },
- "label": {
- "required": true,
- "example": "Premium",
- "minChars": 2,
- "maxChars": 30,
- "note": "Large display label shown on left side (5xl mobile, 6xl desktop)"
- },
- "title": {
- "required": true,
- "example": "Premium features for your most demanding needs",
- "minChars": 10,
- "maxChars": 120,
- "note": "Feature heading shown at xl (mobile) / 3xl (desktop)"
- },
- "items": {
- "required": true,
- "minItems": 1,
- "maxItems": 8,
- "structure": "string[]",
- "note": "Inline bullet list with accent-colored dots. Each item should be 5-50 characters."
- },
- "buttons": {
- "required": false,
- "maxButtons": 2,
- "structure": "Array<{text: string, onClick?: () => void, href?: string}>",
- "note": "Optional buttons at bottom of content area. First button is primary, second is secondary."
- }
- },
- "itemRules": {
- "minItems": 1,
- "maxItems": 8,
- "recommendedItems": "2-5",
- "note": "Works best with 2-5 features for clear comparison"
- }
- },
- "propsSchema": {
- "features": "Array<{ id: string, label: string, title: string, items: string[], buttons?: Array<{text: string, onClick?: () => void, href?: string}> }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "string"
- },
- "usageExample": " console.log('clicked') }] }]} animationType=\"opacity\" variant=\"border\" title=\"Choose Your Plan\" description=\"Find the perfect fit for your needs\" textboxLayout=\"default\" useInvertedBackground={\"noInvert\"} />",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for pricing pages",
- "Use for subscription tiers",
- "Requires features[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 8 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureCardTwentyOne.json b/registry/components/FeatureCardTwentyOne.json
deleted file mode 100644
index 6571269..0000000
--- a/registry/components/FeatureCardTwentyOne.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- "name": "FeatureCardTwentyOne",
- "description": "Split layout with media on one side and TextBox with accordion items on the other.",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "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",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "mediaPosition?": "'left' | 'right' (default: 'left')",
- "ariaLabel?": "string (default: 'Feature section')",
- "className?": "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
- }
-}
\ No newline at end of file
diff --git a/registry/components/FeatureProcessSteps.json b/registry/components/FeatureProcessSteps.json
deleted file mode 100644
index 333eb4a..0000000
--- a/registry/components/FeatureProcessSteps.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "name": "FeatureProcessSteps",
- "description": "Split-layout feature section with text on left and numbered process steps with timeline on right.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Getting you results without the complexity",
- "minChars": 10,
- "maxChars": 100
- },
- "description": {
- "required": true,
- "example": "Our three-step process takes you from identifying opportunities to launching systems, with clear communication and support at every stage.",
- "minChars": 20,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "How we work",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "stepsRules": {
- "minSteps": 2,
- "recommendedSteps": 3,
- "maxSteps": 6,
- "structure": {
- "number": "string - Step number to display (required, e.g., '01', '02', '1', '2')",
- "title": "string - Step title (required, e.g., 'Discovery & Assessment')",
- "description": "string - Step description (required)",
- "tag": "string - Optional tag/badge for the step (e.g., 'Week 1', 'Ongoing')"
- },
- "note": "Minimum 2 steps required, but 3+ steps recommended for optimal visual balance. Each step shows a numbered card with a connecting timeline line."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "steps": "Array<{ number: string, title: string, description: string, tag?: string }>",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "ButtonConfig[]",
- "ariaLabel?": "string (default: 'Process steps section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\nimport { Sparkles } from 'lucide-react';\n\n\n \n",
- "do": [
- "Use for process flows",
- "Use for roadmaps",
- "Use for step-by-step explanation",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires steps[]"
- ],
- "dont": [
- "Do not use non-sequential content",
- "Do not use single item"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FloatingGradientBackground.json b/registry/components/FloatingGradientBackground.json
deleted file mode 100644
index d8c75a8..0000000
--- a/registry/components/FloatingGradientBackground.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "name": "FloatingGradientBackground",
- "description": "Five animated gradient circles with CSS animations and vertical gradient mask.",
- "constraints": {},
- "propsSchema": {
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FluidBackground.json b/registry/components/FluidBackground.json
deleted file mode 100644
index 171c1d3..0000000
--- a/registry/components/FluidBackground.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "name": "FluidBackground",
- "description": "Generative fluid patterns using CPPN shader with theme color integration.",
- "constraints": {},
- "propsSchema": {
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FooterBase.json b/registry/components/FooterBase.json
deleted file mode 100644
index fa301ea..0000000
--- a/registry/components/FooterBase.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "name": "FooterBase",
- "description": "Classic footer with logo, multi-column navigation, copyright text, and privacy policy link.",
- "constraints": {
- "textRules": {
- "logoText": {
- "required": false,
- "default": "Webild",
- "example": "Company Name",
- "minChars": 2,
- "maxChars": 30
- },
- "copyrightText": {
- "required": false,
- "default": "© 2025 | Webild",
- "example": "© 2025 Company Name",
- "minChars": 5,
- "maxChars": 50
- },
- "columnTitle": {
- "required": true,
- "example": "Product",
- "minChars": 2,
- "maxChars": 20
- },
- "itemLabel": {
- "required": true,
- "example": "Features",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "structureRules": {
- "columns": {
- "required": true,
- "minColumns": 1,
- "maxColumns": 3,
- "note": "Each column must have title and items array"
- },
- "items": {
- "required": true,
- "minItems": 1,
- "structure": {
- "label": "string - Link text (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)"
- }
- }
- }
- },
- "propsSchema": {
- "columns": "Array<{ title: string, items: Array<{ label: string, href: string }> }> - Footer navigation columns (required)",
- "logoText?": "string (default: 'Webild')",
- "copyrightText?": "string (default: '© 2025 | Webild')",
- "onPrivacyClick?": "() => void",
- "ariaLabel?": "string (default: 'Site footer')",
- "className?": "string"
- },
- "usageExample": " console.log('Privacy clicked')} />",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires columns[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FooterBaseCard.json b/registry/components/FooterBaseCard.json
deleted file mode 100644
index 256b272..0000000
--- a/registry/components/FooterBaseCard.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "name": "FooterBaseCard",
- "description": "Card-wrapped footer with logo, navigation columns, copyright, and privacy policy link.",
- "constraints": {
- "textRules": {
- "copyrightText": {
- "required": false,
- "example": "© 2025 | Webild",
- "minChars": 5,
- "maxChars": 100,
- "note": "Copyright text displayed at bottom left"
- },
- "logoText": {
- "required": false,
- "example": "Webild",
- "minChars": 2,
- "maxChars": 30,
- "note": "Text used for h2 heading"
- }
- },
- "columnsRules": {
- "required": true,
- "structure": {
- "title": "string - Column heading (required)",
- "items": "Array<{ label: string, href: string }> - Navigation links (required)"
- },
- "minColumns": 1,
- "maxColumns": 5,
- "note": "Array of footer column objects. Each column must have title and items array."
- },
- "logoRules": {
- "note": "Uses logoText as h2 heading."
- }
- },
- "propsSchema": {
- "logoText?": "string (default: 'Webild')",
- "columns": "Array<{ title: string, items: Array<{ label: string, href: string }> }> - Footer navigation columns (required)",
- "copyrightText?": "string (default: '© 2025 | Webild')",
- "onPrivacyClick?": "() => void",
- "ariaLabel?": "string (default: 'Site footer')",
- "className?": "string"
- },
- "usageExample": " console.log('Privacy clicked')} />",
- "do": [
- "Use for general use",
- "Requires columns[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FooterBaseReveal.json b/registry/components/FooterBaseReveal.json
deleted file mode 100644
index 164e249..0000000
--- a/registry/components/FooterBaseReveal.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "name": "FooterBaseReveal",
- "description": "Animated footer reveal wrapper that creates a fixed footer with scroll-triggered reveal effect.",
- "constraints": {
- "textRules": {
- "copyrightText": {
- "required": false,
- "default": "© 2025 | Webild",
- "example": "© 2025 Company Name",
- "minChars": 5,
- "maxChars": 50
- },
- "columnTitle": {
- "required": true,
- "example": "Product",
- "minChars": 2,
- "maxChars": 20
- },
- "itemLabel": {
- "required": true,
- "example": "Features",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "structureRules": {
- "columns": {
- "required": true,
- "minColumns": 1,
- "maxColumns": 3,
- "note": "Each column must have title and items array"
- },
- "items": {
- "required": true,
- "minItems": 1,
- "structure": {
- "label": "string - Link text (required)",
- "href": "string - Link destination (optional). External URLs open in new tab, internal values scroll to sections",
- "onClick": "() => void - Additional click handler (optional)"
- }
- }
- }
- },
- "propsSchema": {
- "columns": "Array<{ title: string, items: Array<{ label: string, href: string }> }> - Footer navigation columns (required)",
- "copyrightText?": "string",
- "onPrivacyClick?": "() => void",
- "ariaLabel?": "string",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for general use",
- "Requires columns[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FooterCard.json b/registry/components/FooterCard.json
deleted file mode 100644
index 5678b6a..0000000
--- a/registry/components/FooterCard.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "name": "FooterCard",
- "description": "Minimalist footer with card wrapper containing logo, divider, copyright, and optional social links.",
- "constraints": {
- "textRules": {
- "copyrightText": {
- "required": false,
- "example": "© 2025 | Webild",
- "minChars": 5,
- "maxChars": 100,
- "note": "Copyright text displayed at bottom left"
- },
- "logoText": {
- "required": false,
- "example": "Webild",
- "minChars": 2,
- "maxChars": 30,
- "note": "Text used for SVG logo"
- }
- },
- "socialLinksRules": {
- "required": false,
- "structure": {
- "icon": "LucideIcon - Icon component (required)",
- "href": "string - Social profile URL (required)",
- "ariaLabel": "string - Accessibility label (required)"
- },
- "note": "Optional array of social links. Only renders if provided and has length > 0."
- },
- "logoRules": {
- "note": "Uses logoText for SVG text logo via FooterLogo component."
- }
- },
- "propsSchema": {
- "logoText?": "string (default: 'Webild')",
- "copyrightText?": "string (default: '© 2025 | Webild')",
- "socialLinks?": "Array<{ icon: LucideIcon, href: string, ariaLabel: string }> - Social media links",
- "ariaLabel?": "string (default: 'Site footer')",
- "className?": "string",
- "logoLineHeight?": "number (default: 1.1)"
- },
- "usageExample": "",
- "do": [
- "Use for general use",
- "Requires socialLinks?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FooterLogoEmphasis.json b/registry/components/FooterLogoEmphasis.json
deleted file mode 100644
index 42415b6..0000000
--- a/registry/components/FooterLogoEmphasis.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "name": "FooterLogoEmphasis",
- "description": "Footer with prominent centered logo emphasis and grid-based navigation layout with chevron icons.",
- "constraints": {
- "textRules": {
- "logoText": {
- "required": false,
- "default": "Webild",
- "example": "Company Name",
- "minChars": 2,
- "maxChars": 30
- },
- "itemLabel": {
- "required": true,
- "example": "Features",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "structureRules": {
- "columns": {
- "required": true,
- "minColumns": 1,
- "maxColumns": 5,
- "note": "Grid automatically adjusts from 1-5 columns based on array length"
- },
- "items": {
- "required": true,
- "minItems": 1,
- "structure": {
- "label": "string - Link text (required)",
- "href": "string - Link destination (optional). External URLs open in new tab, internal values scroll to sections",
- "onClick": "() => void - Additional click handler (optional)"
- }
- },
- "logo": {
- "note": "Uses logoText for SVG text logo"
- }
- }
- },
- "propsSchema": {
- "columns": "Array<{ items: Array<{ label: string, href?: string, onClick?: () => void }> }> - Footer navigation columns (required, max 5)",
- "logoText?": "string (default: 'Webild')",
- "ariaLabel?": "string (default: 'Site footer')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires columns[]"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FooterLogoReveal.json b/registry/components/FooterLogoReveal.json
deleted file mode 100644
index 8722402..0000000
--- a/registry/components/FooterLogoReveal.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "FooterLogoReveal",
- "description": "Minimalist footer with logo that reveals on scroll using fixed positioning and clip-path.",
- "constraints": {
- "textRules": {
- "logoText": {
- "required": false,
- "example": "Webild",
- "minChars": 2,
- "maxChars": 30,
- "note": "Text used for SVG logo"
- }
- },
- "logoRules": {
- "note": "Uses logoText for SVG text logo via FooterLogo component."
- },
- "revealEffectRules": {
- "note": "Component uses fixed positioning and clip-path for scroll reveal effect. Requires page content above footer to trigger scroll. ResizeObserver dynamically updates footer height for responsive reveal."
- }
- },
- "propsSchema": {
- "logoText?": "string (default: 'Webild')",
- "logoLineHeight?": "number (default: 1.1)",
- "ariaLabel?": "string (default: 'Site footer')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FooterMedia.json b/registry/components/FooterMedia.json
deleted file mode 100644
index 42b2f3d..0000000
--- a/registry/components/FooterMedia.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- "name": "FooterMedia",
- "description": "Footer with full-width media (image/video) above classic navigation layout.",
- "constraints": {
- "textRules": {
- "logoText": {
- "required": false,
- "default": "Webild",
- "example": "Company Name",
- "minChars": 2,
- "maxChars": 30
- },
- "copyrightText": {
- "required": false,
- "default": "© 2025 | Webild",
- "example": "© 2025 Company Name",
- "minChars": 5,
- "maxChars": 50
- },
- "columnTitle": {
- "required": true,
- "example": "Product",
- "minChars": 2,
- "maxChars": 20
- },
- "itemLabel": {
- "required": true,
- "example": "Features",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "mediaRules": {
- "note": "Either imageSrc or videoSrc is required (discriminated union)",
- "imageSrc": {
- "required": "conditional - required if no videoSrc",
- "example": "https://images.unsplash.com/photo-1497215728101-856f4ea42174?w=1920"
- },
- "videoSrc": {
- "required": "conditional - required if no imageSrc",
- "example": "/videos/footer-background.mp4"
- }
- },
- "structureRules": {
- "columns": {
- "required": true,
- "minColumns": 1,
- "maxColumns": 3,
- "note": "Each column must have title and items array"
- },
- "items": {
- "required": true,
- "minItems": 1,
- "structure": {
- "label": "string - Link text (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Additional click handler (optional)"
- }
- }
- }
- },
- "propsSchema": {
- "imageSrc": "string (required if no videoSrc)",
- "imageAlt?": "string (default: '')",
- "videoSrc": "string (required if no imageSrc)",
- "videoAriaLabel?": "string (default: 'Footer video')",
- "columns": "Array<{ title: string, items: Array<{ label: string, href: string }> }> - Footer navigation columns (required)",
- "logoText?": "string (default: 'Webild')",
- "copyrightText?": "string (default: '© 2025 | Webild')",
- "onPrivacyClick?": "() => void",
- "ariaLabel?": "string (default: 'Site footer')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires columns[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/FooterSimple.json b/registry/components/FooterSimple.json
deleted file mode 100644
index 2756a19..0000000
--- a/registry/components/FooterSimple.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "name": "FooterSimple",
- "description": "Minimal footer with navigation columns, divider, and bottom text row.",
- "constraints": {
- "textRules": {
- "bottomLeftText": {
- "required": true,
- "example": "© 2025 Company. All rights reserved.",
- "minChars": 5,
- "maxChars": 60
- },
- "bottomRightText": {
- "required": true,
- "example": "Made with Webild",
- "minChars": 2,
- "maxChars": 50
- },
- "columnTitle": {
- "required": true,
- "example": "Navigate",
- "minChars": 2,
- "maxChars": 20
- },
- "itemLabel": {
- "required": true,
- "example": "Home",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "structureRules": {
- "columns": {
- "required": true,
- "minColumns": 2,
- "maxColumns": 5,
- "note": "Each column must have title and items array. Columns spread evenly across width."
- },
- "items": {
- "required": true,
- "minItems": 1,
- "structure": {
- "label": "string - Link text (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)"
- }
- }
- }
- },
- "propsSchema": {
- "columns": "Array<{ title: string, items: Array<{ label: string, href?: string, onClick?: () => void }> }>",
- "bottomLeftText": "string",
- "bottomRightText": "string",
- "ariaLabel?": "string (default: 'Site footer')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires columns[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/Globe.json b/registry/components/Globe.json
deleted file mode 100644
index 8a2f50b..0000000
--- a/registry/components/Globe.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "name": "Globe",
- "description": "Interactive 3D rotating globe component using COBE library with theme-aware colors and customizable markers.",
- "constraints": {
- "globeRules": {
- "config": {
- "required": false,
- "note": "Optional COBEOptions object to customize globe appearance. Default config uses theme colors: baseColor and glowColor use --card, markerColor uses --primary-cta. Can override: phi (rotation), theta (tilt), dark (darkness 0-1), diffuse (lighting), mapSamples, mapBrightness, markers (array of {location: [lat, lng], size: number}), and more. See COBE documentation for full options."
- }
- }
- },
- "propsSchema": {
- "className?": "string",
- "config?": "COBEOptions - Custom globe configuration (see COBE docs)"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/GradientBarsBackground.json b/registry/components/GradientBarsBackground.json
deleted file mode 100644
index 5431ecc..0000000
--- a/registry/components/GradientBarsBackground.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "GradientBarsBackground",
- "description": "Vertical gradient bars with dynamic height distribution creating a wave-like pattern.",
- "constraints": {},
- "propsSchema": {
- "className?": "string",
- "numBars?": "number (default: 15)",
- "gradientFrom?": "string (default: 'var(--color-primary-cta)')",
- "gradientTo?": "string (default: 'transparent')",
- "opacity?": "number (default: 0.5)"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for statistics displays",
- "Use for achievement showcases"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/GridBackround.json b/registry/components/GridBackround.json
deleted file mode 100644
index 2278cfe..0000000
--- a/registry/components/GridBackround.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "GridBackround",
- "description": "Grid pattern background with line-based grid and optional 3D perspective effect.",
- "constraints": {},
- "propsSchema": {
- "size?": "'small' | 'medium' | 'large' (default: 'medium')",
- "perspectiveThreeD?": "boolean (default: false)",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroBillboard.json b/registry/components/HeroBillboard.json
deleted file mode 100644
index f86420d..0000000
--- a/registry/components/HeroBillboard.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "name": "HeroBillboard",
- "description": "Full-width hero section with centered text content, optional tag, buttons, and single image/video below in a card frame.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Welcome to Our Platform",
- "minChars": 2,
- "maxChars": 40
- },
- "description": {
- "required": true,
- "example": "Create beautiful, responsive web experiences",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "New Release",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/hero-image.jpg",
- "note": "Supports external URLs with unoptimized prop"
- },
- "videoSrc": {
- "required": false,
- "example": "/hero-video.mp4",
- "note": "Takes precedence over imageSrc if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Hero background",
- "note": "Empty string marks image as decorative (aria-hidden)"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)",
- "props": "Partial - Additional button props like className, textClassName (optional)"
- },
- "examples": [
- "{ text: 'Get Started', href: 'https://example.com' }",
- "{ text: 'Learn More', href: 'about' }"
- ],
- "note": "Button variant is controlled by ThemeProvider's defaultButtonVariant. Border radius is controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level to maintain consistent styling across the entire site."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Hero video')",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use multiple items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroBillboardCarousel.json b/registry/components/HeroBillboardCarousel.json
deleted file mode 100644
index 82ff847..0000000
--- a/registry/components/HeroBillboardCarousel.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "name": "HeroBillboardCarousel",
- "description": "Full-width hero section with centered text and 5+ auto-scrolling images in carousel layout.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Portfolio",
- "minChars": 2,
- "maxChars": 40
- },
- "description": {
- "required": true,
- "example": "Browse through our collection of projects",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "Portfolio",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "mediaRules": {
- "mediaItems": {
- "required": true,
- "example": "[{ imageSrc: '/img1.jpg', imageAlt: 'Product 1' }, { imageSrc: '/img2.jpg', imageAlt: 'Product 2' }, { imageSrc: '/img3.jpg', imageAlt: 'Product 3' }, { imageSrc: '/img4.jpg', imageAlt: 'Product 4' }, { imageSrc: '/img5.jpg', imageAlt: 'Product 5' }]",
- "note": "Array of 5+ MediaItem objects. Each item can have imageSrc, videoSrc, imageAlt, videoAriaLabel. Requires minimum 5 images."
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)",
- "props": "Partial - Additional button props like className, textClassName (optional)"
- },
- "examples": [
- "{ text: 'View Portfolio', href: 'https://example.com' }",
- "{ text: 'Contact Us', href: 'contact' }"
- ],
- "note": "Button variant is controlled by ThemeProvider's defaultButtonVariant. Border radius is controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level to maintain consistent styling across the entire site."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "mediaItems": "Array<{ imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string }> - Each item requires either imageSrc or videoSrc",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for portfolios",
- "Use for image galleries",
- "Requires buttons?[]",
- "Requires mediaItems[]"
- ],
- "dont": [
- "Do not use less than 5 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroBillboardGallery.json b/registry/components/HeroBillboardGallery.json
deleted file mode 100644
index 08efd22..0000000
--- a/registry/components/HeroBillboardGallery.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "name": "HeroBillboardGallery",
- "description": "Full-width hero section with centered text and 3-5 overlapping rotated images in gallery layout.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Explore Our Collection",
- "minChars": 2,
- "maxChars": 40
- },
- "description": {
- "required": true,
- "example": "Discover amazing products and experiences",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "Featured",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "mediaRules": {
- "mediaItems": {
- "required": true,
- "example": "[{ imageSrc: '/img1.jpg', imageAlt: 'Gallery 1' }, { imageSrc: '/img2.jpg', imageAlt: 'Gallery 2' }, { imageSrc: '/img3.jpg', imageAlt: 'Gallery 3' }]",
- "note": "Array of 3-5 MediaItem objects. Each item can have imageSrc, videoSrc, imageAlt, videoAriaLabel. Supports 3-5 images maximum."
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)",
- "props": "Partial - Additional button props like className, textClassName (optional)"
- },
- "examples": [
- "{ text: 'View Gallery', href: 'https://example.com' }",
- "{ text: 'Learn More', href: 'about' }"
- ],
- "note": "Button variant is controlled by ThemeProvider's defaultButtonVariant. Border radius is controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level to maintain consistent styling across the entire site."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "mediaItems": "Array<{ imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string }> - Each item requires either imageSrc or videoSrc",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for portfolios",
- "Use for image galleries",
- "Requires buttons?[]",
- "Requires mediaItems[]"
- ],
- "dont": [
- "Do not use less than 5 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroBillboardRotatedCarousel.json b/registry/components/HeroBillboardRotatedCarousel.json
deleted file mode 100644
index 640675a..0000000
--- a/registry/components/HeroBillboardRotatedCarousel.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
- "name": "HeroBillboardRotatedCarousel",
- "description": "Hero section with centered text content and angled/rotated carousel below. Features auto-playing carousel with scaled and rotated side cards.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Transform Your Workflow",
- "minChars": 2,
- "maxChars": 60
- },
- "description": {
- "required": true,
- "example": "Experience the power of seamless collaboration and productivity tools designed for modern teams",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "New Release",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "Button variant controlled by ThemeProvider's defaultButtonVariant. All sections should be wrapped in a single ThemeProvider at the app/page level."
- },
- "carouselItemRules": {
- "required": true,
- "minItems": 6,
- "structure": {
- "id": "string - Unique identifier (required)",
- "imageSrc": "string - Image URL (optional)",
- "videoSrc": "string - Video URL (optional, takes precedence over imageSrc)",
- "imageAlt": "string - Alt text for image (optional)",
- "videoAriaLabel": "string - ARIA label for video (optional)"
- },
- "note": "Minimum 6 items required to prevent duplicate keys. Carousel displays 5 positions simultaneously (-2, -1, 0, 1, 2). Each item should have either imageSrc or videoSrc. Uses MediaContent component for rendering."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "carouselItems": "Array<{ id: string, imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string }> - Carousel items (minimum 6 items)",
- "autoPlay?": "boolean (default: true)",
- "autoPlayInterval?": "number (default: 4000)",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for portfolios",
- "Use for image galleries",
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires buttons?[]",
- "Requires carouselItems[]"
- ],
- "dont": [
- "Do not use less than 5 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroBillboardScroll.json b/registry/components/HeroBillboardScroll.json
deleted file mode 100644
index b12039d..0000000
--- a/registry/components/HeroBillboardScroll.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "name": "HeroBillboardScroll",
- "description": "Full-screen hero section with centered text and media card that animates with 3D perspective transforms on scroll (desktop only).",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Scroll Animations",
- "minChars": 2,
- "maxChars": 60
- },
- "description": {
- "required": true,
- "example": "Experience smooth, performant animations as you scroll through your content",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "Unleash the Power",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/dashboard.jpg",
- "note": "Image to display in the animated card. Supports external URLs with unoptimized prop"
- },
- "videoSrc": {
- "required": false,
- "example": "/demo.mp4",
- "note": "Video to display in the animated card. Takes precedence over imageSrc if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Dashboard preview",
- "note": "Empty string marks image as decorative (aria-hidden)"
- },
- "animationBehavior": {
- "desktop": {
- "rotateX": "Animates from 20deg to 0deg based on scroll progress",
- "scale": "Animates from 1.05 to 1 based on scroll progress",
- "height": "h-[75svh] (75% of viewport height)",
- "note": "Uses Framer Motion's useScroll and useTransform for smooth scroll-linked animations"
- },
- "mobile": {
- "rotateX": "Static 20deg rotation (no animation)",
- "scale": "No scale animation",
- "height": "h-[50svh] (50% of viewport height)",
- "note": "Separate static div implementation to prevent performance issues and hydration errors"
- },
- "perspective": "1000px applied to container for 3D effect"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)",
- "props": "Partial - Additional button props like className, textClassName (optional)"
- },
- "examples": [
- "{ text: 'Get Started', onClick: () => console.log('Get Started clicked') }",
- "{ text: 'Learn More', href: 'about' }"
- ],
- "note": "Button variant is controlled by ThemeProvider's defaultButtonVariant. Border radius is controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level to maintain consistent styling across the entire site."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Hero video')",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n console.log('Get Started clicked') }, { text: 'Learn More', href: 'about' }]} \n />\n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroCarouselLogo.json b/registry/components/HeroCarouselLogo.json
deleted file mode 100644
index 9fb957b..0000000
--- a/registry/components/HeroCarouselLogo.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- "name": "HeroCarouselLogo",
- "description": "Full-screen hero section with auto-playing carousel background, large text logo at bottom that scales to fill container width, description and button row above, with progress bars and linear gradient blur overlay.",
- "constraints": {
- "textRules": {
- "logoText": {
- "required": true,
- "example": "WEBILD",
- "minChars": 2,
- "maxChars": 20
- },
- "description": {
- "required": true,
- "example": "Create stunning, responsive websites with our comprehensive component library",
- "minChars": 5,
- "maxChars": 200
- }
- },
- "mediaRules": {
- "slides": {
- "required": true,
- "example": "[{ imageSrc: '/slide1.jpg', imageAlt: 'Slide 1' }, { imageSrc: '/slide2.jpg', imageAlt: 'Slide 2' }]",
- "note": "Array of CarouselSlide objects. Each slide can have imageSrc, videoSrc, imageAlt, videoAriaLabel. Video takes precedence over image if both provided in a slide."
- },
- "autoplayDelay": {
- "required": false,
- "default": 3000,
- "note": "Milliseconds between automatic slide transitions"
- },
- "showDimOverlay": {
- "required": false,
- "default": false,
- "note": "Adds semi-transparent dark overlay (bg-background/20) over background media for improved text and logo contrast"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)",
- "props": "Partial - Additional button props like className, textClassName (optional)"
- },
- "examples": [
- "{ text: 'Get Started', href: 'https://github.com' }",
- "{ text: 'Learn More', href: 'about' }"
- ],
- "note": "Buttons are required (cannot be empty array). Button variant is controlled by ThemeProvider's defaultButtonVariant. Border radius is controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level to maintain consistent styling across the entire site."
- }
- },
- "propsSchema": {
- "logoText": "string",
- "description": "string",
- "buttons": "Array<{text: string, onClick?: () => void, href?: string}>",
- "slides": "Array<{ imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string }> - Carousel slide items",
- "autoplayDelay?": "number (default: 3000)",
- "showDimOverlay?": "boolean (default: false)",
- "logoLineHeight?": "number (default: 1.1)",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires buttons[]",
- "Requires slides[]"
- ],
- "dont": [
- "Do not use less than 5 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroLogo.json b/registry/components/HeroLogo.json
deleted file mode 100644
index c11b16a..0000000
--- a/registry/components/HeroLogo.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "name": "HeroLogo",
- "description": "Full-screen hero section with background media, large text logo at bottom that scales to fill container width, description and button row above, featuring a linear gradient blur overlay.",
- "constraints": {
- "textRules": {
- "logoText": {
- "required": true,
- "example": "Webild",
- "minChars": 2,
- "maxChars": 20
- },
- "description": {
- "required": true,
- "example": "Building the future of web design with innovative solutions",
- "minChars": 5,
- "maxChars": 200
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/hero-background.jpg",
- "note": "Background image that fills the viewport. Supports external URLs with unoptimized prop"
- },
- "videoSrc": {
- "required": false,
- "example": "/hero-background.mp4",
- "note": "Background video that fills the viewport. Takes precedence over imageSrc if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Hero background",
- "note": "Empty string marks image as decorative (aria-hidden)"
- },
- "showDimOverlay": {
- "required": false,
- "default": false,
- "note": "Adds semi-transparent dark overlay (bg-background/20) over background media for improved text and logo contrast"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)",
- "props": "Partial - Additional button props like className, textClassName (optional)"
- },
- "examples": [
- "{ text: 'Get Started', href: 'https://github.com' }",
- "{ text: 'Learn More', href: 'about' }"
- ],
- "note": "Buttons are required (cannot be empty array). Button variant is controlled by ThemeProvider's defaultButtonVariant. Border radius is controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level to maintain consistent styling across the entire site."
- }
- },
- "propsSchema": {
- "logoText": "string",
- "description": "string",
- "buttons": "Array<{text: string, onClick?: () => void, href?: string}>",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Hero video')",
- "showDimOverlay?": "boolean (default: false)",
- "logoLineHeight?": "number (default: 1.1)",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires buttons[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroLogoBillboard.json b/registry/components/HeroLogoBillboard.json
deleted file mode 100644
index 9f56bc2..0000000
--- a/registry/components/HeroLogoBillboard.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "name": "HeroLogoBillboard",
- "description": "Hero section with large text logo at top that scales to fill container width, description text, and single framed media (card or browser style) below.",
- "constraints": {
- "textRules": {
- "logoText": {
- "required": true,
- "example": "klime studio",
- "minChars": 2,
- "maxChars": 30
- },
- "description": {
- "required": true,
- "example": "we help driven founders build the brands of tomorrow through websites, product design & branding.",
- "minChars": 5,
- "maxChars": 300
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/hero-image.jpg",
- "note": "Supports external URLs with unoptimized prop"
- },
- "videoSrc": {
- "required": false,
- "example": "/hero-video.mp4",
- "note": "Takes precedence over imageSrc if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Product showcase",
- "note": "Empty string marks image as decorative (aria-hidden)"
- },
- "frameStyle": {
- "required": false,
- "options": [
- "card",
- "browser"
- ],
- "default": "card",
- "note": "'card' displays media in simple card with padding. 'browser' wraps media in browser mockup with address bar and window controls."
- }
- }
- },
- "propsSchema": {
- "logoText": "string",
- "description": "string",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Hero video')",
- "frameStyle?": "'card' | 'browser' (default: 'card')",
- "logoLineHeight?": "number (default: 1.1)",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [
- "Do not use multiple items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroLogoBillboardSplit.json b/registry/components/HeroLogoBillboardSplit.json
deleted file mode 100644
index 3282070..0000000
--- a/registry/components/HeroLogoBillboardSplit.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "name": "HeroLogoBillboardSplit",
- "description": "Hero section with split layout (description left, buttons right), large text logo that scales to fill container width, and single framed media at bottom. Supports flex-col or flex-col-reverse layout order.",
- "constraints": {
- "textRules": {
- "logoText": {
- "required": true,
- "example": "ACME",
- "minChars": 2,
- "maxChars": 30
- },
- "description": {
- "required": true,
- "example": "Create stunning, responsive websites with our comprehensive component library",
- "minChars": 5,
- "maxChars": 300
- }
- },
- "layoutRules": {
- "layoutOrder": {
- "required": true,
- "options": [
- "default",
- "reverse"
- ],
- "note": "'default' displays split section (description/buttons) then logo (flex-col). 'reverse' displays logo then split section (flex-col-reverse)."
- }
- },
- "buttonRules": {
- "buttons": {
- "required": true,
- "minItems": 1,
- "maxItems": 2,
- "note": "Only first 2 buttons are displayed using slice(0, 2). Uses theme.defaultButtonVariant for styling."
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/hero-image.jpg",
- "note": "Supports external URLs with unoptimized prop"
- },
- "videoSrc": {
- "required": false,
- "example": "/hero-video.mp4",
- "note": "Takes precedence over imageSrc if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Product showcase",
- "note": "Empty string marks image as decorative (aria-hidden)"
- },
- "frameStyle": {
- "required": false,
- "options": [
- "card",
- "browser"
- ],
- "default": "card",
- "note": "'card' displays media in simple card with padding. 'browser' wraps media in browser mockup with address bar and window controls."
- }
- }
- },
- "propsSchema": {
- "logoText": "string",
- "description": "string",
- "buttons": "Array<{text: string, onClick?: () => void, href?: string}>",
- "layoutOrder": "'default' | 'reverse'",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Hero video')",
- "frameStyle?": "'card' | 'browser' (default: 'card')",
- "logoLineHeight?": "number (default: 1.1)",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires buttons[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroOverlay.json b/registry/components/HeroOverlay.json
deleted file mode 100644
index 576feab..0000000
--- a/registry/components/HeroOverlay.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "name": "HeroOverlay",
- "description": "Full-screen hero section with background image/video overlay, circular blur effect, and configurable text positioning (center or bottom-left).",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Build Modern Web Experiences",
- "minChars": 2,
- "maxChars": 40
- },
- "description": {
- "required": true,
- "example": "Create stunning, responsive websites with our comprehensive component library",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "New Release",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/hero-background.jpg",
- "note": "Background image that fills the viewport. Supports external URLs with unoptimized prop"
- },
- "videoSrc": {
- "required": false,
- "example": "/hero-background.mp4",
- "note": "Background video that fills the viewport. Takes precedence over imageSrc if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Hero background",
- "note": "Empty string marks image as decorative (aria-hidden)"
- },
- "textPosition": {
- "required": false,
- "options": [
- "center",
- "bottom-left"
- ],
- "default": "bottom-left",
- "note": "'center' positions text in the center of viewport, 'bottom-left' positions text at bottom-left corner"
- },
- "showBlur": {
- "required": false,
- "default": true,
- "note": "Controls circular blur effect with radial gradient. Blur follows text position (centered or bottom-left corner)"
- },
- "showDimOverlay": {
- "required": false,
- "default": false,
- "note": "Adds semi-transparent dark overlay (bg-background/20) over background media for improved text contrast"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)",
- "props": "Partial - Additional button props like className, textClassName (optional)"
- },
- "examples": [
- "{ text: 'Get Started', href: 'https://example.com' }",
- "{ text: 'Learn More', href: 'about' }"
- ],
- "note": "Button variant is controlled by ThemeProvider's defaultButtonVariant. Border radius is controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level to maintain consistent styling across the entire site."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Hero video')",
- "textPosition?": "'center' | 'bottom-left' (default: 'bottom-left')",
- "showDimOverlay?": "boolean (default: false)",
- "showBlur?": "boolean (default: true)",
- "ariaLabel?": "string (default: 'Hero section')",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroSplit.json b/registry/components/HeroSplit.json
deleted file mode 100644
index b470bf7..0000000
--- a/registry/components/HeroSplit.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
- "name": "HeroSplit",
- "description": "Split-layout hero section with text content on one side and single image/video on the other, with responsive centering.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Build Better Products",
- "minChars": 2,
- "maxChars": 36
- },
- "description": {
- "required": true,
- "example": "Create exceptional user experiences with our design system",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "New Release",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/hero-image.jpg",
- "note": "Supports external URLs with unoptimized prop"
- },
- "videoSrc": {
- "required": false,
- "example": "/hero-video.mp4",
- "note": "Takes precedence over imageSrc if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Product showcase",
- "note": "Empty string marks image as decorative (aria-hidden)"
- },
- "imagePosition": {
- "required": false,
- "options": [
- "left",
- "right"
- ],
- "default": "right"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional). External URLs (https://, http://, www.) open in new tab. Internal values (e.g., 'about', 'contact') scroll to #about, #contact sections",
- "onClick": "() => void - Additional click handler (optional)",
- "props": "Partial - Additional button props like className, textClassName (optional)"
- },
- "examples": [
- "{ text: 'Get Started', href: 'https://example.com' }",
- "{ text: 'Learn More', href: 'about' }"
- ],
- "note": "Button variant is controlled by ThemeProvider's defaultButtonVariant. Border radius is controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level to maintain consistent styling across the entire site."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "avatars?": "Avatar[] - Array of avatar objects with src and alt properties",
- "avatarText?": "string - Text displayed next to the avatar group",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Hero video')",
- "ariaLabel?": "string (default: 'Hero section')",
- "imagePosition?": "'left' | 'right' (default: 'right')",
- "fixedMediaHeight?": "boolean (default: true) - When true, media wrapper is aspect-square on mobile and md:h-[65vh] on desktop",
- "className?": "string"
- },
- "usageExample": "\n \n",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Requires buttons?[]",
- "Requires avatars?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/HeroSplitKpi.json b/registry/components/HeroSplitKpi.json
deleted file mode 100644
index f4d9885..0000000
--- a/registry/components/HeroSplitKpi.json
+++ /dev/null
@@ -1,105 +0,0 @@
-{
- "name": "HeroSplitKpi",
- "description": "Split-layout hero with media image/video and three KPI metric boxes positioned around it.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "The Future of Supply Chain",
- "minChars": 2,
- "maxChars": 36
- },
- "description": {
- "required": true,
- "example": "Ship globally within 3 days post-production with smart fulfillment",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "Trusted by 150+ Brands",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "kpiRules": {
- "kpis": {
- "required": true,
- "note": "Array of exactly 3 KPI items. Each item has 'value' (the metric) and 'label' (description)",
- "structure": {
- "value": "string - The metric value (e.g., '99.8%', '10x', '4-10 Days')",
- "label": "string - Description of the metric (e.g., 'Order Accuracy')"
- },
- "example": "[{ value: '4-10 Days', label: 'Worldwide Delivery' }, { value: '99.8%', label: 'Order Accuracy' }, { value: '10x', label: 'Faster Lead Times' }]"
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/hero-image.jpg",
- "note": "Image displayed in scaled card wrapper"
- },
- "videoSrc": {
- "required": false,
- "example": "/hero-video.mp4",
- "note": "Video takes precedence over image if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "Product showcase",
- "note": "Empty string marks image as decorative (aria-hidden)"
- },
- "imagePosition": {
- "required": false,
- "options": [
- "left",
- "right"
- ],
- "default": "right"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Additional click handler (optional)"
- }
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "kpis": "[KpiItem, KpiItem, KpiItem] - Array of exactly 3 KPI items with value and label",
- "enableKpiAnimation": "boolean - Enable/disable mouse-following animation on KPI boxes",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "avatars?": "Avatar[] - Array of avatar objects with src and alt properties",
- "avatarText?": "string - Text displayed next to the avatar group",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'Hero video')",
- "ariaLabel?": "string (default: 'Hero section')",
- "imagePosition?": "'left' | 'right' (default: 'right')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires kpis[]",
- "Requires buttons?[]",
- "Requires avatars?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/InlineImageSplitTextAbout.json b/registry/components/InlineImageSplitTextAbout.json
deleted file mode 100644
index 40cf29f..0000000
--- a/registry/components/InlineImageSplitTextAbout.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "name": "InlineImageSplitTextAbout",
- "description": "About section with dynamic heading composed of alternating text and inline image segments.",
- "constraints": {
- "textRules": {
- "heading[].content": {
- "required": "text segments require content",
- "example": "Building the future with",
- "minChars": 1,
- "maxChars": 100,
- "note": "Each text segment in the heading array"
- }
- },
- "imageRules": {
- "heading[].src": {
- "required": "image segments require src",
- "example": "/brand/logo.png or https://example.com/image.png",
- "note": "Supports local paths and external URLs. External URLs are rendered with unoptimized flag."
- },
- "heading[].alt": {
- "required": false,
- "example": "Company logo",
- "note": "Optional alt text for images. Omit or use empty string for decorative images (aria-hidden=true when empty)."
- }
- },
- "headingRules": {
- "minSegments": 1,
- "note": "heading array can contain any number of text and image segments in any order. Images automatically alternate rotation direction (1st: -rotate-12, 2nd: rotate-12, etc.)."
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "Button variant controlled by ThemeProvider's defaultButtonVariant. Border radius controlled by ThemeProvider's borderRadius."
- }
- },
- "propsSchema": {
- "heading": "Array<{ type: 'text'; content: string } | { type: 'image'; src: string; alt?: string }>",
- "buttons?": "Array<{ text: string, onClick?: () => void, href?: string, props?: Partial> }>",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'About section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\n\n \n",
- "do": [
- "Use for about pages",
- "Use for company information",
- "Requires heading[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/Input.json b/registry/components/Input.json
deleted file mode 100644
index 85fc7cf..0000000
--- a/registry/components/Input.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "Input",
- "description": "Styled text input field with secondary-button styling and rounded-theme borders.",
- "constraints": {
- "textRules": {
- "placeholder": {
- "required": false,
- "example": "Enter your name",
- "minChars": 2,
- "maxChars": 50
- }
- }
- },
- "propsSchema": {
- "value": "string (required)",
- "onChange": "(value: string) => void (required)",
- "type?": "string (default: 'text')",
- "placeholder?": "string",
- "required?": "boolean (default: false)",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "className?": "string"
- },
- "usageExample": " setName(value)} type=\"text\" placeholder=\"Name\" required />",
- "do": [
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MediaAbout.json b/registry/components/MediaAbout.json
deleted file mode 100644
index 3dba4ea..0000000
--- a/registry/components/MediaAbout.json
+++ /dev/null
@@ -1,84 +0,0 @@
-{
- "name": "MediaAbout",
- "description": "Full-width media about section with centered TextBox content overlaid on image or video.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Elevate Your Experience",
- "minChars": 2,
- "maxChars": 100
- },
- "description": {
- "required": true,
- "example": "Discover a new way to connect, create, and inspire with our innovative solutions.",
- "minChars": 10,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "About Us",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/about-hero.jpg",
- "note": "Either imageSrc or videoSrc should be provided. Image is recommended for static visuals."
- },
- "videoSrc": {
- "required": false,
- "example": "/about-video.mp4",
- "note": "Either imageSrc or videoSrc should be provided. Video is recommended for motion content."
- },
- "imageAlt": {
- "required": false,
- "example": "Our team in action",
- "note": "Alt text for image. Defaults to empty string (decorative)."
- },
- "videoAriaLabel": {
- "required": false,
- "example": "About us video",
- "note": "ARIA label for video accessibility."
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "minButtons": 0,
- "note": "Buttons are part of TextBox, centered and overlaid on media. First button is primary, second is secondary. Button variant controlled by ThemeProvider's defaultButtonVariant."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string",
- "videoAriaLabel?": "string",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'About section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for about pages",
- "Use for company information",
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MediaSplitTabsAbout.json b/registry/components/MediaSplitTabsAbout.json
deleted file mode 100644
index c416874..0000000
--- a/registry/components/MediaSplitTabsAbout.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
- "name": "MediaSplitTabsAbout",
- "description": "Split-layout about section with interactive tabs, animated descriptions, and 60/40 grid with media.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Why Choose Us",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": false,
- "example": "We deliver excellence across every aspect of our work",
- "minChars": 10,
- "maxChars": 200
- }
- },
- "tabRules": {
- "minTabs": 2,
- "maxTabs": 5,
- "structure": {
- "id": "string - Unique identifier (required)",
- "label": "string - Tab button text (required)",
- "description": "string - Description shown when tab is active (required)"
- },
- "note": "First tab is selected by default. Tab indicator dot animates smoothly between tabs."
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/team-photo.jpg",
- "note": "Either imageSrc or videoSrc should be provided."
- },
- "videoSrc": {
- "required": false,
- "example": "/intro-video.mp4",
- "note": "Either imageSrc or videoSrc should be provided."
- },
- "imageAlt": {
- "required": false,
- "example": "Team collaboration",
- "note": "Alt text for image."
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Introduction video",
- "note": "ARIA label for video accessibility."
- },
- "imagePosition": {
- "required": false,
- "default": "right",
- "options": [
- "left",
- "right"
- ],
- "note": "Position of media card relative to content card."
- }
- }
- },
- "propsSchema": {
- "title": "string",
- "description?": "string",
- "tabs": "Array<{ id: string, label: string, description: string }> - Tab options for content switching",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string",
- "videoAriaLabel?": "string",
- "imagePosition?": "'left' | 'right' (default: 'right')",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'About section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for about pages",
- "Use for company information",
- "Requires tabs[]"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MetricCardEleven.json b/registry/components/MetricCardEleven.json
deleted file mode 100644
index 57cacef..0000000
--- a/registry/components/MetricCardEleven.json
+++ /dev/null
@@ -1,95 +0,0 @@
-{
- "name": "MetricCardEleven",
- "description": "Metrics section with paired text and media cards. Each metric displays a value card alongside an image/video card in a 2-column layout.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Impact",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "See the results we've delivered for our clients",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Results",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "metricRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "value": {
- "required": true,
- "example": "10M+",
- "minChars": 1,
- "maxChars": 15,
- "note": "Large metric value displayed prominently at top of text card"
- },
- "title": {
- "required": true,
- "example": "Organic Views",
- "minChars": 2,
- "maxChars": 50,
- "note": "Metric title displayed at bottom of text card, truncates"
- },
- "description": {
- "required": true,
- "example": "Growth through smart content strategy",
- "minChars": 5,
- "maxChars": 100,
- "note": "Metric description below accent divider, truncates to single line"
- },
- "media": {
- "required": true,
- "note": "Either imageSrc or videoSrc must be provided for each metric"
- }
- },
- "itemRules": {
- "minItems": 1,
- "maxItems": 6,
- "recommendedItems": "2-4"
- }
- },
- "propsSchema": {
- "metrics": "Array<{ id: string, value: string, title: string, description: string, imageSrc?: string, imageAlt?: string, videoSrc?: string, videoAriaLabel?: string }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal'",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image'",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Metrics section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 4 items",
- "Do not use more than 6 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MetricCardFourteen.json b/registry/components/MetricCardFourteen.json
deleted file mode 100644
index c74626c..0000000
--- a/registry/components/MetricCardFourteen.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "name": "MetricCardFourteen",
- "description": "Metrics section with animated title, tag badge, and metric cards with large values and descriptions.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "We're committed to sustainability and reducing our environmental impact.",
- "minChars": 10,
- "maxChars": 200
- },
- "tag": {
- "required": true,
- "example": "Impact",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "metricRules": {
- "id": {
- "required": true,
- "example": "1",
- "note": "Unique identifier for each metric"
- },
- "value": {
- "required": true,
- "example": "16x",
- "minChars": 1,
- "maxChars": 10,
- "note": "Large metric value displayed prominently"
- },
- "description": {
- "required": true,
- "example": "By using 80% less steel, we've lowered our carbon footprint by 16x.",
- "minChars": 10,
- "maxChars": 200,
- "note": "Description text below the divider"
- }
- },
- "itemRules": {
- "minItems": 1,
- "maxItems": 4,
- "recommendedItems": 2
- }
- },
- "propsSchema": {
- "title": "string",
- "tag": "string",
- "metrics": "Array<{ id: string, value: string, description: string }>",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Metrics section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]"
- ],
- "dont": [
- "Do not use more than 4 items",
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MetricCardOne.json b/registry/components/MetricCardOne.json
deleted file mode 100644
index 08d1471..0000000
--- a/registry/components/MetricCardOne.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "name": "MetricCardOne",
- "description": "Metric card with large gradient value text, title, description, and icon badge.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Impact",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Key metrics that showcase our growth and success",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Statistics",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "metricRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "value": {
- "required": true,
- "example": "100",
- "minChars": 1,
- "maxChars": 5,
- "note": "Large metric value displayed with gradient effect."
- },
- "title": {
- "required": true,
- "example": "million",
- "minChars": 2,
- "maxChars": 30,
- "note": "Metric label displayed below value with negative margin overlap"
- },
- "description": {
- "required": true,
- "example": "Active users worldwide",
- "minChars": 5,
- "maxChars": 150,
- "note": "Supporting description text displayed below title"
- },
- "icon": {
- "required": true,
- "example": "TrendingUp",
- "note": "Lucide icon displayed in bottom-left corner with primary-button styling"
- }
- }
- },
- "propsSchema": {
- "metrics": "Array<{ id: string, value: string, title: string, description: string, icon: LucideIcon }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Metrics section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MetricCardSeven.json b/registry/components/MetricCardSeven.json
deleted file mode 100644
index fadbaf5..0000000
--- a/registry/components/MetricCardSeven.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
- "name": "MetricCardSeven",
- "description": "Metric card with large accent value, title, and feature list with checkmarks.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Our Impact",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Key metrics that showcase our growth",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Stats",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "metricRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "value": {
- "required": true,
- "example": "15+",
- "minChars": 1,
- "maxChars": 10,
- "note": "Large metric value displayed at top of card in accent color"
- },
- "title": {
- "required": true,
- "example": "Years in business consulting",
- "minChars": 5,
- "maxChars": 60,
- "note": "Metric description displayed below value"
- },
- "items": {
- "required": true,
- "example": "['8+ industries served', '5+ countries reached']",
- "minItems": 1,
- "maxItems": 5,
- "note": "Array of supporting bullet points displayed with checkmarks"
- }
- }
- },
- "propsSchema": {
- "metrics": "Array<{ id: string, value: string, title: string, items: string[] }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Metrics section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for pricing pages",
- "Use for subscription tiers",
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MetricCardTen.json b/registry/components/MetricCardTen.json
deleted file mode 100644
index f5475e5..0000000
--- a/registry/components/MetricCardTen.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "name": "MetricCardTen",
- "description": "Job listing style metric cards with title, subtitle, category indicator, value, and optional footer buttons.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Open Positions",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Join our team and help shape the future of AI",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Careers",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "metricRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "title": {
- "required": true,
- "example": "Senior Software Engineer, Platform",
- "minChars": 5,
- "maxChars": 80,
- "note": "Main title displayed at top of card, truncates if too long"
- },
- "subtitle": {
- "required": true,
- "example": "San Francisco, CA · Full-time · Remote eligible",
- "minChars": 5,
- "maxChars": 100,
- "note": "Secondary info like location, type, or details"
- },
- "category": {
- "required": true,
- "example": "Engineering",
- "minChars": 2,
- "maxChars": 30,
- "note": "Category label with dot indicator, truncates on overflow"
- },
- "value": {
- "required": true,
- "example": "$185K – $265K",
- "minChars": 1,
- "maxChars": 25,
- "note": "Value displayed on bottom right (salary, price, etc.)"
- },
- "buttons": {
- "required": false,
- "maxItems": 2,
- "note": "Optional buttons in footer section with accent background"
- }
- },
- "itemRules": {
- "minItems": 1,
- "maxItems": 12,
- "recommendedItems": "3-6"
- }
- },
- "propsSchema": {
- "metrics": "Array<{ id: string, title: string, subtitle: string, category: string, value: string, buttons?: Array<{text: string, onClick?: () => void, href?: string}> }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal'",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'centered' | 'left' | 'right' | 'spread'",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Metrics section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for pricing pages",
- "Use for subscription tiers",
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 12 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MetricCardThree.json b/registry/components/MetricCardThree.json
deleted file mode 100644
index 2e7dfa5..0000000
--- a/registry/components/MetricCardThree.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "name": "MetricCardThree",
- "description": "Metric card with icon badge, title header, and large value display.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Performance Metrics",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Track your key performance indicators",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "KPIs",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "metricRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "icon": {
- "required": true,
- "example": "TrendingUp",
- "note": "Lucide icon displayed in primary-button styled circular badge"
- },
- "title": {
- "required": true,
- "example": "Conversions",
- "minChars": 2,
- "maxChars": 30,
- "note": "Metric category/label displayed next to icon"
- },
- "value": {
- "required": true,
- "example": "7,000+",
- "minChars": 1,
- "maxChars": 15,
- "note": "Large metric value displayed below icon and title"
- }
- }
- },
- "propsSchema": {
- "metrics": "Array<{ id: string, icon: LucideIcon, title: string, value: string }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Metrics section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MetricCardTwo.json b/registry/components/MetricCardTwo.json
deleted file mode 100644
index edeb636..0000000
--- a/registry/components/MetricCardTwo.json
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- "name": "MetricCardTwo",
- "description": "Simple metric card with large value and description text.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Key Metrics",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Performance indicators at a glance",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Stats",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "metricRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "value": {
- "required": true,
- "example": "98%",
- "minChars": 1,
- "maxChars": 15,
- "note": "Large metric value displayed prominently"
- },
- "description": {
- "required": true,
- "example": "Customer Satisfaction Rate",
- "minChars": 5,
- "maxChars": 100,
- "note": "Metric label/description displayed below value"
- }
- }
- },
- "propsSchema": {
- "metrics": "Array<{ id: string, value: string, description: string }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Metrics section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/MetricSplitMediaAbout.json b/registry/components/MetricSplitMediaAbout.json
deleted file mode 100644
index 46ef7bc..0000000
--- a/registry/components/MetricSplitMediaAbout.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "name": "MetricSplitMediaAbout",
- "description": "Split-layout about section with text, metrics cards, and media in a 2-column grid.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "We help automate what matters most",
- "minChars": 10,
- "maxChars": 100
- },
- "description": {
- "required": true,
- "example": "Hamilton, a growing e-commerce business, was overwhelmed by repetitive tasks. We built custom automation that integrated with their tools.",
- "minChars": 20,
- "maxChars": 500
- },
- "tag": {
- "required": false,
- "example": "Case study",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "metricRules": {
- "minMetrics": 1,
- "maxMetrics": 2,
- "structure": {
- "value": "string - Large metric value (required, e.g., '50+', '40%', '10x')",
- "title": "string - Metric label/title (required, e.g., 'Hours saved every month')"
- },
- "note": "Provide 1-2 metrics for optimal layout. Grid displays 1 metric as single column, 2 metrics as 2 columns on desktop."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "metrics": "Array<{ value: string, title: string }>",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string",
- "videoAriaLabel?": "string (default: 'About section video')",
- "ariaLabel?": "string (default: 'About section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\nimport { Sparkles } from 'lucide-react';\n\n\n \n",
- "do": [
- "Use for about pages",
- "Use for company information",
- "Use for statistics displays",
- "Use for achievement showcases",
- "Requires metrics[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/NavbarLayoutFloatingInline.json b/registry/components/NavbarLayoutFloatingInline.json
deleted file mode 100644
index 03f0992..0000000
--- a/registry/components/NavbarLayoutFloatingInline.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "name": "NavbarLayoutFloatingInline",
- "description": "Floating inline navbar with centered links, left-aligned logo, and right-aligned call-to-action button.",
- "constraints": {
- "minLinks": 3,
- "maxLinks": 6,
- "preferredCount": 4,
- "brandRules": {
- "required": false,
- "minChars": 2,
- "maxChars": 20,
- "example": "Webild",
- "fallbackBehavior": "Shows brandName text"
- },
- "buttonRules": {
- "text": {
- "required": true,
- "minChars": 2,
- "maxChars": 24,
- "example": "Get Started"
- },
- "href": {
- "required": false,
- "format": "url | section-id",
- "example": "https://webild.io"
- },
- "onClick": {
- "required": false,
- "note": "Optional click handler"
- }
- },
- "linkRules": {
- "name": {
- "required": true,
- "minChars": 2,
- "maxChars": 15,
- "example": "About"
- },
- "id": {
- "required": true,
- "format": "section-id | url",
- "examples": [
- "about",
- "services",
- "https://github.com",
- "www.example.com"
- ],
- "behavior": "Internal IDs scroll to section, URLs open in new tab"
- }
- }
- },
- "propsSchema": {
- "navItems": "Array<{name: string, id: string}>",
- "brandName?": "string (default: 'Webild')",
- "button": "{text: string, onClick?: () => void, href?: string}",
- "className?": "string (default: '')"
- },
- "usageExample": "",
- "do": [
- "Use for general use",
- "Requires navItems[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/NavbarLayoutFloatingOverlay.json b/registry/components/NavbarLayoutFloatingOverlay.json
deleted file mode 100644
index 16b67d5..0000000
--- a/registry/components/NavbarLayoutFloatingOverlay.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "name": "NavbarLayoutFloatingOverlay",
- "description": "Floating rounded navbar with right‑side CTA and a circular menu button. Clicking the button opens a rounded overlay panel with the site menu.",
- "constraints": {
- "minLinks": 2,
- "maxLinks": 8,
- "preferredCount": 5,
- "brandRules": {
- "required": false,
- "minChars": 2,
- "maxChars": 20,
- "example": "Webild",
- "fallbackBehavior": "Shows brandName text"
- },
- "buttonRules": {
- "text": {
- "required": true,
- "minChars": 2,
- "maxChars": 24,
- "example": "Get Started"
- },
- "href": {
- "required": false,
- "format": "url | section-id",
- "example": "https://webild.io"
- },
- "onClick": {
- "required": false,
- "note": "Optional click handler"
- }
- },
- "linkRules": {
- "name": {
- "required": true,
- "minChars": 2,
- "maxChars": 15,
- "example": "About"
- },
- "id": {
- "required": true,
- "format": "section-id | url",
- "examples": [
- "about",
- "services",
- "https://github.com",
- "www.example.com"
- ],
- "behavior": "Internal IDs scroll to section, URLs open in new tab"
- }
- }
- },
- "propsSchema": {
- "navItems": "Array<{name: string, id: string}>",
- "className?": "string",
- "brandName?": "string (default: 'Webild')",
- "button": "{text: string, onClick?: () => void, href?: string}"
- },
- "usageExample": "",
- "do": [
- "Use for general use",
- "Requires navItems[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/NavbarStyleApple.json b/registry/components/NavbarStyleApple.json
deleted file mode 100644
index 99fbdf7..0000000
--- a/registry/components/NavbarStyleApple.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "NavbarStyleApple",
- "description": "Minimal Apple-style navigation bar with brand/logo on the left and inline navigation links aligned right.",
- "constraints": {
- "minLinks": 3,
- "maxLinks": 7,
- "preferredCount": 5,
- "brandRules": {
- "required": false,
- "minChars": 2,
- "maxChars": 20,
- "example": "Webild",
- "fallbackBehavior": "Shows brandName text"
- },
- "linkRules": {
- "name": {
- "required": true,
- "minChars": 2,
- "maxChars": 15,
- "example": "About"
- },
- "id": {
- "required": true,
- "format": "section-id | url",
- "examples": [
- "about",
- "services",
- "https://github.com",
- "www.example.com"
- ],
- "behavior": "Internal IDs scroll to section, URLs open in new tab"
- }
- }
- },
- "propsSchema": {
- "navItems": "Array<{name: string, id: string}>",
- "brandName?": "string (default: 'Webild')"
- },
- "usageExample": "",
- "do": [
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires navItems[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/NavbarStyleCentered.json b/registry/components/NavbarStyleCentered.json
deleted file mode 100644
index 9785b4b..0000000
--- a/registry/components/NavbarStyleCentered.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "name": "NavbarStyleCentered",
- "description": "Centered dropdown navigation with animated expand/collapse and staggered link reveals.",
- "constraints": {
- "minLinks": 3,
- "maxLinks": 6,
- "preferredCount": 5,
- "brandRules": {
- "required": false,
- "minChars": 2,
- "maxChars": 20,
- "example": "Webild",
- "fallbackBehavior": "Shows brandName text"
- },
- "buttonRules": {
- "text": {
- "required": true,
- "minChars": 2,
- "maxChars": 15,
- "example": "Get Started"
- },
- "href": {
- "required": false,
- "format": "url | section-id",
- "example": "contact"
- },
- "onClick": {
- "required": false,
- "note": "Optional click handler"
- }
- },
- "linkRules": {
- "name": {
- "required": true,
- "minChars": 2,
- "maxChars": 15,
- "example": "About"
- },
- "id": {
- "required": true,
- "format": "section-id | url",
- "examples": [
- "about",
- "services",
- "https://github.com",
- "www.example.com"
- ],
- "behavior": "Internal IDs scroll to section, URLs open in new tab"
- }
- }
- },
- "propsSchema": {
- "navItems": "Array<{name: string, id: string}>",
- "button": "{text: string, onClick?: () => void, href?: string}",
- "brandName?": "string (default: 'Webild')",
- "className?": "string (default: '')"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires navItems[]"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/NavbarStyleFullscreen.json b/registry/components/NavbarStyleFullscreen.json
deleted file mode 100644
index b5ec216..0000000
--- a/registry/components/NavbarStyleFullscreen.json
+++ /dev/null
@@ -1,67 +0,0 @@
-{
- "name": "NavbarStyleFullscreen",
- "description": "Fullscreen overlay navigation with animated menu reveal and staggered link animations.",
- "constraints": {
- "minLinks": 3,
- "maxLinks": 5,
- "preferredCount": 5,
- "brandRules": {
- "required": false,
- "minChars": 2,
- "maxChars": 20,
- "example": "Webild",
- "fallbackBehavior": "Shows brandName text"
- },
- "linkRules": {
- "name": {
- "required": true,
- "minChars": 2,
- "maxChars": 15,
- "example": "About"
- },
- "id": {
- "required": true,
- "format": "section-id | url",
- "examples": [
- "about",
- "services",
- "https://github.com",
- "www.example.com"
- ],
- "behavior": "Internal IDs scroll to section, URLs open in new tab"
- }
- },
- "bottomTextRules": {
- "bottomLeftText": {
- "required": false,
- "minChars": 2,
- "maxChars": 30,
- "example": "Global Community"
- },
- "bottomRightText": {
- "required": false,
- "minChars": 2,
- "maxChars": 30,
- "example": "hello@example.com"
- }
- }
- },
- "propsSchema": {
- "navItems": "Array<{name: string, id: string}>",
- "brandName?": "string (default: 'Webild')",
- "bottomLeftText?": "string (default: 'Global Community')",
- "bottomRightText?": "string (default: 'hello@example.com')"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Requires navItems[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/NavbarStyleMinimal.json b/registry/components/NavbarStyleMinimal.json
deleted file mode 100644
index a7f1cdb..0000000
--- a/registry/components/NavbarStyleMinimal.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "NavbarStyleMinimal",
- "description": "A minimal navbar with left-aligned logo and optional right-aligned call-to-action button.",
- "constraints": {
- "brandRules": {
- "required": false,
- "minChars": 2,
- "maxChars": 20,
- "example": "Webild",
- "fallbackBehavior": "Shows brandName text"
- },
- "buttonRules": {
- "text": {
- "required": true,
- "minChars": 2,
- "maxChars": 24,
- "example": "Get Started"
- },
- "href": {
- "required": false,
- "format": "url | section-id",
- "example": "https://webild.io"
- },
- "onClick": {
- "required": false,
- "note": "Optional click handler"
- }
- }
- },
- "propsSchema": {
- "brandName?": "string (default: 'Webild')",
- "button": "{text: string, onClick?: () => void, href?: string}",
- "className?": "string (default: '')"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/PlainBackground.json b/registry/components/PlainBackground.json
deleted file mode 100644
index 436c889..0000000
--- a/registry/components/PlainBackground.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "PlainBackground",
- "description": "Simple solid background using theme background color.",
- "constraints": {},
- "propsSchema": {
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/PricingCardEight.json b/registry/components/PricingCardEight.json
deleted file mode 100644
index b75e418..0000000
--- a/registry/components/PricingCardEight.json
+++ /dev/null
@@ -1,84 +0,0 @@
-{
- "name": "PricingCardEight",
- "description": "Pricing card with nested card layout featuring badge, price, buttons in secondary-button container, and feature list below.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Choose Your Plan",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Select the perfect plan for your needs",
- "minChars": 10,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "Pricing",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "planRules": {
- "minPlans": 1,
- "maxPlans": 6,
- "structure": {
- "id": "string - Unique identifier (required)",
- "badge": "string - Badge text, e.g., 'Most Popular' (required)",
- "badgeIcon": "LucideIcon - Optional icon for badge",
- "price": "string - Price display, e.g., '$29/mo' (required)",
- "subtitle": "string - Subtitle below price, e.g., 'Perfect for small teams' (required)",
- "buttons": "Array<{text: string, onClick?: () => void, href?: string}> - Action buttons, max 2 (required)",
- "features": "string[] - List of features included (required)"
- },
- "note": "Each plan displays in a nested card layout with secondary-button styling for the top section."
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "Buttons render full-width inside secondary-button container. Button variant controlled by ThemeProvider."
- }
- },
- "propsSchema": {
- "plans": "Array<{ id: string, badge: string, badgeIcon?: LucideIcon, price: string, subtitle: string, buttons: Array<{text: string, onClick?: () => void, href?: string}>, features: string[] }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal'",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image'",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Pricing section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for pricing pages",
- "Use for subscription tiers",
- "Requires plans[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/PricingCardFive.json b/registry/components/PricingCardFive.json
deleted file mode 100644
index 58bd7cc..0000000
--- a/registry/components/PricingCardFive.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "name": "PricingCardFive",
- "description": "Vertical stack pricing cards with split layout showing plan details and feature checklist.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Simple, Transparent Pricing",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Choose the plan that fits your needs",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Pricing",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "planRules": {
- "id": {
- "required": true,
- "example": "monthly-retainer",
- "minChars": 1,
- "maxChars": 30
- },
- "tag": {
- "required": true,
- "example": "Monthly Retainer Plan",
- "minChars": 2,
- "maxChars": 40
- },
- "price": {
- "required": true,
- "example": "$5,000",
- "minChars": 1,
- "maxChars": 20
- },
- "period": {
- "required": true,
- "example": "/m",
- "minChars": 1,
- "maxChars": 10
- },
- "description": {
- "required": true,
- "example": "Scale design, no-code builds & copy quicker than recruiting in-house.",
- "minChars": 10,
- "maxChars": 200
- },
- "button": {
- "required": true,
- "note": "ButtonConfig with text and href or onClick"
- },
- "featuresTitle": {
- "required": true,
- "example": "What's Included:",
- "minChars": 2,
- "maxChars": 50
- },
- "features": {
- "required": true,
- "example": [
- "Unlimited design requests",
- "48-hour turnaround"
- ],
- "note": "Array of feature strings displayed as checklist"
- }
- }
- },
- "propsSchema": {
- "plans": "Array<{ id: string, tag: string, tagIcon?: LucideIcon, price: string, period: string, description: string, button: {text: string, onClick?: () => void, href?: string}, featuresTitle: string, features: string[] }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Pricing section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for pricing pages",
- "Use for subscription tiers",
- "Requires plans[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/PricingCardNine.json b/registry/components/PricingCardNine.json
deleted file mode 100644
index 43056cd..0000000
--- a/registry/components/PricingCardNine.json
+++ /dev/null
@@ -1,99 +0,0 @@
-{
- "name": "PricingCardNine",
- "description": "Pricing cards with image, price tag, title, feature checklist, and CTA button.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Coaching Plans",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Choose the plan that fits your goals",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Pricing",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "planRules": {
- "id": {
- "required": true,
- "example": "basic",
- "minChars": 1,
- "maxChars": 30
- },
- "title": {
- "required": true,
- "example": "Basic",
- "minChars": 2,
- "maxChars": 40
- },
- "price": {
- "required": true,
- "example": "$59",
- "minChars": 1,
- "maxChars": 20
- },
- "period": {
- "required": true,
- "example": "/month",
- "minChars": 1,
- "maxChars": 10
- },
- "imageSrc": {
- "required": true,
- "example": "/images/coaching-basic.jpg",
- "note": "Image for the plan card"
- },
- "button": {
- "required": true,
- "note": "ButtonConfig with text and href or onClick"
- },
- "features": {
- "required": true,
- "example": [
- "Free initial consultation",
- "Weekly checking"
- ],
- "note": "Array of feature strings displayed as checklist"
- }
- }
- },
- "propsSchema": {
- "plans": "Array<{ id: string, title: string, price: string, period: string, features: string[], button: {text: string, onClick?: () => void, href?: string}, imageSrc: string, imageAlt?: string }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Pricing section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for pricing pages",
- "Use for subscription tiers",
- "Requires plans[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/PricingCardOne.json b/registry/components/PricingCardOne.json
deleted file mode 100644
index 6209ebf..0000000
--- a/registry/components/PricingCardOne.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "name": "PricingCardOne",
- "description": "Pricing card with badge, price, subtitle, and feature list with checkmarks.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Choose Your Plan",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Select the perfect plan for your needs",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Pricing",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "pricingPlanRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "badge": {
- "required": true,
- "example": "Most Popular",
- "minChars": 2,
- "maxChars": 30,
- "note": "Required for visual consistency across all cards"
- },
- "price": {
- "required": true,
- "example": "$29/mo",
- "minChars": 1,
- "maxChars": 20
- },
- "subtitle": {
- "required": true,
- "example": "Perfect for small teams",
- "minChars": 5,
- "maxChars": 100,
- "note": "Required for visual consistency across all cards"
- },
- "features": {
- "required": true,
- "example": [
- "Up to 10 team members",
- "100GB storage",
- "Priority support"
- ],
- "note": "Array of feature strings, required for visual consistency"
- },
- "badgeIcon": {
- "required": false,
- "example": "Sparkles",
- "note": "Optional Lucide icon to display next to badge"
- }
- }
- },
- "propsSchema": {
- "plans": "Array<{ id: string, badge: string, badgeIcon?: LucideIcon, price: string, subtitle: string, features: string[] }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Pricing section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for pricing pages",
- "Use for subscription tiers",
- "Requires plans[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/PricingCardThree.json b/registry/components/PricingCardThree.json
deleted file mode 100644
index 8288ffd..0000000
--- a/registry/components/PricingCardThree.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "name": "PricingCardThree",
- "description": "Pricing card with optional floating badge, price, plan name, two CTA buttons, and feature list.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Choose Your Plan",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Select the perfect plan for your needs",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Pricing",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "pricingPlanRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "badge": {
- "required": false,
- "example": "Most popular plan",
- "minChars": 2,
- "maxChars": 40,
- "note": "Optional badge that floats above the card. Can be on ANY plan. Always exists but uses visible/invisible for consistent spacing."
- },
- "badgeIcon": {
- "required": false,
- "example": "Sparkles",
- "note": "Optional Lucide icon to display next to badge"
- },
- "price": {
- "required": true,
- "example": "$29/mo",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Business plan",
- "minChars": 2,
- "maxChars": 50,
- "note": "Plan name displayed below price"
- },
- "buttons": {
- "required": true,
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "First button (index 0) = primary-button, second (index 1) = secondary-button. Button variant controlled by ThemeProvider's defaultButtonVariant. Border radius controlled by ThemeProvider's borderRadius. All sections should be wrapped in a single ThemeProvider at the app/page level."
- },
- "features": {
- "required": true,
- "example": [
- "Up to 10 team members",
- "100GB storage",
- "Priority support"
- ],
- "note": "Array of feature strings, required for visual consistency"
- }
- }
- },
- "propsSchema": {
- "plans": "Array<{ id: string, badge?: string, badgeIcon?: LucideIcon, price: string, name: string, buttons: Array<{text: string, onClick?: () => void, href?: string}>, features: string[] }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Pricing section')",
- "className?": "string"
- },
- "usageExample": " console.log('clicked') }, { text: 'Chat to sales', onClick: () => console.log('chat') }], features: ['Up to 10 users', '20GB storage', 'Email support'] }, { id: '2', badge: 'Most popular plan', badgeIcon: Sparkles, price: '$20/mo', name: 'Business plan', buttons: [{ text: 'Get started', onClick: () => console.log('clicked') }, { text: 'Chat to sales', onClick: () => console.log('chat') }], features: ['Up to 20 users', '40GB storage', 'Priority support'] }]} title=\"Choose Your Plan\" description=\"Find the perfect plan for your needs\" textboxLayout=\"default\" animationType=\"slide-up\" useInvertedBackground={\"noInvert\"} />",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for pricing pages",
- "Use for subscription tiers",
- "Requires plans[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/PricingCardTwo.json b/registry/components/PricingCardTwo.json
deleted file mode 100644
index 96ffcc6..0000000
--- a/registry/components/PricingCardTwo.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "name": "PricingCardTwo",
- "description": "Pricing card with badge, price, subtitle, two CTA buttons, and feature list with checkmarks.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Choose Your Plan",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Select the perfect plan for your needs",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Pricing",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "pricingPlanRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "badge": {
- "required": true,
- "example": "Business Plan",
- "minChars": 2,
- "maxChars": 30,
- "note": "Required for visual consistency across all cards"
- },
- "price": {
- "required": true,
- "example": "$29/mo",
- "minChars": 1,
- "maxChars": 20
- },
- "subtitle": {
- "required": true,
- "example": "Perfect for small teams",
- "minChars": 5,
- "maxChars": 100,
- "note": "Required for visual consistency across all cards"
- },
- "buttons": {
- "required": true,
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "First button (index 0) = primary-button, second (index 1) = secondary-button. Button variant controlled by ThemeProvider's defaultButtonVariant. Border radius controlled by ThemeProvider's borderRadius. All sections should be wrapped in a single ThemeProvider at the app/page level."
- },
- "features": {
- "required": true,
- "example": [
- "Up to 10 team members",
- "100GB storage",
- "Priority support"
- ],
- "note": "Array of feature strings, required for visual consistency"
- },
- "badgeIcon": {
- "required": false,
- "example": "Sparkles",
- "note": "Optional Lucide icon to display next to badge"
- }
- }
- },
- "propsSchema": {
- "plans": "Array<{ id: string, badge: string, badgeIcon?: LucideIcon, price: string, subtitle: string, buttons: Array<{text: string, onClick?: () => void, href?: string}>, features: string[] }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Pricing section')",
- "className?": "string"
- },
- "usageExample": " console.log('clicked') }, { text: 'Chat to Sales', onClick: () => console.log('chat') }], features: ['Up to 10 team members', '100GB storage', 'Priority support'] }]} title=\"Choose Your Plan\" description=\"Find the perfect plan for your needs\" textboxLayout=\"default\" animationType=\"slide-up\" useInvertedBackground={\"noInvert\"} />",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for pricing pages",
- "Use for subscription tiers",
- "Requires plans[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ProductCardFour.json b/registry/components/ProductCardFour.json
deleted file mode 100644
index 4ddfd2a..0000000
--- a/registry/components/ProductCardFour.json
+++ /dev/null
@@ -1,92 +0,0 @@
-{
- "name": "ProductCardFour",
- "description": "E-commerce product card with name, variant description, and price in horizontal layout with favorite toggle.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Featured Products",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Discover our latest collection of premium apparel",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "New Arrivals",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "Button variant controlled by ThemeProvider's defaultButtonVariant. All sections should be wrapped in a single ThemeProvider at the app/page level."
- },
- "productCardRules": {
- "name": {
- "required": true,
- "example": "Represent X Puma Graphic T-Shirt",
- "minChars": 2,
- "maxChars": 100
- },
- "price": {
- "required": true,
- "example": "$100",
- "note": "Display price with currency symbol"
- },
- "variant": {
- "required": true,
- "example": "Dark Grey 3 Colors",
- "minChars": 2,
- "maxChars": 100,
- "note": "Product variant description (color, size options, etc.)"
- },
- "imageSrc": {
- "required": true,
- "example": "/product.jpg",
- "note": "Product image URL"
- }
- }
- },
- "propsSchema": {
- "products": "Array<{ id: string, name: string, price: string, variant: string, imageSrc: string, imageAlt?: string, onFavorite?: () => void, onProductClick?: () => void, isFavorited?: boolean }> - Product items",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-95 2xl:min-h-105')",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault' (required)",
- "ariaLabel?": "string (default: 'Product section')",
- "className?": "string"
- },
- "usageExample": " console.log('favorited'), onProductClick: () => window.open('/product', '_blank') }]} title=\"Featured Products\" description=\"Discover our latest collection\" tag=\"New Arrivals\" tagIcon={Package} textboxLayout=\"default\" gridVariant=\"uniform-all-items-equal\" animationType=\"slide-up\" useInvertedBackground={\"noInvert\"} />",
- "do": [
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires products[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ProductCardOne.json b/registry/components/ProductCardOne.json
deleted file mode 100644
index 45a6178..0000000
--- a/registry/components/ProductCardOne.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
- "name": "ProductCardOne",
- "description": "Simple product card showing name, price, and arrow icon for viewing details.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Featured Products",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Discover our latest collection of premium products",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "New Arrivals",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "productCardRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Eclipse Motion Pro",
- "minChars": 2,
- "maxChars": 50
- },
- "price": {
- "required": true,
- "example": "$150",
- "minChars": 1,
- "maxChars": 20
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": true,
- "example": "/product.jpg",
- "note": "Supports external URLs with unoptimized prop"
- },
- "imageAlt": {
- "required": false,
- "example": "Product name",
- "note": "Empty string marks image as decorative (aria-hidden)"
- }
- }
- },
- "propsSchema": {
- "products": "Array<{ id: string, name: string, price: string, imageSrc: string, imageAlt?: string, onFavorite?: () => void, onProductClick?: () => void, isFavorited?: boolean }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-95 2xl:min-h-105')",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Product section')",
- "className?": "string"
- },
- "usageExample": " window.open('https://example.com', '_blank') }]} title=\"Featured Products\" description=\"Explore our curated collection\" textboxLayout=\"default\" animationType=\"slide-up\" useInvertedBackground={\"noInvert\"} />",
- "do": [
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires products[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ProductCardThree.json b/registry/components/ProductCardThree.json
deleted file mode 100644
index 9bcccdf..0000000
--- a/registry/components/ProductCardThree.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "name": "ProductCardThree",
- "description": "E-commerce product card with quantity selector and add-to-cart price button.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Shop Now",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Add your favorite items to cart",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Limited Stock",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "productCardRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "TIMBUK2 Classic Messenger Bag",
- "minChars": 2,
- "maxChars": 50
- },
- "price": {
- "required": true,
- "example": "$119.00",
- "minChars": 1,
- "maxChars": 20
- },
- "initialQuantity": {
- "required": false,
- "example": 1,
- "note": "Default quantity value (default: 1)"
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": true,
- "example": "/product.jpg",
- "note": "Supports external URLs with unoptimized prop"
- },
- "imageAlt": {
- "required": false,
- "example": "Product name",
- "note": "Empty string marks image as decorative (aria-hidden)"
- }
- }
- },
- "propsSchema": {
- "products": "Array<{ id: string, name: string, price: string, imageSrc: string, imageAlt?: string, onFavorite?: () => void, onProductClick?: () => void, onQuantityChange?: (quantity: number) => void, isFavorited?: boolean, initialQuantity?: number, priceButtonProps?: Partial> }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-95 2xl:min-h-105')",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Product section')",
- "className?": "string"
- },
- "usageExample": " window.open('https://example.com', '_blank'), onQuantityChange: (qty) => console.log(qty) }]} title=\"Shop Now\" description=\"Explore our curated collection\" textboxLayout=\"default\" animationType=\"slide-up\" useInvertedBackground={\"noInvert\"} />",
- "do": [
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires products[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/ProductCardTwo.json b/registry/components/ProductCardTwo.json
deleted file mode 100644
index 0e7434d..0000000
--- a/registry/components/ProductCardTwo.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "name": "ProductCardTwo",
- "description": "Product card displaying brand name, star rating, and review count for social proof.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Premium Collection",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "Curated selection of top-rated products",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Best Sellers",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "productCardRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "brand": {
- "required": true,
- "example": "Wofurnitures",
- "minChars": 2,
- "maxChars": 30
- },
- "name": {
- "required": true,
- "example": "Single Accent Chair",
- "minChars": 2,
- "maxChars": 50
- },
- "price": {
- "required": true,
- "example": "$650.00",
- "minChars": 1,
- "maxChars": 20
- },
- "rating": {
- "required": true,
- "example": 4,
- "note": "Number from 1-5 representing star rating"
- },
- "reviewCount": {
- "required": true,
- "example": "23.9k",
- "minChars": 1,
- "maxChars": 10
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": true,
- "example": "/product.jpg",
- "note": "Supports external URLs with unoptimized prop"
- },
- "imageAlt": {
- "required": false,
- "example": "Product name",
- "note": "Empty string marks image as decorative (aria-hidden)"
- }
- }
- },
- "propsSchema": {
- "products": "Array<{ id: string, brand: string, name: string, price: string, rating: number, reviewCount: string, imageSrc: string, imageAlt?: string, onFavorite?: () => void, onProductClick?: () => void, isFavorited?: boolean }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-95 2xl:min-h-105')",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Product section')",
- "className?": "string"
- },
- "usageExample": " window.open('https://example.com', '_blank') }]} title=\"Premium Collection\" description=\"Explore our curated collection\" textboxLayout=\"default\" animationType=\"slide-up\" useInvertedBackground={\"noInvert\"} />",
- "do": [
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires products[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/RadialGradientBackground.json b/registry/components/RadialGradientBackground.json
deleted file mode 100644
index 5e93945..0000000
--- a/registry/components/RadialGradientBackground.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "RadialGradientBackground",
- "description": "Customizable radial gradient background with theme color integration.",
- "constraints": {},
- "propsSchema": {
- "className?": "string",
- "centerColor?": "string (default: 'var(--background)')",
- "edgeColor?": "string (default: 'var(--color-primary-cta)')",
- "size?": "string (default: '125% 125%')",
- "position?": "string (default: '50% 10%')"
- },
- "usageExample": "",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/RotatedRaysBackground.json b/registry/components/RotatedRaysBackground.json
deleted file mode 100644
index 4da2d79..0000000
--- a/registry/components/RotatedRaysBackground.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "RotatedRaysBackground",
- "description": "Atmospheric light rays emanating from a rotated origin point with blur and radial gradient effects, with optional grid overlay.",
- "constraints": {},
- "propsSchema": {
- "animated": "boolean - Required. When true, rays animate with pulsing opacity. When false, rays display static opacity.",
- "showGrid": "boolean - Required. When true, displays a grid overlay fading from top center. When false, no grid is shown.",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays"
- ],
- "dont": [
- "Do not use multiple items",
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/SplitAbout.json b/registry/components/SplitAbout.json
deleted file mode 100644
index 476eb90..0000000
--- a/registry/components/SplitAbout.json
+++ /dev/null
@@ -1,95 +0,0 @@
-{
- "name": "SplitAbout",
- "description": "Split-layout about section with bullet points on one side and image/video on the other.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "About Us",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Learn more about our mission, values, and what drives us forward",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Our Story",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "Button variant controlled by ThemeProvider's defaultButtonVariant. All sections should be wrapped in a single ThemeProvider at the app/page level."
- },
- "bulletPointRules": {
- "structure": {
- "title": "string - Bullet point heading (required)",
- "description": "string - Bullet point text (required)",
- "icon": "LucideIcon - Optional icon displayed above title"
- },
- "note": "Bullet points are separated by horizontal dividers. Border radius controlled by ThemeProvider's borderRadius (options: 'sharp', 'rounded', 'soft', 'pill'). All sections should be wrapped in a single ThemeProvider at the app/page level."
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/about-image.jpg",
- "note": "Supports external URLs"
- },
- "videoSrc": {
- "required": false,
- "example": "/about-video.mp4",
- "note": "Takes precedence over imageSrc if both provided"
- },
- "imageAlt": {
- "required": false,
- "example": "About us",
- "note": "Empty string marks image as decorative (aria-hidden)"
- }
- }
- },
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "bulletPoints": "Array<{ title: string, description: string, icon?: LucideIcon }>",
- "imageSrc?": "string",
- "videoSrc?": "string",
- "imageAlt?": "string (default: '')",
- "videoAriaLabel?": "string (default: 'About section video')",
- "ariaLabel?": "string (default: 'About section')",
- "imagePosition?": "'left' | 'right' (default: 'right')",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\n\n \n",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for about pages",
- "Use for company information",
- "Requires titleSegments?[]",
- "Requires buttons?[]",
- "Requires bulletPoints[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TeamCardEleven.json b/registry/components/TeamCardEleven.json
deleted file mode 100644
index 4bbc0fa..0000000
--- a/registry/components/TeamCardEleven.json
+++ /dev/null
@@ -1,110 +0,0 @@
-{
- "name": "TeamCardEleven",
- "description": "Team directory section with groups of members displayed in a list layout with avatar, title, subtitle, and detail.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Meet Our Team",
- "minChars": 2,
- "maxChars": 60
- },
- "description": {
- "required": true,
- "example": "The talented people behind our success",
- "minChars": 5,
- "maxChars": 200
- },
- "tag": {
- "required": false,
- "example": "Team",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "groupRules": {
- "minItems": 1,
- "maxItems": 4,
- "recommendedItems": "1-3",
- "id": {
- "required": true,
- "example": "global",
- "note": "Unique identifier for the group"
- },
- "groupTitle": {
- "required": true,
- "example": "Global",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "memberRules": {
- "minItems": 1,
- "maxItems": 10,
- "recommendedItems": "2-6",
- "id": {
- "required": true,
- "example": "1",
- "note": "Unique identifier for the member"
- },
- "title": {
- "required": true,
- "example": "Mihai Toma",
- "minChars": 2,
- "maxChars": 50
- },
- "subtitle": {
- "required": true,
- "example": "Partner",
- "minChars": 2,
- "maxChars": 50
- },
- "detail": {
- "required": true,
- "example": "mihai@company.com",
- "minChars": 2,
- "maxChars": 100
- },
- "imageSrc": {
- "required": false,
- "example": "/team/mihai.jpg",
- "note": "Avatar image"
- },
- "videoSrc": {
- "required": false,
- "example": "/team/mihai.mp4",
- "note": "Video alternative to image"
- }
- }
- },
- "propsSchema": {
- "groups": "Array<{ id: string, groupTitle: string, members: Array<{ id: string, title: string, subtitle: string, detail: string, imageSrc?: string, imageAlt?: string, videoSrc?: string, videoAriaLabel?: string }> }> (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Team section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for contact pages",
- "Use for lead generation",
- "Use for team pages",
- "Use for staff directories",
- "Requires groups[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TeamCardFive.json b/registry/components/TeamCardFive.json
deleted file mode 100644
index 4c3dbe6..0000000
--- a/registry/components/TeamCardFive.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "name": "TeamCardFive",
- "description": "Team section with overlapping portrait cards in responsive flex layout showing centered vertical cards with name and role.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Meet Our Team",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "The talented people behind our success",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Team",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "teamMemberRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Sarah Johnson",
- "minChars": 2,
- "maxChars": 50,
- "note": "Team member name displayed at 2xl font-medium, centered with truncate"
- },
- "role": {
- "required": true,
- "example": "CEO & Founder",
- "minChars": 2,
- "maxChars": 50,
- "note": "Role/title displayed at base size with 75% opacity, centered with truncate"
- },
- "imageSrc": {
- "required": false,
- "example": "/team/sarah.jpg",
- "note": "Image path for team member photo (aspect-square in card wrapper with p-2, rounded-theme)"
- },
- "videoSrc": {
- "required": false,
- "example": "/team/sarah.mp4",
- "note": "Video path for team member (aspect-square in card wrapper with p-2, rounded-theme)"
- },
- "imageAlt": {
- "required": false,
- "example": "Portrait of Sarah Johnson",
- "note": "Alt text for image (defaults to member name if not provided)"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Video of Sarah Johnson",
- "note": "ARIA label for video (defaults to member name if not provided)"
- }
- },
- "itemRules": {
- "minItems": 2,
- "maxItems": 12,
- "recommendedItems": "4-8",
- "note": "Works best with 4-8 team members. Mobile: 2 per row with overlap. Desktop: up to 4 per row with overlap and wrap support for additional rows."
- }
- },
- "propsSchema": {
- "team": "Array<{ id: string, name: string, role: string, imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Team section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for team pages",
- "Use for staff directories",
- "Requires team[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 4 items",
- "Do not use less than 2 items",
- "Do not use more than 12 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TeamCardOne.json b/registry/components/TeamCardOne.json
deleted file mode 100644
index 4159d38..0000000
--- a/registry/components/TeamCardOne.json
+++ /dev/null
@@ -1,89 +0,0 @@
-{
- "name": "TeamCardOne",
- "description": "Team member card with image background, overlay info card at bottom-left corner.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Meet Our Team",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "The people behind our success",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Team",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "teamMemberRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Sophie P.",
- "minChars": 2,
- "maxChars": 50,
- "note": "Team member name displayed in overlay card"
- },
- "role": {
- "required": true,
- "example": "Digital Nomad",
- "minChars": 2,
- "maxChars": 40,
- "note": "Role/title displayed in primary-button badge"
- },
- "imageSrc": {
- "required": true,
- "example": "/team/sophie.jpg",
- "note": "Image path for team member photo (displays as square with rounded-theme)"
- },
- "imageAlt": {
- "required": false,
- "example": "Portrait of Sophie P.",
- "note": "Alt text for image (defaults to member name if not provided)"
- }
- }
- },
- "propsSchema": {
- "members": "Array<{ id: string, name: string, role: string, imageSrc: string, imageAlt?: string }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-95 2xl:min-h-105')",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Team section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for team pages",
- "Use for staff directories",
- "Requires members[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TeamCardSix.json b/registry/components/TeamCardSix.json
deleted file mode 100644
index dec42c9..0000000
--- a/registry/components/TeamCardSix.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "name": "TeamCardSix",
- "description": "Team member card with full-bleed image background and blurred gradient overlay with name and role text at bottom.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Meet Our Team",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "The talented people behind our success",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Team",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "teamMemberRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Sarah Johnson",
- "minChars": 2,
- "maxChars": 50,
- "note": "Team member name displayed at 2xl font-medium with truncate in blurred overlay"
- },
- "role": {
- "required": true,
- "example": "CEO & Founder",
- "minChars": 2,
- "maxChars": 50,
- "note": "Role/title displayed at base size with truncate in blurred overlay"
- },
- "imageSrc": {
- "required": true,
- "example": "/team/sarah.jpg",
- "note": "Image path for team member photo (full-bleed with rounded-theme-capped)"
- },
- "imageAlt": {
- "required": false,
- "example": "Portrait of Sarah Johnson",
- "note": "Alt text for image (defaults to member name if not provided)"
- }
- }
- },
- "propsSchema": {
- "members": "Array<{ id: string, name: string, role: string, imageSrc: string, imageAlt?: string }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required - determines grid layout or carousel trigger)",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-95 2xl:min-h-105')",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Team section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for about pages",
- "Use for company information",
- "Use for team pages",
- "Use for staff directories",
- "Requires members[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TeamCardTen.json b/registry/components/TeamCardTen.json
deleted file mode 100644
index 239095e..0000000
--- a/registry/components/TeamCardTen.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "name": "TeamCardTen",
- "description": "Team section with animated title at top, Tag label, and member cards with images and names.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Growing fast means tough calls. We help you turn pricing from doubt into conviction.",
- "minChars": 20,
- "maxChars": 300
- },
- "tag": {
- "required": true,
- "example": "Team",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "memberRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Johan van der Poel",
- "minChars": 2,
- "maxChars": 50
- },
- "imageSrc": {
- "required": false,
- "example": "/team/johan.jpg",
- "note": "Portrait image (3:3.5 aspect ratio)"
- },
- "videoSrc": {
- "required": false,
- "example": "/team/johan.mp4",
- "note": "Video alternative to image"
- }
- },
- "itemRules": {
- "minItems": 1,
- "maxItems": 6,
- "recommendedItems": "2-4"
- }
- },
- "propsSchema": {
- "title": "string",
- "tag": "string",
- "members": "Array<{ id: string, name: string, imageSrc?: string, imageAlt?: string, videoSrc?: string, videoAriaLabel?: string }>",
- "memberVariant": "'default' | 'card' (required - 'default': no card styling, 'card': each member wrapped in card with rounded corners)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Team section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for team pages",
- "Use for staff directories",
- "Requires members[]"
- ],
- "dont": [
- "Do not use multiple items",
- "Do not use more than 4 items",
- "Do not use more than 6 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TeamCardTwo.json b/registry/components/TeamCardTwo.json
deleted file mode 100644
index 6d212a2..0000000
--- a/registry/components/TeamCardTwo.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "name": "TeamCardTwo",
- "description": "Team member card with image background, overlay info card, and social links.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Meet Our Team",
- "minChars": 2,
- "maxChars": 35
- },
- "description": {
- "required": true,
- "example": "The talented people behind our success",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Team",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "teamMemberRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Alisa Hester",
- "minChars": 2,
- "maxChars": 50,
- "note": "Team member name displayed in overlay header"
- },
- "role": {
- "required": true,
- "example": "Founder & CEO",
- "minChars": 2,
- "maxChars": 40,
- "note": "Role/title displayed in secondary-button badge"
- },
- "description": {
- "required": true,
- "example": "Former co-founder of Opendoor. Early staff at Spotify and Clearbit.",
- "minChars": 10,
- "maxChars": 200,
- "note": "Brief bio or description"
- },
- "imageSrc": {
- "required": true,
- "example": "/team/member-1.jpg",
- "note": "Image path for team member photo"
- },
- "imageAlt": {
- "required": false,
- "example": "Portrait of Alisa Hester",
- "note": "Alt text for image (defaults to member name if not provided)"
- },
- "socialLinks": {
- "required": false,
- "structure": {
- "icon": "LucideIcon - Any Lucide icon component (required)",
- "url": "string - Social profile URL (required)"
- },
- "note": "Flexible social links array. Pass any Lucide icon (Twitter, Linkedin, Globe, Github, etc.) with corresponding URL. Icons display in primary-button styled circles."
- }
- }
- },
- "propsSchema": {
- "members": "Array<{ id: string, name: string, role: string, description: string, imageSrc: string, imageAlt?: string, socialLinks?: Array<{ icon: LucideIcon, url: string }> }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-95 2xl:min-h-105')",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Team section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for about pages",
- "Use for company information",
- "Use for team pages",
- "Use for staff directories",
- "Requires members[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialAboutCard.json b/registry/components/TestimonialAboutCard.json
deleted file mode 100644
index 4f916fc..0000000
--- a/registry/components/TestimonialAboutCard.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "name": "TestimonialAboutCard",
- "description": "Card-based about section with tag, title, description footer, icon box, and required media.",
- "constraints": {
- "textRules": {
- "tag": {
- "required": true,
- "example": "Testimonial",
- "minChars": 2,
- "maxChars": 30
- },
- "title": {
- "required": true,
- "example": "They took social media off our plate completely and our audience has never been more engaged.",
- "minChars": 10,
- "maxChars": 300
- },
- "description": {
- "required": true,
- "example": "Elena Chen",
- "minChars": 2,
- "maxChars": 50
- },
- "subdescription": {
- "required": true,
- "example": "Bloom Skincare",
- "minChars": 2,
- "maxChars": 50
- }
- },
- "mediaRules": {
- "note": "Either imageSrc or videoSrc is required (discriminated union)",
- "imageSrc": {
- "required": "conditional - required if no videoSrc",
- "example": "https://images.unsplash.com/photo-1616394584738-fc6e612e71b9?w=800"
- },
- "videoSrc": {
- "required": "conditional - required if no imageSrc",
- "example": "/videos/testimonial.mp4"
- }
- }
- },
- "propsSchema": {
- "tag": "string (required)",
- "tagIcon?": "LucideIcon",
- "title": "string (required)",
- "description": "string (required)",
- "subdescription": "string (required)",
- "icon": "LucideIcon (required - displayed in the icon box)",
- "imageSrc": "string (required if no videoSrc)",
- "imageAlt?": "string (default: '')",
- "videoSrc": "string (required if no imageSrc)",
- "videoAriaLabel?": "string (default: 'Testimonial video')",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Testimonial section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for social proof",
- "Use for customer reviews",
- "Use for about pages",
- "Use for company information"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialCardFifteen.json b/registry/components/TestimonialCardFifteen.json
deleted file mode 100644
index 6f493ce..0000000
--- a/registry/components/TestimonialCardFifteen.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "name": "TestimonialCardFifteen",
- "description": "Centered testimonial with star rating, animated text, author, and avatar group.",
- "constraints": {
- "textRules": {
- "testimonial": {
- "required": true,
- "example": "This product has completely transformed how we work. The results speak for themselves.",
- "minChars": 20,
- "maxChars": 300
- },
- "author": {
- "required": true,
- "example": "James Carter, Journalist",
- "minChars": 2,
- "maxChars": 60
- }
- },
- "ratingRules": {
- "rating": {
- "required": true,
- "min": 0,
- "max": 5,
- "example": 5,
- "note": "Number of filled stars (0-5)"
- }
- },
- "avatarRules": {
- "avatars": {
- "required": true,
- "minItems": 1,
- "example": "[{ src: '/avatars/user1.jpg', alt: 'User 1' }]",
- "note": "Array of avatar objects with src and alt. Shows 3 on mobile, 6 on desktop."
- }
- }
- },
- "propsSchema": {
- "testimonial": "string",
- "rating": "number (0-5)",
- "author": "string",
- "avatars": "Array<{ src: string, alt: string }>",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Testimonial section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for landing pages",
- "Use for feature showcases",
- "Use for capability displays",
- "Use for social proof",
- "Use for customer reviews",
- "Requires avatars[]"
- ],
- "dont": [
- "Do not use multiple items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialCardFive.json b/registry/components/TestimonialCardFive.json
deleted file mode 100644
index b6cf52d..0000000
--- a/registry/components/TestimonialCardFive.json
+++ /dev/null
@@ -1,137 +0,0 @@
-{
- "name": "TestimonialCardFive",
- "description": "Full-width carousel testimonial section with split card layout showing text content and square image side-by-side.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "What Our Clients Say",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Hear from those who've experienced our work",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Testimonials",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "testimonialRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Alisa Hester, CEO of Ecomflow",
- "minChars": 2,
- "maxChars": 80,
- "note": "Full name including role and company (e.g., 'John Smith, CTO of Tech Corp')"
- },
- "date": {
- "required": true,
- "example": "Date: 28 October 2024",
- "minChars": 5,
- "maxChars": 50,
- "note": "Date string including 'Date:' prefix"
- },
- "title": {
- "required": true,
- "example": "We've got only good things to say!",
- "minChars": 5,
- "maxChars": 100,
- "note": "Testimonial headline shown at 4xl, truncated to 3 lines"
- },
- "quote": {
- "required": true,
- "example": "We have been working with them for over 6 months now, and have been able to scale our business to new heights.",
- "minChars": 20,
- "maxChars": 500,
- "note": "Full testimonial text shown at base/lg size, truncated to 10 lines"
- },
- "tag": {
- "required": true,
- "example": "Standard Line",
- "minChars": 2,
- "maxChars": 30,
- "note": "Category or plan tag displayed at top of card"
- },
- "avatarSrc": {
- "required": true,
- "example": "/client-avatar.jpg",
- "note": "Avatar image shown in TestimonialAuthor component (h-11 aspect-square)"
- }
- },
- "mediaRules": {
- "imageSrc": {
- "required": false,
- "example": "/testimonial-image.jpg",
- "note": "Either imageSrc or videoSrc should be provided for optimal display"
- },
- "videoSrc": {
- "required": false,
- "example": "/testimonial-video.mp4",
- "note": "Either imageSrc or videoSrc should be provided for optimal display"
- },
- "imageAlt": {
- "required": false,
- "example": "Team collaboration",
- "note": "Alt text for testimonial image"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Client testimonial video",
- "note": "ARIA label for testimonial video"
- },
- "avatarAlt": {
- "required": false,
- "example": "Alisa Hester",
- "note": "Alt text for avatar image"
- }
- },
- "itemRules": {
- "minItems": 3,
- "maxItems": 10,
- "recommendedItems": "5-6",
- "note": "Works best with 5-6 testimonials. Auto-advances every 5 seconds with loop enabled."
- }
- },
- "propsSchema": {
- "testimonials": "Array<{ id: string, name: string, date: string, title: string, quote: string, tag: string, avatarSrc: string, avatarAlt?: string, imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string }>",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Testimonials section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for social proof",
- "Use for customer reviews",
- "Requires testimonials[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use less than 3 items",
- "Do not use more than 10 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialCardOne.json b/registry/components/TestimonialCardOne.json
deleted file mode 100644
index 808cb73..0000000
--- a/registry/components/TestimonialCardOne.json
+++ /dev/null
@@ -1,103 +0,0 @@
-{
- "name": "TestimonialCardOne",
- "description": "Testimonial card with image background, star rating, name, role, and company overlay.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "What Our Customers Say",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Real feedback from our valued customers",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Testimonials",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "testimonialRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Alisa Hester",
- "minChars": 2,
- "maxChars": 50,
- "note": "Customer name displayed in overlay"
- },
- "role": {
- "required": true,
- "example": "PM, Hourglass",
- "minChars": 2,
- "maxChars": 50,
- "note": "Customer role/position"
- },
- "company": {
- "required": true,
- "example": "Web Design Agency",
- "minChars": 2,
- "maxChars": 50,
- "note": "Customer company name"
- },
- "rating": {
- "required": true,
- "example": 5,
- "min": 1,
- "max": 5,
- "note": "Star rating (1-5 stars)"
- },
- "imageSrc": {
- "required": true,
- "example": "/testimonials/alisa.jpg",
- "note": "Image path for customer photo"
- },
- "imageAlt": {
- "required": false,
- "example": "Portrait of Alisa Hester",
- "note": "Alt text for image (defaults to customer name if not provided)"
- }
- }
- },
- "propsSchema": {
- "testimonials": "Array<{ id: string, name: string, role: string, company: string, rating: number, imageSrc: string, imageAlt?: string }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-95 2xl:min-h-105')",
- "gridVariant": "'uniform-all-items-equal' | 'uniform-alternating-sizes' | 'uniform-alternating-sizes-inverted' | 'two-items-tall-short' | 'two-items-short-tall' | 'bento-grid' | 'bento-grid-inverted' | 'two-columns-alternating-heights' | 'asymmetric-60-wide-40-narrow' | 'three-columns-all-equal-width' | 'four-items-2x2-equal-grid' | 'one-large-right-three-stacked-left' | 'items-top-row-full-width-bottom' | 'full-width-top-items-bottom-row' | 'one-large-left-three-stacked-right' | 'timeline' | 'timeline-three-columns' (required)",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Testimonials section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for social proof",
- "Use for customer reviews",
- "Requires testimonials[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialCardSix.json b/registry/components/TestimonialCardSix.json
deleted file mode 100644
index edf023c..0000000
--- a/registry/components/TestimonialCardSix.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
- "name": "TestimonialCardSix",
- "description": "Dual auto-scrolling marquee testimonial section with reversed testimonial cards moving in opposite directions.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "What Our Clients Say",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Hear from those who've experienced our work",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Testimonials",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "testimonialRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Sarah Johnson",
- "minChars": 2,
- "maxChars": 50
- },
- "handle": {
- "required": true,
- "example": "@sarahj",
- "minChars": 2,
- "maxChars": 50,
- "note": "Social media handle or role/company"
- },
- "testimonial": {
- "required": true,
- "example": "This component library has transformed our development workflow. The quality and attention to detail is exceptional.",
- "minChars": 20,
- "maxChars": 200,
- "note": "Testimonial text automatically clamped to 2 lines for consistent card heights"
- },
- "imageSrc": {
- "required": false,
- "example": "/avatar.jpg",
- "note": "Avatar image shown in TestimonialAuthor (aspect-square)"
- },
- "imageAlt": {
- "required": false,
- "example": "Sarah Johnson",
- "note": "Alt text for avatar image"
- },
- "icon": {
- "required": false,
- "example": "Quote",
- "note": "LucideIcon component to display if no imageSrc provided (defaults to Quote icon)"
- }
- },
- "itemRules": {
- "minItems": 6,
- "maxItems": 20,
- "recommendedItems": "8-12",
- "note": "Works best with 8-12 testimonials. Continuously scrolls with top and bottom marquees in opposite directions."
- }
- },
- "propsSchema": {
- "testimonials": "Array<{ id: string, name: string, handle: string, testimonial: string, imageSrc?: string, imageAlt?: string, icon?: LucideIcon }>",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "speed?": "number (default: 40)",
- "topMarqueeDirection?": "'left' | 'right' (default: 'left')",
- "ariaLabel?": "string (default: 'Testimonials section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for social proof",
- "Use for customer reviews",
- "Requires testimonials[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use less than 6 items",
- "Do not use more than 20 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialCardTen.json b/registry/components/TestimonialCardTen.json
deleted file mode 100644
index e5ec9c7..0000000
--- a/registry/components/TestimonialCardTen.json
+++ /dev/null
@@ -1,109 +0,0 @@
-{
- "name": "TestimonialCardTen",
- "description": "Split layout testimonial section with titled quote card, navigation arrows, and media display. Supports card and border variants.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Trusted by industry leaders",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "See what our customers have to say",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Testimonials",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "testimonialRules": {
- "id": {
- "required": true,
- "example": "1",
- "note": "Unique identifier for the testimonial"
- },
- "title": {
- "required": true,
- "example": "Personalized AI, redefined with Mindex",
- "minChars": 10,
- "maxChars": 80,
- "note": "Headline/title displayed at top of quote card"
- },
- "quote": {
- "required": true,
- "example": "Working with this AI has been a game changer! It feels like the system really listens and adapts to what I need.",
- "minChars": 20,
- "maxChars": 500
- },
- "name": {
- "required": true,
- "example": "Sarah Mitchell",
- "minChars": 2,
- "maxChars": 50
- },
- "role": {
- "required": true,
- "example": "CEO of BrightPath Solutions",
- "minChars": 2,
- "maxChars": 100
- },
- "imageSrc": {
- "required": false,
- "example": "/images/testimonial1.webp",
- "note": "Image source URL (either imageSrc or videoSrc required)"
- },
- "videoSrc": {
- "required": false,
- "example": "/videos/testimonial.mp4",
- "note": "Video source URL (either imageSrc or videoSrc required)"
- },
- "imageAlt": {
- "required": false,
- "example": "Sarah Mitchell headshot",
- "note": "Alt text for images"
- },
- "videoAriaLabel": {
- "required": false,
- "example": "Testimonial video",
- "note": "Aria label for videos"
- }
- }
- },
- "propsSchema": {
- "testimonials": "Array<{ id: string, title: string, quote: string, name: string, role: string, imageSrc?: string, videoSrc?: string, imageAlt?: string, videoAriaLabel?: string }>",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Testimonials section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for social proof",
- "Use for customer reviews",
- "Requires testimonials[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use more than 4 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialCardThirteen.json b/registry/components/TestimonialCardThirteen.json
deleted file mode 100644
index 429ae4e..0000000
--- a/registry/components/TestimonialCardThirteen.json
+++ /dev/null
@@ -1,101 +0,0 @@
-{
- "name": "TestimonialCardThirteen",
- "description": "Testimonial cards with star ratings or quote icon, testimonial text, and author details.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "What Our Clients Say",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "Hear from those who've experienced our work",
- "minChars": 5,
- "maxChars": 300
- },
- "tag": {
- "required": false,
- "example": "Testimonials",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "testimonialRules": {
- "id": {
- "required": true,
- "example": "1",
- "note": "Unique identifier for the testimonial"
- },
- "name": {
- "required": true,
- "example": "Sarah Johnson",
- "minChars": 2,
- "maxChars": 50
- },
- "handle": {
- "required": true,
- "example": "@sarahj",
- "minChars": 2,
- "maxChars": 30
- },
- "testimonial": {
- "required": true,
- "example": "Amazing product that transformed our workflow!",
- "minChars": 10,
- "maxChars": 500
- },
- "rating": {
- "required": true,
- "example": 5,
- "note": "Number from 1-5 indicating star rating"
- },
- "imageSrc": {
- "required": false,
- "example": "/testimonials/sarah.jpg",
- "note": "Author avatar image (either imageSrc or icon required)"
- },
- "icon": {
- "required": false,
- "example": "Quote",
- "note": "LucideIcon for author avatar (either imageSrc or icon required)"
- }
- }
- },
- "propsSchema": {
- "testimonials": "Array<{ id: string, name: string, handle: string, testimonial: string, rating: number, imageSrc?: string, imageAlt?: string, icon?: LucideIcon }>",
- "showRating": "boolean - true for star ratings, false for quote icon (required)",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-none')",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required)",
- "title": "string",
- "titleSegments?": "Array<{ type: 'text', content: string } | { type: 'image', src: string, alt?: string }> - For inline images in title",
- "description": "string",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "ariaLabel?": "string (default: 'Testimonials section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for social proof",
- "Use for customer reviews",
- "Use for product catalogs",
- "Use for e-commerce",
- "Requires testimonials[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [
- "Do not use multiple items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialCardTwelve.json b/registry/components/TestimonialCardTwelve.json
deleted file mode 100644
index efb2798..0000000
--- a/registry/components/TestimonialCardTwelve.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
- "name": "TestimonialCardTwelve",
- "description": "Minimal testimonial card with avatar group, title, and tag in a single centered card layout.",
- "constraints": {
- "textRules": {
- "cardTitle": {
- "required": true,
- "example": "Over 10,000 customers trust us to deliver exceptional results",
- "minChars": 10,
- "maxChars": 120
- },
- "cardTag": {
- "required": true,
- "example": "See what they say",
- "minChars": 5,
- "maxChars": 40
- }
- },
- "testimonialRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Sarah Johnson",
- "minChars": 2,
- "maxChars": 50,
- "note": "Used as fallback for imageAlt"
- },
- "imageSrc": {
- "required": true,
- "example": "/testimonials/sarah.jpg",
- "note": "Image path for customer photo"
- },
- "imageAlt": {
- "required": false,
- "example": "Sarah Johnson",
- "minChars": 2,
- "maxChars": 50,
- "note": "Alt text for accessibility (defaults to name)"
- }
- },
- "itemRules": {
- "minItems": 3,
- "maxItems": 10,
- "recommendedItems": "4-6",
- "note": "Shows 3 avatars on mobile, 4 on desktop. Remaining count displayed as '+N'. Works best with 4-6 testimonials."
- }
- },
- "propsSchema": {
- "testimonials": "Array<{ id: string, name: string, imageSrc: string, imageAlt?: string }>",
- "cardTitle": "string",
- "cardTag": "string",
- "cardTagIcon?": "LucideIcon",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Testimonials section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for social proof",
- "Use for customer reviews",
- "Requires testimonials[]"
- ],
- "dont": [
- "Do not use multiple items",
- "Do not use less than 3 items",
- "Do not use more than 10 items"
- ],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TestimonialCardTwo.json b/registry/components/TestimonialCardTwo.json
deleted file mode 100644
index 3efbaf1..0000000
--- a/registry/components/TestimonialCardTwo.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "name": "TestimonialCardTwo",
- "description": "Testimonial card with circular image or icon, name, role, and testimonial text.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Customer Reviews",
- "minChars": 2,
- "maxChars": 50
- },
- "description": {
- "required": true,
- "example": "See what our customers have to say",
- "minChars": 5,
- "maxChars": 250
- },
- "tag": {
- "required": false,
- "example": "Reviews",
- "minChars": 2,
- "maxChars": 30
- }
- },
- "testimonialRules": {
- "id": {
- "required": true,
- "example": "1",
- "minChars": 1,
- "maxChars": 20
- },
- "name": {
- "required": true,
- "example": "Sarah Mitchell",
- "minChars": 2,
- "maxChars": 50,
- "note": "Customer name"
- },
- "role": {
- "required": true,
- "example": "Director of Operations",
- "minChars": 2,
- "maxChars": 80,
- "note": "Customer role/position"
- },
- "testimonial": {
- "required": true,
- "example": "The attention to detail and commitment to excellence was outstanding throughout the entire project.",
- "minChars": 10,
- "maxChars": 500,
- "note": "Testimonial text content"
- },
- "imageSrc": {
- "required": false,
- "example": "/testimonials/sarah.jpg",
- "note": "Optional image path for customer photo. If not provided, icon will be displayed instead."
- },
- "imageAlt": {
- "required": false,
- "example": "Portrait of Sarah Mitchell",
- "note": "Alt text for image (defaults to customer name if not provided)"
- },
- "icon": {
- "required": false,
- "example": "Package",
- "note": "Optional Lucide icon to display when no image is provided. Defaults to Quote icon."
- }
- }
- },
- "propsSchema": {
- "testimonials": "Array<{ id: string, name: string, role: string, testimonial: string, imageSrc?: string, imageAlt?: string, icon?: LucideIcon }>",
- "carouselMode?": "'auto' | 'buttons' (default: 'buttons')",
- "uniformGridCustomHeightClasses?": "string (default: 'min-h-none')",
- "animationType": "'none' | 'opacity' | 'slide-up' | 'scale-rotate' | 'blur-reveal' (required - controls GSAP scroll animations with stagger effect)",
- "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",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' | 'inline-image' (required - 'inline-image' uses titleSegments for rich text with images)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'Testimonials section')",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for social proof",
- "Use for customer reviews",
- "Requires testimonials[]",
- "Requires titleSegments?[]",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TextAbout.json b/registry/components/TextAbout.json
deleted file mode 100644
index f7f5221..0000000
--- a/registry/components/TextAbout.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "TextAbout",
- "description": "Centered about section with large animated text and optional buttons below.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "We build products that empower teams to create exceptional digital experiences",
- "minChars": 10,
- "maxChars": 200
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "Button variant controlled by ThemeProvider's defaultButtonVariant. Border radius controlled by ThemeProvider's borderRadius. All sections should be wrapped in a single ThemeProvider at the app/page level."
- }
- },
- "propsSchema": {
- "title": "string",
- "buttons?": "Array<{ text: string, onClick?: () => void, href?: string, props?: Partial> }>",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'About section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\n\n \n",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for about pages",
- "Use for company information",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TextAnimation.json b/registry/components/TextAnimation.json
deleted file mode 100644
index 386e353..0000000
--- a/registry/components/TextAnimation.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "TextAnimation",
- "description": "Unified scroll-triggered text animation component with three distinct animation types and two trigger variants.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "This animation responds to scroll. Watch as the text comes to life."
- }
- }
- },
- "propsSchema": {
- "type?": "'entrance-slide' | 'reveal-blur' | 'background-highlight'",
- "title": "string",
- "children?": "React.ReactNode",
- "variant?": "'trigger' | 'words-trigger'",
- "className?": "string",
- "duration?": "number",
- "stagger?": "number",
- "start?": "string",
- "end?": "string",
- "ariaLabel?": "string",
- "gradientColors?": "{ from: string, to: string }"
- },
- "usageExample": "",
- "do": [
- "Use for general use"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TextBox.json b/registry/components/TextBox.json
deleted file mode 100644
index 58916ad..0000000
--- a/registry/components/TextBox.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
- "name": "TextBox",
- "description": "Flexible text composition component with animated title and description.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "Welcome to Our Platform",
- "minChars": 2,
- "maxChars": 100
- },
- "description": {
- "required": true,
- "example": "Discover amazing features and capabilities",
- "minChars": 5,
- "maxChars": 500
- },
- "tag": {
- "required": false,
- "example": "New",
- "minChars": 2,
- "maxChars": 30
- }
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string",
- "type?": "'entrance-slide' | 'reveal-blur' | 'background-highlight'",
- "textboxLayout": "'default' | 'split' | 'split-actions' | 'split-description' (required)",
- "center?": "boolean (default: false)",
- "tag?": "string",
- "tagIcon?": "LucideIcon",
- "buttons?": "Array<{text: string, onClick?: () => void, href?: string}>",
- "duration?": "number (default: 1)",
- "start?": "string (default: 'top 80%')",
- "end?": "string (default: 'top 20%')",
- "gradientColors?": "{ from: string, to: string }",
- "children?": "React.ReactNode",
- "className?": "string",
- "avatars?": "Array<{ src: string, alt?: string }> - User avatar images",
- "avatarText?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for general use",
- "Requires buttons?[]",
- "Requires avatars?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TextNumberCount.json b/registry/components/TextNumberCount.json
deleted file mode 100644
index 9f5f4e0..0000000
--- a/registry/components/TextNumberCount.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "name": "TextNumberCount",
- "description": "Animated number counter that increments smoothly from a start to an end value.",
- "constraints": {
- "numberRules": {
- "value": {
- "required": true,
- "example": 99.99
- },
- "startFrom": {
- "required": false,
- "example": 0
- }
- }
- },
- "propsSchema": {
- "value": "number",
- "startFrom?": "number",
- "duration?": "number",
- "format?": "Intl.NumberFormatOptions",
- "locales?": "string",
- "prefix?": "string",
- "suffix?": "string",
- "animateOnScroll?": "boolean",
- "threshold?": "number",
- "className?": "string"
- },
- "usageExample": "",
- "do": [
- "Use for statistics displays",
- "Use for achievement showcases"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/TextSplitAbout.json b/registry/components/TextSplitAbout.json
deleted file mode 100644
index a43e7cf..0000000
--- a/registry/components/TextSplitAbout.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "name": "TextSplitAbout",
- "description": "Split-layout about section with large heading on left and multiple description paragraphs with optional buttons on right.",
- "constraints": {
- "textRules": {
- "title": {
- "required": true,
- "example": "About Us",
- "minChars": 2,
- "maxChars": 30
- },
- "description": {
- "required": true,
- "type": "array of strings",
- "example": [
- "We're a team passionate about creating exceptional digital experiences",
- "Our mission is to empower designers and developers"
- ],
- "minChars": 10,
- "maxChars": 300,
- "note": "Each description paragraph should be 10-300 characters"
- }
- },
- "buttonRules": {
- "maxButtons": 2,
- "structure": {
- "text": "string - Button label (required)",
- "href": "string - Link destination (optional)",
- "onClick": "() => void - Click handler (optional)",
- "props": "Partial - Additional button props (optional)"
- },
- "note": "Button variant controlled by ThemeProvider's defaultButtonVariant. Border radius controlled by ThemeProvider's borderRadius. All sections should be wrapped in a single ThemeProvider at the app/page level."
- }
- },
- "propsSchema": {
- "title": "string",
- "description": "string[]",
- "buttons?": "Array<{ text: string, onClick?: () => void, href?: string, props?: Partial> }>",
- "showBorder?": "boolean (default: false)",
- "useInvertedBackground": "'noInvert' | 'invertDefault'",
- "ariaLabel?": "string (default: 'About section')",
- "className?": "string"
- },
- "usageExample": "// Wrap in ThemeProvider\n\n \n",
- "do": [
- "Use for feature showcases",
- "Use for capability displays",
- "Use for about pages",
- "Use for company information",
- "Requires buttons?[]"
- ],
- "dont": [],
- "editRules": {
- "textOnly": true,
- "layoutLocked": true,
- "styleLocked": true
- }
-}
\ No newline at end of file
diff --git a/registry/components/Textarea.json b/registry/components/Textarea.json
deleted file mode 100644
index 80ea8cb..0000000
--- a/registry/components/Textarea.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "Textarea",
- "description": "Styled textarea field with secondary-button styling and rounded-theme-capped borders.",
- "constraints": {
- "textRules": {
- "placeholder": {
- "required": false,
- "example": "Type your message...",
- "minChars": 2,
- "maxChars": 100
- }
- }
- },
- "propsSchema": {
- "value": "string (required)",
- "onChange": "(value: string) => void (required)",
- "placeholder?": "string",
- "rows?": "number (default: 5)",
- "required?": "boolean (default: false)",
- "disabled?": "boolean (default: false)",
- "ariaLabel?": "string",
- "className?": "string"
- },
- "usageExample": "