@shipsite.dev/components 0.2.20 → 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 +6 -6
  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 +12 -11
  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
package/components.json CHANGED
@@ -7,12 +7,13 @@
7
7
  "category": "marketing",
8
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
9
  "props": [
10
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"pricing\" enables #pricing navigation)." },
10
11
  { "name": "title", "type": "string", "required": true, "description": "Main headline text displayed as an h1." },
11
12
  { "name": "description", "type": "string", "required": true, "description": "Supporting paragraph text below the title." },
12
13
  { "name": "primaryCta", "type": "{ label: string; href: string }", "required": false, "description": "Primary call-to-action button with label and link." },
13
14
  { "name": "secondaryCta", "type": "{ label: string; href: string }", "required": false, "description": "Secondary call-to-action button rendered with the glow variant." },
14
15
  { "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": "image", "type": "ImageSource", "required": false, "description": "Hero image displayed inside a responsive device mockup. Pass a string URL or { light, dark } for theme-aware images." },
16
17
  { "name": "children", "type": "React.ReactNode", "required": false, "description": "Optional additional content rendered below the CTA buttons." }
17
18
  ],
18
19
  "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/>"
@@ -33,6 +34,7 @@
33
34
  "category": "marketing",
34
35
  "description": "Section that displays a grid of Feature cards with an optional section title and description. Supports 2, 3, or 4 column layouts.",
35
36
  "props": [
37
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"features\" enables #features navigation)." },
36
38
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the grid." },
37
39
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
38
40
  { "name": "columns", "type": "2 | 3 | 4", "required": false, "description": "Number of grid columns. Defaults to 3." },
@@ -58,8 +60,7 @@
58
60
  "props": [
59
61
  { "name": "title", "type": "string", "required": true, "description": "Row heading text." },
60
62
  { "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": "image", "type": "ImageSource", "required": true, "description": "Feature image. Pass a string URL or { light, dark } for theme-aware images." },
63
64
  { "name": "imageAlt", "type": "string", "required": false, "description": "Alt text for the image. Defaults to the title." },
64
65
  { "name": "children", "type": "React.ReactNode", "required": false, "description": "AlternatingFeatureItem children rendered below the description." }
65
66
  ],
@@ -70,6 +71,7 @@
70
71
  "category": "marketing",
71
72
  "description": "Container section for alternating feature rows. Renders rows with alternating text/image layout separated by dividers.",
72
73
  "props": [
74
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"features\" enables #features navigation)." },
73
75
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the rows." },
74
76
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
75
77
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "AlternatingFeatureRow children." }
@@ -115,6 +117,7 @@
115
117
  "category": "marketing",
116
118
  "description": "Full pricing section with plan cards, optional monthly/yearly toggle, and an optional feature comparison table. Consumes PricingPlan, ComparisonRow, and ComparisonCategory children.",
117
119
  "props": [
120
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"pricing\" enables #pricing navigation)." },
118
121
  { "name": "title", "type": "string", "required": false, "description": "Section heading." },
119
122
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
120
123
  { "name": "monthlyLabel", "type": "string", "required": false, "description": "Label for the monthly toggle. Defaults to 'Monthly'." },
@@ -129,8 +132,9 @@
129
132
  "category": "marketing",
130
133
  "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
134
  "props": [
135
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"companies\" enables #companies navigation)." },
132
136
  { "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." },
137
+ { "name": "logos", "type": "Array<{ src: ImageSource; alt: string; width?: number; name?: string; version?: string; badge?: string }>", "required": true, "description": "Array of logo items. Each has an image src (string or { light, dark }), alt text, and optional width, name, version, and badge." },
134
138
  { "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
139
  ],
136
140
  "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/>"
@@ -140,10 +144,11 @@
140
144
  "category": "marketing",
141
145
  "description": "Single large testimonial quote block with author info, displayed in a centered glass card.",
142
146
  "props": [
147
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"testimonial\" enables #testimonial navigation)." },
143
148
  { "name": "quote", "type": "string", "required": true, "description": "The testimonial quote text." },
144
149
  { "name": "author", "type": "string", "required": true, "description": "Name of the person giving the testimonial." },
145
150
  { "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." },
151
+ { "name": "image", "type": "ImageSource", "required": false, "description": "Author's avatar image. Pass a string URL or { light, dark } for theme-aware images." },
147
152
  { "name": "company", "type": "string", "required": false, "description": "Company name of the author." }
148
153
  ],
149
154
  "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/>"
@@ -157,7 +162,7 @@
157
162
  { "name": "author", "type": "string", "required": true, "description": "Name of the person giving the testimonial." },
158
163
  { "name": "role", "type": "string", "required": false, "description": "Job title or role of the author." },
159
164
  { "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." },
165
+ { "name": "image", "type": "ImageSource", "required": false, "description": "Author's avatar image. Pass a string URL or { light, dark } for theme-aware images." },
161
166
  { "name": "rating", "type": "number", "required": false, "description": "Star rating (1-5) displayed as filled star icons." }
162
167
  ],
163
168
  "example": "<TestimonialCard\n quote=\"Incredible experience!\"\n author=\"John Smith\"\n role=\"CTO\"\n company=\"Globex\"\n rating={5}\n/>"
@@ -167,6 +172,7 @@
167
172
  "category": "marketing",
168
173
  "description": "Grid section that displays multiple TestimonialCard components with an optional section title and description.",
