@pixelated-tech/components 3.11.8 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/dist/components/admin/site-health/site-health-accessibility.js +6 -0
  2. package/dist/components/admin/site-health/site-health-axe-core.js +6 -0
  3. package/dist/components/admin/site-health/site-health-cloudwatch.js +10 -0
  4. package/dist/components/admin/site-health/site-health-dependency-vulnerabilities.js +6 -0
  5. package/dist/components/admin/site-health/site-health-github.js +10 -0
  6. package/dist/components/admin/site-health/site-health-google-analytics.js +10 -0
  7. package/dist/components/admin/site-health/site-health-google-search-console.js +10 -0
  8. package/dist/components/admin/site-health/site-health-mock-context.js +8 -0
  9. package/dist/components/admin/site-health/site-health-on-site-seo.js +6 -0
  10. package/dist/components/admin/site-health/site-health-overview.js +6 -0
  11. package/dist/components/admin/site-health/site-health-performance.js +6 -0
  12. package/dist/components/admin/site-health/site-health-security.js +6 -0
  13. package/dist/components/admin/site-health/site-health-seo.js +6 -0
  14. package/dist/components/admin/site-health/site-health-template.js +28 -0
  15. package/dist/components/admin/site-health/site-health-uptime.js +6 -0
  16. package/dist/components/config/config.server.js +8 -0
  17. package/dist/components/general/404.js +6 -0
  18. package/dist/components/general/accordion.js +11 -0
  19. package/dist/components/general/buzzwordbingo.js +18 -0
  20. package/dist/components/general/callout.js +65 -2
  21. package/dist/components/general/carousel.drag.js +12 -0
  22. package/dist/components/general/carousel.js +50 -0
  23. package/dist/components/general/faq-accordion.js +15 -0
  24. package/dist/components/general/global-error.js +12 -0
  25. package/dist/components/general/hero.js +13 -0
  26. package/dist/components/general/loading.js +10 -1
  27. package/dist/components/general/markdown.js +6 -0
  28. package/dist/components/general/menu-accordion.js +30 -1
  29. package/dist/components/general/menu-expando.js +24 -1
  30. package/dist/components/general/menu-simple.js +21 -0
  31. package/dist/components/general/metadata.components.js +10 -0
  32. package/dist/components/general/microinteractions.js +22 -0
  33. package/dist/components/general/modal.js +12 -0
  34. package/dist/components/general/nerdjoke.js +11 -1
  35. package/dist/components/general/proxy-handler.js +7 -7
  36. package/dist/components/general/recipe.js +46 -1
  37. package/dist/components/general/resume.js +82 -0
  38. package/dist/components/general/schema-blogposting.js +6 -0
  39. package/dist/components/general/schema-localbusiness.js +36 -0
  40. package/dist/components/general/schema-recipe.js +20 -0
  41. package/dist/components/general/semantic.js +178 -0
  42. package/dist/components/general/sidepanel.js +26 -0
  43. package/dist/components/general/sitemap.js +50 -0
  44. package/dist/components/general/skeleton-loading.css +5 -5
  45. package/dist/components/general/skeleton-loading.js +11 -2
  46. package/dist/components/general/skeleton.js +15 -0
  47. package/dist/components/general/smartimage.js +48 -2
  48. package/dist/components/general/splitscroll.js +21 -10
  49. package/dist/components/general/styleguide.js +6 -0
  50. package/dist/components/general/tab.js +12 -0
  51. package/dist/components/general/table.js +12 -0
  52. package/dist/components/general/tiles.js +32 -1
  53. package/dist/components/general/timeline.js +22 -0
  54. package/dist/components/integrations/calendly.js +10 -0
  55. package/dist/components/integrations/cloudinary.js +16 -0
  56. package/dist/components/integrations/contentful.delivery.js +84 -0
  57. package/dist/components/integrations/contentful.items.components.js +46 -0
  58. package/dist/components/integrations/flickr.js +34 -0
  59. package/dist/components/integrations/google.reviews.components.js +14 -0
  60. package/dist/components/integrations/googleanalytics.js +14 -0
  61. package/dist/components/integrations/googlemap.js +20 -0
  62. package/dist/components/integrations/googlesearch.js +6 -0
  63. package/dist/components/integrations/gravatar.components.js +59 -0
  64. package/dist/components/integrations/hubspot.components.js +30 -0
  65. package/dist/components/integrations/instagram.components.js +18 -0
  66. package/dist/components/integrations/lipsum.js +45 -0
  67. package/dist/components/integrations/loremipsum.js +13 -1
  68. package/dist/components/integrations/socialcard.js +20 -1
  69. package/dist/components/integrations/wordpress.components.js +40 -0
  70. package/dist/components/integrations/wordpress.functions.js +24 -0
  71. package/dist/components/integrations/yelp.js +8 -0
  72. package/dist/components/shoppingcart/ebay.components.js +70 -0
  73. package/dist/components/shoppingcart/ebay.functions.js +52 -0
  74. package/dist/components/shoppingcart/shoppingcart.components.js +89 -0
  75. package/dist/components/sitebuilder/config/CompoundFontSelector.js +32 -0
  76. package/dist/components/sitebuilder/config/ConfigBuilder.js +8 -0
  77. package/dist/components/sitebuilder/config/FontSelector.js +40 -0
  78. package/dist/components/sitebuilder/form/formbuilder.js +10 -1
  79. package/dist/components/sitebuilder/form/formcomponents.js +325 -6
  80. package/dist/components/sitebuilder/form/formengine.js +35 -1
  81. package/dist/components/sitebuilder/form/formextractor.js +33 -1
  82. package/dist/components/sitebuilder/form/formutils.js +0 -4
  83. package/dist/components/sitebuilder/form/formvalidator.js +6 -0
  84. package/dist/components/sitebuilder/page/components/ComponentPropertiesForm.js +8 -0
  85. package/dist/components/sitebuilder/page/components/ComponentSelector.js +10 -0
  86. package/dist/components/sitebuilder/page/components/ComponentTree.js +20 -0
  87. package/dist/components/sitebuilder/page/components/PageBuilderUI.js +6 -0
  88. package/dist/components/sitebuilder/page/components/PageEngine.js +20 -0
  89. package/dist/components/sitebuilder/page/components/SaveLoadSection.js +10 -0
  90. package/dist/config/pixelated.config.json.enc +1 -1
  91. package/dist/index.js +1 -0
  92. package/dist/index.server.js +1 -0
  93. package/dist/scripts/pixelated-eslint-plugin.js +56 -0
  94. package/dist/scripts/release.sh +12 -21
  95. package/dist/types/components/admin/site-health/site-health-accessibility.d.ts +1 -0
  96. package/dist/types/components/admin/site-health/site-health-accessibility.d.ts.map +1 -1
  97. package/dist/types/components/admin/site-health/site-health-axe-core.d.ts +1 -0
  98. package/dist/types/components/admin/site-health/site-health-axe-core.d.ts.map +1 -1
  99. package/dist/types/components/admin/site-health/site-health-cloudwatch.d.ts +3 -0
  100. package/dist/types/components/admin/site-health/site-health-cloudwatch.d.ts.map +1 -1
  101. package/dist/types/components/admin/site-health/site-health-dependency-vulnerabilities.d.ts +1 -0
  102. package/dist/types/components/admin/site-health/site-health-dependency-vulnerabilities.d.ts.map +1 -1
  103. package/dist/types/components/admin/site-health/site-health-github.d.ts +3 -0
  104. package/dist/types/components/admin/site-health/site-health-github.d.ts.map +1 -1
  105. package/dist/types/components/admin/site-health/site-health-google-analytics.d.ts +3 -0
  106. package/dist/types/components/admin/site-health/site-health-google-analytics.d.ts.map +1 -1
  107. package/dist/types/components/admin/site-health/site-health-google-search-console.d.ts +3 -0
  108. package/dist/types/components/admin/site-health/site-health-google-search-console.d.ts.map +1 -1
  109. package/dist/types/components/admin/site-health/site-health-mock-context.d.ts +8 -0
  110. package/dist/types/components/admin/site-health/site-health-mock-context.d.ts.map +1 -1
  111. package/dist/types/components/admin/site-health/site-health-on-site-seo.d.ts +1 -0
  112. package/dist/types/components/admin/site-health/site-health-on-site-seo.d.ts.map +1 -1
  113. package/dist/types/components/admin/site-health/site-health-overview.d.ts +1 -0
  114. package/dist/types/components/admin/site-health/site-health-overview.d.ts.map +1 -1
  115. package/dist/types/components/admin/site-health/site-health-performance.d.ts +1 -0
  116. package/dist/types/components/admin/site-health/site-health-performance.d.ts.map +1 -1
  117. package/dist/types/components/admin/site-health/site-health-security.d.ts +1 -0
  118. package/dist/types/components/admin/site-health/site-health-security.d.ts.map +1 -1
  119. package/dist/types/components/admin/site-health/site-health-seo.d.ts +1 -0
  120. package/dist/types/components/admin/site-health/site-health-seo.d.ts.map +1 -1
  121. package/dist/types/components/admin/site-health/site-health-template.d.ts +12 -0
  122. package/dist/types/components/admin/site-health/site-health-template.d.ts.map +1 -1
  123. package/dist/types/components/admin/site-health/site-health-uptime.d.ts +1 -0
  124. package/dist/types/components/admin/site-health/site-health-uptime.d.ts.map +1 -1
  125. package/dist/types/components/config/config.server.d.ts +2 -0
  126. package/dist/types/components/config/config.server.d.ts.map +1 -1
  127. package/dist/types/components/general/404.d.ts +1 -0
  128. package/dist/types/components/general/404.d.ts.map +1 -1
  129. package/dist/types/components/general/accordion.d.ts +2 -0
  130. package/dist/types/components/general/accordion.d.ts.map +1 -1
  131. package/dist/types/components/general/buzzwordbingo.d.ts +3 -0
  132. package/dist/types/components/general/buzzwordbingo.d.ts.map +1 -1
  133. package/dist/types/components/general/callout.d.ts +24 -0
  134. package/dist/types/components/general/callout.d.ts.map +1 -1
  135. package/dist/types/components/general/carousel.d.ts +13 -0
  136. package/dist/types/components/general/carousel.d.ts.map +1 -1
  137. package/dist/types/components/general/carousel.drag.d.ts +4 -0
  138. package/dist/types/components/general/carousel.drag.d.ts.map +1 -1
  139. package/dist/types/components/general/faq-accordion.d.ts +5 -0
  140. package/dist/types/components/general/faq-accordion.d.ts.map +1 -1
  141. package/dist/types/components/general/global-error.d.ts +4 -0
  142. package/dist/types/components/general/global-error.d.ts.map +1 -1
  143. package/dist/types/components/general/hero.d.ts +4 -0
  144. package/dist/types/components/general/hero.d.ts.map +1 -1
  145. package/dist/types/components/general/loading.d.ts +1 -0
  146. package/dist/types/components/general/loading.d.ts.map +1 -1
  147. package/dist/types/components/general/markdown.d.ts +1 -0
  148. package/dist/types/components/general/markdown.d.ts.map +1 -1
  149. package/dist/types/components/general/menu-accordion.d.ts +7 -0
  150. package/dist/types/components/general/menu-accordion.d.ts.map +1 -1
  151. package/dist/types/components/general/menu-expando.d.ts +6 -0
  152. package/dist/types/components/general/menu-expando.d.ts.map +1 -1
  153. package/dist/types/components/general/menu-simple.d.ts +6 -0
  154. package/dist/types/components/general/menu-simple.d.ts.map +1 -1
  155. package/dist/types/components/general/metadata.components.d.ts +3 -0
  156. package/dist/types/components/general/metadata.components.d.ts.map +1 -1
  157. package/dist/types/components/general/microinteractions.d.ts +9 -0
  158. package/dist/types/components/general/microinteractions.d.ts.map +1 -1
  159. package/dist/types/components/general/modal.d.ts +4 -0
  160. package/dist/types/components/general/modal.d.ts.map +1 -1
  161. package/dist/types/components/general/nerdjoke.d.ts +2 -0
  162. package/dist/types/components/general/nerdjoke.d.ts.map +1 -1
  163. package/dist/types/components/general/proxy-handler.d.ts +7 -7
  164. package/dist/types/components/general/proxy-handler.d.ts.map +1 -1
  165. package/dist/types/components/general/recipe.d.ts +13 -0
  166. package/dist/types/components/general/recipe.d.ts.map +1 -1
  167. package/dist/types/components/general/resume.d.ts +21 -0
  168. package/dist/types/components/general/resume.d.ts.map +1 -1
  169. package/dist/types/components/general/schema-blogposting.d.ts +1 -0
  170. package/dist/types/components/general/schema-blogposting.d.ts.map +1 -1
  171. package/dist/types/components/general/schema-localbusiness.d.ts +16 -0
  172. package/dist/types/components/general/schema-localbusiness.d.ts.map +1 -1
  173. package/dist/types/components/general/schema-recipe.d.ts +1 -0
  174. package/dist/types/components/general/schema-recipe.d.ts.map +1 -1
  175. package/dist/types/components/general/semantic.d.ts +67 -0
  176. package/dist/types/components/general/semantic.d.ts.map +1 -1
  177. package/dist/types/components/general/sidepanel.d.ts +11 -0
  178. package/dist/types/components/general/sidepanel.d.ts.map +1 -1
  179. package/dist/types/components/general/sitemap.d.ts +19 -0
  180. package/dist/types/components/general/sitemap.d.ts.map +1 -1
  181. package/dist/types/components/general/skeleton-loading.d.ts +3 -6
  182. package/dist/types/components/general/skeleton-loading.d.ts.map +1 -1
  183. package/dist/types/components/general/skeleton.d.ts +5 -0
  184. package/dist/types/components/general/skeleton.d.ts.map +1 -1
  185. package/dist/types/components/general/smartimage.d.ts +22 -0
  186. package/dist/types/components/general/smartimage.d.ts.map +1 -1
  187. package/dist/types/components/general/splitscroll.d.ts +18 -40
  188. package/dist/types/components/general/splitscroll.d.ts.map +1 -1
  189. package/dist/types/components/general/styleguide.d.ts +1 -0
  190. package/dist/types/components/general/styleguide.d.ts.map +1 -1
  191. package/dist/types/components/general/tab.d.ts +4 -0
  192. package/dist/types/components/general/tab.d.ts.map +1 -1
  193. package/dist/types/components/general/table.d.ts +4 -0
  194. package/dist/types/components/general/table.d.ts.map +1 -1
  195. package/dist/types/components/general/tiles.d.ts +12 -1
  196. package/dist/types/components/general/tiles.d.ts.map +1 -1
  197. package/dist/types/components/general/timeline.d.ts +5 -0
  198. package/dist/types/components/general/timeline.d.ts.map +1 -1
  199. package/dist/types/components/integrations/calendly.d.ts +3 -0
  200. package/dist/types/components/integrations/calendly.d.ts.map +1 -1
  201. package/dist/types/components/integrations/cloudinary.d.ts +4 -0
  202. package/dist/types/components/integrations/cloudinary.d.ts.map +1 -1
  203. package/dist/types/components/integrations/contentful.delivery.d.ts +22 -0
  204. package/dist/types/components/integrations/contentful.delivery.d.ts.map +1 -1
  205. package/dist/types/components/integrations/contentful.items.components.d.ts +10 -0
  206. package/dist/types/components/integrations/contentful.items.components.d.ts.map +1 -1
  207. package/dist/types/components/integrations/flickr.d.ts +11 -0
  208. package/dist/types/components/integrations/flickr.d.ts.map +1 -1
  209. package/dist/types/components/integrations/google.reviews.components.d.ts +5 -0
  210. package/dist/types/components/integrations/google.reviews.components.d.ts.map +1 -1
  211. package/dist/types/components/integrations/googleanalytics.d.ts +3 -0
  212. package/dist/types/components/integrations/googleanalytics.d.ts.map +1 -1
  213. package/dist/types/components/integrations/googlemap.d.ts +8 -0
  214. package/dist/types/components/integrations/googlemap.d.ts.map +1 -1
  215. package/dist/types/components/integrations/googlesearch.d.ts +1 -0
  216. package/dist/types/components/integrations/googlesearch.d.ts.map +1 -1
  217. package/dist/types/components/integrations/gravatar.components.d.ts +35 -0
  218. package/dist/types/components/integrations/gravatar.components.d.ts.map +1 -1
  219. package/dist/types/components/integrations/hubspot.components.d.ts +9 -0
  220. package/dist/types/components/integrations/hubspot.components.d.ts.map +1 -1
  221. package/dist/types/components/integrations/instagram.components.d.ts +7 -0
  222. package/dist/types/components/integrations/instagram.components.d.ts.map +1 -1
  223. package/dist/types/components/integrations/lipsum.d.ts +14 -0
  224. package/dist/types/components/integrations/lipsum.d.ts.map +1 -0
  225. package/dist/types/components/integrations/loremipsum.d.ts +4 -0
  226. package/dist/types/components/integrations/loremipsum.d.ts.map +1 -1
  227. package/dist/types/components/integrations/socialcard.d.ts +4 -0
  228. package/dist/types/components/integrations/socialcard.d.ts.map +1 -1
  229. package/dist/types/components/integrations/wordpress.components.d.ts +14 -0
  230. package/dist/types/components/integrations/wordpress.components.d.ts.map +1 -1
  231. package/dist/types/components/integrations/wordpress.functions.d.ts +6 -0
  232. package/dist/types/components/integrations/wordpress.functions.d.ts.map +1 -1
  233. package/dist/types/components/integrations/yelp.d.ts +2 -0
  234. package/dist/types/components/integrations/yelp.d.ts.map +1 -1
  235. package/dist/types/components/shoppingcart/ebay.components.d.ts +15 -0
  236. package/dist/types/components/shoppingcart/ebay.components.d.ts.map +1 -1
  237. package/dist/types/components/shoppingcart/ebay.functions.d.ts +12 -0
  238. package/dist/types/components/shoppingcart/ebay.functions.d.ts.map +1 -1
  239. package/dist/types/components/shoppingcart/shoppingcart.components.d.ts +30 -0
  240. package/dist/types/components/shoppingcart/shoppingcart.components.d.ts.map +1 -1
  241. package/dist/types/components/sitebuilder/config/CompoundFontSelector.d.ts +12 -0
  242. package/dist/types/components/sitebuilder/config/CompoundFontSelector.d.ts.map +1 -1
  243. package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts +2 -0
  244. package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts.map +1 -1
  245. package/dist/types/components/sitebuilder/config/FontSelector.d.ts +16 -0
  246. package/dist/types/components/sitebuilder/config/FontSelector.d.ts.map +1 -1
  247. package/dist/types/components/sitebuilder/form/formbuilder.d.ts +5 -1
  248. package/dist/types/components/sitebuilder/form/formbuilder.d.ts.map +1 -1
  249. package/dist/types/components/sitebuilder/form/formcomponents.d.ts +129 -0
  250. package/dist/types/components/sitebuilder/form/formcomponents.d.ts.map +1 -1
  251. package/dist/types/components/sitebuilder/form/formengine.d.ts +5 -0
  252. package/dist/types/components/sitebuilder/form/formengine.d.ts.map +1 -1
  253. package/dist/types/components/sitebuilder/form/formextractor.d.ts +6 -0
  254. package/dist/types/components/sitebuilder/form/formextractor.d.ts.map +1 -1
  255. package/dist/types/components/sitebuilder/form/formutils.d.ts +0 -2
  256. package/dist/types/components/sitebuilder/form/formutils.d.ts.map +1 -1
  257. package/dist/types/components/sitebuilder/form/formvalidator.d.ts +1 -0
  258. package/dist/types/components/sitebuilder/form/formvalidator.d.ts.map +1 -1
  259. package/dist/types/components/sitebuilder/page/components/ComponentPropertiesForm.d.ts +2 -0
  260. package/dist/types/components/sitebuilder/page/components/ComponentPropertiesForm.d.ts.map +1 -1
  261. package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts +3 -0
  262. package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts.map +1 -1
  263. package/dist/types/components/sitebuilder/page/components/ComponentTree.d.ts +8 -0
  264. package/dist/types/components/sitebuilder/page/components/ComponentTree.d.ts.map +1 -1
  265. package/dist/types/components/sitebuilder/page/components/PageBuilderUI.d.ts +1 -0
  266. package/dist/types/components/sitebuilder/page/components/PageBuilderUI.d.ts.map +1 -1
  267. package/dist/types/components/sitebuilder/page/components/PageEngine.d.ts +8 -0
  268. package/dist/types/components/sitebuilder/page/components/PageEngine.d.ts.map +1 -1
  269. package/dist/types/components/sitebuilder/page/components/SaveLoadSection.d.ts +3 -0
  270. package/dist/types/components/sitebuilder/page/components/SaveLoadSection.d.ts.map +1 -1
  271. package/dist/types/index.d.ts +1 -0
  272. package/dist/types/index.server.d.ts +1 -0
  273. package/dist/types/scripts/pixelated-eslint-plugin.d.ts +18 -0
  274. package/dist/types/stories/general/skeleton-loading.stories.d.ts +1 -1
  275. package/dist/types/stories/general/skeleton-loading.stories.d.ts.map +1 -1
  276. package/dist/types/stories/integrations/lipsum.stories.d.ts +38 -0
  277. package/dist/types/stories/integrations/lipsum.stories.d.ts.map +1 -0
  278. package/dist/types/stories/shoppingcart/shoppingcart.stories.d.ts +3 -1
  279. package/dist/types/stories/shoppingcart/shoppingcart.stories.d.ts.map +1 -1
  280. package/dist/types/tests/args.test.d.ts +2 -0
  281. package/dist/types/tests/args.test.d.ts.map +1 -0
  282. package/dist/types/tests/lipsum.test.d.ts +2 -0
  283. package/dist/types/tests/lipsum.test.d.ts.map +1 -0
  284. package/dist/types/tests/storybook-docgen.test.d.ts +2 -0
  285. package/dist/types/tests/storybook-docgen.test.d.ts.map +1 -0
  286. package/package.json +12 -9
