@sonordev/site-kit 5.3.2 → 5.5.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 (411) hide show
  1. package/AGENTS.md +16 -6
  2. package/README.md +26 -7
  3. package/agent-manifest.json +11 -10
  4. package/dist/AnalyticsProvider-KFXAH4GR.mjs +11 -0
  5. package/dist/{AnalyticsProvider-2XK54UZW.mjs.map → AnalyticsProvider-KFXAH4GR.mjs.map} +1 -1
  6. package/dist/AnalyticsProvider-WDDW3IJW.js +32 -0
  7. package/dist/{AnalyticsProvider-PM7SOGOS.js.map → AnalyticsProvider-WDDW3IJW.js.map} +1 -1
  8. package/dist/{BlogViewTracker-3BIUF5TI.js → BlogViewTracker-D4DIEP4Q.js} +6 -6
  9. package/dist/{BlogViewTracker-3BIUF5TI.js.map → BlogViewTracker-D4DIEP4Q.js.map} +1 -1
  10. package/dist/{BlogViewTracker-KFUDRDQK.mjs → BlogViewTracker-ZVEGGH3Y.mjs} +5 -5
  11. package/dist/{BlogViewTracker-KFUDRDQK.mjs.map → BlogViewTracker-ZVEGGH3Y.mjs.map} +1 -1
  12. package/dist/ChatWidget-2ZYPYIMQ.js +22 -0
  13. package/dist/{ChatWidget-7BYSGNO2.js.map → ChatWidget-2ZYPYIMQ.js.map} +1 -1
  14. package/dist/ChatWidget-FYCCLMQE.mjs +13 -0
  15. package/dist/{ChatWidget-4PHZHGG5.mjs.map → ChatWidget-FYCCLMQE.mjs.map} +1 -1
  16. package/dist/EngageWidget-6HUZYOY7.mjs +11 -0
  17. package/dist/{EngageWidget-D6M6QWEC.mjs.map → EngageWidget-6HUZYOY7.mjs.map} +1 -1
  18. package/dist/EngageWidget-MYQTBBW6.js +20 -0
  19. package/dist/{EngageWidget-Q4ITKTMJ.js.map → EngageWidget-MYQTBBW6.js.map} +1 -1
  20. package/dist/{FileField-YBBIJOCK.js → FileField-JK2S24XU.js} +6 -6
  21. package/dist/{FileField-YBBIJOCK.js.map → FileField-JK2S24XU.js.map} +1 -1
  22. package/dist/{FileField-PQQDX4IR.mjs → FileField-OZZHWGPA.mjs} +5 -5
  23. package/dist/{FileField-PQQDX4IR.mjs.map → FileField-OZZHWGPA.mjs.map} +1 -1
  24. package/dist/{FormSpotlight-WUN24F3P.js → FormSpotlight-5AXFQU5M.js} +15 -15
  25. package/dist/{FormSpotlight-WUN24F3P.js.map → FormSpotlight-5AXFQU5M.js.map} +1 -1
  26. package/dist/{FormSpotlight-7TIIWFTP.mjs → FormSpotlight-XV42L72H.mjs} +3 -3
  27. package/dist/{FormSpotlight-7TIIWFTP.mjs.map → FormSpotlight-XV42L72H.mjs.map} +1 -1
  28. package/dist/{FormStage-CM7OVLUT.js → FormStage-HATUHNRV.js} +13 -13
  29. package/dist/{FormStage-CM7OVLUT.js.map → FormStage-HATUHNRV.js.map} +1 -1
  30. package/dist/{FormStage-TFN2GIBO.mjs → FormStage-RUK675HV.mjs} +3 -3
  31. package/dist/{FormStage-TFN2GIBO.mjs.map → FormStage-RUK675HV.mjs.map} +1 -1
  32. package/dist/ManagedForm-JWEXJEXK.js +23 -0
  33. package/dist/{ManagedForm-N63YGVNY.js.map → ManagedForm-JWEXJEXK.js.map} +1 -1
  34. package/dist/ManagedForm-OA3MNGXT.mjs +14 -0
  35. package/dist/{ManagedForm-ZUXLHEQU.mjs.map → ManagedForm-OA3MNGXT.mjs.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-PIVJTU5L.js → ManagedNewsletterForm-AAHH63KT.js} +8 -8
  37. package/dist/{ManagedNewsletterForm-PIVJTU5L.js.map → ManagedNewsletterForm-AAHH63KT.js.map} +1 -1
  38. package/dist/{ManagedNewsletterForm-4AVKTZ2A.mjs → ManagedNewsletterForm-HZKTNWLW.mjs} +7 -7
  39. package/dist/{ManagedNewsletterForm-4AVKTZ2A.mjs.map → ManagedNewsletterForm-HZKTNWLW.mjs.map} +1 -1
  40. package/dist/{SignalCore-LT4NCPOR.mjs → SignalCore-X3GDGBZD.mjs} +5 -5
  41. package/dist/{SignalCore-LT4NCPOR.mjs.map → SignalCore-X3GDGBZD.mjs.map} +1 -1
  42. package/dist/{SignalCore-2M5TISM7.js → SignalCore-YSNZYBKJ.js} +11 -11
  43. package/dist/{SignalCore-2M5TISM7.js.map → SignalCore-YSNZYBKJ.js.map} +1 -1
  44. package/dist/SitemapSync-2PTDBH5E.mjs +9 -0
  45. package/dist/{SitemapSync-G3OLECFI.mjs.map → SitemapSync-2PTDBH5E.mjs.map} +1 -1
  46. package/dist/SitemapSync-3SFAI546.js +18 -0
  47. package/dist/{SitemapSync-7OBOJG2L.js.map → SitemapSync-3SFAI546.js.map} +1 -1
  48. package/dist/analytics/dispatch.d.ts +4 -4
  49. package/dist/analytics/index.js +15 -15
  50. package/dist/analytics/index.mjs +6 -6
  51. package/dist/{api-NTHZ6PAW.mjs → api-D745LGGU.mjs} +3 -3
  52. package/dist/api-D745LGGU.mjs.map +1 -0
  53. package/dist/{api-N5OLQXYN.js → api-XR5APCH3.js} +3 -3
  54. package/dist/api-XR5APCH3.js.map +1 -0
  55. package/dist/blog/AuthorPage.d.ts +1 -1
  56. package/dist/blog/AuthorPage.d.ts.map +1 -1
  57. package/dist/blog/BlogLayout.d.ts +3 -1
  58. package/dist/blog/BlogLayout.d.ts.map +1 -1
  59. package/dist/blog/BlogList.d.ts +3 -1
  60. package/dist/blog/BlogList.d.ts.map +1 -1
  61. package/dist/blog/BlogPost.d.ts +3 -1
  62. package/dist/blog/BlogPost.d.ts.map +1 -1
  63. package/dist/blog/BlogSidebar.d.ts +3 -1
  64. package/dist/blog/BlogSidebar.d.ts.map +1 -1
  65. package/dist/blog/ClusterLandingPage.d.ts +3 -1
  66. package/dist/blog/ClusterLandingPage.d.ts.map +1 -1
  67. package/dist/blog/ClusterNavigation.d.ts +3 -1
  68. package/dist/blog/ClusterNavigation.d.ts.map +1 -1
  69. package/dist/blog/RelatedPosts.d.ts +4 -1
  70. package/dist/blog/RelatedPosts.d.ts.map +1 -1
  71. package/dist/blog/artwork-components.test.d.ts +2 -0
  72. package/dist/blog/artwork-components.test.d.ts.map +1 -0
  73. package/dist/blog/artwork.d.ts +14 -0
  74. package/dist/blog/artwork.d.ts.map +1 -0
  75. package/dist/blog/artwork.test.d.ts +2 -0
  76. package/dist/blog/artwork.test.d.ts.map +1 -0
  77. package/dist/blog/blog-styles.d.ts.map +1 -1
  78. package/dist/blog/blog-tables.d.ts +13 -0
  79. package/dist/blog/blog-tables.d.ts.map +1 -0
  80. package/dist/blog/blog-tables.test.d.ts +2 -0
  81. package/dist/blog/blog-tables.test.d.ts.map +1 -0
  82. package/dist/blog/index.d.ts +3 -0
  83. package/dist/blog/index.d.ts.map +1 -1
  84. package/dist/blog/index.js +52 -30
  85. package/dist/blog/index.js.map +1 -1
  86. package/dist/blog/index.mjs +15 -12
  87. package/dist/blog/index.mjs.map +1 -1
  88. package/dist/blog/publication-render.test.d.ts +2 -0
  89. package/dist/blog/publication-render.test.d.ts.map +1 -0
  90. package/dist/blog/publication-routes.test.d.ts +2 -0
  91. package/dist/blog/publication-routes.test.d.ts.map +1 -0
  92. package/dist/blog/routes.d.ts +40 -0
  93. package/dist/blog/routes.d.ts.map +1 -0
  94. package/dist/blog/server-core.d.ts +28 -21
  95. package/dist/blog/server-core.d.ts.map +1 -1
  96. package/dist/blog/server-ui.d.ts +4 -0
  97. package/dist/blog/server-ui.d.ts.map +1 -1
  98. package/dist/blog/server-ui.js +49 -28
  99. package/dist/blog/server-ui.js.map +1 -1
  100. package/dist/blog/server-ui.mjs +9 -15
  101. package/dist/blog/server-ui.mjs.map +1 -1
  102. package/dist/blog/server.d.ts +28 -21
  103. package/dist/blog/server.d.ts.map +1 -1
  104. package/dist/blog/server.js +71 -42
  105. package/dist/blog/server.mjs +3 -2
  106. package/dist/blog/types.d.ts +8 -1
  107. package/dist/blog/types.d.ts.map +1 -1
  108. package/dist/blog-styles-6EY3BS5Y.js +595 -0
  109. package/dist/blog-styles-6EY3BS5Y.js.map +1 -0
  110. package/dist/blog-styles-7AKRUMV7.mjs +592 -0
  111. package/dist/blog-styles-7AKRUMV7.mjs.map +1 -0
  112. package/dist/blog-tables-DWDEWA3S.js +17 -0
  113. package/dist/blog-tables-DWDEWA3S.js.map +1 -0
  114. package/dist/blog-tables-QGIHOESZ.mjs +4 -0
  115. package/dist/blog-tables-QGIHOESZ.mjs.map +1 -0
  116. package/dist/{chunk-OIJ435IZ.js → chunk-2CMSWJWC.js} +18 -18
  117. package/dist/{chunk-OIJ435IZ.js.map → chunk-2CMSWJWC.js.map} +1 -1
  118. package/dist/{chunk-K37JPEQW.js → chunk-2OU4KBUN.js} +26 -23
  119. package/dist/chunk-2OU4KBUN.js.map +1 -0
  120. package/dist/{chunk-JSLYNYTB.mjs → chunk-3B6CXGAK.mjs} +3 -3
  121. package/dist/{chunk-JSLYNYTB.mjs.map → chunk-3B6CXGAK.mjs.map} +1 -1
  122. package/dist/{chunk-HMFFAUCD.js → chunk-3DWIYCQX.js} +2 -2
  123. package/dist/chunk-3DWIYCQX.js.map +1 -0
  124. package/dist/{chunk-3EPMDPWI.js → chunk-3SDMJMN2.js} +5 -5
  125. package/dist/{chunk-3EPMDPWI.js.map → chunk-3SDMJMN2.js.map} +1 -1
  126. package/dist/chunk-4B4S56WJ.mjs +110 -0
  127. package/dist/chunk-4B4S56WJ.mjs.map +1 -0
  128. package/dist/chunk-4U5NCKQY.mjs +39 -0
  129. package/dist/chunk-4U5NCKQY.mjs.map +1 -0
  130. package/dist/{chunk-CQUA2AUA.mjs → chunk-4XGACM7D.mjs} +3 -3
  131. package/dist/{chunk-CQUA2AUA.mjs.map → chunk-4XGACM7D.mjs.map} +1 -1
  132. package/dist/{chunk-AVM4OZHR.mjs → chunk-5TGAUWNO.mjs} +3 -3
  133. package/dist/{chunk-AVM4OZHR.mjs.map → chunk-5TGAUWNO.mjs.map} +1 -1
  134. package/dist/{chunk-RO55G3OA.mjs → chunk-64BOVMXG.mjs} +3 -3
  135. package/dist/{chunk-RO55G3OA.mjs.map → chunk-64BOVMXG.mjs.map} +1 -1
  136. package/dist/{chunk-JBGRXICL.js → chunk-746RKQHA.js} +75 -70
  137. package/dist/chunk-746RKQHA.js.map +1 -0
  138. package/dist/{chunk-N3C323NY.mjs → chunk-7PPNXORV.mjs} +3 -3
  139. package/dist/{chunk-N3C323NY.mjs.map → chunk-7PPNXORV.mjs.map} +1 -1
  140. package/dist/{chunk-DYKFC7WY.js → chunk-A3F5GRNJ.js} +8 -8
  141. package/dist/{chunk-DYKFC7WY.js.map → chunk-A3F5GRNJ.js.map} +1 -1
  142. package/dist/{chunk-4TU246Q4.mjs → chunk-AEARU24Q.mjs} +40 -26
  143. package/dist/chunk-AEARU24Q.mjs.map +1 -0
  144. package/dist/{chunk-5BZDHZCN.js → chunk-BNOQXDPJ.js} +4 -4
  145. package/dist/{chunk-5BZDHZCN.js.map → chunk-BNOQXDPJ.js.map} +1 -1
  146. package/dist/{chunk-XQZTOWS3.js → chunk-CT5REGAK.js} +15 -15
  147. package/dist/{chunk-XQZTOWS3.js.map → chunk-CT5REGAK.js.map} +1 -1
  148. package/dist/{chunk-KOP3DPIR.mjs → chunk-DRLHQQBH.mjs} +4 -4
  149. package/dist/{chunk-KOP3DPIR.mjs.map → chunk-DRLHQQBH.mjs.map} +1 -1
  150. package/dist/{chunk-Y7SRO7MJ.mjs → chunk-DYULWKDC.mjs} +4 -4
  151. package/dist/{chunk-Y7SRO7MJ.mjs.map → chunk-DYULWKDC.mjs.map} +1 -1
  152. package/dist/{chunk-DHXQBTXE.mjs → chunk-EEQYKMGH.mjs} +75 -70
  153. package/dist/chunk-EEQYKMGH.mjs.map +1 -0
  154. package/dist/chunk-ESP5RMB7.js +42 -0
  155. package/dist/chunk-ESP5RMB7.js.map +1 -0
  156. package/dist/{chunk-4DE2KJ7R.js → chunk-FF5N5D3D.js} +8 -8
  157. package/dist/{chunk-4DE2KJ7R.js.map → chunk-FF5N5D3D.js.map} +1 -1
  158. package/dist/{chunk-757HXAYX.js → chunk-FYVLQ3OU.js} +3 -3
  159. package/dist/{chunk-757HXAYX.js.map → chunk-FYVLQ3OU.js.map} +1 -1
  160. package/dist/{chunk-OC6PU7U2.mjs → chunk-G5HUI4BO.mjs} +3 -3
  161. package/dist/{chunk-OC6PU7U2.mjs.map → chunk-G5HUI4BO.mjs.map} +1 -1
  162. package/dist/chunk-G6WF4G3E.js +43 -0
  163. package/dist/chunk-G6WF4G3E.js.map +1 -0
  164. package/dist/chunk-GHECYDSZ.mjs +134 -0
  165. package/dist/chunk-GHECYDSZ.mjs.map +1 -0
  166. package/dist/{chunk-JTO3K5B7.mjs → chunk-HBI67P7Y.mjs} +4 -4
  167. package/dist/{chunk-JTO3K5B7.mjs.map → chunk-HBI67P7Y.mjs.map} +1 -1
  168. package/dist/{chunk-FFJVQWKO.js → chunk-HFJQMIFM.js} +4 -4
  169. package/dist/{chunk-FFJVQWKO.js.map → chunk-HFJQMIFM.js.map} +1 -1
  170. package/dist/{chunk-A3NNUKFA.js → chunk-HX3BRMOX.js} +96 -644
  171. package/dist/chunk-HX3BRMOX.js.map +1 -0
  172. package/dist/{chunk-3TXX5KIN.js → chunk-JNRHTZL4.js} +2 -2
  173. package/dist/{chunk-3TXX5KIN.js.map → chunk-JNRHTZL4.js.map} +1 -1
  174. package/dist/{chunk-R3LYTIVN.js → chunk-KAUUGRYB.js} +5 -5
  175. package/dist/{chunk-R3LYTIVN.js.map → chunk-KAUUGRYB.js.map} +1 -1
  176. package/dist/{chunk-L2LJQIM3.js → chunk-KPKQKFT4.js} +11 -11
  177. package/dist/chunk-KPKQKFT4.js.map +1 -0
  178. package/dist/chunk-LC7AM4J5.js +118 -0
  179. package/dist/chunk-LC7AM4J5.js.map +1 -0
  180. package/dist/{chunk-GFNXWS3I.js → chunk-MCJF2KJ6.js} +5 -5
  181. package/dist/{chunk-GFNXWS3I.js.map → chunk-MCJF2KJ6.js.map} +1 -1
  182. package/dist/{chunk-Z7K5AMCE.js → chunk-MNYM2XU4.js} +4 -4
  183. package/dist/{chunk-Z7K5AMCE.js.map → chunk-MNYM2XU4.js.map} +1 -1
  184. package/dist/{chunk-6QABCGM6.mjs → chunk-MU7IEPDG.mjs} +4 -4
  185. package/dist/chunk-MU7IEPDG.mjs.map +1 -0
  186. package/dist/chunk-NSWO43XW.mjs +39 -0
  187. package/dist/chunk-NSWO43XW.mjs.map +1 -0
  188. package/dist/{chunk-Z33JXJTJ.js → chunk-NZSFOZJV.js} +40 -26
  189. package/dist/chunk-NZSFOZJV.js.map +1 -0
  190. package/dist/{chunk-ZKR5AJV5.mjs → chunk-OFSA7LUH.mjs} +4 -4
  191. package/dist/{chunk-ZKR5AJV5.mjs.map → chunk-OFSA7LUH.mjs.map} +1 -1
  192. package/dist/{chunk-M7FWXEXC.js → chunk-PIPLBBDH.js} +8 -8
  193. package/dist/{chunk-M7FWXEXC.js.map → chunk-PIPLBBDH.js.map} +1 -1
  194. package/dist/{chunk-FDVE56JS.js → chunk-Q26VZNM2.js} +3 -3
  195. package/dist/{chunk-FDVE56JS.js.map → chunk-Q26VZNM2.js.map} +1 -1
  196. package/dist/{chunk-6AZTRTCG.js → chunk-QEGUI2Q2.js} +15 -15
  197. package/dist/{chunk-6AZTRTCG.js.map → chunk-QEGUI2Q2.js.map} +1 -1
  198. package/dist/{chunk-GPNBBUEN.js → chunk-QFNSM77X.js} +3 -3
  199. package/dist/{chunk-GPNBBUEN.js.map → chunk-QFNSM77X.js.map} +1 -1
  200. package/dist/{chunk-QZ54OCWD.mjs → chunk-R4MX6EOM.mjs} +7 -7
  201. package/dist/{chunk-QZ54OCWD.mjs.map → chunk-R4MX6EOM.mjs.map} +1 -1
  202. package/dist/{chunk-67CHHDBL.mjs → chunk-RMMHWSPP.mjs} +96 -644
  203. package/dist/chunk-RMMHWSPP.mjs.map +1 -0
  204. package/dist/{chunk-B4BFQSSS.mjs → chunk-RU54J2PY.mjs} +4 -4
  205. package/dist/chunk-RU54J2PY.mjs.map +1 -0
  206. package/dist/{chunk-AXAIUCSF.mjs → chunk-RZUZMUTN.mjs} +9 -8
  207. package/dist/chunk-RZUZMUTN.mjs.map +1 -0
  208. package/dist/{chunk-NSLYY62T.mjs → chunk-S6FEC6UT.mjs} +9 -5
  209. package/dist/chunk-S6FEC6UT.mjs.map +1 -0
  210. package/dist/{chunk-3DPXOZAU.mjs → chunk-SHLWA6JY.mjs} +2 -2
  211. package/dist/chunk-SHLWA6JY.mjs.map +1 -0
  212. package/dist/{chunk-E33HJMRP.js → chunk-SQVYLIIN.js} +11 -7
  213. package/dist/chunk-SQVYLIIN.js.map +1 -0
  214. package/dist/chunk-SUZ3ZLB2.js +8 -0
  215. package/dist/{chunk-D37M7MIH.js.map → chunk-SUZ3ZLB2.js.map} +1 -1
  216. package/dist/{chunk-DZDWBQKA.mjs → chunk-TALEV3IH.mjs} +3 -3
  217. package/dist/{chunk-DZDWBQKA.mjs.map → chunk-TALEV3IH.mjs.map} +1 -1
  218. package/dist/{chunk-UOTXSWKZ.mjs → chunk-TP7H6BSK.mjs} +2 -2
  219. package/dist/{chunk-UOTXSWKZ.mjs.map → chunk-TP7H6BSK.mjs.map} +1 -1
  220. package/dist/{chunk-XW5KNCWJ.mjs → chunk-TX2QQ7IX.mjs} +3 -3
  221. package/dist/{chunk-XW5KNCWJ.mjs.map → chunk-TX2QQ7IX.mjs.map} +1 -1
  222. package/dist/{chunk-PEEQMI7U.js → chunk-UNPEMSLK.js} +12 -11
  223. package/dist/chunk-UNPEMSLK.js.map +1 -0
  224. package/dist/{chunk-42F5EK24.mjs → chunk-UZL2QU2V.mjs} +16 -13
  225. package/dist/chunk-UZL2QU2V.mjs.map +1 -0
  226. package/dist/{chunk-6VG65AIA.mjs → chunk-V6NOM7PJ.mjs} +3 -3
  227. package/dist/{chunk-6VG65AIA.mjs.map → chunk-V6NOM7PJ.mjs.map} +1 -1
  228. package/dist/{chunk-W23TMUKB.js → chunk-VAS3LH5W.js} +418 -98
  229. package/dist/chunk-VAS3LH5W.js.map +1 -0
  230. package/dist/{chunk-TS3N3LGZ.mjs → chunk-VYHRAICF.mjs} +4 -4
  231. package/dist/{chunk-TS3N3LGZ.mjs.map → chunk-VYHRAICF.mjs.map} +1 -1
  232. package/dist/{chunk-G3YUSRCL.js → chunk-W5NVW23S.js} +4 -4
  233. package/dist/{chunk-G3YUSRCL.js.map → chunk-W5NVW23S.js.map} +1 -1
  234. package/dist/chunk-WDBCXRTT.mjs +6 -0
  235. package/dist/{chunk-OUERH2T4.mjs.map → chunk-WDBCXRTT.mjs.map} +1 -1
  236. package/dist/{chunk-ZOJ3TLO5.mjs → chunk-WIZRCI6J.mjs} +3 -3
  237. package/dist/{chunk-ZOJ3TLO5.mjs.map → chunk-WIZRCI6J.mjs.map} +1 -1
  238. package/dist/{chunk-HDQTZAGE.mjs → chunk-X2XFLYZ3.mjs} +3 -3
  239. package/dist/{chunk-HDQTZAGE.mjs.map → chunk-X2XFLYZ3.mjs.map} +1 -1
  240. package/dist/{chunk-HVFXFPUJ.mjs → chunk-XQYC4KMH.mjs} +413 -94
  241. package/dist/chunk-XQYC4KMH.mjs.map +1 -0
  242. package/dist/{chunk-KPFPSOYS.js → chunk-YNC5D3FT.js} +12 -12
  243. package/dist/{chunk-KPFPSOYS.js.map → chunk-YNC5D3FT.js.map} +1 -1
  244. package/dist/chunk-YQTE32QK.js +137 -0
  245. package/dist/chunk-YQTE32QK.js.map +1 -0
  246. package/dist/{chunk-PZXKFHPO.js → chunk-YYAFHIY7.js} +15 -15
  247. package/dist/chunk-YYAFHIY7.js.map +1 -0
  248. package/dist/{chunk-MANX6422.js → chunk-Z6S4MWSR.js} +7 -7
  249. package/dist/{chunk-MANX6422.js.map → chunk-Z6S4MWSR.js.map} +1 -1
  250. package/dist/{chunk-DVH3JHZ3.mjs → chunk-ZRQFG3L6.mjs} +5 -5
  251. package/dist/{chunk-DVH3JHZ3.mjs.map → chunk-ZRQFG3L6.mjs.map} +1 -1
  252. package/dist/cli/agent/checks.d.ts.map +1 -1
  253. package/dist/cli/agent/ssr-bailout.d.ts +27 -0
  254. package/dist/cli/agent/ssr-bailout.d.ts.map +1 -0
  255. package/dist/cli/agent/ssr-bailout.test.d.ts +2 -0
  256. package/dist/cli/agent/ssr-bailout.test.d.ts.map +1 -0
  257. package/dist/cli/codemod/transforms.d.ts.map +1 -1
  258. package/dist/cli/index.js +38 -51
  259. package/dist/cli/index.js.map +1 -1
  260. package/dist/cli/index.mjs +36 -49
  261. package/dist/cli/index.mjs.map +1 -1
  262. package/dist/cli/migrator/index.d.ts.map +1 -1
  263. package/dist/client/index.d.ts +1 -0
  264. package/dist/client/index.d.ts.map +1 -1
  265. package/dist/client/index.js +20 -7
  266. package/dist/client/index.js.map +1 -1
  267. package/dist/client/index.mjs +5 -4
  268. package/dist/client/index.mjs.map +1 -1
  269. package/dist/cms/index.js.map +1 -1
  270. package/dist/cms/index.mjs.map +1 -1
  271. package/dist/cms/sanity-image.d.ts +1 -1
  272. package/dist/commerce/index.js +58 -58
  273. package/dist/commerce/index.mjs +7 -7
  274. package/dist/engage/ChatWidget.d.ts.map +1 -1
  275. package/dist/engage/EngageWidget.d.ts +3 -4
  276. package/dist/engage/EngageWidget.d.ts.map +1 -1
  277. package/dist/engage/chat-launcher.test.d.ts +2 -0
  278. package/dist/engage/chat-launcher.test.d.ts.map +1 -0
  279. package/dist/engage/index.js +12 -10
  280. package/dist/engage/index.js.map +1 -1
  281. package/dist/engage/index.mjs +9 -7
  282. package/dist/engage/index.mjs.map +1 -1
  283. package/dist/engage/launcher-placement.d.ts +56 -0
  284. package/dist/engage/launcher-placement.d.ts.map +1 -0
  285. package/dist/engage/launcher-placement.test.d.ts +2 -0
  286. package/dist/engage/launcher-placement.test.d.ts.map +1 -0
  287. package/dist/engage/types.d.ts +41 -7
  288. package/dist/engage/types.d.ts.map +1 -1
  289. package/dist/fleet/index.js +8 -8
  290. package/dist/fleet/index.mjs +4 -4
  291. package/dist/forms/index.js +16 -16
  292. package/dist/forms/index.mjs +9 -9
  293. package/dist/forms/server.js +10 -10
  294. package/dist/forms/server.mjs +8 -8
  295. package/dist/forms/static.js +7 -7
  296. package/dist/forms/static.mjs +6 -6
  297. package/dist/images/ManagedImage.d.ts.map +1 -1
  298. package/dist/images/index.js +11 -11
  299. package/dist/images/index.mjs +4 -4
  300. package/dist/index.js +65 -65
  301. package/dist/index.mjs +11 -11
  302. package/dist/layout/SiteKitClientProviders.d.ts.map +1 -1
  303. package/dist/layout/client.d.ts.map +1 -1
  304. package/dist/layout/client.js +8 -8
  305. package/dist/layout/client.mjs +7 -7
  306. package/dist/layout/index.js +10 -10
  307. package/dist/layout/index.mjs +8 -8
  308. package/dist/layout/types.d.ts +7 -3
  309. package/dist/layout/types.d.ts.map +1 -1
  310. package/dist/llms/generateLLMsTxt.d.ts.map +1 -1
  311. package/dist/llms/index.js +12 -12
  312. package/dist/llms/index.mjs +2 -2
  313. package/dist/llms/types.d.ts +7 -1
  314. package/dist/llms/types.d.ts.map +1 -1
  315. package/dist/maps/index.js +5 -5
  316. package/dist/maps/index.mjs +3 -3
  317. package/dist/mcp/WebMcpTools.d.ts +5 -2
  318. package/dist/mcp/WebMcpTools.d.ts.map +1 -1
  319. package/dist/mcp/client.js.map +1 -1
  320. package/dist/mcp/client.mjs.map +1 -1
  321. package/dist/search/index.js +4 -4
  322. package/dist/search/index.mjs +3 -3
  323. package/dist/seo/LocationPageContent.d.ts +6 -5
  324. package/dist/seo/LocationPageContent.d.ts.map +1 -1
  325. package/dist/seo/api.d.ts +4 -5
  326. package/dist/seo/api.d.ts.map +1 -1
  327. package/dist/seo/client.js +5 -5
  328. package/dist/seo/client.mjs +4 -4
  329. package/dist/seo/index.js +42 -42
  330. package/dist/seo/index.js.map +1 -1
  331. package/dist/seo/index.mjs +8 -8
  332. package/dist/seo/index.mjs.map +1 -1
  333. package/dist/seo/routing.d.ts +9 -23
  334. package/dist/seo/routing.d.ts.map +1 -1
  335. package/dist/seo/server-api.d.ts +11 -5
  336. package/dist/seo/server-api.d.ts.map +1 -1
  337. package/dist/seo/server.js +18 -18
  338. package/dist/seo/server.mjs +2 -2
  339. package/dist/server/index.js +3 -3
  340. package/dist/server/index.mjs +2 -2
  341. package/dist/{server-api-HW4PL2L2.mjs → server-api-RG3ZL3DV.mjs} +3 -3
  342. package/dist/{server-api-HW4PL2L2.mjs.map → server-api-RG3ZL3DV.mjs.map} +1 -1
  343. package/dist/{server-api-DB2SIUP4.js → server-api-RYJQAUGO.js} +21 -21
  344. package/dist/{server-api-DB2SIUP4.js.map → server-api-RYJQAUGO.js.map} +1 -1
  345. package/dist/shared/version.d.ts +1 -1
  346. package/dist/shared/visual-viewport-gap.d.ts +52 -0
  347. package/dist/shared/visual-viewport-gap.d.ts.map +1 -0
  348. package/dist/shared/visual-viewport-gap.test.d.ts +2 -0
  349. package/dist/shared/visual-viewport-gap.test.d.ts.map +1 -0
  350. package/dist/signal/index.js +11 -11
  351. package/dist/signal/index.mjs +2 -2
  352. package/dist/sitemap/index.js +2 -2
  353. package/dist/sitemap/index.mjs +1 -1
  354. package/dist/sync/BookingWidget.d.ts +0 -23
  355. package/dist/sync/BookingWidget.d.ts.map +1 -1
  356. package/dist/sync/MeetingFormatStep.d.ts +13 -0
  357. package/dist/sync/MeetingFormatStep.d.ts.map +1 -0
  358. package/dist/sync/api.d.ts +9 -10
  359. package/dist/sync/api.d.ts.map +1 -1
  360. package/dist/sync/booking-flow.d.ts +7 -0
  361. package/dist/sync/booking-flow.d.ts.map +1 -0
  362. package/dist/sync/booking-flow.test.d.ts +2 -0
  363. package/dist/sync/booking-flow.test.d.ts.map +1 -0
  364. package/dist/sync/index.d.ts +2 -2
  365. package/dist/sync/index.d.ts.map +1 -1
  366. package/dist/sync/index.js +20 -16
  367. package/dist/sync/index.mjs +4 -4
  368. package/dist/sync/types.d.ts +34 -0
  369. package/dist/sync/types.d.ts.map +1 -1
  370. package/dist/types.d.ts +9 -0
  371. package/dist/types.d.ts.map +1 -1
  372. package/package.json +1 -1
  373. package/skills/site-kit/SKILL.md +8 -3
  374. package/dist/AnalyticsProvider-2XK54UZW.mjs +0 -11
  375. package/dist/AnalyticsProvider-PM7SOGOS.js +0 -32
  376. package/dist/ChatWidget-4PHZHGG5.mjs +0 -11
  377. package/dist/ChatWidget-7BYSGNO2.js +0 -20
  378. package/dist/EngageWidget-D6M6QWEC.mjs +0 -9
  379. package/dist/EngageWidget-Q4ITKTMJ.js +0 -18
  380. package/dist/ManagedForm-N63YGVNY.js +0 -23
  381. package/dist/ManagedForm-ZUXLHEQU.mjs +0 -14
  382. package/dist/SitemapSync-7OBOJG2L.js +0 -18
  383. package/dist/SitemapSync-G3OLECFI.mjs +0 -9
  384. package/dist/api-N5OLQXYN.js.map +0 -1
  385. package/dist/api-NTHZ6PAW.mjs.map +0 -1
  386. package/dist/chunk-3DPXOZAU.mjs.map +0 -1
  387. package/dist/chunk-42F5EK24.mjs.map +0 -1
  388. package/dist/chunk-4TU246Q4.mjs.map +0 -1
  389. package/dist/chunk-67CHHDBL.mjs.map +0 -1
  390. package/dist/chunk-6QABCGM6.mjs.map +0 -1
  391. package/dist/chunk-A3NNUKFA.js.map +0 -1
  392. package/dist/chunk-AXAIUCSF.mjs.map +0 -1
  393. package/dist/chunk-B4BFQSSS.mjs.map +0 -1
  394. package/dist/chunk-CGCYZJYX.mjs +0 -41
  395. package/dist/chunk-CGCYZJYX.mjs.map +0 -1
  396. package/dist/chunk-D37M7MIH.js +0 -8
  397. package/dist/chunk-DHXQBTXE.mjs.map +0 -1
  398. package/dist/chunk-E33HJMRP.js.map +0 -1
  399. package/dist/chunk-HMFFAUCD.js.map +0 -1
  400. package/dist/chunk-HVFXFPUJ.mjs.map +0 -1
  401. package/dist/chunk-JBGRXICL.js.map +0 -1
  402. package/dist/chunk-K37JPEQW.js.map +0 -1
  403. package/dist/chunk-L2LJQIM3.js.map +0 -1
  404. package/dist/chunk-NSLYY62T.mjs.map +0 -1
  405. package/dist/chunk-OUERH2T4.mjs +0 -6
  406. package/dist/chunk-PEEQMI7U.js.map +0 -1
  407. package/dist/chunk-PZXKFHPO.js.map +0 -1
  408. package/dist/chunk-TPL2IHFI.js +0 -43
  409. package/dist/chunk-TPL2IHFI.js.map +0 -1
  410. package/dist/chunk-W23TMUKB.js.map +0 -1
  411. package/dist/chunk-Z33JXJTJ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ClusterLandingPage.d.ts","sourceRoot":"","sources":["../../src/blog/ClusterLandingPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,SAAS,CAAA;AAiHrD,MAAM,WAAW,uBAAuB;IACtC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAA;CACjE;AAUD,wBAAsB,kBAAkB,CAAC,EACvC,IAAI,EACJ,QAAkB,EAClB,cAAsB,EACtB,QAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,uBAAuB,kHAyHzB"}
