@flamingo-stack/openframe-frontend-core 0.0.296-snapshot.20260621021605 → 0.0.296

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 (276) hide show
  1. package/README.md +0 -9
  2. package/dist/chunk-26PKDALD.js +2379 -0
  3. package/dist/chunk-26PKDALD.js.map +1 -0
  4. package/dist/chunk-3MCHAFHB.js +89 -0
  5. package/dist/chunk-3MCHAFHB.js.map +1 -0
  6. package/dist/{chunk-PI4WSYQV.js → chunk-3ZXUQQL4.js} +2 -2
  7. package/dist/{chunk-WMSTJAZT.cjs → chunk-5E2HOSSH.cjs} +51 -913
  8. package/dist/chunk-5E2HOSSH.cjs.map +1 -0
  9. package/dist/{chunk-IL47XWV5.js → chunk-5P3B2LZW.js} +14 -8
  10. package/dist/{chunk-IL47XWV5.js.map → chunk-5P3B2LZW.js.map} +1 -1
  11. package/dist/chunk-66AANIOC.cjs +619 -0
  12. package/dist/chunk-66AANIOC.cjs.map +1 -0
  13. package/dist/{chunk-AD6C23QY.js → chunk-6GCI7JOE.js} +7 -8
  14. package/dist/{chunk-AD6C23QY.js.map → chunk-6GCI7JOE.js.map} +1 -1
  15. package/dist/chunk-6JINAOI7.cjs +311 -0
  16. package/dist/chunk-6JINAOI7.cjs.map +1 -0
  17. package/dist/{chunk-2QG57XOJ.js → chunk-7RIYT7ZH.js} +205 -1067
  18. package/dist/chunk-7RIYT7ZH.js.map +1 -0
  19. package/dist/{chunk-L6PSSIUQ.cjs → chunk-AQOWFSMB.cjs} +1 -1
  20. package/dist/chunk-AQOWFSMB.cjs.map +1 -0
  21. package/dist/chunk-BOCFIKYS.cjs +3009 -0
  22. package/dist/chunk-BOCFIKYS.cjs.map +1 -0
  23. package/dist/{chunk-54KNMC2R.cjs → chunk-D3LEFMOA.cjs} +3 -3
  24. package/dist/{chunk-54KNMC2R.cjs.map → chunk-D3LEFMOA.cjs.map} +1 -1
  25. package/dist/chunk-D652TJBQ.js +3009 -0
  26. package/dist/chunk-D652TJBQ.js.map +1 -0
  27. package/dist/{chunk-PWQUAVA3.js → chunk-E4XABBSU.js} +98 -338
  28. package/dist/chunk-E4XABBSU.js.map +1 -0
  29. package/dist/{chunk-JALO4TAZ.js → chunk-EL6QLAWX.js} +55 -357
  30. package/dist/chunk-EL6QLAWX.js.map +1 -0
  31. package/dist/{chunk-6C526VNN.cjs → chunk-EYEW6PTA.cjs} +118 -358
  32. package/dist/chunk-EYEW6PTA.cjs.map +1 -0
  33. package/dist/chunk-FQJK446R.js +1606 -0
  34. package/dist/chunk-FQJK446R.js.map +1 -0
  35. package/dist/{chunk-4PSQS3SW.cjs → chunk-GLLDTKZK.cjs} +9 -7
  36. package/dist/chunk-GLLDTKZK.cjs.map +1 -0
  37. package/dist/{chunk-FQOTC3UU.cjs → chunk-IE6OU3WQ.cjs} +16 -318
  38. package/dist/chunk-IE6OU3WQ.cjs.map +1 -0
  39. package/dist/chunk-J54Z3OCR.cjs +1606 -0
  40. package/dist/chunk-J54Z3OCR.cjs.map +1 -0
  41. package/dist/{chunk-PC746XCO.js → chunk-K2PFPBMF.js} +5563 -15048
  42. package/dist/chunk-K2PFPBMF.js.map +1 -0
  43. package/dist/chunk-KXCRGTRN.cjs +2379 -0
  44. package/dist/chunk-KXCRGTRN.cjs.map +1 -0
  45. package/dist/{chunk-IZ7JSBFP.js → chunk-LCNMR277.js} +1 -1
  46. package/dist/chunk-LCNMR277.js.map +1 -0
  47. package/dist/chunk-LFGGF7OT.cjs +449 -0
  48. package/dist/chunk-LFGGF7OT.cjs.map +1 -0
  49. package/dist/chunk-M2OCXTNT.js +311 -0
  50. package/dist/chunk-M2OCXTNT.js.map +1 -0
  51. package/dist/{chunk-L7ULJKG7.js → chunk-MBFWU2EM.js} +10 -6
  52. package/dist/{chunk-L7ULJKG7.js.map → chunk-MBFWU2EM.js.map} +1 -1
  53. package/dist/chunk-ME4EVDFP.js +619 -0
  54. package/dist/chunk-ME4EVDFP.js.map +1 -0
  55. package/dist/chunk-OQ6X7ZOC.js +449 -0
  56. package/dist/chunk-OQ6X7ZOC.js.map +1 -0
  57. package/dist/{chunk-4TLE6VLU.js → chunk-OY7OF7E7.js} +24 -30
  58. package/dist/chunk-OY7OF7E7.js.map +1 -0
  59. package/dist/chunk-POKKCWKF.js +354 -0
  60. package/dist/chunk-POKKCWKF.js.map +1 -0
  61. package/dist/{chunk-GUTS7HGA.cjs → chunk-QHIXS3W2.cjs} +2514 -11999
  62. package/dist/chunk-QHIXS3W2.cjs.map +1 -0
  63. package/dist/chunk-TFSYSWPS.cjs +89 -0
  64. package/dist/chunk-TFSYSWPS.cjs.map +1 -0
  65. package/dist/{chunk-53FUMSZ5.cjs → chunk-W6M2FLLT.cjs} +46 -40
  66. package/dist/chunk-W6M2FLLT.cjs.map +1 -0
  67. package/dist/{chunk-3JIQVE7T.js → chunk-WHMATDVP.js} +15 -9
  68. package/dist/{chunk-3JIQVE7T.js.map → chunk-WHMATDVP.js.map} +1 -1
  69. package/dist/{chunk-YBYI62OE.cjs → chunk-X647HY3F.cjs} +37 -33
  70. package/dist/chunk-X647HY3F.cjs.map +1 -0
  71. package/dist/{chunk-UNVE2SDJ.cjs → chunk-X6BV7MB7.cjs} +31 -37
  72. package/dist/chunk-X6BV7MB7.cjs.map +1 -0
  73. package/dist/{chunk-7OVGB2DQ.cjs → chunk-XREEV72C.cjs} +25 -19
  74. package/dist/chunk-XREEV72C.cjs.map +1 -0
  75. package/dist/chunk-YETA25JW.cjs +354 -0
  76. package/dist/chunk-YETA25JW.cjs.map +1 -0
  77. package/dist/{chunk-FCDQNTDG.cjs → chunk-YIGPRLQY.cjs} +20 -21
  78. package/dist/chunk-YIGPRLQY.cjs.map +1 -0
  79. package/dist/{chunk-X4DOXQRT.js → chunk-ZP4AVIZP.js} +6 -4
  80. package/dist/{chunk-X4DOXQRT.js.map → chunk-ZP4AVIZP.js.map} +1 -1
  81. package/dist/components/chat/index.cjs +18 -8
  82. package/dist/components/chat/index.cjs.map +1 -1
  83. package/dist/components/chat/index.js +85 -75
  84. package/dist/components/contact/index.cjs +15 -8
  85. package/dist/components/contact/index.cjs.map +1 -1
  86. package/dist/components/contact/index.js +14 -7
  87. package/dist/components/docs/doc-viewer.d.ts +2 -39
  88. package/dist/components/docs/doc-viewer.d.ts.map +1 -1
  89. package/dist/components/docs/index.cjs +9 -17
  90. package/dist/components/docs/index.cjs.map +1 -1
  91. package/dist/components/docs/index.d.ts +0 -4
  92. package/dist/components/docs/index.d.ts.map +1 -1
  93. package/dist/components/docs/index.js +8 -16
  94. package/dist/components/docs/use-document-tree.d.ts.map +1 -1
  95. package/dist/components/embeds/embed-iframe.d.ts.map +1 -1
  96. package/dist/components/embeds/index.cjs +15 -38
  97. package/dist/components/embeds/index.cjs.map +1 -1
  98. package/dist/components/embeds/index.d.ts +0 -8
  99. package/dist/components/embeds/index.d.ts.map +1 -1
  100. package/dist/components/embeds/index.js +17 -40
  101. package/dist/components/faq/index.cjs +16 -9
  102. package/dist/components/faq/index.cjs.map +1 -1
  103. package/dist/components/faq/index.js +15 -8
  104. package/dist/components/features/index.cjs +16 -8
  105. package/dist/components/features/index.cjs.map +1 -1
  106. package/dist/components/features/index.js +32 -24
  107. package/dist/components/index.cjs +452 -257
  108. package/dist/components/index.cjs.map +1 -1
  109. package/dist/components/index.js +976 -781
  110. package/dist/components/index.js.map +1 -1
  111. package/dist/components/layout/page-layout.d.ts +1 -10
  112. package/dist/components/layout/page-layout.d.ts.map +1 -1
  113. package/dist/components/layout/title-block.d.ts +1 -17
  114. package/dist/components/layout/title-block.d.ts.map +1 -1
  115. package/dist/components/navigation/index.cjs +15 -7
  116. package/dist/components/navigation/index.cjs.map +1 -1
  117. package/dist/components/navigation/index.js +17 -9
  118. package/dist/components/onboarding-guides/index.cjs +36 -35
  119. package/dist/components/onboarding-guides/index.cjs.map +1 -1
  120. package/dist/components/onboarding-guides/index.js +14 -13
  121. package/dist/components/onboarding-guides/index.js.map +1 -1
  122. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts +1 -1
  123. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  124. package/dist/components/related-content/index.cjs +16 -9
  125. package/dist/components/related-content/index.cjs.map +1 -1
  126. package/dist/components/related-content/index.js +15 -8
  127. package/dist/components/shared/dev-section/dev-section-page.d.ts +0 -9
  128. package/dist/components/shared/dev-section/dev-section-page.d.ts.map +1 -1
  129. package/dist/components/shared/dev-section/dev-section-view.d.ts.map +1 -1
  130. package/dist/components/shared/dev-section/index.d.ts +1 -1
  131. package/dist/components/shared/dev-section/index.d.ts.map +1 -1
  132. package/dist/components/shared/doc-search/use-doc-search.d.ts.map +1 -1
  133. package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
  134. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  135. package/dist/components/tickets/index.cjs +112 -100
  136. package/dist/components/tickets/index.cjs.map +1 -1
  137. package/dist/components/tickets/index.js +32 -20
  138. package/dist/components/tickets/index.js.map +1 -1
  139. package/dist/components/ui/file-manager/index.cjs +52 -50
  140. package/dist/components/ui/file-manager/index.cjs.map +1 -1
  141. package/dist/components/ui/file-manager/index.js +6 -4
  142. package/dist/components/ui/file-manager/index.js.map +1 -1
  143. package/dist/components/ui/index.cjs +19 -13
  144. package/dist/components/ui/index.cjs.map +1 -1
  145. package/dist/components/ui/index.d.ts +0 -2
  146. package/dist/components/ui/index.d.ts.map +1 -1
  147. package/dist/components/ui/index.js +139 -133
  148. package/dist/components/ui/release-changelog-section.d.ts +2 -6
  149. package/dist/components/ui/release-changelog-section.d.ts.map +1 -1
  150. package/dist/components/ui/simple-markdown-renderer.d.ts +8 -2
  151. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
  152. package/dist/contexts/chat-runtime-context.d.ts +0 -14
  153. package/dist/contexts/chat-runtime-context.d.ts.map +1 -1
  154. package/dist/contexts/index.cjs +3 -3
  155. package/dist/contexts/index.js +5 -5
  156. package/dist/embed-shims/index.cjs +3 -3
  157. package/dist/embed-shims/index.cjs.map +1 -1
  158. package/dist/embed-shims/index.js +4 -4
  159. package/dist/hooks/index.cjs +9 -4
  160. package/dist/hooks/index.cjs.map +1 -1
  161. package/dist/hooks/index.js +11 -6
  162. package/dist/index.cjs +20 -14
  163. package/dist/index.cjs.map +1 -1
  164. package/dist/index.js +364 -358
  165. package/dist/types/doc-source.d.ts +1 -31
  166. package/dist/types/doc-source.d.ts.map +1 -1
  167. package/dist/utils/index.cjs +0 -4
  168. package/dist/utils/index.cjs.map +1 -1
  169. package/dist/utils/index.d.ts +0 -1
  170. package/dist/utils/index.d.ts.map +1 -1
  171. package/dist/utils/index.js +1 -4
  172. package/dist/utils/index.js.map +1 -1
  173. package/package.json +1 -7
  174. package/src/components/chat/embeddable-chat.tsx +1 -1
  175. package/src/components/docs/doc-viewer.tsx +19 -111
  176. package/src/components/docs/index.ts +0 -17
  177. package/src/components/docs/use-document-tree.ts +0 -21
  178. package/src/components/embeds/embed-iframe.tsx +9 -7
  179. package/src/components/embeds/index.ts +0 -30
  180. package/src/components/embeds/og-link-preview.tsx +13 -13
  181. package/src/components/layout/page-layout.tsx +1 -14
  182. package/src/components/layout/title-block.tsx +62 -40
  183. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +3 -3
  184. package/src/components/shared/dev-section/dev-section-page.tsx +1 -9
  185. package/src/components/shared/dev-section/dev-section-view.tsx +9 -14
  186. package/src/components/shared/dev-section/index.ts +1 -1
  187. package/src/components/shared/doc-search/use-doc-search.ts +3 -7
  188. package/src/components/shared/legal-document/legal-document-page.tsx +2 -2
  189. package/src/components/shared/product-release/release-detail-page.tsx +4 -6
  190. package/src/components/ui/index.ts +0 -2
  191. package/src/components/ui/release-changelog-section.tsx +2 -7
  192. package/src/components/ui/simple-markdown-renderer.tsx +11 -7
  193. package/src/contexts/chat-runtime-context.tsx +0 -14
  194. package/src/types/doc-source.ts +1 -33
  195. package/src/utils/index.ts +0 -1
  196. package/dist/chunk-2QG57XOJ.js.map +0 -1
  197. package/dist/chunk-4PSQS3SW.cjs.map +0 -1
  198. package/dist/chunk-4TLE6VLU.js.map +0 -1
  199. package/dist/chunk-53FUMSZ5.cjs.map +0 -1
  200. package/dist/chunk-6C526VNN.cjs.map +0 -1
  201. package/dist/chunk-7OVGB2DQ.cjs.map +0 -1
  202. package/dist/chunk-F5OB2YAL.cjs +0 -144
  203. package/dist/chunk-F5OB2YAL.cjs.map +0 -1
  204. package/dist/chunk-FBWXMMRB.cjs +0 -2
  205. package/dist/chunk-FBWXMMRB.cjs.map +0 -1
  206. package/dist/chunk-FCDQNTDG.cjs.map +0 -1
  207. package/dist/chunk-FQOTC3UU.cjs.map +0 -1
  208. package/dist/chunk-GUTS7HGA.cjs.map +0 -1
  209. package/dist/chunk-GZ4C3XW6.js +0 -2
  210. package/dist/chunk-GZ4C3XW6.js.map +0 -1
  211. package/dist/chunk-IZ7JSBFP.js.map +0 -1
  212. package/dist/chunk-JALO4TAZ.js.map +0 -1
  213. package/dist/chunk-L6PSSIUQ.cjs.map +0 -1
  214. package/dist/chunk-PC746XCO.js.map +0 -1
  215. package/dist/chunk-PWQUAVA3.js.map +0 -1
  216. package/dist/chunk-SA2WPJVO.js +0 -144
  217. package/dist/chunk-SA2WPJVO.js.map +0 -1
  218. package/dist/chunk-UNVE2SDJ.cjs.map +0 -1
  219. package/dist/chunk-WMSTJAZT.cjs.map +0 -1
  220. package/dist/chunk-YBYI62OE.cjs.map +0 -1
  221. package/dist/components/case-studies/index.cjs +0 -126
  222. package/dist/components/case-studies/index.cjs.map +0 -1
  223. package/dist/components/case-studies/index.d.ts +0 -2
  224. package/dist/components/case-studies/index.d.ts.map +0 -1
  225. package/dist/components/case-studies/index.js +0 -126
  226. package/dist/components/case-studies/index.js.map +0 -1
  227. package/dist/components/case-studies/share-experience-section.d.ts +0 -48
  228. package/dist/components/case-studies/share-experience-section.d.ts.map +0 -1
  229. package/dist/components/docs/docs-hub-page.d.ts +0 -46
  230. package/dist/components/docs/docs-hub-page.d.ts.map +0 -1
  231. package/dist/components/docs/skeletons.d.ts +0 -32
  232. package/dist/components/docs/skeletons.d.ts.map +0 -1
  233. package/dist/components/docs/use-docs-resolve-link.d.ts +0 -20
  234. package/dist/components/docs/use-docs-resolve-link.d.ts.map +0 -1
  235. package/dist/components/embeds/embed-container.d.ts +0 -37
  236. package/dist/components/embeds/embed-container.d.ts.map +0 -1
  237. package/dist/components/embeds/file-download-card.d.ts +0 -18
  238. package/dist/components/embeds/file-download-card.d.ts.map +0 -1
  239. package/dist/components/embeds/linkedin-embed-client.d.ts +0 -8
  240. package/dist/components/embeds/linkedin-embed-client.d.ts.map +0 -1
  241. package/dist/components/embeds/markdown-image.d.ts +0 -5
  242. package/dist/components/embeds/markdown-image.d.ts.map +0 -1
  243. package/dist/components/embeds/reddit-embed-client.d.ts +0 -7
  244. package/dist/components/embeds/reddit-embed-client.d.ts.map +0 -1
  245. package/dist/components/embeds/rich-markdown-runtime.d.ts +0 -46
  246. package/dist/components/embeds/rich-markdown-runtime.d.ts.map +0 -1
  247. package/dist/components/embeds/twitter-embed-client.d.ts +0 -8
  248. package/dist/components/embeds/twitter-embed-client.d.ts.map +0 -1
  249. package/dist/components/layout/page-header.d.ts +0 -78
  250. package/dist/components/layout/page-header.d.ts.map +0 -1
  251. package/dist/components/layout/page-with-header.d.ts +0 -67
  252. package/dist/components/layout/page-with-header.d.ts.map +0 -1
  253. package/dist/components/ui/rich-markdown-renderer.d.ts +0 -34
  254. package/dist/components/ui/rich-markdown-renderer.d.ts.map +0 -1
  255. package/dist/utils/page-header-constants.d.ts +0 -15
  256. package/dist/utils/page-header-constants.d.ts.map +0 -1
  257. package/dist/utils/social-embed-cache.d.ts +0 -29
  258. package/dist/utils/social-embed-cache.d.ts.map +0 -1
  259. package/src/components/case-studies/index.ts +0 -4
  260. package/src/components/case-studies/share-experience-section.tsx +0 -185
  261. package/src/components/docs/docs-hub-page.tsx +0 -149
  262. package/src/components/docs/skeletons.tsx +0 -138
  263. package/src/components/docs/use-docs-resolve-link.ts +0 -52
  264. package/src/components/embeds/embed-container.tsx +0 -80
  265. package/src/components/embeds/file-download-card.tsx +0 -54
  266. package/src/components/embeds/linkedin-embed-client.tsx +0 -100
  267. package/src/components/embeds/markdown-image.tsx +0 -88
  268. package/src/components/embeds/reddit-embed-client.tsx +0 -550
  269. package/src/components/embeds/rich-markdown-runtime.tsx +0 -79
  270. package/src/components/embeds/twitter-embed-client.tsx +0 -308
  271. package/src/components/layout/page-header.tsx +0 -182
  272. package/src/components/layout/page-with-header.tsx +0 -110
  273. package/src/components/ui/rich-markdown-renderer.tsx +0 -1203
  274. package/src/utils/page-header-constants.ts +0 -15
  275. package/src/utils/social-embed-cache.ts +0 -391
  276. /package/dist/{chunk-PI4WSYQV.js.map → chunk-3ZXUQQL4.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-download-card.d.ts","sourceRoot":"","sources":["../../../src/components/embeds/file-download-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,GACR,EAAE,qBAAqB,qBA2BvB"}
@@ -1,8 +0,0 @@
1
- interface LinkedInEmbedProps {
2
- url: string;
3
- /** Fixed iframe height — LinkedIn embeds don't auto-resize. */
4
- height?: number;
5
- }
6
- export declare function LinkedInEmbedClient({ url, height }: LinkedInEmbedProps): import("react").JSX.Element;
7
- export {};
8
- //# sourceMappingURL=linkedin-embed-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linkedin-embed-client.d.ts","sourceRoot":"","sources":["../../../src/components/embeds/linkedin-embed-client.tsx"],"names":[],"mappings":"AAyBA,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,GAAG,EAAE,MAAY,EAAE,EAAE,kBAAkB,+BAoE5E"}
@@ -1,5 +0,0 @@
1
- export declare function MarkdownImage({ src, alt }: {
2
- src: string;
3
- alt?: string;
4
- }): import("react").JSX.Element;
5
- //# sourceMappingURL=markdown-image.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-image.d.ts","sourceRoot":"","sources":["../../../src/components/embeds/markdown-image.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,+BAwDxE"}
@@ -1,7 +0,0 @@
1
- interface RedditEmbedProps {
2
- url: string;
3
- maxWidth?: number;
4
- }
5
- export declare function RedditEmbedClient({ url, maxWidth }: RedditEmbedProps): import("react").JSX.Element;
6
- export {};
7
- //# sourceMappingURL=reddit-embed-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reddit-embed-client.d.ts","sourceRoot":"","sources":["../../../src/components/embeds/reddit-embed-client.tsx"],"names":[],"mappings":"AAoIA,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,GAAG,EAAE,QAAc,EAAE,EAAE,gBAAgB,+BA4Z1E"}
@@ -1,46 +0,0 @@
1
- import { type ReactNode } from 'react';
2
- /**
3
- * Runtime knobs threaded from `<RichMarkdownRenderer>` down to its
4
- * satellite embed clients (reddit / twitter / og link preview / markdown
5
- * image). Lives in its own micro-context — distinct from the
6
- * `ChatRuntimeContext` used by the lib's chat module — because the
7
- * markdown renderer is mounted from documentation pages (blog, legal,
8
- * data room, knowledge base) that do NOT have a chat runtime in scope,
9
- * and the satellites need just three knobs:
10
- *
11
- * - WHERE to fetch the reddit / twitter / OG-scrape proxy
12
- * - HOW to transform a markdown image URL (the hub injects its
13
- * Supabase image transformer; embedders pass null / identity)
14
- *
15
- * Defaults match the hub's existing endpoints so passing
16
- * `<RichMarkdownRenderer>` no props at all still works end-to-end on
17
- * the hub. Embedders override per-prop as needed.
18
- */
19
- export interface RichMarkdownRuntime {
20
- redditProxyUrl: string;
21
- twitterProxyUrl: string;
22
- ogScraperUrl: string;
23
- /** Hub-only Supabase image transformer. Returning null means "don't
24
- * rewrite — use the src as-is". Defaults to identity (no rewrite). */
25
- transformImageSrc: (src: string, opts?: {
26
- width?: number;
27
- quality?: number;
28
- resize?: 'cover' | 'contain' | 'fill';
29
- }) => string | null;
30
- }
31
- /**
32
- * Provider that fills in defaults for any prop the caller didn't pass.
33
- * Memoizes the resolved runtime so satellites don't re-render when an
34
- * unrelated parent state ticks.
35
- */
36
- export declare function RichMarkdownRuntimeProvider({ redditProxyUrl, twitterProxyUrl, ogScraperUrl, transformImageSrc, children, }: Partial<RichMarkdownRuntime> & {
37
- children: ReactNode;
38
- }): import("react").JSX.Element;
39
- /**
40
- * Read the ambient runtime. Returns the defaults when called outside any
41
- * `RichMarkdownRuntimeProvider` — so embedders that drop a satellite into
42
- * a non-renderer context (e.g. a release page calling
43
- * `<RedditEmbedClient>` directly) get the hub-matching defaults for free.
44
- */
45
- export declare function useRichMarkdownRuntime(): RichMarkdownRuntime;
46
- //# sourceMappingURL=rich-markdown-runtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-markdown-runtime.d.ts","sourceRoot":"","sources":["../../../src/components/embeds/rich-markdown-runtime.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE1E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB;2EACuE;IACvE,iBAAiB,EAAE,CACjB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;KAAE,KAC/E,MAAM,GAAG,IAAI,CAAA;CACnB;AAWD;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,cAAc,EACd,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAexD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D"}
@@ -1,8 +0,0 @@
1
- interface TwitterEmbedProps {
2
- url: string;
3
- tweetId?: string;
4
- maxWidth?: number;
5
- }
6
- export declare function TwitterEmbedClient({ url, tweetId, maxWidth }: TwitterEmbedProps): import("react").JSX.Element;
7
- export {};
8
- //# sourceMappingURL=twitter-embed-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"twitter-embed-client.d.ts","sourceRoot":"","sources":["../../../src/components/embeds/twitter-embed-client.tsx"],"names":[],"mappings":"AAuEA,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAc,EAAE,EAAE,iBAAiB,+BAsOrF"}
@@ -1,78 +0,0 @@
1
- import React from 'react';
2
- /**
3
- * Page-header primitive — the canonical "back-button + title + subtitle
4
- * + (optional) image / actions" chrome every lib page uses.
5
- *
6
- * Owns the SSOT for the page-header DOM/CSS that the rest of the lib
7
- * was duplicating: pre-`mb` top padding, h1 typography (`text-h2`), h6
8
- * subtitle (`text-h6`), the gap between the back button and the title
9
- * block, and the right-side actions slot. Consumers either render this
10
- * directly (e.g. `<DocViewer>` / `<DocsHubPage>`) or compose it through
11
- * the `<TitleBlock>` adapter which adds the `PageActions` /
12
- * `ActionsMenu` / selector wiring on top.
13
- *
14
- * Why this exists: knowledge-hub vs releases sat at different vertical
15
- * rhythms (px-perfect mismatch on title baseline + subtitle offset)
16
- * because the docs surface hand-rolled its own chrome instead of going
17
- * through `TitleBlock`. Centralizing the layout here means every
18
- * embeddable lib page (DocViewer, DevSectionPage, LegalDocumentPage,
19
- * OnboardingGuideDetailView) renders pixel-identical title/subtitle/
20
- * back-button typography + spacing — and a future spacing/typography
21
- * tweak is one file.
22
- */
23
- export interface PageHeaderProps {
24
- /** Page title (h1). Plain string — ReactNode is intentionally not
25
- * supported here so every consumer renders the same typography. */
26
- title?: string;
27
- /** Optional icon rendered inline before the title text (e.g. the
28
- * rocket emoji on /releases, the docs icon on /knowledge-base).
29
- * Same `flex items-center gap-3` row as `<DevSectionView>`'s hero. */
30
- titleIcon?: React.ReactNode;
31
- /** Page subtitle (description paragraph). */
32
- subtitle?: string;
33
- /**
34
- * Render a yellow accent dot (`.`) after the title. Mirrors the
35
- * hub's legacy `<AdminPageHeader accentDot>` flag — now lib-wide so
36
- * surfaces like `/knowledge-base` keep their existing accent styling
37
- * after the migration.
38
- */
39
- accentDot?: boolean;
40
- /** Optional thumbnail / hero image rendered to the left of the
41
- * title block. Used by entity-image-style headers (onboarding
42
- * guides, knowledge-base entries). */
43
- image?: {
44
- src: string;
45
- alt?: string;
46
- };
47
- /** Back-button shown above the title block. Hidden on mobile (matches
48
- * the existing TitleBlock + DocViewer behavior). */
49
- backButton?: {
50
- label?: string;
51
- onClick: () => void;
52
- };
53
- /** Right-side actions slot (action buttons / menu / tab selector).
54
- * Composed externally (e.g. `<TitleBlock>` builds `PageActions` + menu
55
- * + selector and passes the result here). */
56
- actions?: React.ReactNode;
57
- /**
58
- * Visual variant.
59
- * - `plain` (default): transparent background, no border.
60
- * - `card`: card background, border, and padding on mobile only —
61
- * collapses to plain on md+ (legacy `TitleBlock` variant — kept so
62
- * surfaces that depend on the card affordance don't regress).
63
- */
64
- variant?: 'plain' | 'card';
65
- /** When the consumer wraps `<PageHeader>` in its OWN spacing container
66
- * (e.g. `<DevSectionView>`'s `gap-10 flex-col`), the default `mb-l`
67
- * bottom margin doubles up. Pass `noBottomMargin` to opt out. */
68
- noBottomMargin?: boolean;
69
- /** Same as `noBottomMargin` for the default `pt-l` top padding. Set
70
- * this when PageHeader is nested INSIDE another layout that already
71
- * provides top spacing (e.g. `<DevSectionView>`'s hero, which sits
72
- * inside `<PageLayout>`'s children flow). */
73
- noTopPadding?: boolean;
74
- className?: string;
75
- }
76
- export declare function PageHeader({ title, titleIcon, subtitle, accentDot, image, backButton, actions, variant, noBottomMargin, noTopPadding, className, }: PageHeaderProps): React.JSX.Element;
77
- export default PageHeader;
78
- //# sourceMappingURL=page-header.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../../src/components/layout/page-header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,eAAe;IAC9B;wEACoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;2EAEuE;IACvE,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;2CAEuC;IACvC,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrC;yDACqD;IACrD,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IACpD;;kDAE8C;IAC9C,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC1B;;sEAEkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;kDAG8C;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAmBD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,EACT,QAAQ,EACR,SAAS,EACT,KAAK,EACL,UAAU,EACV,OAAO,EACP,OAAiB,EACjB,cAAsB,EACtB,YAAoB,EACpB,SAAS,GACV,EAAE,eAAe,qBA0EjB;AAED,eAAe,UAAU,CAAA"}
@@ -1,67 +0,0 @@
1
- import React from 'react';
2
- import { type PageHeaderProps } from './page-header';
3
- /**
4
- * `<PageWithHeader>` — the canonical 4-layer unified-chrome wrapper that
5
- * every public lib/hub page now uses (Knowledge Hub, Roadmap, FAQs,
6
- * Authors, Blog, Vendors, Case Studies, Interviews, Investor Updates,
7
- * /webinars-/podcasts-/events, hub admin-but-public pages, …).
8
- *
9
- * Renders the same JSX tree every consumer was hand-rolling individually
10
- * before this helper landed:
11
- *
12
- * PageShell ← bg-ods-bg, min-h-screen, max-w-[1920px],
13
- * page-shell-px/pt/pb gutters
14
- * PageLayout backButton ← TitleBlock → PageHeader #1 (back-btn row
15
- * only, pt-l + mb-l)
16
- * div.w-full.flex-col.gap-10 ← matches DevSectionView's hero container
17
- * PageHeader title/subtitle ← PageHeader #2 (noTopPadding +
18
- * titleIcon accentDot noBottomMargin so PageLayout's gap-l owns
19
- * noTopPadding the spacing between #1 and #2)
20
- * noBottomMargin
21
- * children ← page-specific body (search, lists, forms)
22
- *
23
- * Why this exists: 15+ pages copy-pasted the EXACT same nesting + the
24
- * EXACT same `noTopPadding + noBottomMargin + accentDot` triplet on the
25
- * inner `<PageHeader>`. Forgetting one of those flags collapsed the gap
26
- * to ~8px (the FAQs-vs-Onboarding-Guides bug). Centralizing the chain
27
- * here makes the spacing invariant compiler-enforced — consumers can't
28
- * pick the wrong combination.
29
- *
30
- * **Back button is config-driven by default.** Consumers don't have to
31
- * thread `useRouter()` + `() => router.push('/')` themselves anymore —
32
- * the helper supplies a sane default (`{ label: 'Back to home', href: '/' }`).
33
- * Hosts whose `/` lives elsewhere should pass their own `href`. Pass
34
- * `backButton={false}` to suppress entirely (the lib's own
35
- * `<DocsHubPage>` does this on the platform-home docs landing).
36
- */
37
- export interface PageWithHeaderProps {
38
- /** Title — passed straight to inner `<PageHeader>`. */
39
- title?: string;
40
- /** Inline icon rendered before the title (lucide / SVG node). Wrap with
41
- * `SECTION_HERO_ICON_CLASS` at the call site, or use the lib's
42
- * `<PageHeader>`'s `titleIcon` ReactNode signature directly. */
43
- titleIcon?: PageHeaderProps['titleIcon'];
44
- /** Subtitle (1-2 lines, auto-clamped to 2 + min-h-[56px]). */
45
- subtitle?: string;
46
- /** Render yellow accent dot after the title (default true — matches every
47
- * unified surface). Pass `false` to opt out. */
48
- accentDot?: boolean;
49
- /** Back-button config. Defaults to `{ label: 'Back to home', href: '/' }`.
50
- * Pass `false` to hide entirely (platform-home docs landings). */
51
- backButton?: {
52
- label?: string;
53
- href?: string;
54
- } | false;
55
- /** Optional image (entity-image-style — onboarding guides etc.). */
56
- image?: PageHeaderProps['image'];
57
- /** Optional actions slot (right side of header). */
58
- actions?: React.ReactNode;
59
- /** Page body — search bars, lists, forms, sections. Rendered INSIDE the
60
- * gap-10 flex column so it shares gutters + vertical rhythm with the
61
- * header. */
62
- children: React.ReactNode;
63
- /** Extra class applied to the gap-10 content wrapper. */
64
- contentClassName?: string;
65
- }
66
- export declare function PageWithHeader({ title, titleIcon, subtitle, accentDot, backButton, image, actions, children, contentClassName, }: PageWithHeaderProps): React.JSX.Element;
67
- //# sourceMappingURL=page-with-header.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-with-header.d.ts","sourceRoot":"","sources":["../../../src/components/layout/page-with-header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;qEAEiE;IACjE,SAAS,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;qDACiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;uEACmE;IACnE,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAA;IACtD,oEAAoE;IACpE,KAAK,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IAChC,oDAAoD;IACpD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;kBAEc;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,SAAS,EACT,QAAQ,EACR,SAAgB,EAChB,UAAU,EACV,KAAK,EACL,OAAO,EACP,QAAQ,EACR,gBAAgB,GACjB,EAAE,mBAAmB,qBA8BrB"}
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { type RichMarkdownRuntime } from '../embeds/rich-markdown-runtime';
3
- /**
4
- * Props for `<RichMarkdownRenderer>`. Aside from the four runtime knobs
5
- * lifted from {@link RichMarkdownRuntime}, this is the same shape the hub's
6
- * `SimpleMarkdownRenderer` ever had — every legacy call site can be moved
7
- * over without other changes.
8
- */
9
- export interface RichMarkdownRendererProps extends Partial<RichMarkdownRuntime> {
10
- content: string;
11
- className?: string;
12
- sectionIds?: Array<{
13
- id: string;
14
- title: string;
15
- level: number;
16
- }>;
17
- /** Callback for internal navigation (called after the resolver returns) */
18
- onInternalLinkClick?: (path: string, options?: {
19
- expandFolder?: boolean;
20
- fromInternalLink?: boolean;
21
- }) => void;
22
- /** List of broken links detected server-side */
23
- brokenLinks?: string[];
24
- /** Current documentation path for resolving relative links */
25
- currentPath?: string;
26
- /** Source for resolving internal links (default: 'openframe-docs'). Registry id from DOC_SOURCES. */
27
- resolveSource?: string;
28
- /** Path of the internal link-resolver endpoint. Default '/api/docs/resolve-link'. */
29
- resolveLinkEndpointUrl?: string;
30
- /** When the page already has an H1, render markdown `#` as `h2` (e.g. legal pages). */
31
- demoteMarkdownH1ToH2?: boolean;
32
- }
33
- export declare const RichMarkdownRenderer: React.FC<RichMarkdownRendererProps>;
34
- //# sourceMappingURL=rich-markdown-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-markdown-renderer.d.ts","sourceRoot":"","sources":["../../../src/components/ui/rich-markdown-renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAgBjF,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AA4czC;;;;;GAKG;AACH,MAAM,WAAW,yBAA0B,SAAQ,OAAO,CAAC,mBAAmB,CAAC;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uFAAuF;IACvF,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAoCpE,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * String constants shared by page-header consumers (`<PageHeader>`,
3
- * `<DevSectionPage>`, `<DocsHubPage>` callers). Lives in `utils/` —
4
- * NOT `'use client'` — so server modules (e.g. the hub's
5
- * `lib/docs/hub-docs-presets.tsx` that builds preset JSX with
6
- * `<Icon className={SECTION_HERO_ICON_CLASS} />`) can import the raw
7
- * string. Importing the constant from a `'use client'` module turns it
8
- * into a Next.js client-reference proxy in server contexts, which
9
- * lucide's internal `mergeClasses` then calls `.trim()` on and crashes.
10
- */
11
- /** Tailwind class applied uniformly to every section-hero / page-header
12
- * icon across the lib (Roadmap Map, Releases Rocket, Knowledge Hub
13
- * BookOpen, Data Room Building2, …). Yellow accent color, 40x40. */
14
- export declare const SECTION_HERO_ICON_CLASS = "h-10 w-10 text-ods-accent";
15
- //# sourceMappingURL=page-header-constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-header-constants.d.ts","sourceRoot":"","sources":["../../src/utils/page-header-constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;qEAEqE;AACrE,eAAO,MAAM,uBAAuB,8BAA8B,CAAA"}
@@ -1,29 +0,0 @@
1
- interface CacheOptions {
2
- platform: 'reddit' | 'twitter';
3
- url: string;
4
- apiEndpoint: string;
5
- }
6
- export declare class SocialEmbedCache {
7
- private static instance;
8
- static getInstance(): SocialEmbedCache;
9
- getFromMemory(url: string): any | null;
10
- setInMemory(url: string, data: any): void;
11
- getFromServer(options: CacheOptions): Promise<any | null>;
12
- private updateServerCache;
13
- setInServer(options: CacheOptions, data: any): Promise<void>;
14
- fetchDirect(options: CacheOptions & {
15
- directFetcher: () => Promise<any>;
16
- }): Promise<any | null>;
17
- fetchWithHierarchy(options: CacheOptions & {
18
- dataValidator: (data: any) => boolean;
19
- onDataUpdate: (data: any) => void;
20
- onError: (error: string) => void;
21
- onLoading: (loading: boolean) => void;
22
- }): Promise<void>;
23
- private scheduleAsyncRefresh;
24
- private backgroundRefresh;
25
- private silentBackgroundRefresh;
26
- }
27
- export declare const socialCache: SocialEmbedCache;
28
- export {};
29
- //# sourceMappingURL=social-embed-cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"social-embed-cache.d.ts","sourceRoot":"","sources":["../../src/utils/social-embed-cache.ts"],"names":[],"mappings":"AAmBA,UAAU,YAAY;IACpB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAE1C,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAQtC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAKtC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAKnC,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;YAoBjD,iBAAiB;IAezB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B5D,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG;QACxC,aAAa,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;KAClC,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAajB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG;QAC/C,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;QACtC,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;QAClC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QACjC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACvC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmIjB,OAAO,CAAC,oBAAoB;YAgCd,iBAAiB;IAiD/B,OAAO,CAAC,uBAAuB;CAgDhC;AAED,eAAO,MAAM,WAAW,kBAAiC,CAAC"}
@@ -1,4 +0,0 @@
1
- export {
2
- ShareExperienceSection,
3
- type ShareExperienceSectionProps,
4
- } from './share-experience-section'
@@ -1,185 +0,0 @@
1
- 'use client'
2
-
3
- import React from 'react'
4
- import { BenefitCard, BenefitCardGrid } from '../ui'
5
- import {
6
- G2Icon,
7
- CapterraIcon,
8
- TrustpilotIcon,
9
- GetAppIcon,
10
- } from '../icons'
11
- import {
12
- ContactForm,
13
- type ContactFormProps,
14
- } from '../contact'
15
-
16
- /**
17
- * `<ShareExperienceSection>` — the case-studies "Share Your Experience"
18
- * CTA block.
19
- *
20
- * Hub usage: rendered inside the unified case-studies chrome (between
21
- * the search bar and the case-study card grid) so it stays at the same
22
- * y-offset + gutters as the rest of the page content.
23
- *
24
- * Embedders mount this anywhere they like. The inner `<ContactForm>`
25
- * submits through the AMBIENT `EndpointsRuntime.contactUrl` (same proxy
26
- * seam every other embed-aware form uses), so embedders behind a
27
- * `/content` reverse proxy get a working submission with no per-call-
28
- * site wiring.
29
- *
30
- * **Copy is overridable.** Every string is a prop with a sensible
31
- * "Flamingo case-studies" default so the hub keeps its existing copy
32
- * verbatim; embedders override what they need.
33
- *
34
- * **Contact-form integration is configurable.** Hub auto-resolves
35
- * `userId` / `helpCategoryOptions` / `rdtCid` / `onSubmitSuccess` from
36
- * its app context and passes them down via `contactFormProps`;
37
- * embedders without that context just omit them. All other
38
- * `ContactFormProps` are forwarded too, so the host can adjust prefill,
39
- * success redirect, hidden fields, etc. without forking this component.
40
- */
41
- export interface ShareExperienceSectionProps {
42
- /** Override the section heading. JSX so the host can break lines /
43
- * colorize the accent the same way the hub does. Default: the
44
- * hub's two-line "Share Your Experience / with Fellow MSPs:" copy. */
45
- title?: React.ReactNode
46
- /** Override the lead paragraph. Default: the hub's review-incentive
47
- * copy referencing Flamingo. Pass a brand-neutral string in embeds. */
48
- subtitle?: React.ReactNode
49
- /** Override the "How it works?" sub-heading. */
50
- howItWorksTitle?: React.ReactNode
51
- /** Override the "How it works?" body copy. */
52
- howItWorksBody?: React.ReactNode
53
- /** Forwarded to the inner `<ContactForm>`. The hub passes its
54
- * auto-resolved `userId` / `helpCategoryOptions` / `rdtCid` /
55
- * `onSubmitSuccess` here. Embedders pass overrides like
56
- * `successRedirectUrl` or extra prefill copy. */
57
- contactFormProps?: Partial<ContactFormProps>
58
- className?: string
59
- }
60
-
61
- const DEFAULT_TITLE: React.ReactNode = (
62
- <>
63
- Share Your Experience
64
- <br />
65
- with Fellow MSPs<span className="text-ods-accent">:</span>
66
- </>
67
- )
68
-
69
- const DEFAULT_SUBTITLE: React.ReactNode = (
70
- <>
71
- We know your time is valuable. When you leave an honest review about
72
- your Flamingo experience, we&apos;d like to thank you with a gift
73
- certificate – not as payment for a review, but as appreciation for
74
- the time you invest in helping other MSPs make informed decisions.
75
- </>
76
- )
77
-
78
- const DEFAULT_HOW_IT_WORKS_TITLE: React.ReactNode = (
79
- <>
80
- How it works<span className="text-ods-accent">?</span>
81
- </>
82
- )
83
-
84
- const DEFAULT_HOW_IT_WORKS_BODY: React.ReactNode = (
85
- <>
86
- Share your name and email with us, and we&apos;ll reach out to guide
87
- you through the review process and arrange your thank-you gift
88
- certificate.
89
- </>
90
- )
91
-
92
- /** Defaults that match the hub's existing /case-studies behavior. Host
93
- * overrides via `contactFormProps` win over these. */
94
- const DEFAULT_CONTACT_FORM_PROPS = {
95
- prefilledReason: 'I want to do a case study',
96
- prefilledMessage: 'I want to do a case study',
97
- hideFields: ['companySize', 'referralSource', 'helpCategory', 'message'] as ContactFormProps['hideFields'],
98
- title: '',
99
- subtitle: '',
100
- footerText: '',
101
- noBorder: true,
102
- noPadding: true,
103
- buttonVariant: 'outline' as ContactFormProps['buttonVariant'],
104
- buttonClassName: 'w-full',
105
- successToastMessage: "Thank you! We'll reach out to schedule your case study.",
106
- } satisfies Partial<ContactFormProps>
107
-
108
- export function ShareExperienceSection({
109
- title = DEFAULT_TITLE,
110
- subtitle = DEFAULT_SUBTITLE,
111
- howItWorksTitle = DEFAULT_HOW_IT_WORKS_TITLE,
112
- howItWorksBody = DEFAULT_HOW_IT_WORKS_BODY,
113
- contactFormProps,
114
- className,
115
- }: ShareExperienceSectionProps = {}) {
116
- return (
117
- <section className={`flex flex-col gap-10${className ? ` ${className}` : ''}`}>
118
- <div className="text-ods-text-primary">
119
- <h2 className="text-h1 text-ods-text-primary">{title}</h2>
120
- <p className="text-h4 mt-6 max-w-[765px]">{subtitle}</p>
121
- </div>
122
-
123
- <div className="bg-ods-background border border-ods-border rounded-md p-10">
124
- <div className="flex flex-col gap-10">
125
- <div className="flex flex-col gap-6 text-ods-text-primary">
126
- <h3 className="text-h2">{howItWorksTitle}</h3>
127
- <p className="text-h4">{howItWorksBody}</p>
128
- </div>
129
-
130
- <BenefitCardGrid columns={4}>
131
- <BenefitCard
132
- icon={
133
- <div className="bg-ods-background border border-ods-border rounded-md p-2 w-12 h-12 flex items-center justify-center">
134
- <G2Icon width={24} height={24} />
135
- </div>
136
- }
137
- title="G2"
138
- description="g2.com"
139
- variant="auth-figma"
140
- />
141
- <BenefitCard
142
- icon={
143
- <div className="bg-ods-background border border-ods-border rounded-md p-2 w-12 h-12 flex items-center justify-center">
144
- <CapterraIcon width={24} height={24} />
145
- </div>
146
- }
147
- title="Capterra"
148
- description="capterra.com"
149
- variant="auth-figma"
150
- />
151
- <BenefitCard
152
- icon={
153
- <div className="bg-ods-background border border-ods-border rounded-md p-2 w-12 h-12 flex items-center justify-center">
154
- <TrustpilotIcon width={24} height={24} />
155
- </div>
156
- }
157
- title="TrustPilot"
158
- description="trustpilot.com"
159
- variant="auth-figma"
160
- />
161
- <BenefitCard
162
- icon={
163
- <div className="bg-ods-background border border-ods-border rounded-md p-2 w-12 h-12 flex items-center justify-center">
164
- <GetAppIcon width={24} height={24} />
165
- </div>
166
- }
167
- title="GetApp"
168
- description="getapp.com"
169
- variant="auth-figma"
170
- />
171
- </BenefitCardGrid>
172
-
173
- {/* Submission proxies through ambient EndpointsRuntime.contactUrl —
174
- * no per-call-site wiring needed for embeds behind a reverse
175
- * proxy. Hub's auto-resolving wrapper passes userId / rdtCid /
176
- * onSubmitSuccess via `contactFormProps`. */}
177
- <ContactForm
178
- {...DEFAULT_CONTACT_FORM_PROPS}
179
- {...contactFormProps}
180
- />
181
- </div>
182
- </div>
183
- </section>
184
- )
185
- }