@@ -210,13 +210,29 @@ export async function createWordPressURLs(props) {
210
210
  }
211
211
  return sitemap;
212
212
  }
213
+ /**
214
+ * createContentfulURLs — Create sitemap entries for Contentful content by fetching a content type field.
215
+ *
216
+ * @param {shape} [props.apiProps] - Contentful API props: { base_url, space_id, environment, delivery_access_token }.
217
+ * @param {string} [props.base_url] - Contentful base API URL.
218
+ * @param {string} [props.space_id] - Contentful space id.
219
+ * @param {string} [props.environment] - Contentful environment (e.g., 'master').
220
+ * @param {string} [props.delivery_access_token] - Delivery API token (read-only) for Contentful.
221
+ * @param {string} [props.origin] - Origin to prefix generated URLs (e.g., 'https://example.com').
222
+ */
213
223
  createContentfulURLs.propTypes = {
224
+ /** Contentful API properties */
214
225
  apiProps: PropTypes.shape({
226
+ /** Contentful base URL */
215
227
  base_url: PropTypes.string.isRequired,
228
+ /** Contentful space id */
216
229
  space_id: PropTypes.string.isRequired,
230
+ /** Contentful environment */
217
231
  environment: PropTypes.string.isRequired,
232
+ /** Delivery API token */
218
233
  delivery_access_token: PropTypes.string.isRequired,
219
234
  }).isRequired,
235
+ /** Origin used to build absolute URLs */
220
236
  origin: PropTypes.string.isRequired,
221
237
  };
