@electroplix/components 0.4.1 → 0.5.0-alpha.11

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 (185) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/LICENSE +21 -0
  3. package/README.md +88 -474
  4. package/SECURITY.md +19 -0
  5. package/cli.cjs +544 -485
  6. package/dist/config.d.ts +73 -0
  7. package/dist/config.esm.js +229 -0
  8. package/dist/index.esm.js +10195 -8528
  9. package/dist/package.json +100 -0
  10. package/dist/src/components/blog/index.d.ts +21 -21
  11. package/dist/src/components/blog/index.d.ts.map +1 -1
  12. package/dist/src/components/buttons/index.d.ts +41 -16
  13. package/dist/src/components/buttons/index.d.ts.map +1 -1
  14. package/dist/src/components/content/BlockquoteTestimonial.d.ts +3 -5
  15. package/dist/src/components/content/BlockquoteTestimonial.d.ts.map +1 -1
  16. package/dist/src/components/content/CalloutBox.d.ts +4 -6
  17. package/dist/src/components/content/CalloutBox.d.ts.map +1 -1
  18. package/dist/src/components/content/HeadingSection.d.ts +4 -6
  19. package/dist/src/components/content/HeadingSection.d.ts.map +1 -1
  20. package/dist/src/components/content/InlineCodeText.d.ts +5 -6
  21. package/dist/src/components/content/InlineCodeText.d.ts.map +1 -1
  22. package/dist/src/components/content/ParagraphBlock.d.ts +5 -7
  23. package/dist/src/components/content/ParagraphBlock.d.ts.map +1 -1
  24. package/dist/src/components/content/RichMarkdown.d.ts +5 -6
  25. package/dist/src/components/content/RichMarkdown.d.ts.map +1 -1
  26. package/dist/src/components/content/TeamGrid.d.ts +3 -2
  27. package/dist/src/components/content/TeamGrid.d.ts.map +1 -1
  28. package/dist/src/components/content/index.d.ts +7 -7
  29. package/dist/src/components/content/index.d.ts.map +1 -1
  30. package/dist/src/components/data-display/Badge.d.ts +6 -5
  31. package/dist/src/components/data-display/Badge.d.ts.map +1 -1
  32. package/dist/src/components/data-display/BadgeGroup.d.ts +6 -4
  33. package/dist/src/components/data-display/BadgeGroup.d.ts.map +1 -1
  34. package/dist/src/components/data-display/BarChart.d.ts +3 -2
  35. package/dist/src/components/data-display/BarChart.d.ts.map +1 -1
  36. package/dist/src/components/data-display/CalendarGrid.d.ts +4 -3
  37. package/dist/src/components/data-display/CalendarGrid.d.ts.map +1 -1
  38. package/dist/src/components/data-display/DataTable.d.ts +5 -5
  39. package/dist/src/components/data-display/DataTable.d.ts.map +1 -1
  40. package/dist/src/components/data-display/LineChart.d.ts +3 -2
  41. package/dist/src/components/data-display/LineChart.d.ts.map +1 -1
  42. package/dist/src/components/data-display/PieChart.d.ts +3 -2
  43. package/dist/src/components/data-display/PieChart.d.ts.map +1 -1
  44. package/dist/src/components/data-display/ProgressBar.d.ts +3 -2
  45. package/dist/src/components/data-display/ProgressBar.d.ts.map +1 -1
  46. package/dist/src/components/data-display/RatingStars.d.ts +3 -2
  47. package/dist/src/components/data-display/RatingStars.d.ts.map +1 -1
  48. package/dist/src/components/data-display/Sparkline.d.ts +3 -2
  49. package/dist/src/components/data-display/Sparkline.d.ts.map +1 -1
  50. package/dist/src/components/data-display/Timeline.d.ts +4 -3
  51. package/dist/src/components/data-display/Timeline.d.ts.map +1 -1
  52. package/dist/src/components/data-display/index.d.ts +11 -11
  53. package/dist/src/components/data-display/index.d.ts.map +1 -1
  54. package/dist/src/components/ecommerce/index.d.ts +24 -21
  55. package/dist/src/components/ecommerce/index.d.ts.map +1 -1
  56. package/dist/src/components/forms/AddressAutocomplete.d.ts +2 -4
  57. package/dist/src/components/forms/AddressAutocomplete.d.ts.map +1 -1
  58. package/dist/src/components/forms/Captcha.d.ts +3 -5
  59. package/dist/src/components/forms/Captcha.d.ts.map +1 -1
  60. package/dist/src/components/forms/ContactForm.d.ts +2 -4
  61. package/dist/src/components/forms/ContactForm.d.ts.map +1 -1
  62. package/dist/src/components/forms/DateTimePicker.d.ts +3 -5
  63. package/dist/src/components/forms/DateTimePicker.d.ts.map +1 -1
  64. package/dist/src/components/forms/FileUploader.d.ts +2 -4
  65. package/dist/src/components/forms/FileUploader.d.ts.map +1 -1
  66. package/dist/src/components/forms/FormShell.d.ts +2 -5
  67. package/dist/src/components/forms/FormShell.d.ts.map +1 -1
  68. package/dist/src/components/forms/InputField.d.ts +2 -4
  69. package/dist/src/components/forms/InputField.d.ts.map +1 -1
  70. package/dist/src/components/forms/MultiStepWizard.d.ts +2 -4
  71. package/dist/src/components/forms/MultiStepWizard.d.ts.map +1 -1
  72. package/dist/src/components/forms/NewsletterSignup.d.ts +2 -4
  73. package/dist/src/components/forms/NewsletterSignup.d.ts.map +1 -1
  74. package/dist/src/components/forms/RadioGroup.d.ts +2 -4
  75. package/dist/src/components/forms/RadioGroup.d.ts.map +1 -1
  76. package/dist/src/components/forms/SelectDropdown.d.ts +2 -4
  77. package/dist/src/components/forms/SelectDropdown.d.ts.map +1 -1
  78. package/dist/src/components/forms/TextAreaField.d.ts +2 -4
  79. package/dist/src/components/forms/TextAreaField.d.ts.map +1 -1
  80. package/dist/src/components/forms/ToggleSwitch.d.ts +2 -4
  81. package/dist/src/components/forms/ToggleSwitch.d.ts.map +1 -1
  82. package/dist/src/components/forms/ValidationWrapper.d.ts +2 -4
  83. package/dist/src/components/forms/ValidationWrapper.d.ts.map +1 -1
  84. package/dist/src/components/forms/index.d.ts +28 -28
  85. package/dist/src/components/forms/index.d.ts.map +1 -1
  86. package/dist/src/components/hero/CTAOverlayHero.d.ts +2 -4
  87. package/dist/src/components/hero/CTAOverlayHero.d.ts.map +1 -1
  88. package/dist/src/components/hero/CarouselHero.d.ts +2 -4
  89. package/dist/src/components/hero/CarouselHero.d.ts.map +1 -1
  90. package/dist/src/components/hero/HeroShell.d.ts +2 -5
  91. package/dist/src/components/hero/HeroShell.d.ts.map +1 -1
  92. package/dist/src/components/hero/ImageHero.d.ts +35 -0
  93. package/dist/src/components/hero/ImageHero.d.ts.map +1 -0
  94. package/dist/src/components/hero/PatternedHero.d.ts +3 -5
  95. package/dist/src/components/hero/PatternedHero.d.ts.map +1 -1
  96. package/dist/src/components/hero/SplitHero.d.ts +2 -4
  97. package/dist/src/components/hero/SplitHero.d.ts.map +1 -1
  98. package/dist/src/components/hero/StaticHero.d.ts +3 -5
  99. package/dist/src/components/hero/StaticHero.d.ts.map +1 -1
  100. package/dist/src/components/hero/VideoHeaderHero.d.ts +2 -4
  101. package/dist/src/components/hero/VideoHeaderHero.d.ts.map +1 -1
  102. package/dist/src/components/hero/index.d.ts +16 -14
  103. package/dist/src/components/hero/index.d.ts.map +1 -1
  104. package/dist/src/components/lists-cards/index.d.ts +17 -20
  105. package/dist/src/components/lists-cards/index.d.ts.map +1 -1
  106. package/dist/src/components/marketing/index.d.ts +22 -22
  107. package/dist/src/components/marketing/index.d.ts.map +1 -1
  108. package/dist/src/components/media/index.d.ts +27 -29
  109. package/dist/src/components/media/index.d.ts.map +1 -1
  110. package/dist/src/components/miscellaneous/index.d.ts +18 -17
  111. package/dist/src/components/miscellaneous/index.d.ts.map +1 -1
  112. package/dist/src/components/modals/index.d.ts +23 -34
  113. package/dist/src/components/modals/index.d.ts.map +1 -1
  114. package/dist/src/components/navigation/AnchorLinks.d.ts +4 -6
  115. package/dist/src/components/navigation/AnchorLinks.d.ts.map +1 -1
  116. package/dist/src/components/navigation/Breadcrumbs.d.ts +3 -5
  117. package/dist/src/components/navigation/Breadcrumbs.d.ts.map +1 -1
  118. package/dist/src/components/navigation/Footer.d.ts +3 -4
  119. package/dist/src/components/navigation/Footer.d.ts.map +1 -1
  120. package/dist/src/components/navigation/LanguageSelector.d.ts +3 -5
  121. package/dist/src/components/navigation/LanguageSelector.d.ts.map +1 -1
  122. package/dist/src/components/navigation/MegaMenu.d.ts +3 -5
  123. package/dist/src/components/navigation/MegaMenu.d.ts.map +1 -1
  124. package/dist/src/components/navigation/Pagination.d.ts +3 -2
  125. package/dist/src/components/navigation/Pagination.d.ts.map +1 -1
  126. package/dist/src/components/navigation/PrimaryNav.d.ts +3 -2
  127. package/dist/src/components/navigation/PrimaryNav.d.ts.map +1 -1
  128. package/dist/src/components/navigation/SideDrawerNav.d.ts +5 -4
  129. package/dist/src/components/navigation/SideDrawerNav.d.ts.map +1 -1
  130. package/dist/src/components/navigation/SidebarMenu.d.ts +4 -3
  131. package/dist/src/components/navigation/SidebarMenu.d.ts.map +1 -1
  132. package/dist/src/components/navigation/Stepper.d.ts +4 -3
  133. package/dist/src/components/navigation/Stepper.d.ts.map +1 -1
  134. package/dist/src/components/navigation/Tabs.d.ts +5 -4
  135. package/dist/src/components/navigation/Tabs.d.ts.map +1 -1
  136. package/dist/src/components/navigation/index.d.ts +22 -22
  137. package/dist/src/components/navigation/index.d.ts.map +1 -1
  138. package/dist/src/components/onboarding/index.d.ts +17 -17
  139. package/dist/src/components/onboarding/index.d.ts.map +1 -1
  140. package/dist/src/components/search/index.d.ts +13 -12
  141. package/dist/src/components/search/index.d.ts.map +1 -1
  142. package/dist/src/components/site-identity/index.d.ts +13 -14
  143. package/dist/src/components/site-identity/index.d.ts.map +1 -1
  144. package/dist/src/components/social/index.d.ts +19 -18
  145. package/dist/src/components/social/index.d.ts.map +1 -1
  146. package/dist/src/components/user-accounts/index.d.ts +17 -17
  147. package/dist/src/components/user-accounts/index.d.ts.map +1 -1
  148. package/dist/src/core/config.d.ts +1 -1
  149. package/dist/src/core/config.d.ts.map +1 -1
  150. package/dist/src/core/icons.d.ts +1 -1
  151. package/dist/src/core/icons.d.ts.map +1 -1
  152. package/dist/src/core/index.d.ts +7 -7
  153. package/dist/src/core/index.d.ts.map +1 -1
  154. package/dist/src/core/provider.d.ts +20 -20
  155. package/dist/src/core/provider.d.ts.map +1 -1
  156. package/dist/src/core/styles.d.ts +2 -0
  157. package/dist/src/core/styles.d.ts.map +1 -0
  158. package/dist/src/core/types.d.ts +4 -4
  159. package/dist/src/core/types.d.ts.map +1 -1
  160. package/dist/src/core/utils.d.ts +1 -1
  161. package/dist/src/core/utils.d.ts.map +1 -1
  162. package/dist/src/index.d.ts +19 -19
  163. package/dist/src/index.d.ts.map +1 -1
  164. package/metadata/blog.json +807 -0
  165. package/metadata/buttons.json +2186 -0
  166. package/metadata/content.json +1152 -0
  167. package/metadata/data-display.json +822 -0
  168. package/metadata/ecommerce.json +1059 -0
  169. package/metadata/forms.json +2637 -0
  170. package/metadata/hero.json +1401 -0
  171. package/metadata/lists-cards.json +848 -0
  172. package/metadata/marketing.json +1235 -0
  173. package/metadata/media.json +800 -0
  174. package/metadata/miscellaneous.json +778 -0
  175. package/metadata/modals.json +954 -0
  176. package/metadata/navigation.json +1348 -0
  177. package/metadata/onboarding.json +615 -0
  178. package/metadata/search.json +559 -0
  179. package/metadata/site-identity.json +555 -0
  180. package/metadata/social.json +654 -0
  181. package/metadata/user-accounts.json +727 -0
  182. package/package.json +22 -7
  183. package/dist/README.md +0 -35
  184. package/dist/src/__tests__/test-utils.d.ts +0 -8
  185. package/dist/src/__tests__/test-utils.d.ts.map +0 -1
