@flamingo-stack/openframe-frontend-core 0.0.481 → 0.0.482

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 (838) hide show
  1. package/dist/{chunk-H6DFCF44.cjs → chunk-22AED5IC.cjs} +82 -82
  2. package/dist/{chunk-H6DFCF44.cjs.map → chunk-22AED5IC.cjs.map} +1 -1
  3. package/dist/{chunk-MGKCS6KS.js → chunk-3WCARCI4.js} +2 -2
  4. package/dist/{chunk-LNKWY74S.cjs → chunk-4HL6UENH.cjs} +5 -5
  5. package/dist/{chunk-LNKWY74S.cjs.map → chunk-4HL6UENH.cjs.map} +1 -1
  6. package/dist/{chunk-Y3Y2DLNO.js → chunk-6UGYBCEN.js} +3 -3
  7. package/dist/{chunk-BBUEY73L.js → chunk-7I5B5PQ4.js} +6269 -5339
  8. package/dist/chunk-7I5B5PQ4.js.map +1 -0
  9. package/dist/{chunk-PSPWT2Q5.js → chunk-7LWXWXEY.js} +4 -4
  10. package/dist/{chunk-M7O74OWG.cjs → chunk-ACOU5YJI.cjs} +31 -31
  11. package/dist/{chunk-M7O74OWG.cjs.map → chunk-ACOU5YJI.cjs.map} +1 -1
  12. package/dist/{chunk-INDFIVDV.cjs → chunk-AHGSN4AT.cjs} +12 -12
  13. package/dist/{chunk-INDFIVDV.cjs.map → chunk-AHGSN4AT.cjs.map} +1 -1
  14. package/dist/{chunk-VTSRDC4W.js → chunk-CKC3EAYT.js} +2 -2
  15. package/dist/{chunk-SASR7SK5.js → chunk-GZK7FWJJ.js} +20 -4
  16. package/dist/chunk-GZK7FWJJ.js.map +1 -0
  17. package/dist/{chunk-ZRANZNEA.js → chunk-JJE5TUZK.js} +2 -2
  18. package/dist/{chunk-66BNAFO6.js → chunk-JQIUBFHL.js} +4 -4
  19. package/dist/{chunk-MMCBQJKE.cjs → chunk-KUBJHB6I.cjs} +11 -11
  20. package/dist/{chunk-MMCBQJKE.cjs.map → chunk-KUBJHB6I.cjs.map} +1 -1
  21. package/dist/{chunk-ZV6E3U3C.cjs → chunk-MRGTMMJ3.cjs} +30 -30
  22. package/dist/{chunk-ZV6E3U3C.cjs.map → chunk-MRGTMMJ3.cjs.map} +1 -1
  23. package/dist/{chunk-OZJN54R5.cjs → chunk-NWVKG7QC.cjs} +37 -37
  24. package/dist/{chunk-OZJN54R5.cjs.map → chunk-NWVKG7QC.cjs.map} +1 -1
  25. package/dist/{chunk-AN47EIIJ.cjs → chunk-PHTSSHIQ.cjs} +59 -59
  26. package/dist/{chunk-AN47EIIJ.cjs.map → chunk-PHTSSHIQ.cjs.map} +1 -1
  27. package/dist/{chunk-N2JZ33V7.cjs → chunk-RUA3OXSJ.cjs} +26 -26
  28. package/dist/{chunk-N2JZ33V7.cjs.map → chunk-RUA3OXSJ.cjs.map} +1 -1
  29. package/dist/{chunk-LK623WCC.cjs → chunk-RZPF7MJ2.cjs} +9 -9
  30. package/dist/{chunk-LK623WCC.cjs.map → chunk-RZPF7MJ2.cjs.map} +1 -1
  31. package/dist/{chunk-G3UN2DXU.cjs → chunk-STYA77PH.cjs} +20 -4
  32. package/dist/chunk-STYA77PH.cjs.map +1 -0
  33. package/dist/{chunk-JUJY3HQS.cjs → chunk-U37UTLP7.cjs} +19 -19
  34. package/dist/{chunk-JUJY3HQS.cjs.map → chunk-U37UTLP7.cjs.map} +1 -1
  35. package/dist/{chunk-2DIOV7BR.js → chunk-UPN6EFOM.js} +4 -4
  36. package/dist/{chunk-OWMLWJQY.cjs → chunk-VPVOJD5X.cjs} +2432 -1502
  37. package/dist/chunk-VPVOJD5X.cjs.map +1 -0
  38. package/dist/{chunk-4SMRQ4SN.js → chunk-WBL5Y4PS.js} +3 -3
  39. package/dist/{chunk-FP4H6Y5O.js → chunk-WPYPSIY2.js} +3 -3
  40. package/dist/{chunk-R5WJJL4V.js → chunk-X5X43HFV.js} +5 -5
  41. package/dist/{chunk-DEHZ5CTC.js → chunk-XTWKDMCG.js} +2 -2
  42. package/dist/components/case-studies/index.cjs +9 -9
  43. package/dist/components/case-studies/index.js +3 -3
  44. package/dist/components/chat/index.cjs +3 -3
  45. package/dist/components/chat/index.js +2 -2
  46. package/dist/components/contact/index.cjs +4 -4
  47. package/dist/components/contact/index.js +3 -3
  48. package/dist/components/docs/index.cjs +6 -6
  49. package/dist/components/docs/index.js +5 -5
  50. package/dist/components/embeds/index.cjs +4 -4
  51. package/dist/components/embeds/index.js +3 -3
  52. package/dist/components/faq/index.cjs +4 -4
  53. package/dist/components/faq/index.js +3 -3
  54. package/dist/components/features/captions-url.cjs +12 -0
  55. package/dist/components/features/captions-url.cjs.map +1 -0
  56. package/dist/components/features/captions-url.js +10 -0
  57. package/dist/components/features/captions-url.js.map +1 -0
  58. package/dist/components/features/card-hit-layer.d.ts +40 -0
  59. package/dist/components/features/card-hit-layer.d.ts.map +1 -0
  60. package/dist/components/features/floating-walkthrough-video.d.ts +71 -0
  61. package/dist/components/features/floating-walkthrough-video.d.ts.map +1 -0
  62. package/dist/components/features/index.cjs +11 -3
  63. package/dist/components/features/index.cjs.map +1 -1
  64. package/dist/components/features/index.d.ts +4 -0
  65. package/dist/components/features/index.d.ts.map +1 -1
  66. package/dist/components/features/index.js +12 -4
  67. package/dist/components/features/use-walkthrough-video.d.ts +16 -0
  68. package/dist/components/features/use-walkthrough-video.d.ts.map +1 -0
  69. package/dist/components/features/video-bites-strip.d.ts.map +1 -1
  70. package/dist/components/features/video-center-badge.d.ts.map +1 -1
  71. package/dist/components/features/video-hover-preview.d.ts +68 -0
  72. package/dist/components/features/video-hover-preview.d.ts.map +1 -0
  73. package/dist/components/features/video.d.ts +78 -40
  74. package/dist/components/features/video.d.ts.map +1 -1
  75. package/dist/components/form.d.ts +0 -1
  76. package/dist/components/form.d.ts.map +1 -1
  77. package/dist/components/help-center-pages/index.cjs +21 -21
  78. package/dist/components/help-center-pages/index.js +12 -12
  79. package/dist/components/index.cjs +163 -155
  80. package/dist/components/index.cjs.map +1 -1
  81. package/dist/components/index.js +18 -10
  82. package/dist/components/index.js.map +1 -1
  83. package/dist/components/navigation/index.cjs +3 -3
  84. package/dist/components/navigation/index.js +2 -2
  85. package/dist/components/onboarding-guides/index.cjs +6 -6
  86. package/dist/components/onboarding-guides/index.js +5 -5
  87. package/dist/components/related-content/index.cjs +4 -4
  88. package/dist/components/related-content/index.js +3 -3
  89. package/dist/components/tickets/index.cjs +6 -6
  90. package/dist/components/tickets/index.js +5 -5
  91. package/dist/components/ui/button/button-styles.d.ts +2 -0
  92. package/dist/components/ui/button/button-styles.d.ts.map +1 -1
  93. package/dist/components/ui/button/button.d.ts +2 -2
  94. package/dist/components/ui/button/button.d.ts.map +1 -1
  95. package/dist/components/ui/file-manager/index.cjs +50 -50
  96. package/dist/components/ui/file-manager/index.js +1 -1
  97. package/dist/components/ui/index.cjs +3 -3
  98. package/dist/components/ui/index.js +2 -2
  99. package/dist/components/ui/page-actions.d.ts +2 -1
  100. package/dist/components/ui/page-actions.d.ts.map +1 -1
  101. package/dist/index.cjs +27 -3
  102. package/dist/index.cjs.map +1 -1
  103. package/dist/index.js +28 -4
  104. package/dist/types/supabase.d.ts +80 -0
  105. package/dist/types/supabase.d.ts.map +1 -1
  106. package/dist/types/video-processing.d.ts +1 -1
  107. package/dist/types/video-processing.d.ts.map +1 -1
  108. package/dist/utils/announcement-storage.d.ts +1 -1
  109. package/dist/utils/announcement-storage.d.ts.map +1 -1
  110. package/dist/utils/dismiss-cookie.d.ts +27 -0
  111. package/dist/utils/dismiss-cookie.d.ts.map +1 -0
  112. package/dist/utils/dismissal-storage.d.ts +19 -0
  113. package/dist/utils/dismissal-storage.d.ts.map +1 -0
  114. package/dist/utils/index.cjs +48 -10
  115. package/dist/utils/index.cjs.map +1 -1
  116. package/dist/utils/index.d.ts +2 -0
  117. package/dist/utils/index.d.ts.map +1 -1
  118. package/dist/utils/index.js +41 -11
  119. package/dist/utils/index.js.map +1 -1
  120. package/package.json +8 -2
  121. package/src/.index.md +39 -32
  122. package/src/.platform-domains.md +65 -0
  123. package/src/assets/.fae-avatar.md +33 -0
  124. package/src/assets/.index.md +15 -9
  125. package/src/components/.agent-mark.md +31 -0
  126. package/src/components/.announcement-bar.md +47 -35
  127. package/src/components/.calendar.md +19 -15
  128. package/src/components/.categories-cart.md +34 -30
  129. package/src/components/.category-card.md +33 -33
  130. package/src/components/.chart.md +38 -40
  131. package/src/components/.command.md +47 -23
  132. package/src/components/.comment-card.md +31 -26
  133. package/src/components/.content-loading-container.md +45 -20
  134. package/src/components/.context-menu.md +45 -31
  135. package/src/components/.date-time-picker.md +36 -30
  136. package/src/components/.empty-state.md +31 -31
  137. package/src/components/.faq-accordion.md +20 -30
  138. package/src/components/.filter-chip.md +36 -33
  139. package/src/components/.footer-waitlist-button.md +27 -21
  140. package/src/components/.footer.md +39 -24
  141. package/src/components/.form.md +32 -20
  142. package/src/components/.hero-image-uploader.md +35 -31
  143. package/src/components/.icon-display.md +53 -0
  144. package/src/components/.image-cropper.md +34 -33
  145. package/src/components/.index.md +25 -29
  146. package/src/components/.logs-list.md +27 -23
  147. package/src/components/.media-carousel.md +47 -26
  148. package/src/components/.metric-value.md +27 -24
  149. package/src/components/.msp-display.md +29 -23
  150. package/src/components/.open-source-features.md +23 -26
  151. package/src/components/.pagination.md +44 -39
  152. package/src/components/.persistent-filter-controls.md +61 -28
  153. package/src/components/.pricing-display.md +34 -33
  154. package/src/components/.results-count.md +33 -20
  155. package/src/components/.smooth-accordion.md +24 -20
  156. package/src/components/.social-icon-row.md +33 -21
  157. package/src/components/.sonner.md +40 -25
  158. package/src/components/.steps.md +39 -25
  159. package/src/components/.tool-icon.md +34 -21
  160. package/src/components/.unified-filter-logic.md +32 -36
  161. package/src/components/.user-display.md +33 -28
  162. package/src/components/.user-summary-stub.md +40 -33
  163. package/src/components/.vendor-display-button.md +17 -15
  164. package/src/components/.vendor-icon.md +17 -25
  165. package/src/components/.vendor-tag.md +39 -34
  166. package/src/components/.why-it-matters.md +15 -11
  167. package/src/components/.yes-no-display.md +36 -31
  168. package/src/components/authors/.author-detail-view.md +50 -0
  169. package/src/components/case-studies/.index.md +26 -0
  170. package/src/components/case-studies/.share-experience-section.md +45 -0
  171. package/src/components/chat/.approval-batch-message.md +48 -33
  172. package/src/components/chat/.approval-request-message.md +37 -26
  173. package/src/components/chat/.chat-archive-page.md +56 -0
  174. package/src/components/chat/.chat-attachment-bar.md +32 -40
  175. package/src/components/chat/.chat-composer.md +43 -0
  176. package/src/components/chat/.chat-container.md +41 -25
  177. package/src/components/chat/.chat-context-memory-bar.md +53 -0
  178. package/src/components/chat/.chat-context-picker.md +89 -0
  179. package/src/components/chat/.chat-header-icon-button.md +43 -0
  180. package/src/components/chat/.chat-header-search-field.md +51 -0
  181. package/src/components/chat/.chat-input.md +63 -30
  182. package/src/components/chat/.chat-list-empty-state.md +44 -0
  183. package/src/components/chat/.chat-message-enhanced.md +29 -31
  184. package/src/components/chat/.chat-message-list.md +34 -44
  185. package/src/components/chat/.chat-message-row.md +56 -0
  186. package/src/components/chat/.chat-message-skeleton.md +32 -26
  187. package/src/components/chat/.chat-panel-header-mobile.md +46 -0
  188. package/src/components/chat/.chat-panel-header.md +80 -0
  189. package/src/components/chat/.chat-sidebar-skeleton.md +31 -30
  190. package/src/components/chat/.chat-sidebar.md +36 -29
  191. package/src/components/chat/.chat-ticket-list.md +38 -23
  192. package/src/components/chat/.chat-typing-indicator.md +37 -19
  193. package/src/components/chat/.context-compaction-display.md +19 -15
  194. package/src/components/chat/.context-items-list.md +57 -0
  195. package/src/components/chat/.embeddable-chat.md +57 -66
  196. package/src/components/chat/.error-message-display.md +40 -22
  197. package/src/components/chat/.guide-mode-banner.md +41 -0
  198. package/src/components/chat/.guide-welcome.md +43 -0
  199. package/src/components/chat/.index.md +26 -21
  200. package/src/components/chat/.mingo-chat-history.md +63 -0
  201. package/src/components/chat/.mingo-chat-modals.md +44 -0
  202. package/src/components/chat/.mingo-history-rail.md +63 -0
  203. package/src/components/chat/.mingo-info-card.md +59 -0
  204. package/src/components/chat/.mingo-onboarding-card.md +21 -27
  205. package/src/components/chat/.mingo-welcome.md +60 -0
  206. package/src/components/chat/.model-display.md +33 -25
  207. package/src/components/chat/.msp-organization-card-skeleton.md +44 -0
  208. package/src/components/chat/.msp-organization-card.md +51 -0
  209. package/src/components/chat/.nav-link-anchor-via-runtime.md +36 -25
  210. package/src/components/chat/.quick-action-chip.md +60 -0
  211. package/src/components/chat/.quick-action-marquee.md +53 -0
  212. package/src/components/chat/.quick-action-wall.md +68 -0
  213. package/src/components/chat/.remark-mention-chips.md +41 -0
  214. package/src/components/chat/.slash-command-suggestions.md +30 -36
  215. package/src/components/chat/.source-action-button.md +28 -25
  216. package/src/components/chat/.tool-call-blocks.md +18 -30
  217. package/src/components/chat/.tool-execution-display.md +29 -34
  218. package/src/components/chat/entity-cards/.admin-content-card.md +29 -22
  219. package/src/components/chat/entity-cards/.blog-card.md +44 -33
  220. package/src/components/chat/entity-cards/.blog-image-placeholder.md +20 -18
  221. package/src/components/chat/entity-cards/.case-study-card.md +24 -33
  222. package/src/components/chat/entity-cards/.chat-ticket-item.md +39 -22
  223. package/src/components/chat/entity-cards/.customer-interview-card.md +29 -32
  224. package/src/components/chat/entity-cards/.data-room-doc-card.md +21 -22
  225. package/src/components/chat/entity-cards/.dispatch.md +41 -24
  226. package/src/components/chat/entity-cards/.entity-author-card.md +36 -33
  227. package/src/components/chat/entity-cards/.entity-portrait-card.md +47 -0
  228. package/src/components/chat/entity-cards/.generic-entity-card.md +26 -25
  229. package/src/components/chat/entity-cards/.github-activity-card.md +35 -41
  230. package/src/components/chat/entity-cards/.hubspot-ticket-card.md +22 -28
  231. package/src/components/chat/entity-cards/.index.md +33 -44
  232. package/src/components/chat/entity-cards/.investor-update-card.md +36 -25
  233. package/src/components/chat/entity-cards/.onboarding-guide-card.md +20 -29
  234. package/src/components/chat/entity-cards/.product-release-card-defaults.md +26 -19
  235. package/src/components/chat/entity-cards/.program-card.md +30 -33
  236. package/src/components/chat/entity-cards/.roadmap-card.md +40 -31
  237. package/src/components/chat/entity-cards/.roadmap-vote-button.md +33 -36
  238. package/src/components/chat/entity-cards/.slack-message-card.md +31 -32
  239. package/src/components/chat/entity-cards/.use-cover-image-fallback.md +47 -0
  240. package/src/components/chat/entity-cards/.use-entity-card-link.md +51 -0
  241. package/src/components/chat/entity-cards/.use-entity-card-placeholder.md +47 -0
  242. package/src/components/chat/entity-cards/.what-i-shipped-card.md +43 -0
  243. package/src/components/chat/hooks/.index.md +33 -30
  244. package/src/components/chat/hooks/.use-chat-card-item.md +30 -17
  245. package/src/components/chat/hooks/.use-chat-dialog-manager.md +59 -0
  246. package/src/components/chat/hooks/.use-chat-identity.md +37 -25
  247. package/src/components/chat/hooks/.use-chunk-catchup.md +53 -36
  248. package/src/components/chat/hooks/.use-empty-state-config.md +39 -0
  249. package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +65 -30
  250. package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
  251. package/src/components/chat/hooks/.use-nats-dialog-subscription.md +66 -50
  252. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +58 -31
  253. package/src/components/chat/hooks/.use-scripted-stream.md +46 -0
  254. package/src/components/chat/hooks/.use-slash-commands.md +32 -25
  255. package/src/components/chat/hooks/.use-sse-chat-adapter.md +32 -21
  256. package/src/components/chat/hooks/.use-unified-chat.md +45 -35
  257. package/src/components/chat/types/.api.types.md +49 -41
  258. package/src/components/chat/types/.chat.types.md +56 -34
  259. package/src/components/chat/types/.component.types.md +36 -36
  260. package/src/components/chat/types/.context-item.types.md +61 -0
  261. package/src/components/chat/types/.index.md +32 -17
  262. package/src/components/chat/types/.message.types.md +44 -45
  263. package/src/components/chat/types/.network.types.md +46 -46
  264. package/src/components/chat/types/.processing.types.md +49 -37
  265. package/src/components/chat/types/.unified-chat-state.types.md +41 -26
  266. package/src/components/chat/types/entities/.content-ref.md +20 -31
  267. package/src/components/chat/types/entities/.investor-update.md +14 -16
  268. package/src/components/chat/types/entities/.onboarding-guide.md +35 -34
  269. package/src/components/chat/types/entities/.program-types.md +55 -43
  270. package/src/components/chat/utils/.chip-action-class.md +17 -19
  271. package/src/components/chat/utils/.chip-styles.md +18 -18
  272. package/src/components/chat/utils/.chunk-parser.md +48 -37
  273. package/src/components/chat/utils/.compact-card-classes.md +33 -35
  274. package/src/components/chat/utils/.execute-navigation.md +49 -0
  275. package/src/components/chat/utils/.extract-incomplete-message-state.md +9 -12
  276. package/src/components/chat/utils/.history-merge.md +65 -0
  277. package/src/components/chat/utils/.icon-library.md +33 -31
  278. package/src/components/chat/utils/.icon-registry.md +44 -0
  279. package/src/components/chat/utils/.index.md +37 -33
  280. package/src/components/chat/utils/.is-cross-origin-url.md +26 -22
  281. package/src/components/chat/utils/.message-segment-accumulator.md +46 -25
  282. package/src/components/chat/utils/.nav-anchor-props.md +29 -34
  283. package/src/components/chat/utils/.nav-click-handler.md +29 -33
  284. package/src/components/chat/utils/.process-historical-messages.md +29 -33
  285. package/src/components/chat/utils/.scripted-stream.md +52 -0
  286. package/src/components/chat/utils/.source-row-cta.md +32 -31
  287. package/src/components/chat/utils/.tool-call-helpers.md +25 -17
  288. package/src/components/contact/.contact-form.md +24 -19
  289. package/src/components/docs/.doc-navigation-context.md +49 -0
  290. package/src/components/docs/.doc-viewer.md +64 -0
  291. package/src/components/docs/.docs-hub-page.md +49 -0
  292. package/src/components/docs/.index.md +51 -0
  293. package/src/components/docs/.skeletons.md +47 -0
  294. package/src/components/docs/.use-docs-resolve-link.md +61 -0
  295. package/src/components/docs/.use-document-tree.md +83 -0
  296. package/src/components/docs/.use-scroll-spy.md +58 -0
  297. package/src/components/embeds/.embed-container.md +45 -0
  298. package/src/components/embeds/.embed-iframe.md +51 -0
  299. package/src/components/embeds/.figma-embed.md +43 -0
  300. package/src/components/embeds/.file-download-card.md +47 -0
  301. package/src/components/embeds/.google-sheets-viewer.md +40 -0
  302. package/src/components/embeds/.index.md +58 -0
  303. package/src/components/embeds/.linkedin-embed-client.md +50 -0
  304. package/src/components/embeds/.markdown-image.md +40 -0
  305. package/src/components/embeds/.og-link-preview.md +54 -0
  306. package/src/components/embeds/.pdf-viewer.md +43 -0
  307. package/src/components/embeds/.reddit-embed-client.md +40 -0
  308. package/src/components/embeds/.rich-markdown-runtime.md +53 -0
  309. package/src/components/embeds/.twitter-embed-client.md +44 -0
  310. package/src/components/faq/.faq-document-page.md +68 -0
  311. package/src/components/faq/.faq-section.md +55 -0
  312. package/src/components/faq/.index.md +29 -0
  313. package/src/components/faq/.json-ld.md +48 -0
  314. package/src/components/features/.array-entry-manager.md +32 -24
  315. package/src/components/features/.auth-providers-list.md +33 -32
  316. package/src/components/features/.captions-url.md +43 -0
  317. package/src/components/features/.cards-strip.md +48 -0
  318. package/src/components/features/.changelog-manager.md +17 -20
  319. package/src/components/features/.command-box.md +11 -16
  320. package/src/components/features/.entity-summary-editor.md +20 -15
  321. package/src/components/features/.entity-tag-badges.md +43 -0
  322. package/src/components/features/.entity-video-section.md +31 -41
  323. package/src/components/features/.figma-prototype-viewer.md +55 -37
  324. package/src/components/features/.filters-dropdown.md +14 -13
  325. package/src/components/features/.highlight-config-section.md +19 -16
  326. package/src/components/features/.highlight-video-combined-section.md +28 -19
  327. package/src/components/features/.highlight-video-preview.md +13 -11
  328. package/src/components/features/.highlight-video-section.md +26 -22
  329. package/src/components/features/.index.md +40 -36
  330. package/src/components/features/.media-gallery-manager.md +37 -35
  331. package/src/components/features/.mux-origins.md +46 -0
  332. package/src/components/features/.og-editor-preview.md +29 -24
  333. package/src/components/features/.os-type-badge-group.md +26 -18
  334. package/src/components/features/.os-type-badge.md +41 -24
  335. package/src/components/features/.paths-display.md +42 -25
  336. package/src/components/features/.platform-badge.md +26 -17
  337. package/src/components/features/.policy-configuration-panel.md +33 -31
  338. package/src/components/features/.provider-button.md +29 -20
  339. package/src/components/features/.push-button-selector.md +39 -41
  340. package/src/components/features/.release-media-manager.md +41 -34
  341. package/src/components/features/.section-selector.md +27 -16
  342. package/src/components/features/.select-button.md +21 -32
  343. package/src/components/features/.seo-editor-preview.md +49 -36
  344. package/src/components/features/.social-links-manager.md +40 -18
  345. package/src/components/features/.start-with-openframe-button.md +30 -32
  346. package/src/components/features/.status-filter-component.md +29 -38
  347. package/src/components/features/.tags-selector.md +25 -29
  348. package/src/components/features/.transcript-summary-editor.md +24 -18
  349. package/src/components/features/.use-video-warmup.md +47 -0
  350. package/src/components/features/.video-bites-display.md +36 -37
  351. package/src/components/features/.video-bites-shared.md +44 -0
  352. package/src/components/features/.video-bites-strip.md +63 -0
  353. package/src/components/features/.video-center-badge.md +38 -0
  354. package/src/components/features/.video-ratio-tabs.md +38 -31
  355. package/src/components/features/.video-source-selector.md +24 -27
  356. package/src/components/features/.video.md +35 -27
  357. package/src/components/features/.waitlist-form.md +39 -33
  358. package/src/components/features/.warning-block.md +53 -0
  359. package/src/components/features/ai-enrich/.AIEnrichSection.md +24 -25
  360. package/src/components/features/ai-enrich/.AIRequiredBadge.md +22 -21
  361. package/src/components/features/ai-enrich/.AIStatusIndicator.md +42 -35
  362. package/src/components/features/ai-enrich/.AIWarningsSection.md +23 -20
  363. package/src/components/features/ai-enrich/.ConfidenceBadge.md +35 -20
  364. package/src/components/features/auth/.auth-benefits-panel.md +48 -0
  365. package/src/components/features/auth/.auth-branding.md +51 -0
  366. package/src/components/features/auth/.auth-shell.md +51 -0
  367. package/src/components/features/auth/.back-to-login-link.md +48 -0
  368. package/src/components/features/auth/.complete-account-form.md +45 -0
  369. package/src/components/features/auth/.create-organization-form.md +53 -0
  370. package/src/components/features/auth/.index.md +48 -0
  371. package/src/components/features/auth/.invite-link-invalid-modal.md +42 -0
  372. package/src/components/features/auth/.login-form.md +42 -0
  373. package/src/components/features/auth/.openframe-sso-login-form.md +46 -0
  374. package/src/components/features/auth/.openframe-sso-signup-form.md +51 -0
  375. package/src/components/features/auth/.password-reset-form.md +57 -0
  376. package/src/components/features/auth/.sso-auth-shell.md +35 -0
  377. package/src/components/features/auth/.sso-providers.md +42 -0
  378. package/src/components/features/auth/.terms-agreement-label.md +28 -0
  379. package/src/components/features/board/.board-column-header.md +24 -18
  380. package/src/components/features/board/.board-column.md +32 -32
  381. package/src/components/features/board/.board-ticket-approval.md +42 -0
  382. package/src/components/features/board/.board.md +38 -38
  383. package/src/components/features/board/.index.md +35 -38
  384. package/src/components/features/board/.ticket-card.md +33 -36
  385. package/src/components/features/board/.types.md +38 -31
  386. package/src/components/features/card-hit-layer.tsx +84 -0
  387. package/src/components/features/floating-walkthrough-video.tsx +891 -0
  388. package/src/components/features/index.ts +4 -0
  389. package/src/components/features/notifications/.approval-request-notification-tile.md +45 -0
  390. package/src/components/features/notifications/.index.md +35 -31
  391. package/src/components/features/notifications/.notification-drawer.md +32 -19
  392. package/src/components/features/notifications/.notification-popups.md +51 -0
  393. package/src/components/features/notifications/.notification-tile.md +43 -27
  394. package/src/components/features/notifications/.notifications-context.md +42 -45
  395. package/src/components/features/notifications/.types.md +51 -31
  396. package/src/components/features/ticket-status-config-list/.ticket-status-config-list.md +51 -0
  397. package/src/components/features/time-tracker/.index.md +48 -0
  398. package/src/components/features/time-tracker/.time-tracker-context.md +55 -0
  399. package/src/components/features/time-tracker/.time-tracker-header-button.md +51 -0
  400. package/src/components/features/time-tracker/.time-tracker-panel.md +58 -0
  401. package/src/components/features/time-tracker/.types.md +51 -0
  402. package/src/components/features/time-tracker/.use-tracker-clock.md +32 -0
  403. package/src/components/features/use-walkthrough-video.ts +70 -0
  404. package/src/components/features/video-bites-strip.tsx +46 -146
  405. package/src/components/features/video-center-badge.tsx +11 -2
  406. package/src/components/features/video-hover-preview.tsx +201 -0
  407. package/src/components/features/video.tsx +368 -73
  408. package/src/components/help-center-pages/.delivery-page.md +51 -0
  409. package/src/components/help-center-pages/.index.md +51 -0
  410. package/src/components/help-center-pages/.onboarding-guides-catalog-page.md +53 -0
  411. package/src/components/help-center-pages/.product-releases-list-page.md +51 -0
  412. package/src/components/help-center-pages/.roadmap-page.md +46 -0
  413. package/src/components/icons/.figma-icon.md +13 -7
  414. package/src/components/icons/.index.md +26 -22
  415. package/src/components/icons/.vendor-directory-icon.md +30 -18
  416. package/src/components/icons/.x-logo.md +26 -10
  417. package/src/components/icons-v2-generated/.index.md +30 -41
  418. package/src/components/icons-v2-generated/brand-logos/.index.md +25 -19
  419. package/src/components/icons-v2-generated/communication/.index.md +26 -30
  420. package/src/components/icons-v2-generated/logos/.flamingo-logo-icon.md +41 -0
  421. package/src/components/layout/.article-detail-layout.md +32 -21
  422. package/src/components/layout/.page-container.md +25 -23
  423. package/src/components/layout/.page-heading.md +48 -0
  424. package/src/components/layout/.page-layout.md +30 -25
  425. package/src/components/layout/.title-block.md +43 -24
  426. package/src/components/loading/.card-skeleton.md +28 -35
  427. package/src/components/loading/.category-card-skeleton.md +25 -23
  428. package/src/components/loading/.device-card-skeleton.md +22 -15
  429. package/src/components/loading/.margin-report-skeleton.md +30 -35
  430. package/src/components/loading/.openmsp-heartbeat.md +30 -32
  431. package/src/components/loading/.organization-card-skeleton.md +22 -25
  432. package/src/components/loading/.organization-icon-skeleton.md +39 -27
  433. package/src/components/loading/.page-layout-skeleton.md +50 -28
  434. package/src/components/loading/.unified-skeleton.md +37 -40
  435. package/src/components/loading/.users-grid-skeleton.md +19 -38
  436. package/src/components/navigation/.app-header.md +35 -28
  437. package/src/components/navigation/.app-layout-context.md +48 -0
  438. package/src/components/navigation/.app-layout-drawer.md +56 -0
  439. package/src/components/navigation/.app-layout.md +24 -23
  440. package/src/components/navigation/.header-mingo-button.md +46 -0
  441. package/src/components/navigation/.header-organization-filter.md +32 -18
  442. package/src/components/navigation/.header.md +24 -31
  443. package/src/components/navigation/.index.md +36 -50
  444. package/src/components/navigation/.mingo-ai-button.md +41 -0
  445. package/src/components/navigation/.mobile-burger-menu.md +29 -29
  446. package/src/components/navigation/.mobile-nav-panel.md +41 -49
  447. package/src/components/navigation/.multi-level-navigation.md +76 -0
  448. package/src/components/navigation/.navigation-sidebar-item.md +14 -14
  449. package/src/components/navigation/.navigation-sidebar.md +30 -23
  450. package/src/components/navigation/.sliding-sidebar.md +30 -25
  451. package/src/components/navigation/.sticky-section-nav.md +23 -21
  452. package/src/components/onboarding-guides/.index.md +40 -0
  453. package/src/components/onboarding-guides/.onboarding-guide-detail-view.md +55 -0
  454. package/src/components/onboarding-guides/.onboarding-guides-catalog-skeleton.md +33 -0
  455. package/src/components/onboarding-guides/.onboarding-guides-catalog-view.md +50 -0
  456. package/src/components/onboarding-guides/hooks/.use-onboarding-guides.md +54 -0
  457. package/src/components/platform/.CveLink.md +28 -17
  458. package/src/components/platform/.ScriptArguments.md +18 -23
  459. package/src/components/platform/.ScriptInfoSection.md +27 -21
  460. package/src/components/platform/.ShellTypeBadge.md +34 -18
  461. package/src/components/platform/.SoftwareInfo.md +23 -21
  462. package/src/components/platform/.ToolBadge.md +18 -16
  463. package/src/components/profile/.ProfileLoadingSkeleton.md +24 -23
  464. package/src/components/related-content/.index.md +41 -0
  465. package/src/components/related-content/.related-content-section.md +62 -0
  466. package/src/components/shared/.article-author-byline.md +56 -0
  467. package/src/components/shared/.detail-page-skeleton.md +32 -43
  468. package/src/components/shared/.media-gallery-strip.md +43 -0
  469. package/src/components/shared/delivery/.delivery-lists.md +20 -19
  470. package/src/components/shared/delivery/.delivery-row.md +24 -20
  471. package/src/components/shared/delivery/.delivery-table.md +20 -22
  472. package/src/components/shared/dev-section/.dev-card-row.md +28 -36
  473. package/src/components/shared/dev-section/.dev-section-page.md +36 -25
  474. package/src/components/shared/dev-section/.dev-section-view.md +32 -22
  475. package/src/components/shared/doc-search/.doc-search-bar.md +58 -0
  476. package/src/components/shared/doc-search/.doc-search-result-row.md +50 -0
  477. package/src/components/shared/doc-search/.format-relative-path.md +30 -0
  478. package/src/components/shared/doc-search/.index.md +46 -0
  479. package/src/components/shared/doc-search/.map-doc-search-results.md +44 -0
  480. package/src/components/shared/doc-search/.resolve-search-result-action.md +52 -0
  481. package/src/components/shared/doc-search/.types.md +49 -0
  482. package/src/components/shared/doc-search/.use-doc-search.md +66 -0
  483. package/src/components/shared/legal-document/.legal-document-page.md +26 -20
  484. package/src/components/shared/legal-document/.use-legal-docs.md +36 -30
  485. package/src/components/shared/onboarding/.onboarding-step-card.md +24 -16
  486. package/src/components/shared/onboarding/.onboarding-walkthrough.md +42 -28
  487. package/src/components/shared/product-release/.index.md +33 -24
  488. package/src/components/shared/product-release/.product-release-card-skeleton.md +22 -28
  489. package/src/components/shared/product-release/.product-release-card.md +28 -29
  490. package/src/components/shared/product-release/.product-releases-view.md +49 -0
  491. package/src/components/shared/product-release/.release-detail-page.md +30 -15
  492. package/src/components/shared/roadmap/.index.md +29 -24
  493. package/src/components/shared/roadmap/.roadmap-grid.md +43 -54
  494. package/src/components/shared/roadmap/.roadmap-view.md +41 -0
  495. package/src/components/shared/roadmap/.use-roadmap-voting.md +27 -17
  496. package/src/components/switch.tsx +1 -1
  497. package/src/components/tickets/.help-center-card.md +32 -28
  498. package/src/components/tickets/.help-center-create-form.md +34 -22
  499. package/src/components/tickets/.help-center-list.md +36 -25
  500. package/src/components/tickets/.index.md +30 -45
  501. package/src/components/tickets/.ticket-center.md +31 -38
  502. package/src/components/tickets/.ticket-detail-drawer.md +20 -30
  503. package/src/components/tickets/.ticket-open-form.md +24 -26
  504. package/src/components/tickets/.ticket-reply-composer.md +51 -0
  505. package/src/components/tickets/.ticket-row.md +26 -11
  506. package/src/components/tickets/.types.md +56 -38
  507. package/src/components/tickets/hooks/.use-ticket-actions.md +60 -47
  508. package/src/components/tickets/hooks/.use-ticket-engagements.md +27 -27
  509. package/src/components/tickets/hooks/.use-tickets-list.md +24 -30
  510. package/src/components/ui/.accordion.md +28 -21
  511. package/src/components/ui/.actions-menu.md +36 -54
  512. package/src/components/ui/.ai-generated-badge.md +25 -0
  513. package/src/components/ui/.alert-dialog.md +21 -16
  514. package/src/components/ui/.alert.md +30 -25
  515. package/src/components/ui/.allowed-domains-input.md +26 -15
  516. package/src/components/ui/.announcement-bar-view.md +46 -0
  517. package/src/components/ui/.autocomplete.md +40 -27
  518. package/src/components/ui/.badge.md +34 -31
  519. package/src/components/ui/.brand-association-card.md +22 -18
  520. package/src/components/ui/.breadcrumb.md +18 -14
  521. package/src/components/ui/.bullet-list.md +35 -23
  522. package/src/components/ui/.card.md +47 -30
  523. package/src/components/ui/.checkbox-block.md +34 -22
  524. package/src/components/ui/.checkbox-with-description.md +18 -20
  525. package/src/components/ui/.chevron-button.md +29 -29
  526. package/src/components/ui/.circular-progress.md +30 -41
  527. package/src/components/ui/.color-preset-select.md +54 -0
  528. package/src/components/ui/.color-swatch.md +37 -0
  529. package/src/components/ui/.content-loader.md +34 -27
  530. package/src/components/ui/.crossfade-panels.md +50 -0
  531. package/src/components/ui/.cursor-pagination.md +38 -26
  532. package/src/components/ui/.dashboard-info-card.md +46 -27
  533. package/src/components/ui/.date-picker.md +52 -36
  534. package/src/components/ui/.device-card-compact.md +23 -20
  535. package/src/components/ui/.device-card.md +39 -30
  536. package/src/components/ui/.dialog.md +14 -14
  537. package/src/components/ui/.drawer.md +45 -39
  538. package/src/components/ui/.dropdown-button.md +41 -33
  539. package/src/components/ui/.dropdown-menu.md +40 -23
  540. package/src/components/ui/.duration-input.md +41 -0
  541. package/src/components/ui/.entity-image.md +32 -28
  542. package/src/components/ui/.error-state.md +30 -26
  543. package/src/components/ui/.fade-preview.md +44 -0
  544. package/src/components/ui/.field-wrapper.md +34 -23
  545. package/src/components/ui/.file-upload.md +30 -18
  546. package/src/components/ui/.filter-modal.md +30 -32
  547. package/src/components/ui/.filter-pill-row.md +58 -0
  548. package/src/components/ui/.floating-tooltip.md +27 -32
  549. package/src/components/ui/.hidden-tags-popup.md +18 -20
  550. package/src/components/ui/.highlight-card.md +36 -23
  551. package/src/components/ui/.honeypot-field.md +41 -0
  552. package/src/components/ui/.hover-dropdown.md +44 -31
  553. package/src/components/ui/.image-gallery-modal.md +28 -30
  554. package/src/components/ui/.image-uploader.md +39 -22
  555. package/src/components/ui/.index.md +33 -31
  556. package/src/components/ui/.info-card-row.md +50 -0
  557. package/src/components/ui/.info-card.md +27 -20
  558. package/src/components/ui/.info-row.md +30 -24
  559. package/src/components/ui/.info-section.md +63 -0
  560. package/src/components/ui/.input.md +29 -28
  561. package/src/components/ui/.label.md +34 -26
  562. package/src/components/ui/.markdown-editor.md +26 -25
  563. package/src/components/ui/.marquee-wall.md +64 -0
  564. package/src/components/ui/.menubar.md +50 -16
  565. package/src/components/ui/.modal-v2.md +41 -27
  566. package/src/components/ui/.modal.md +22 -19
  567. package/src/components/ui/.more-actions-menu.md +30 -24
  568. package/src/components/ui/.navigation-menu.md +40 -25
  569. package/src/components/ui/.organization-card.md +46 -27
  570. package/src/components/ui/.page-actions.md +55 -41
  571. package/src/components/ui/.page-loader.md +40 -23
  572. package/src/components/ui/.password-input.md +30 -0
  573. package/src/components/ui/.phone-input.md +20 -22
  574. package/src/components/ui/.portal-container.md +43 -0
  575. package/src/components/ui/.progress-bar.md +40 -27
  576. package/src/components/ui/.release-changelog-section.md +32 -26
  577. package/src/components/ui/.rich-markdown-renderer.md +45 -0
  578. package/src/components/ui/.scroll-fade.md +56 -0
  579. package/src/components/ui/.search-input.md +55 -37
  580. package/src/components/ui/.select.md +25 -26
  581. package/src/components/ui/.service-card.md +25 -19
  582. package/src/components/ui/.sheet.md +21 -21
  583. package/src/components/ui/.simple-markdown-renderer.md +36 -24
  584. package/src/components/ui/.slack-channel-chip.md +49 -0
  585. package/src/components/ui/.square-avatar.md +29 -26
  586. package/src/components/ui/.stacked-rows-panel.md +61 -0
  587. package/src/components/ui/.status-badge.md +30 -24
  588. package/src/components/ui/.status-indicator.md +35 -21
  589. package/src/components/ui/.tab-content.md +34 -22
  590. package/src/components/ui/.tab-navigation.md +40 -50
  591. package/src/components/ui/.tab-selector.md +48 -31
  592. package/src/components/ui/.tabs.md +34 -21
  593. package/src/components/ui/.tag-search-input.md +20 -20
  594. package/src/components/ui/.tag-select-dropdown.md +59 -0
  595. package/src/components/ui/.tag.md +25 -43
  596. package/src/components/ui/.tags-input.md +31 -31
  597. package/src/components/ui/.textarea.md +32 -30
  598. package/src/components/ui/.ticket-attachments-list.md +36 -29
  599. package/src/components/ui/.ticket-info-section.md +37 -42
  600. package/src/components/ui/.ticket-status-config-row.md +66 -0
  601. package/src/components/ui/.ticket-status-tag.md +39 -35
  602. package/src/components/ui/.toaster.md +21 -15
  603. package/src/components/ui/.toggle.md +38 -37
  604. package/src/components/ui/.tooltip.md +16 -13
  605. package/src/components/ui/button/.button-styles.md +17 -18
  606. package/src/components/ui/button/.button.md +30 -37
  607. package/src/components/ui/button/.split-button.md +46 -23
  608. package/src/components/ui/button/button-styles.ts +13 -0
  609. package/src/components/ui/button/button.tsx +5 -0
  610. package/src/components/ui/data-table/.data-table-body.md +50 -35
  611. package/src/components/ui/data-table/.data-table-empty.md +17 -33
  612. package/src/components/ui/data-table/.data-table-header.md +43 -40
  613. package/src/components/ui/data-table/.data-table-row.md +31 -31
  614. package/src/components/ui/data-table/.types.md +23 -28
  615. package/src/components/ui/file-manager/.file-manager-breadcrumb.md +16 -24
  616. package/src/components/ui/file-manager/.file-manager-empty.md +23 -15
  617. package/src/components/ui/file-manager/.file-manager-skeleton.md +34 -36
  618. package/src/components/ui/file-manager/.file-manager-table-row.md +29 -29
  619. package/src/components/ui/file-manager/.file-manager-table.md +39 -24
  620. package/src/components/ui/no-data/.index.md +22 -0
  621. package/src/components/ui/no-data/.no-data-actions.md +29 -0
  622. package/src/components/ui/no-data/.no-data-message.md +37 -0
  623. package/src/components/ui/no-data/.no-data-styles.md +39 -0
  624. package/src/components/ui/no-data/.no-data.md +59 -0
  625. package/src/components/ui/page-actions.tsx +2 -1
  626. package/src/components/ui/query-report-table/.query-report-table-header.md +15 -15
  627. package/src/components/ui/query-report-table/.query-report-table-row.md +16 -16
  628. package/src/components/ui/query-report-table/.query-report-table.md +39 -24
  629. package/src/components/ui/table/.table-column-filter-dropdown.md +15 -9
  630. package/src/components/ui/table/.table-description-cell.md +13 -12
  631. package/src/components/ui/table/.table-empty-state.md +19 -20
  632. package/src/components/ui/table/.table-row.md +30 -20
  633. package/src/components/ui/table/.table-skeleton.md +32 -27
  634. package/src/components/ui/table/.table-timestamp-cell.md +24 -23
  635. package/src/components/ui/table/.table.md +43 -30
  636. package/src/components/ui/table/.types.md +49 -45
  637. package/src/components/ui/table/.use-table-motion.md +45 -0
  638. package/src/contexts/.chat-runtime-context.md +55 -26
  639. package/src/contexts/.endpoints-runtime-context.md +40 -44
  640. package/src/embed-shims/.next-navigation.md +38 -31
  641. package/src/hooks/.api-hooks.md +28 -21
  642. package/src/hooks/.index.md +30 -25
  643. package/src/hooks/.use-authed-image-src.md +38 -0
  644. package/src/hooks/.use-contact-submission.md +35 -36
  645. package/src/hooks/.use-humanity-signals.md +47 -0
  646. package/src/hooks/.use-near-viewport.md +30 -30
  647. package/src/hooks/.use-og-placeholder-url.md +57 -0
  648. package/src/hooks/.use-scroll-to-hash.md +46 -0
  649. package/src/hooks/.use-self-fetch.md +52 -0
  650. package/src/hooks/state/.flatten-schema.md +37 -29
  651. package/src/hooks/ui/.index.md +37 -25
  652. package/src/hooks/ui/.use-auto-limit-tags.md +55 -38
  653. package/src/hooks/ui/.use-deferred-error.md +44 -0
  654. package/src/hooks/ui/.use-focus-trap.md +59 -0
  655. package/src/hooks/ui/.use-header-height.md +37 -0
  656. package/src/hooks/ui/.use-horizontal-scrollbar.md +25 -34
  657. package/src/hooks/ui/.use-marquee-engine.md +73 -0
  658. package/src/hooks/ui/.use-notification-permission.md +49 -0
  659. package/src/hooks/ui/.use-reset-on-page-hidden.md +40 -0
  660. package/src/hooks/ui/.use-suppress-clone-focus.md +41 -0
  661. package/src/nats/.index.md +39 -0
  662. package/src/nats/.nats-provider.md +46 -0
  663. package/src/nats/.nats.md +38 -28
  664. package/src/nats/.shared-connection.md +56 -0
  665. package/src/nats/.use-nats-subscription.md +57 -0
  666. package/src/stories/.ActionsMenu.stories.md +57 -0
  667. package/src/stories/.Alert.stories.md +46 -0
  668. package/src/stories/.AnnouncementBar.stories.md +59 -32
  669. package/src/stories/.AppLayoutDrawer.stories.md +60 -0
  670. package/src/stories/.AppLayoutSidebar.stories.md +45 -0
  671. package/src/stories/.ApprovalBatchMessage.stories.md +46 -0
  672. package/src/stories/.ApprovalBatchMessageClient.stories.md +55 -0
  673. package/src/stories/.ApprovalRequestMessage.stories.md +50 -0
  674. package/src/stories/.ApprovalRequestMessageClient.stories.md +41 -0
  675. package/src/stories/.BlogCard.stories.md +52 -0
  676. package/src/stories/.Board.stories.md +25 -20
  677. package/src/stories/.Button.stories.md +35 -40
  678. package/src/stories/.CampaignCardAdmin.stories.md +38 -0
  679. package/src/stories/.CardsStrip.stories.md +39 -0
  680. package/src/stories/.CaseStudyCard.stories.md +41 -0
  681. package/src/stories/.ChatContainer.stories.md +41 -0
  682. package/src/stories/.ChatInlineVideoPill.stories.md +36 -0
  683. package/src/stories/.ChatMessageEnhanced.stories.md +51 -0
  684. package/src/stories/.ChatMingoInfoCards.stories.md +30 -0
  685. package/src/stories/.ChatTicketList.stories.md +38 -22
  686. package/src/stories/.ChatTypingIndicator.stories.md +47 -0
  687. package/src/stories/.CheckboxBlock.stories.md +34 -35
  688. package/src/stories/.ContextCompactionDisplay.stories.md +28 -0
  689. package/src/stories/.CustomerInterviewCard.stories.md +36 -0
  690. package/src/stories/.DashboardInfoCard.stories.md +40 -33
  691. package/src/stories/.DataRoomDocCard.stories.md +42 -0
  692. package/src/stories/.DataTable.stories.md +37 -32
  693. package/src/stories/.DatePicker.stories.md +34 -30
  694. package/src/stories/.EmbeddableChat.stories.md +45 -28
  695. package/src/stories/.EmptyState.stories.md +55 -0
  696. package/src/stories/.ErrorMessageDisplay.stories.md +45 -0
  697. package/src/stories/.FilterModal.stories.md +28 -22
  698. package/src/stories/.GenericEntityCard.stories.md +50 -0
  699. package/src/stories/.GitHubActivityCard.stories.md +41 -0
  700. package/src/stories/.GuideWelcome.stories.md +38 -0
  701. package/src/stories/.Header.stories.md +32 -22
  702. package/src/stories/.HubspotTicketCard.stories.md +41 -0
  703. package/src/stories/.InfoCard.stories.md +37 -26
  704. package/src/stories/.InfoCardRow.stories.md +48 -0
  705. package/src/stories/.InfoSection.stories.md +55 -0
  706. package/src/stories/.Input.stories.md +45 -35
  707. package/src/stories/.InvestorUpdateCard.stories.md +41 -0
  708. package/src/stories/.MarqueeWall.stories.md +53 -0
  709. package/src/stories/.MingoAiButton.stories.md +31 -0
  710. package/src/stories/.MingoChatModals.stories.md +47 -0
  711. package/src/stories/.MingoInfoCard.stories.md +50 -0
  712. package/src/stories/.MingoOnboardingCard.stories.md +19 -19
  713. package/src/stories/.MingoWelcome.stories.md +41 -0
  714. package/src/stories/.MobileNavPanel.stories.md +52 -0
  715. package/src/stories/.Modal.stories.md +19 -16
  716. package/src/stories/.MspOrganizationCard.stories.md +45 -0
  717. package/src/stories/.NotificationDrawer.stories.md +39 -28
  718. package/src/stories/.OSTypeBadge.stories.md +34 -25
  719. package/src/stories/.OnboardingGuideCard.stories.md +41 -0
  720. package/src/stories/.PageActions.stories.md +21 -21
  721. package/src/stories/.PageContainer.stories.md +29 -24
  722. package/src/stories/.PageLayout.stories.md +18 -35
  723. package/src/stories/.PolicyConfigurationPanel.stories.md +58 -0
  724. package/src/stories/.ProductReleaseCard.stories.md +39 -0
  725. package/src/stories/.ProgramCard.stories.md +51 -0
  726. package/src/stories/.QuickActionChip.stories.md +59 -0
  727. package/src/stories/.QuickActionMarquee.stories.md +51 -0
  728. package/src/stories/.QuickActionWall.stories.md +58 -0
  729. package/src/stories/.RoadmapCard.stories.md +41 -0
  730. package/src/stories/.ShellTypeBadge.stories.md +42 -22
  731. package/src/stories/.SlackMessageCard.stories.md +42 -0
  732. package/src/stories/.SlashCommandSuggestions.stories.md +21 -31
  733. package/src/stories/.SplitButton.stories.md +23 -25
  734. package/src/stories/.StackedRowsPanel.stories.md +65 -0
  735. package/src/stories/.TabSelector.stories.md +26 -38
  736. package/src/stories/.Tag.stories.md +32 -27
  737. package/src/stories/.ThinkingDisplay.stories.md +43 -0
  738. package/src/stories/.TicketCard.stories.md +60 -0
  739. package/src/stories/.TicketInfoSection.stories.md +28 -20
  740. package/src/stories/.TimeTracker.stories.md +35 -0
  741. package/src/stories/.Toaster.stories.md +26 -20
  742. package/src/stories/.ToolBadge.stories.md +34 -24
  743. package/src/stories/.ToolExecutionDisplay.stories.md +22 -20
  744. package/src/stories/.ToolExecutionDisplayClient.stories.md +33 -0
  745. package/src/stories/.VideoBitesStrip.stories.md +37 -0
  746. package/src/stories/.WarningBlock.stories.md +51 -0
  747. package/src/stories/__fixtures__/.chat-card-decorator.md +39 -0
  748. package/src/stories/__fixtures__/.chat-cards.md +57 -0
  749. package/src/stories/auth/.CompleteAccount.stories.md +36 -0
  750. package/src/stories/auth/.CreateOrganization.stories.md +52 -0
  751. package/src/stories/auth/.InviteLinkInvalid.stories.md +21 -0
  752. package/src/stories/auth/.Login.stories.md +32 -0
  753. package/src/stories/auth/.OpenFrameSso.stories.md +58 -0
  754. package/src/stories/auth/.PasswordReset.stories.md +49 -0
  755. package/src/styles/ods-interaction-states.css +32 -0
  756. package/src/types/.announcement.md +67 -35
  757. package/src/types/.blog.md +44 -41
  758. package/src/types/.case-study.md +31 -17
  759. package/src/types/.content-ref.md +37 -0
  760. package/src/types/.customer-interview.md +38 -38
  761. package/src/types/.doc-source.md +87 -0
  762. package/src/types/.entity-author.md +53 -0
  763. package/src/types/.entity-platform.md +40 -0
  764. package/src/types/.index.md +23 -17
  765. package/src/types/.marketing.md +32 -35
  766. package/src/types/.navigation.md +31 -19
  767. package/src/types/.os.types.md +30 -31
  768. package/src/types/.permissions.md +49 -35
  769. package/src/types/.platform.md +44 -28
  770. package/src/types/.product-release.md +59 -42
  771. package/src/types/.shell.types.md +46 -30
  772. package/src/types/.supabase.md +43 -29
  773. package/src/types/.tool.types.md +43 -23
  774. package/src/types/.video-processing.md +40 -31
  775. package/src/types/supabase.ts +80 -0
  776. package/src/types/video-processing.ts +1 -0
  777. package/src/utils/.announcement-storage.md +49 -17
  778. package/src/utils/.app-config.md +22 -18
  779. package/src/utils/.brand-marks.md +46 -0
  780. package/src/utils/.cn.md +40 -29
  781. package/src/utils/.color-analysis.md +34 -25
  782. package/src/utils/.common.md +43 -23
  783. package/src/utils/.content-href.md +64 -0
  784. package/src/utils/.content-ref-groups.md +51 -0
  785. package/src/utils/.date-utils.md +46 -35
  786. package/src/utils/.doc-path-utils.md +38 -0
  787. package/src/utils/.doc-tree-nav.md +51 -0
  788. package/src/utils/.embed-authed-fetch.md +48 -32
  789. package/src/utils/.embed-content-fetch.md +36 -0
  790. package/src/utils/.embed-url-converters.md +52 -0
  791. package/src/utils/.extract-items.md +49 -0
  792. package/src/utils/.faq-anchor.md +48 -0
  793. package/src/utils/.format.md +73 -55
  794. package/src/utils/.humanity-signals.md +59 -0
  795. package/src/utils/.index.md +73 -31
  796. package/src/utils/.list-url.md +43 -0
  797. package/src/utils/.markdown-section-extractor.md +57 -0
  798. package/src/utils/.markdown-to-plain.md +51 -0
  799. package/src/utils/.media-carousel-utils-stub.md +42 -31
  800. package/src/utils/.ods-color-utils.md +84 -43
  801. package/src/utils/.og-placeholder.md +45 -0
  802. package/src/utils/.page-header-constants.md +26 -0
  803. package/src/utils/.platform-config.md +34 -34
  804. package/src/utils/.release-badge.md +47 -0
  805. package/src/utils/.release-cover.md +45 -0
  806. package/src/utils/.same-page-hash-nav.md +45 -0
  807. package/src/utils/.scroll-into-view.md +32 -25
  808. package/src/utils/.seo-description.md +37 -0
  809. package/src/utils/.seo-title.md +25 -0
  810. package/src/utils/.social-embed-cache.md +37 -0
  811. package/src/utils/.source-icons.md +30 -34
  812. package/src/utils/.suggestion-url.md +46 -0
  813. package/src/utils/.tool-utils.md +39 -24
  814. package/src/utils/.tree-builder.md +64 -0
  815. package/src/utils/.video-bite-id.md +42 -0
  816. package/src/utils/announcement-storage.ts +9 -18
  817. package/src/utils/dev-sections/.dev-section-param-keys.md +51 -0
  818. package/src/utils/dev-sections/.openframe-dev-sections.md +40 -28
  819. package/src/utils/dismiss-cookie.ts +55 -0
  820. package/src/utils/dismissal-storage.ts +38 -0
  821. package/src/utils/index.ts +3 -0
  822. package/dist/chunk-BBUEY73L.js.map +0 -1
  823. package/dist/chunk-G3UN2DXU.cjs.map +0 -1
  824. package/dist/chunk-OWMLWJQY.cjs.map +0 -1
  825. package/dist/chunk-SASR7SK5.js.map +0 -1
  826. package/src/components/chat/utils/.onboarding-icons.md +0 -28
  827. package/src/hooks/.use-og-placeholder.md +0 -51
  828. /package/dist/{chunk-MGKCS6KS.js.map → chunk-3WCARCI4.js.map} +0 -0
  829. /package/dist/{chunk-Y3Y2DLNO.js.map → chunk-6UGYBCEN.js.map} +0 -0
  830. /package/dist/{chunk-PSPWT2Q5.js.map → chunk-7LWXWXEY.js.map} +0 -0
  831. /package/dist/{chunk-VTSRDC4W.js.map → chunk-CKC3EAYT.js.map} +0 -0
  832. /package/dist/{chunk-ZRANZNEA.js.map → chunk-JJE5TUZK.js.map} +0 -0
  833. /package/dist/{chunk-66BNAFO6.js.map → chunk-JQIUBFHL.js.map} +0 -0
  834. /package/dist/{chunk-2DIOV7BR.js.map → chunk-UPN6EFOM.js.map} +0 -0
  835. /package/dist/{chunk-4SMRQ4SN.js.map → chunk-WBL5Y4PS.js.map} +0 -0
  836. /package/dist/{chunk-FP4H6Y5O.js.map → chunk-WPYPSIY2.js.map} +0 -0
  837. /package/dist/{chunk-R5WJJL4V.js.map → chunk-X5X43HFV.js.map} +0 -0
  838. /package/dist/{chunk-DEHZ5CTC.js.map → chunk-XTWKDMCG.js.map} +0 -0