169
174
  "props": [
175
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"testimonials\" enables #testimonials navigation)." },
170
176
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the grid." },
171
177
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
172
178
  { "name": "columns", "type": "2 | 3", "required": false, "description": "Number of grid columns. Defaults to 3." },
@@ -179,6 +185,7 @@
179
185
  "category": "marketing",
180
186
  "description": "Full-width call-to-action banner with a centered glow effect, title, optional subtext, and a primary button. Supports additional children content.",
181
187
  "props": [
188
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"cta\" enables #cta navigation)." },
182
189
  { "name": "title", "type": "string", "required": true, "description": "Banner headline text." },
183
190
  { "name": "buttonText", "type": "string", "required": true, "description": "Text displayed on the CTA button." },
184
191
  { "name": "buttonHref", "type": "string", "required": false, "description": "URL the button links to." },
@@ -212,6 +219,7 @@
212
219
  "category": "marketing",
213
220
  "description": "FAQ section with a collapsible accordion. Contains FAQItem children with question/answer pairs.",
214
221
  "props": [
222
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"faq\" enables #faq navigation)." },
215
223
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the accordion." },
216
224
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
217
225
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "FAQItem children." }
@@ -233,6 +241,7 @@
233
241
  "category": "marketing",
234
242
  "description": "Numbered step-by-step section with connected timeline indicators. Consumes Step children to display a vertical progression.",
235
243
  "props": [
244
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"steps\" enables #steps navigation)." },
236
245
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the steps." },
237
246
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
238
247
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "Step children." }
@@ -256,6 +265,7 @@
256
265
  "category": "marketing",
257
266
  "description": "Responsive grid container for CardGridItem children. Supports 2, 3, or 4 column layouts.",
258
267
  "props": [
268
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"cards\" enables #cards navigation)." },
259
269
  { "name": "columns", "type": "2 | 3 | 4", "required": false, "description": "Number of grid columns. Defaults to 3." },
260
270
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "CardGridItem children." }
261
271
  ],
@@ -266,6 +276,7 @@
266
276
  "category": "marketing",
267
277
  "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
278
  "props": [
279
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"callout\" enables #callout navigation)." },
269
280
  { "name": "title", "type": "string", "required": true, "description": "Callout heading text." },
270
281
  { "name": "description", "type": "string", "required": true, "description": "Callout body text." },
271
282
  { "name": "variant", "type": "'info' | 'success' | 'warning'", "required": false, "description": "Color variant for the callout. Defaults to 'info'." },
@@ -290,6 +301,7 @@
290
301
  "category": "marketing",
291
302
  "description": "Section displaying key statistics in a 2x2 or 4-column grid with large gradient numbers. Consumes Stat children.",
292
303
  "props": [
304
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"stats\" enables #stats navigation)." },
293
305
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the stats." },
294
306
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "Stat children." }
295
307
  ],
@@ -302,7 +314,7 @@
302
314
  "props": [
303
315
  { "name": "title", "type": "string", "required": true, "description": "Card heading text." },
304
316
  { "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." },
317
+ { "name": "image", "type": "ImageSource", "required": false, "description": "Full-bleed image at the bottom of the card. Pass a string URL or { light, dark } for theme-aware images." },
306
318
  { "name": "span", "type": "1 | 2", "required": false, "description": "Number of grid columns the item spans. Defaults to 1." },
307
319
  { "name": "children", "type": "React.ReactNode", "required": false, "description": "Custom content rendered inside the card." }
308
320
  ],
@@ -313,6 +325,7 @@
313
325
  "category": "marketing",
314
326
  "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
327
  "props": [
328
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"bento\" enables #bento navigation)." },
316
329
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the grid." },
317
330
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
318
331
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "BentoItem children." }
@@ -324,7 +337,7 @@
324
337
  "category": "marketing",
325
338
  "description": "Individual gallery image card with a hover zoom effect and an optional caption. Used as a child of Gallery.",
326
339
  "props": [
327
- { "name": "src", "type": "string", "required": true, "description": "URL of the image." },
340
+ { "name": "src", "type": "ImageSource", "required": true, "description": "Image source. Pass a string URL or { light, dark } for theme-aware images." },
328
341
  { "name": "alt", "type": "string", "required": true, "description": "Alt text for the image." },
329
342
  { "name": "caption", "type": "string", "required": false, "description": "Caption text displayed below the image." }
330
343
  ],
@@ -335,6 +348,7 @@
335
348
  "category": "marketing",
336
349
  "description": "Responsive image gallery section with optional title and description. Displays GalleryItem children in a configurable grid.",
337
350
  "props": [
351
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"gallery\" enables #gallery navigation)." },
338
352
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the gallery." },
339
353
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
340
354
  { "name": "columns", "type": "2 | 3 | 4", "required": false, "description": "Number of grid columns. Defaults to 3." },
@@ -347,6 +361,7 @@
347
361
  "category": "marketing",
348
362
  "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
363
  "props": [
364
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"social-proof\" enables #social-proof navigation)." },
350
365
  { "name": "avatars", "type": "string[]", "required": false, "description": "Array of avatar image URLs displayed as overlapping circles." },
351
366
  { "name": "text", "type": "string", "required": true, "description": "Main social proof text (e.g. 'Loved by 10,000+ users')." },
352
367
  { "name": "subtext", "type": "string", "required": false, "description": "Secondary text displayed below the main text." }
