@sonordev/site-kit 1.2.7

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 (300) hide show
  1. package/README.md +376 -0
  2. package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
  3. package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
  4. package/dist/analytics/index.d.mts +93 -0
  5. package/dist/analytics/index.d.ts +93 -0
  6. package/dist/analytics/index.js +89 -0
  7. package/dist/analytics/index.js.map +1 -0
  8. package/dist/analytics/index.mjs +71 -0
  9. package/dist/analytics/index.mjs.map +1 -0
  10. package/dist/api-CWtoFJCO.d.mts +137 -0
  11. package/dist/api-CWtoFJCO.d.ts +137 -0
  12. package/dist/blog/index.d.mts +305 -0
  13. package/dist/blog/index.d.ts +305 -0
  14. package/dist/blog/index.js +1578 -0
  15. package/dist/blog/index.js.map +1 -0
  16. package/dist/blog/index.mjs +1562 -0
  17. package/dist/blog/index.mjs.map +1 -0
  18. package/dist/blog/server.d.mts +229 -0
  19. package/dist/blog/server.d.ts +229 -0
  20. package/dist/blog/server.js +692 -0
  21. package/dist/blog/server.js.map +1 -0
  22. package/dist/blog/server.mjs +666 -0
  23. package/dist/blog/server.mjs.map +1 -0
  24. package/dist/chunk-24277A3Q.mjs +968 -0
  25. package/dist/chunk-24277A3Q.mjs.map +1 -0
  26. package/dist/chunk-373TK6TZ.js +321 -0
  27. package/dist/chunk-373TK6TZ.js.map +1 -0
  28. package/dist/chunk-3MYZS6PD.js +30 -0
  29. package/dist/chunk-3MYZS6PD.js.map +1 -0
  30. package/dist/chunk-43GBM4SX.js +283 -0
  31. package/dist/chunk-43GBM4SX.js.map +1 -0
  32. package/dist/chunk-4XPGGLVP.mjs +53 -0
  33. package/dist/chunk-4XPGGLVP.mjs.map +1 -0
  34. package/dist/chunk-622GAQP5.js +2008 -0
  35. package/dist/chunk-622GAQP5.js.map +1 -0
  36. package/dist/chunk-6BIPAKL4.mjs +28 -0
  37. package/dist/chunk-6BIPAKL4.mjs.map +1 -0
  38. package/dist/chunk-6ZCISNAB.mjs +343 -0
  39. package/dist/chunk-6ZCISNAB.mjs.map +1 -0
  40. package/dist/chunk-72MQFHYJ.js +1429 -0
  41. package/dist/chunk-72MQFHYJ.js.map +1 -0
  42. package/dist/chunk-7557OTHW.js +62 -0
  43. package/dist/chunk-7557OTHW.js.map +1 -0
  44. package/dist/chunk-7FUV73JZ.js +981 -0
  45. package/dist/chunk-7FUV73JZ.js.map +1 -0
  46. package/dist/chunk-7RF6PVHA.mjs +324 -0
  47. package/dist/chunk-7RF6PVHA.mjs.map +1 -0
  48. package/dist/chunk-7RYCHO6D.mjs +134 -0
  49. package/dist/chunk-7RYCHO6D.mjs.map +1 -0
  50. package/dist/chunk-7UKPRW25.mjs +1999 -0
  51. package/dist/chunk-7UKPRW25.mjs.map +1 -0
  52. package/dist/chunk-7URAOG2M.js +14864 -0
  53. package/dist/chunk-7URAOG2M.js.map +1 -0
  54. package/dist/chunk-AFAO3TGS.mjs +810 -0
  55. package/dist/chunk-AFAO3TGS.mjs.map +1 -0
  56. package/dist/chunk-BYLIU6XG.js +343 -0
  57. package/dist/chunk-BYLIU6XG.js.map +1 -0
  58. package/dist/chunk-D63MUKZ6.mjs +4423 -0
  59. package/dist/chunk-D63MUKZ6.mjs.map +1 -0
  60. package/dist/chunk-DDKW2FNA.js +390 -0
  61. package/dist/chunk-DDKW2FNA.js.map +1 -0
  62. package/dist/chunk-DQYMKR27.mjs +341 -0
  63. package/dist/chunk-DQYMKR27.mjs.map +1 -0
  64. package/dist/chunk-DW5UJKHH.js +221 -0
  65. package/dist/chunk-DW5UJKHH.js.map +1 -0
  66. package/dist/chunk-EEZCR6E6.js +50 -0
  67. package/dist/chunk-EEZCR6E6.js.map +1 -0
  68. package/dist/chunk-GCJXQ4AG.mjs +59 -0
  69. package/dist/chunk-GCJXQ4AG.mjs.map +1 -0
  70. package/dist/chunk-JGNQK2G6.mjs +14845 -0
  71. package/dist/chunk-JGNQK2G6.mjs.map +1 -0
  72. package/dist/chunk-JTLOJLWQ.mjs +563 -0
  73. package/dist/chunk-JTLOJLWQ.mjs.map +1 -0
  74. package/dist/chunk-K23A4G76.mjs +202 -0
  75. package/dist/chunk-K23A4G76.mjs.map +1 -0
  76. package/dist/chunk-KKU3K7RG.js +336 -0
  77. package/dist/chunk-KKU3K7RG.js.map +1 -0
  78. package/dist/chunk-KUGMH4ZF.js +571 -0
  79. package/dist/chunk-KUGMH4ZF.js.map +1 -0
  80. package/dist/chunk-LBVWVP72.js +110 -0
  81. package/dist/chunk-LBVWVP72.js.map +1 -0
  82. package/dist/chunk-LIVWLY2P.js +138 -0
  83. package/dist/chunk-LIVWLY2P.js.map +1 -0
  84. package/dist/chunk-M2T6R7BA.mjs +1003 -0
  85. package/dist/chunk-M2T6R7BA.mjs.map +1 -0
  86. package/dist/chunk-MV3QN7PW.mjs +47 -0
  87. package/dist/chunk-MV3QN7PW.mjs.map +1 -0
  88. package/dist/chunk-OB7E654K.js +72 -0
  89. package/dist/chunk-OB7E654K.js.map +1 -0
  90. package/dist/chunk-OIIKTGRL.mjs +380 -0
  91. package/dist/chunk-OIIKTGRL.mjs.map +1 -0
  92. package/dist/chunk-P3UWIUJS.mjs +1427 -0
  93. package/dist/chunk-P3UWIUJS.mjs.map +1 -0
  94. package/dist/chunk-PKN27UMH.mjs +136 -0
  95. package/dist/chunk-PKN27UMH.mjs.map +1 -0
  96. package/dist/chunk-QXV4667R.mjs +105 -0
  97. package/dist/chunk-QXV4667R.mjs.map +1 -0
  98. package/dist/chunk-S7FRYNSU.mjs +315 -0
  99. package/dist/chunk-S7FRYNSU.mjs.map +1 -0
  100. package/dist/chunk-TFLQX7K7.mjs +68 -0
  101. package/dist/chunk-TFLQX7K7.mjs.map +1 -0
  102. package/dist/chunk-UWE5PCYJ.mjs +279 -0
  103. package/dist/chunk-UWE5PCYJ.mjs.map +1 -0
  104. package/dist/chunk-UYFDNX2F.js +4469 -0
  105. package/dist/chunk-UYFDNX2F.js.map +1 -0
  106. package/dist/chunk-W4PALSGM.js +350 -0
  107. package/dist/chunk-W4PALSGM.js.map +1 -0
  108. package/dist/chunk-WECQ6KOB.js +1008 -0
  109. package/dist/chunk-WECQ6KOB.js.map +1 -0
  110. package/dist/chunk-XQQWI6WB.js +814 -0
  111. package/dist/chunk-XQQWI6WB.js.map +1 -0
  112. package/dist/chunk-XZJOZJB6.js +140 -0
  113. package/dist/chunk-XZJOZJB6.js.map +1 -0
  114. package/dist/chunk-ZSMWDLMK.js +63 -0
  115. package/dist/chunk-ZSMWDLMK.js.map +1 -0
  116. package/dist/cli/index.js +37243 -0
  117. package/dist/cli/index.js.map +1 -0
  118. package/dist/cli/index.mjs +37209 -0
  119. package/dist/cli/index.mjs.map +1 -0
  120. package/dist/commerce/index.d.mts +170 -0
  121. package/dist/commerce/index.d.ts +170 -0
  122. package/dist/commerce/index.js +174 -0
  123. package/dist/commerce/index.js.map +1 -0
  124. package/dist/commerce/index.mjs +5 -0
  125. package/dist/commerce/index.mjs.map +1 -0
  126. package/dist/commerce/server.d.mts +107 -0
  127. package/dist/commerce/server.d.ts +107 -0
  128. package/dist/commerce/server.js +187 -0
  129. package/dist/commerce/server.js.map +1 -0
  130. package/dist/commerce/server.mjs +177 -0
  131. package/dist/commerce/server.mjs.map +1 -0
  132. package/dist/config/index.d.mts +43 -0
  133. package/dist/config/index.d.ts +43 -0
  134. package/dist/config/index.js +66 -0
  135. package/dist/config/index.js.map +1 -0
  136. package/dist/config/index.mjs +64 -0
  137. package/dist/config/index.mjs.map +1 -0
  138. package/dist/engage/index.d.mts +33 -0
  139. package/dist/engage/index.d.ts +33 -0
  140. package/dist/engage/index.js +22 -0
  141. package/dist/engage/index.js.map +1 -0
  142. package/dist/engage/index.mjs +5 -0
  143. package/dist/engage/index.mjs.map +1 -0
  144. package/dist/forms/index.d.mts +437 -0
  145. package/dist/forms/index.d.ts +437 -0
  146. package/dist/forms/index.js +1168 -0
  147. package/dist/forms/index.js.map +1 -0
  148. package/dist/forms/index.mjs +1142 -0
  149. package/dist/forms/index.mjs.map +1 -0
  150. package/dist/generators-2XKQMPKH.mjs +4 -0
  151. package/dist/generators-2XKQMPKH.mjs.map +1 -0
  152. package/dist/generators-DTMO36DV.js +33 -0
  153. package/dist/generators-DTMO36DV.js.map +1 -0
  154. package/dist/images/index.d.mts +4 -0
  155. package/dist/images/index.d.ts +4 -0
  156. package/dist/images/index.js +46 -0
  157. package/dist/images/index.js.map +1 -0
  158. package/dist/images/index.mjs +5 -0
  159. package/dist/images/index.mjs.map +1 -0
  160. package/dist/images/server.d.mts +69 -0
  161. package/dist/images/server.d.ts +69 -0
  162. package/dist/images/server.js +21 -0
  163. package/dist/images/server.js.map +1 -0
  164. package/dist/images/server.mjs +4 -0
  165. package/dist/images/server.mjs.map +1 -0
  166. package/dist/index.d.mts +846 -0
  167. package/dist/index.d.ts +846 -0
  168. package/dist/index.js +2623 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/index.mjs +2416 -0
  171. package/dist/index.mjs.map +1 -0
  172. package/dist/layout/index.d.mts +53 -0
  173. package/dist/layout/index.d.ts +53 -0
  174. package/dist/layout/index.js +187 -0
  175. package/dist/layout/index.js.map +1 -0
  176. package/dist/layout/index.mjs +185 -0
  177. package/dist/layout/index.mjs.map +1 -0
  178. package/dist/llms/index.d.mts +448 -0
  179. package/dist/llms/index.d.ts +448 -0
  180. package/dist/llms/index.js +581 -0
  181. package/dist/llms/index.js.map +1 -0
  182. package/dist/llms/index.mjs +529 -0
  183. package/dist/llms/index.mjs.map +1 -0
  184. package/dist/manifest/index.d.mts +62 -0
  185. package/dist/manifest/index.d.ts +62 -0
  186. package/dist/manifest/index.js +85 -0
  187. package/dist/manifest/index.js.map +1 -0
  188. package/dist/manifest/index.mjs +83 -0
  189. package/dist/manifest/index.mjs.map +1 -0
  190. package/dist/middleware/index.d.mts +63 -0
  191. package/dist/middleware/index.d.ts +63 -0
  192. package/dist/middleware/index.js +54 -0
  193. package/dist/middleware/index.js.map +1 -0
  194. package/dist/middleware/index.mjs +51 -0
  195. package/dist/middleware/index.mjs.map +1 -0
  196. package/dist/migrator-2MQHOFDQ.mjs +4 -0
  197. package/dist/migrator-2MQHOFDQ.mjs.map +1 -0
  198. package/dist/migrator-THJCF6MZ.js +37 -0
  199. package/dist/migrator-THJCF6MZ.js.map +1 -0
  200. package/dist/redirects/index.d.mts +78 -0
  201. package/dist/redirects/index.d.ts +78 -0
  202. package/dist/redirects/index.js +26 -0
  203. package/dist/redirects/index.js.map +1 -0
  204. package/dist/redirects/index.mjs +5 -0
  205. package/dist/redirects/index.mjs.map +1 -0
  206. package/dist/reputation/index.d.mts +57 -0
  207. package/dist/reputation/index.d.ts +57 -0
  208. package/dist/reputation/index.js +21 -0
  209. package/dist/reputation/index.js.map +1 -0
  210. package/dist/reputation/index.mjs +4 -0
  211. package/dist/reputation/index.mjs.map +1 -0
  212. package/dist/robots/index.d.mts +38 -0
  213. package/dist/robots/index.d.ts +38 -0
  214. package/dist/robots/index.js +52 -0
  215. package/dist/robots/index.js.map +1 -0
  216. package/dist/robots/index.mjs +50 -0
  217. package/dist/robots/index.mjs.map +1 -0
  218. package/dist/routing-B5XS-6_W.d.mts +118 -0
  219. package/dist/routing-DZYzyDHw.d.ts +118 -0
  220. package/dist/scanner-GAF5PO5F.js +53 -0
  221. package/dist/scanner-GAF5PO5F.js.map +1 -0
  222. package/dist/scanner-LKJKW7IT.mjs +4 -0
  223. package/dist/scanner-LKJKW7IT.mjs.map +1 -0
  224. package/dist/securityHeaders-nwZ6nP4g.d.mts +24 -0
  225. package/dist/securityHeaders-nwZ6nP4g.d.ts +24 -0
  226. package/dist/seo/index.d.mts +600 -0
  227. package/dist/seo/index.d.ts +600 -0
  228. package/dist/seo/index.js +883 -0
  229. package/dist/seo/index.js.map +1 -0
  230. package/dist/seo/index.mjs +773 -0
  231. package/dist/seo/index.mjs.map +1 -0
  232. package/dist/seo/register-sitemap-cli.js +151 -0
  233. package/dist/seo/register-sitemap-cli.js.map +1 -0
  234. package/dist/seo/register-sitemap-cli.mjs +144 -0
  235. package/dist/seo/register-sitemap-cli.mjs.map +1 -0
  236. package/dist/seo/server.d.mts +107 -0
  237. package/dist/seo/server.d.ts +107 -0
  238. package/dist/seo/server.js +207 -0
  239. package/dist/seo/server.js.map +1 -0
  240. package/dist/seo/server.mjs +186 -0
  241. package/dist/seo/server.mjs.map +1 -0
  242. package/dist/server-api-EWXKOQZA.mjs +4 -0
  243. package/dist/server-api-EWXKOQZA.mjs.map +1 -0
  244. package/dist/server-api-GJPNRYUP.js +81 -0
  245. package/dist/server-api-GJPNRYUP.js.map +1 -0
  246. package/dist/setup/client.d.mts +60 -0
  247. package/dist/setup/client.d.ts +60 -0
  248. package/dist/setup/client.js +31 -0
  249. package/dist/setup/client.js.map +1 -0
  250. package/dist/setup/client.mjs +6 -0
  251. package/dist/setup/client.mjs.map +1 -0
  252. package/dist/setup/index.d.mts +5 -0
  253. package/dist/setup/index.d.ts +5 -0
  254. package/dist/setup/index.js +35 -0
  255. package/dist/setup/index.js.map +1 -0
  256. package/dist/setup/index.mjs +6 -0
  257. package/dist/setup/index.mjs.map +1 -0
  258. package/dist/setup/server.d.mts +14 -0
  259. package/dist/setup/server.d.ts +14 -0
  260. package/dist/setup/server.js +13 -0
  261. package/dist/setup/server.js.map +1 -0
  262. package/dist/setup/server.mjs +4 -0
  263. package/dist/setup/server.mjs.map +1 -0
  264. package/dist/site-config/index.d.mts +24 -0
  265. package/dist/site-config/index.d.ts +24 -0
  266. package/dist/site-config/index.js +17 -0
  267. package/dist/site-config/index.js.map +1 -0
  268. package/dist/site-config/index.mjs +4 -0
  269. package/dist/site-config/index.mjs.map +1 -0
  270. package/dist/sitemap/index.d.mts +96 -0
  271. package/dist/sitemap/index.d.ts +96 -0
  272. package/dist/sitemap/index.js +288 -0
  273. package/dist/sitemap/index.js.map +1 -0
  274. package/dist/sitemap/index.mjs +285 -0
  275. package/dist/sitemap/index.mjs.map +1 -0
  276. package/dist/socket-loader-J26QHHOB.js +16 -0
  277. package/dist/socket-loader-J26QHHOB.js.map +1 -0
  278. package/dist/socket-loader-R7S2YJ2J.mjs +14 -0
  279. package/dist/socket-loader-R7S2YJ2J.mjs.map +1 -0
  280. package/dist/types-0dmq3k20.d.mts +168 -0
  281. package/dist/types-0dmq3k20.d.ts +168 -0
  282. package/dist/types-Blb2QNkV.d.mts +263 -0
  283. package/dist/types-Blb2QNkV.d.ts +263 -0
  284. package/dist/types-BnCwwUX3.d.mts +250 -0
  285. package/dist/types-BnCwwUX3.d.ts +250 -0
  286. package/dist/types-CGlnp43R.d.mts +312 -0
  287. package/dist/types-CGlnp43R.d.ts +312 -0
  288. package/dist/types-D08004rU.d.mts +179 -0
  289. package/dist/types-D08004rU.d.ts +179 -0
  290. package/dist/types-DNSYU7qI.d.mts +127 -0
  291. package/dist/types-DNSYU7qI.d.ts +127 -0
  292. package/dist/types-KZP_VWZp.d.mts +266 -0
  293. package/dist/types-KZP_VWZp.d.ts +266 -0
  294. package/dist/useEventModal-BVTx69XE.d.mts +274 -0
  295. package/dist/useEventModal-Dx1dItTJ.d.ts +274 -0
  296. package/dist/web-vitals-444RLW3B.js +252 -0
  297. package/dist/web-vitals-444RLW3B.js.map +1 -0
  298. package/dist/web-vitals-KPICZIEF.mjs +241 -0
  299. package/dist/web-vitals-KPICZIEF.mjs.map +1 -0
  300. package/package.json +192 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/blog/BlogPost.tsx","../../src/blog/BlogList.tsx","../../src/blog/BlogSidebar.tsx","../../src/blog/BlogLayout.tsx","../../src/blog/AuthorCard.tsx","../../src/blog/RelatedPosts.tsx","../../src/blog/TableOfContents.tsx"],"names":["jsxs","jsx","Fragment","React","fetchCategories","fetchRelatedPosts","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @sonordev/site-kit/blog - Blog Post Component\n * \n * Fetches and displays a single blog post with full content, table of contents,\n * author info, related posts, and SEO metadata support.\n * \n * @example Tailwind styling\n * ```tsx\n * <BlogPost\n * slug={params.slug}\n * unstyled\n * styles={{\n * article: 'max-w-4xl mx-auto',\n * header: 'mb-8',\n * breadcrumb: 'text-sm text-gray-500 mb-4',\n * title: 'text-4xl font-bold text-gray-900',\n * subtitle: 'text-xl text-gray-600 mt-4',\n * meta: 'flex gap-4 text-sm text-gray-500 mt-4',\n * featuredImage: 'w-full h-auto rounded-xl',\n * content: 'prose prose-lg max-w-none',\n * tocSidebar: 'sticky top-24 p-4 bg-gray-50 rounded-lg',\n * tocTitle: 'text-sm font-semibold uppercase text-gray-500',\n * tocList: 'space-y-2 mt-3',\n * tocLink: 'text-sm text-gray-600 hover:text-primary-600',\n * tags: 'flex gap-2 mt-8',\n * tag: 'px-3 py-1 bg-gray-100 rounded-full text-sm',\n * faqSection: 'mt-12',\n * faqTitle: 'text-2xl font-bold mb-6',\n * faqItem: 'p-4 bg-gray-50 rounded-lg',\n * authorCard: 'mt-12 p-6 bg-gray-50 rounded-xl',\n * relatedSection: 'mt-12',\n * relatedTitle: 'text-2xl font-bold mb-6',\n * relatedGrid: 'grid md:grid-cols-3 gap-6',\n * }}\n * />\n * ```\n */\n\nimport React from 'react'\nimport type { BlogPost as BlogPostType, TocItem, BlogAuthor } from './types'\n\n// ============================================================================\n// STYLE TYPES\n// ============================================================================\n\nexport interface BlogPostStyles {\n /** Article wrapper */\n article?: string\n /** Header section */\n header?: string\n /** Breadcrumb navigation */\n breadcrumb?: string\n /** Breadcrumb link */\n breadcrumbLink?: string\n /** Post title (h1) */\n title?: string\n /** Post subtitle */\n subtitle?: string\n /** Meta info row */\n meta?: string\n /** Meta item */\n metaItem?: string\n /** Featured image wrapper */\n featuredImageWrapper?: string\n /** Featured image */\n featuredImage?: string\n /** Content layout (grid with TOC) */\n contentLayout?: string\n /** Main content wrapper */\n content?: string\n /** Table of contents sidebar */\n tocSidebar?: string\n /** TOC title */\n tocTitle?: string\n /** TOC list */\n tocList?: string\n /** TOC list item */\n tocItem?: string\n /** TOC link */\n tocLink?: string\n /** Tags container */\n tags?: string\n /** Individual tag */\n tag?: string\n /** FAQ section */\n faqSection?: string\n /** FAQ title */\n faqTitle?: string\n /** FAQ item container */\n faqItem?: string\n /** FAQ question (summary) */\n faqQuestion?: string\n /** FAQ answer */\n faqAnswer?: string\n /** Author card section */\n authorCard?: string\n /** Related posts section */\n relatedSection?: string\n /** Related posts title */\n relatedTitle?: string\n /** Related posts grid */\n relatedGrid?: string\n /** Related post card */\n relatedCard?: string\n /** Not found state */\n notFound?: string\n}\n\n// ============================================================================\n// DATA FETCHING\n// ============================================================================\n\nasync function fetchBlogPost(\n apiUrl: string,\n apiKey: string,\n slug: string\n): Promise<BlogPostType | null> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/posts/${slug}`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 60 },\n })\n\n if (!response.ok) {\n if (response.status === 404) return null\n console.error('[Blog] Failed to fetch post:', response.statusText)\n return null\n }\n\n const data = await response.json()\n return data.post\n } catch (error) {\n console.error('[Blog] Error fetching post:', error)\n return null\n }\n}\n\nasync function fetchRelatedPosts(\n apiUrl: string,\n apiKey: string,\n postId: string,\n limit: number = 3\n): Promise<BlogPostType[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/related`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({ current_post_id: postId, limit }),\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.posts || []\n } catch (error) {\n console.error('[Blog] Error fetching related posts:', error)\n return []\n }\n}\n\n// ============================================================================\n// TOC GENERATION\n// ============================================================================\n\nfunction generateTableOfContents(html: string): TocItem[] {\n const headingRegex = /<h([2-4])[^>]*(?:id=\"([^\"]*)\")?[^>]*>(.*?)<\\/h[2-4]>/gi\n const items: TocItem[] = []\n let match\n\n while ((match = headingRegex.exec(html)) !== null) {\n const level = parseInt(match[1])\n const existingId = match[2]\n const text = match[3].replace(/<[^>]*>/g, '') // Strip nested HTML\n const id = existingId || slugify(text)\n\n items.push({ id, text, level })\n }\n\n return items\n}\n\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\n// ============================================================================\n// BLOG POST COMPONENT\n// ============================================================================\n\nexport interface BlogPostServerProps {\n /** Portal API URL */\n apiUrl?: string\n /** Project API key */\n apiKey?: string\n /** Blog post slug */\n slug: string\n /** Show table of contents sidebar */\n showToc?: boolean\n /** Show related posts */\n showRelated?: boolean\n /** Number of related posts */\n relatedCount?: number\n /** Show author card */\n showAuthor?: boolean\n /** Base URL for blog links */\n basePath?: string\n /** Custom class name (applied to article) */\n className?: string\n /** \n * Custom Tailwind/CSS classes for each element.\n * When provided, inline styles are disabled for that element.\n */\n styles?: BlogPostStyles\n /** Use CSS classes only (no inline styles) - set to true for Tailwind sites */\n unstyled?: boolean\n /** Custom render function */\n children?: (props: {\n post: BlogPostType\n tableOfContents: TocItem[]\n relatedPosts: BlogPostType[]\n }) => React.ReactNode\n}\n\nexport async function BlogPost({\n apiUrl = process.env.NEXT_PUBLIC_UPTRADE_API_URL || 'https://api.uptrademedia.com',\n apiKey = process.env.NEXT_PUBLIC_UPTRADE_API_KEY || '',\n slug,\n showToc = true,\n showRelated = true,\n relatedCount = 3,\n showAuthor = true,\n basePath = '/blog',\n className,\n styles = {},\n unstyled = false,\n children,\n}: BlogPostServerProps) {\n // Helper to conditionally apply inline styles\n const inlineStyle = (defaultStyle: React.CSSProperties, classKey: keyof BlogPostStyles) =>\n unstyled || styles[classKey] ? undefined : defaultStyle\n\n if (!apiKey) {\n console.warn('[Blog] No API key configured')\n return null\n }\n\n const post = await fetchBlogPost(apiUrl, apiKey, slug)\n\n if (!post) {\n return (\n <div \n className={`${styles.notFound || ''} ${className || ''}`.trim() || undefined}\n style={inlineStyle({ textAlign: 'center', padding: 60 }, 'notFound')}\n >\n <h1 style={inlineStyle({ fontSize: 24, marginBottom: 16 }, 'notFound')}>Post Not Found</h1>\n <p style={inlineStyle({ color: '#6b7280' }, 'notFound')}>\n The blog post you're looking for doesn't exist or has been removed.\n </p>\n <a\n href={basePath}\n style={inlineStyle({\n display: 'inline-block',\n marginTop: 24,\n padding: '12px 24px',\n backgroundColor: '#3b82f6',\n color: '#fff',\n borderRadius: 8,\n textDecoration: 'none',\n }, 'notFound')}\n >\n ← Back to Blog\n </a>\n </div>\n )\n }\n\n const content = post.content_html || post.content || ''\n const tableOfContents = showToc ? generateTableOfContents(content) : []\n const relatedPosts = showRelated\n ? await fetchRelatedPosts(apiUrl, apiKey, post.id, relatedCount)\n : []\n\n // Custom render\n if (children) {\n return children({ post, tableOfContents, relatedPosts })\n }\n\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n })\n : null\n\n return (\n <article className={`${styles.article || ''} ${className || ''}`.trim() || undefined}>\n {/* Header */}\n <header \n className={styles.header}\n style={inlineStyle({ marginBottom: 32 }, 'header')}\n >\n {/* Breadcrumb */}\n <nav \n className={styles.breadcrumb}\n style={inlineStyle({ marginBottom: 16, fontSize: 14, color: '#6b7280' }, 'breadcrumb')}\n >\n <a \n href={basePath} \n className={styles.breadcrumbLink}\n style={inlineStyle({ color: '#3b82f6', textDecoration: 'none' }, 'breadcrumbLink')}\n >\n Blog\n </a>\n {post.category && (\n <>\n <span style={inlineStyle({ margin: '0 8px' }, 'breadcrumb')}>/</span>\n <a\n href={`${basePath}?category=${post.category}`}\n className={styles.breadcrumbLink}\n style={inlineStyle({ color: '#3b82f6', textDecoration: 'none' }, 'breadcrumbLink')}\n >\n {typeof post.category === 'string' ? post.category : post.category?.name || 'Uncategorized'}\n </a>\n </>\n )}\n </nav>\n\n {/* Title */}\n <h1 \n className={styles.title}\n style={inlineStyle({ fontSize: 36, fontWeight: 700, lineHeight: 1.2, marginBottom: 16 }, 'title')}\n >\n {post.title}\n </h1>\n\n {/* Subtitle */}\n {post.subtitle && (\n <p \n className={styles.subtitle}\n style={inlineStyle({ fontSize: 20, color: '#6b7280', marginBottom: 16 }, 'subtitle')}\n >\n {post.subtitle}\n </p>\n )}\n\n {/* Meta */}\n <div \n className={styles.meta}\n style={inlineStyle({ display: 'flex', alignItems: 'center', gap: 16, flexWrap: 'wrap' }, 'meta')}\n >\n {post.author && (\n <span \n className={styles.metaItem}\n style={inlineStyle({ fontSize: 14, color: '#374151' }, 'metaItem')}\n >\n By {typeof post.author === 'string' ? post.author : post.author.name}\n </span>\n )}\n {date && (\n <span \n className={styles.metaItem}\n style={inlineStyle({ fontSize: 14, color: '#6b7280' }, 'metaItem')}\n >\n {date}\n </span>\n )}\n {post.reading_time_minutes && (\n <span \n className={styles.metaItem}\n style={inlineStyle({ fontSize: 14, color: '#9ca3af' }, 'metaItem')}\n >\n {post.reading_time_minutes} min read\n </span>\n )}\n </div>\n </header>\n\n {/* Featured Image */}\n {post.featured_image && (\n <figure \n className={styles.featuredImageWrapper}\n style={inlineStyle({ margin: '0 0 32px' }, 'featuredImageWrapper')}\n >\n <img\n src={post.featured_image}\n alt={post.featured_image_alt || post.title}\n className={styles.featuredImage}\n style={inlineStyle({\n width: '100%',\n maxHeight: 500,\n objectFit: 'cover',\n borderRadius: 12,\n }, 'featuredImage')}\n />\n </figure>\n )}\n\n {/* Content Layout with TOC */}\n <div\n className={styles.contentLayout}\n style={inlineStyle({\n display: showToc && tableOfContents.length > 0 ? 'grid' : 'block',\n gridTemplateColumns: showToc && tableOfContents.length > 0 ? '1fr 250px' : undefined,\n gap: 48,\n }, 'contentLayout')}\n >\n {/* Main Content */}\n <div\n className={`blog-content ${styles.content || ''}`.trim()}\n style={inlineStyle({\n fontSize: 17,\n lineHeight: 1.8,\n color: '#374151',\n }, 'content')}\n dangerouslySetInnerHTML={{ __html: content }}\n />\n\n {/* Table of Contents Sidebar */}\n {showToc && tableOfContents.length > 0 && (\n <aside\n className={styles.tocSidebar}\n style={inlineStyle({\n position: 'sticky',\n top: 100,\n alignSelf: 'start',\n padding: 20,\n backgroundColor: '#f9fafb',\n borderRadius: 12,\n }, 'tocSidebar')}\n >\n <h4\n className={styles.tocTitle}\n style={inlineStyle({\n margin: '0 0 12px',\n fontSize: 12,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: '#6b7280',\n }, 'tocTitle')}\n >\n On This Page\n </h4>\n <ul \n className={styles.tocList}\n style={inlineStyle({ listStyle: 'none', margin: 0, padding: 0 }, 'tocList')}\n >\n {tableOfContents.map((item) => (\n <li\n key={item.id}\n className={styles.tocItem}\n style={inlineStyle({\n paddingLeft: (item.level - 2) * 12,\n marginBottom: 8,\n }, 'tocItem')}\n >\n <a\n href={`#${item.id}`}\n className={styles.tocLink}\n style={inlineStyle({\n fontSize: 14,\n color: '#6b7280',\n textDecoration: 'none',\n }, 'tocLink')}\n >\n {item.text}\n </a>\n </li>\n ))}\n </ul>\n </aside>\n )}\n </div>\n\n {/* Tags */}\n {post.tags && post.tags.length > 0 && (\n <div \n className={styles.tags}\n style={inlineStyle({ marginTop: 32, display: 'flex', gap: 8, flexWrap: 'wrap' }, 'tags')}\n >\n {post.tags.map((tag, index) => {\n const tagName = typeof tag === 'string' ? tag : tag?.name || '';\n return (\n <a\n key={`${tagName}-${index}`}\n href={`${basePath}?tag=${tagName}`}\n className={styles.tag}\n style={inlineStyle({\n padding: '4px 12px',\n backgroundColor: '#f3f4f6',\n borderRadius: 9999,\n fontSize: 13,\n color: '#374151',\n textDecoration: 'none',\n }, 'tag')}\n >\n #{tagName}\n </a>\n );\n })}\n </div>\n )}\n\n {/* FAQ Section (supports faq_items or faqItems from Portal / E-E-A-T) */}\n {(post.faq_items ?? (post as any).faqItems) && Array.isArray(post.faq_items ?? (post as any).faqItems) && (post.faq_items ?? (post as any).faqItems).length > 0 && (\n <section \n className={styles.faqSection}\n style={inlineStyle({ marginTop: 48 }, 'faqSection')}\n >\n <h2 \n className={styles.faqTitle}\n style={inlineStyle({ fontSize: 24, fontWeight: 600, marginBottom: 24 }, 'faqTitle')}\n >\n Frequently Asked Questions\n </h2>\n <div style={inlineStyle({ display: 'flex', flexDirection: 'column', gap: 16 }, 'faqSection')}>\n {(post.faq_items ?? (post as any).faqItems).map((faq: { question: string; answer: string }, index: number) => (\n <details\n key={index}\n className={styles.faqItem}\n style={inlineStyle({\n padding: 16,\n backgroundColor: '#f9fafb',\n borderRadius: 8,\n }, 'faqItem')}\n >\n <summary\n className={styles.faqQuestion}\n style={inlineStyle({\n fontWeight: 500,\n cursor: 'pointer',\n listStyle: 'none',\n }, 'faqQuestion')}\n >\n {faq.question}\n </summary>\n <p \n className={styles.faqAnswer}\n style={inlineStyle({ marginTop: 12, color: '#6b7280' }, 'faqAnswer')}\n >\n {faq.answer}\n </p>\n </details>\n ))}\n </div>\n </section>\n )}\n\n {/* Author Card (supports BlogAuthor or E-E-A-T author shape) */}\n {showAuthor && post.author && typeof post.author === 'object' && (\n <AuthorSection author={normalizeAuthorForDisplay(post.author)} className={styles.authorCard} unstyled={unstyled} />\n )}\n\n {/* Related Posts */}\n {showRelated && relatedPosts.length > 0 && (\n <section \n className={styles.relatedSection}\n style={inlineStyle({ marginTop: 48 }, 'relatedSection')}\n >\n <h2 \n className={styles.relatedTitle}\n style={inlineStyle({ fontSize: 24, fontWeight: 600, marginBottom: 24 }, 'relatedTitle')}\n >\n Related Posts\n </h2>\n <div\n className={styles.relatedGrid}\n style={inlineStyle({\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: 24,\n }, 'relatedGrid')}\n >\n {relatedPosts.map((relatedPost) => (\n <article\n key={relatedPost.id}\n className={styles.relatedCard}\n style={inlineStyle({\n backgroundColor: '#fff',\n borderRadius: 12,\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n }, 'relatedCard')}\n >\n {relatedPost.featured_image && (\n <a href={`${basePath}/${relatedPost.slug}`}>\n <img\n src={relatedPost.featured_image}\n alt={relatedPost.title}\n style={inlineStyle({ width: '100%', height: 150, objectFit: 'cover' }, 'relatedCard')}\n />\n </a>\n )}\n <div style={inlineStyle({ padding: 16 }, 'relatedCard')}>\n <h3 style={inlineStyle({ fontSize: 16, fontWeight: 600, marginBottom: 8 }, 'relatedCard')}>\n <a\n href={`${basePath}/${relatedPost.slug}`}\n style={inlineStyle({ color: 'inherit', textDecoration: 'none' }, 'relatedCard')}\n >\n {relatedPost.title}\n </a>\n </h3>\n {relatedPost.excerpt && (\n <p style={inlineStyle({ fontSize: 14, color: '#6b7280', margin: 0 }, 'relatedCard')}>\n {relatedPost.excerpt.slice(0, 100)}...\n </p>\n )}\n </div>\n </article>\n ))}\n </div>\n </section>\n )}\n </article>\n )\n}\n\n// ============================================================================\n// AUTHOR NORMALIZATION (BlogAuthor + E-E-A-T shapes)\n// ============================================================================\n\n/** Normalize author from Portal: supports BlogAuthor (avatar_url, social_links) or E-E-A-T (image, url, socialProfiles) */\nfunction normalizeAuthorForDisplay(\n author: Record<string, unknown> | BlogAuthor\n): BlogAuthor & { sameAs?: string[]; title?: string } {\n const a = author as Record<string, unknown>\n const avatarUrl =\n (a.avatar_url as string) ?? (a.image as string) ?? (a.image_url as string)\n const socialLinks = a.social_links as BlogAuthor['social_links'] | undefined\n const socialProfiles = a.socialProfiles as string[] | undefined\n return {\n id: (a.id as string) ?? 'author',\n project_id: (a.project_id as string) ?? '',\n name: (a.name as string) ?? 'Author',\n slug: (a.slug as string) ?? 'author',\n bio: (a.bio as string) ?? undefined,\n avatar_url: avatarUrl ?? undefined,\n email: (a.email as string) ?? undefined,\n website: (a.website as string) ?? (a.url as string) ?? undefined,\n social_links: socialLinks ?? undefined,\n is_active: (a.is_active as boolean) ?? true,\n ...(socialProfiles?.length ? { sameAs: socialProfiles } : {}),\n ...(a.title ? { title: a.title as string } : {}),\n } as BlogAuthor & { sameAs?: string[]; title?: string }\n}\n\n// ============================================================================\n// AUTHOR SECTION\n// ============================================================================\n\nfunction AuthorSection({\n author,\n className,\n unstyled = false,\n}: {\n author: BlogAuthor & { sameAs?: string[]; title?: string }\n className?: string\n unstyled?: boolean\n}) {\n return (\n <section\n className={className}\n style={unstyled || className ? undefined : {\n marginTop: 48,\n padding: 24,\n backgroundColor: '#f9fafb',\n borderRadius: 12,\n display: 'flex',\n gap: 20,\n alignItems: 'flex-start',\n }}\n >\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n style={unstyled || className ? undefined : {\n width: 80,\n height: 80,\n borderRadius: '50%',\n objectFit: 'cover',\n }}\n />\n )}\n <div>\n <h3 style={unstyled || className ? undefined : { margin: '0 0 4px', fontSize: 18, fontWeight: 600 }}>\n {author.name}\n </h3>\n {'title' in author && author.title && (\n <p style={unstyled || className ? undefined : { margin: '0 0 4px', fontSize: 14, color: '#6b7280' }}>\n {author.title}\n </p>\n )}\n {author.bio && (\n <p style={unstyled || className ? undefined : { margin: '0 0 12px', color: '#6b7280', fontSize: 14 }}>\n {author.bio}\n </p>\n )}\n {author.social_links && (\n <div style={unstyled || className ? undefined : { display: 'flex', gap: 16 }}>\n {author.social_links.twitter && (\n <a\n href={`https://twitter.com/${author.social_links.twitter}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={unstyled || className ? undefined : { color: '#3b82f6', fontSize: 14 }}\n >\n Twitter\n </a>\n )}\n {author.social_links.linkedin && (\n <a\n href={author.social_links.linkedin}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={unstyled || className ? undefined : { color: '#3b82f6', fontSize: 14 }}\n >\n LinkedIn\n </a>\n )}\n </div>\n )}\n {'sameAs' in author && author.sameAs && author.sameAs.length > 0 && !author.social_links && (\n <div style={{ display: 'flex', gap: 16, flexWrap: 'wrap' }}>\n {author.sameAs.map((url, i) => (\n <a\n key={i}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: '#3b82f6', fontSize: 14 }}\n >\n Profile\n </a>\n ))}\n </div>\n )}\n </div>\n </section>\n )\n}","/**\n * @sonordev/site-kit/blog - Blog List Component\n * \n * Fetches and displays a list of blog posts with pagination, filtering, and sorting.\n * Supports both server-side and client-side rendering.\n * \n * @example Tailwind styling\n * ```tsx\n * <BlogList\n * styles={{\n * container: 'max-w-7xl mx-auto px-4',\n * categoryNav: 'flex flex-wrap gap-2 mb-8',\n * categoryLink: 'px-4 py-2 rounded-full text-sm font-medium',\n * categoryLinkActive: 'bg-primary-600 text-white',\n * categoryLinkInactive: 'bg-gray-100 text-gray-700 hover:bg-gray-200',\n * grid: 'grid md:grid-cols-2 lg:grid-cols-3 gap-8',\n * card: 'bg-white rounded-xl shadow-sm hover:shadow-lg transition-shadow',\n * cardImage: 'w-full h-48 object-cover',\n * cardBody: 'p-6',\n * cardTitle: 'text-xl font-bold text-gray-900',\n * cardExcerpt: 'text-gray-600 line-clamp-3',\n * cardMeta: 'text-sm text-gray-500',\n * pagination: 'flex justify-center gap-4 mt-12',\n * paginationLink: 'px-6 py-3 bg-primary-600 text-white rounded-lg',\n * emptyState: 'text-center py-12 text-gray-500',\n * }}\n * />\n * ```\n */\n\nimport React from 'react'\nimport type { BlogListResult, BlogPost, BlogCategory } from './types'\n\n// ============================================================================\n// STYLE TYPES\n// ============================================================================\n\nexport interface BlogListStyles {\n /** Container wrapper */\n container?: string\n /** Category navigation wrapper */\n categoryNav?: string\n /** Individual category link */\n categoryLink?: string\n /** Active category link (combined with categoryLink) */\n categoryLinkActive?: string\n /** Inactive category link (combined with categoryLink) */\n categoryLinkInactive?: string\n /** Posts grid container */\n grid?: string\n /** Individual post card */\n card?: string\n /** Card image wrapper */\n cardImageWrapper?: string\n /** Card image */\n cardImage?: string\n /** Card body/content area */\n cardBody?: string\n /** Card meta row (date, category) */\n cardMeta?: string\n /** Card category badge */\n cardCategory?: string\n /** Card date */\n cardDate?: string\n /** Card title */\n cardTitle?: string\n /** Card title link */\n cardTitleLink?: string\n /** Card excerpt */\n cardExcerpt?: string\n /** Card footer */\n cardFooter?: string\n /** Card author */\n cardAuthor?: string\n /** Card reading time */\n cardReadingTime?: string\n /** Card read more link */\n cardReadMore?: string\n /** Pagination container */\n pagination?: string\n /** Pagination link */\n paginationLink?: string\n /** Pagination info text */\n paginationInfo?: string\n /** Empty state */\n emptyState?: string\n}\n\n// ============================================================================\n// DATA FETCHING\n// ============================================================================\n\ninterface FetchBlogListParams {\n apiUrl: string\n apiKey: string\n category?: string\n tag?: string\n author?: string\n featured?: boolean\n search?: string\n page?: number\n perPage?: number\n orderBy?: 'published_at' | 'title' | 'view_count'\n order?: 'asc' | 'desc'\n}\n\nasync function fetchBlogList(params: FetchBlogListParams): Promise<BlogListResult> {\n const {\n apiUrl,\n apiKey,\n category,\n tag,\n author,\n featured,\n search,\n page = 1,\n perPage = 12,\n orderBy = 'published_at',\n order = 'desc',\n } = params\n\n const queryParams = new URLSearchParams()\n if (category) queryParams.set('category', category)\n if (tag) queryParams.set('tag', tag)\n if (author) queryParams.set('author', author)\n if (featured) queryParams.set('featured', 'true')\n if (search) queryParams.set('search', search)\n queryParams.set('page', String(page))\n queryParams.set('per_page', String(perPage))\n queryParams.set('order_by', orderBy)\n queryParams.set('order', order)\n\n try {\n const response = await fetch(`${apiUrl}/public/blog/posts?${queryParams}`, {\n headers: {\n 'x-api-key': apiKey,\n },\n next: { revalidate: 60 }, // Revalidate every 60 seconds\n })\n\n if (!response.ok) {\n console.error('[Blog] Failed to fetch posts:', response.statusText)\n return {\n posts: [],\n pagination: {\n page: 1,\n perPage: 12,\n total: 0,\n totalPages: 0,\n hasNext: false,\n hasPrev: false,\n },\n }\n }\n\n const data = await response.json()\n \n return {\n posts: data.posts || [],\n pagination: {\n page: data.pagination?.page || 1,\n perPage: data.pagination?.per_page || 12,\n total: data.pagination?.total || 0,\n totalPages: data.pagination?.total_pages || 0,\n hasNext: data.pagination?.has_next || false,\n hasPrev: data.pagination?.has_prev || false,\n },\n }\n } catch (error) {\n console.error('[Blog] Error fetching posts:', error)\n return {\n posts: [],\n pagination: {\n page: 1,\n perPage: 12,\n total: 0,\n totalPages: 0,\n hasNext: false,\n hasPrev: false,\n },\n }\n }\n}\n\nasync function fetchCategories(apiUrl: string, apiKey: string): Promise<BlogCategory[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/categories`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 }, // Cache for 5 minutes\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.categories || []\n } catch (error) {\n console.error('[Blog] Error fetching categories:', error)\n return []\n }\n}\n\n// ============================================================================\n// BLOG LIST COMPONENT\n// ============================================================================\n\nexport interface BlogListServerProps {\n /** Portal API URL */\n apiUrl?: string\n /** Project API key */\n apiKey?: string\n /** Filter by category slug */\n category?: string\n /** Filter by tag */\n tag?: string\n /** Filter by author */\n author?: string\n /** Only featured posts */\n featured?: boolean\n /** Search query */\n search?: string\n /** Page number (1-indexed) */\n page?: number\n /** Items per page */\n perPage?: number\n /** Sort field */\n orderBy?: 'published_at' | 'title' | 'view_count'\n /** Sort direction */\n order?: 'asc' | 'desc'\n /** Show category filter UI */\n showCategoryFilter?: boolean\n /** Show pagination */\n showPagination?: boolean\n /** Custom class name (applied to container) */\n className?: string\n /** Base URL for post links */\n basePath?: string\n /** \n * Custom Tailwind/CSS classes for each element.\n * When provided, inline styles are disabled for that element.\n */\n styles?: BlogListStyles\n /** Use CSS classes only (no inline styles) - set to true for Tailwind sites */\n unstyled?: boolean\n /** Custom render function for post card */\n renderPost?: (post: BlogPost) => React.ReactNode\n /** Custom render function for entire grid */\n children?: (props: {\n posts: BlogPost[]\n pagination: BlogListResult['pagination']\n categories: BlogCategory[]\n }) => React.ReactNode\n}\n\nexport async function BlogList({\n apiUrl = process.env.NEXT_PUBLIC_UPTRADE_API_URL || 'https://api.uptrademedia.com',\n apiKey = process.env.NEXT_PUBLIC_UPTRADE_API_KEY || '',\n category,\n tag,\n author,\n featured,\n search,\n page = 1,\n perPage = 12,\n orderBy = 'published_at',\n order = 'desc',\n showCategoryFilter = false,\n showPagination = true,\n className,\n basePath = '/blog',\n styles = {},\n unstyled = false,\n renderPost,\n children,\n}: BlogListServerProps) {\n if (!apiKey) {\n console.warn('[Blog] No API key configured')\n return null\n }\n\n // Helper to conditionally apply inline styles\n const inlineStyle = (defaultStyle: React.CSSProperties, classKey: keyof BlogListStyles) =>\n unstyled || styles[classKey] ? undefined : defaultStyle\n\n // Fetch data in parallel\n const [blogData, categories] = await Promise.all([\n fetchBlogList({\n apiUrl,\n apiKey,\n category,\n tag,\n author,\n featured,\n search,\n page,\n perPage,\n orderBy,\n order,\n }),\n showCategoryFilter ? fetchCategories(apiUrl, apiKey) : Promise.resolve([]),\n ])\n\n // Use custom render function if provided\n if (children) {\n return children({ posts: blogData.posts, pagination: blogData.pagination, categories })\n }\n\n const { posts, pagination } = blogData\n\n if (posts.length === 0) {\n return (\n <div \n className={`${styles.container || ''} ${styles.emptyState || ''} ${className || ''}`.trim() || undefined}\n style={inlineStyle({ textAlign: 'center', padding: 40 }, 'emptyState')}\n >\n <p style={inlineStyle({ color: '#6b7280' }, 'emptyState')}>No posts found.</p>\n </div>\n )\n }\n\n return (\n <div className={`${styles.container || ''} ${className || ''}`.trim() || undefined}>\n {/* Category Filter */}\n {showCategoryFilter && categories.length > 0 && (\n <nav \n className={styles.categoryNav}\n style={inlineStyle({ marginBottom: 24, display: 'flex', gap: 8, flexWrap: 'wrap' }, 'categoryNav')}\n >\n <a\n href={basePath}\n className={`${styles.categoryLink || ''} ${!category ? styles.categoryLinkActive || '' : styles.categoryLinkInactive || ''}`.trim() || undefined}\n style={inlineStyle({\n padding: '6px 12px',\n borderRadius: 9999,\n fontSize: 14,\n textDecoration: 'none',\n backgroundColor: !category ? '#3b82f6' : '#f3f4f6',\n color: !category ? '#fff' : '#374151',\n }, 'categoryLink')}\n >\n All\n </a>\n {categories.map((cat) => (\n <a\n key={cat.slug}\n href={`${basePath}?category=${cat.slug}`}\n className={`${styles.categoryLink || ''} ${category === cat.slug ? styles.categoryLinkActive || '' : styles.categoryLinkInactive || ''}`.trim() || undefined}\n style={inlineStyle({\n padding: '6px 12px',\n borderRadius: 9999,\n fontSize: 14,\n textDecoration: 'none',\n backgroundColor: category === cat.slug ? '#3b82f6' : '#f3f4f6',\n color: category === cat.slug ? '#fff' : '#374151',\n }, 'categoryLink')}\n >\n {cat.name} ({cat.post_count})\n </a>\n ))}\n </nav>\n )}\n\n {/* Blog Grid */}\n <div\n className={styles.grid}\n style={inlineStyle({\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))',\n gap: 24,\n }, 'grid')}\n >\n {posts.map((post) =>\n renderPost ? (\n <React.Fragment key={post.id}>{renderPost(post)}</React.Fragment>\n ) : (\n <BlogPostCard key={post.id} post={post} basePath={basePath} styles={styles} unstyled={unstyled} />\n )\n )}\n </div>\n\n {/* Pagination */}\n {showPagination && pagination.totalPages > 1 && (\n <nav\n className={styles.pagination}\n style={inlineStyle({\n marginTop: 40,\n display: 'flex',\n justifyContent: 'center',\n gap: 8,\n }, 'pagination')}\n >\n {pagination.hasPrev && (\n <a\n href={buildPaginationUrl(basePath, page - 1, category)}\n className={styles.paginationLink}\n style={inlineStyle(paginationLinkStyle, 'paginationLink')}\n >\n ← Previous\n </a>\n )}\n \n <span \n className={styles.paginationInfo}\n style={inlineStyle({ padding: '8px 16px', color: '#6b7280' }, 'paginationInfo')}\n >\n Page {pagination.page} of {pagination.totalPages}\n </span>\n \n {pagination.hasNext && (\n <a\n href={buildPaginationUrl(basePath, page + 1, category)}\n className={styles.paginationLink}\n style={inlineStyle(paginationLinkStyle, 'paginationLink')}\n >\n Next →\n </a>\n )}\n </nav>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// BLOG POST CARD (Default rendering)\n// ============================================================================\n\ninterface BlogPostCardProps {\n post: BlogPost\n basePath: string\n styles?: BlogListStyles\n unstyled?: boolean\n}\n\nfunction BlogPostCard({ post, basePath, styles = {}, unstyled = false }: BlogPostCardProps) {\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', {\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n })\n : null\n\n // Helper to conditionally apply inline styles\n const inlineStyle = (defaultStyle: React.CSSProperties, classKey: keyof BlogListStyles) =>\n unstyled || styles[classKey] ? undefined : defaultStyle\n\n return (\n <article\n className={styles.card}\n style={inlineStyle({\n backgroundColor: '#fff',\n borderRadius: 12,\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n transition: 'box-shadow 0.2s, transform 0.2s',\n }, 'card')}\n >\n {post.featured_image && (\n <a href={`${basePath}/${post.slug}`} className={styles.cardImageWrapper}>\n <img\n src={post.featured_image}\n alt={post.featured_image_alt || post.title}\n className={styles.cardImage}\n style={inlineStyle({\n width: '100%',\n height: 200,\n objectFit: 'cover',\n }, 'cardImage')}\n />\n </a>\n )}\n \n <div \n className={styles.cardBody}\n style={inlineStyle({ padding: 20 }, 'cardBody')}\n >\n {/* Meta */}\n <div \n className={styles.cardMeta}\n style={inlineStyle({ display: 'flex', alignItems: 'center', gap: 12, marginBottom: 12 }, 'cardMeta')}\n >\n {post.category && (\n <span\n className={styles.cardCategory}\n style={inlineStyle({\n padding: '2px 8px',\n borderRadius: 4,\n fontSize: 12,\n fontWeight: 500,\n backgroundColor: '#eff6ff',\n color: '#3b82f6',\n textTransform: 'uppercase',\n }, 'cardCategory')}\n >\n {typeof post.category === 'string' ? post.category : post.category?.name || 'Uncategorized'}\n </span>\n )}\n {date && (\n <span \n className={styles.cardDate}\n style={inlineStyle({ fontSize: 13, color: '#6b7280' }, 'cardDate')}\n >\n {date}\n </span>\n )}\n </div>\n\n {/* Title */}\n <h3 \n className={styles.cardTitle}\n style={inlineStyle({ margin: '0 0 8px', fontSize: 18, fontWeight: 600, lineHeight: 1.4 }, 'cardTitle')}\n >\n <a\n href={`${basePath}/${post.slug}`}\n className={styles.cardTitleLink}\n style={inlineStyle({ color: 'inherit', textDecoration: 'none' }, 'cardTitleLink')}\n >\n {post.title}\n </a>\n </h3>\n\n {/* Excerpt */}\n {post.excerpt && (\n <p\n className={styles.cardExcerpt}\n style={inlineStyle({\n margin: '0 0 16px',\n fontSize: 14,\n color: '#6b7280',\n lineHeight: 1.6,\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }, 'cardExcerpt')}\n >\n {post.excerpt}\n </p>\n )}\n\n {/* Footer */}\n <div \n className={styles.cardFooter}\n style={inlineStyle({ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }, 'cardFooter')}\n >\n {post.author && (\n <span \n className={styles.cardAuthor}\n style={inlineStyle({ fontSize: 13, color: '#6b7280' }, 'cardAuthor')}\n >\n By {typeof post.author === 'string' ? post.author : post.author.name}\n </span>\n )}\n {post.reading_time_minutes && (\n <span \n className={styles.cardReadingTime}\n style={inlineStyle({ fontSize: 13, color: '#9ca3af' }, 'cardReadingTime')}\n >\n {post.reading_time_minutes} min read\n </span>\n )}\n </div>\n </div>\n </article>\n )\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nfunction buildPaginationUrl(basePath: string, page: number, category?: string): string {\n const params = new URLSearchParams()\n params.set('page', String(page))\n if (category) params.set('category', category)\n return `${basePath}?${params}`\n}\n\nconst paginationLinkStyle: React.CSSProperties = {\n padding: '8px 16px',\n borderRadius: 8,\n backgroundColor: '#3b82f6',\n color: '#fff',\n textDecoration: 'none',\n fontSize: 14,\n fontWeight: 500,\n}","/**\n * @sonordev/site-kit/blog - Blog Sidebar Component\n * \n * A reusable sidebar for blog pages with categories, recent posts,\n * tags, newsletter signup, and custom widgets.\n */\n\nimport React from 'react'\nimport type { BlogPost, BlogCategory, BlogTag } from './types'\n\n// ============================================================================\n// DATA FETCHING\n// ============================================================================\n\nasync function fetchRecentPosts(\n apiUrl: string,\n apiKey: string,\n limit: number = 5\n): Promise<BlogPost[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/recent?limit=${limit}`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.posts || []\n } catch (error) {\n console.error('[Blog] Error fetching recent posts:', error)\n return []\n }\n}\n\nasync function fetchCategories(apiUrl: string, apiKey: string): Promise<BlogCategory[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/categories`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.categories || []\n } catch (error) {\n console.error('[Blog] Error fetching categories:', error)\n return []\n }\n}\n\nasync function fetchTags(apiUrl: string, apiKey: string): Promise<BlogTag[]> {\n try {\n const response = await fetch(`${apiUrl}/public/blog/tags`, {\n headers: { 'x-api-key': apiKey },\n next: { revalidate: 300 },\n })\n\n if (!response.ok) return []\n\n const data = await response.json()\n return data.tags || []\n } catch (error) {\n console.error('[Blog] Error fetching tags:', error)\n return []\n }\n}\n\n// ============================================================================\n// BLOG SIDEBAR COMPONENT\n// ============================================================================\n\nexport interface BlogSidebarProps {\n /** Portal API URL */\n apiUrl?: string\n /** Project API key */\n apiKey?: string\n /** Show categories widget */\n showCategories?: boolean\n /** Show recent posts widget */\n showRecentPosts?: boolean\n /** Number of recent posts to show */\n recentPostsCount?: number\n /** Show tags widget */\n showTags?: boolean\n /** Show search widget */\n showSearch?: boolean\n /** Base URL for blog links */\n basePath?: string\n /** Custom class name */\n className?: string\n /** Current category filter (for highlighting) */\n currentCategory?: string\n /** Additional widgets to render */\n children?: React.ReactNode\n}\n\nexport async function BlogSidebar({\n apiUrl = process.env.NEXT_PUBLIC_UPTRADE_API_URL || 'https://api.uptrademedia.com',\n apiKey = process.env.NEXT_PUBLIC_UPTRADE_API_KEY || '',\n showCategories = true,\n showRecentPosts = true,\n recentPostsCount = 5,\n showTags = true,\n showSearch = true,\n basePath = '/blog',\n className,\n currentCategory,\n children,\n}: BlogSidebarProps) {\n if (!apiKey) {\n console.warn('[Blog] No API key configured for sidebar')\n return null\n }\n\n // Fetch data in parallel\n const [categories, recentPosts, tags] = await Promise.all([\n showCategories ? fetchCategories(apiUrl, apiKey) : Promise.resolve([]),\n showRecentPosts ? fetchRecentPosts(apiUrl, apiKey, recentPostsCount) : Promise.resolve([]),\n showTags ? fetchTags(apiUrl, apiKey) : Promise.resolve([]),\n ])\n\n return (\n <aside className={className} style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {/* Search Widget */}\n {showSearch && <SearchWidget basePath={basePath} />}\n\n {/* Categories Widget */}\n {showCategories && categories.length > 0 && (\n <CategoriesWidget\n categories={categories}\n basePath={basePath}\n currentCategory={currentCategory}\n />\n )}\n\n {/* Recent Posts Widget */}\n {showRecentPosts && recentPosts.length > 0 && (\n <RecentPostsWidget posts={recentPosts} basePath={basePath} />\n )}\n\n {/* Tags Widget */}\n {showTags && tags.length > 0 && (\n <TagsWidget tags={tags} basePath={basePath} />\n )}\n\n {/* Custom Widgets */}\n {children}\n </aside>\n )\n}\n\n// ============================================================================\n// WIDGET COMPONENTS\n// ============================================================================\n\nfunction SearchWidget({ basePath }: { basePath: string }) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Search</h4>\n <form action={basePath} method=\"get\">\n <input\n type=\"search\"\n name=\"search\"\n placeholder=\"Search posts...\"\n style={{\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e5e7eb',\n borderRadius: 8,\n fontSize: 14,\n }}\n />\n </form>\n </div>\n )\n}\n\nfunction CategoriesWidget({\n categories,\n basePath,\n currentCategory,\n}: {\n categories: BlogCategory[]\n basePath: string\n currentCategory?: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Categories</h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n <li style={{ marginBottom: 8 }}>\n <a\n href={basePath}\n style={{\n ...categoryLinkStyle,\n fontWeight: !currentCategory ? 600 : 400,\n color: !currentCategory ? '#3b82f6' : '#374151',\n }}\n >\n All Posts\n </a>\n </li>\n {categories.map((cat) => (\n <li key={cat.slug} style={{ marginBottom: 8 }}>\n <a\n href={`${basePath}?category=${cat.slug}`}\n style={{\n ...categoryLinkStyle,\n fontWeight: currentCategory === cat.slug ? 600 : 400,\n color: currentCategory === cat.slug ? '#3b82f6' : '#374151',\n }}\n >\n {cat.name}\n <span style={{ color: '#9ca3af', marginLeft: 8 }}>({cat.post_count})</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nfunction RecentPostsWidget({\n posts,\n basePath,\n}: {\n posts: BlogPost[]\n basePath: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Recent Posts</h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {posts.map((post) => {\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n })\n : null\n\n return (\n <li\n key={post.id}\n style={{\n marginBottom: 16,\n paddingBottom: 16,\n borderBottom: '1px solid #e5e7eb',\n }}\n >\n <div style={{ display: 'flex', gap: 12 }}>\n {post.featured_image && (\n <a href={`${basePath}/${post.slug}`}>\n <img\n src={post.featured_image}\n alt=\"\"\n style={{\n width: 64,\n height: 48,\n objectFit: 'cover',\n borderRadius: 6,\n flexShrink: 0,\n }}\n />\n </a>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <a\n href={`${basePath}/${post.slug}`}\n style={{\n fontSize: 14,\n fontWeight: 500,\n color: '#374151',\n textDecoration: 'none',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {post.title}\n </a>\n {date && (\n <span style={{ fontSize: 12, color: '#9ca3af', display: 'block', marginTop: 4 }}>\n {date}\n </span>\n )}\n </div>\n </div>\n </li>\n )\n })}\n </ul>\n </div>\n )\n}\n\nfunction TagsWidget({\n tags,\n basePath,\n}: {\n tags: BlogTag[]\n basePath: string\n}) {\n return (\n <div style={widgetStyle}>\n <h4 style={widgetTitleStyle}>Popular Tags</h4>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n {tags.slice(0, 15).map((tag) => (\n <a\n key={tag.slug}\n href={`${basePath}?tag=${tag.slug}`}\n style={{\n padding: '4px 10px',\n backgroundColor: '#f3f4f6',\n borderRadius: 9999,\n fontSize: 12,\n color: '#374151',\n textDecoration: 'none',\n transition: 'background-color 0.2s',\n }}\n >\n {tag.name}\n </a>\n ))}\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// NEWSLETTER WIDGET (Client Component for forms)\n// ============================================================================\n\nexport interface NewsletterWidgetProps {\n title?: string\n description?: string\n buttonText?: string\n onSubmit?: (email: string) => Promise<void>\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}: NewsletterWidgetProps) {\n return (\n <div style={{ ...widgetStyle, backgroundColor: '#eff6ff' }}>\n <h4 style={{ ...widgetTitleStyle, color: '#1e40af' }}>{title}</h4>\n <p style={{ fontSize: 14, color: '#6b7280', marginBottom: 16 }}>{description}</p>\n <form\n onSubmit={(e) => {\n e.preventDefault()\n // Handle form submission via parent onSubmit or inline\n }}\n style={{ display: 'flex', gap: 8 }}\n >\n <input\n type=\"email\"\n name=\"email\"\n placeholder=\"Enter your email\"\n required\n style={{\n flex: 1,\n padding: '10px 12px',\n border: '1px solid #bfdbfe',\n borderRadius: 8,\n fontSize: 14,\n }}\n />\n <button\n type=\"submit\"\n style={{\n padding: '10px 16px',\n backgroundColor: '#3b82f6',\n color: '#fff',\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {buttonText}\n </button>\n </form>\n </div>\n )\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst widgetStyle: React.CSSProperties = {\n padding: 20,\n backgroundColor: '#f9fafb',\n borderRadius: 12,\n}\n\nconst widgetTitleStyle: React.CSSProperties = {\n margin: '0 0 16px',\n fontSize: 16,\n fontWeight: 600,\n color: '#111827',\n}\n\nconst categoryLinkStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n fontSize: 14,\n textDecoration: 'none',\n}\n","/**\n * @sonordev/site-kit/blog - Blog Layout Component\n * \n * A complete blog layout with sidebar, responsive design, and optional hero.\n * Use this to wrap your blog pages for consistent styling.\n */\n\nimport React from 'react'\nimport { BlogSidebar, BlogSidebarProps } from './BlogSidebar'\n\n// ============================================================================\n// BLOG LAYOUT COMPONENT\n// ============================================================================\n\nexport interface BlogLayoutProps {\n /** Portal API URL */\n apiUrl?: string\n /** Project API key */\n apiKey?: string\n /** Layout style: 'sidebar-right', 'sidebar-left', 'full-width' */\n layout?: 'sidebar-right' | 'sidebar-left' | 'full-width'\n /** Show sidebar */\n showSidebar?: boolean\n /** Sidebar props */\n sidebarProps?: Partial<BlogSidebarProps>\n /** Hero section config */\n hero?: {\n title?: string\n subtitle?: string\n backgroundImage?: string\n backgroundColor?: string\n }\n /** Max width for content */\n maxWidth?: number\n /** Base URL for blog links */\n basePath?: string\n /** Custom class name */\n className?: string\n /** Current category (for sidebar highlighting) */\n currentCategory?: string\n /** Main content */\n children: React.ReactNode\n}\n\nexport async function BlogLayout({\n apiUrl = process.env.NEXT_PUBLIC_UPTRADE_API_URL || 'https://api.uptrademedia.com',\n apiKey = process.env.NEXT_PUBLIC_UPTRADE_API_KEY || '',\n layout = 'sidebar-right',\n showSidebar = true,\n sidebarProps = {},\n hero,\n maxWidth = 1280,\n basePath = '/blog',\n className,\n currentCategory,\n children,\n}: BlogLayoutProps) {\n const hasSidebar = showSidebar && layout !== 'full-width'\n\n return (\n <div className={className}>\n {/* Hero Section */}\n {hero && (\n <section\n style={{\n padding: '60px 20px',\n backgroundColor: hero.backgroundColor || '#1e3a5f',\n backgroundImage: hero.backgroundImage ? `url(${hero.backgroundImage})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n color: '#fff',\n textAlign: 'center',\n }}\n >\n <div style={{ maxWidth, margin: '0 auto' }}>\n {hero.title && (\n <h1\n style={{\n fontSize: 'clamp(32px, 5vw, 48px)',\n fontWeight: 700,\n marginBottom: 16,\n }}\n >\n {hero.title}\n </h1>\n )}\n {hero.subtitle && (\n <p\n style={{\n fontSize: 'clamp(16px, 2vw, 20px)',\n opacity: 0.9,\n maxWidth: 600,\n margin: '0 auto',\n }}\n >\n {hero.subtitle}\n </p>\n )}\n </div>\n </section>\n )}\n\n {/* Main Content Area */}\n <div\n style={{\n maxWidth,\n margin: '0 auto',\n padding: '40px 20px',\n }}\n >\n <div\n style={{\n display: hasSidebar ? 'grid' : 'block',\n gridTemplateColumns: hasSidebar\n ? layout === 'sidebar-left'\n ? '300px 1fr'\n : '1fr 300px'\n : undefined,\n gap: 48,\n }}\n >\n {/* Sidebar (Left Position) */}\n {hasSidebar && layout === 'sidebar-left' && (\n <BlogSidebar\n apiUrl={apiUrl}\n apiKey={apiKey}\n basePath={basePath}\n currentCategory={currentCategory}\n {...sidebarProps}\n />\n )}\n\n {/* Main Content */}\n <main style={{ minWidth: 0 }}>{children}</main>\n\n {/* Sidebar (Right Position) */}\n {hasSidebar && layout === 'sidebar-right' && (\n <BlogSidebar\n apiUrl={apiUrl}\n apiKey={apiKey}\n basePath={basePath}\n currentCategory={currentCategory}\n {...sidebarProps}\n />\n )}\n </div>\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// BLOG PAGE WRAPPER\n// ============================================================================\n\n/**\n * Convenience wrapper for a complete blog index page\n */\nexport interface BlogPageProps extends Omit<BlogLayoutProps, 'children'> {\n /** List component to render */\n listComponent: React.ReactNode\n}\n\nexport async function BlogPage({ listComponent, ...layoutProps }: BlogPageProps) {\n return <BlogLayout {...layoutProps}>{listComponent}</BlogLayout>\n}\n\n/**\n * Convenience wrapper for a single blog post page\n */\nexport interface BlogPostPageProps extends Omit<BlogLayoutProps, 'children'> {\n /** Post component to render */\n postComponent: React.ReactNode\n}\n\nexport async function BlogPostPage({ postComponent, ...layoutProps }: BlogPostPageProps) {\n return (\n <BlogLayout {...layoutProps} showSidebar={false} layout=\"full-width\">\n <div style={{ maxWidth: 800, margin: '0 auto' }}>{postComponent}</div>\n </BlogLayout>\n )\n}\n\n// ============================================================================\n// CATEGORY PAGE WRAPPER\n// ============================================================================\n\nexport interface CategoryPageProps extends BlogLayoutProps {\n /** Category slug being viewed */\n category: string\n /** Category display name */\n categoryName?: string\n /** List component */\n listComponent: React.ReactNode\n}\n\nexport async function CategoryPage({\n category,\n categoryName,\n listComponent,\n hero,\n ...layoutProps\n}: CategoryPageProps) {\n const categoryHero = hero || {\n title: categoryName || category,\n subtitle: `Browse all posts in ${categoryName || category}`,\n backgroundColor: '#1e3a5f',\n }\n\n return (\n <BlogLayout {...layoutProps} hero={categoryHero} currentCategory={category}>\n {listComponent}\n </BlogLayout>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Author Card Component\n */\n\nimport React from 'react'\nimport type { AuthorCardProps } from './types'\n\nexport function AuthorCard({ author, showBio = true, showSocial = true, className }: AuthorCardProps) {\n return (\n <div className={className} 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',\n }}\n />\n )}\n <div>\n <h4 style={{ margin: 0 }}>{author.name}</h4>\n {showBio && author.bio && (\n <p style={{ margin: '4px 0', color: '#6b7280', fontSize: 14 }}>{author.bio}</p>\n )}\n {showSocial && author.social_links && (\n <div style={{ display: 'flex', gap: 12, marginTop: 8 }}>\n {author.social_links.twitter && (\n <a href={`https://twitter.com/${author.social_links.twitter}`} target=\"_blank\" rel=\"noopener noreferrer\">\n Twitter\n </a>\n )}\n {author.social_links.linkedin && (\n <a href={author.social_links.linkedin} target=\"_blank\" rel=\"noopener noreferrer\">\n LinkedIn\n </a>\n )}\n {author.social_links.github && (\n <a href={`https://github.com/${author.social_links.github}`} target=\"_blank\" rel=\"noopener noreferrer\">\n GitHub\n </a>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Related Posts Component\n * \n * Fetches and displays related blog posts via Portal API\n */\n\nimport React from 'react'\nimport type { RelatedPostsProps, BlogPost } from './types'\n\nasync function fetchRelatedPosts(\n apiUrl: string,\n apiKey: string,\n currentPostId: string,\n limit: number\n): Promise<BlogPost[]> {\n try {\n const response = await fetch(`${apiUrl}/api/public/blog/related`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({\n currentPostId,\n limit,\n }),\n })\n \n if (!response.ok) {\n console.error('Failed to fetch related posts:', response.statusText)\n return []\n }\n \n const data = await response.json()\n return data.posts || []\n } catch (error) {\n console.error('Failed to fetch related posts:', error)\n return []\n }\n}\n\ninterface RelatedPostsServerProps {\n apiUrl?: string\n apiKey?: string\n currentPostId: string\n limit?: number\n className?: string\n renderItem?: (post: BlogPost) => React.ReactNode\n}\n\nexport async function RelatedPosts({\n apiUrl = process.env.NEXT_PUBLIC_UPTRADE_API_URL || 'https://api.uptrademedia.com',\n apiKey = process.env.NEXT_PUBLIC_UPTRADE_API_KEY || '',\n currentPostId,\n limit = 3,\n className,\n renderItem,\n}: RelatedPostsServerProps) {\n if (!apiKey) {\n console.warn('[Blog] No API key configured for RelatedPosts')\n return null\n }\n \n const posts = await fetchRelatedPosts(apiUrl, apiKey, currentPostId, limit)\n\n if (posts.length === 0) return null\n\n return (\n <section className={className}>\n <h3 style={{ marginBottom: 16 }}>Related Posts</h3>\n <div style={{ display: 'grid', gap: 16 }}>\n {posts.map((post) =>\n renderItem ? (\n renderItem(post)\n ) : (\n <article key={post.id} style={{ borderBottom: '1px solid #e5e7eb', paddingBottom: 16 }}>\n {post.featured_image && (\n <img\n src={post.featured_image}\n alt={post.title}\n style={{\n width: '100%',\n height: 120,\n objectFit: 'cover',\n borderRadius: 8,\n marginBottom: 8,\n }}\n />\n )}\n <a href={`/blog/${post.slug}`} style={{ textDecoration: 'none' }}>\n <h4 style={{ margin: 0, color: 'inherit' }}>{post.title}</h4>\n </a>\n {post.excerpt && (\n <p style={{ margin: '4px 0 0', fontSize: 14, color: '#6b7280' }}>\n {post.excerpt}\n </p>\n )}\n </article>\n )\n )}\n </div>\n </section>\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 ? '#2563eb' : '#6b7280',\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"]}