@shipsite.dev/components 0.2.21 → 0.2.22

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.
Files changed (127) hide show
  1. package/components.json +31 -10
  2. package/dist/blog/BlogArticle.d.ts +2 -1
  3. package/dist/blog/BlogArticle.d.ts.map +1 -1
  4. package/dist/blog/BlogArticle.js +2 -2
  5. package/dist/blog/BlogArticle.js.map +1 -1
  6. package/dist/blog/BlogArticleClient.d.ts +4 -2
  7. package/dist/blog/BlogArticleClient.d.ts.map +1 -1
  8. package/dist/blog/BlogArticleClient.js +4 -3
  9. package/dist/blog/BlogArticleClient.js.map +1 -1
  10. package/dist/blog/BlogIndex.d.ts +2 -1
  11. package/dist/blog/BlogIndex.d.ts.map +1 -1
  12. package/dist/blog/BlogIndex.js +2 -2
  13. package/dist/blog/BlogIndex.js.map +1 -1
  14. package/dist/content/ContentPage.d.ts +2 -1
  15. package/dist/content/ContentPage.d.ts.map +1 -1
  16. package/dist/content/ContentPage.js +2 -2
  17. package/dist/content/ContentPage.js.map +1 -1
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/marketing/AlternatingFeatures.d.ts +5 -4
  23. package/dist/marketing/AlternatingFeatures.d.ts.map +1 -1
  24. package/dist/marketing/AlternatingFeatures.js +6 -5
  25. package/dist/marketing/AlternatingFeatures.js.map +1 -1
  26. package/dist/marketing/BannerCTA.d.ts +2 -1
  27. package/dist/marketing/BannerCTA.d.ts.map +1 -1
  28. package/dist/marketing/BannerCTA.js +2 -2
  29. package/dist/marketing/BannerCTA.js.map +1 -1
  30. package/dist/marketing/BentoGrid.d.ts +4 -2
  31. package/dist/marketing/BentoGrid.d.ts.map +1 -1
  32. package/dist/marketing/BentoGrid.js +4 -3
  33. package/dist/marketing/BentoGrid.js.map +1 -1
  34. package/dist/marketing/CalloutCard.d.ts +2 -1
  35. package/dist/marketing/CalloutCard.d.ts.map +1 -1
  36. package/dist/marketing/CalloutCard.js +2 -2
  37. package/dist/marketing/CalloutCard.js.map +1 -1
  38. package/dist/marketing/CardGrid.d.ts +2 -1
  39. package/dist/marketing/CardGrid.d.ts.map +1 -1
  40. package/dist/marketing/CardGrid.js +2 -2
  41. package/dist/marketing/CardGrid.js.map +1 -1
  42. package/dist/marketing/Carousel.d.ts +4 -2
  43. package/dist/marketing/Carousel.d.ts.map +1 -1
  44. package/dist/marketing/Carousel.js +4 -3
  45. package/dist/marketing/Carousel.js.map +1 -1
  46. package/dist/marketing/Companies.d.ts +4 -2
  47. package/dist/marketing/Companies.d.ts.map +1 -1
  48. package/dist/marketing/Companies.js +4 -3
  49. package/dist/marketing/Companies.js.map +1 -1
  50. package/dist/marketing/FAQ.d.ts +2 -1
  51. package/dist/marketing/FAQ.d.ts.map +1 -1
  52. package/dist/marketing/FAQ.js +2 -2
  53. package/dist/marketing/FAQ.js.map +1 -1
  54. package/dist/marketing/Features.d.ts +2 -1
  55. package/dist/marketing/Features.d.ts.map +1 -1
  56. package/dist/marketing/Features.js +2 -2
  57. package/dist/marketing/Features.js.map +1 -1
  58. package/dist/marketing/Gallery.d.ts +4 -2
  59. package/dist/marketing/Gallery.d.ts.map +1 -1
  60. package/dist/marketing/Gallery.js +4 -3
  61. package/dist/marketing/Gallery.js.map +1 -1
  62. package/dist/marketing/Hero.d.ts +4 -2
  63. package/dist/marketing/Hero.d.ts.map +1 -1
  64. package/dist/marketing/Hero.js +3 -2
  65. package/dist/marketing/Hero.js.map +1 -1
  66. package/dist/marketing/PageHero.d.ts +2 -1
  67. package/dist/marketing/PageHero.d.ts.map +1 -1
  68. package/dist/marketing/PageHero.js +2 -2
  69. package/dist/marketing/PageHero.js.map +1 -1
  70. package/dist/marketing/PricingSection.d.ts +2 -1
  71. package/dist/marketing/PricingSection.d.ts.map +1 -1
  72. package/dist/marketing/PricingSection.js +2 -2
  73. package/dist/marketing/PricingSection.js.map +1 -1
  74. package/dist/marketing/SocialProof.d.ts +2 -1
  75. package/dist/marketing/SocialProof.d.ts.map +1 -1
  76. package/dist/marketing/SocialProof.js +2 -2
  77. package/dist/marketing/SocialProof.js.map +1 -1
  78. package/dist/marketing/Stats.d.ts +2 -1
  79. package/dist/marketing/Stats.d.ts.map +1 -1
  80. package/dist/marketing/Stats.js +2 -2
  81. package/dist/marketing/Stats.js.map +1 -1
  82. package/dist/marketing/Steps.d.ts +2 -1
  83. package/dist/marketing/Steps.d.ts.map +1 -1
  84. package/dist/marketing/Steps.js +2 -2
  85. package/dist/marketing/Steps.js.map +1 -1
  86. package/dist/marketing/TabsSection.d.ts +4 -2
  87. package/dist/marketing/TabsSection.d.ts.map +1 -1
  88. package/dist/marketing/TabsSection.js +4 -3
  89. package/dist/marketing/TabsSection.js.map +1 -1
  90. package/dist/marketing/Testimonial.d.ts +4 -2
  91. package/dist/marketing/Testimonial.d.ts.map +1 -1
  92. package/dist/marketing/Testimonial.js +3 -2
  93. package/dist/marketing/Testimonial.js.map +1 -1
  94. package/dist/marketing/Testimonials.d.ts +4 -2
  95. package/dist/marketing/Testimonials.d.ts.map +1 -1
  96. package/dist/marketing/Testimonials.js +4 -3
  97. package/dist/marketing/Testimonials.js.map +1 -1
  98. package/dist/ui/theme-image.d.ts +11 -0
  99. package/dist/ui/theme-image.d.ts.map +1 -0
  100. package/dist/ui/theme-image.js +9 -0
  101. package/dist/ui/theme-image.js.map +1 -0
  102. package/package.json +1 -1
  103. package/src/blog/BlogArticle.tsx +3 -2
  104. package/src/blog/BlogArticleClient.tsx +6 -3
  105. package/src/blog/BlogIndex.tsx +3 -2
  106. package/src/content/ContentPage.tsx +3 -2
  107. package/src/index.ts +4 -0
  108. package/src/marketing/AlternatingFeatures.tsx +7 -13
  109. package/src/marketing/BannerCTA.tsx +3 -2
  110. package/src/marketing/BentoGrid.tsx +6 -4
  111. package/src/marketing/CalloutCard.tsx +3 -2
  112. package/src/marketing/CardGrid.tsx +3 -2
  113. package/src/marketing/Carousel.tsx +6 -4
  114. package/src/marketing/Companies.tsx +10 -8
  115. package/src/marketing/FAQ.tsx +3 -2
  116. package/src/marketing/Features.tsx +3 -2
  117. package/src/marketing/Gallery.tsx +6 -4
  118. package/src/marketing/Hero.tsx +6 -4
  119. package/src/marketing/PageHero.tsx +3 -2
  120. package/src/marketing/PricingSection.tsx +3 -2
  121. package/src/marketing/SocialProof.tsx +3 -2
  122. package/src/marketing/Stats.tsx +3 -2
  123. package/src/marketing/Steps.tsx +3 -2
  124. package/src/marketing/TabsSection.tsx +6 -4
  125. package/src/marketing/Testimonial.tsx +6 -4
  126. package/src/marketing/Testimonials.tsx +6 -4
  127. package/src/ui/theme-image.tsx +20 -0