@@ -360,7 +375,7 @@
360
375
  "props": [
361
376
  { "name": "title", "type": "string", "required": false, "description": "Card heading text." },
362
377
  { "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." },
378
+ { "name": "image", "type": "ImageSource", "required": false, "description": "Card image displayed above the content. Pass a string URL or { light, dark } for theme-aware images." },
364
379
  { "name": "children", "type": "React.ReactNode", "required": false, "description": "Custom content rendered inside the card." }
365
380
  ],
366
381
  "example": "<CarouselItem title=\"Feature 1\" description=\"Description of feature 1.\" image=\"/images/f1.png\" />"
@@ -370,6 +385,7 @@
370
385
  "category": "marketing",
371
386
  "description": "Horizontally scrollable carousel section with snap-scrolling, left/right navigation buttons, and optional title/description. Contains CarouselItem children.",
372
387
  "props": [
388
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"carousel\" enables #carousel navigation)." },
373
389
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the carousel." },
374
390
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
375
391
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "CarouselItem children." }
@@ -384,7 +400,7 @@
384
400
  { "name": "label", "type": "string", "required": true, "description": "Tab button label text." },
385
401
  { "name": "title", "type": "string", "required": false, "description": "Content heading displayed when the tab is active." },
386
402
  { "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." },
403
+ { "name": "image", "type": "ImageSource", "required": false, "description": "Image displayed alongside the content when the tab is active. Pass a string URL or { light, dark } for theme-aware images." },
388
404
  { "name": "children", "type": "React.ReactNode", "required": false, "description": "Custom content rendered when the tab is active." }
389
405
  ],
390
406
  "example": "<TabItem label=\"Overview\" title=\"Product Overview\" description=\"Everything you need to know.\" image=\"/images/overview.png\" />"
@@ -394,6 +410,7 @@
394
410
  "category": "marketing",
395
411
  "description": "Interactive tabbed section with pill-style tab buttons and a content panel that changes based on the active tab. Consumes TabItem children.",
396
412
  "props": [
413
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"tabs\" enables #tabs navigation)." },
397
414
  { "name": "title", "type": "string", "required": false, "description": "Section heading displayed above the tabs." },
398
415
  { "name": "description", "type": "string", "required": false, "description": "Section subheading text." },
399
416
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "TabItem children." }
@@ -405,6 +422,7 @@
405
422
  "category": "marketing",
406
423
  "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
424
  "props": [
425
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"hero\" enables #hero navigation)." },
408
426
  { "name": "title", "type": "string", "required": true, "description": "Page title displayed as an h1." },
409
427
  { "name": "description", "type": "string", "required": false, "description": "Supporting paragraph text below the title." },
410
428
  { "name": "badge", "type": "string", "required": false, "description": "Small badge text displayed above the title." },
@@ -417,6 +435,7 @@
417
435
  "category": "blog",
418
436
  "description": "Top-level wrapper for blog article content. Renders a centered, max-width article container with vertical padding.",
419
437
  "props": [
438
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"article\" enables #article navigation)." },
420
439
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "Article content (headings, paragraphs, blog components)." },
421
440
  { "name": "contentFolder", "type": "string", "required": false, "description": "Content folder identifier for the blog article." }
422
441
  ],
@@ -427,6 +446,7 @@
427
446
  "category": "blog",
428
447
  "description": "Blog listing page wrapper with an optional title, description, and children for rendering blog post cards or custom content.",
429
448
  "props": [
449
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"blog\" enables #blog navigation)." },
430
450
  { "name": "title", "type": "string", "required": false, "description": "Page heading displayed above the blog list." },
431
451
  { "name": "description", "type": "string", "required": false, "description": "Page subheading text." },
432
452
  { "name": "children", "type": "React.ReactNode", "required": false, "description": "Blog post cards or other content." }
@@ -448,6 +468,7 @@
448
468
  "category": "content",
449
469
  "description": "Top-level wrapper for text-heavy pages (legal, about, contact, etc.). Renders a narrow, centered container with a title and optional last-updated date.",