222
238
  export async function createContentfulURLs(props) {
@@ -241,13 +257,29 @@ export async function createContentfulURLs(props) {
241
257
  }
242
258
  return sitemap;
243
259
  }
260
+ /**
261
+ * createContentfulPageBuilderURLs — Generate page URLs for Contentful Page Builder pages.
262
+ *
263
+ * @param {shape} [props.apiProps] - Contentful API props (base_url, space_id, environment, delivery_access_token).
264
+ * @param {string} [props.base_url] - Contentful base API URL.
265
+ * @param {string} [props.space_id] - Contentful space id.
266
+ * @param {string} [props.environment] - Contentful environment.
267
+ * @param {string} [props.delivery_access_token] - Delivery API token for read-only access.
268
+ * @param {string} [props.origin] - Origin used to build absolute page URLs.
269
+ */
244
270
  createContentfulPageBuilderURLs.propTypes = {
271
+ /** Contentful API properties */
245
272
  apiProps: PropTypes.shape({
273
+ /** Contentful base URL */
246
274
  base_url: PropTypes.string.isRequired,
275
+ /** Contentful space id */
247
276
  space_id: PropTypes.string.isRequired,
277
+ /** Contentful environment */
248
278
  environment: PropTypes.string.isRequired,
279
+ /** Delivery API token */
249
280
  delivery_access_token: PropTypes.string.isRequired,
250
281
  }).isRequired,
282
+ /** Origin used to build absolute URLs */
251
283
  origin: PropTypes.string.isRequired,
252
284
  };