1
+ {"version":3,"file":"ClusterLandingPage.d.ts","sourceRoot":"","sources":["../../src/blog/ClusterLandingPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,SAAS,CAAA;AAiHrD,MAAM,WAAW,uBAAuB;IACtC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAA;CACjE;AAED,wBAAsB,kBAAkB,CAAC,EACvC,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,cAAsB,EACtB,QAAgB,EAChB,SAAS,EACT,QAAQ,GACT,EAAE,uBAAuB,kHAsHzB"}
@@ -10,11 +10,13 @@
10
10
  */
11
11
  import React from 'react';
12
12
  import type { ClusterNavigation as ClusterNavigationType } from './types';
13
+ import { type BlogRoutingOptions } from './routes';
13
14
  export interface ClusterNavigationProps {
14
15
  /** Cluster navigation data */
15
16
  navigation: ClusterNavigationType;
16
17
  /** Base path for blog URLs (default: /blog) */
17
18
  basePath?: string;
19
+ routing?: BlogRoutingOptions;
18
20
  /**
19
21
  * Fallback category slug for URL building (optional). Each linked article's
20
22
  * OWN category takes precedence when present — applying one category to
@@ -29,5 +31,5 @@ export interface ClusterNavigationProps {
29
31
  /** Custom class name */
30
32
  className?: string;
31
33
  }
32
- export declare function ClusterNavigation({ navigation, basePath, category, trailingSlash, unstyled, className, }: ClusterNavigationProps): React.JSX.Element | null;
34
+ export declare function ClusterNavigation({ navigation, basePath, routing, category, trailingSlash, unstyled, className, }: ClusterNavigationProps): React.JSX.Element | null;
33
35
  //# sourceMappingURL=ClusterNavigation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClusterNavigation.d.ts","sourceRoot":"","sources":["../../src/blog/ClusterNavigation.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,SAAS,CAAA;AA+FzE,MAAM,WAAW,sBAAsB;IACrC,8BAA8B;IAC9B,UAAU,EAAE,qBAAqB,CAAA;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,QAAkB,EAClB,QAAQ,EACR,aAAqB,EACrB,QAAgB,EAChB,SAAS,GACV,EAAE,sBAAsB,4BAsDxB"}
1
+ {"version":3,"file":"ClusterNavigation.d.ts","sourceRoot":"","sources":["../../src/blog/ClusterNavigation.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,SAAS,CAAA;AACzE,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAA;AA+FpE,MAAM,WAAW,sBAAsB;IACrC,8BAA8B;IAC9B,UAAU,EAAE,qBAAqB,CAAA;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,aAAqB,EACrB,QAAgB,EAChB,SAAS,GACV,EAAE,sBAAsB,4BAoDxB"}
@@ -5,14 +5,17 @@
5
5
  */
6
6
  import React from 'react';
7
7
  import type { BlogPost } from './types';
8
+ import { type BlogRoutingOptions } from './routes';
8
9
  interface RelatedPostsServerProps {
9
10
  apiUrl?: string;
10
11
  apiKey?: string;
11
12
  currentPostId: string;
12
13
  limit?: number;
13
14
  className?: string;
15
+ basePath?: string;
16
+ routing?: BlogRoutingOptions;
14
17
  renderItem?: (post: BlogPost) => React.ReactNode;
15
18
  }
16
- export declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className, renderItem, }: RelatedPostsServerProps): Promise<React.JSX.Element | null>;
19
+ export declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className, basePath, routing, renderItem, }: RelatedPostsServerProps): Promise<React.JSX.Element | null>;
17
20
  export {};
