@shipsite.dev/components 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.json +532 -0
- package/dist/blog/BlogArticle.d.ts +8 -0
- package/dist/blog/BlogArticle.d.ts.map +1 -0
- package/dist/blog/BlogArticle.js +5 -0
- package/dist/blog/BlogArticle.js.map +1 -0
- package/dist/blog/BlogCTA.d.ts +8 -0
- package/dist/blog/BlogCTA.d.ts.map +1 -0
- package/dist/blog/BlogCTA.js +6 -0
- package/dist/blog/BlogCTA.js.map +1 -0
- package/dist/blog/BlogCTABanner.d.ts +9 -0
- package/dist/blog/BlogCTABanner.d.ts.map +1 -0
- package/dist/blog/BlogCTABanner.js +7 -0
- package/dist/blog/BlogCTABanner.js.map +1 -0
- package/dist/blog/BlogFAQ.d.ts +10 -0
- package/dist/blog/BlogFAQ.d.ts.map +1 -0
- package/dist/blog/BlogFAQ.js +7 -0
- package/dist/blog/BlogFAQ.js.map +1 -0
- package/dist/blog/BlogIndex.d.ts +9 -0
- package/dist/blog/BlogIndex.d.ts.map +1 -0
- package/dist/blog/BlogIndex.js +6 -0
- package/dist/blog/BlogIndex.js.map +1 -0
- package/dist/blog/BlogIntro.d.ts +5 -0
- package/dist/blog/BlogIntro.d.ts.map +1 -0
- package/dist/blog/BlogIntro.js +5 -0
- package/dist/blog/BlogIntro.js.map +1 -0
- package/dist/blog/BlogTable.d.ts +7 -0
- package/dist/blog/BlogTable.d.ts.map +1 -0
- package/dist/blog/BlogTable.js +5 -0
- package/dist/blog/BlogTable.js.map +1 -0
- package/dist/blog/BlogTip.d.ts +8 -0
- package/dist/blog/BlogTip.d.ts.map +1 -0
- package/dist/blog/BlogTip.js +5 -0
- package/dist/blog/BlogTip.js.map +1 -0
- package/dist/blog/StartFreeNowCTA.d.ts +9 -0
- package/dist/blog/StartFreeNowCTA.d.ts.map +1 -0
- package/dist/blog/StartFreeNowCTA.js +7 -0
- package/dist/blog/StartFreeNowCTA.js.map +1 -0
- package/dist/context/ShipSiteProvider.d.ts +54 -0
- package/dist/context/ShipSiteProvider.d.ts.map +1 -0
- package/dist/context/ShipSiteProvider.js +33 -0
- package/dist/context/ShipSiteProvider.js.map +1 -0
- package/dist/context/ThemeProvider.d.ts +5 -0
- package/dist/context/ThemeProvider.d.ts.map +1 -0
- package/dist/context/ThemeProvider.js +15 -0
- package/dist/context/ThemeProvider.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/Footer.d.ts +2 -0
- package/dist/layout/Footer.d.ts.map +1 -0
- package/dist/layout/Footer.js +11 -0
- package/dist/layout/Footer.js.map +1 -0
- package/dist/layout/Header.d.ts +2 -0
- package/dist/layout/Header.d.ts.map +1 -0
- package/dist/layout/Header.js +15 -0
- package/dist/layout/Header.js.map +1 -0
- package/dist/legal/LegalPage.d.ts +14 -0
- package/dist/legal/LegalPage.d.ts.map +1 -0
- package/dist/legal/LegalPage.js +8 -0
- package/dist/legal/LegalPage.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/marketing/AlternatingFeatures.d.ts +24 -0
- package/dist/marketing/AlternatingFeatures.d.ts.map +1 -0
- package/dist/marketing/AlternatingFeatures.js +13 -0
- package/dist/marketing/AlternatingFeatures.js.map +1 -0
- package/dist/marketing/BannerCTA.d.ts +15 -0
- package/dist/marketing/BannerCTA.d.ts.map +1 -0
- package/dist/marketing/BannerCTA.js +11 -0
- package/dist/marketing/BannerCTA.js.map +1 -0
- package/dist/marketing/BentoGrid.d.ts +17 -0
- package/dist/marketing/BentoGrid.d.ts.map +1 -0
- package/dist/marketing/BentoGrid.js +10 -0
- package/dist/marketing/BentoGrid.js.map +1 -0
- package/dist/marketing/CalloutCard.d.ts +10 -0
- package/dist/marketing/CalloutCard.d.ts.map +1 -0
- package/dist/marketing/CalloutCard.js +11 -0
- package/dist/marketing/CalloutCard.js.map +1 -0
- package/dist/marketing/CardGrid.d.ts +15 -0
- package/dist/marketing/CardGrid.d.ts.map +1 -0
- package/dist/marketing/CardGrid.js +10 -0
- package/dist/marketing/CardGrid.js.map +1 -0
- package/dist/marketing/Carousel.d.ts +16 -0
- package/dist/marketing/Carousel.d.ts.map +1 -0
- package/dist/marketing/Carousel.js +22 -0
- package/dist/marketing/Carousel.js.map +1 -0
- package/dist/marketing/Companies.d.ts +16 -0
- package/dist/marketing/Companies.d.ts.map +1 -0
- package/dist/marketing/Companies.js +11 -0
- package/dist/marketing/Companies.js.map +1 -0
- package/dist/marketing/FAQ.d.ts +14 -0
- package/dist/marketing/FAQ.d.ts.map +1 -0
- package/dist/marketing/FAQ.js +11 -0
- package/dist/marketing/FAQ.js.map +1 -0
- package/dist/marketing/Features.d.ts +16 -0
- package/dist/marketing/Features.d.ts.map +1 -0
- package/dist/marketing/Features.js +10 -0
- package/dist/marketing/Features.js.map +1 -0
- package/dist/marketing/Gallery.d.ts +16 -0
- package/dist/marketing/Gallery.d.ts.map +1 -0
- package/dist/marketing/Gallery.js +15 -0
- package/dist/marketing/Gallery.js.map +1 -0
- package/dist/marketing/Hero.d.ts +19 -0
- package/dist/marketing/Hero.d.ts.map +1 -0
- package/dist/marketing/Hero.js +10 -0
- package/dist/marketing/Hero.js.map +1 -0
- package/dist/marketing/PageHero.d.ts +10 -0
- package/dist/marketing/PageHero.d.ts.map +1 -0
- package/dist/marketing/PageHero.js +7 -0
- package/dist/marketing/PageHero.js.map +1 -0
- package/dist/marketing/PricingSection.d.ts +34 -0
- package/dist/marketing/PricingSection.d.ts.map +1 -0
- package/dist/marketing/PricingSection.js +41 -0
- package/dist/marketing/PricingSection.js.map +1 -0
- package/dist/marketing/SocialProof.d.ts +8 -0
- package/dist/marketing/SocialProof.d.ts.map +1 -0
- package/dist/marketing/SocialProof.js +6 -0
- package/dist/marketing/SocialProof.js.map +1 -0
- package/dist/marketing/Stats.d.ts +15 -0
- package/dist/marketing/Stats.d.ts.map +1 -0
- package/dist/marketing/Stats.js +16 -0
- package/dist/marketing/Stats.js.map +1 -0
- package/dist/marketing/Steps.d.ts +14 -0
- package/dist/marketing/Steps.d.ts.map +1 -0
- package/dist/marketing/Steps.js +16 -0
- package/dist/marketing/Steps.js.map +1 -0
- package/dist/marketing/TabsSection.d.ts +17 -0
- package/dist/marketing/TabsSection.d.ts.map +1 -0
- package/dist/marketing/TabsSection.js +22 -0
- package/dist/marketing/TabsSection.js.map +1 -0
- package/dist/marketing/Testimonial.d.ts +10 -0
- package/dist/marketing/Testimonial.d.ts.map +1 -0
- package/dist/marketing/Testimonial.js +6 -0
- package/dist/marketing/Testimonial.js.map +1 -0
- package/dist/marketing/Testimonials.d.ts +19 -0
- package/dist/marketing/Testimonials.d.ts.map +1 -0
- package/dist/marketing/Testimonials.js +10 -0
- package/dist/marketing/Testimonials.js.map +1 -0
- package/dist/ui/accordion.d.ts +8 -0
- package/dist/ui/accordion.d.ts.map +1 -0
- package/dist/ui/accordion.js +19 -0
- package/dist/ui/accordion.js.map +1 -0
- package/dist/ui/badge.d.ts +11 -0
- package/dist/ui/badge.d.ts.map +1 -0
- package/dist/ui/badge.js +30 -0
- package/dist/ui/badge.js.map +1 -0
- package/dist/ui/button.d.ts +11 -0
- package/dist/ui/button.d.ts.map +1 -0
- package/dist/ui/button.js +34 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/card.d.ts +9 -0
- package/dist/ui/card.d.ts.map +1 -0
- package/dist/ui/card.js +22 -0
- package/dist/ui/card.js.map +1 -0
- package/dist/ui/footer.d.ts +7 -0
- package/dist/ui/footer.d.ts.map +1 -0
- package/dist/ui/footer.js +16 -0
- package/dist/ui/footer.js.map +1 -0
- package/dist/ui/glow.d.ts +8 -0
- package/dist/ui/glow.d.ts.map +1 -0
- package/dist/ui/glow.js +22 -0
- package/dist/ui/glow.js.map +1 -0
- package/dist/ui/item.d.ts +7 -0
- package/dist/ui/item.d.ts.map +1 -0
- package/dist/ui/item.js +16 -0
- package/dist/ui/item.js.map +1 -0
- package/dist/ui/mockup.d.ts +16 -0
- package/dist/ui/mockup.d.ts.map +1 -0
- package/dist/ui/mockup.js +33 -0
- package/dist/ui/mockup.js.map +1 -0
- package/dist/ui/navbar.d.ts +7 -0
- package/dist/ui/navbar.d.ts.map +1 -0
- package/dist/ui/navbar.js +16 -0
- package/dist/ui/navbar.js.map +1 -0
- package/dist/ui/section.d.ts +4 -0
- package/dist/ui/section.d.ts.map +1 -0
- package/dist/ui/section.js +7 -0
- package/dist/ui/section.js.map +1 -0
- package/dist/ui/sheet.d.ts +14 -0
- package/dist/ui/sheet.d.ts.map +1 -0
- package/dist/ui/sheet.js +41 -0
- package/dist/ui/sheet.js.map +1 -0
- package/dist/ui/theme-toggle.d.ts +4 -0
- package/dist/ui/theme-toggle.d.ts.map +1 -0
- package/dist/ui/theme-toggle.js +17 -0
- package/dist/ui/theme-toggle.js.map +1 -0
- package/package.json +52 -0
package/components.json
ADDED
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://schema.shipsite.dev/components.json",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"components": [
|
|
5
|
+
{
|
|
6
|
+
"name": "Hero",
|
|
7
|
+
"category": "marketing",
|
|
8
|
+
"description": "Full-width hero section with animated title, description, optional badge, primary/secondary CTAs, and a responsive device mockup image. Uses a top glow effect for visual emphasis.",
|
|
9
|
+
"props": [
|
|
10
|
+
{ "name": "title", "type": "string", "required": true, "description": "Main headline text displayed as an h1." },
|
|
11
|
+
{ "name": "description", "type": "string", "required": true, "description": "Supporting paragraph text below the title." },
|
|
12
|
+
{ "name": "primaryCta", "type": "{ label: string; href: string }", "required": false, "description": "Primary call-to-action button with label and link." },
|
|
13
|
+
{ "name": "secondaryCta", "type": "{ label: string; href: string }", "required": false, "description": "Secondary call-to-action button rendered with the glow variant." },
|
|
14
|
+
{ "name": "badge", "type": "string", "required": false, "description": "Small badge text displayed above the title." },
|
|
15
|
+
{ "name": "image", "type": "string", "required": false, "description": "URL of the hero image displayed inside a responsive device mockup below the CTAs." },
|
|
16
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "Optional additional content rendered below the CTA buttons." }
|
|
17
|
+
],
|
|
18
|
+
"example": "<Hero\n title=\"Build your SaaS faster\"\n description=\"Ship production-ready landing pages in minutes.\"\n badge=\"New Release\"\n primaryCta={{ label: \"Get Started\", href: \"/signup\" }}\n secondaryCta={{ label: \"Learn More\", href: \"/docs\" }}\n image=\"/images/hero-screenshot.png\"\n/>"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "Feature",
|
|
22
|
+
"category": "marketing",
|
|
23
|
+
"description": "Individual feature card with an optional icon, title, and description. Used as a child of the Features grid component.",
|
|
24
|
+
"props": [
|
|
25
|
+
{ "name": "icon", "type": "React.ReactNode", "required": false, "description": "Icon element displayed in a rounded container above the title." },
|
|
26
|
+
{ "name": "title", "type": "string", "required": true, "description": "Feature heading text." },
|
|
27
|
+
{ "name": "description", "type": "string", "required": true, "description": "Short description of the feature." }
|
|
28
|
+
],
|
|
29
|
+
"example": "<Feature title=\"Fast\" description=\"Blazing fast performance out of the box.\" />"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "Features",
|
|
33
|
+
"category": "marketing",
|
|
34
|
+
"description": "Section that displays a grid of Feature cards with an optional section title and description. Supports 2, 3, or 4 column layouts.",
|
|
35
|
+
"props": [
|
|
36
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the grid." },
|
|
37
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
38
|
+
{ "name": "columns", "type": "2 | 3 | 4", "required": false, "description": "Number of grid columns. Defaults to 3." },
|
|
39
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "Feature child components to render in the grid." }
|
|
40
|
+
],
|
|
41
|
+
"example": "<Features title=\"Why choose us\" columns={3}>\n <Feature title=\"Fast\" description=\"Blazing fast performance.\" />\n <Feature title=\"Secure\" description=\"Enterprise-grade security.\" />\n <Feature title=\"Scalable\" description=\"Grows with your business.\" />\n</Features>"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "AlternatingFeatureItem",
|
|
45
|
+
"category": "marketing",
|
|
46
|
+
"description": "Individual bullet-point item within an AlternatingFeatureRow. Displays an optional icon, title, and description.",
|
|
47
|
+
"props": [
|
|
48
|
+
{ "name": "icon", "type": "string", "required": false, "description": "Icon or emoji displayed to the left of the title." },
|
|
49
|
+
{ "name": "title", "type": "string", "required": true, "description": "Item heading text." },
|
|
50
|
+
{ "name": "description", "type": "string", "required": true, "description": "Short item description." }
|
|
51
|
+
],
|
|
52
|
+
"example": "<AlternatingFeatureItem icon=\"⚡\" title=\"Lightning fast\" description=\"Sub-second load times.\" />"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "AlternatingFeatureRow",
|
|
56
|
+
"category": "marketing",
|
|
57
|
+
"description": "A two-column row with text content on one side and a responsive mockup image on the other. Even rows automatically flip the layout. Supports light/dark mode images.",
|
|
58
|
+
"props": [
|
|
59
|
+
{ "name": "title", "type": "string", "required": true, "description": "Row heading text." },
|
|
60
|
+
{ "name": "description", "type": "string", "required": false, "description": "Row description paragraph." },
|
|
61
|
+
{ "name": "image", "type": "string", "required": true, "description": "URL of the feature image (or light-mode image when imageDark is also provided)." },
|
|
62
|
+
{ "name": "imageDark", "type": "string", "required": false, "description": "URL of the dark-mode variant of the image." },
|
|
63
|
+
{ "name": "imageAlt", "type": "string", "required": false, "description": "Alt text for the image. Defaults to the title." },
|
|
64
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "AlternatingFeatureItem children rendered below the description." }
|
|
65
|
+
],
|
|
66
|
+
"example": "<AlternatingFeatureRow\n title=\"Dashboard\"\n description=\"Manage everything from one place.\"\n image=\"/images/dashboard.png\"\n>\n <AlternatingFeatureItem icon=\"📊\" title=\"Analytics\" description=\"Real-time insights.\" />\n</AlternatingFeatureRow>"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "AlternatingFeatures",
|
|
70
|
+
"category": "marketing",
|
|
71
|
+
"description": "Container section for alternating feature rows. Renders rows with alternating text/image layout separated by dividers.",
|
|
72
|
+
"props": [
|
|
73
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the rows." },
|
|
74
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
75
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "AlternatingFeatureRow children." }
|
|
76
|
+
],
|
|
77
|
+
"example": "<AlternatingFeatures title=\"Features\">\n <AlternatingFeatureRow title=\"Feature 1\" image=\"/images/f1.png\" />\n <AlternatingFeatureRow title=\"Feature 2\" image=\"/images/f2.png\" />\n</AlternatingFeatures>"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "PricingPlan",
|
|
81
|
+
"category": "marketing",
|
|
82
|
+
"description": "Data-only component that defines a single pricing plan. Must be used as a child of PricingSection. Renders nothing on its own; its props are consumed by the parent.",
|
|
83
|
+
"props": [
|
|
84
|
+
{ "name": "name", "type": "string", "required": true, "description": "Plan name (e.g. 'Free', 'Pro', 'Enterprise')." },
|
|
85
|
+
{ "name": "price", "type": "string", "required": true, "description": "Monthly price display string (e.g. '$0', '$29/mo')." },
|
|
86
|
+
{ "name": "yearlyPrice", "type": "string", "required": false, "description": "Yearly price display string. Enables the monthly/yearly toggle when at least one plan has this." },
|
|
87
|
+
{ "name": "description", "type": "string", "required": false, "description": "Short plan description." },
|
|
88
|
+
{ "name": "features", "type": "string[]", "required": true, "description": "List of feature strings displayed as a checklist." },
|
|
89
|
+
{ "name": "cta", "type": "{ label: string; href: string }", "required": true, "description": "Call-to-action button for the plan." },
|
|
90
|
+
{ "name": "popular", "type": "boolean", "required": false, "description": "Highlights the plan with a 'Most Popular' badge and ring styling." }
|
|
91
|
+
],
|
|
92
|
+
"example": "<PricingPlan\n name=\"Pro\"\n price=\"$29/mo\"\n yearlyPrice=\"$24/mo\"\n description=\"For growing teams\"\n features={[\"Unlimited projects\", \"Priority support\", \"Custom domains\"]}\n cta={{ label: \"Get Started\", href: \"/signup\" }}\n popular\n/>"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "ComparisonRow",
|
|
96
|
+
"category": "marketing",
|
|
97
|
+
"description": "Data-only component that defines a row in the pricing comparison table. Must be used as a child of PricingSection.",
|
|
98
|
+
"props": [
|
|
99
|
+
{ "name": "feature", "type": "string", "required": true, "description": "Feature name displayed in the first column." },
|
|
100
|
+
{ "name": "values", "type": "(string | boolean)[]", "required": true, "description": "Array of values per plan. Booleans render as check/dash icons; strings render as text." }
|
|
101
|
+
],
|
|
102
|
+
"example": "<ComparisonRow feature=\"Custom domains\" values={[false, true, true]} />"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"name": "ComparisonCategory",
|
|
106
|
+
"category": "marketing",
|
|
107
|
+
"description": "Data-only component that adds a category header row in the pricing comparison table. Must be used as a child of PricingSection.",
|
|
108
|
+
"props": [
|
|
109
|
+
{ "name": "title", "type": "string", "required": true, "description": "Category heading text." }
|
|
110
|
+
],
|
|
111
|
+
"example": "<ComparisonCategory title=\"Core Features\" />"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "PricingSection",
|
|
115
|
+
"category": "marketing",
|
|
116
|
+
"description": "Full pricing section with plan cards, optional monthly/yearly toggle, and an optional feature comparison table. Consumes PricingPlan, ComparisonRow, and ComparisonCategory children.",
|
|
117
|
+
"props": [
|
|
118
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading." },
|
|
119
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
120
|
+
{ "name": "monthlyLabel", "type": "string", "required": false, "description": "Label for the monthly toggle. Defaults to 'Monthly'." },
|
|
121
|
+
{ "name": "yearlyLabel", "type": "string", "required": false, "description": "Label for the yearly toggle. Defaults to 'Yearly'." },
|
|
122
|
+
{ "name": "mostPopularLabel", "type": "string", "required": false, "description": "Label for the popular plan badge. Defaults to 'Most Popular'." },
|
|
123
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "PricingPlan, ComparisonCategory, and ComparisonRow children." }
|
|
124
|
+
],
|
|
125
|
+
"example": "<PricingSection title=\"Pricing\" description=\"Choose your plan\">\n <PricingPlan name=\"Free\" price=\"$0\" features={[\"1 project\"]} cta={{ label: \"Start Free\", href: \"/signup\" }} />\n <PricingPlan name=\"Pro\" price=\"$29/mo\" features={[\"Unlimited projects\"]} cta={{ label: \"Go Pro\", href: \"/signup\" }} popular />\n</PricingSection>"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"name": "Companies",
|
|
129
|
+
"category": "marketing",
|
|
130
|
+
"description": "Logo showcase section with two variants: a continuous marquee scroll animation or a static inline flex layout. Supports logo names, versions, and badges in inline mode.",
|
|
131
|
+
"props": [
|
|
132
|
+
{ "name": "title", "type": "string", "required": false, "description": "Title text above the logos." },
|
|
133
|
+
{ "name": "logos", "type": "Array<{ src: string; alt: string; width?: number; name?: string; version?: string; badge?: string }>", "required": true, "description": "Array of logo items. Each has an image src, alt text, and optional width, name, version, and badge." },
|
|
134
|
+
{ "name": "variant", "type": "'marquee' | 'inline'", "required": false, "description": "Display variant. 'marquee' (default) shows a scrolling animation; 'inline' shows a static flexbox layout with names and badges." }
|
|
135
|
+
],
|
|
136
|
+
"example": "<Companies\n title=\"Trusted by leading companies\"\n logos={[\n { src: \"/logos/acme.svg\", alt: \"Acme\" },\n { src: \"/logos/globex.svg\", alt: \"Globex\" }\n ]}\n/>"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "Testimonial",
|
|
140
|
+
"category": "marketing",
|
|
141
|
+
"description": "Single large testimonial quote block with author info, displayed in a centered glass card.",
|
|
142
|
+
"props": [
|
|
143
|
+
{ "name": "quote", "type": "string", "required": true, "description": "The testimonial quote text." },
|
|
144
|
+
{ "name": "author", "type": "string", "required": true, "description": "Name of the person giving the testimonial." },
|
|
145
|
+
{ "name": "role", "type": "string", "required": false, "description": "Job title or role of the author." },
|
|
146
|
+
{ "name": "image", "type": "string", "required": false, "description": "URL of the author's avatar image." },
|
|
147
|
+
{ "name": "company", "type": "string", "required": false, "description": "Company name of the author." }
|
|
148
|
+
],
|
|
149
|
+
"example": "<Testimonial\n quote=\"This product changed how we work.\"\n author=\"Jane Doe\"\n role=\"CEO\"\n company=\"Acme Inc\"\n image=\"/images/jane.jpg\"\n/>"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "TestimonialCard",
|
|
153
|
+
"category": "marketing",
|
|
154
|
+
"description": "Compact testimonial card with optional star rating. Used as a child of the Testimonials grid component.",
|
|
155
|
+
"props": [
|
|
156
|
+
{ "name": "quote", "type": "string", "required": true, "description": "The testimonial quote text." },
|
|
157
|
+
{ "name": "author", "type": "string", "required": true, "description": "Name of the person giving the testimonial." },
|
|
158
|
+
{ "name": "role", "type": "string", "required": false, "description": "Job title or role of the author." },
|
|
159
|
+
{ "name": "company", "type": "string", "required": false, "description": "Company name of the author." },
|
|
160
|
+
{ "name": "image", "type": "string", "required": false, "description": "URL of the author's avatar image." },
|
|
161
|
+
{ "name": "rating", "type": "number", "required": false, "description": "Star rating (1-5) displayed as filled star icons." }
|
|
162
|
+
],
|
|
163
|
+
"example": "<TestimonialCard\n quote=\"Incredible experience!\"\n author=\"John Smith\"\n role=\"CTO\"\n company=\"Globex\"\n rating={5}\n/>"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"name": "Testimonials",
|
|
167
|
+
"category": "marketing",
|
|
168
|
+
"description": "Grid section that displays multiple TestimonialCard components with an optional section title and description.",
|
|
169
|
+
"props": [
|
|
170
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the grid." },
|
|
171
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
172
|
+
{ "name": "columns", "type": "2 | 3", "required": false, "description": "Number of grid columns. Defaults to 3." },
|
|
173
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "TestimonialCard children." }
|
|
174
|
+
],
|
|
175
|
+
"example": "<Testimonials title=\"What our customers say\" columns={3}>\n <TestimonialCard quote=\"Amazing!\" author=\"Alice\" rating={5} />\n <TestimonialCard quote=\"Love it!\" author=\"Bob\" rating={5} />\n <TestimonialCard quote=\"Great tool.\" author=\"Charlie\" rating={4} />\n</Testimonials>"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"name": "BannerCTA",
|
|
179
|
+
"category": "marketing",
|
|
180
|
+
"description": "Full-width call-to-action banner with a centered glow effect, title, optional subtext, and a primary button. Supports additional children content.",
|
|
181
|
+
"props": [
|
|
182
|
+
{ "name": "title", "type": "string", "required": true, "description": "Banner headline text." },
|
|
183
|
+
{ "name": "buttonText", "type": "string", "required": true, "description": "Text displayed on the CTA button." },
|
|
184
|
+
{ "name": "buttonHref", "type": "string", "required": false, "description": "URL the button links to." },
|
|
185
|
+
{ "name": "subtext", "type": "string", "required": false, "description": "Supporting text displayed below the title and above the button." },
|
|
186
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "Additional content rendered below the button." }
|
|
187
|
+
],
|
|
188
|
+
"example": "<BannerCTA\n title=\"Ready to get started?\"\n buttonText=\"Start Free Trial\"\n buttonHref=\"/signup\"\n subtext=\"No credit card required.\"\n/>"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"name": "BannerFeature",
|
|
192
|
+
"category": "marketing",
|
|
193
|
+
"description": "Small inline feature item with an optional icon, designed to be placed inside a BannerCTA as a child.",
|
|
194
|
+
"props": [
|
|
195
|
+
{ "name": "title", "type": "string", "required": true, "description": "Feature text." },
|
|
196
|
+
{ "name": "icon", "type": "string", "required": false, "description": "Icon or emoji displayed before the title." }
|
|
197
|
+
],
|
|
198
|
+
"example": "<BannerFeature title=\"99.9% uptime\" icon=\"✅\" />"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"name": "FAQItem",
|
|
202
|
+
"category": "marketing",
|
|
203
|
+
"description": "Individual FAQ accordion item with a question trigger and expandable answer content. Used as a child of FAQ.",
|
|
204
|
+
"props": [
|
|
205
|
+
{ "name": "question", "type": "string", "required": true, "description": "The question text displayed as the accordion trigger." },
|
|
206
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "The answer content revealed when the item is expanded." }
|
|
207
|
+
],
|
|
208
|
+
"example": "<FAQItem question=\"How does billing work?\">\n We bill monthly based on your plan. You can cancel anytime.\n</FAQItem>"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "FAQ",
|
|
212
|
+
"category": "marketing",
|
|
213
|
+
"description": "FAQ section with a collapsible accordion. Contains FAQItem children with question/answer pairs.",
|
|
214
|
+
"props": [
|
|
215
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the accordion." },
|
|
216
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
217
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "FAQItem children." }
|
|
218
|
+
],
|
|
219
|
+
"example": "<FAQ title=\"Frequently Asked Questions\">\n <FAQItem question=\"Is there a free plan?\">Yes, we offer a generous free tier.</FAQItem>\n <FAQItem question=\"Can I cancel anytime?\">Absolutely, no lock-in.</FAQItem>\n</FAQ>"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"name": "Step",
|
|
223
|
+
"category": "marketing",
|
|
224
|
+
"description": "Data-only component that defines a single step. Must be used as a child of Steps. Renders nothing on its own; its props are consumed by the parent.",
|
|
225
|
+
"props": [
|
|
226
|
+
{ "name": "title", "type": "string", "required": true, "description": "Step heading text." },
|
|
227
|
+
{ "name": "description", "type": "string", "required": true, "description": "Step description text." }
|
|
228
|
+
],
|
|
229
|
+
"example": "<Step title=\"Sign up\" description=\"Create your free account in seconds.\" />"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"name": "Steps",
|
|
233
|
+
"category": "marketing",
|
|
234
|
+
"description": "Numbered step-by-step section with connected timeline indicators. Consumes Step children to display a vertical progression.",
|
|
235
|
+
"props": [
|
|
236
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the steps." },
|
|
237
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
238
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "Step children." }
|
|
239
|
+
],
|
|
240
|
+
"example": "<Steps title=\"How it works\">\n <Step title=\"Sign up\" description=\"Create your account.\" />\n <Step title=\"Configure\" description=\"Set up your workspace.\" />\n <Step title=\"Launch\" description=\"Go live in minutes.\" />\n</Steps>"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"name": "CardGridItem",
|
|
244
|
+
"category": "marketing",
|
|
245
|
+
"description": "Individual card in a grid layout with an optional icon, title, description, and link. Used as a child of CardGrid.",
|
|
246
|
+
"props": [
|
|
247
|
+
{ "name": "title", "type": "string", "required": true, "description": "Card heading text." },
|
|
248
|
+
{ "name": "description", "type": "string", "required": true, "description": "Card description text." },
|
|
249
|
+
{ "name": "icon", "type": "React.ReactNode", "required": false, "description": "Icon element displayed above the title." },
|
|
250
|
+
{ "name": "href", "type": "string", "required": false, "description": "Optional link URL. When provided, the card becomes a clickable anchor." }
|
|
251
|
+
],
|
|
252
|
+
"example": "<CardGridItem title=\"Documentation\" description=\"Read the full docs.\" href=\"/docs\" />"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"name": "CardGrid",
|
|
256
|
+
"category": "marketing",
|
|
257
|
+
"description": "Responsive grid container for CardGridItem children. Supports 2, 3, or 4 column layouts.",
|
|
258
|
+
"props": [
|
|
259
|
+
{ "name": "columns", "type": "2 | 3 | 4", "required": false, "description": "Number of grid columns. Defaults to 3." },
|
|
260
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "CardGridItem children." }
|
|
261
|
+
],
|
|
262
|
+
"example": "<CardGrid columns={3}>\n <CardGridItem title=\"Feature A\" description=\"Description A\" />\n <CardGridItem title=\"Feature B\" description=\"Description B\" />\n <CardGridItem title=\"Feature C\" description=\"Description C\" />\n</CardGrid>"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"name": "CalloutCard",
|
|
266
|
+
"category": "marketing",
|
|
267
|
+
"description": "Highlighted callout box with a colored border for info, success, or warning messages. Useful for drawing attention to important content within a page.",
|
|
268
|
+
"props": [
|
|
269
|
+
{ "name": "title", "type": "string", "required": true, "description": "Callout heading text." },
|
|
270
|
+
{ "name": "description", "type": "string", "required": true, "description": "Callout body text." },
|
|
271
|
+
{ "name": "variant", "type": "'info' | 'success' | 'warning'", "required": false, "description": "Color variant for the callout. Defaults to 'info'." },
|
|
272
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "Additional content rendered below the description." }
|
|
273
|
+
],
|
|
274
|
+
"example": "<CalloutCard\n title=\"Pro Tip\"\n description=\"You can customize the theme in settings.\"\n variant=\"info\"\n/>"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"name": "Stat",
|
|
278
|
+
"category": "marketing",
|
|
279
|
+
"description": "Data-only component that defines a single statistic. Must be used as a child of Stats. Renders nothing on its own; its props are consumed by the parent.",
|
|
280
|
+
"props": [
|
|
281
|
+
{ "name": "value", "type": "string | number", "required": true, "description": "The main numeric or text value displayed prominently." },
|
|
282
|
+
{ "name": "label", "type": "string", "required": false, "description": "Label text displayed above the value." },
|
|
283
|
+
{ "name": "suffix", "type": "string", "required": false, "description": "Suffix text displayed after the value (e.g. '+', '%')." },
|
|
284
|
+
{ "name": "description", "type": "string", "required": false, "description": "Description text displayed below the value." }
|
|
285
|
+
],
|
|
286
|
+
"example": "<Stat value=\"99.9\" suffix=\"%\" label=\"Uptime\" description=\"Average over the last 12 months\" />"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"name": "Stats",
|
|
290
|
+
"category": "marketing",
|
|
291
|
+
"description": "Section displaying key statistics in a 2x2 or 4-column grid with large gradient numbers. Consumes Stat children.",
|
|
292
|
+
"props": [
|
|
293
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the stats." },
|
|
294
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "Stat children." }
|
|
295
|
+
],
|
|
296
|
+
"example": "<Stats title=\"Our numbers\">\n <Stat value=\"10K\" suffix=\"+\" label=\"Users\" />\n <Stat value=\"99.9\" suffix=\"%\" label=\"Uptime\" />\n <Stat value=\"50\" suffix=\"+\" label=\"Countries\" />\n <Stat value=\"24/7\" label=\"Support\" />\n</Stats>"
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"name": "BentoItem",
|
|
300
|
+
"category": "marketing",
|
|
301
|
+
"description": "Individual bento grid card with a title, optional description, optional full-bleed image, and support for custom children. Supports spanning 1 or 2 columns.",
|
|
302
|
+
"props": [
|
|
303
|
+
{ "name": "title", "type": "string", "required": true, "description": "Card heading text." },
|
|
304
|
+
{ "name": "description", "type": "string", "required": false, "description": "Card description text." },
|
|
305
|
+
{ "name": "image", "type": "string", "required": false, "description": "URL of a full-bleed image rendered at the bottom of the card." },
|
|
306
|
+
{ "name": "span", "type": "1 | 2", "required": false, "description": "Number of grid columns the item spans. Defaults to 1." },
|
|
307
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "Custom content rendered inside the card." }
|
|
308
|
+
],
|
|
309
|
+
"example": "<BentoItem title=\"Analytics\" description=\"Track everything in real-time.\" image=\"/images/analytics.png\" span={2} />"
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"name": "BentoGrid",
|
|
313
|
+
"category": "marketing",
|
|
314
|
+
"description": "Asymmetric grid layout section for showcasing features in a bento-box style. Uses a 3-column grid with equal-height rows. Contains BentoItem children.",
|
|
315
|
+
"props": [
|
|
316
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the grid." },
|
|
317
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
318
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "BentoItem children." }
|
|
319
|
+
],
|
|
320
|
+
"example": "<BentoGrid title=\"Everything you need\">\n <BentoItem title=\"Dashboard\" description=\"Overview at a glance.\" span={2} />\n <BentoItem title=\"Reports\" description=\"Detailed insights.\" />\n <BentoItem title=\"Team\" description=\"Collaborate seamlessly.\" />\n <BentoItem title=\"Integrations\" description=\"Connect your tools.\" span={2} />\n</BentoGrid>"
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"name": "GalleryItem",
|
|
324
|
+
"category": "marketing",
|
|
325
|
+
"description": "Individual gallery image card with a hover zoom effect and an optional caption. Used as a child of Gallery.",
|
|
326
|
+
"props": [
|
|
327
|
+
{ "name": "src", "type": "string", "required": true, "description": "URL of the image." },
|
|
328
|
+
{ "name": "alt", "type": "string", "required": true, "description": "Alt text for the image." },
|
|
329
|
+
{ "name": "caption", "type": "string", "required": false, "description": "Caption text displayed below the image." }
|
|
330
|
+
],
|
|
331
|
+
"example": "<GalleryItem src=\"/images/screenshot-1.png\" alt=\"Dashboard view\" caption=\"The main dashboard\" />"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"name": "Gallery",
|
|
335
|
+
"category": "marketing",
|
|
336
|
+
"description": "Responsive image gallery section with optional title and description. Displays GalleryItem children in a configurable grid.",
|
|
337
|
+
"props": [
|
|
338
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the gallery." },
|
|
339
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
340
|
+
{ "name": "columns", "type": "2 | 3 | 4", "required": false, "description": "Number of grid columns. Defaults to 3." },
|
|
341
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "GalleryItem children." }
|
|
342
|
+
],
|
|
343
|
+
"example": "<Gallery title=\"Screenshots\" columns={3}>\n <GalleryItem src=\"/images/s1.png\" alt=\"Screenshot 1\" />\n <GalleryItem src=\"/images/s2.png\" alt=\"Screenshot 2\" />\n <GalleryItem src=\"/images/s3.png\" alt=\"Screenshot 3\" />\n</Gallery>"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"name": "SocialProof",
|
|
347
|
+
"category": "marketing",
|
|
348
|
+
"description": "Compact social proof section showing stacked user avatars with a text message and optional subtext. Ideal for displaying user counts or trust indicators.",
|
|
349
|
+
"props": [
|
|
350
|
+
{ "name": "avatars", "type": "string[]", "required": false, "description": "Array of avatar image URLs displayed as overlapping circles." },
|
|
351
|
+
{ "name": "text", "type": "string", "required": true, "description": "Main social proof text (e.g. 'Loved by 10,000+ users')." },
|
|
352
|
+
{ "name": "subtext", "type": "string", "required": false, "description": "Secondary text displayed below the main text." }
|
|
353
|
+
],
|
|
354
|
+
"example": "<SocialProof\n avatars={[\"/avatars/1.jpg\", \"/avatars/2.jpg\", \"/avatars/3.jpg\"]}\n text=\"Loved by 10,000+ teams\"\n subtext=\"across 50 countries\"\n/>"
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"name": "CarouselItem",
|
|
358
|
+
"category": "marketing",
|
|
359
|
+
"description": "Individual card within a horizontally scrollable Carousel. Supports an image, title, description, and custom children.",
|
|
360
|
+
"props": [
|
|
361
|
+
{ "name": "title", "type": "string", "required": false, "description": "Card heading text." },
|
|
362
|
+
{ "name": "description", "type": "string", "required": false, "description": "Card description text." },
|
|
363
|
+
{ "name": "image", "type": "string", "required": false, "description": "URL of the card image displayed above the content." },
|
|
364
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "Custom content rendered inside the card." }
|
|
365
|
+
],
|
|
366
|
+
"example": "<CarouselItem title=\"Feature 1\" description=\"Description of feature 1.\" image=\"/images/f1.png\" />"
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"name": "Carousel",
|
|
370
|
+
"category": "marketing",
|
|
371
|
+
"description": "Horizontally scrollable carousel section with snap-scrolling, left/right navigation buttons, and optional title/description. Contains CarouselItem children.",
|
|
372
|
+
"props": [
|
|
373
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the carousel." },
|
|
374
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
375
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "CarouselItem children." }
|
|
376
|
+
],
|
|
377
|
+
"example": "<Carousel title=\"Explore our features\">\n <CarouselItem title=\"Feature 1\" description=\"Description 1\" image=\"/images/f1.png\" />\n <CarouselItem title=\"Feature 2\" description=\"Description 2\" image=\"/images/f2.png\" />\n <CarouselItem title=\"Feature 3\" description=\"Description 3\" image=\"/images/f3.png\" />\n</Carousel>"
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"name": "TabItem",
|
|
381
|
+
"category": "marketing",
|
|
382
|
+
"description": "Data-only component that defines a single tab. Must be used as a child of TabsSection. Renders nothing on its own; its props are consumed by the parent.",
|
|
383
|
+
"props": [
|
|
384
|
+
{ "name": "label", "type": "string", "required": true, "description": "Tab button label text." },
|
|
385
|
+
{ "name": "title", "type": "string", "required": false, "description": "Content heading displayed when the tab is active." },
|
|
386
|
+
{ "name": "description", "type": "string", "required": false, "description": "Content description displayed when the tab is active." },
|
|
387
|
+
{ "name": "image", "type": "string", "required": false, "description": "Image URL displayed alongside the content when the tab is active." },
|
|
388
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "Custom content rendered when the tab is active." }
|
|
389
|
+
],
|
|
390
|
+
"example": "<TabItem label=\"Overview\" title=\"Product Overview\" description=\"Everything you need to know.\" image=\"/images/overview.png\" />"
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
"name": "TabsSection",
|
|
394
|
+
"category": "marketing",
|
|
395
|
+
"description": "Interactive tabbed section with pill-style tab buttons and a content panel that changes based on the active tab. Consumes TabItem children.",
|
|
396
|
+
"props": [
|
|
397
|
+
{ "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the tabs." },
|
|
398
|
+
{ "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
|
|
399
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "TabItem children." }
|
|
400
|
+
],
|
|
401
|
+
"example": "<TabsSection title=\"Features\">\n <TabItem label=\"Dashboard\" title=\"Your Dashboard\" description=\"See everything at a glance.\" image=\"/images/dashboard.png\" />\n <TabItem label=\"Reports\" title=\"Detailed Reports\" description=\"Analyze your data.\" image=\"/images/reports.png\" />\n</TabsSection>"
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"name": "PageHero",
|
|
405
|
+
"category": "marketing",
|
|
406
|
+
"description": "Lightweight page hero section with centered title, optional description, badge, and children. Suitable for inner pages that do not need the full Hero with image and CTAs.",
|
|
407
|
+
"props": [
|
|
408
|
+
{ "name": "title", "type": "string", "required": true, "description": "Page title displayed as an h1." },
|
|
409
|
+
{ "name": "description", "type": "string", "required": false, "description": "Supporting paragraph text below the title." },
|
|
410
|
+
{ "name": "badge", "type": "string", "required": false, "description": "Small badge text displayed above the title." },
|
|
411
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "Additional content rendered below the description." }
|
|
412
|
+
],
|
|
413
|
+
"example": "<PageHero\n title=\"About Us\"\n description=\"Learn more about our mission and team.\"\n badge=\"Company\"\n/>"
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"name": "BlogArticle",
|
|
417
|
+
"category": "blog",
|
|
418
|
+
"description": "Top-level wrapper for blog article content. Renders a centered, max-width article container with vertical padding.",
|
|
419
|
+
"props": [
|
|
420
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "Article content (headings, paragraphs, blog components)." },
|
|
421
|
+
{ "name": "contentFolder", "type": "string", "required": false, "description": "Content folder identifier for the blog article." }
|
|
422
|
+
],
|
|
423
|
+
"example": "<BlogArticle>\n <BlogIntro>Introduction paragraph here.</BlogIntro>\n ## Section heading\n Content here...\n</BlogArticle>"
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"name": "BlogIntro",
|
|
427
|
+
"category": "blog",
|
|
428
|
+
"description": "Styled intro paragraph block for the opening of a blog article. Renders children in a larger, muted font with relaxed line-height.",
|
|
429
|
+
"props": [
|
|
430
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "Introductory paragraph content." }
|
|
431
|
+
],
|
|
432
|
+
"example": "<BlogIntro>\n This article explores how to improve your team's productivity with modern tools.\n</BlogIntro>"
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
"name": "BlogCTA",
|
|
436
|
+
"category": "blog",
|
|
437
|
+
"description": "Inline call-to-action block for blog articles. Displays a centered title and button within a glass card.",
|
|
438
|
+
"props": [
|
|
439
|
+
{ "name": "title", "type": "string", "required": true, "description": "CTA heading text." },
|
|
440
|
+
{ "name": "buttonText", "type": "string", "required": true, "description": "Text displayed on the button." },
|
|
441
|
+
{ "name": "buttonHref", "type": "string", "required": true, "description": "URL the button links to." }
|
|
442
|
+
],
|
|
443
|
+
"example": "<BlogCTA\n title=\"Try it free today\"\n buttonText=\"Get Started\"\n buttonHref=\"/signup\"\n/>"
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"name": "BlogCTABanner",
|
|
447
|
+
"category": "blog",
|
|
448
|
+
"description": "Prominent call-to-action banner for blog articles with a glow effect, title, description, and button. Designed as a mid-article conversion element.",
|
|
449
|
+
"props": [
|
|
450
|
+
{ "name": "title", "type": "string", "required": true, "description": "Banner headline text." },
|
|
451
|
+
{ "name": "description", "type": "string", "required": true, "description": "Supporting description text." },
|
|
452
|
+
{ "name": "buttonText", "type": "string", "required": true, "description": "Text displayed on the button." },
|
|
453
|
+
{ "name": "buttonLink", "type": "string", "required": true, "description": "URL the button links to." }
|
|
454
|
+
],
|
|
455
|
+
"example": "<BlogCTABanner\n title=\"Start for free\"\n description=\"No credit card required. Cancel anytime.\"\n buttonText=\"Get Started\"\n buttonLink=\"/signup\"\n/>"
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"name": "BlogFAQ",
|
|
459
|
+
"category": "blog",
|
|
460
|
+
"description": "FAQ accordion section for blog articles. Renders a titled list of question/answer pairs as collapsible accordion items.",
|
|
461
|
+
"props": [
|
|
462
|
+
{ "name": "title", "type": "string", "required": true, "description": "FAQ section heading (e.g. 'Frequently Asked Questions')." },
|
|
463
|
+
{ "name": "items", "type": "Array<{ question: string; answer: string }>", "required": true, "description": "Array of FAQ items, each with a question and answer string." }
|
|
464
|
+
],
|
|
465
|
+
"example": "<BlogFAQ\n title=\"FAQ\"\n items={[\n { question: \"Is there a free plan?\", answer: \"Yes, our free plan is available forever.\" },\n { question: \"Can I cancel anytime?\", answer: \"Absolutely, no contracts.\" }\n ]}\n/>"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"name": "BlogTable",
|
|
469
|
+
"category": "blog",
|
|
470
|
+
"description": "Responsive data table for blog articles with styled headers and rows. Renders inside a bordered, scrollable container.",
|
|
471
|
+
"props": [
|
|
472
|
+
{ "name": "headers", "type": "string[]", "required": true, "description": "Array of column header strings." },
|
|
473
|
+
{ "name": "rows", "type": "string[][]", "required": true, "description": "Array of row arrays, where each inner array contains cell strings matching the headers." }
|
|
474
|
+
],
|
|
475
|
+
"example": "<BlogTable\n headers={[\"Plan\", \"Price\", \"Users\"]}\n rows={[\n [\"Free\", \"$0\", \"Up to 5\"],\n [\"Pro\", \"$29/mo\", \"Unlimited\"]\n ]}\n/>"
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"name": "BlogTip",
|
|
479
|
+
"category": "blog",
|
|
480
|
+
"description": "Highlighted tip/callout box for blog articles with a green accent. Displays a title and rich content for actionable advice.",
|
|
481
|
+
"props": [
|
|
482
|
+
{ "name": "title", "type": "string", "required": false, "description": "Tip heading text. Defaults to 'Tip'." },
|
|
483
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "Tip content." }
|
|
484
|
+
],
|
|
485
|
+
"example": "<BlogTip title=\"Pro Tip\">\n Use keyboard shortcuts to navigate faster.\n</BlogTip>"
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
"name": "StartFreeNowCTA",
|
|
489
|
+
"category": "blog",
|
|
490
|
+
"description": "Feature-rich CTA block for blog articles with a title, bullet-point checklist with check icons, and a primary button.",
|
|
491
|
+
"props": [
|
|
492
|
+
{ "name": "title", "type": "string", "required": true, "description": "CTA heading text." },
|
|
493
|
+
{ "name": "bullets", "type": "string[]", "required": true, "description": "Array of benefit strings displayed as a checklist." },
|
|
494
|
+
{ "name": "buttonText", "type": "string", "required": true, "description": "Text displayed on the button." },
|
|
495
|
+
{ "name": "buttonHref", "type": "string", "required": true, "description": "URL the button links to." }
|
|
496
|
+
],
|
|
497
|
+
"example": "<StartFreeNowCTA\n title=\"Ready to get started?\"\n bullets={[\"No credit card required\", \"Free forever plan\", \"Cancel anytime\"]}\n buttonText=\"Start Free\"\n buttonHref=\"/signup\"\n/>"
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"name": "BlogIndex",
|
|
501
|
+
"category": "blog",
|
|
502
|
+
"description": "Blog listing page wrapper with an optional title, description, and children for rendering blog post cards or custom content.",
|
|
503
|
+
"props": [
|
|
504
|
+
{ "name": "title", "type": "string", "required": false, "description": "Page heading displayed above the blog list." },
|
|
505
|
+
{ "name": "description", "type": "string", "required": false, "description": "Page subheading text." },
|
|
506
|
+
{ "name": "children", "type": "React.ReactNode", "required": false, "description": "Blog post cards or other content." }
|
|
507
|
+
],
|
|
508
|
+
"example": "<BlogIndex title=\"Blog\" description=\"Latest articles and insights.\">\n {/* Blog post cards rendered here */}\n</BlogIndex>"
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"name": "LegalSection",
|
|
512
|
+
"category": "legal",
|
|
513
|
+
"description": "Individual section within a legal page. Renders a titled block with prose-style content formatting for paragraphs and lists.",
|
|
514
|
+
"props": [
|
|
515
|
+
{ "name": "title", "type": "string", "required": true, "description": "Section heading (e.g. '1. Data Collection')." },
|
|
516
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "Section content (paragraphs, lists, etc.)." }
|
|
517
|
+
],
|
|
518
|
+
"example": "<LegalSection title=\"1. Data Collection\">\n <p>We collect data that you provide directly to us.</p>\n</LegalSection>"
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
"name": "LegalPage",
|
|
522
|
+
"category": "legal",
|
|
523
|
+
"description": "Top-level wrapper for legal pages (privacy policy, terms of service, etc.). Renders a centered, max-width container with a title and optional last-updated date.",
|
|
524
|
+
"props": [
|
|
525
|
+
{ "name": "title", "type": "string", "required": true, "description": "Page title displayed as an h1." },
|
|
526
|
+
{ "name": "lastUpdated", "type": "string", "required": false, "description": "Date string displayed below the title (e.g. '2024-01-15')." },
|
|
527
|
+
{ "name": "children", "type": "React.ReactNode", "required": true, "description": "LegalSection children and other content." }
|
|
528
|
+
],
|
|
529
|
+
"example": "<LegalPage title=\"Privacy Policy\" lastUpdated=\"2024-01-15\">\n <LegalSection title=\"1. Introduction\">\n <p>This privacy policy explains how we handle your data.</p>\n </LegalSection>\n</LegalPage>"
|
|
530
|
+
}
|
|
531
|
+
]
|
|
532
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface BlogArticleProps {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
contentFolder?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function BlogArticle({ children }: BlogArticleProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=BlogArticle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogArticle.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,gBAAgB;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAMzD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export function BlogArticle({ children }) {
|
|
3
|
+
return (_jsx("article", { className: "py-12 md:py-20", children: _jsx("div", { className: "container-main max-w-3xl", children: children }) }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=BlogArticle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogArticle.js","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":";AAOA,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAoB;IACxD,OAAO,CACL,kBAAS,SAAS,EAAC,gBAAgB,YACjC,cAAK,SAAS,EAAC,0BAA0B,YAAE,QAAQ,GAAO,GAClD,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface BlogCTAProps {
|
|
2
|
+
title: string;
|
|
3
|
+
buttonText: string;
|
|
4
|
+
buttonHref: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function BlogCTA({ title, buttonText, buttonHref }: BlogCTAProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=BlogCTA.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogCTA.d.ts","sourceRoot":"","sources":["../../src/blog/BlogCTA.tsx"],"names":[],"mappings":"AAGA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,YAAY,2CAStE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '../ui/button';
|
|
3
|
+
export function BlogCTA({ title, buttonText, buttonHref }) {
|
|
4
|
+
return (_jsxs("div", { className: "my-10 p-8 rounded-2xl glass-1 text-center", children: [_jsx("h3", { className: "text-xl font-bold text-foreground mb-4", children: title }), _jsx(Button, { asChild: true, children: _jsx("a", { href: buttonHref, children: buttonText }) })] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=BlogCTA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogCTA.js","sourceRoot":"","sources":["../../src/blog/BlogCTA.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAgB;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,2CAA2C,aACxD,aAAI,SAAS,EAAC,wCAAwC,YAAE,KAAK,GAAM,EACnE,KAAC,MAAM,IAAC,OAAO,kBACb,YAAG,IAAI,EAAE,UAAU,YAAG,UAAU,GAAK,GAC9B,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface BlogCTABannerProps {
|
|
2
|
+
title: string;
|
|
3
|
+
description: string;
|
|
4
|
+
buttonText: string;
|
|
5
|
+
buttonLink: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function BlogCTABanner({ title, description, buttonText, buttonLink }: BlogCTABannerProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=BlogCTABanner.d.ts.map
|