@@ -0,0 +1,807 @@
1
+ {
2
+ "$schema": "electroplix-component-metadata-v1",
3
+ "category": "blog",
4
+ "label": "Blog",
5
+ "description": "Blog and article components for post cards, author bylines, tags, reading progress, comments, and content rendering",
6
+ "themeKey": "blog",
7
+ "icon": "book-open",
8
+ "sortOrder": 18,
9
+ "components": [
10
+ {
11
+ "id": "blog.BlogCard",
12
+ "name": "BlogCard",
13
+ "description": "Blog post preview card displaying cover image, title, excerpt, author, date, read time, and tags. Supports vertical and horizontal layouts.",
14
+ "whenToUse": "Use on blog listing pages, landing pages, or marketing pages to showcase blog posts as clickable preview cards.",
15
+ "isShell": false,
16
+ "props": [
17
+ {
18
+ "name": "post",
19
+ "type": "BlogPost",
20
+ "required": true,
21
+ "default": null,
22
+ "description": "Blog post object: {id, title, slug?, excerpt?, coverImage?, author?: {name, avatar?}, date?, readTime?, tags?, category?}"
23
+ },
24
+ {
25
+ "name": "onClick",
26
+ "type": "(post: BlogPost) => void",
27
+ "required": false,
28
+ "default": null,
29
+ "description": "Callback when the card is clicked"
30
+ },
31
+ {
32
+ "name": "variant",
33
+ "type": "\"vertical\" | \"horizontal\"",
34
+ "required": false,
35
+ "default": "\"vertical\"",
36
+ "description": "Card layout direction"
37
+ },
38
+ {
39
+ "name": "bgColor",
40
+ "type": "string",
41
+ "required": false,
42
+ "default": "theme",
43
+ "description": "Background color override"
44
+ },
45
+ {
46
+ "name": "textColor",
47
+ "type": "string",
48
+ "required": false,
49
+ "default": "theme",
50
+ "description": "Text color override"
51
+ },
52
+ {
53
+ "name": "accentColor",
54
+ "type": "string",
55
+ "required": false,
56
+ "default": "theme",
57
+ "description": "Accent color override"
58
+ },
59
+ {
60
+ "name": "borderColor",
61
+ "type": "string",
62
+ "required": false,
63
+ "default": "theme",
64
+ "description": "Border color override"
65
+ },
66
+ {
67
+ "name": "fontFamily",
68
+ "type": "string",
69
+ "required": false,
70
+ "default": "theme",
71
+ "description": "Font family override"
72
+ }
73
+ ],
74
+ "themeTokens": [
75
+ "bgColor",
76
+ "textColor",
77
+ "accentColor",
78
+ "borderColor",
79
+ "fontFamily",
80
+ "radius",
81
+ "spacing",
82
+ "cardBg",
83
+ "cardRadius",
84
+ "cardBorder",
85
+ "tagBg",
86
+ "tagColor"
87
+ ],
88
+ "aiHints": {
89
+ "pageTypes": ["blog", "landing", "marketing", "education", "community", "restaurant"],
90
+ "placement": "body",
91
+ "priority": 9,
92
+ "sequenceOrder": 5,
93
+ "pairsWellWith": [
94
+ "blog.TagList",
95
+ "blog.AuthorByline",
96
+ "navigation.Pagination",
97
+ "blog.RelatedPosts",
98
+ "forms.NewsletterSignup"
99
+ ],
100
+ "maxPerPage": 12,
101
+ "isContainer": false
102
+ }
103
+ },
104
+ {
105
+ "id": "blog.AuthorByline",
106
+ "name": "AuthorByline",
107
+ "description": "Author information row displaying avatar, name, optional bio, publication date, and estimated read time.",
108
+ "whenToUse": "Use within blog post pages to show the author's identity, publication date, and reading time. Typically placed below the post title or above article content.",
109
+ "isShell": false,
110
+ "props": [
111
+ {
112
+ "name": "name",
113
+ "type": "string",
114
+ "required": true,
115
+ "default": null,
116
+ "description": "Author display name"
117
+ },
118
+ {
119
+ "name": "avatar",
120
+ "type": "string",
121
+ "required": false,
122
+ "default": null,
123
+ "description": "URL to the author's avatar image"
124
+ },
125
+ {
126
+ "name": "bio",
127
+ "type": "string",
128
+ "required": false,
129
+ "default": null,
130
+ "description": "Short author biography"
131
+ },
132
+ {
133
+ "name": "date",
134
+ "type": "string",
135
+ "required": false,
136
+ "default": null,
137
+ "description": "Publication date string"
138
+ },
139
+ {
140
+ "name": "readTime",
141
+ "type": "string",
142
+ "required": false,
143
+ "default": null,
144
+ "description": "Estimated reading time (e.g. '5 min read')"
145
+ },
146
+ {
147
+ "name": "bgColor",
148
+ "type": "string",
149
+ "required": false,
150
+ "default": "theme",
151
+ "description": "Background color override"
152
+ },
153
+ {
154
+ "name": "textColor",
155
+ "type": "string",
156
+ "required": false,
157
+ "default": "theme",
158
+ "description": "Text color override"
159
+ },
160
+ {
161
+ "name": "accentColor",
162
+ "type": "string",
163
+ "required": false,
164
+ "default": "theme",
165
+ "description": "Accent color override"
166
+ },
167
+ {
168
+ "name": "borderColor",
169
+ "type": "string",
170
+ "required": false,
171
+ "default": "theme",
172
+ "description": "Border color override"
173
+ },
174
+ {
175
+ "name": "fontFamily",
176
+ "type": "string",
177
+ "required": false,
178
+ "default": "theme",
179
+ "description": "Font family override"
180
+ }
181
+ ],
182
+ "themeTokens": [
183
+ "bgColor",
184
+ "textColor",
185
+ "accentColor",
186
+ "borderColor",
187
+ "fontFamily",
188
+ "radius",
189
+ "spacing",
190
+ "cardBg",
191
+ "cardRadius",
192
+ "cardBorder",
193
+ "tagBg",
194
+ "tagColor"
195
+ ],
196
+ "aiHints": {
197
+ "pageTypes": ["blog"],
198
+ "placement": "body",
199
+ "priority": 6,
200
+ "sequenceOrder": 4,
201
+ "pairsWellWith": ["blog.ArticleRenderer", "blog.ReadingBar", "blog.TagList"],
202
+ "maxPerPage": 1,
203
+ "isContainer": false
204
+ }
205
+ },
206
+ {
207
+ "id": "blog.TagList",
208
+ "name": "TagList",
209
+ "description": "Horizontally-wrapped list of clickable tag chips. Highlights the currently active tag.",
210
+ "whenToUse": "Use on blog listing pages or individual post pages to display and filter by tags. Also useful in ecommerce for product tag filtering.",
211
+ "isShell": false,
212
+ "props": [
213
+ {
214
+ "name": "tags",
215
+ "type": "string[]",
216
+ "required": true,
217
+ "default": null,
218
+ "description": "Array of tag label strings"
219
+ },
220
+ {
221
+ "name": "onTagClick",
222
+ "type": "(tag: string) => void",
223
+ "required": false,
224
+ "default": null,
225
+ "description": "Callback when a tag is clicked"
226
+ },
227
+ {
228
+ "name": "activeTag",
229
+ "type": "string",
230
+ "required": false,
231
+ "default": null,
232
+ "description": "Currently active/selected tag"
233
+ },
234
+ {
235
+ "name": "bgColor",
236
+ "type": "string",
237
+ "required": false,
238
+ "default": "theme",
239
+ "description": "Background color override"
240
+ },
241
+ {
242
+ "name": "textColor",
243
+ "type": "string",
244
+ "required": false,
245
+ "default": "theme",
246
+ "description": "Text color override"
247
+ },
248
+ {
249
+ "name": "accentColor",
250
+ "type": "string",
251
+ "required": false,
252
+ "default": "theme",
253
+ "description": "Accent color override"
254
+ },
255
+ {
256
+ "name": "borderColor",
257
+ "type": "string",
258
+ "required": false,
259
+ "default": "theme",
260
+ "description": "Border color override"
261
+ },
262
+ {
263
+ "name": "fontFamily",
264
+ "type": "string",
265
+ "required": false,
266
+ "default": "theme",
267
+ "description": "Font family override"
268
+ }
269
+ ],
270
+ "themeTokens": [
271
+ "bgColor",
272
+ "textColor",
273
+ "accentColor",
274
+ "borderColor",
275
+ "fontFamily",
276
+ "radius",
277
+ "spacing",
278
+ "cardBg",
279
+ "cardRadius",
280
+ "cardBorder",
281
+ "tagBg",
282
+ "tagColor"
283
+ ],
284
+ "aiHints": {
285
+ "pageTypes": ["blog", "ecommerce"],
286
+ "placement": "body",
287
+ "priority": 5,
288
+ "sequenceOrder": 4,
289
+ "pairsWellWith": ["blog.BlogCard", "blog.AuthorByline", "blog.ArchiveList"],
290
+ "maxPerPage": 2,
291
+ "isContainer": false
292
+ }
293
+ },
294
+ {
295
+ "id": "blog.BlogBadge",
296
+ "name": "BlogBadge",
297
+ "description": "Small category or status badge for blog posts. Displays a colored label chip.",
298
+ "whenToUse": "Use on blog cards or article headers to indicate the post category, status (e.g. 'New', 'Featured'), or content type.",
299
+ "isShell": false,
300
+ "props": [
301
+ {
302
+ "name": "label",
303
+ "type": "string",
304
+ "required": true,
305
+ "default": null,
306
+ "description": "Badge text label"
307
+ },
308
+ {
309
+ "name": "color",
310
+ "type": "string",
311
+ "required": false,
312
+ "default": "theme accent",
313
+ "description": "Badge background color"
314
+ },
315
+ {
316
+ "name": "bgColor",
317
+ "type": "string",
318
+ "required": false,
319
+ "default": "theme",
320
+ "description": "Background color override"
321
+ },
322
+ {
323
+ "name": "textColor",
324
+ "type": "string",
325
+ "required": false,
326
+ "default": "theme",
327
+ "description": "Text color override"
328
+ },
329
+ {
330
+ "name": "accentColor",
331
+ "type": "string",
332
+ "required": false,
333
+ "default": "theme",
334
+ "description": "Accent color override"
335
+ },
336
+ {
337
+ "name": "borderColor",
338
+ "type": "string",
339
+ "required": false,
340
+ "default": "theme",
341
+ "description": "Border color override"
342
+ },
343
+ {
344
+ "name": "fontFamily",
345
+ "type": "string",
346
+ "required": false,
347
+ "default": "theme",
348
+ "description": "Font family override"
349
+ }
350
+ ],
351
+ "themeTokens": [
352
+ "bgColor",
353
+ "textColor",
354
+ "accentColor",
355
+ "borderColor",
356
+ "fontFamily",
357
+ "radius",
358
+ "spacing",
359
+ "cardBg",
360
+ "cardRadius",
361
+ "cardBorder",
362
+ "tagBg",
363
+ "tagColor"
364
+ ],
365
+ "aiHints": {
366
+ "pageTypes": ["blog"],
367
+ "placement": "body",
368
+ "priority": 4,
369
+ "sequenceOrder": 4,
370
+ "pairsWellWith": ["blog.BlogCard", "blog.AuthorByline", "blog.ArticleRenderer"],
371
+ "maxPerPage": 5,
372
+ "isContainer": false
373
+ }
374
+ },
375
+ {
376
+ "id": "blog.ReadingBar",
377
+ "name": "ReadingBar",
378
+ "description": "Thin progress bar fixed at the top of the viewport that fills as the user scrolls through article content. Scroll-position-based.",
379
+ "whenToUse": "Use on blog post or documentation pages to give readers a visual indicator of their reading progress through the article.",
380
+ "isShell": false,
381
+ "props": [
382
+ {
383
+ "name": "color",
384
+ "type": "string",
385
+ "required": false,
386
+ "default": "gradient from accent",
387
+ "description": "Bar color or gradient"
388
+ },
389
+ {
390
+ "name": "height",
391
+ "type": "number",
392
+ "required": false,
393
+ "default": "3",
394
+ "description": "Bar height in pixels"
395
+ },
396
+ {
397
+ "name": "containerRef",
398
+ "type": "RefObject<HTMLElement | null>",
399
+ "required": false,
400
+ "default": null,
401
+ "description": "Ref to the scrollable container element; defaults to document/window scroll"
402
+ },
403
+ {
404
+ "name": "bgColor",
405
+ "type": "string",
406
+ "required": false,
407
+ "default": "theme",
408
+ "description": "Background color override"
409
+ },
410
+ {
411
+ "name": "textColor",
412
+ "type": "string",
413
+ "required": false,
414
+ "default": "theme",
415
+ "description": "Text color override"
416
+ },
417
+ {
418
+ "name": "accentColor",
419
+ "type": "string",
420
+ "required": false,
421
+ "default": "theme",
422
+ "description": "Accent color override"
423
+ },
424
+ {
425
+ "name": "borderColor",
426
+ "type": "string",
427
+ "required": false,
428
+ "default": "theme",
429
+ "description": "Border color override"
430
+ },
431
+ {
432
+ "name": "fontFamily",
433
+ "type": "string",
434
+ "required": false,
435
+ "default": "theme",
436
+ "description": "Font family override"
437
+ }
438
+ ],
439
+ "themeTokens": [
440
+ "bgColor",
441
+ "textColor",
442
+ "accentColor",
443
+ "borderColor",
444
+ "fontFamily",
445
+ "radius",
446
+ "spacing",
447
+ "cardBg",
448
+ "cardRadius",
449
+ "cardBorder",
450
+ "tagBg",
451
+ "tagColor"
452
+ ],
453
+ "aiHints": {
454
+ "pageTypes": ["blog", "documentation"],
455
+ "placement": "overlay",
456
+ "priority": 5,
457
+ "sequenceOrder": 1,
458
+ "pairsWellWith": ["blog.ArticleRenderer", "blog.AuthorByline", "navigation.PrimaryNav"],
459
+ "maxPerPage": 1,
460
+ "isContainer": false
461
+ }
462
+ },
463
+ {
464
+ "id": "blog.ArticleRenderer",
465
+ "name": "ArticleRenderer",
466
+ "description": "Renders sanitized HTML article content with typographic styling. Constrains width for optimal readability.",
467
+ "whenToUse": "Use on blog post detail pages to render the full article body from HTML/rich-text content stored in a CMS.",
468
+ "isShell": false,
469
+ "props": [
470
+ {
471
+ "name": "html",
472
+ "type": "string",
473
+ "required": true,
474
+ "default": null,
475
+ "description": "HTML string of the article content to render"
476
+ },
477
+ {
478
+ "name": "maxW",
479
+ "type": "number",
480
+ "required": false,
481
+ "default": "720",
482
+ "description": "Maximum content width in pixels for readability"
483
+ },
484
+ {
485
+ "name": "bgColor",
486
+ "type": "string",
487
+ "required": false,
488
+ "default": "theme",
489
+ "description": "Background color override"
490
+ },
491
+ {
492
+ "name": "textColor",
493
+ "type": "string",
494
+ "required": false,
495
+ "default": "theme",
496
+ "description": "Text color override"
497
+ },
498
+ {
499
+ "name": "accentColor",
500
+ "type": "string",
501
+ "required": false,
502
+ "default": "theme",
503
+ "description": "Accent color override"
504
+ },
505
+ {
506
+ "name": "borderColor",
507
+ "type": "string",
508
+ "required": false,
509
+ "default": "theme",
510
+ "description": "Border color override"
511
+ },
512
+ {
513
+ "name": "fontFamily",
514
+ "type": "string",
515
+ "required": false,
516
+ "default": "theme",
517
+ "description": "Font family override"
518
+ }
519
+ ],
520
+ "themeTokens": [
521
+ "bgColor",
522
+ "textColor",
523
+ "accentColor",
524
+ "borderColor",
525
+ "fontFamily",
526
+ "radius",
527
+ "spacing",
528
+ "cardBg",
529
+ "cardRadius",
530
+ "cardBorder",
531
+ "tagBg",
532
+ "tagColor"
533
+ ],
534
+ "aiHints": {
535
+ "pageTypes": ["blog"],
536
+ "placement": "body",
537
+ "priority": 9,
538
+ "sequenceOrder": 5,
539
+ "pairsWellWith": [
540
+ "blog.AuthorByline",
541
+ "blog.ReadingBar",
542
+ "blog.CommentsSection",
543
+ "blog.RelatedPosts"
544
+ ],
545
+ "maxPerPage": 1,
546
+ "isContainer": false
547
+ }
548
+ },
549
+ {
550
+ "id": "blog.RelatedPosts",
551
+ "name": "RelatedPosts",
552
+ "description": "Grid of related blog post cards shown at the end of an article. Displays a configurable title and clickable post previews.",
553
+ "whenToUse": "Use at the bottom of blog post pages to encourage readers to explore more content. Typically placed after the article body and before comments.",
554
+ "isShell": false,
555
+ "props": [
556
+ {
557
+ "name": "posts",
558
+ "type": "BlogPost[]",
559
+ "required": true,
560
+ "default": null,
561
+ "description": "Array of related blog posts: {id, title, slug?, excerpt?, coverImage?, author?: {name, avatar?}, date?, readTime?, tags?, category?}"
562
+ },
563
+ {
564
+ "name": "title",
565
+ "type": "string",
566
+ "required": false,
567
+ "default": "\"Related Posts\"",
568
+ "description": "Section heading text"
569
+ },
570
+ {
571
+ "name": "onPostClick",
572
+ "type": "(post: BlogPost) => void",
573
+ "required": false,
574
+ "default": null,
575
+ "description": "Callback when a related post is clicked"
576
+ },
577
+ {
578
+ "name": "bgColor",
579
+ "type": "string",
580
+ "required": false,
581
+ "default": "theme",
582
+ "description": "Background color override"
583
+ },
584
+ {
585
+ "name": "textColor",
586
+ "type": "string",
587
+ "required": false,
588
+ "default": "theme",
589
+ "description": "Text color override"
590
+ },
591
+ {
592
+ "name": "accentColor",
593
+ "type": "string",
594
+ "required": false,
595
+ "default": "theme",
596
+ "description": "Accent color override"
597
+ },
598
+ {
599
+ "name": "borderColor",
600
+ "type": "string",
601
+ "required": false,
602
+ "default": "theme",
603
+ "description": "Border color override"
604
+ },
605
+ {
606
+ "name": "fontFamily",
607
+ "type": "string",
608
+ "required": false,
609
+ "default": "theme",
610
+ "description": "Font family override"
611
+ }
612
+ ],
613
+ "themeTokens": [
614
+ "bgColor",
615
+ "textColor",
616
+ "accentColor",
617
+ "borderColor",
618
+ "fontFamily",
619
+ "radius",
620
+ "spacing",
621
+ "cardBg",
622
+ "cardRadius",
623
+ "cardBorder",
624
+ "tagBg",
625
+ "tagColor"
626
+ ],
627
+ "aiHints": {
628
+ "pageTypes": ["blog"],
629
+ "placement": "body",
630
+ "priority": 7,
631
+ "sequenceOrder": 8,
632
+ "pairsWellWith": ["blog.ArticleRenderer", "blog.CommentsSection", "blog.BlogCard"],
633
+ "maxPerPage": 1,
634
+ "isContainer": false
635
+ }
636
+ },
637
+ {
638
+ "id": "blog.ArchiveList",
639
+ "name": "ArchiveList",
640
+ "description": "Grouped archive list organizing blog posts by time period or category. Each group has a label and a list of post links.",
641
+ "whenToUse": "Use on blog archive or index pages to display posts grouped by month, year, or category. Provides a structured overview of all published content.",
642
+ "isShell": false,
643
+ "props": [
644
+ {
645
+ "name": "groups",
646
+ "type": "ArchiveGroup[]",
647
+ "required": true,
648
+ "default": null,
649
+ "description": "Array of archive groups: {label, posts: BlogPost[]}"
650
+ },
651
+ {
652
+ "name": "onPostClick",
653
+ "type": "(post: BlogPost) => void",
654
+ "required": false,
655
+ "default": null,
656
+ "description": "Callback when a post in the archive is clicked"
657
+ },
658
+ {
659
+ "name": "bgColor",
660
+ "type": "string",
661
+ "required": false,
662
+ "default": "theme",
663
+ "description": "Background color override"
664
+ },
665
+ {
666
+ "name": "textColor",
667
+ "type": "string",
668
+ "required": false,
669
+ "default": "theme",
670
+ "description": "Text color override"
671
+ },
672
+ {
673
+ "name": "accentColor",
674
+ "type": "string",
675
+ "required": false,
676
+ "default": "theme",
677
+ "description": "Accent color override"
678
+ },
679
+ {
680
+ "name": "borderColor",
681
+ "type": "string",
682
+ "required": false,
683
+ "default": "theme",
684
+ "description": "Border color override"
685
+ },
686
+ {
687
+ "name": "fontFamily",
688
+ "type": "string",
689
+ "required": false,
690
+ "default": "theme",
691
+ "description": "Font family override"
692
+ }
693
+ ],
694
+ "themeTokens": [
695
+ "bgColor",
696
+ "textColor",
697
+ "accentColor",
698
+ "borderColor",
699
+ "fontFamily",
700
+ "radius",
701
+ "spacing",
702
+ "cardBg",
703
+ "cardRadius",
704
+ "cardBorder",
705
+ "tagBg",
706
+ "tagColor"
707
+ ],
708
+ "aiHints": {
709
+ "pageTypes": ["blog"],
710
+ "placement": "body",
711
+ "priority": 5,
712
+ "sequenceOrder": 7,
713
+ "pairsWellWith": ["blog.TagList", "blog.BlogCard", "navigation.Pagination"],
714
+ "maxPerPage": 1,
715
+ "isContainer": false
716
+ }
717
+ },
718
+ {
719
+ "id": "blog.CommentsSection",
720
+ "name": "CommentsSection",
721
+ "description": "Full blog comments section with threaded replies, avatars, timestamps, and a submission form for new comments.",
722
+ "whenToUse": "Use at the bottom of blog post pages to allow readers to leave comments and reply to existing ones. Supports nested reply threads.",
723
+ "isShell": false,
724
+ "props": [
725
+ {
726
+ "name": "comments",
727
+ "type": "BlogComment[]",
728
+ "required": true,
729
+ "default": null,
730
+ "description": "Array of comments: {id, author, avatar?, text, date?, replies?: BlogComment[]}"
731
+ },
732
+ {
733
+ "name": "onSubmit",
734
+ "type": "(text: string, parentId?: string) => void",
735
+ "required": false,
736
+ "default": null,
737
+ "description": "Callback when a comment or reply is submitted"
738
+ },
739
+ {
740
+ "name": "title",
741
+ "type": "string",
742
+ "required": false,
743
+ "default": "\"Comments\"",
744
+ "description": "Section heading text"
745
+ },
746
+ {
747
+ "name": "bgColor",
748
+ "type": "string",
749
+ "required": false,
750
+ "default": "theme",
751
+ "description": "Background color override"
752
+ },
753
+ {
754
+ "name": "textColor",
755
+ "type": "string",
756
+ "required": false,
757
+ "default": "theme",
758
+ "description": "Text color override"
759
+ },
760
+ {
761
+ "name": "accentColor",
762
+ "type": "string",
763
+ "required": false,
764
+ "default": "theme",
765
+ "description": "Accent color override"
766
+ },
767
+ {
768
+ "name": "borderColor",
769
+ "type": "string",
770
+ "required": false,
771
+ "default": "theme",
772
+ "description": "Border color override"
773
+ },
774
+ {
775
+ "name": "fontFamily",
776
+ "type": "string",
777
+ "required": false,
778
+ "default": "theme",
779
+ "description": "Font family override"
780
+ }
781
+ ],
782
+ "themeTokens": [
783
+ "bgColor",
784
+ "textColor",
785
+ "accentColor",
786
+ "borderColor",
787
+ "fontFamily",
788
+ "radius",
789
+ "spacing",
790
+ "cardBg",
791
+ "cardRadius",
792
+ "cardBorder",
793
+ "tagBg",
794
+ "tagColor"
795
+ ],
796
+ "aiHints": {
797
+ "pageTypes": ["blog"],
798
+ "placement": "body",
799
+ "priority": 7,
800
+ "sequenceOrder": 9,
801
+ "pairsWellWith": ["blog.ArticleRenderer", "blog.RelatedPosts", "blog.AuthorByline"],
802
+ "maxPerPage": 1,
803
+ "isContainer": false
804
+ }
805
+ }
806
+ ]
807
+ }