253
285
  export async function createContentfulPageBuilderURLs(props) {
@@ -267,14 +299,32 @@ export async function createContentfulPageBuilderURLs(props) {
267
299
  }
268
300
  return sitemap;
269
301
  }
302
+ /**
303
+ * createContentfulImageURLs — Fetch Contentful assets and generate absolute image URLs for the sitemap.
304
+ *
305
+ * @param {shape} [props.apiProps] - Contentful API props (proxyURL optional, base_url, space_id, environment, access_token).
306
+ * @param {string} [props.proxyURL] - Optional proxy base URL to route image requests through.
307
+ * @param {string} [props.base_url] - Contentful base API URL.
308
+ * @param {string} [props.space_id] - Contentful space id.
309
+ * @param {string} [props.environment] - Contentful environment.
310
+ * @param {string} [props.access_token] - Access token to read assets from Contentful.
311
+ * @param {string} [props.origin] - Origin used to convert relative image paths to absolute URLs.
312
+ */
270
313
  createContentfulImageURLs.propTypes = {
314
+ /** Contentful API properties */
271
315
  apiProps: PropTypes.shape({
316
+ /** Optional proxy URL */
272
317
  proxyURL: PropTypes.string,
318
+ /** Contentful base URL */
273
319
  base_url: PropTypes.string.isRequired,
320
+ /** Contentful space id */
274
321
  space_id: PropTypes.string.isRequired,
322
+ /** Contentful environment */
275
323
  environment: PropTypes.string.isRequired,
324
+ /** Access token to read assets */
276
325
  access_token: PropTypes.string.isRequired,
277
326
  }).isRequired,
327
+ /** Origin used to convert relative URLs to absolute */
278
328
  origin: PropTypes.string.isRequired,
279
329
  };