450
470
  "props": [
471
+ { "name": "id", "type": "string", "required": false, "description": "HTML id for anchor links (e.g. id=\"content\" enables #content navigation)." },
451
472
  { "name": "title", "type": "string", "required": true, "description": "Page title displayed as an h1." },
452
473
  { "name": "lastUpdated", "type": "string", "required": false, "description": "Date string displayed below the title (e.g. '2024-01-15')." },
453
474
  { "name": "children", "type": "React.ReactNode", "required": true, "description": "ContentSection children and other content." }
@@ -5,12 +5,13 @@ interface BlogArticleAuthor {
5
5
  image: string;
6
6
  }
7
7
  interface BlogArticleProps {
8
+ id?: string;
8
9
  children: React.ReactNode;
9
10
  contentFolder?: string;
10
11
  date?: string;
11
12
  readingTime?: number;
12
13
  author?: BlogArticleAuthor;
13
14
  }
14
- export declare function BlogArticle({ children, author, date, readingTime }: BlogArticleProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function BlogArticle({ id, children, author, date, readingTime }: BlogArticleProps): import("react/jsx-runtime").JSX.Element;
15
16
  export {};
16
17
  //# sourceMappingURL=BlogArticle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogArticle.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,gBAAgB,2CAMpF"}
1
+ {"version":3,"file":"BlogArticle.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,gBAAgB,2CAMxF"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { BlogArticleClient } from './BlogArticleClient';
3
- export function BlogArticle({ children, author, date, readingTime }) {
4
- return (_jsx(BlogArticleClient, { author: author, date: date, readingTime: readingTime, children: children }));
3
+ export function BlogArticle({ id, children, author, date, readingTime }) {
4
+ return (_jsx(BlogArticleClient, { id: id, author: author, date: date, readingTime: readingTime, children: children }));
5
5
  }
6
6
  //# sourceMappingURL=BlogArticle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogArticle.js","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAgBxD,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAoB;IACnF,OAAO,CACL,KAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,YACpE,QAAQ,GACS,CACrB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"BlogArticle.js","sourceRoot":"","sources":["../../src/blog/BlogArticle.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAiBxD,MAAM,UAAU,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAoB;IACvF,OAAO,CACL,KAAC,iBAAiB,IAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,YAC5E,QAAQ,GACS,CACrB,CAAC;AACJ,CAAC"}
@@ -1,15 +1,17 @@
1
1
  import React from 'react';
2
+ import { type ImageSource } from '../ui/theme-image';
2
3
  interface BlogArticleAuthor {
3
4
  name: string;
4
5
  role: string;
5
- image: string;
6
+ image: ImageSource;
6
7
  }
7
8
  interface BlogArticleClientProps {
9
+ id?: string;
8
10
  children: React.ReactNode;
9
11
  author?: BlogArticleAuthor;
10
12
  date?: string;
11
13
  readingTime?: number;
12
14
  }
13
- export declare function BlogArticleClient({ children, author, date, readingTime, }: BlogArticleClientProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function BlogArticleClient({ id, children, author, date, readingTime, }: BlogArticleClientProps): import("react/jsx-runtime").JSX.Element;
14
16
  export {};
15
17
  //# sourceMappingURL=BlogArticleClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogArticleClient.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticleClient.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AASxE,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,WAAW,GACZ,EAAE,sBAAsB,2CAsLxB"}
1
+ {"version":3,"file":"BlogArticleClient.d.ts","sourceRoot":"","sources":["../../src/blog/BlogArticleClient.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAExE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQjE,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,UAAU,sBAAsB;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,WAAW,GACZ,EAAE,sBAAsB,2CAsLxB"}
@@ -2,7 +2,8 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useRef, useState } from 'react';
4
4
  import { cn } from '../lib/utils';
5
- export function BlogArticleClient({ children, author, date, readingTime, }) {
5
+ import { ThemeImage } from '../ui/theme-image';
6
+ export function BlogArticleClient({ id, children, author, date, readingTime, }) {
6
7
  const contentRef = useRef(null);
7
8
  const [tocItems, setTocItems] = useState([]);
8
9
  const [activeId, setActiveId] = useState('');
@@ -84,7 +85,7 @@ export function BlogArticleClient({ children, author, date, readingTime, }) {
84
85
  day: 'numeric',
85
86
  })
86
87
  : '';
87
- return (_jsx("article", { className: "py-12 md:py-20", children: _jsx("div", { className: "mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)]", children: _jsxs("div", { className: "flex gap-10 lg:gap-16", children: [_jsx("div", { ref: contentRef, className: "blog-content min-w-0 flex-1 max-w-3xl", children: children }), _jsx("aside", { className: "hidden lg:block w-64 shrink-0", children: _jsxs("div", { className: "sticky top-24 flex flex-col gap-6", children: [tocItems.length > 0 && (_jsx("nav", { children: _jsx("ul", { className: "flex flex-col", children: tocItems.map((item) => {
88
+ return (_jsx("article", { id: id, className: "py-12 md:py-20", children: _jsx("div", { className: "mx-auto w-full max-w-[76rem] px-[clamp(1rem,3vw,3rem)]", children: _jsxs("div", { className: "flex gap-10 lg:gap-16", children: [_jsx("div", { ref: contentRef, className: "blog-content min-w-0 flex-1 max-w-3xl", children: children }), _jsx("aside", { className: "hidden lg:block w-64 shrink-0", children: _jsxs("div", { className: "sticky top-24 flex flex-col gap-6", children: [tocItems.length > 0 && (_jsx("nav", { children: _jsx("ul", { className: "flex flex-col", children: tocItems.map((item) => {
88
89
  const isActive = activeId === item.id;
89
90
  if (item.level === 3) {
90
91
  const idx = tocItems.indexOf(item);
@@ -101,6 +102,6 @@ export function BlogArticleClient({ children, author, date, readingTime, }) {
101
102
  return (_jsx("li", { className: item.level === 3 ? 'pl-3' : '', children: _jsxs("button", { onClick: () => scrollToHeading(item.id), className: cn('my-0.5 flex items-center gap-2 w-full cursor-pointer text-left', isActive
102
103
  ? 'text-foreground font-medium'
103
104
  : 'text-muted-foreground hover:text-foreground'), children: [_jsx("span", { className: cn('w-3 h-px shrink-0 transition-colors', isActive ? 'bg-primary' : 'bg-border') }), _jsx("span", { className: "text-sm leading-snug line-clamp-1", children: item.title })] }) }, item.id));
104
- }) }) })), author && (_jsxs(_Fragment, { children: [tocItems.length > 0 && _jsx("hr", { className: "border-border" }), _jsxs("div", { className: "flex flex-col gap-3", children: [author.image && (_jsx("img", { src: author.image, alt: author.name, className: "w-12 h-12 rounded-full object-cover" })), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: author.name }), author.role && (_jsx("p", { className: "text-xs text-muted-foreground", children: author.role }))] })] })] })), (formattedDate || readingTime) && (_jsxs(_Fragment, { children: [(tocItems.length > 0 || author) && !author && (_jsx("hr", { className: "border-border" })), _jsxs("div", { className: "flex flex-col gap-1 text-xs text-muted-foreground", children: [formattedDate && _jsx("span", { children: formattedDate }), readingTime ? _jsxs("span", { children: [readingTime, " min read"] }) : null] })] }))] }) })] }) }) }));
105
+ }) }) })), author && (_jsxs(_Fragment, { children: [tocItems.length > 0 && _jsx("hr", { className: "border-border" }), _jsxs("div", { className: "flex flex-col gap-3", children: [author.image && (_jsx(ThemeImage, { src: author.image, alt: author.name, className: "w-12 h-12 rounded-full object-cover" })), _jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: author.name }), author.role && (_jsx("p", { className: "text-xs text-muted-foreground", children: author.role }))] })] })] })), (formattedDate || readingTime) && (_jsxs(_Fragment, { children: [(tocItems.length > 0 || author) && !author && (_jsx("hr", { className: "border-border" })), _jsxs("div", { className: "flex flex-col gap-1 text-xs text-muted-foreground", children: [formattedDate && _jsx("span", { children: formattedDate }), readingTime ? _jsxs("span", { children: [readingTime, " min read"] }) : null] })] }))] }) })] }) }) }));
105
106
  }