18
21
  //# sourceMappingURL=RelatedPosts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RelatedPosts.d.ts","sourceRoot":"","sources":["../../src/blog/RelatedPosts.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAqB,QAAQ,EAAE,MAAM,SAAS,CAAA;AA2C1D,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC,SAAS,CAAA;CACjD;AAED,wBAAsB,YAAY,CAAC,EACjC,MAA4D,EAC5D,MAAwC,EACxC,aAAa,EACb,KAAS,EACT,SAAS,EACT,UAAU,GACX,EAAE,uBAAuB,qCA8CzB"}
1
+ {"version":3,"file":"RelatedPosts.d.ts","sourceRoot":"","sources":["../../src/blog/RelatedPosts.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAqB,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE1D,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAA;AA2CpE,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC,SAAS,CAAA;CACjD;AAED,wBAAsB,YAAY,CAAC,EACjC,MAA4D,EAC5D,MAAwC,EACxC,aAAa,EACb,KAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,UAAU,GACX,EAAE,uBAAuB,qCAkDzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=artwork-components.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artwork-components.test.d.ts","sourceRoot":"","sources":["../../src/blog/artwork-components.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { CSSProperties } from 'react';
2
+ import type { BlogPost } from './types';
3
+ export interface BlogArtwork {
4
+ src: string | undefined;
5
+ alt: string;
6
+ composed: boolean;
7
+ }
8
+ type ArtworkSource = Pick<BlogPost, 'title' | 'featured_image' | 'featured_image_alt' | 'editorial_image' | 'editorial_image_alt'>;
9
+ /** Single source of truth for article artwork versus complete promotional cards. */
10
+ export declare function resolveBlogArtwork(post: ArtworkSource, placement?: 'article' | 'card'): BlogArtwork;
11
+ /** Preserve generated text and graphics across every stock card surface. */
12
+ export declare function blogArtworkImageStyle(artwork: BlogArtwork): CSSProperties | undefined;
13
+ export {};
14
+ //# sourceMappingURL=artwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artwork.d.ts","sourceRoot":"","sources":["../../src/blog/artwork.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,KAAK,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,qBAAqB,CAAC,CAAA;AAElI,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,GAAE,SAAS,GAAG,MAAe,GAAG,WAAW,CAc3G;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAIrF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=artwork.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artwork.test.d.ts","sourceRoot":"","sources":["../../src/blog/artwork.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"blog-styles.d.ts","sourceRoot":"","sources":["../../src/blog/blog-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,eAAO,MAAM,WAAW,QAqZhB,CAAA;AAMR,eAAO,MAAM,WAAW,QAyKhB,CAAA"}
1
+ {"version":3,"file":"blog-styles.d.ts","sourceRoot":"","sources":["../../src/blog/blog-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,eAAO,MAAM,WAAW,QAuZhB,CAAA;AAMR,eAAO,MAAM,WAAW,QAyKhB,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Server-rendered table scrolling. Keep the author's table markup intact so
3
+ * captions, header associations, links and table semantics survive unchanged.
4
+ */
5
+ /**
6
+ * Single source of truth for default blog table wrappers. Safe to call twice;
7
+ * already wrapped tables and HTML examples are left alone. This is a layout
8
+ * transform, not an HTML sanitizer: content still follows the host's trust policy.
9
+ */
10
+ export declare function wrapBlogTables(html: string): string;
11
+ /** Native overflow only when content needs it; small tables retain their layout. */
12
+ export declare const blogTableCss: string;
13
+ //# sourceMappingURL=blog-tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-tables.d.ts","sourceRoot":"","sources":["../../src/blog/blog-tables.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2DH;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkDnD;AAED,oFAAoF;AACpF,eAAO,MAAM,YAAY,QAuCjB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=blog-tables.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blog-tables.test.d.ts","sourceRoot":"","sources":["../../src/blog/blog-tables.test.ts"],"names":[],"mappings":""}
@@ -77,5 +77,8 @@ export type { ClusterNavigationProps } from './ClusterNavigation';
77
77
  */
78
78
  export type { ClusterLandingPageProps } from './ClusterLandingPage';
79
79
  export * from './types';
80
+ export { blogCategorySlug, createBlogRoutes, resolveBlogPostUrl, resolveBlogUrl } from './routes';
81
+ export type { BlogRoutePost, BlogRoutingOptions } from './routes';
82
+ export { resolveBlogArtwork } from './artwork';
80
83
  export { addExternalLinkTargets, normalizeSiteHost, resolveBlogSiteUrl, } from './processBlogHtml';
81
84
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blog/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC/E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAExG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAEjE;;;;;;;;;;;;;;;GAeG;AACH,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAGnE,cAAc,SAAS,CAAA;AAGvB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blog/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC/E,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAExG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAEjE;;;;;;;;;;;;;;;GAeG;AACH,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAGnE,cAAc,SAAS,CAAA;AAEvB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACjG,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAG9C,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA"}
@@ -3,9 +3,9 @@
3
3
 
4
4
  var chunkGQF6QAQS_js = require('../chunk-GQF6QAQS.js');
5
5
  var chunkDO6ATNLN_js = require('../chunk-DO6ATNLN.js');
6
- var chunkA3NNUKFA_js = require('../chunk-A3NNUKFA.js');
6
+ var chunkHX3BRMOX_js = require('../chunk-HX3BRMOX.js');
7
7
  require('../chunk-HX6ZG3PP.js');
8
- var chunkTPL2IHFI_js = require('../chunk-TPL2IHFI.js');
8
+ var chunkLC7AM4J5_js = require('../chunk-LC7AM4J5.js');
9
9
  var chunkJ7QI3GDX_js = require('../chunk-J7QI3GDX.js');
10
10
  require('../chunk-SNAQBZPT.js');
11
11
  var React = require('react');
@@ -15,7 +15,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
15
15
 
16
16
  var React__default = /*#__PURE__*/_interopDefault(React);
17
17
 
18
- var ManagedNewsletterForm = React__default.default.lazy(() => import('../ManagedNewsletterForm-PIVJTU5L.js'));
18
+ var ManagedNewsletterForm = React__default.default.lazy(() => import('../ManagedNewsletterForm-AAHH63KT.js'));
19
19
  function NewsletterWidget({
20
20
  title = "Subscribe to Our Newsletter",
21
21
  description = "Get the latest posts delivered straight to your inbox.",
@@ -206,7 +206,7 @@ function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock
206
206
  author.company ? ` at ${author.company}` : ""
207
207
  ] }),
208
208
  showBio && author.bio && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: "4px 0", color: "var(--sk-text-secondary)", fontSize: 14 }, children: author.bio }),
209
- showSocial && chunkA3NNUKFA_js.getAuthorSocialLinks(author).length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: 12, marginTop: 8 }, children: chunkA3NNUKFA_js.getAuthorSocialLinks(author).map((link) => /* @__PURE__ */ jsxRuntime.jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", children: link.label }, link.label)) })
209
+ showSocial && chunkHX3BRMOX_js.getAuthorSocialLinks(author).length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: 12, marginTop: 8 }, children: chunkHX3BRMOX_js.getAuthorSocialLinks(author).map((link) => /* @__PURE__ */ jsxRuntime.jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", children: link.label }, link.label)) })
210
210
  ] })