@@ -0,0 +1,43 @@
1
+ <!-- source-hash: 5e30f7353e7e3464bee931d93655ddb7 -->
2
+ A React client component that renders a PDF file with an embedded iframe viewer and action buttons for previewing and downloading.
3
+
4
+ ## Key Components
5
+
6
+ ### `PdfViewerProps`
7
+ | Prop | Type | Description |
8
+ |------|------|-------------|
9
+ | `src` | `string` | URL of the PDF file to display |
10
+ | `fileName` | `string?` | Display name shown in the header (defaults to `"PDF Document"`) |
11
+ | `onPreview` | `() => void?` | Custom preview handler; if omitted, opens `src` in a new tab |
12
+ | `onDownload` | `() => void?` | Custom download handler; if omitted, opens `src` in a new tab |
13
+ | `height` | `string?` | Optional height passed to the embedded iframe |
14
+
15
+ ### `PdfViewer`
16
+ The primary exported component. Renders an empty state with an Adobe PDF icon when `src` is falsy, otherwise displays:
17
+ - A header row with the PDF icon, file name, and **Preview**/**Download** buttons
18
+ - An `EmbedIframe` for inline viewing
19
+
20
+ ## Usage Example
21
+
22
+ ```typescript
23
+ // Basic usage — buttons open src in a new tab
24
+ <PdfViewer
25
+ src="https://example.com/report.pdf"
26
+ fileName="Q1 Report"
27
+ />
28
+
29
+ // With custom handlers
30
+ <PdfViewer
31
+ src="https://example.com/report.pdf"
32
+ fileName="Q1 Report"
33
+ height="600px"
34
+ onPreview={() => openPreviewModal()}
35
+ onDownload={() => triggerDownload()}
36
+ />
37
+ ```
38
+
39
+ ## Notes
40
+
41
+ - When `onPreview` or `onDownload` callbacks are provided, the corresponding button uses `onClick` instead of an `href`, preventing a new tab from opening.
42
+ - The component is responsive: button layout switches from stacked (`flex-col`) on mobile to inline (`flex-row`) on `sm` breakpoints.
43
+ - Source: [`pdf-viewer.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/pdf-viewer.tsx)
@@ -0,0 +1,40 @@
1
+ <!-- source-hash: 69e19d1dd3c34ac5624e382237522c62 -->
2
+ React client component that fetches and renders Reddit post embeds with support for video, gallery, and image previews, using a centralized social embed cache for data fetching.
3
+
4
+ ## Key Components
5
+
6
+ ### `RedditEmbedClient`
7
+ Main export. Accepts a Reddit post `url` and optional `maxWidth`, fetches post data via `socialCache.fetchWithHierarchy`, and renders a styled embed card.
8
+
9
+ ### `RedditPost` Interface
10
+ Typed shape for the Reddit API JSON response, covering text, author, vote counts, preview images, hosted video, gallery data, and media metadata.
11
+
12
+ ### `getMediaContent(): MediaItem[]`
13
+ Internal helper that extracts media from a post in priority order:
14
+ 1. **Reddit-hosted video** (`v.redd.it` DASH streams) with poster image generation
15
+ 2. **Gallery posts** (`gallery_data` + `media_metadata`)
16
+ 3. **Single preview images** (best resolution ≤ 1200 px wide)
17
+
18
+ Skips all media extraction when the API signals a removed or deleted post (`selftext === '[removed]'`, `author === '[deleted]'`, etc.).
19
+
20
+ ### Inline SVG Icons
21
+ `MessageCircleIcon`, `ExternalLinkIcon`, `ArrowUpIcon`, `ClockIcon`, `UserIcon`, `RedditIcon` — self-contained SVGs to avoid external icon dependencies.
22
+
23
+ ### `RedditProfilePic`
24
+ Minimal avatar component rendering a Reddit-orange circle with `u/` text instead of fetching user avatars.
25
+
26
+ ## Usage Example
27
+
28
+ ```typescript
29
+ import { RedditEmbedClient } from './reddit-embed-client';
30
+
31
+ // In a React component / MDX page:
32
+ <RedditEmbedClient
33
+ url="https://www.reddit.com/r/nextjs/comments/abc123/some_post"
34
+ maxWidth={600}
35
+ />
36
+ ```
37
+
38
+ The component is a `"use client"` boundary — server components should use dynamic import or a server-side wrapper. It renders a skeleton loader while fetching, a fallback error card (with a direct Reddit link) on failure, and the full post card with `MediaCarousel` on success.
39
+
40
+ **Source:** [`reddit-embed-client.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/reddit-embed-client.tsx)
@@ -0,0 +1,53 @@
1
+ <!-- source-hash: 5b535a89e6cfb9cb002c7fd306bbaa13 -->
2
+ Provides a lightweight React context (`RichMarkdownRuntimeContext`) that threads proxy endpoint URLs and an optional image-transform function from `<RichMarkdownRenderer>` down to its satellite embed clients, without depending on the chat runtime.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `RichMarkdownRuntime` | Interface | Defines the three proxy URLs and the `transformImageSrc` knob |
9
+ | `RichMarkdownRuntimeProvider` | React component | Wraps subtrees with resolved runtime values; memoizes to prevent unnecessary re-renders |
10
+ | `useRichMarkdownRuntime` | Hook | Reads the ambient runtime; returns hub-matching defaults when called outside any provider |
11
+
12
+ ### `RichMarkdownRuntime` Interface Fields
13
+
14
+ | Field | Default | Description |
15
+ |---|---|---|
16
+ | `redditProxyUrl` | `/api/blog/reddit-proxy` | Proxy endpoint for Reddit embeds |
17
+ | `twitterProxyUrl` | `/api/blog/twitter-proxy` | Proxy endpoint for Twitter/X embeds |
18
+ | `ogScraperUrl` | `/api/og-scraper` | Endpoint for OG link-preview scraping |
19
+ | `transformImageSrc` | `() => null` (identity / no rewrite) | Hub-only Supabase image transformer; return `null` to use `src` as-is |
20
+
21
+ ## Usage Example
22
+
23
+ **Hub usage — override the image transformer, inherit proxy defaults:**
24
+
25
+ ```typescript
26
+ import { RichMarkdownRuntimeProvider } from './rich-markdown-runtime'
27
+
28
+ function BlogLayout({ children }: { children: React.ReactNode }) {
29
+ return (
30
+ <RichMarkdownRuntimeProvider
31
+ transformImageSrc={(src, opts) =>
32
+ supabaseImageTransform(src, opts)
33
+ }
34
+ >
35
+ {children}
36
+ </RichMarkdownRuntimeProvider>
37
+ )
38
+ }
39
+ ```
40
+
41
+ **Embedder usage — read the runtime inside a satellite client:**
42
+
43
+ ```typescript
44
+ import { useRichMarkdownRuntime } from './rich-markdown-runtime'
45
+
46
+ function RedditEmbedClient({ postUrl }: { postUrl: string }) {
47
+ const { redditProxyUrl } = useRichMarkdownRuntime()
48
+ // Falls back to '/api/blog/reddit-proxy' if no provider is in scope
49
+ const data = useFetch(`${redditProxyUrl}?url=${postUrl}`)
50
+ }
51
+ ```
52
+
53
+ **Source:** [`rich-markdown-runtime.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/rich-markdown-runtime.tsx)
@@ -0,0 +1,44 @@
1
+ <!-- source-hash: 4a337b178db352704df1ccdf20c1ec95 -->
2
+ A client-side React component that fetches and renders a styled Twitter/X post embed using the oEmbed API, with loading skeletons, error fallback states, and extracted tweet metadata.
3
+
4
+ ## Key Components
5
+
6
+ ### `TwitterEmbedClient`
7
+ The main exported component. Accepts a tweet URL (or optional `tweetId`) and renders a fully styled card with profile picture, tweet text, links, and engagement stat labels.
8
+
9
+ **Props:**
10
+ | Prop | Type | Default | Description |
11
+ |------|------|---------|-------------|
12
+ | `url` | `string` | — | Full Twitter/X post URL |
13
+ | `tweetId` | `string?` | — | Optional explicit tweet ID |
14
+ | `maxWidth` | `number` | `700` | Controls content area max height calculation |
15
+
16
+ ### Internal SVG Icons
17
+ Inline SVG components (`MessageCircleIcon`, `ExternalLinkIcon`, `HeartIcon`, `RepeatIcon`, `ClockIcon`, `UserIcon`) avoid external icon library dependencies. `XIcon` wraps the shared `XLogo` component.
18
+
19
+ ### `TwitterOEmbedResponse`
20
+ TypeScript interface modeling the oEmbed API response shape (author info, HTML, dimensions, provider metadata).
21
+
22
+ ### Key Behaviors
23
+ - **Cache-first fetching** via `socialCache.fetchWithHierarchy` — deduplicated, runs once via `initializationDone` ref
24
+ - **URL normalization** — extracts tweet ID via regex from any `twitter.com` or `x.com` URL
25
+ - **Profile pictures** — fetched from `unavatar.io/twitter/{username}` with an inline SVG base64 fallback on error
26
+ - **Text extraction** — parses oEmbed HTML with `DOMParser`, strips attribution suffix, truncates at 600 characters
27
+
28
+ ## Usage Example
29
+
30
+ ```typescript
31
+ import { TwitterEmbedClient } from './twitter-embed-client';
32
+
33
+ // Minimal usage with full URL
34
+ <TwitterEmbedClient url="https://x.com/OpenAI/status/1234567890123456789" />
35
+
36
+ // With explicit tweet ID and custom width
37
+ <TwitterEmbedClient
38
+ url="https://x.com/OpenAI/status/1234567890123456789"
39
+ tweetId="1234567890123456789"
40
+ maxWidth={500}
41
+ />
42
+ ```
43
+
44
+ **Runtime requirement:** The component calls `useRichMarkdownRuntime()` to obtain `twitterProxyUrl`. A compatible runtime provider must exist in the component tree — see [`useRichMarkdownRuntime`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/components/rich-markdown/rich-markdown-runtime.ts) for context setup details.
@@ -0,0 +1,68 @@
1
+ <!-- source-hash: 8a01e8caf8a388648de21a863fa2e4b4 -->
2
+ Full-page FAQ document component that composes `PageShell`, `PageLayout`, and `FaqSection` into a single drop-in page, mirroring the `LegalDocumentPage` / `DevSectionPage` pattern so host pages need only pass config and SSR-resolved data.
3
+
4
+ ## Key Components
5
+
6
+ ### `FaqDocumentPage`
7
+
8
+ The primary export. Renders a complete `/faqs` page with:
9
+
10
+ - **`PageLayout` `TitleBlock`** — owns the `<h1>` (title + subtitle), keeping `FaqSection` headings at `<h2>`/`<h3>` for correct SEO outline
11
+ - **`PageShell`** — optional standalone `<main>` container (disable via `shell={false}` when the host layout already provides one)
12
+ - **`FaqSection`** — receives SSR-hydrated `initialFaqs` to skip its client self-fetch, or omit for self-fetching embed mode
13
+ - **Back button** — follows the same `{ label, href } | false` pattern as `LegalDocumentPage` / `DevSectionPage`
14
+
15
+ ### `FaqDocumentPageProps`
16
+
17
+ | Prop | Type | Default | Description |
18
+ |---|---|---|---|
19
+ | `title` | `string` | `'Frequently Asked Questions'` | Page `<h1>` text |
20
+ | `subtitle` | `string` | — | Subtitle beneath the title |
21
+ | `backButton` | `{ label?, href? } \| false` | `{ label: 'Back to home', href: '/' }` | Back nav; `false` hides it |
22
+ | `shell` | `boolean` | `true` | Wrap with `PageShell`; set `false` when host owns `<main>` |
23
+ | `initialFaqs` | `Faq[]` | — | SSR-resolved FAQs; omit for client self-fetch |
24
+ | `emitJsonLd` | `boolean` | `false` | Emit `FAQPage` schema.org JSON-LD |
25
+ | `jsonLd` | `FaqSchemaOptions` | — | JSON-LD name/description/url overrides |
26
+ | `apiBaseUrl` | `string` | — | Base URL for `/api/faqs` (reverse-proxy embedders) |
27
+ | `entityType` / `entityId` | `string / number` | — | Optional entity scoping |
28
+ | `minResults` | `number` | — | Minimum FAQ count before rendering |
29
+
30
+ ## Usage Example
31
+
32
+ **Standalone page (SSR, shell on):**
33
+
34
+ ```typescript
35
+ // app/faqs/page.tsx
36
+ import { FaqDocumentPage } from '@openframe-oss-lib/components/faq';
37
+ import { fetchFaqs } from '@/lib/api';
38
+
39
+ export default async function FaqsPage() {
40
+ const initialFaqs = await fetchFaqs({ platform: 'acme' });
41
+
42
+ return (
43
+ <FaqDocumentPage
44
+ title="Help Center"
45
+ subtitle="Find answers to common questions"
46
+ initialFaqs={initialFaqs}
47
+ emitJsonLd
48
+ jsonLd={{ url: 'https://acme.com/faqs' }}
49
+ />
50
+ );
51
+ }
52
+ ```
53
+
54
+ **Embedded inside host layout (shell off, no back button):**
55
+
56
+ ```typescript
57
+ <FaqDocumentPage
58
+ shell={false}
59
+ backButton={false}
60
+ apiBaseUrl="https://api.acme.com"
61
+ entityType="product"
62
+ entityId={42}
63
+ />
64
+ ```
65
+
66
+ ## Source
67
+
68
+ [`faq-document-page.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/faq-document-page.tsx)
@@ -0,0 +1,55 @@
1
+ <!-- source-hash: b59367c69f5c5d87cc41d5f3c3c747da -->
2
+ Renders a grouped, deep-linkable FAQ section with category jump-navigation, scroll-spy active states, hash-based accordion expansion, and optional JSON-LD schema emission.
3
+
4
+ ## Key Components
5
+
6
+ ### `FaqSection` (default export)
7
+ The top-level client component that fetches FAQ data via `useSelfFetch`, groups results by section, and renders either a flat or grouped accordion layout depending on whether multiple categories exist.
8
+
9
+ **Props (`FaqSectionProps`):**
10
+
11
+ | Prop | Type | Description |
12
+ |---|---|---|
13
+ | `initialFaqs` | `Faq[]` | SSR hydration seed — skips first client fetch |
14
+ | `entityType` / `entityId` | `string` / `number\|string` | Scopes the `/api/faqs` request to a specific entity |
15
+ | `heading` | `ReactNode \| null` | Custom heading; `null` = no heading (host owns `<h1>`) |
16
+ | `emitJsonLd` | `boolean` | Injects FAQPage `schema.org` JSON-LD `<script>` |
17
+ | `jsonLd` | `FaqSchemaOptions` | Overrides for JSON-LD `name`/`description`/`url` |
18
+ | `minResults` | `number` | Maps to `?count=` query param |
19
+ | `apiBaseUrl` | `string` | Fetch-URL prefix for third-party embeds/proxies |
20
+
21
+ ### `GroupedFaqList` (internal)
22
+ Renders category jump-nav pills (`<a href="#slug">`) above stacked accordion sections. Includes:
23
+ - **Scroll-spy** via `IntersectionObserver` — highlights the pill for the section in view
24
+ - **Hash dispatch** — item hashes (`#faq-item-<id>`) auto-expand the cited accordion row; section hashes (`#faq-<slug>`) activate the matching pill
25
+ - `useScrollToHash` with sticky-header offset compensation
26
+
27
+ ### `groupFaqsBySection` (internal)
28
+ Pure function that groups `Faq[]` into `FaqGroup[]` ordered by first-seen display order. Uncategorized items (blank/missing `section`) sink to the end.
29
+
30
+ ### `buildFaqsUrl` (internal)
31
+ Composes the `/api/faqs` fetch URL via `buildSuggestionUrl`, compatible with `apiBaseUrl`, `entityType`, `entityId`, and `minResults`.
32
+
33
+ ## Usage Example
34
+
35
+ ```typescript
36
+ // Server component passes SSR-fetched FAQs; client skips re-fetch
37
+ import { FaqSection } from '@openframe-oss-lib/components'
38
+
39
+ export default async function SupportPage() {
40
+ const faqs = await fetchFaqsForEntity('product', 42)
41
+
42
+ return (
43
+ <FaqSection
44
+ initialFaqs={faqs}
45
+ entityType="product"
46
+ entityId={42}
47
+ emitJsonLd
48
+ jsonLd={{ name: 'Product FAQs', url: 'https://example.com/support' }}
49
+ minResults={10}
50
+ />
51
+ )
52
+ }
53
+ ```
54
+
55
+ > **Source:** [`faq-section.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/faq-section.tsx)
@@ -0,0 +1,29 @@
1
+ <!-- source-hash: f21bd805bd5c6f7a4aa946b0f56c688e -->
2
+ Re-exports the client-side FAQ UI components (`FaqSection` and `FaqDocumentPage`) from the `components/faq` subpath barrel, explicitly excluding server-only JSON-LD utilities to preserve `"use client"` bundle safety.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |--------|------|-------------|
8
+ | `FaqSection` | Component | Client-side FAQ accordion/section UI component |
9
+ | `FaqSectionProps` | Type | Props interface for `FaqSection` |
10
+ | `FaqDocumentPage` | Component | Full-page FAQ document layout component |
11
+ | `FaqDocumentPageProps` | Type | Props interface for `FaqDocumentPage` |
12
+
13
+ > **Not exported here:** `baseFaqSchema` and `buildFaqJsonLdFromFaqs` — these are server-safe utilities intentionally excluded from this client bundle. Import them from the dedicated server subpath instead.
14
+
15
+ ## Usage Example
16
+
17
+ ```typescript
18
+ // ✅ Client Component — import from the client subpath
19
+ import { FaqSection, FaqDocumentPage } from '@flamingo-stack/openframe-oss-lib/components/faq'
20
+
21
+ // ✅ Server Component — import JSON-LD builder from the server-safe subpath
22
+ import { buildFaqJsonLdFromFaqs } from '@flamingo-stack/openframe-oss-lib/components/faq/json-ld'
23
+ ```
24
+
25
+ ## Notes
26
+
27
+ - This barrel is compiled by tsup with a `"use client"` banner, making it safe for React client component trees.
28
+ - Server Components **must not** import JSON-LD builders from this subpath — use `./components/faq/json-ld` as wired in `tsup.config.ts` and exposed via `package.json#exports`.
29
+ - See [`tsup.config.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/tsup.config.ts) for the server/universal entry block configuration.
@@ -0,0 +1,48 @@
1
+ <!-- source-hash: a1dee0a9eb92d427adbd583bf0d77420 -->
2
+ Utility for building [Schema.org FAQPage](https://schema.org/FAQPage) JSON-LD structured data from FAQ entries. Designed as a pure, framework-free module safe for use in React Server Components.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `FaqSchemaOptions` | Interface | Optional branding overrides: `name`, `description`, `url` |
9
+ | `baseFaqSchema` | Function | Returns base `FAQPage` schema object without `mainEntity` |
10
+ | `buildFaqJsonLdFromFaqs` | Function | Builds complete FAQ JSON-LD from a `Faq[]` array |
11
+
12
+ ## Usage Example
13
+
14
+ ```typescript
15
+ import { buildFaqJsonLdFromFaqs } from 'openframe-oss-lib/components/faq'
16
+
17
+ const faqs = [
18
+ { question: 'What is OpenFrame?', answer: 'A unified MSP platform.' },
19
+ { question: 'Is it open source?', answer: 'Yes.' },
20
+ ]
21
+
22
+ const jsonLd = buildFaqJsonLdFromFaqs(faqs, {
23
+ name: 'OpenFrame FAQ',
24
+ description: 'Common questions about the OpenFrame platform.',
25
+ url: 'https://openframe.ai/faq',
26
+ })
27
+
28
+ // In a Next.js Server Component:
29
+ export default function FaqPage() {
30
+ return (
31
+ <>
32
+ <script
33
+ type="application/ld+json"
34
+ dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
35
+ />
36
+ {/* ... */}
37
+ </>
38
+ )
39
+ }
40
+ ```
41
+
42
+ ## Notes
43
+
44
+ - **Server Component safe** — no React or browser dependencies. Import via the `./components/faq` subpath export only. Avoid the root `./components` barrel (`"use client"`) to prevent pulling the client graph into the server bundle.
45
+ - Defaults to `"Frequently Asked Questions"` / `"Answers to common questions."` when no `FaqSchemaOptions` are provided.
46
+ - The `url` field is omitted from the schema output when not supplied.
47
+
48
+ **Source:** [`src/components/faq/json-ld.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/components/faq/json-ld.ts)
@@ -1,44 +1,52 @@
1
- <!-- source-hash: 9a66a790bb4e14efee7ac5e9ffc0cfb8 -->
2
- A generic, reusable React component for managing arrays of objects with inline add, edit, remove, and multi-line paste support. Supports both immediate and deferred (save-gated) change modes.
1
+ <!-- source-hash: f65d2f7c16e2d70cc404f49cf8a55c51 -->
2
+ A generic, reusable React component for managing ordered lists of structured objects, supporting inline editing, item removal, multi-line paste, and optional deferred saves.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `ArrayEntryManager<T>`
7
- A generic client component that renders a labeled list of editable input entries backed by a typed array.
8
-
9
- **Props:**
6
+ ### `ArrayEntryManagerProps<T>`
10
7
 