@@ -22,6 +22,7 @@ interface ComparisonCategoryProps {
22
22
  }
23
23
  export declare function ComparisonCategory(_props: ComparisonCategoryProps): null;
24
24
  interface PricingSectionProps {
25
+ id?: string;
25
26
  title?: string;
26
27
  description?: string;
27
28
  monthlyLabel?: string;
@@ -29,6 +30,6 @@ interface PricingSectionProps {
29
30
  mostPopularLabel?: string;
30
31
  children: React.ReactNode;
31
32
  }
32
- export declare function PricingSection({ title, description, monthlyLabel, yearlyLabel, mostPopularLabel, children }: PricingSectionProps): import("react/jsx-runtime").JSX.Element;
33
+ export declare function PricingSection({ id, title, description, monthlyLabel, yearlyLabel, mostPopularLabel, children }: PricingSectionProps): import("react/jsx-runtime").JSX.Element;
33
34
  export {};
34
35
  //# sourceMappingURL=PricingSection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PricingSection.d.ts","sourceRoot":"","sources":["../../src/marketing/PricingSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAMlE,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,QAEnD;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,QAEvD;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,QAEjE;AAED,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,YAAwB,EAAE,WAAsB,EAAE,gBAAiC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAiGxK"}
1
+ {"version":3,"file":"PricingSection.d.ts","sourceRoot":"","sources":["../../src/marketing/PricingSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAMlE,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,gBAAgB,QAEnD;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,QAEvD;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,QAEjE;AAED,UAAU,mBAAmB;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,YAAwB,EAAE,WAAsB,EAAE,gBAAiC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAiG5K"}
@@ -14,7 +14,7 @@ export function ComparisonRow(_props) {
14
14
  export function ComparisonCategory(_props) {
15
15
  return null;
16
16
  }
17
- export function PricingSection({ title, description, monthlyLabel = 'Monthly', yearlyLabel = 'Yearly', mostPopularLabel = 'Most Popular', children }) {
17
+ export function PricingSection({ id, title, description, monthlyLabel = 'Monthly', yearlyLabel = 'Yearly', mostPopularLabel = 'Most Popular', children }) {
18
18
  const [isYearly, setIsYearly] = useState(false);
19
19
  const plans = [];
20
20
  const rows = [];
@@ -28,7 +28,7 @@ export function PricingSection({ title, description, monthlyLabel = 'Monthly', y
28
28
  else if (child.type === ComparisonCategory)
29
29
  rows.push({ type: 'category', props: child.props });
30
30
  });
31
- return (_jsx(Section, { children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mx-auto", children: description })] })), plans.some((p) => p.yearlyPrice) && (_jsxs("div", { className: "flex items-center justify-center gap-3 mb-12", children: [_jsx("span", { className: cn('text-sm font-medium', !isYearly ? 'text-foreground' : 'text-muted-foreground'), children: monthlyLabel }), _jsx("button", { onClick: () => setIsYearly(!isYearly), className: cn('relative w-12 h-6 rounded-full transition-colors', isYearly ? 'bg-primary' : 'bg-muted'), children: _jsx("span", { className: cn('absolute top-0.5 w-5 h-5 bg-background rounded-full shadow transition-transform', isYearly ? 'translate-x-6' : 'translate-x-0.5') }) }), _jsx("span", { className: cn('text-sm font-medium', isYearly ? 'text-foreground' : 'text-muted-foreground'), children: yearlyLabel })] })), _jsx("div", { className: cn('grid grid-cols-1 gap-6 mb-16', plans.length === 2 && 'md:grid-cols-2', plans.length >= 3 && 'md:grid-cols-3'), children: plans.map((plan) => (_jsxs("div", { className: cn('relative rounded-2xl p-8', plan.popular
31
+ return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mx-auto", children: description })] })), plans.some((p) => p.yearlyPrice) && (_jsxs("div", { className: "flex items-center justify-center gap-3 mb-12", children: [_jsx("span", { className: cn('text-sm font-medium', !isYearly ? 'text-foreground' : 'text-muted-foreground'), children: monthlyLabel }), _jsx("button", { onClick: () => setIsYearly(!isYearly), className: cn('relative w-12 h-6 rounded-full transition-colors', isYearly ? 'bg-primary' : 'bg-muted'), children: _jsx("span", { className: cn('absolute top-0.5 w-5 h-5 bg-background rounded-full shadow transition-transform', isYearly ? 'translate-x-6' : 'translate-x-0.5') }) }), _jsx("span", { className: cn('text-sm font-medium', isYearly ? 'text-foreground' : 'text-muted-foreground'), children: yearlyLabel })] })), _jsx("div", { className: cn('grid grid-cols-1 gap-6 mb-16', plans.length === 2 && 'md:grid-cols-2', plans.length >= 3 && 'md:grid-cols-3'), children: plans.map((plan) => (_jsxs("div", { className: cn('relative rounded-2xl p-8', plan.popular
32
32
  ? 'glass-4 ring-2 ring-primary shadow-xl'
33
33
  : 'glass-1'), children: [plan.popular && (_jsx("div", { className: "absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 bg-primary text-primary-foreground text-xs font-medium rounded-full", children: mostPopularLabel })), _jsx("h3", { className: "text-xl font-bold mb-2 text-foreground", children: plan.name }), plan.description && _jsx("p", { className: "text-sm mb-4 text-muted-foreground", children: plan.description }), _jsx("div", { className: "mb-6", children: _jsx("span", { className: "text-4xl font-bold text-foreground", children: isYearly && plan.yearlyPrice ? plan.yearlyPrice : plan.price }) }), _jsx(Button, { asChild: true, className: "w-full", variant: plan.popular ? 'default' : 'glow', children: _jsx("a", { href: plan.cta.href, children: plan.cta.label }) }), _jsx("ul", { className: "mt-6 space-y-3", children: plan.features.map((feature) => (_jsxs("li", { className: "flex items-start gap-2 text-sm text-muted-foreground", children: [_jsx(Check, { className: "w-4 h-4 mt-0.5 shrink-0 text-primary" }), feature] }, feature))) })] }, plan.name))) }), rows.length > 0 && (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border", children: [_jsx("th", { className: "text-left py-4 pr-4 font-medium text-foreground", children: "Feature" }), plans.map((plan) => _jsx("th", { className: "text-center py-4 px-4 font-medium text-foreground", children: plan.name }, plan.name))] }) }), _jsx("tbody", { children: rows.map((row, i) => {
34
34
  if (row.type === 'category') {
@@ -1 +1 @@
1
- {"version":3,"file":"PricingSection.js","sourceRoot":"","sources":["../../src/marketing/PricingSection.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PricingSection.js","sourceRoot":"","sources":["../../src/marketing/PricingSection.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  interface SocialProofProps {
2
+ id?: string;
2
3
  avatars?: string[];
3
4
  text: string;
4
5
  subtext?: string;
5
6
  }
6
- export declare function SocialProof({ avatars, text, subtext }: SocialProofProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function SocialProof({ id, avatars, text, subtext }: SocialProofProps): import("react/jsx-runtime").JSX.Element;
7
8
  export {};
8
9
  //# sourceMappingURL=SocialProof.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SocialProof.d.ts","sourceRoot":"","sources":["../../src/marketing/SocialProof.tsx"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,gBAAgB,2CA4BvE"}
1
+ {"version":3,"file":"SocialProof.d.ts","sourceRoot":"","sources":["../../src/marketing/SocialProof.tsx"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,gBAAgB,2CA4B3E"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Section } from '../ui/section';
3
- export function SocialProof({ avatars, text, subtext }) {
4
- return (_jsx(Section, { className: "py-12", children: _jsx("div", { className: "container-main", children: _jsxs("div", { className: "flex flex-col items-center gap-4 text-center", children: [avatars && avatars.length > 0 && (_jsxs("div", { className: "flex -space-x-3", children: [avatars.map((src, i) => (_jsx("img", { src: src, alt: "", className: "w-10 h-10 rounded-full border-2 border-background object-cover" }, i))), _jsx("div", { className: "w-10 h-10 rounded-full border-2 border-background bg-primary flex items-center justify-center", children: _jsx("span", { className: "text-xs font-semibold text-primary-foreground", children: "+" }) })] })), _jsxs("div", { children: [_jsx("p", { className: "text-lg font-semibold text-foreground", children: text }), subtext && _jsx("p", { className: "text-sm text-muted-foreground", children: subtext })] })] }) }) }));
3
+ export function SocialProof({ id, avatars, text, subtext }) {
4
+ return (_jsx(Section, { id: id, className: "py-12", children: _jsx("div", { className: "container-main", children: _jsxs("div", { className: "flex flex-col items-center gap-4 text-center", children: [avatars && avatars.length > 0 && (_jsxs("div", { className: "flex -space-x-3", children: [avatars.map((src, i) => (_jsx("img", { src: src, alt: "", className: "w-10 h-10 rounded-full border-2 border-background object-cover" }, i))), _jsx("div", { className: "w-10 h-10 rounded-full border-2 border-background bg-primary flex items-center justify-center", children: _jsx("span", { className: "text-xs font-semibold text-primary-foreground", children: "+" }) })] })), _jsxs("div", { children: [_jsx("p", { className: "text-lg font-semibold text-foreground", children: text }), subtext && _jsx("p", { className: "text-sm text-muted-foreground", children: subtext })] })] }) }) }));
5
5
  }
6
6
  //# sourceMappingURL=SocialProof.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SocialProof.js","sourceRoot":"","sources":["../../src/marketing/SocialProof.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQxC,MAAM,UAAU,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAoB;IACtE,OAAO,CACL,KAAC,OAAO,IAAC,SAAS,EAAC,OAAO,YACxB,cAAK,SAAS,EAAC,gBAAgB,YAC7B,eAAK,SAAS,EAAC,8CAA8C,aAC1D,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAChC,eAAK,SAAS,EAAC,iBAAiB,aAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACvB,cAEE,GAAG,EAAE,GAAG,EACR,GAAG,EAAC,EAAE,EACN,SAAS,EAAC,gEAAgE,IAHrE,CAAC,CAIN,CACH,CAAC,EACF,cAAK,SAAS,EAAC,+FAA+F,YAC5G,eAAM,SAAS,EAAC,+CAA+C,kBAAS,GACpE,IACF,CACP,EACD,0BACE,YAAG,SAAS,EAAC,uCAAuC,YAAE,IAAI,GAAK,EAC9D,OAAO,IAAI,YAAG,SAAS,EAAC,+BAA+B,YAAE,OAAO,GAAK,IAClE,IACF,GACF,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"SocialProof.js","sourceRoot":"","sources":["../../src/marketing/SocialProof.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AASxC,MAAM,UAAU,WAAW,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAoB;IAC1E,OAAO,CACL,KAAC,OAAO,IAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,OAAO,YAChC,cAAK,SAAS,EAAC,gBAAgB,YAC7B,eAAK,SAAS,EAAC,8CAA8C,aAC1D,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAChC,eAAK,SAAS,EAAC,iBAAiB,aAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACvB,cAEE,GAAG,EAAE,GAAG,EACR,GAAG,EAAC,EAAE,EACN,SAAS,EAAC,gEAAgE,IAHrE,CAAC,CAIN,CACH,CAAC,EACF,cAAK,SAAS,EAAC,+FAA+F,YAC5G,eAAM,SAAS,EAAC,+CAA+C,kBAAS,GACpE,IACF,CACP,EACD,0BACE,YAAG,SAAS,EAAC,uCAAuC,YAAE,IAAI,GAAK,EAC9D,OAAO,IAAI,YAAG,SAAS,EAAC,+BAA+B,YAAE,OAAO,GAAK,IAClE,IACF,GACF,GACE,CACX,CAAC;AACJ,CAAC"}
@@ -7,9 +7,10 @@ interface StatProps {
7
7
  }
8
8
  export declare function Stat(_props: StatProps): null;
9
9
  interface StatsProps {
10
+ id?: string;
10
11
  title?: string;
11
12
  children: React.ReactNode;
12
13
  }
13
- export declare function Stats({ title, children }: StatsProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function Stats({ id, title, children }: StatsProps): import("react/jsx-runtime").JSX.Element;
14
15
  export {};
15
16
  //# sourceMappingURL=Stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stats.d.ts","sourceRoot":"","sources":["../../src/marketing/Stats.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,SAAS,QAErC;AAED,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAqCpD"}
1
+ {"version":3,"file":"Stats.d.ts","sourceRoot":"","sources":["../../src/marketing/Stats.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,SAAS,QAErC;AAED,UAAU,UAAU;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAqCxD"}
@@ -4,13 +4,13 @@ import { Section } from '../ui/section';
4
4
  export function Stat(_props) {
5
5
  return null;
6
6
  }
7
- export function Stats({ title, children }) {
7
+ export function Stats({ id, title, children }) {
8
8
  const items = [];
9
9
  React.Children.forEach(children, (child) => {
10
10
  if (React.isValidElement(child) && child.type === Stat) {
11
11
  items.push(child.props);
12
12
  }
13
13
  });
14
- return (_jsx(Section, { children: _jsxs("div", { className: "container-main max-w-[960px]", children: [title && (_jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-12 text-center", children: title })), _jsx("div", { className: "grid grid-cols-2 gap-12 sm:grid-cols-4", children: items.map((item, i) => (_jsxs("div", { className: "flex flex-col items-start gap-3 text-left", children: [item.label && (_jsx("div", { className: "text-muted-foreground text-sm font-semibold", children: item.label })), _jsxs("div", { className: "flex items-baseline gap-2", children: [_jsx("div", { className: "from-foreground to-foreground dark:to-brand bg-linear-to-r bg-clip-text text-4xl font-medium text-transparent drop-shadow-[2px_1px_24px_var(--brand-foreground)] transition-all duration-300 sm:text-5xl md:text-6xl", children: item.value }), item.suffix && (_jsx("div", { className: "text-brand text-2xl font-semibold", children: item.suffix }))] }), item.description && (_jsx("div", { className: "text-muted-foreground text-sm font-semibold text-pretty", children: item.description }))] }, i))) })] }) }));
14
+ return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main max-w-[960px]", children: [title && (_jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-12 text-center", children: title })), _jsx("div", { className: "grid grid-cols-2 gap-12 sm:grid-cols-4", children: items.map((item, i) => (_jsxs("div", { className: "flex flex-col items-start gap-3 text-left", children: [item.label && (_jsx("div", { className: "text-muted-foreground text-sm font-semibold", children: item.label })), _jsxs("div", { className: "flex items-baseline gap-2", children: [_jsx("div", { className: "from-foreground to-foreground dark:to-brand bg-linear-to-r bg-clip-text text-4xl font-medium text-transparent drop-shadow-[2px_1px_24px_var(--brand-foreground)] transition-all duration-300 sm:text-5xl md:text-6xl", children: item.value }), item.suffix && (_jsx("div", { className: "text-brand text-2xl font-semibold", children: item.suffix }))] }), item.description && (_jsx("div", { className: "text-muted-foreground text-sm font-semibold text-pretty", children: item.description }))] }, i))) })] }) }));
15
15
  }
16
16
  //# sourceMappingURL=Stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stats.js","sourceRoot":"","sources":["../../src/marketing/Stats.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AASxC,MAAM,UAAU,IAAI,CAAC,MAAiB;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAc;IACnD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAkB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,OAAO,cACN,eAAK,SAAS,EAAC,8BAA8B,aAC1C,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,kEAAkE,YAAE,KAAK,GAAM,CAC9F,EACD,cAAK,SAAS,EAAC,wCAAwC,YACpD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAa,SAAS,EAAC,2CAA2C,aAC/D,IAAI,CAAC,KAAK,IAAI,CACb,cAAK,SAAS,EAAC,6CAA6C,YAAE,IAAI,CAAC,KAAK,GAAO,CAChF,EACD,eAAK,SAAS,EAAC,2BAA2B,aACxC,cAAK,SAAS,EAAC,sNAAsN,YAClO,IAAI,CAAC,KAAK,GACP,EACL,IAAI,CAAC,MAAM,IAAI,CACd,cAAK,SAAS,EAAC,mCAAmC,YAAE,IAAI,CAAC,MAAM,GAAO,CACvE,IACG,EACL,IAAI,CAAC,WAAW,IAAI,CACnB,cAAK,SAAS,EAAC,yDAAyD,YAAE,IAAI,CAAC,WAAW,GAAO,CAClG,KAdO,CAAC,CAeL,CACP,CAAC,GACE,IACF,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Stats.js","sourceRoot":"","sources":["../../src/marketing/Stats.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AASxC,MAAM,UAAU,IAAI,CAAC,MAAiB;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,MAAM,UAAU,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAc;IACvD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAkB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,OAAO,IAAC,EAAE,EAAE,EAAE,YACb,eAAK,SAAS,EAAC,8BAA8B,aAC1C,KAAK,IAAI,CACR,aAAI,SAAS,EAAC,kEAAkE,YAAE,KAAK,GAAM,CAC9F,EACD,cAAK,SAAS,EAAC,wCAAwC,YACpD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAa,SAAS,EAAC,2CAA2C,aAC/D,IAAI,CAAC,KAAK,IAAI,CACb,cAAK,SAAS,EAAC,6CAA6C,YAAE,IAAI,CAAC,KAAK,GAAO,CAChF,EACD,eAAK,SAAS,EAAC,2BAA2B,aACxC,cAAK,SAAS,EAAC,sNAAsN,YAClO,IAAI,CAAC,KAAK,GACP,EACL,IAAI,CAAC,MAAM,IAAI,CACd,cAAK,SAAS,EAAC,mCAAmC,YAAE,IAAI,CAAC,MAAM,GAAO,CACvE,IACG,EACL,IAAI,CAAC,WAAW,IAAI,CACnB,cAAK,SAAS,EAAC,yDAAyD,YAAE,IAAI,CAAC,WAAW,GAAO,CAClG,KAdO,CAAC,CAeL,CACP,CAAC,GACE,IACF,GACE,CACX,CAAC;AACJ,CAAC"}
@@ -5,10 +5,11 @@ interface StepProps {
5
5
  }
6
6
  export declare function Step(_props: StepProps): null;
7
7
  interface StepsProps {
8
+ id?: string;
8
9
  title?: string;
9
10
  description?: string;
10
11
  children: React.ReactNode;
11
12
  }
12
- export declare function Steps({ title, description, children }: StepsProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function Steps({ id, title, description, children }: StepsProps): import("react/jsx-runtime").JSX.Element;
13
14
  export {};
14
15
  //# sourceMappingURL=Steps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Steps.d.ts","sourceRoot":"","sources":["../../src/marketing/Steps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,SAAS,QAErC;AAED,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAkCjE"}
1
+ {"version":3,"file":"Steps.d.ts","sourceRoot":"","sources":["../../src/marketing/Steps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,SAAS,QAErC;AAED,UAAU,UAAU;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAkCrE"}
@@ -4,13 +4,13 @@ import { Section } from '../ui/section';
4
4
  export function Step(_props) {
5
5
  return null;
6
6
  }
7
- export function Steps({ title, description, children }) {
7
+ export function Steps({ id, title, description, children }) {
8
8
  const steps = [];
9
9
  React.Children.forEach(children, (child) => {
10
10
  if (React.isValidElement(child) && child.type === Step) {
11
11
  steps.push(child.props);
12
12
  }
13
13
  });
14
- return (_jsx(Section, { children: _jsxs("div", { className: "container-main max-w-3xl", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground", children: description })] })), _jsx("div", { className: "space-y-8", children: steps.map((step, i) => (_jsxs("div", { className: "flex gap-6", children: [_jsxs("div", { className: "flex flex-col items-center", children: [_jsx("div", { className: "w-10 h-10 rounded-full bg-primary text-primary-foreground flex items-center justify-center font-bold text-sm shrink-0", children: i + 1 }), i < steps.length - 1 && _jsx("div", { className: "w-px flex-1 bg-border mt-2" })] }), _jsxs("div", { className: "pb-8", children: [_jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children: step.title }), _jsx("p", { className: "text-muted-foreground", children: step.description })] })] }, i))) })] }) }));
14
+ return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main max-w-3xl", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground", children: description })] })), _jsx("div", { className: "space-y-8", children: steps.map((step, i) => (_jsxs("div", { className: "flex gap-6", children: [_jsxs("div", { className: "flex flex-col items-center", children: [_jsx("div", { className: "w-10 h-10 rounded-full bg-primary text-primary-foreground flex items-center justify-center font-bold text-sm shrink-0", children: i + 1 }), i < steps.length - 1 && _jsx("div", { className: "w-px flex-1 bg-border mt-2" })] }), _jsxs("div", { className: "pb-8", children: [_jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children: step.title }), _jsx("p", { className: "text-muted-foreground", children: step.description })] })] }, i))) })] }) }));
15
15
  }
16
16
  //# sourceMappingURL=Steps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Steps.js","sourceRoot":"","sources":["../../src/marketing/Steps.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAOxC,MAAM,UAAU,IAAI,CAAC,MAAiB;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAc;IAChE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAkB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,OAAO,cACN,eAAK,SAAS,EAAC,0BAA0B,aACtC,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mBAAmB,aAC/B,KAAK,IAAI,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EACzF,WAAW,IAAI,YAAG,SAAS,EAAC,+BAA+B,YAAE,WAAW,GAAK,IAC1E,CACP,EACD,cAAK,SAAS,EAAC,WAAW,YACvB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAa,SAAS,EAAC,YAAY,aACjC,eAAK,SAAS,EAAC,4BAA4B,aACzC,cAAK,SAAS,EAAC,uHAAuH,YAAE,CAAC,GAAG,CAAC,GAAO,EACnJ,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,cAAK,SAAS,EAAC,4BAA4B,GAAG,IACnE,EACN,eAAK,SAAS,EAAC,MAAM,aACnB,aAAI,SAAS,EAAC,4CAA4C,YAAE,IAAI,CAAC,KAAK,GAAM,EAC5E,YAAG,SAAS,EAAC,uBAAuB,YAAE,IAAI,CAAC,WAAW,GAAK,IACvD,KARE,CAAC,CASL,CACP,CAAC,GACE,IACF,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Steps.js","sourceRoot":"","sources":["../../src/marketing/Steps.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAOxC,MAAM,UAAU,IAAI,CAAC,MAAiB;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,UAAU,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAc;IACpE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAkB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,OAAO,IAAC,EAAE,EAAE,EAAE,YACb,eAAK,SAAS,EAAC,0BAA0B,aACtC,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mBAAmB,aAC/B,KAAK,IAAI,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EACzF,WAAW,IAAI,YAAG,SAAS,EAAC,+BAA+B,YAAE,WAAW,GAAK,IAC1E,CACP,EACD,cAAK,SAAS,EAAC,WAAW,YACvB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAa,SAAS,EAAC,YAAY,aACjC,eAAK,SAAS,EAAC,4BAA4B,aACzC,cAAK,SAAS,EAAC,uHAAuH,YAAE,CAAC,GAAG,CAAC,GAAO,EACnJ,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,cAAK,SAAS,EAAC,4BAA4B,GAAG,IACnE,EACN,eAAK,SAAS,EAAC,MAAM,aACnB,aAAI,SAAS,EAAC,4CAA4C,YAAE,IAAI,CAAC,KAAK,GAAM,EAC5E,YAAG,SAAS,EAAC,uBAAuB,YAAE,IAAI,CAAC,WAAW,GAAK,IACvD,KARE,CAAC,CASL,CACP,CAAC,GACE,IACF,GACE,CACX,CAAC;AACJ,CAAC"}
@@ -1,17 +1,19 @@
1
1
  import React from 'react';
2
+ import { type ImageSource } from '../ui/theme-image';
2
3
  interface TabItemProps {
3
4
  label: string;
4
5
  title?: string;
5
6
  description?: string;
6
- image?: string;
7
+ image?: ImageSource;
7
8
  children?: React.ReactNode;
8
9
  }
9
10
  export declare function TabItem(_props: TabItemProps): null;
10
11
  interface TabsSectionProps {
12
+ id?: string;
11
13
  title?: string;
12
14
  description?: string;
13
15
  children: React.ReactNode;
14
16
  }
15
- export declare function TabsSection({ title, description, children }: TabsSectionProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function TabsSection({ id, title, description, children }: TabsSectionProps): import("react/jsx-runtime").JSX.Element;
16
18
  export {};
17
19
  //# sourceMappingURL=TabsSection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabsSection.d.ts","sourceRoot":"","sources":["../../src/marketing/TabsSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,YAAY,QAE3C;AAED,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CA2D7E"}
1
+ {"version":3,"file":"TabsSection.d.ts","sourceRoot":"","sources":["../../src/marketing/TabsSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,YAAY,QAE3C;AAED,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CA2DjF"}
@@ -3,10 +3,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import React, { useState } from 'react';
4
4
  import { Section } from '../ui/section';
5
5
  import { cn } from '../lib/utils';
6
+ import { ThemeImage } from '../ui/theme-image';
6
7
  export function TabItem(_props) {
7
8
  return null;
8
9
  }
9
- export function TabsSection({ title, description, children }) {
10
+ export function TabsSection({ id, title, description, children }) {
10
11
  const [activeIndex, setActiveIndex] = useState(0);
11
12
  const tabs = [];
12
13
  React.Children.forEach(children, (child) => {
@@ -15,8 +16,8 @@ export function TabsSection({ title, description, children }) {
15
16
  }
16
17
  });
17
18
  const activeTab = tabs[activeIndex];
18
- return (_jsx(Section, { children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mx-auto", children: description })] })), _jsx("div", { className: "flex justify-center mb-8", children: _jsx("div", { className: "inline-flex rounded-full glass-1 p-1 gap-1", children: tabs.map((tab, i) => (_jsx("button", { onClick: () => setActiveIndex(i), className: cn('px-4 py-2 rounded-full text-sm font-medium transition-all', i === activeIndex
19
+ return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mx-auto", children: description })] })), _jsx("div", { className: "flex justify-center mb-8", children: _jsx("div", { className: "inline-flex rounded-full glass-1 p-1 gap-1", children: tabs.map((tab, i) => (_jsx("button", { onClick: () => setActiveIndex(i), className: cn('px-4 py-2 rounded-full text-sm font-medium transition-all', i === activeIndex
19
20
  ? 'bg-primary text-primary-foreground'
20
- : 'text-muted-foreground hover:text-foreground'), children: tab.label }, i))) }) }), activeTab && (_jsx("div", { className: "glass-1 rounded-2xl p-8 md:p-12", children: _jsxs("div", { className: cn('grid gap-8', activeTab.image && 'md:grid-cols-2 items-center'), children: [_jsxs("div", { children: [activeTab.title && (_jsx("h3", { className: "text-2xl font-bold text-foreground mb-4", children: activeTab.title })), activeTab.description && (_jsx("p", { className: "text-muted-foreground leading-relaxed", children: activeTab.description }))] }), activeTab.image && (_jsx("img", { src: activeTab.image, alt: activeTab.title || activeTab.label, className: "w-full rounded-xl" }))] }) }))] }) }));
21
+ : 'text-muted-foreground hover:text-foreground'), children: tab.label }, i))) }) }), activeTab && (_jsx("div", { className: "glass-1 rounded-2xl p-8 md:p-12", children: _jsxs("div", { className: cn('grid gap-8', activeTab.image && 'md:grid-cols-2 items-center'), children: [_jsxs("div", { children: [activeTab.title && (_jsx("h3", { className: "text-2xl font-bold text-foreground mb-4", children: activeTab.title })), activeTab.description && (_jsx("p", { className: "text-muted-foreground leading-relaxed", children: activeTab.description }))] }), activeTab.image && (_jsx(ThemeImage, { src: activeTab.image, alt: activeTab.title || activeTab.label, className: "w-full rounded-xl" }))] }) }))] }) }));
21
22
  }