211
211
  ] }),
212
212
  showTrustBlock && /* @__PURE__ */ jsxRuntime.jsx(TrustBlock, { author })
@@ -267,7 +267,7 @@ function AuthorHero({ author }) {
267
267
  );
268
268
  }
269
269
  function SocialLinks({ author }) {
270
- const links = chunkA3NNUKFA_js.getAuthorSocialLinks(author);
270
+ const links = chunkHX3BRMOX_js.getAuthorSocialLinks(author);
271
271
  if (links.length === 0) return null;
272
272
  return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: 16, marginTop: 16 }, children: links.map((link) => /* @__PURE__ */ jsxRuntime.jsx(
273
273
  "a",
@@ -293,8 +293,8 @@ function SocialLinks({ author }) {
293
293
  link.label
294
294
  )) });
295
295
  }
296
- function PostCard({ post, basePath }) {
297
- const href = `${basePath}/${post.slug}`;
296
+ function PostCard({ post, href }) {
297
+ const artwork = chunkLC7AM4J5_js.resolveBlogArtwork(post);
298
298
  const date = post.published_at ? new Date(post.published_at).toLocaleDateString("en-US", { year: "numeric", month: "short", day: "numeric" }) : null;
299
299
  return /* @__PURE__ */ jsxRuntime.jsxs(
300
300
  "article",
@@ -309,12 +309,13 @@ function PostCard({ post, basePath }) {
309
309
  flexDirection: "column"
310
310
  },
311
311
  children: [
312
- post.featured_image && /* @__PURE__ */ jsxRuntime.jsx("a", { href, style: { display: "block", overflow: "hidden", aspectRatio: "16/9" }, children: /* @__PURE__ */ jsxRuntime.jsx(
312
+ artwork.src && /* @__PURE__ */ jsxRuntime.jsx("a", { href, style: { display: "block", overflow: "hidden", aspectRatio: artwork.composed ? void 0 : "16/9" }, children: /* @__PURE__ */ jsxRuntime.jsx(
313
313
  "img",
314
314
  {
315
- src: post.featured_image,
316
- alt: post.featured_image_alt || post.title,
317
- style: { width: "100%", height: "100%", objectFit: "cover" },
315
+ src: artwork.src,
316
+ alt: artwork.alt,
317
+ "data-sk-composed-card": artwork.composed || void 0,
318
+ style: { width: "100%", height: "100%", objectFit: "cover", ...chunkLC7AM4J5_js.blogArtworkImageStyle(artwork) },
318
319
  loading: "lazy"
319
320
  }
320
321
  ) }),
@@ -322,8 +323,8 @@ function PostCard({ post, basePath }) {
322
323
  date && /* @__PURE__ */ jsxRuntime.jsx("time", { style: { fontSize: 12, color: "var(--sk-text-tertiary, #6b7280)", marginBottom: 6 }, children: date }),
323
324
  /* @__PURE__ */ jsxRuntime.jsx("a", { href, style: { textDecoration: "none", color: "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { margin: "0 0 8px", fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: "var(--sk-text-primary, #111827)" }, children: post.title }) }),
324
325
  post.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: 0, fontSize: 14, lineHeight: 1.6, color: "var(--sk-text-secondary, #4b5563)", flex: 1 }, children: post.excerpt }),
325
- chunkA3NNUKFA_js.readingTimeMinutes(post) && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: 12, color: "var(--sk-text-tertiary, #6b7280)", marginTop: 12 }, children: [
326
- chunkA3NNUKFA_js.readingTimeMinutes(post),
326
+ chunkHX3BRMOX_js.readingTimeMinutes(post) && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: 12, color: "var(--sk-text-tertiary, #6b7280)", marginTop: 12 }, children: [
327
+ chunkHX3BRMOX_js.readingTimeMinutes(post),
327
328
  " min read"
328
329
  ] })
329
330
  ] })
@@ -331,8 +332,9 @@ function PostCard({ post, basePath }) {
331
332
  }
332
333
  );
333
334
  }
334
- function AuthorPage({ author, posts, basePath = "/blog" }) {
335
- const schema = chunkTPL2IHFI_js.generateAuthorSchema(author);
335
+ function AuthorPage({ author, posts, basePath, routing }) {
336
+ const routes = chunkLC7AM4J5_js.createBlogRoutes({ basePath, ...routing });
337
+ const schema = chunkLC7AM4J5_js.generateAuthorSchema(author);
336
338
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-author-page", children: [
337
339
  /* @__PURE__ */ jsxRuntime.jsx(
338
340
  "script",
@@ -362,7 +364,7 @@ function AuthorPage({ author, posts, basePath = "/blog" }) {
362
364
  gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
363
365
  gap: 24
364
366
  },
365
- children: posts.map((post) => /* @__PURE__ */ jsxRuntime.jsx(PostCard, { post, basePath }, post.id))
367
+ children: posts.map((post) => /* @__PURE__ */ jsxRuntime.jsx(PostCard, { post, href: routes.post(post) }, post.id))
366
368
  }
367
369
  )
368
370
  ] })