11
8
  | Prop | Type | Description |
12
- |------|------|-------------|
13
- | `title` | `ReactNode` | Section label; supports strings or badge components |
14
- | `items` | `T[]` | Array of objects to manage |
15
- | `onChange` | `(items: T[]) => void` | Called on change (immediate) or save (deferred) |
9
+ |---|---|---|
10
+ | `title` | `ReactNode` | Section header; supports strings or badge elements |
11
+ | `items` | `T[]` | Array of items to manage |
12
+ | `onChange` | `(items: T[]) => void` | Called when items change (immediately or on save) |
16
13
  | `fieldKey` | `keyof T` | Object key to bind each input to |
17
- | `requireSave` | `boolean` | When `true`, buffers edits locally until "Save" is clicked |
14
+ | `placeholder` | `string` | Input placeholder text |
15
+ | `emptyMessage` | `string` | Text shown when the list is empty |
16
+ | `addButtonText` | `string` | Label for the add button |
17
+ | `requireSave` | `boolean` | Enables draft mode — defers `onChange` until Save is clicked |
18
18
  | `onDirtyChange` | `(isDirty: boolean) => void` | Notifies parent of unsaved changes |
19
- | `renderLabel` | `(item: T, index: number) => ReactNode` | Custom renderer above each input |
20
- | `isSaving` | `boolean` | Shows spinner on the save button during async operations |
19
+ | `renderLabel` | `(item: T, index: number) => ReactNode` | Custom per-entry label or badge renderer |
20
+ | `isSaving` | `boolean` | Shows spinner on the Save button during async operations |
21
+
22
+ ### `ArrayEntryManager<T>` (Component)
21
23
 