22
23
  //# sourceMappingURL=TabsSection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabsSection.js","sourceRoot":"","sources":["../../src/marketing/TabsSection.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAUlC,MAAM,UAAU,OAAO,CAAC,MAAoB;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAoB;IAC5E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAqB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAEpC,OAAO,CACL,KAAC,OAAO,cACN,eAAK,SAAS,EAAC,gBAAgB,aAC5B,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mBAAmB,aAC/B,KAAK,IAAI,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EACzF,WAAW,IAAI,YAAG,SAAS,EAAC,iDAAiD,YAAE,WAAW,GAAK,IAC5F,CACP,EACD,cAAK,SAAS,EAAC,0BAA0B,YACvC,cAAK,SAAS,EAAC,4CAA4C,YACxD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAChC,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D,CAAC,KAAK,WAAW;gCACf,CAAC,CAAC,oCAAoC;gCACtC,CAAC,CAAC,6CAA6C,CAClD,YAEA,GAAG,CAAC,KAAK,IATL,CAAC,CAUC,CACV,CAAC,GACE,GACF,EACL,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,iCAAiC,YAC9C,eAAK,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,KAAK,IAAI,6BAA6B,CAAC,aAChF,0BACG,SAAS,CAAC,KAAK,IAAI,CAClB,aAAI,SAAS,EAAC,yCAAyC,YAAE,SAAS,CAAC,KAAK,GAAM,CAC/E,EACA,SAAS,CAAC,WAAW,IAAI,CACxB,YAAG,SAAS,EAAC,uCAAuC,YAAE,SAAS,CAAC,WAAW,GAAK,CACjF,IACG,EACL,SAAS,CAAC,KAAK,IAAI,CAClB,cAAK,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,EAAC,mBAAmB,GAAG,CACrG,IACG,GACF,CACP,IACG,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"TabsSection.js","sourceRoot":"","sources":["../../src/marketing/TabsSection.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAUjE,MAAM,UAAU,OAAO,CAAC,MAAoB;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,UAAU,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAoB;IAChF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElD,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAqB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAEpC,OAAO,CACL,KAAC,OAAO,IAAC,EAAE,EAAE,EAAE,YACb,eAAK,SAAS,EAAC,gBAAgB,aAC5B,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mBAAmB,aAC/B,KAAK,IAAI,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EACzF,WAAW,IAAI,YAAG,SAAS,EAAC,iDAAiD,YAAE,WAAW,GAAK,IAC5F,CACP,EACD,cAAK,SAAS,EAAC,0BAA0B,YACvC,cAAK,SAAS,EAAC,4CAA4C,YACxD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAChC,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D,CAAC,KAAK,WAAW;gCACf,CAAC,CAAC,oCAAoC;gCACtC,CAAC,CAAC,6CAA6C,CAClD,YAEA,GAAG,CAAC,KAAK,IATL,CAAC,CAUC,CACV,CAAC,GACE,GACF,EACL,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,iCAAiC,YAC9C,eAAK,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,KAAK,IAAI,6BAA6B,CAAC,aAChF,0BACG,SAAS,CAAC,KAAK,IAAI,CAClB,aAAI,SAAS,EAAC,yCAAyC,YAAE,SAAS,CAAC,KAAK,GAAM,CAC/E,EACA,SAAS,CAAC,WAAW,IAAI,CACxB,YAAG,SAAS,EAAC,uCAAuC,YAAE,SAAS,CAAC,WAAW,GAAK,CACjF,IACG,EACL,SAAS,CAAC,KAAK,IAAI,CAClB,KAAC,UAAU,IAAC,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,EAAC,mBAAmB,GAAG,CAC5G,IACG,GACF,CACP,IACG,GACE,CACX,CAAC;AACJ,CAAC"}