@@ -455,59 +457,79 @@ Object.defineProperty(exports, "BlogFAQ", {
455
457
  });
456
458
  Object.defineProperty(exports, "BlogLayout", {
457
459
  enumerable: true,
458
- get: function () { return chunkA3NNUKFA_js.BlogLayout; }
460
+ get: function () { return chunkHX3BRMOX_js.BlogLayout; }
459
461
  });
460
462
  Object.defineProperty(exports, "BlogList", {
461
463
  enumerable: true,
462
- get: function () { return chunkA3NNUKFA_js.BlogList; }
464
+ get: function () { return chunkHX3BRMOX_js.BlogList; }
463
465
  });
464
466
  Object.defineProperty(exports, "BlogPage", {
465
467
  enumerable: true,
466
- get: function () { return chunkA3NNUKFA_js.BlogPage; }
468
+ get: function () { return chunkHX3BRMOX_js.BlogPage; }
467
469
  });
468
470
  Object.defineProperty(exports, "BlogPost", {
469
471
  enumerable: true,
470
- get: function () { return chunkA3NNUKFA_js.BlogPost; }
472
+ get: function () { return chunkHX3BRMOX_js.BlogPost; }
471
473
  });
472
474
  Object.defineProperty(exports, "BlogPostPage", {
473
475
  enumerable: true,
474
- get: function () { return chunkA3NNUKFA_js.BlogPostPage; }
476
+ get: function () { return chunkHX3BRMOX_js.BlogPostPage; }
475
477
  });
476
478
  Object.defineProperty(exports, "BlogSidebar", {
477
479
  enumerable: true,
478
- get: function () { return chunkA3NNUKFA_js.BlogSidebar; }
480
+ get: function () { return chunkHX3BRMOX_js.BlogSidebar; }
479
481
  });
480
482
  Object.defineProperty(exports, "CategoryPage", {
481
483
  enumerable: true,
482
- get: function () { return chunkA3NNUKFA_js.CategoryPage; }
484
+ get: function () { return chunkHX3BRMOX_js.CategoryPage; }
483
485
  });
484
486
  Object.defineProperty(exports, "ClusterNavigation", {
485
487
  enumerable: true,
486
- get: function () { return chunkA3NNUKFA_js.ClusterNavigation; }
488
+ get: function () { return chunkHX3BRMOX_js.ClusterNavigation; }
487
489
  });
488
490
  Object.defineProperty(exports, "RelatedPosts", {
489
491
  enumerable: true,
490
- get: function () { return chunkA3NNUKFA_js.RelatedPosts; }
492
+ get: function () { return chunkHX3BRMOX_js.RelatedPosts; }
491
493
  });
492
494
  Object.defineProperty(exports, "ServiceCallout", {
493
495
  enumerable: true,
494
- get: function () { return chunkA3NNUKFA_js.ServiceCallout; }
496
+ get: function () { return chunkHX3BRMOX_js.ServiceCallout; }
495
497
  });
496
498
  Object.defineProperty(exports, "ServiceCallouts", {
497
499
  enumerable: true,
498
- get: function () { return chunkA3NNUKFA_js.ServiceCallouts; }
500
+ get: function () { return chunkHX3BRMOX_js.ServiceCallouts; }
499
501
  });
500
502
  Object.defineProperty(exports, "addExternalLinkTargets", {
501
503
  enumerable: true,
502
- get: function () { return chunkA3NNUKFA_js.addExternalLinkTargets; }
504
+ get: function () { return chunkHX3BRMOX_js.addExternalLinkTargets; }
503
505
  });
504
506
  Object.defineProperty(exports, "normalizeSiteHost", {
505
507
  enumerable: true,
506
- get: function () { return chunkA3NNUKFA_js.normalizeSiteHost; }
508
+ get: function () { return chunkHX3BRMOX_js.normalizeSiteHost; }
507
509
  });
508
510
  Object.defineProperty(exports, "resolveBlogSiteUrl", {
509
511
  enumerable: true,
510
- get: function () { return chunkA3NNUKFA_js.resolveBlogSiteUrl; }
512
+ get: function () { return chunkHX3BRMOX_js.resolveBlogSiteUrl; }
513
+ });
514
+ Object.defineProperty(exports, "blogCategorySlug", {
515
+ enumerable: true,
516
+ get: function () { return chunkLC7AM4J5_js.blogCategorySlug; }
517
+ });
518
+ Object.defineProperty(exports, "createBlogRoutes", {
519
+ enumerable: true,
520
+ get: function () { return chunkLC7AM4J5_js.createBlogRoutes; }
521
+ });
522
+ Object.defineProperty(exports, "resolveBlogArtwork", {
523
+ enumerable: true,
524
+ get: function () { return chunkLC7AM4J5_js.resolveBlogArtwork; }
525
+ });
526
+ Object.defineProperty(exports, "resolveBlogPostUrl", {
527
+ enumerable: true,
528
+ get: function () { return chunkLC7AM4J5_js.resolveBlogPostUrl; }
529
+ });
530
+ Object.defineProperty(exports, "resolveBlogUrl", {
531
+ enumerable: true,
532
+ get: function () { return chunkLC7AM4J5_js.resolveBlogUrl; }
511
533
  });
512
534
  exports.AuthorCard = AuthorCard;