106
107
  //# sourceMappingURL=BlogArticleClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogArticleClient.js","sourceRoot":"","sources":["../../src/blog/BlogArticleClient.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAqBlC,MAAM,UAAU,iBAAiB,CAAC,EAChC,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,WAAW,GACY;IACvB,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAY,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjD,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE;YACvC,MAAM,QAAQ,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAc,EAAE,CAAC;YAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAChD,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC;oBAAE,OAAO;gBAC/D,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;oBAChB,OAAO,CAAC,EAAE;wBACR,KAAK;6BACF,WAAW,EAAE;6BACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;6BAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;gBACrC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,KAAK;oBACL,KAAK,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACzC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,CAAC,OAAO,EAAE,EAAE;YACV,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;oBACzB,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,WAAW,CAAC,EAAE,CAAC,CAAC;oBAChB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBAClD,IAAI,OAAO,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;wBACzB,aAAa,CAAC,EAAE,CAAC,CAAC;oBACpB,CAAC;yBAAM,IAAI,OAAO,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;wBAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBACtC,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;4BAClC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gCAC5B,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gCAC9B,MAAM;4BACR,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,EACD,EAAE,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,GAAG,EAAE,CACrD,CAAC;QACF,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC;gBAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,2BAA2B;IAC3B,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QACjD,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,GAAG,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;YAClE,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,IAAI;QACxB,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;YACzD,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,CACL,kBAAS,SAAS,EAAC,gBAAgB,YACjC,cAAK,SAAS,EAAC,wDAAwD,YACrE,eAAK,SAAS,EAAC,uBAAuB,aAEpC,cAAK,GAAG,EAAE,UAAU,EAAE,SAAS,EAAC,uCAAuC,YACpE,QAAQ,GACL,EAGN,gBAAO,SAAS,EAAC,+BAA+B,YAC9C,eAAK,SAAS,EAAC,mCAAmC,aAE/C,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,wBACE,aAAI,SAAS,EAAC,eAAe,YAC1B,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;4CACrB,MAAM,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;4CACtC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gDACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gDACnC,IAAI,UAAU,GAAG,EAAE,CAAC;gDACpB,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oDAClC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;wDAC5B,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wDAC5B,MAAM;oDACR,CAAC;gDACH,CAAC;gDACD,IAAI,UAAU,KAAK,UAAU;oDAAE,OAAO,IAAI,CAAC;4CAC7C,CAAC;4CACD,OAAO,CACL,aAAkB,SAAS,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YACzD,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EACvC,SAAS,EAAE,EAAE,CACX,gEAAgE,EAChE,QAAQ;wDACN,CAAC,CAAC,6BAA6B;wDAC/B,CAAC,CAAC,6CAA6C,CAClD,aAED,eACE,SAAS,EAAE,EAAE,CACX,qCAAqC,EACrC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CACtC,GACD,EACF,eAAM,SAAS,EAAC,mCAAmC,YAChD,IAAI,CAAC,KAAK,GACN,IACA,IAnBF,IAAI,CAAC,EAAE,CAoBX,CACN,CAAC;wCACJ,CAAC,CAAC,GACC,GACD,CACP,EAGA,MAAM,IAAI,CACT,8BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,aAAI,SAAS,EAAC,eAAe,GAAG,EACxD,eAAK,SAAS,EAAC,qBAAqB,aACjC,MAAM,CAAC,KAAK,IAAI,CACf,cACE,GAAG,EAAE,MAAM,CAAC,KAAK,EACjB,GAAG,EAAE,MAAM,CAAC,IAAI,EAChB,SAAS,EAAC,qCAAqC,GAC/C,CACH,EACD,0BACE,YAAG,SAAS,EAAC,qCAAqC,YAAE,MAAM,CAAC,IAAI,GAAK,EACnE,MAAM,CAAC,IAAI,IAAI,CACd,YAAG,SAAS,EAAC,+BAA+B,YAAE,MAAM,CAAC,IAAI,GAAK,CAC/D,IACG,IACF,IACL,CACJ,EAGA,CAAC,aAAa,IAAI,WAAW,CAAC,IAAI,CACjC,8BACG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAC7C,aAAI,SAAS,EAAC,eAAe,GAAG,CACjC,EACD,eAAK,SAAS,EAAC,mDAAmD,aAC/D,aAAa,IAAI,yBAAO,aAAa,GAAQ,EAC7C,WAAW,CAAC,CAAC,CAAC,2BAAO,WAAW,iBAAiB,CAAC,CAAC,CAAC,IAAI,IACrD,IACL,CACJ,IACG,GACA,IACJ,GACF,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"BlogArticleClient.js","sourceRoot":"","sources":["../../src/blog/BlogArticleClient.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import React from 'react';