22
- **Behaviors:**
23
- - **Draft mode** (`requireSave=true`): edits are buffered in local state; `onChange` fires only on explicit save
24
- - **Immediate mode** (`requireSave=false`): every edit calls `onChange` directly
25
- - **Multi-line paste**: pasting newline-separated values auto-creates multiple entries
26
- - **Add at top**: new items are prepended for better UX
24
+ - **Draft mode** (`requireSave=true`): maintains local `draftItems` state and syncs to parent only on explicit save, preventing mid-edit prop conflicts.
25
+ - **Multi-line paste**: splits clipboard text on newlines and inserts each line as a separate entry starting at the pasted position.
26
+ - **Add at top**: new entries are prepended for faster access.
27
27
 
28
28
  ## Usage Example
29
29
 
30
30
  ```typescript
31
- <ArrayEntryManager<{ github_release_url: string }>
32
- title="Release URLs"
31
+ import { ArrayEntryManager } from './array-entry-manager';
32
+
33
+ interface ReleaseUrl {
34
+ github_release_url: string;
35
+ }
36
+
37
+ <ArrayEntryManager<ReleaseUrl>
38
+ title="GitHub Release URLs"
33
39
  items={releaseUrls}
34
40
  onChange={setReleaseUrls}
35
41
  fieldKey="github_release_url"
36
42
  placeholder="https://github.com/org/repo/releases/tag/v1.0.0"
37
- emptyMessage="No release URLs configured."
43
+ emptyMessage="No release URLs added yet."
38
44
  addButtonText="Add URL"
45
+ requireSave
39
46
  saveButtonText="Save URLs"
40
- requireSave={true}
41
- onDirtyChange={(dirty) => setHasUnsavedChanges(dirty)}
42
47
  isSaving={isSaving}
48
+ onDirtyChange={(dirty) => setHasUnsavedChanges(dirty)}
43
49
  />
44
- ```
50
+ ```
51
+
52
+ **Source:** [`array-entry-manager.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/array-entry-manager.tsx)
@@ -1,20 +1,26 @@
1
- <!-- source-hash: 440c53934ab651211436b1edf3ea4fe0 -->
2
- A React component that renders a list of authentication provider buttons with configurable layout and divider options.
1
+ <!-- source-hash: d7253522e7ee7bae898c156797543da4 -->
2
+ Renders a list of SSO provider buttons with optional divider, supporting vertical and horizontal layouts. Filters and maps enabled providers to `ProviderButton` components with built-in error handling.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`SSOConfigStatus`** - Interface defining provider configuration with enabled status and optional client ID
7
- - **`AuthProvidersList`** - Main component that renders filtered provider buttons with error handling
8
- - **`ProviderButton`** - Imported component for individual provider buttons
9
-
10
- ## Properties
11
-
12
- - `enabledProviders` - Array of SSO provider configurations
13
- - `onProviderClick` - Async callback for handling provider authentication
14
- - `loading` - Optional loading state that disables all buttons
15
- - `showDivider` - Toggle for divider display (default: true)
16
- - `dividerText` - Custom divider text (default: "or")
17
- - `orientation` - Layout direction: vertical or horizontal (default: vertical)
6
+ ### `SSOConfigStatus` (exported interface)
7
+ | Property | Type | Description |
8
+ |---|---|---|
9
+ | `provider` | `string` | Provider identifier (e.g. `"google"`, `"microsoft"`) |
10
+ | `enabled` | `boolean` | Whether this provider should be rendered |
11
+ | `clientId` | `string?` | Optional OAuth client ID |
12
+
13
+ ### `AuthProvidersList` (exported component)
14
+ | Prop | Type | Default | Description |
15
+ |---|---|---|---|
16
+ | `enabledProviders` | `SSOConfigStatus[]` | | List of SSO provider configs |
17
+ | `onProviderClick` | `(provider: string) => Promise<void>` | — | Auth callback per provider |
18
+ | `loading` | `boolean` | `false` | Disables all buttons while loading |
19
+ | `showDivider` | `boolean` | `true` | Renders an `"or"` divider above the list |
20
+ | `dividerText` | `string` | `"or"` | Custom divider label |
21
+ | `orientation` | `'vertical' \| 'horizontal'` | `'vertical'` | Layout direction |
22
+
23
+ Returns `null` if `enabledProviders` is empty. Errors thrown by `onProviderClick` are caught and logged without crashing the UI.
18
24
 