513
535
  exports.AuthorPage = AuthorPage;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/blog/NewsletterWidget.tsx","../../src/blog/AuthorCard.tsx","../../src/blog/AuthorPage.tsx","../../src/blog/TableOfContents.tsx"],"names":["React","useState","jsx","Suspense","NewsletterShell","jsxs","getAuthorSocialLinks","readingTimeMinutes","generateAuthorSchema","safeJsonLd","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\n/**\n * @sonordev/site-kit blog — newsletter signup widget\n *\n * Two working modes (the old version rendered a form whose submit handler\n * discarded the email):\n *\n * - `onSubmit`: the site owns delivery — we await the callback.\n * - `formSlug`: the widget drives the managed-forms rail (useForm), so\n * submissions inherit Sonor's newsletter routing (email_subscribers),\n * honeypot, reCAPTCHA, and attribution for free.\n *\n * `onSubmit` wins when both are set. With neither, the widget renders\n * nothing and warns — a dead form that swallows emails must not resurrect.\n *\n * Lives in its own module (not BlogSidebar.tsx) on purpose: it needs hooks,\n * and BlogSidebar is also bundled into the un-stamped server entry\n * blog/server-ui, where hooks would enter the react-server graph.\n */\n\nimport React, { Suspense, useState } from 'react'\nimport { NewsletterShell } from './NewsletterShell'\n\n// Lazy: the managed-forms mode drags the whole forms engine (useForm,\n// submit rail, sonorFetch, site token) — ~10KB gzipped — which most blog\n// consumers never render. The dynamic import keeps it out of the eager\n// blog bundle; tsup stamps the split chunk 'use client'.\nconst ManagedNewsletterForm = React.lazy(() => import('./ManagedNewsletterForm'))\n\nexport interface NewsletterWidgetProps {\n title?: string\n description?: string\n buttonText?: string\n /** Site-owned delivery. Wins over formSlug when both are set. */\n onSubmit?: (email: string) => Promise<void>\n /** Slug of a managed Sonor form (newsletter routing) to submit through. */\n formSlug?: string\n successMessage?: string\n}\n\nexport function NewsletterWidget({\n title = 'Subscribe to Our Newsletter',\n description = 'Get the latest posts delivered straight to your inbox.',\n buttonText = 'Subscribe',\n onSubmit,\n formSlug,\n successMessage = \"You're subscribed — thanks!\",\n}: NewsletterWidgetProps) {\n const [email, setEmail] = useState('')\n const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle')\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n\n if (!onSubmit && formSlug) {\n return (\n <Suspense fallback={null}>\n <ManagedNewsletterForm\n key={formSlug}\n formSlug={formSlug}\n title={title}\n description={description}\n buttonText={buttonText}\n successMessage={successMessage}\n />\n </Suspense>\n )\n }\n\n if (!onSubmit) {\n console.warn(\n '[Blog] NewsletterWidget needs an onSubmit callback or a formSlug — rendering nothing rather than a form that discards emails.'\n )\n return null\n }\n\n return (\n <NewsletterShell\n title={title}\n description={description}\n buttonText={buttonText}\n email={email}\n onEmailChange={setEmail}\n onFormSubmit={(e) => {\n e.preventDefault()\n setStatus('submitting')\n setErrorMessage(null)\n onSubmit(email)\n .then(() => setStatus('success'))\n .catch((err) => {\n setStatus('error')\n setErrorMessage(err instanceof Error ? err.message : null)\n })\n }}\n status={status}\n successMessage={successMessage}\n errorMessage={errorMessage}\n />\n )\n}\n","/**\n * @sonordev/site-kit/blog - Author Card Component\n */\n\nimport React from 'react'\nimport type { AuthorCardProps, BlogAuthor } from './types'\nimport { getAuthorSocialLinks } from './author-social'\n\n// ============================================================================\n// Trust Block (E-E-A-T)\n// ============================================================================\n\nfunction TrustBlock({ author }: { author: BlogAuthor }) {\n const hasYears = typeof author.years_experience === 'number' && author.years_experience > 0\n const hasCredentials = author.credentials && author.credentials.length > 0\n const hasExpertise = author.expertise_areas && author.expertise_areas.length > 0\n const hasPublications = author.featured_publications && author.featured_publications.length > 0\n const hasAwards = author.awards && author.awards.length > 0\n const isVerified = author.is_subject_matter_expert || author.has_verified_credentials\n\n const hasAnything = hasYears || hasCredentials || hasExpertise || hasPublications || hasAwards || isVerified\n if (!hasAnything) return null\n\n return (\n <div\n className=\"sk-author-trust\"\n style={{\n marginTop: 16,\n padding: 16,\n borderRadius: 10,\n border: '1px solid var(--sk-border, #e5e7eb)',\n background: 'var(--sk-surface, #f9fafb)',\n }}\n >\n <h5\n style={{\n margin: '0 0 12px',\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: 'var(--sk-text-tertiary, #6b7280)',\n }}\n >\n Why Trust This Author\n </h5>\n\n {/* Verified badge + years */}\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 8, marginBottom: hasCredentials || hasExpertise || hasPublications || hasAwards ? 12 : 0 }}>\n {isVerified && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(20, 184, 166, 0.1)',\n color: 'rgb(13, 148, 136)',\n border: '1px solid rgba(20, 184, 166, 0.2)',\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n Verified Expert\n </span>\n )}\n {hasYears && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(99, 102, 241, 0.1)',\n color: 'rgb(79, 70, 229)',\n border: '1px solid rgba(99, 102, 241, 0.2)',\n }}\n >\n {author.years_experience}+ Years Experience\n </span>\n )}\n </div>\n\n {/* Credentials */}\n {hasCredentials && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Credentials</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.credentials!.map((c, i) => (\n <li key={i}>{c}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Expertise pills */}\n {hasExpertise && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)', display: 'block', marginBottom: 6 }}>Expertise</span>\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 6 }}>\n {author.expertise_areas!.map((area, i) => (\n <span\n key={i}\n style={{\n padding: '3px 10px',\n borderRadius: 9999,\n fontSize: 12,\n background: 'var(--sk-pill-bg, #e5e7eb)',\n color: 'var(--sk-text-secondary, #374151)',\n }}\n >\n {area}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Featured publications */}\n {hasPublications && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Featured In</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.featured_publications!.map((pub, i) => (\n <li key={i}>{pub}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Awards */}\n {hasAwards && (\n <div>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Awards</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.awards!.map((award, i) => (\n <li key={i}>{award}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// AuthorCard\n// ============================================================================\n\nexport function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock = false, className }: AuthorCardProps) {\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column' as const }}>\n <div style={{ display: 'flex', gap: 16, alignItems: 'flex-start' }}>\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n }}\n />\n )}\n <div>\n <h4 style={{ margin: 0 }}>{author.name}</h4>\n {author.title && (\n <p style={{ margin: '2px 0 0', fontSize: 13, color: 'var(--sk-text-tertiary, #6b7280)' }}>\n {author.title}{author.company ? ` at ${author.company}` : ''}\n </p>\n )}\n {showBio && author.bio && (\n <p style={{ margin: '4px 0', color: 'var(--sk-text-secondary)', fontSize: 14 }}>{author.bio}</p>\n )}\n {showSocial && getAuthorSocialLinks(author).length > 0 && (\n <div style={{ display: 'flex', gap: 12, marginTop: 8 }}>\n {getAuthorSocialLinks(author).map((link) => (\n <a key={link.label} href={link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n {link.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {showTrustBlock && <TrustBlock author={author} />}\n </div>\n )\n}\n\nexport { TrustBlock }\n","/**\n * @sonordev/site-kit/blog - Author Page Component (Server Component)\n *\n * Full author profile page with hero, trust block, social links, and articles grid.\n */\n\nimport React from 'react'\nimport type { AuthorPageProps, BlogAuthor, BlogPost } from './types'\nimport { TrustBlock } from './AuthorCard'\n// From './author-schema', NOT './server-core' — this component is exported from\n// the client-stamped `@sonordev/site-kit/blog` barrel, and server-core's fetches\n// carry the raw `x-api-key`. See ./author-schema for the full rationale.\nimport { generateAuthorSchema } from './author-schema'\nimport { readingTimeMinutes } from './reading-time'\nimport { getAuthorSocialLinks } from './author-social'\nimport { safeJsonLd } from '../seo/safeJsonLd'\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nfunction AuthorHero({ author }: { author: BlogAuthor }) {\n return (\n <header\n className=\"sk-author-hero\"\n style={{\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n textAlign: 'center' as const,\n padding: '48px 24px 32px',\n }}\n >\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n width={120}\n height={120}\n style={{\n width: 120,\n height: 120,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n marginBottom: 20,\n border: '3px solid var(--sk-border, #e5e7eb)',\n }}\n />\n )}\n <h1 style={{ margin: 0, fontSize: 32, fontWeight: 700, color: 'var(--sk-text-primary, #111827)' }}>\n {author.name}\n </h1>\n {(author.title || author.company) && (\n <p style={{ margin: '6px 0 0', fontSize: 16, color: 'var(--sk-text-secondary, #4b5563)' }}>\n {author.title}{author.title && author.company ? ' at ' : ''}{author.company}\n </p>\n )}\n {author.bio && (\n <p\n style={{\n margin: '16px auto 0',\n maxWidth: 640,\n fontSize: 15,\n lineHeight: 1.7,\n color: 'var(--sk-text-secondary, #4b5563)',\n }}\n >\n {author.bio}\n </p>\n )}\n\n {/* Social links */}\n <SocialLinks author={author} />\n </header>\n )\n}\n\nfunction SocialLinks({ author }: { author: BlogAuthor }) {\n const links = getAuthorSocialLinks(author)\n\n if (links.length === 0) return null\n\n return (\n <div style={{ display: 'flex', gap: 16, marginTop: 16 }}>\n {links.map((link) => (\n <a\n key={link.label}\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 14px',\n borderRadius: 8,\n fontSize: 13,\n fontWeight: 500,\n color: 'rgb(13, 148, 136)',\n background: 'rgba(20, 184, 166, 0.08)',\n border: '1px solid rgba(20, 184, 166, 0.15)',\n textDecoration: 'none',\n }}\n >\n {link.label}\n </a>\n ))}\n </div>\n )\n}\n\nfunction PostCard({ post, basePath }: { post: BlogPost; basePath: string }) {\n const href = `${basePath}/${post.slug}`\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })\n : null\n\n return (\n <article\n className=\"sk-author-post-card\"\n style={{\n borderRadius: 12,\n border: '1px solid var(--sk-border, #e5e7eb)',\n overflow: 'hidden',\n background: 'var(--sk-card-bg, #fff)',\n display: 'flex',\n flexDirection: 'column' as const,\n }}\n >\n {post.featured_image && (\n <a href={href} style={{ display: 'block', overflow: 'hidden', aspectRatio: '16/9' }}>\n <img\n src={post.featured_image}\n alt={post.featured_image_alt || post.title}\n style={{ width: '100%', height: '100%', objectFit: 'cover' as const }}\n loading=\"lazy\"\n />\n </a>\n )}\n <div style={{ padding: 20, flex: 1, display: 'flex', flexDirection: 'column' as const }}>\n {date && (\n <time style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginBottom: 6 }}>{date}</time>\n )}\n <a href={href} style={{ textDecoration: 'none', color: 'inherit' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: 'var(--sk-text-primary, #111827)' }}>\n {post.title}\n </h3>\n </a>\n {post.excerpt && (\n <p style={{ margin: 0, fontSize: 14, lineHeight: 1.6, color: 'var(--sk-text-secondary, #4b5563)', flex: 1 }}>\n {post.excerpt}\n </p>\n )}\n {readingTimeMinutes(post) && (\n <span style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginTop: 12 }}>\n {readingTimeMinutes(post)} min read\n </span>\n )}\n </div>\n </article>\n )\n}\n\n// ============================================================================\n// AuthorPage\n// ============================================================================\n\nexport function AuthorPage({ author, posts, basePath = '/blog' }: AuthorPageProps) {\n const schema = generateAuthorSchema(author)\n\n return (\n <div className=\"sk-author-page\">\n {/* JSON-LD */}\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: safeJsonLd(schema) }}\n />\n\n {/* Hero */}\n <AuthorHero author={author} />\n\n {/* Trust block */}\n <div style={{ maxWidth: 640, margin: '0 auto', padding: '0 24px' }}>\n <TrustBlock author={author} />\n </div>\n\n {/* Articles */}\n {posts.length > 0 && (\n <section style={{ maxWidth: 1080, margin: '40px auto 0', padding: '0 24px 48px' }}>\n <h2 style={{ fontSize: 22, fontWeight: 600, marginBottom: 24, color: 'var(--sk-text-primary, #111827)' }}>\n Articles by {author.name}\n {typeof author.post_count === 'number' && (\n <span style={{ fontWeight: 400, fontSize: 15, color: 'var(--sk-text-tertiary, #6b7280)', marginLeft: 8 }}>\n ({author.post_count})\n </span>\n )}\n </h2>\n <div\n className=\"sk-author-posts-grid\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n gap: 24,\n }}\n >\n {posts.map((post) => (\n <PostCard key={post.id} post={post} basePath={basePath} />\n ))}\n </div>\n </section>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Table of Contents Component\n */\n\n'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { TableOfContentsProps } from './types'\n\ninterface TocItem {\n id: string\n text: string\n level: number\n}\n\nfunction parseHeadings(content: string): TocItem[] {\n // Extract headings from HTML content\n const headingRegex = /<h([2-4])[^>]*id=\"([^\"]*)\"[^>]*>(.*?)<\\/h[2-4]>/gi\n const items: TocItem[] = []\n let match\n\n while ((match = headingRegex.exec(content)) !== null) {\n items.push({\n level: parseInt(match[1]),\n id: match[2],\n text: match[3].replace(/<[^>]*>/g, ''), // Strip any nested HTML\n })\n }\n\n return items\n}\n\nexport function TableOfContents({\n content,\n className,\n maxDepth = 3,\n}: TableOfContentsProps) {\n const [activeId, setActiveId] = useState<string>('')\n const items = parseHeadings(content).filter((item) => item.level <= maxDepth)\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id)\n }\n })\n },\n {\n rootMargin: '-20% 0% -35% 0%',\n threshold: 0,\n }\n )\n\n // Observe all headings\n items.forEach((item) => {\n const element = document.getElementById(item.id)\n if (element) {\n observer.observe(element)\n }\n })\n\n return () => observer.disconnect()\n }, [items])\n\n if (items.length === 0) return null\n\n const handleClick = (id: string) => {\n const element = document.getElementById(id)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n return (\n <nav className={className} aria-label=\"Table of contents\">\n <h4 style={{ margin: '0 0 12px', fontSize: 14, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>\n On This Page\n </h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {items.map((item) => (\n <li\n key={item.id}\n style={{\n paddingLeft: (item.level - 2) * 12,\n marginBottom: 8,\n }}\n >\n <button\n onClick={() => handleClick(item.id)}\n style={{\n all: 'unset',\n cursor: 'pointer',\n fontSize: 14,\n color: activeId === item.id ? 'var(--sk-primary-hover)' : 'var(--sk-text-secondary)',\n fontWeight: activeId === item.id ? 500 : 400,\n transition: 'color 0.2s',\n }}\n >\n {item.text}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/blog/NewsletterWidget.tsx","../../src/blog/AuthorCard.tsx","../../src/blog/AuthorPage.tsx","../../src/blog/TableOfContents.tsx"],"names":["React","useState","jsx","Suspense","NewsletterShell","jsxs","getAuthorSocialLinks","resolveBlogArtwork","blogArtworkImageStyle","readingTimeMinutes","createBlogRoutes","generateAuthorSchema","safeJsonLd","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\n/**\n * @sonordev/site-kit blog — newsletter signup widget\n *\n * Two working modes (the old version rendered a form whose submit handler\n * discarded the email):\n *\n * - `onSubmit`: the site owns delivery — we await the callback.\n * - `formSlug`: the widget drives the managed-forms rail (useForm), so\n * submissions inherit Sonor's newsletter routing (email_subscribers),\n * honeypot, reCAPTCHA, and attribution for free.\n *\n * `onSubmit` wins when both are set. With neither, the widget renders\n * nothing and warns — a dead form that swallows emails must not resurrect.\n *\n * Lives in its own module (not BlogSidebar.tsx) on purpose: it needs hooks,\n * and BlogSidebar is also bundled into the un-stamped server entry\n * blog/server-ui, where hooks would enter the react-server graph.\n */\n\nimport React, { Suspense, useState } from 'react'\nimport { NewsletterShell } from './NewsletterShell'\n\n// Lazy: the managed-forms mode drags the whole forms engine (useForm,\n// submit rail, sonorFetch, site token) — ~10KB gzipped — which most blog\n// consumers never render. The dynamic import keeps it out of the eager\n// blog bundle; tsup stamps the split chunk 'use client'.\nconst ManagedNewsletterForm = React.lazy(() => import('./ManagedNewsletterForm'))\n\nexport interface NewsletterWidgetProps {\n title?: string\n description?: string\n buttonText?: string\n /** Site-owned delivery. Wins over formSlug when both are set. */\n onSubmit?: (email: string) => Promise<void>\n /** Slug of a managed Sonor form (newsletter routing) to submit through. */\n formSlug?: string\n successMessage?: string\n}\n\nexport function NewsletterWidget({\n title = 'Subscribe to Our Newsletter',\n description = 'Get the latest posts delivered straight to your inbox.',\n buttonText = 'Subscribe',\n onSubmit,\n formSlug,\n successMessage = \"You're subscribed — thanks!\",\n}: NewsletterWidgetProps) {\n const [email, setEmail] = useState('')\n const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle')\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n\n if (!onSubmit && formSlug) {\n return (\n <Suspense fallback={null}>\n <ManagedNewsletterForm\n key={formSlug}\n formSlug={formSlug}\n title={title}\n description={description}\n buttonText={buttonText}\n successMessage={successMessage}\n />\n </Suspense>\n )\n }\n\n if (!onSubmit) {\n console.warn(\n '[Blog] NewsletterWidget needs an onSubmit callback or a formSlug — rendering nothing rather than a form that discards emails.'\n )\n return null\n }\n\n return (\n <NewsletterShell\n title={title}\n description={description}\n buttonText={buttonText}\n email={email}\n onEmailChange={setEmail}\n onFormSubmit={(e) => {\n e.preventDefault()\n setStatus('submitting')\n setErrorMessage(null)\n onSubmit(email)\n .then(() => setStatus('success'))\n .catch((err) => {\n setStatus('error')\n setErrorMessage(err instanceof Error ? err.message : null)\n })\n }}\n status={status}\n successMessage={successMessage}\n errorMessage={errorMessage}\n />\n )\n}\n","/**\n * @sonordev/site-kit/blog - Author Card Component\n */\n\nimport React from 'react'\nimport type { AuthorCardProps, BlogAuthor } from './types'\nimport { getAuthorSocialLinks } from './author-social'\n\n// ============================================================================\n// Trust Block (E-E-A-T)\n// ============================================================================\n\nfunction TrustBlock({ author }: { author: BlogAuthor }) {\n const hasYears = typeof author.years_experience === 'number' && author.years_experience > 0\n const hasCredentials = author.credentials && author.credentials.length > 0\n const hasExpertise = author.expertise_areas && author.expertise_areas.length > 0\n const hasPublications = author.featured_publications && author.featured_publications.length > 0\n const hasAwards = author.awards && author.awards.length > 0\n const isVerified = author.is_subject_matter_expert || author.has_verified_credentials\n\n const hasAnything = hasYears || hasCredentials || hasExpertise || hasPublications || hasAwards || isVerified\n if (!hasAnything) return null\n\n return (\n <div\n className=\"sk-author-trust\"\n style={{\n marginTop: 16,\n padding: 16,\n borderRadius: 10,\n border: '1px solid var(--sk-border, #e5e7eb)',\n background: 'var(--sk-surface, #f9fafb)',\n }}\n >\n <h5\n style={{\n margin: '0 0 12px',\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: 'var(--sk-text-tertiary, #6b7280)',\n }}\n >\n Why Trust This Author\n </h5>\n\n {/* Verified badge + years */}\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 8, marginBottom: hasCredentials || hasExpertise || hasPublications || hasAwards ? 12 : 0 }}>\n {isVerified && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(20, 184, 166, 0.1)',\n color: 'rgb(13, 148, 136)',\n border: '1px solid rgba(20, 184, 166, 0.2)',\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n Verified Expert\n </span>\n )}\n {hasYears && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(99, 102, 241, 0.1)',\n color: 'rgb(79, 70, 229)',\n border: '1px solid rgba(99, 102, 241, 0.2)',\n }}\n >\n {author.years_experience}+ Years Experience\n </span>\n )}\n </div>\n\n {/* Credentials */}\n {hasCredentials && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Credentials</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.credentials!.map((c, i) => (\n <li key={i}>{c}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Expertise pills */}\n {hasExpertise && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)', display: 'block', marginBottom: 6 }}>Expertise</span>\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 6 }}>\n {author.expertise_areas!.map((area, i) => (\n <span\n key={i}\n style={{\n padding: '3px 10px',\n borderRadius: 9999,\n fontSize: 12,\n background: 'var(--sk-pill-bg, #e5e7eb)',\n color: 'var(--sk-text-secondary, #374151)',\n }}\n >\n {area}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Featured publications */}\n {hasPublications && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Featured In</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.featured_publications!.map((pub, i) => (\n <li key={i}>{pub}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Awards */}\n {hasAwards && (\n <div>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Awards</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.awards!.map((award, i) => (\n <li key={i}>{award}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// AuthorCard\n// ============================================================================\n\nexport function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock = false, className }: AuthorCardProps) {\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column' as const }}>\n <div style={{ display: 'flex', gap: 16, alignItems: 'flex-start' }}>\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n }}\n />\n )}\n <div>\n <h4 style={{ margin: 0 }}>{author.name}</h4>\n {author.title && (\n <p style={{ margin: '2px 0 0', fontSize: 13, color: 'var(--sk-text-tertiary, #6b7280)' }}>\n {author.title}{author.company ? ` at ${author.company}` : ''}\n </p>\n )}\n {showBio && author.bio && (\n <p style={{ margin: '4px 0', color: 'var(--sk-text-secondary)', fontSize: 14 }}>{author.bio}</p>\n )}\n {showSocial && getAuthorSocialLinks(author).length > 0 && (\n <div style={{ display: 'flex', gap: 12, marginTop: 8 }}>\n {getAuthorSocialLinks(author).map((link) => (\n <a key={link.label} href={link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n {link.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {showTrustBlock && <TrustBlock author={author} />}\n </div>\n )\n}\n\nexport { TrustBlock }\n","/**\n * @sonordev/site-kit/blog - Author Page Component (Server Component)\n *\n * Full author profile page with hero, trust block, social links, and articles grid.\n */\n\nimport React from 'react'\nimport type { AuthorPageProps, BlogAuthor, BlogPost } from './types'\nimport { TrustBlock } from './AuthorCard'\n// From './author-schema', NOT './server-core' — this component is exported from\n// the client-stamped `@sonordev/site-kit/blog` barrel, and server-core's fetches\n// carry the raw `x-api-key`. See ./author-schema for the full rationale.\nimport { generateAuthorSchema } from './author-schema'\nimport { readingTimeMinutes } from './reading-time'\nimport { getAuthorSocialLinks } from './author-social'\nimport { safeJsonLd } from '../seo/safeJsonLd'\nimport { blogArtworkImageStyle, resolveBlogArtwork } from './artwork'\nimport { createBlogRoutes } from './routes'\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nfunction AuthorHero({ author }: { author: BlogAuthor }) {\n return (\n <header\n className=\"sk-author-hero\"\n style={{\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n textAlign: 'center' as const,\n padding: '48px 24px 32px',\n }}\n >\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n width={120}\n height={120}\n style={{\n width: 120,\n height: 120,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n marginBottom: 20,\n border: '3px solid var(--sk-border, #e5e7eb)',\n }}\n />\n )}\n <h1 style={{ margin: 0, fontSize: 32, fontWeight: 700, color: 'var(--sk-text-primary, #111827)' }}>\n {author.name}\n </h1>\n {(author.title || author.company) && (\n <p style={{ margin: '6px 0 0', fontSize: 16, color: 'var(--sk-text-secondary, #4b5563)' }}>\n {author.title}{author.title && author.company ? ' at ' : ''}{author.company}\n </p>\n )}\n {author.bio && (\n <p\n style={{\n margin: '16px auto 0',\n maxWidth: 640,\n fontSize: 15,\n lineHeight: 1.7,\n color: 'var(--sk-text-secondary, #4b5563)',\n }}\n >\n {author.bio}\n </p>\n )}\n\n {/* Social links */}\n <SocialLinks author={author} />\n </header>\n )\n}\n\nfunction SocialLinks({ author }: { author: BlogAuthor }) {\n const links = getAuthorSocialLinks(author)\n\n if (links.length === 0) return null\n\n return (\n <div style={{ display: 'flex', gap: 16, marginTop: 16 }}>\n {links.map((link) => (\n <a\n key={link.label}\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 14px',\n borderRadius: 8,\n fontSize: 13,\n fontWeight: 500,\n color: 'rgb(13, 148, 136)',\n background: 'rgba(20, 184, 166, 0.08)',\n border: '1px solid rgba(20, 184, 166, 0.15)',\n textDecoration: 'none',\n }}\n >\n {link.label}\n </a>\n ))}\n </div>\n )\n}\n\nfunction PostCard({ post, href }: { post: BlogPost; href: string }) {\n const artwork = resolveBlogArtwork(post)\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })\n : null\n\n return (\n <article\n className=\"sk-author-post-card\"\n style={{\n borderRadius: 12,\n border: '1px solid var(--sk-border, #e5e7eb)',\n overflow: 'hidden',\n background: 'var(--sk-card-bg, #fff)',\n display: 'flex',\n flexDirection: 'column' as const,\n }}\n >\n {artwork.src && (\n <a href={href} style={{ display: 'block', overflow: 'hidden', aspectRatio: artwork.composed ? undefined : '16/9' }}>\n <img\n src={artwork.src}\n alt={artwork.alt}\n data-sk-composed-card={artwork.composed || undefined}\n style={{ width: '100%', height: '100%', objectFit: 'cover' as const, ...blogArtworkImageStyle(artwork) }}\n loading=\"lazy\"\n />\n </a>\n )}\n <div style={{ padding: 20, flex: 1, display: 'flex', flexDirection: 'column' as const }}>\n {date && (\n <time style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginBottom: 6 }}>{date}</time>\n )}\n <a href={href} style={{ textDecoration: 'none', color: 'inherit' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: 'var(--sk-text-primary, #111827)' }}>\n {post.title}\n </h3>\n </a>\n {post.excerpt && (\n <p style={{ margin: 0, fontSize: 14, lineHeight: 1.6, color: 'var(--sk-text-secondary, #4b5563)', flex: 1 }}>\n {post.excerpt}\n </p>\n )}\n {readingTimeMinutes(post) && (\n <span style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginTop: 12 }}>\n {readingTimeMinutes(post)} min read\n </span>\n )}\n </div>\n </article>\n )\n}\n\n// ============================================================================\n// AuthorPage\n// ============================================================================\n\nexport function AuthorPage({ author, posts, basePath, routing }: AuthorPageProps) {\n const routes = createBlogRoutes({ basePath, ...routing })\n const schema = generateAuthorSchema(author)\n\n return (\n <div className=\"sk-author-page\">\n {/* JSON-LD */}\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: safeJsonLd(schema) }}\n />\n\n {/* Hero */}\n <AuthorHero author={author} />\n\n {/* Trust block */}\n <div style={{ maxWidth: 640, margin: '0 auto', padding: '0 24px' }}>\n <TrustBlock author={author} />\n </div>\n\n {/* Articles */}\n {posts.length > 0 && (\n <section style={{ maxWidth: 1080, margin: '40px auto 0', padding: '0 24px 48px' }}>\n <h2 style={{ fontSize: 22, fontWeight: 600, marginBottom: 24, color: 'var(--sk-text-primary, #111827)' }}>\n Articles by {author.name}\n {typeof author.post_count === 'number' && (\n <span style={{ fontWeight: 400, fontSize: 15, color: 'var(--sk-text-tertiary, #6b7280)', marginLeft: 8 }}>\n ({author.post_count})\n </span>\n )}\n </h2>\n <div\n className=\"sk-author-posts-grid\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n gap: 24,\n }}\n >\n {posts.map((post) => (\n <PostCard key={post.id} post={post} href={routes.post(post)} />\n ))}\n </div>\n </section>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Table of Contents Component\n */\n\n'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { TableOfContentsProps } from './types'\n\ninterface TocItem {\n id: string\n text: string\n level: number\n}\n\nfunction parseHeadings(content: string): TocItem[] {\n // Extract headings from HTML content\n const headingRegex = /<h([2-4])[^>]*id=\"([^\"]*)\"[^>]*>(.*?)<\\/h[2-4]>/gi\n const items: TocItem[] = []\n let match\n\n while ((match = headingRegex.exec(content)) !== null) {\n items.push({\n level: parseInt(match[1]),\n id: match[2],\n text: match[3].replace(/<[^>]*>/g, ''), // Strip any nested HTML\n })\n }\n\n return items\n}\n\nexport function TableOfContents({\n content,\n className,\n maxDepth = 3,\n}: TableOfContentsProps) {\n const [activeId, setActiveId] = useState<string>('')\n const items = parseHeadings(content).filter((item) => item.level <= maxDepth)\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id)\n }\n })\n },\n {\n rootMargin: '-20% 0% -35% 0%',\n threshold: 0,\n }\n )\n\n // Observe all headings\n items.forEach((item) => {\n const element = document.getElementById(item.id)\n if (element) {\n observer.observe(element)\n }\n })\n\n return () => observer.disconnect()\n }, [items])\n\n if (items.length === 0) return null\n\n const handleClick = (id: string) => {\n const element = document.getElementById(id)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n return (\n <nav className={className} aria-label=\"Table of contents\">\n <h4 style={{ margin: '0 0 12px', fontSize: 14, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>\n On This Page\n </h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {items.map((item) => (\n <li\n key={item.id}\n style={{\n paddingLeft: (item.level - 2) * 12,\n marginBottom: 8,\n }}\n >\n <button\n onClick={() => handleClick(item.id)}\n style={{\n all: 'unset',\n cursor: 'pointer',\n fontSize: 14,\n color: activeId === item.id ? 'var(--sk-primary-hover)' : 'var(--sk-text-secondary)',\n fontWeight: activeId === item.id ? 500 : 400,\n transition: 'color 0.2s',\n }}\n >\n {item.text}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )\n}\n"]}