2
2
  interface BlogIndexProps {
3
+ id?: string;
3
4
  title?: string;
4
5
  description?: string;
5
6
  children?: React.ReactNode;
6
7
  }
7
- export declare function BlogIndex({ title, description, children }: BlogIndexProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function BlogIndex({ id, title, description, children }: BlogIndexProps): import("react/jsx-runtime").JSX.Element;
8
9
  export {};
9
10
  //# sourceMappingURL=BlogIndex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogIndex.d.ts","sourceRoot":"","sources":["../../src/blog/BlogIndex.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAczE"}
1
+ {"version":3,"file":"BlogIndex.d.ts","sourceRoot":"","sources":["../../src/blog/BlogIndex.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAc7E"}
@@ -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 BlogIndex({ title, description, children }) {
4
- 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", children: description })] })), children] }) }));
3
+ export function BlogIndex({ id, title, description, children }) {
4
+ 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", children: description })] })), children] }) }));
5
5
  }
6
6
  //# sourceMappingURL=BlogIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlogIndex.js","sourceRoot":"","sources":["../../src/blog/BlogIndex.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQxC,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAkB;IACxE,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,+BAA+B,YAAE,WAAW,GAAK,IAC1E,CACP,EACA,QAAQ,IACL,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"BlogIndex.js","sourceRoot":"","sources":["../../src/blog/BlogIndex.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AASxC,MAAM,UAAU,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAkB;IAC5E,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,+BAA+B,YAAE,WAAW,GAAK,IAC1E,CACP,EACA,QAAQ,IACL,GACE,CACX,CAAC;AACJ,CAAC"}
@@ -5,10 +5,11 @@ interface ContentSectionProps {
5
5
  }
6
6
  export declare function ContentSection({ title, children }: ContentSectionProps): import("react/jsx-runtime").JSX.Element;
7
7
  interface ContentPageProps {
8
+ id?: string;
8
9
  title: string;
9
10
  lastUpdated?: string;
10
11
  children: React.ReactNode;
11
12
  }
12
- export declare function ContentPage({ title, lastUpdated, children }: ContentPageProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function ContentPage({ id, title, lastUpdated, children }: ContentPageProps): import("react/jsx-runtime").JSX.Element;
13
14
  export {};
14
15
  //# sourceMappingURL=ContentPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContentPage.d.ts","sourceRoot":"","sources":["../../src/content/ContentPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAStE;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,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,2CAU7E"}
1
+ {"version":3,"file":"ContentPage.d.ts","sourceRoot":"","sources":["../../src/content/ContentPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAStE;AAED,UAAU,gBAAgB;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,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,2CAUjF"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  export function ContentSection({ title, children }) {
3
3
  return (_jsxs("div", { className: "mb-8", children: [_jsx("h2", { className: "text-xl font-bold text-foreground mb-4", children: title }), _jsx("div", { className: "text-muted-foreground text-sm leading-relaxed [&>p]:mb-3 [&>ul]:list-disc [&>ul]:pl-5 [&>ul]:mb-3", children: children })] }));
4
4
  }
5
- export function ContentPage({ title, lastUpdated, children }) {
6
- return (_jsx("section", { className: "py-12 md:py-20", children: _jsxs("div", { className: "container-main max-w-3xl", children: [_jsx("h1", { className: "text-3xl md:text-4xl font-bold text-foreground mb-2", children: title }), lastUpdated && _jsxs("p", { className: "text-sm text-muted-foreground mb-8", children: ["Last updated: ", lastUpdated] }), children] }) }));
5
+ export function ContentPage({ id, title, lastUpdated, children }) {
6
+ return (_jsx("section", { id: id, className: "py-12 md:py-20", children: _jsxs("div", { className: "container-main max-w-3xl", children: [_jsx("h1", { className: "text-3xl md:text-4xl font-bold text-foreground mb-2", children: title }), lastUpdated && _jsxs("p", { className: "text-sm text-muted-foreground mb-8", children: ["Last updated: ", lastUpdated] }), children] }) }));
7
7
  }
8
8
  //# sourceMappingURL=ContentPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContentPage.js","sourceRoot":"","sources":["../../src/content/ContentPage.tsx"],"names":[],"mappings":";AAOA,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAuB;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,MAAM,aACnB,aAAI,SAAS,EAAC,wCAAwC,YAAE,KAAK,GAAM,EACnE,cAAK,SAAS,EAAC,mGAAmG,YAC/G,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAoB;IAC5E,OAAO,CACL,kBAAS,SAAS,EAAC,gBAAgB,YACjC,eAAK,SAAS,EAAC,0BAA0B,aACvC,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EAC/E,WAAW,IAAI,aAAG,SAAS,EAAC,oCAAoC,+BAAgB,WAAW,IAAK,EAChG,QAAQ,IACL,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ContentPage.js","sourceRoot":"","sources":["../../src/content/ContentPage.tsx"],"names":[],"mappings":";AAOA,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAuB;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,MAAM,aACnB,aAAI,SAAS,EAAC,wCAAwC,YAAE,KAAK,GAAM,EACnE,cAAK,SAAS,EAAC,mGAAmG,YAC/G,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAoB;IAChF,OAAO,CACL,kBAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,gBAAgB,YACzC,eAAK,SAAS,EAAC,0BAA0B,aACvC,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EAC/E,WAAW,IAAI,aAAG,SAAS,EAAC,oCAAoC,+BAAgB,WAAW,IAAK,EAChG,QAAQ,IACL,GACE,CACX,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -26,6 +26,8 @@ export { Carousel, CarouselItem } from './marketing/Carousel';
26
26
  export { TabsSection, TabItem } from './marketing/TabsSection';
27
27
  export { BlogArticle } from './blog/BlogArticle';
28
28
  export { BlogIndex } from './blog/BlogIndex';
29
+ export { ThemeImage } from './ui/theme-image';
30
+ export type { ImageSource } from './ui/theme-image';
29
31
  export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, } from './ui/table';
30
32
  export { ProseH2, ProseH3, ProseH4, ProseP, ProseA, ProseUl, ProseOl, ProseLi, ProseBlockquote, ProsePre, ProseCode, ProseHr, ProseImg } from './ui/prose';
31
33
  export { ContentPage, ContentSection } from './content/ContentPage';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3J,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3J,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -31,6 +31,8 @@ export { TabsSection, TabItem } from './marketing/TabsSection';
31
31
  // Blog
32
32
  export { BlogArticle } from './blog/BlogArticle';
33
33
  export { BlogIndex } from './blog/BlogIndex';
34
+ // Image utilities
35
+ export { ThemeImage } from './ui/theme-image';
34
36
  // UI primitives
35
37
  export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, } from './ui/table';
36
38
  // Prose (Markdown element overrides)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,UAAU;AACV,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,YAAY;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,gBAAgB;AAChB,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,qCAAqC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3J,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,UAAU;AACV,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,YAAY;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,gBAAgB;AAChB,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,qCAAqC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3J,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { type ImageSource } from '../ui/theme-image';
2
3
  interface AlternatingFeatureItemProps {
3
4
  icon?: string;
4
5
  title: string;
@@ -8,17 +9,17 @@ export declare function AlternatingFeatureItem({ icon, title, description }: Alt
8
9
  interface AlternatingFeatureRowProps {
9
10
  title: string;
10
11
  description?: string;
11
- image: string;
12
- imageDark?: string;
12
+ image: ImageSource;
13
13
  imageAlt?: string;
14
14
  children?: React.ReactNode;
15
15
  }
16
- export declare function AlternatingFeatureRow({ title, description, image, imageDark, imageAlt, children }: AlternatingFeatureRowProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function AlternatingFeatureRow({ title, description, image, imageAlt, children }: AlternatingFeatureRowProps): import("react/jsx-runtime").JSX.Element;
17
17
  interface AlternatingFeaturesProps {
18
+ id?: string;
18
19
  title?: string;
19
20
  description?: string;
20
21
  children: React.ReactNode;
21
22
  }
22
- export declare function AlternatingFeatures({ title, description, children }: AlternatingFeaturesProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function AlternatingFeatures({ id, title, description, children }: AlternatingFeaturesProps): import("react/jsx-runtime").JSX.Element;
23
24
  export {};
24
25
  //# sourceMappingURL=AlternatingFeatures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AlternatingFeatures.d.ts","sourceRoot":"","sources":["../../src/marketing/AlternatingFeatures.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,2BAA2B;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,2BAA2B,2CAU/F;AAED,UAAU,0BAA0B;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,0BAA0B,2CAoB7H;AAED,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,wBAAwB,2CAc7F"}
1
+ {"version":3,"file":"AlternatingFeatures.d.ts","sourceRoot":"","sources":["../../src/marketing/AlternatingFeatures.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,UAAU,2BAA2B;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,2BAA2B,2CAU/F;AAED,UAAU,0BAA0B;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,0BAA0B,2CAalH;AAED,UAAU,wBAAwB;IAChC,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,mBAAmB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,wBAAwB,2CAcjG"}
@@ -1,13 +1,14 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Section } from '../ui/section';
3
3
  import { Mockup } from '../ui/mockup';
4
+ import { ThemeImage } from '../ui/theme-image';
4
5
  export function AlternatingFeatureItem({ icon, title, description }) {
5
6
  return (_jsxs("div", { className: "flex gap-3 items-start", children: [icon && _jsx("span", { className: "text-primary text-xl mt-0.5", children: icon }), _jsxs("div", { children: [_jsx("h4", { className: "font-semibold text-foreground mb-1", children: title }), _jsx("p", { className: "text-sm text-muted-foreground", children: description })] })] }));
6
7
  }
7
- export function AlternatingFeatureRow({ title, description, image, imageDark, imageAlt, children }) {
8
- return (_jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-12 items-center py-12 [&:nth-child(even)>div:first-child]:md:order-2", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-2xl md:text-3xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-muted-foreground mb-6", children: description }), children && _jsx("div", { className: "space-y-4", children: children })] }), _jsx(Mockup, { type: "responsive", children: imageDark ? (_jsxs(_Fragment, { children: [_jsx("img", { src: image, alt: imageAlt || title, className: "w-full dark:hidden" }), _jsx("img", { src: imageDark, alt: imageAlt || title, className: "w-full hidden dark:block" })] })) : (_jsx("img", { src: image, alt: imageAlt || title, className: "w-full" })) })] }));
8
+ export function AlternatingFeatureRow({ title, description, image, imageAlt, children }) {
9
+ return (_jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-12 items-center py-12 [&:nth-child(even)>div:first-child]:md:order-2", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-2xl md:text-3xl font-bold text-foreground mb-4", children: title }), description && _jsx("p", { className: "text-muted-foreground mb-6", children: description }), children && _jsx("div", { className: "space-y-4", children: children })] }), _jsx(Mockup, { type: "responsive", children: _jsx(ThemeImage, { src: image, alt: imageAlt || title, className: "w-full" }) })] }));
9
10
  }