280
330
  export async function createContentfulImageURLs(props) {
@@ -30,7 +30,7 @@
30
30
  border: 0;
31
31
  }
32
32
 
33
- .hero {
33
+ .hero-loading {
34
34
  display: block;
35
35
  gap: 1.5rem;
36
36
  padding: 0;
@@ -51,25 +51,25 @@
51
51
  gap: .75rem
52
52
  }
53
53
 
54
- .cards-grid {
54
+ .cards-loading {
55
55
  display: grid;
56
56
  grid-template-columns: 1fr;
57
57
  gap: 1.5rem
58
58
  }
59
59
 
60
60
  @media(min-width:640px) {
61
- .cards-grid {
61
+ .cards-loading {
62
62
  grid-template-columns: repeat(2, 1fr)
63
63
  }
64
64
  }
65
65
 
66
66
  @media(min-width:1024px) {
67
- .cards-grid {
67
+ .cards-loading {
68
68
  grid-template-columns: repeat(3, 1fr)
69
69
  }
70
70
  }
71
71
 
72
- .card-skeleton {
72
+ .card-article {
73
73
  padding: 1rem;
74
74
  border-radius: .5rem;
75
75
  border: 1px solid rgba(17, 24, 39, 0.06);
@@ -5,9 +5,19 @@ import PropTypes from 'prop-types';
5
5
  import { ToggleLoading } from './loading';
6
6
  import { Skeleton } from './skeleton';
7
7
  import './skeleton-loading.css';
8
+ /**
9
+ * SkeletonLoading — Accessible skeleton page used while content or data is loading.
10
+ *
11
+ * @param {number} [props.heroHeight] - Height in pixels for the hero skeleton block.
12
+ * @param {number} [props.cardCount] - Number of placeholder cards to render in the cards section.
13
+ * @param {string} [props.className] - Optional additional CSS classes applied to the root element.
14
+ */
8
15
  SkeletonLoading.propTypes = {
16
+ /** Hero skeleton height (px) */
9
17
  heroHeight: PropTypes.number,
18
+ /** Number of placeholder cards to render */
10
19
  cardCount: PropTypes.number,
20
+ /** Extra CSS classes for the root element */
11
21
  className: PropTypes.string,
12
22
  };
13
23
  export function SkeletonLoading({ heroHeight = 220, cardCount = 6, className = '' }) {
@@ -21,6 +31,5 @@ export function SkeletonLoading({ heroHeight = 220, cardCount = 6, className = '
21
31
  }
22
32
  }, []);
23
33
  const count = Math.max(0, Number(cardCount || 0));
24
- return (_jsx("main", { className: `loading-page ${className}`, children: _jsxs("div", { className: "loading-container", children: [_jsx("div", { className: "visually-hidden", role: "status", "aria-live": "polite", children: "Loading\u2026" }), _jsx("section", { id: "hero-loading", "aria-hidden": true, className: "hero", children: _jsx(Skeleton, { variant: "rect", height: heroHeight }) }), _jsx("section", { id: "cards-loading", className: "cards-grid", "aria-hidden": true, children: Array.from({ length: count }).map((_, i) => (_jsx("article", { className: "card-skeleton", children: _jsxs("div", { className: "card-row", children: [_jsx(Skeleton, { variant: "avatar" }), _jsxs("div", { className: "card-body", children: [_jsx(Skeleton, { lines: 2 }), _jsx("div", { className: "card-body-extra", children: _jsx(Skeleton, { lines: 3, width: "90%" }) })] })] }) }, i))) })] }) }));
34
+ return (_jsx("main", { className: `loading-page ${className}`, children: _jsxs("div", { className: "loading-container", children: [_jsx("div", { className: "visually-hidden", role: "status", "aria-live": "polite", children: "Loading\u2026" }), _jsx("section", { id: "hero-loading", "aria-hidden": true, className: "hero-loading", children: _jsx(Skeleton, { variant: "rect", height: heroHeight }) }), _jsx("section", { id: "cards-loading", className: "cards-loading", "aria-hidden": true, children: Array.from({ length: count }).map((_, i) => (_jsx("article", { className: "card-article", children: _jsxs("div", { className: "card-row", children: [_jsx(Skeleton, { variant: "avatar" }), _jsxs("div", { className: "card-body", children: [_jsx(Skeleton, { lines: 2 }), _jsx("div", { className: "card-body-extra", children: _jsx(Skeleton, { lines: 3, width: "90%" }) })] })] }) }, i))) })] }) }));
25
35
  }
26
- export default SkeletonLoading;
@@ -1,11 +1,26 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import PropTypes from 'prop-types';
3
3
  import './skeleton.css';
4
+ /**
5
+ * Skeleton — renders an accessible placeholder skeleton for text, rectangular blocks, or avatars.
6
+ *
7
+ * Props:
8
+ * @param {('text'|'rect'|'avatar')} [variant='text'] Visual variant to render.
9
+ * @param {number} [lines=1] Number of text lines when variant is 'text'.
10
+ * @param {string|number} [width] Width for text lines (percent) or explicit width for rect/avatar.
11
+ * @param {string|number} [height] Height in pixels (rect/avatar) or CSS string.
12
+ * @param {boolean} [animated=true] Whether the skeleton should animate (respects prefers-reduced-motion).
13
+ */
4
14
  Skeleton.propTypes = {
15
+ /** Visual variant to render: 'text' (lines), 'rect' (rectangle), or 'avatar' (circle). */
5
16
  variant: PropTypes.oneOf(['text', 'rect', 'avatar']),
17
+ /** Number of text lines to render when variant is 'text'. */
6
18
  lines: PropTypes.number,
19
+ /** Width for text lines (percentage number) or explicit CSS/string width for rect/avatar. */
7
20
  width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
21
+ /** Height in pixels or CSS string for rect/avatar; ignored for text lines. */
8
22
  height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
23
+ /** Whether the skeleton should animate (respects prefers-reduced-motion). */
9
24
  animated: PropTypes.bool,
10
25
  };
11
26
  export function Skeleton({ variant = 'text', lines = 1, width, height, animated = true, }) {
@@ -37,31 +37,77 @@ function generateSrcSet(src, productEnv, widths, opts) {
37
37
  cloudinaryDomain: opts.cloudinaryDomain
38
38
  })} ${w}w`).join(', ');
39
39
  }
40
+ /**
41
+ * SmartImage — unified image component that picks the best delivery variant (Cloudinary, Next.js Image, or plain <img>), generates srcset, and manages loading behavior.
42
+ *
43
+ * @param {string} [props.cloudinaryEnv] - Cloudinary environment key for constructing CDN URLs (product env).
44
+ * @param {string} [props.cloudinaryDomain] - Optional Cloudinary domain override.
45
+ * @param {string} [props.cloudinaryTransforms] - Optional transform presets for Cloudinary.
46
+ * @param {string} [props.src] - Source URL or path for the image (required).
47
+ * @param {string} [props.alt] - Alt text for the image (required for accessibility).
48
+ * @param {number|string} [props.width] - Preferred width in pixels or CSS value; used to build srcset when possible.
49
+ * @param {number|string} [props.height] - Preferred height in pixels or CSS value.
50
+ * @param {boolean} [props.aboveFold] - Hint that the image is above the fold and should be prioritized (eager loading / high fetch priority).
51
+ * @param {oneOf} [props.loading] - Loading strategy: 'lazy' or 'eager'.
52
+ * @param {boolean} [props.preload] - If true, suggests the image should be preloaded (best-effort).
53
+ * @param {oneOf} [props.decoding] - Decoding hint: 'async', 'auto' or 'sync'.
54
+ * @param {oneOf} [props.fetchPriority] - Fetch priority: 'high', 'low', or 'auto'.
55
+ * @param {string} [props.sizes] - Sizes attribute override for responsive images.
56
+ * @param {string} [props.srcSet] - Srcset override (if you want to supply your own).
57
+ * @param {string} [props.className] - Additional CSS classes for the rendered element.
58
+ * @param {object} [props.style] - Inline style object for the image element.
59
+ * @param {string} [props.id] - DOM id to set on the image element.
60
+ * @param {string} [props.name] - Name used to derive a stable id when none is provided.
61
+ * @param {string} [props.title] - Optional title attribute for the image.
62
+ * @param {number} [props.quality] - Quality hint used by Cloudinary when generating URLs (0-100).
63
+ * @param {oneOf} [props.placeholder] - Placeholder behavior: 'blur' to use blur placeholder, 'empty' to use none.
64
+ * @param {oneOf} [props.variant] - Force variant: 'cloudinary' | 'nextjs' | 'img'.
65
+ */
40
66
  SmartImage.propTypes = {
67
+ /** Cloudinary environment key (product environment) for URL generation. */
41
68
  cloudinaryEnv: PropTypes.string,
69
+ /** Cloudinary domain override. */
42
70
  cloudinaryDomain: PropTypes.string,
71
+ /** Optional Cloudinary transform presets. */
43
72
  cloudinaryTransforms: PropTypes.string,
44
73
  // shared props
74
+ /** Image source URL or path. */
45
75
  src: PropTypes.string.isRequired,
76
+ /** Accessible alt text for the image. */
46
77
  alt: PropTypes.string.isRequired,
47
- // width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
48
- // height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
78
+ /** Preferred width in pixels (used to build srcset when available). */
49
79
  width: PropTypes.number,
80
+ /** Preferred height in pixels. */
50
81
  height: PropTypes.number,
82
+ /** Hint that the image is above the fold and should be prioritized for loading. */
51
83
  aboveFold: PropTypes.bool,
84
+ /** Loading hint: 'lazy' or 'eager'. */
52
85
  loading: PropTypes.oneOf(['lazy', 'eager']),
86
+ /** When true suggests the image should be preloaded. */
53
87
  preload: PropTypes.bool,
88
+ /** Decoding hint for the browser. */
54
89
  decoding: PropTypes.oneOf(['async', 'auto', 'sync']),
90
+ /** Fetch priority hint for modern browsers. */
55
91
  fetchPriority: PropTypes.oneOf(['high', 'low', 'auto']),
92
+ /** Sizes attribute override for responsive images. */
56
93
  sizes: PropTypes.string,
94
+ /** Srcset override to pass explicit srcset values. */
57
95
  srcSet: PropTypes.string,
96
+ /** Additional CSS class names for the image element. */
58
97
  className: PropTypes.string,
98
+ /** Inline style object for the image element. */
59
99
  style: PropTypes.object,
100
+ /** DOM id for the image. */
60
101
  id: PropTypes.string,
102
+ /** Name used to derive a stable id or identification. */
61
103
  name: PropTypes.string,
104
+ /** Optional title attribute for the image. */
62
105
  title: PropTypes.string,
106
+ /** Quality hint (0-100) used for Cloudinary URL generation. */
63
107
  quality: PropTypes.number,
108
+ /** Placeholder behavior for Next.js Image ('blur' for blurred placeholder). */
64
109
  placeholder: PropTypes.oneOf(['blur', 'empty']),
110
+ /** Variant to force: 'cloudinary' | 'nextjs' | 'img'. */
65
111
  variant: PropTypes.oneOf(['cloudinary', 'nextjs', 'img']),
66
112
  };
67
113
  export function SmartImage(props) {
@@ -15,16 +15,22 @@ import './splitscroll.css';
15
15
  * @example
16
16
  * ```tsx
17
17
  * <SplitScroll>
18
- * <SplitScroll.Section img="/image1.jpg" title="Section 1">
18
+ * <SplitScrollSection img="/image1.jpg" title="Section 1">
19
19
  * <YourContent />
20
- * </SplitScroll.Section>
21
- * <SplitScroll.Section img="/image2.jpg" title="Section 2">
20
+ * </SplitScrollSection>
21
+ * <SplitScrollSection img="/image2.jpg" title="Section 2">
22
22
  * <MoreContent />
23
- * </SplitScroll.Section>
23
+ * </SplitScrollSection>
24
24
  * </SplitScroll>
25
25
  * ```
26
26
  */
27
+ /**
28
+ * SplitScroll — a split-page layout where the left column shows sticky, layered images and the right column contains scrolling content sections.
29
+ *
30
+ * @param {node} [props.children] - One or more `SplitScrollSection` components that contain content for each section.
31
+ */
27
32
  SplitScroll.propTypes = {
33
+ /** Collection of `SplitScrollSection` children used to build the layout. */
28
34
  children: PropTypes.node.isRequired,
29
35
  };
30
36
  export function SplitScroll({ children }) {
@@ -59,12 +65,18 @@ export function SplitScroll({ children }) {
59
65
  return (_jsx("div", { className: "splitscroll-container", children: enhancedChildren }));
60
66
  }
61
67
  /**
62
- * SplitScroll.Section - Individual section within a SplitScroll
68
+ * SplitScrollSection Individual section within a SplitScroll.
63
69
  *
64
70
  * A facade for the Callout component with variant="split" preset.
65
71
  * Automatically configured for the splitscroll layout.
72
+ *
73
+ * @param {string} [props.img] - Image URL shown on the left column.
74
+ * @param {string} [props.imgAlt] - Alt text for the image.
75
+ * @param {('square'|'bevel'|'squircle'|'round')} [props.imgShape] - Image shape style.
76
+ * @param {string} [props.title] - Section title text shown on the right column.
77
+ * @param {node} [props.children] - Content for the section's right column.
66
78
  */
67
- const splitscrollSectionPropTypes = {
79
+ SplitScrollSection.propTypes = {
68
80
  img: PropTypes.string.isRequired,
69
81
  imgAlt: PropTypes.string,
70
82
  imgShape: PropTypes.oneOf(['square', 'bevel', 'squircle', 'round']),
@@ -79,11 +91,10 @@ const splitscrollSectionPropTypes = {
79
91
  sectionIndex: PropTypes.number,
80
92
  totalSections: PropTypes.number,
81
93
  };
82
- const SplitScrollSectionComponent = function SplitScrollSection({ img, imgAlt, imgShape = 'square', title, subtitle, url, buttonText, children, aboveFold, isActive, sectionIndex, totalSections, }) {
94
+ export function SplitScrollSection({ img, imgAlt, imgShape = 'square', title, subtitle, url, buttonText, children, aboveFold, isActive, sectionIndex, totalSections, }) {
83
95
  return (_jsx("div", { className: `splitscroll-section ${isActive ? 'active' : ''}`, "data-section-index": sectionIndex, style: {
84
96
  '--section-index': sectionIndex,
85
97
  '--total-sections': totalSections
86
98
  }, children: _jsx(Callout, { variant: "split", img: img, imgAlt: imgAlt, imgShape: imgShape, title: title, subtitle: subtitle, url: url, buttonText: buttonText, aboveFold: aboveFold ?? (sectionIndex === 0), children: children }) }));
87
- };
88
- SplitScrollSectionComponent.propTypes = splitscrollSectionPropTypes;
89
- SplitScroll.Section = SplitScrollSectionComponent;
99
+ }
100
+ ;
@@ -5,7 +5,13 @@ import { PageTitleHeader, PageSection } from "@pixelated-tech/components";
5
5
  import { flattenRoutes } from "@pixelated-tech/components";
6
6
  import routesData from '../../data/routes.json';
7
7
  const routes = routesData.routes;
8
+ /**
9
+ * StyleGuideUI — developer style guide and design tokens viewer (colors, fonts, IA routes).
10
+ *
11
+ * @param {array} [props.routes] - Route definitions used to display site information and navigation structure.
12
+ */
8
13
  StyleGuideUI.propTypes = {
14
+ /** Array of route objects used to build example navigation and IA references. */
9
15
  routes: PropTypes.array,
10
16
  };
11
17
  export function StyleGuideUI(props) {
@@ -9,10 +9,22 @@ const TabItemPropTypes = {
9
9
  content: PropTypes.node.isRequired,
10
10
  };
11
11
  // type TabItemType = InferProps<typeof TabItemPropTypes>;
12
+ /**
13
+ * Tab — simple tabbed UI: clickable headers with content panes.
14
+ *
15
+ * @param {arrayOf} [props.tabs] - Array of tab items: { id, label, content }.
16
+ * @param {oneOf} [props.orientation] - Tab orientation: 'top' | 'bottom' | 'left' | 'right'.
17
+ * @param {string} [props.defaultActiveTab] - Id of the tab that should be active initially.
18
+ * @param {function} [props.onTabChange] - Callback invoked when the active tab changes (tabId).
19
+ */
12
20
  Tab.propTypes = {
21
+ /** Array of tabs to render, each should include id, label, and content. */
13
22
  tabs: PropTypes.arrayOf(PropTypes.shape(TabItemPropTypes).isRequired).isRequired,
23
+ /** Layout orientation for the tab headers. */
14
24
  orientation: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),
25
+ /** Optional default active tab id. */
15
26
  defaultActiveTab: PropTypes.string,
27
+ /** Optional change handler called with the new tab id. */
16
28
  onTabChange: PropTypes.func,
17
29
  };
18
30
  export function Tab({ tabs, orientation = 'top', defaultActiveTab, onTabChange }) {
@@ -15,10 +15,22 @@ function isImageURL(url) {
15
15
  } };
16
16
  return isImage && isURL;
17
17
  }
18
+ /**
19
+ * Table — renders a simple data table with optional client-side column sorting.
20
+ *
21
+ * @param {array} [props.data] - Array of row objects (each object's keys become column headers).
22
+ * @param {string} [props.id] - DOM id for the table element (required for sortable headers to find the table).
23
+ * @param {boolean} [props.sortable] - Enable click-to-sort on column headers when true.
24
+ * @param {string} [props.altRowColor] - Optional alternate-row background color for zebra striping.
25
+ */
18
26
  Table.propTypes = {
27
+ /** Array of row objects; object keys become table columns. */
19
28
  data: PropTypes.array.isRequired,
29
+ /** DOM id used for sorting and header lookups. */
20
30
  id: PropTypes.string.isRequired,
31
+ /** Enable clickable column headers for client-side sorting. */
21
32
  sortable: PropTypes.bool,
33
+ /** CSS color value used for alternate rows when zebra striping is desired. */
22
34
  altRowColor: PropTypes.string,
23
35
  };
24
36
  export function Table(props) {
@@ -7,14 +7,26 @@ import { usePixelatedConfig } from '../config/config.client';
7
7
  import "../../css/pixelated.grid.scss";
8
8
  import "./tiles.css";
9
9
  export const TilesVariants = ['caption', 'overlay'];
10
+ /**
11
+ * Tiles — renders a responsive grid of image tiles with optional click handlers and visual variants.
12
+ *
13
+ * @param {array} [props.cards] - Array of card objects to render (image, link, imageAlt, bodyText).
14
+ * @param {number} [props.rowCount] - Number of rows to display; affects column sizing.
15
+ * @param {function} [props.imgClick] - Optional (event, imageUrl) click handler for tile images.
16
+ * @param {oneOf} [props.variant] - Visual variant: 'caption' (caption beneath image) or 'overlay' (overlay on hover).
17
+ */
10
18
  Tiles.propTypes = {
19
+ /** Array of card objects used to populate the tile grid (image, link, imageAlt, bodyText). */
11
20
  cards: PropTypes.array.isRequired,
21
+ /** Number of rows to display in the grid (controls layout). */
12
22
  rowCount: PropTypes.number,
23
+ /** Optional click handler for tile images; called with (event, imageUrl). */
13
24
  imgClick: PropTypes.func,
14
25
  /**
15
26
  * Optional visual variant. Allowed values are enumerated so consumers get
16
27
  * a discoverable, typed API.
17
28
  */
29
+ /** Visual variant for tile rendering (e.g. 'caption' or 'overlay'). */
18
30
  variant: PropTypes.oneOf(TilesVariants),
19
31
  };
20
32
  export function Tiles(props) {
@@ -27,15 +39,34 @@ export function Tiles(props) {
27
39
  }
28
40
  }
29
41
  /* ========== TILE ========== */
42
+ /**
43
+ * Tile — single grid tile that displays an image with optional link and caption/overlay.
44
+ *
45
+ * @param {number} [props.index] - Zero-based index for the tile (used for IDs).
46
+ * @param {number} [props.cardLength] - Total number of tiles in the current set.
47
+ * @param {string} [props.link] - Optional href for the whole tile.
48
+ * @param {string} [props.image] - Image URL to display (required).
49
+ * @param {string} [props.imageAlt] - Alt text for the image; used as caption fallback.
50
+ * @param {string} [props.bodyText] - Optional caption or descriptive text for the tile.
51
+ * @param {function} [props.imgClick] - Optional click handler for the image (event, imageUrl).
52
+ * @param {oneOf} [props.variant] - Visual variant: 'caption' | 'overlay'.
53
+ */
30
54
  Tile.propTypes = {
55
+ /** Zero-based index of the tile. */
31
56
  index: PropTypes.number.isRequired,
57
+ /** Total number of tiles in this grid. */
32
58
  cardLength: PropTypes.number.isRequired,
59
+ /** Optional href for this tile. */
33
60
  link: PropTypes.string,
61
+ /** Image source URL to display (required). */
34
62
  image: PropTypes.string.isRequired,
63
+ /** Alt text for the image; also used as caption fallback. */
35
64
  imageAlt: PropTypes.string,
65
+ /** Optional caption or descriptive body text shown with the tile. */
36
66
  bodyText: PropTypes.string,
67
+ /** Click handler invoked when the tile image is clicked; receives (event, imageUrl). */
37
68
  imgClick: PropTypes.func,
38
- /** 'caption' - visual caption beneath image (prefers bodyText, falls back to imageAlt) */
69
+ /** 'caption' - caption beneath image; 'overlay' - overlay displayed on hover. */
39
70
  variant: PropTypes.oneOf(TilesVariants),
40
71
  };
41
72
  function Tile(props) {
@@ -6,7 +6,17 @@ import { SmartImage } from './smartimage';
6
6
  import "../../css/pixelated.grid.scss";
7
7
  import "./timeline.css";
8
8
  // https://www.w3schools.com/howto/howto_css_timeline.asp
9
+ /**
10
+ * Timeline — vertical timeline display composed of dated or staged items with optional images and directional layout.
11
+ *
12
+ * @param {arrayOf} [props.timelineData] - Array of items each containing title, content, image, and direction.
13
+ * @param {string} [props.title] - Item title text.
14
+ * @param {string} [props.content] - Item content or description.
15
+ * @param {string} [props.image] - Optional image URL for the timeline item.
16
+ * @param {string} [props.direction] - Visual positioning key (e.g., 'left' or 'right').
17
+ */
9
18
  Timeline.propTypes = {
19
+ /** Array of timeline item objects with title, content, image and direction. */
10
20
  timelineData: PropTypes.arrayOf(PropTypes.shape({
11
21
  title: PropTypes.string.isRequired,
12
22
  content: PropTypes.string,
@@ -17,10 +27,22 @@ Timeline.propTypes = {
17
27
  export function Timeline(props) {
18
28
  return (_jsx("div", { className: "timeline", children: props.timelineData.map((item, index) => item ? (_jsx(TimelineItem, { title: item.title ?? '', content: item.content, image: item.image, direction: item.direction }, index)) : null) }));
19
29
  }
30
+ /**
31
+ * TimelineItem — Single item for the vertical timeline, including optional image and placement direction.
32
+ *
33
+ * @param {string} [props.title] - Title text for the timeline item (required).
34
+ * @param {string} [props.content] - Description or content of the timeline item.
35
+ * @param {string} [props.image] - Optional image URL to display for the item.
36
+ * @param {string} [props.direction] - Visual alignment for the item (e.g., 'left' or 'right').
37
+ */
20
38
  TimelineItem.propTypes = {
39
+ /** Item title */
21
40
  title: PropTypes.string.isRequired,
41
+ /** Item content or description */
22
42
  content: PropTypes.string,
43
+ /** Optional image URL for the item */
23
44
  image: PropTypes.string,
45
+ /** Placement direction ('left'|'right') */
24
46
  direction: PropTypes.string.isRequired
25
47
  };
26
48
  export default function TimelineItem(props) {
@@ -1,9 +1,19 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useEffect } from "react";
3
3
  import PropTypes from 'prop-types';
4
+ /**
5
+ * Calendly — Embed a Calendly scheduling widget using the provided URL.
6
+ *
7
+ * @param {string} [props.url] - The Calendly widget URL (required).
8
+ * @param {string} [props.width] - Minimum width for the widget container (e.g., '320px').
9
+ * @param {string} [props.height] - Height for the widget container (e.g., '700px').
10
+ */
4
11
  Calendly.propTypes = {
12
+ /** Calendly widget URL */
5
13
  url: PropTypes.string.isRequired,
14
+ /** Minimum width for the widget container */
6
15
  width: PropTypes.string.isRequired,
16
+ /** Height for the widget container */
7
17
  height: PropTypes.string.isRequired,
8
18
  };
9
19
  export function Calendly({ url, width, height }) {
@@ -59,8 +59,16 @@ export function buildCloudinaryUrl(params) {
59
59
  const encodedUrl = url.includes("?") ? encodeURIComponent(url) : url;
60
60
  return `${domainAndCloud}/image/fetch/${t}/${encodedUrl}`;
61
61
  }
62
+ /**
63
+ * getCloudinaryRemoteFetchURL — Build a Cloudinary remote fetch URL for a provided image path.
64
+ *
65
+ * @param {string} [props.url] - Image URL or path to convert to Cloudinary fetch URL.
66
+ * @param {string} [props.product_env] - Cloudinary product environment (cloud name) to use when building the URL.
67
+ */
62
68
  getCloudinaryRemoteFetchURL.propTypes = {
69
+ /** Image URL or path to transform via Cloudinary */
63
70
  url: PropTypes.string.isRequired,
71
+ /** Cloudinary product environment (cloud name) */
64
72
  product_env: PropTypes.string.isRequired
65
73
  };
66
74
  export function getCloudinaryRemoteFetchURL(props) {
@@ -77,8 +85,16 @@ export function userIsMobile() {
77
85
  }
78
86
  return match;
79
87
  }
88
+ /**
89
+ * loadAllImagesFromCloudinary — Replace <img> sources with Cloudinary-built remote fetch URLs for improved delivery in production.
90
+ *
91
+ * @param {string} [props.origin] - Optional origin to validate local development environments (ignored in local dev).
92
+ * @param {string} [props.product_env] - Cloudinary product environment (cloud name) to use when building URLs.
93
+ */
80
94
  loadAllImagesFromCloudinary.propTypes = {
95
+ /** Optional origin string to detect local dev */
81
96
  origin: PropTypes.string,
97
+ /** Cloudinary product environment (cloud name) */
82
98
  product_env: PropTypes.string.isRequired
83
99
  };
84
100
  export function loadAllImagesFromCloudinary(props) {