@@ -1,16 +1,17 @@
1
1
  'use client';
2
2
  export { BlogFAQ } from '../chunk-O237KKCX.mjs';
3
3
  import { NewsletterShell } from '../chunk-AK6JZ3OE.mjs';
4
- import { getAuthorSocialLinks, readingTimeMinutes } from '../chunk-67CHHDBL.mjs';
5
- export { BlogLayout, BlogList, BlogPage, BlogPost, BlogPostPage, BlogSidebar, CategoryPage, ClusterNavigation, RelatedPosts, ServiceCallout, ServiceCallouts, addExternalLinkTargets, normalizeSiteHost, resolveBlogSiteUrl } from '../chunk-67CHHDBL.mjs';
4
+ import { getAuthorSocialLinks, readingTimeMinutes } from '../chunk-RMMHWSPP.mjs';
5
+ export { BlogLayout, BlogList, BlogPage, BlogPost, BlogPostPage, BlogSidebar, CategoryPage, ClusterNavigation, RelatedPosts, ServiceCallout, ServiceCallouts, addExternalLinkTargets, normalizeSiteHost, resolveBlogSiteUrl } from '../chunk-RMMHWSPP.mjs';
6
6
  import '../chunk-YFX3Q56O.mjs';
7
- import { generateAuthorSchema } from '../chunk-CGCYZJYX.mjs';
7
+ import { createBlogRoutes, generateAuthorSchema, resolveBlogArtwork, blogArtworkImageStyle } from '../chunk-4B4S56WJ.mjs';
8
+ export { blogCategorySlug, createBlogRoutes, resolveBlogArtwork, resolveBlogPostUrl, resolveBlogUrl } from '../chunk-4B4S56WJ.mjs';
8
9
  import { safeJsonLd } from '../chunk-662YHKWW.mjs';