@@ -1,10 +1,12 @@
1
+ import { type ImageSource } from '../ui/theme-image';
1
2
  interface TestimonialProps {
3
+ id?: string;
2
4
  quote: string;
3
5
  author: string;
4
6
  role?: string;
5
- image?: string;
7
+ image?: ImageSource;
6
8
  company?: string;
7
9
  }
8
- export declare function Testimonial({ quote, author, role, image, company }: TestimonialProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function Testimonial({ id, quote, author, role, image, company }: TestimonialProps): import("react/jsx-runtime").JSX.Element;
9
11
  export {};
10
12
  //# sourceMappingURL=Testimonial.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Testimonial.d.ts","sourceRoot":"","sources":["../../src/marketing/Testimonial.tsx"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,gBAAgB,2CAiBpF"}
1
+ {"version":3,"file":"Testimonial.d.ts","sourceRoot":"","sources":["../../src/marketing/Testimonial.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,gBAAgB,2CAiBxF"}
@@ -1,6 +1,7 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Section } from '../ui/section';
3
- export function Testimonial({ quote, author, role, image, company }) {
4
- return (_jsx(Section, { children: _jsx("div", { className: "container-main max-w-3xl", children: _jsxs("div", { className: "glass-2 rounded-2xl p-8 md:p-12", children: [_jsxs("blockquote", { className: "text-lg md:text-xl text-foreground/80 italic mb-6", children: ["\u201C", quote, "\u201D"] }), _jsxs("div", { className: "flex items-center gap-3", children: [image && _jsx("img", { src: image, alt: author, className: "w-10 h-10 rounded-full object-cover" }), _jsxs("div", { children: [_jsx("p", { className: "font-semibold text-foreground", children: author }), (role || company) && _jsxs("p", { className: "text-sm text-muted-foreground", children: [role, role && company && ' \u00B7 ', company] })] })] })] }) }) }));
3
+ import { ThemeImage } from '../ui/theme-image';
4
+ export function Testimonial({ id, quote, author, role, image, company }) {
5
+ return (_jsx(Section, { id: id, children: _jsx("div", { className: "container-main max-w-3xl", children: _jsxs("div", { className: "glass-2 rounded-2xl p-8 md:p-12", children: [_jsxs("blockquote", { className: "text-lg md:text-xl text-foreground/80 italic mb-6", children: ["\u201C", quote, "\u201D"] }), _jsxs("div", { className: "flex items-center gap-3", children: [image && _jsx(ThemeImage, { src: image, alt: author, className: "w-10 h-10 rounded-full object-cover" }), _jsxs("div", { children: [_jsx("p", { className: "font-semibold text-foreground", children: author }), (role || company) && _jsxs("p", { className: "text-sm text-muted-foreground", children: [role, role && company && ' \u00B7 ', company] })] })] })] }) }) }));
5
6
  }
6
7
  //# sourceMappingURL=Testimonial.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Testimonial.js","sourceRoot":"","sources":["../../src/marketing/Testimonial.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAUxC,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAoB;IACnF,OAAO,CACL,KAAC,OAAO,cACN,cAAK,SAAS,EAAC,0BAA0B,YACvC,eAAK,SAAS,EAAC,iCAAiC,aAC9C,sBAAY,SAAS,EAAC,mDAAmD,uBAAS,KAAK,cAAqB,EAC5G,eAAK,SAAS,EAAC,yBAAyB,aACrC,KAAK,IAAI,cAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAC,qCAAqC,GAAG,EAC1F,0BACE,YAAG,SAAS,EAAC,+BAA+B,YAAE,MAAM,GAAK,EACxD,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,aAAG,SAAS,EAAC,+BAA+B,aAAE,IAAI,EAAE,IAAI,IAAI,OAAO,IAAI,UAAU,EAAE,OAAO,IAAK,IACjH,IACF,IACF,GACF,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Testimonial.js","sourceRoot":"","sources":["../../src/marketing/Testimonial.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAWjE,MAAM,UAAU,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAoB;IACvF,OAAO,CACL,KAAC,OAAO,IAAC,EAAE,EAAE,EAAE,YACb,cAAK,SAAS,EAAC,0BAA0B,YACvC,eAAK,SAAS,EAAC,iCAAiC,aAC9C,sBAAY,SAAS,EAAC,mDAAmD,uBAAS,KAAK,cAAqB,EAC5G,eAAK,SAAS,EAAC,yBAAyB,aACrC,KAAK,IAAI,KAAC,UAAU,IAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAC,qCAAqC,GAAG,EACjG,0BACE,YAAG,SAAS,EAAC,+BAA+B,YAAE,MAAM,GAAK,EACxD,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,aAAG,SAAS,EAAC,+BAA+B,aAAE,IAAI,EAAE,IAAI,IAAI,OAAO,IAAI,UAAU,EAAE,OAAO,IAAK,IACjH,IACF,IACF,GACF,GACE,CACX,CAAC;AACJ,CAAC"}
@@ -1,19 +1,21 @@
1
1
  import React from 'react';
2
+ import { type ImageSource } from '../ui/theme-image';
2
3
  interface TestimonialCardProps {
3
4
  quote: string;
4
5
  author: string;
5
6
  role?: string;
6
7
  company?: string;
7
- image?: string;
8
+ image?: ImageSource;
8
9
  rating?: number;
9
10
  }
10
11
  export declare function TestimonialCard({ quote, author, role, company, image, rating }: TestimonialCardProps): import("react/jsx-runtime").JSX.Element;
11
12
  interface TestimonialsProps {
13
+ id?: string;
12
14
  title?: string;
13
15
  description?: string;
14
16
  columns?: 2 | 3;
15
17
  children: React.ReactNode;
16
18
  }
17
- export declare function Testimonials({ title, description, columns, children }: TestimonialsProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function Testimonials({ id, title, description, columns, children }: TestimonialsProps): import("react/jsx-runtime").JSX.Element;
18
20
  export {};
19
21
  //# sourceMappingURL=Testimonials.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Testimonials.d.ts","sourceRoot":"","sources":["../../src/marketing/Testimonials.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,oBAAoB,2CAsBpG;AAED,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAW,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAgB5F"}
1
+ {"version":3,"file":"Testimonials.d.ts","sourceRoot":"","sources":["../../src/marketing/Testimonials.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,oBAAoB,2CAsBpG;AAED,UAAU,iBAAiB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAW,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAgBhG"}
@@ -1,10 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Section } from '../ui/section';
3
+ import { ThemeImage } from '../ui/theme-image';
3
4
  export function TestimonialCard({ quote, author, role, company, image, rating }) {
4
- return (_jsxs("div", { className: "glass-1 hover:glass-2 rounded-2xl p-6 transition-all flex flex-col justify-between gap-4", children: [rating && (_jsx("div", { className: "flex gap-0.5", children: Array.from({ length: rating }).map((_, i) => (_jsx("svg", { className: "size-4 fill-brand", viewBox: "0 0 20 20", children: _jsx("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" }) }, i))) })), _jsxs("blockquote", { className: "text-sm text-foreground/80 leading-relaxed", children: ["\u201C", quote, "\u201D"] }), _jsxs("div", { className: "flex items-center gap-3 mt-auto pt-2", children: [image && _jsx("img", { src: image, alt: author, className: "w-8 h-8 rounded-full object-cover" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-semibold text-foreground", children: author }), (role || company) && (_jsxs("p", { className: "text-xs text-muted-foreground", children: [role, role && company && ' · ', company] }))] })] })] }));
5
+ return (_jsxs("div", { className: "glass-1 hover:glass-2 rounded-2xl p-6 transition-all flex flex-col justify-between gap-4", children: [rating && (_jsx("div", { className: "flex gap-0.5", children: Array.from({ length: rating }).map((_, i) => (_jsx("svg", { className: "size-4 fill-brand", viewBox: "0 0 20 20", children: _jsx("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" }) }, i))) })), _jsxs("blockquote", { className: "text-sm text-foreground/80 leading-relaxed", children: ["\u201C", quote, "\u201D"] }), _jsxs("div", { className: "flex items-center gap-3 mt-auto pt-2", children: [image && _jsx(ThemeImage, { src: image, alt: author, className: "w-8 h-8 rounded-full object-cover" }), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-semibold text-foreground", children: author }), (role || company) && (_jsxs("p", { className: "text-xs text-muted-foreground", children: [role, role && company && ' · ', company] }))] })] })] }));
5
6
  }
6
- export function Testimonials({ title, description, columns = 3, children }) {
7
+ export function Testimonials({ id, title, description, columns = 3, children }) {
7
8
  const gridCols = columns === 2 ? 'md:grid-cols-2' : 'md:grid-cols-2 lg:grid-cols-3';
8
- return (_jsx(Section, { children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mx-auto", children: description })] })), _jsx("div", { className: `grid grid-cols-1 ${gridCols} gap-6`, children: children })] }) }));
9
+ return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-12", children: [title && _jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mx-auto", children: description })] })), _jsx("div", { className: `grid grid-cols-1 ${gridCols} gap-6`, children: children })] }) }));
9
10
  }
10
11
  //# sourceMappingURL=Testimonials.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Testimonials.js","sourceRoot":"","sources":["../../src/marketing/Testimonials.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAwB;IACnG,OAAO,CACL,eAAK,SAAS,EAAC,0FAA0F,aACtG,MAAM,IAAI,CACT,cAAK,SAAS,EAAC,cAAc,YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5C,cAAa,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAC,WAAW,YAAC,eAAM,CAAC,EAAC,0VAA0V,GAAG,IAA1Z,CAAC,CAA+Z,CAC3a,CAAC,GACE,CACP,EACD,sBAAY,SAAS,EAAC,4CAA4C,uBAAS,KAAK,cAAqB,EACrG,eAAK,SAAS,EAAC,sCAAsC,aAClD,KAAK,IAAI,cAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAC,mCAAmC,GAAG,EACxF,0BACE,YAAG,SAAS,EAAC,uCAAuC,YAAE,MAAM,GAAK,EAChE,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CACpB,aAAG,SAAS,EAAC,+BAA+B,aAAE,IAAI,EAAE,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,OAAO,IAAK,CAC3F,IACG,IACF,IACF,CACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAqB;IAC3F,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,+BAA+B,CAAC;IAEpF,OAAO,CACL,KAAC,OAAO,cACN,eAAK,SAAS,EAAC,gBAAgB,aAC5B,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mBAAmB,aAC/B,KAAK,IAAI,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EACzF,WAAW,IAAI,YAAG,SAAS,EAAC,iDAAiD,YAAE,WAAW,GAAK,IAC5F,CACP,EACD,cAAK,SAAS,EAAE,oBAAoB,QAAQ,QAAQ,YAAG,QAAQ,GAAO,IAClE,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Testimonials.js","sourceRoot":"","sources":["../../src/marketing/Testimonials.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAWjE,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAwB;IACnG,OAAO,CACL,eAAK,SAAS,EAAC,0FAA0F,aACtG,MAAM,IAAI,CACT,cAAK,SAAS,EAAC,cAAc,YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5C,cAAa,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAC,WAAW,YAAC,eAAM,CAAC,EAAC,0VAA0V,GAAG,IAA1Z,CAAC,CAA+Z,CAC3a,CAAC,GACE,CACP,EACD,sBAAY,SAAS,EAAC,4CAA4C,uBAAS,KAAK,cAAqB,EACrG,eAAK,SAAS,EAAC,sCAAsC,aAClD,KAAK,IAAI,KAAC,UAAU,IAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAC,mCAAmC,GAAG,EAC/F,0BACE,YAAG,SAAS,EAAC,uCAAuC,YAAE,MAAM,GAAK,EAChE,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CACpB,aAAG,SAAS,EAAC,+BAA+B,aAAE,IAAI,EAAE,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,OAAO,IAAK,CAC3F,IACG,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAqB;IAC/F,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,+BAA+B,CAAC;IAEpF,OAAO,CACL,KAAC,OAAO,IAAC,EAAE,EAAE,EAAE,YACb,eAAK,SAAS,EAAC,gBAAgB,aAC5B,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mBAAmB,aAC/B,KAAK,IAAI,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EACzF,WAAW,IAAI,YAAG,SAAS,EAAC,iDAAiD,YAAE,WAAW,GAAK,IAC5F,CACP,EACD,cAAK,SAAS,EAAE,oBAAoB,QAAQ,QAAQ,YAAG,QAAQ,GAAO,IAClE,GACE,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export type ImageSource = string | {
3
+ light: string;
4
+ dark: string;
5
+ };
6
+ interface ThemeImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'> {
7
+ src: ImageSource;
8
+ }
9
+ export declare function ThemeImage({ src, className, ...props }: ThemeImageProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=theme-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-image.d.ts","sourceRoot":"","sources":["../../src/ui/theme-image.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,UAAU,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACtF,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,wBAAgB,UAAU,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,2CAUvE"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from '../lib/utils';
3
+ export function ThemeImage({ src, className, ...props }) {
4
+ if (typeof src === 'string') {
5
+ return _jsx("img", { src: src, className: className, ...props });
6
+ }
7
+ return (_jsxs(_Fragment, { children: [_jsx("img", { src: src.light, className: cn(className, 'dark:hidden'), ...props }), _jsx("img", { src: src.dark, className: cn(className, 'hidden dark:block'), ...props })] }));
8
+ }
9
+ //# sourceMappingURL=theme-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-image.js","sourceRoot":"","sources":["../../src/ui/theme-image.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAmB;IACtE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,cAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,KAAM,KAAK,GAAI,CAAC;IAC5D,CAAC;IACD,OAAO,CACL,8BACE,cAAK,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,KAAM,KAAK,GAAI,EAC3E,cAAK,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,mBAAmB,CAAC,KAAM,KAAK,GAAI,IAC/E,CACJ,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shipsite.dev/components",
3
- "version": "0.2.21",
3
+ "version": "0.2.22",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/shipsite/shipsite",
@@ -8,6 +8,7 @@ interface BlogArticleAuthor {
8
8
  }
9
9
 
10
10
  interface BlogArticleProps {
11
+ id?: string;
11
12
  children: React.ReactNode;
12
13
  contentFolder?: string;
13
14
  date?: string;
@@ -15,9 +16,9 @@ interface BlogArticleProps {
15
16
  author?: BlogArticleAuthor;
16
17
  }
17
18
 
18
- export function BlogArticle({ children, author, date, readingTime }: BlogArticleProps) {
19
+ export function BlogArticle({ id, children, author, date, readingTime }: BlogArticleProps) {
19
20
  return (
20
- <BlogArticleClient author={author} date={date} readingTime={readingTime}>
21
+ <BlogArticleClient id={id} author={author} date={date} readingTime={readingTime}>
21
22
  {children}
22
23
  </BlogArticleClient>
23
24
  );
@@ -2,6 +2,7 @@
2
2
 
3
3
  import React, { useCallback, useEffect, useRef, useState } from 'react';
4
4
  import { cn } from '../lib/utils';
5
+ import { ThemeImage, type ImageSource } from '../ui/theme-image';
5
6
 
6
7
  interface TocItem {
7
8
  id: string;
@@ -12,10 +13,11 @@ interface TocItem {
12
13
  interface BlogArticleAuthor {
13
14
  name: string;
14
15
  role: string;
15
- image: string;
16
+ image: ImageSource;
16
17
  }
17
18
 
18
19
  interface BlogArticleClientProps {
20
+ id?: string;
19
21
  children: React.ReactNode;
20
22
  author?: BlogArticleAuthor;
21
23
  date?: string;
@@ -23,6 +25,7 @@ interface BlogArticleClientProps {
23
25
  }
24
26
 
25
27
  export function BlogArticleClient({
28
+ id,
26
29
  children,
27
30
  author,
28
31
  date,
@@ -113,7 +116,7 @@ export function BlogArticleClient({
113
116
  : '';
114
117
 
115
118
  return (
116
- <article className="py-12 md:py-20">
119
+ <article id={id} className="py-12 md:py-20">
117
120
  <div className="mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)]">
118
121
  <div className="flex gap-10 lg:gap-16">
119
122
  {/* Main content */}
@@ -175,7 +178,7 @@ export function BlogArticleClient({
175
178
  {tocItems.length > 0 && <hr className="border-border" />}
176
179
  <div className="flex flex-col gap-3">
177
180
  {author.image && (
178
- <img
181
+ <ThemeImage
179
182
  src={author.image}
180
183
  alt={author.name}
181
184
  className="w-12 h-12 rounded-full object-cover"
@@ -2,14 +2,15 @@ import React from 'react';
2
2
  import { Section } from '../ui/section';
3
3
 
4
4
  interface BlogIndexProps {
5
+ id?: string;
5
6
  title?: string;
6
7
  description?: string;
7
8
  children?: React.ReactNode;
8
9
  }
9
10
 
10
- export function BlogIndex({ title, description, children }: BlogIndexProps) {
11
+ export function BlogIndex({ id, title, description, children }: BlogIndexProps) {
11
12
  return (
12
- <Section>
13
+ <Section id={id}>
13
14
  <div className="container-main">
14
15
  {(title || description) && (
15
16
  <div className="text-center mb-12">
@@ -17,14 +17,15 @@ export function ContentSection({ title, children }: ContentSectionProps) {
17
17
  }
18
18
 
19
19
  interface ContentPageProps {
20
+ id?: string;
20
21
  title: string;
21
22
  lastUpdated?: string;
22
23
  children: React.ReactNode;
23
24
  }
24
25
 
25
- export function ContentPage({ title, lastUpdated, children }: ContentPageProps) {
26
+ export function ContentPage({ id, title, lastUpdated, children }: ContentPageProps) {
26
27
  return (
27
- <section className="py-12 md:py-20">
28
+ <section id={id} className="py-12 md:py-20">
28
29
  <div className="container-main max-w-3xl">
29
30
  <h1 className="text-3xl md:text-4xl font-bold text-foreground mb-2">{title}</h1>
30
31
  {lastUpdated && <p className="text-sm text-muted-foreground mb-8">Last updated: {lastUpdated}</p>}
package/src/index.ts CHANGED
@@ -53,6 +53,10 @@ export { TabsSection, TabItem } from './marketing/TabsSection';
53
53
  export { BlogArticle } from './blog/BlogArticle';
54
54
  export { BlogIndex } from './blog/BlogIndex';
55
55
 
56
+ // Image utilities
57
+ export { ThemeImage } from './ui/theme-image';
58
+ export type { ImageSource } from './ui/theme-image';
59
+
56
60
  // UI primitives
57
61
  export {
58
62
  Table,