10
- export function AlternatingFeatures({ title, description, children }) {
11
- return (_jsx(Section, { children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-16", 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: "divide-y divide-border", children: children })] }) }));
11
+ export function AlternatingFeatures({ id, title, description, children }) {
12
+ return (_jsx(Section, { id: id, children: _jsxs("div", { className: "container-main", children: [(title || description) && (_jsxs("div", { className: "text-center mb-16", 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: "divide-y divide-border", children: children })] }) }));
12
13
  }
13
14
  //# sourceMappingURL=AlternatingFeatures.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AlternatingFeatures.js","sourceRoot":"","sources":["../../src/marketing/AlternatingFeatures.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,MAAM,UAAU,sBAAsB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAA+B;IAC9F,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,aACpC,IAAI,IAAI,eAAM,SAAS,EAAC,6BAA6B,YAAE,IAAI,GAAQ,EACpE,0BACE,aAAI,SAAS,EAAC,oCAAoC,YAAE,KAAK,GAAM,EAC/D,YAAG,SAAS,EAAC,+BAA+B,YAAE,WAAW,GAAK,IAC1D,IACF,CACP,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,qBAAqB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAA8B;IAC5H,OAAO,CACL,eAAK,SAAS,EAAC,0GAA0G,aACvH,0BACE,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EAC/E,WAAW,IAAI,YAAG,SAAS,EAAC,4BAA4B,YAAE,WAAW,GAAK,EAC1E,QAAQ,IAAI,cAAK,SAAS,EAAC,WAAW,YAAE,QAAQ,GAAO,IACpD,EACN,KAAC,MAAM,IAAC,IAAI,EAAC,YAAY,YACtB,SAAS,CAAC,CAAC,CAAC,CACX,8BACE,cAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,IAAI,KAAK,EAAE,SAAS,EAAC,oBAAoB,GAAG,EAC1E,cAAK,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,IAAI,KAAK,EAAE,SAAS,EAAC,0BAA0B,GAAG,IACnF,CACJ,CAAC,CAAC,CAAC,CACF,cAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,IAAI,KAAK,EAAE,SAAS,EAAC,QAAQ,GAAG,CAC/D,GACM,IACL,CACP,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,mBAAmB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAA4B;IAC5F,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,wBAAwB,YAAE,QAAQ,GAAO,IACpD,GACE,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"AlternatingFeatures.js","sourceRoot":"","sources":["../../src/marketing/AlternatingFeatures.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAQjE,MAAM,UAAU,sBAAsB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAA+B;IAC9F,OAAO,CACL,eAAK,SAAS,EAAC,wBAAwB,aACpC,IAAI,IAAI,eAAM,SAAS,EAAC,6BAA6B,YAAE,IAAI,GAAQ,EACpE,0BACE,aAAI,SAAS,EAAC,oCAAoC,YAAE,KAAK,GAAM,EAC/D,YAAG,SAAS,EAAC,+BAA+B,YAAE,WAAW,GAAK,IAC1D,IACF,CACP,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,qBAAqB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAA8B;IACjH,OAAO,CACL,eAAK,SAAS,EAAC,0GAA0G,aACvH,0BACE,aAAI,SAAS,EAAC,qDAAqD,YAAE,KAAK,GAAM,EAC/E,WAAW,IAAI,YAAG,SAAS,EAAC,4BAA4B,YAAE,WAAW,GAAK,EAC1E,QAAQ,IAAI,cAAK,SAAS,EAAC,WAAW,YAAE,QAAQ,GAAO,IACpD,EACN,KAAC,MAAM,IAAC,IAAI,EAAC,YAAY,YACvB,KAAC,UAAU,IAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,IAAI,KAAK,EAAE,SAAS,EAAC,QAAQ,GAAG,GAC9D,IACL,CACP,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,mBAAmB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAA4B;IAChG,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,wBAAwB,YAAE,QAAQ,GAAO,IACpD,GACE,CACX,CAAC;AACJ,CAAC"}