9
10
  import '../chunk-BEXTDHO4.mjs';
10
11
  import React, { useState, Suspense, useEffect } from 'react';
11
12
  import { jsx, jsxs } from 'react/jsx-runtime';
12
13
 
13
- var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-4AVKTZ2A.mjs'));
14
+ var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-HZKTNWLW.mjs'));
14
15
  function NewsletterWidget({
15
16
  title = "Subscribe to Our Newsletter",
16
17
  description = "Get the latest posts delivered straight to your inbox.",
@@ -288,8 +289,8 @@ function SocialLinks({ author }) {
288
289
  link.label
289
290
  )) });
290
291
  }
291
- function PostCard({ post, basePath }) {
292
- const href = `${basePath}/${post.slug}`;
292
+ function PostCard({ post, href }) {
293
+ const artwork = resolveBlogArtwork(post);
293
294
  const date = post.published_at ? new Date(post.published_at).toLocaleDateString("en-US", { year: "numeric", month: "short", day: "numeric" }) : null;
294
295
  return /* @__PURE__ */ jsxs(
295
296
  "article",
@@ -304,12 +305,13 @@ function PostCard({ post, basePath }) {
304
305
  flexDirection: "column"
305
306
  },
306
307
  children: [
307
- post.featured_image && /* @__PURE__ */ jsx("a", { href, style: { display: "block", overflow: "hidden", aspectRatio: "16/9" }, children: /* @__PURE__ */ jsx(
308
+ artwork.src && /* @__PURE__ */ jsx("a", { href, style: { display: "block", overflow: "hidden", aspectRatio: artwork.composed ? void 0 : "16/9" }, children: /* @__PURE__ */ jsx(
308
309
  "img",
309
310
  {
310
- src: post.featured_image,
311
- alt: post.featured_image_alt || post.title,
312
- style: { width: "100%", height: "100%", objectFit: "cover" },
311
+ src: artwork.src,
312
+ alt: artwork.alt,
313
+ "data-sk-composed-card": artwork.composed || void 0,
314
+ style: { width: "100%", height: "100%", objectFit: "cover", ...blogArtworkImageStyle(artwork) },
313
315
  loading: "lazy"
314
316
  }
315
317
  ) }),
@@ -326,7 +328,8 @@ function PostCard({ post, basePath }) {
326
328
  }
327
329
  );
328
330
  }
329
- function AuthorPage({ author, posts, basePath = "/blog" }) {
331
+ function AuthorPage({ author, posts, basePath, routing }) {
332
+ const routes = createBlogRoutes({ basePath, ...routing });
330
333
  const schema = generateAuthorSchema(author);
331
334
  return /* @__PURE__ */ jsxs("div", { className: "sk-author-page", children: [
332
335
  /* @__PURE__ */ jsx(
@@ -357,7 +360,7 @@ function AuthorPage({ author, posts, basePath = "/blog" }) {
357
360
  gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
358
361
  gap: 24
359
362
  },
360
- children: posts.map((post) => /* @__PURE__ */ jsx(PostCard, { post, basePath }, post.id))
363
+ children: posts.map((post) => /* @__PURE__ */ jsx(PostCard, { post, href: routes.post(post) }, post.id))
361
364
  }
362
365
  )
363
366
  ] })