19
25
  ## Usage Example
20
26
 
@@ -22,26 +28,21 @@ A React component that renders a list of authentication provider buttons with co
22
28
  import { AuthProvidersList, SSOConfigStatus } from './auth-providers-list';
23
29
 
24
30
  const providers: SSOConfigStatus[] = [
25
- { provider: 'google', enabled: true, clientId: 'google-client-id' },
26
- { provider: 'github', enabled: true },
27
- { provider: 'microsoft', enabled: false }
31
+ { provider: 'google', enabled: true, clientId: 'abc123' },
32
+ { provider: 'microsoft', enabled: true, clientId: 'def456' },
33
+ { provider: 'slack', enabled: false },
28
34
  ];
29
35
 
30
- export function LoginForm() {
31
- const handleAuth = async (provider: string) => {
32
- // Implement your auth logic (OAuth redirect, etc.)
33
- window.location.href = `/auth/${provider}`;
34
- };
35
-
36
- return (
37
- <AuthProvidersList
38
- enabledProviders={providers}
39
- onProviderClick={handleAuth}
40
- orientation="horizontal"
41
- dividerText="or continue with"
42
- />
43
- );
36
+ async function handleSignIn(provider: string) {
37
+ await signInWithProvider(provider); // your auth logic
44
38
  }
39
+
40
+ <AuthProvidersList
41
+ enabledProviders={providers}
42
+ onProviderClick={handleSignIn}
43
+ orientation="horizontal"
44
+ dividerText="or continue with"
45
+ />
45
46
  ```
46
47
 
47
- The component automatically filters out disabled providers and includes error handling for failed authentication attempts.
48
+ **Source:** [`auth-providers-list.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/auth-providers-list.tsx)
@@ -0,0 +1,43 @@
1
+ <!-- source-hash: 91af97ee03e3f4fa98e259bed1e212df -->
2
+ Builds the captions API URL for a video entity, returning the HTTPS path to the `/api/captions/[entityType]/[entityId]` endpoint that serves VTT content for iOS native fullscreen subtitles.
3
+
4
+ ## Key Components
5
+
6
+ ### `getCaptionsUrl(entityType, entityId, srtContent?)`
7
+
8
+ | Parameter | Type | Description |
9
+ |---|---|---|
10
+ | `entityType` | `string` | Entity-type discriminator for the reverse-proxied captions route |
11
+ | `entityId` | `string \| number` | Unique identifier of the video entity |
12
+ | `srtContent` | `string \| null \| undefined` | Raw SRT subtitle content; returns `undefined` if absent |
13
+
14
+ **Returns:** `string | undefined` — A cache-busted URL of the form `/api/captions/{entityType}/{entityId}?v={hash}`, or `undefined` when no SRT content exists.
15
+
16
+ **Cache-busting strategy:** The `?v=` hash is derived from the SRT content length combined with the first 8 non-whitespace characters. This forces iOS Safari to re-fetch the VTT track when subtitles are regenerated, working around Safari's aggressive `<track>` `src` caching.
17
+
18
+ ## Usage Example
19
+
20
+ ```typescript
21
+ import { getCaptionsUrl } from './captions-url'
22
+
23
+ // Returns a cache-busted captions URL
24
+ const url = getCaptionsUrl('ticket', 42, 'WEBVTT\n\n1\n00:00:01...')
25
+ // → '/api/captions/ticket/42?v=23-WEBVTT'
26
+
27
+ // Returns undefined when no subtitles exist
28
+ const noUrl = getCaptionsUrl('ticket', 42, null)
29
+ // → undefined
30
+
31
+ // Use in a <track> element
32
+ const trackSrc = getCaptionsUrl(entityType, entityId, video.srt_content)
33
+ if (trackSrc) {
34
+ // <track kind="subtitles" src={trackSrc} default />
35
+ }
36
+ ```
37
+
38
+ ## Notes
39
+
40
+ - Ported from the Flamingo hub's `lib/utils/captions-url.ts`; the hub's `VideoEnabledEntityType` enum is widened to `string` so embedders can pass any entity-type their proxied route expects.
41
+ - VTT conversion from SRT happens server-side at the `/api/captions/...` endpoint, not in this utility.
42
+
43
+ **Source:** [`lib/captions-url.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/lib/captions-url.ts)
@@ -0,0 +1,48 @@
1
+ <!-- source-hash: a95a8735a6e13b8d71845dddc72be3e2 -->
2
+ Horizontal card-strip engine that serves as a single source of truth for marquee/chevron/seam/measure behavior across all strip surfaces. Supports two input modes: render-prop (`items` + `renderCard`) for full control, and children (organic JSX) for zero-registration card composition.
3
+
4
+ ## Key Components
5
+
6
+ - **`CardsStrip<T>`** — Primary export. Generic component accepting either render-prop mode (Mode A) or children mode (Mode B).
7
+ - **`ManagedCell`** — Internal cell wrapper for children mode; handles fixed widths, hover/keyboard activation, and clone a11y (`aria-hidden` + focus suppression via `useSuppressCloneFocus`).
8
+ - **`CardStripRenderCtx`** — Context interface passed to `renderCard`; exposes activation callbacks, clone flag, touch/mobile state, and a shared near-viewport mount gate.
9
+ - **`CardsStripProps<T>`** — XOR-discriminated union of `CardsStripEngineProps & (RenderCardMode<T> | ChildrenMode)`.
10
+ - **`STRIP_CELL_MAX_WIDTH`** — Exported constant (`'90vw'`) shared with card components for consistent sizing.
11
+
12
+ ## Usage Example
13
+
14
+ **Mode A — render-prop:**
15
+
16
+ ```typescript
17
+ <CardsStrip
18
+ items={bites}
19
+ itemKey={(item) => item.id}
20
+ renderCard={(item, ctx) => (
21
+ <VideoBiteCard key={ctx.cardKey} bite={item} ctx={ctx} />
22
+ )}
23
+ title="Video Bites"
24
+ autoScrollSpeed={60}
25
+ />
26
+ ```
27
+
28
+ **Mode B — children (organic):**
29
+
30
+ ```typescript
31
+ <CardsStrip
32
+ title="Featured Tools"
33
+ cardWidthDesktop={400}
34
+ cardWidthMobile={320}
35
+ autoScroll={false}
36
+ showChevrons
37
+ >
38
+ {tools.map((tool) => (
39
+ <ToolCard key={tool.id} tool={tool} />
40
+ ))}
41
+ </CardsStrip>
42
+ ```
43
+
44
+ > **Children mode warning:** Pass an array of elements — a single `<Fragment>` wrapping all cards becomes one giant cell. Effects and DOM IDs in children must be clone-safe when `autoScroll` is enabled.
45
+
46
+ ## Source
47
+
48
+ [`cards-strip.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/cards-strip.tsx)