@flamingo-stack/openframe-frontend-core 0.0.481 → 0.0.482-snapshot.20260726003127

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 (841) hide show
  1. package/dist/{chunk-FP4H6Y5O.js → chunk-3VMCJK7A.js} +3 -3
  2. package/dist/{chunk-OWMLWJQY.cjs → chunk-5YFXUXOV.cjs} +2432 -1502
  3. package/dist/chunk-5YFXUXOV.cjs.map +1 -0
  4. package/dist/{chunk-4SMRQ4SN.js → chunk-6U7HIZSW.js} +3 -3
  5. package/dist/{chunk-MMCBQJKE.cjs → chunk-AZZQLEKY.cjs} +11 -11
  6. package/dist/{chunk-MMCBQJKE.cjs.map → chunk-AZZQLEKY.cjs.map} +1 -1
  7. package/dist/{chunk-OZJN54R5.cjs → chunk-CG5OX6WF.cjs} +37 -37
  8. package/dist/{chunk-OZJN54R5.cjs.map → chunk-CG5OX6WF.cjs.map} +1 -1
  9. package/dist/{chunk-LK623WCC.cjs → chunk-DYLIBE6I.cjs} +9 -9
  10. package/dist/{chunk-LK623WCC.cjs.map → chunk-DYLIBE6I.cjs.map} +1 -1
  11. package/dist/{chunk-AN47EIIJ.cjs → chunk-FEQW64Q5.cjs} +59 -59
  12. package/dist/{chunk-AN47EIIJ.cjs.map → chunk-FEQW64Q5.cjs.map} +1 -1
  13. package/dist/{chunk-66BNAFO6.js → chunk-FIRIO2NB.js} +4 -4
  14. package/dist/{chunk-MGKCS6KS.js → chunk-GWJNTDXR.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-DEHZ5CTC.js → chunk-HAJQWSSU.js} +2 -2
  18. package/dist/{chunk-JUJY3HQS.cjs → chunk-JBC5DAI5.cjs} +19 -19
  19. package/dist/{chunk-JUJY3HQS.cjs.map → chunk-JBC5DAI5.cjs.map} +1 -1
  20. package/dist/{chunk-VTSRDC4W.js → chunk-JKRX3JHT.js} +2 -2
  21. package/dist/{chunk-M7O74OWG.cjs → chunk-KDXEKD3K.cjs} +31 -31
  22. package/dist/{chunk-M7O74OWG.cjs.map → chunk-KDXEKD3K.cjs.map} +1 -1
  23. package/dist/{chunk-Y3Y2DLNO.js → chunk-LT2PU6SK.js} +3 -3
  24. package/dist/{chunk-R5WJJL4V.js → chunk-RDCAJDX7.js} +5 -5
  25. package/dist/{chunk-N2JZ33V7.cjs → chunk-RFMH6MLM.cjs} +26 -26
  26. package/dist/{chunk-N2JZ33V7.cjs.map → chunk-RFMH6MLM.cjs.map} +1 -1
  27. package/dist/{chunk-BBUEY73L.js → chunk-RJ4OJWT5.js} +6269 -5339
  28. package/dist/chunk-RJ4OJWT5.js.map +1 -0
  29. package/dist/{chunk-G3UN2DXU.cjs → chunk-STYA77PH.cjs} +20 -4
  30. package/dist/chunk-STYA77PH.cjs.map +1 -0
  31. package/dist/{chunk-PSPWT2Q5.js → chunk-T2S7A5IU.js} +4 -4
  32. package/dist/{chunk-INDFIVDV.cjs → chunk-UAFJX7YV.cjs} +12 -12
  33. package/dist/{chunk-INDFIVDV.cjs.map → chunk-UAFJX7YV.cjs.map} +1 -1
  34. package/dist/{chunk-H6DFCF44.cjs → chunk-UO7TF67V.cjs} +82 -82
  35. package/dist/{chunk-H6DFCF44.cjs.map → chunk-UO7TF67V.cjs.map} +1 -1
  36. package/dist/{chunk-LNKWY74S.cjs → chunk-UTIW7O7R.cjs} +5 -5
  37. package/dist/{chunk-LNKWY74S.cjs.map → chunk-UTIW7O7R.cjs.map} +1 -1
  38. package/dist/{chunk-2DIOV7BR.js → chunk-WIITTL5I.js} +4 -4
  39. package/dist/{chunk-ZRANZNEA.js → chunk-Y37XYIWA.js} +2 -2
  40. package/dist/{chunk-ZV6E3U3C.cjs → chunk-ZN56E4FX.cjs} +30 -30
  41. package/dist/{chunk-ZV6E3U3C.cjs.map → chunk-ZN56E4FX.cjs.map} +1 -1
  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/marketing.d.ts +11 -1
  105. package/dist/types/marketing.d.ts.map +1 -1
  106. package/dist/types/supabase.d.ts +80 -0
  107. package/dist/types/supabase.d.ts.map +1 -1
  108. package/dist/types/video-processing.d.ts +1 -1
  109. package/dist/types/video-processing.d.ts.map +1 -1
  110. package/dist/utils/announcement-storage.d.ts +1 -1
  111. package/dist/utils/announcement-storage.d.ts.map +1 -1
  112. package/dist/utils/dismiss-cookie.d.ts +27 -0
  113. package/dist/utils/dismiss-cookie.d.ts.map +1 -0
  114. package/dist/utils/dismissal-storage.d.ts +25 -0
  115. package/dist/utils/dismissal-storage.d.ts.map +1 -0
  116. package/dist/utils/index.cjs +48 -10
  117. package/dist/utils/index.cjs.map +1 -1
  118. package/dist/utils/index.d.ts +2 -0
  119. package/dist/utils/index.d.ts.map +1 -1
  120. package/dist/utils/index.js +41 -11
  121. package/dist/utils/index.js.map +1 -1
  122. package/package.json +8 -2
  123. package/src/.index.md +39 -32
  124. package/src/.platform-domains.md +65 -0
  125. package/src/assets/.fae-avatar.md +33 -0
  126. package/src/assets/.index.md +15 -9
  127. package/src/components/.agent-mark.md +31 -0
  128. package/src/components/.announcement-bar.md +47 -35
  129. package/src/components/.calendar.md +19 -15
  130. package/src/components/.categories-cart.md +34 -30
  131. package/src/components/.category-card.md +33 -33
  132. package/src/components/.chart.md +38 -40
  133. package/src/components/.command.md +47 -23
  134. package/src/components/.comment-card.md +31 -26
  135. package/src/components/.content-loading-container.md +45 -20
  136. package/src/components/.context-menu.md +45 -31
  137. package/src/components/.date-time-picker.md +36 -30
  138. package/src/components/.empty-state.md +31 -31
  139. package/src/components/.faq-accordion.md +20 -30
  140. package/src/components/.filter-chip.md +36 -33
  141. package/src/components/.footer-waitlist-button.md +27 -21
  142. package/src/components/.footer.md +39 -24
  143. package/src/components/.form.md +32 -20
  144. package/src/components/.hero-image-uploader.md +35 -31
  145. package/src/components/.icon-display.md +53 -0
  146. package/src/components/.image-cropper.md +34 -33
  147. package/src/components/.index.md +25 -29
  148. package/src/components/.logs-list.md +27 -23
  149. package/src/components/.media-carousel.md +47 -26
  150. package/src/components/.metric-value.md +27 -24
  151. package/src/components/.msp-display.md +29 -23
  152. package/src/components/.open-source-features.md +23 -26
  153. package/src/components/.pagination.md +44 -39
  154. package/src/components/.persistent-filter-controls.md +61 -28
  155. package/src/components/.pricing-display.md +34 -33
  156. package/src/components/.results-count.md +33 -20
  157. package/src/components/.smooth-accordion.md +24 -20
  158. package/src/components/.social-icon-row.md +33 -21
  159. package/src/components/.sonner.md +40 -25
  160. package/src/components/.steps.md +39 -25
  161. package/src/components/.tool-icon.md +34 -21
  162. package/src/components/.unified-filter-logic.md +32 -36
  163. package/src/components/.user-display.md +33 -28
  164. package/src/components/.user-summary-stub.md +40 -33
  165. package/src/components/.vendor-display-button.md +17 -15
  166. package/src/components/.vendor-icon.md +17 -25
  167. package/src/components/.vendor-tag.md +39 -34
  168. package/src/components/.why-it-matters.md +15 -11
  169. package/src/components/.yes-no-display.md +36 -31
  170. package/src/components/authors/.author-detail-view.md +50 -0
  171. package/src/components/case-studies/.index.md +26 -0
  172. package/src/components/case-studies/.share-experience-section.md +45 -0
  173. package/src/components/chat/.approval-batch-message.md +48 -33
  174. package/src/components/chat/.approval-request-message.md +37 -26
  175. package/src/components/chat/.chat-archive-page.md +56 -0
  176. package/src/components/chat/.chat-attachment-bar.md +32 -40
  177. package/src/components/chat/.chat-composer.md +43 -0
  178. package/src/components/chat/.chat-container.md +41 -25
  179. package/src/components/chat/.chat-context-memory-bar.md +53 -0
  180. package/src/components/chat/.chat-context-picker.md +89 -0
  181. package/src/components/chat/.chat-header-icon-button.md +43 -0
  182. package/src/components/chat/.chat-header-search-field.md +51 -0
  183. package/src/components/chat/.chat-input.md +63 -30
  184. package/src/components/chat/.chat-list-empty-state.md +44 -0
  185. package/src/components/chat/.chat-message-enhanced.md +29 -31
  186. package/src/components/chat/.chat-message-list.md +34 -44
  187. package/src/components/chat/.chat-message-row.md +56 -0
  188. package/src/components/chat/.chat-message-skeleton.md +32 -26
  189. package/src/components/chat/.chat-panel-header-mobile.md +46 -0
  190. package/src/components/chat/.chat-panel-header.md +80 -0
  191. package/src/components/chat/.chat-sidebar-skeleton.md +31 -30
  192. package/src/components/chat/.chat-sidebar.md +36 -29
  193. package/src/components/chat/.chat-ticket-list.md +38 -23
  194. package/src/components/chat/.chat-typing-indicator.md +37 -19
  195. package/src/components/chat/.context-compaction-display.md +19 -15
  196. package/src/components/chat/.context-items-list.md +57 -0
  197. package/src/components/chat/.embeddable-chat.md +57 -66
  198. package/src/components/chat/.error-message-display.md +40 -22
  199. package/src/components/chat/.guide-mode-banner.md +41 -0
  200. package/src/components/chat/.guide-welcome.md +43 -0
  201. package/src/components/chat/.index.md +26 -21
  202. package/src/components/chat/.mingo-chat-history.md +63 -0
  203. package/src/components/chat/.mingo-chat-modals.md +44 -0
  204. package/src/components/chat/.mingo-history-rail.md +63 -0
  205. package/src/components/chat/.mingo-info-card.md +59 -0
  206. package/src/components/chat/.mingo-onboarding-card.md +21 -27
  207. package/src/components/chat/.mingo-welcome.md +60 -0
  208. package/src/components/chat/.model-display.md +33 -25
  209. package/src/components/chat/.msp-organization-card-skeleton.md +44 -0
  210. package/src/components/chat/.msp-organization-card.md +51 -0
  211. package/src/components/chat/.nav-link-anchor-via-runtime.md +36 -25
  212. package/src/components/chat/.quick-action-chip.md +60 -0
  213. package/src/components/chat/.quick-action-marquee.md +53 -0
  214. package/src/components/chat/.quick-action-wall.md +68 -0
  215. package/src/components/chat/.remark-mention-chips.md +41 -0
  216. package/src/components/chat/.slash-command-suggestions.md +30 -36
  217. package/src/components/chat/.source-action-button.md +28 -25
  218. package/src/components/chat/.tool-call-blocks.md +18 -30
  219. package/src/components/chat/.tool-execution-display.md +29 -34
  220. package/src/components/chat/entity-cards/.admin-content-card.md +29 -22
  221. package/src/components/chat/entity-cards/.blog-card.md +44 -33
  222. package/src/components/chat/entity-cards/.blog-image-placeholder.md +20 -18
  223. package/src/components/chat/entity-cards/.case-study-card.md +24 -33
  224. package/src/components/chat/entity-cards/.chat-ticket-item.md +39 -22
  225. package/src/components/chat/entity-cards/.customer-interview-card.md +29 -32
  226. package/src/components/chat/entity-cards/.data-room-doc-card.md +21 -22
  227. package/src/components/chat/entity-cards/.dispatch.md +41 -24
  228. package/src/components/chat/entity-cards/.entity-author-card.md +36 -33
  229. package/src/components/chat/entity-cards/.entity-portrait-card.md +47 -0
  230. package/src/components/chat/entity-cards/.generic-entity-card.md +26 -25
  231. package/src/components/chat/entity-cards/.github-activity-card.md +35 -41
  232. package/src/components/chat/entity-cards/.hubspot-ticket-card.md +22 -28
  233. package/src/components/chat/entity-cards/.index.md +33 -44
  234. package/src/components/chat/entity-cards/.investor-update-card.md +36 -25
  235. package/src/components/chat/entity-cards/.onboarding-guide-card.md +20 -29
  236. package/src/components/chat/entity-cards/.product-release-card-defaults.md +26 -19
  237. package/src/components/chat/entity-cards/.program-card.md +30 -33
  238. package/src/components/chat/entity-cards/.roadmap-card.md +40 -31
  239. package/src/components/chat/entity-cards/.roadmap-vote-button.md +33 -36
  240. package/src/components/chat/entity-cards/.slack-message-card.md +31 -32
  241. package/src/components/chat/entity-cards/.use-cover-image-fallback.md +47 -0
  242. package/src/components/chat/entity-cards/.use-entity-card-link.md +51 -0
  243. package/src/components/chat/entity-cards/.use-entity-card-placeholder.md +47 -0
  244. package/src/components/chat/entity-cards/.what-i-shipped-card.md +43 -0
  245. package/src/components/chat/hooks/.index.md +33 -30
  246. package/src/components/chat/hooks/.use-chat-card-item.md +30 -17
  247. package/src/components/chat/hooks/.use-chat-dialog-manager.md +59 -0
  248. package/src/components/chat/hooks/.use-chat-identity.md +37 -25
  249. package/src/components/chat/hooks/.use-chunk-catchup.md +53 -36
  250. package/src/components/chat/hooks/.use-empty-state-config.md +39 -0
  251. package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +65 -30
  252. package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
  253. package/src/components/chat/hooks/.use-nats-dialog-subscription.md +66 -50
  254. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +58 -31
  255. package/src/components/chat/hooks/.use-scripted-stream.md +46 -0
  256. package/src/components/chat/hooks/.use-slash-commands.md +32 -25
  257. package/src/components/chat/hooks/.use-sse-chat-adapter.md +32 -21
  258. package/src/components/chat/hooks/.use-unified-chat.md +45 -35
  259. package/src/components/chat/types/.api.types.md +49 -41
  260. package/src/components/chat/types/.chat.types.md +56 -34
  261. package/src/components/chat/types/.component.types.md +36 -36
  262. package/src/components/chat/types/.context-item.types.md +61 -0
  263. package/src/components/chat/types/.index.md +32 -17
  264. package/src/components/chat/types/.message.types.md +44 -45
  265. package/src/components/chat/types/.network.types.md +46 -46
  266. package/src/components/chat/types/.processing.types.md +49 -37
  267. package/src/components/chat/types/.unified-chat-state.types.md +41 -26
  268. package/src/components/chat/types/entities/.content-ref.md +20 -31
  269. package/src/components/chat/types/entities/.investor-update.md +14 -16
  270. package/src/components/chat/types/entities/.onboarding-guide.md +35 -34
  271. package/src/components/chat/types/entities/.program-types.md +55 -43
  272. package/src/components/chat/utils/.chip-action-class.md +17 -19
  273. package/src/components/chat/utils/.chip-styles.md +18 -18
  274. package/src/components/chat/utils/.chunk-parser.md +48 -37
  275. package/src/components/chat/utils/.compact-card-classes.md +33 -35
  276. package/src/components/chat/utils/.execute-navigation.md +49 -0
  277. package/src/components/chat/utils/.extract-incomplete-message-state.md +9 -12
  278. package/src/components/chat/utils/.history-merge.md +65 -0
  279. package/src/components/chat/utils/.icon-library.md +33 -31
  280. package/src/components/chat/utils/.icon-registry.md +44 -0
  281. package/src/components/chat/utils/.index.md +37 -33
  282. package/src/components/chat/utils/.is-cross-origin-url.md +26 -22
  283. package/src/components/chat/utils/.message-segment-accumulator.md +46 -25
  284. package/src/components/chat/utils/.nav-anchor-props.md +29 -34
  285. package/src/components/chat/utils/.nav-click-handler.md +29 -33
  286. package/src/components/chat/utils/.process-historical-messages.md +29 -33
  287. package/src/components/chat/utils/.scripted-stream.md +52 -0
  288. package/src/components/chat/utils/.source-row-cta.md +32 -31
  289. package/src/components/chat/utils/.tool-call-helpers.md +25 -17
  290. package/src/components/contact/.contact-form.md +24 -19
  291. package/src/components/docs/.doc-navigation-context.md +49 -0
  292. package/src/components/docs/.doc-viewer.md +64 -0
  293. package/src/components/docs/.docs-hub-page.md +49 -0
  294. package/src/components/docs/.index.md +51 -0
  295. package/src/components/docs/.skeletons.md +47 -0
  296. package/src/components/docs/.use-docs-resolve-link.md +61 -0
  297. package/src/components/docs/.use-document-tree.md +83 -0
  298. package/src/components/docs/.use-scroll-spy.md +58 -0
  299. package/src/components/embeds/.embed-container.md +45 -0
  300. package/src/components/embeds/.embed-iframe.md +51 -0
  301. package/src/components/embeds/.figma-embed.md +43 -0
  302. package/src/components/embeds/.file-download-card.md +47 -0
  303. package/src/components/embeds/.google-sheets-viewer.md +40 -0
  304. package/src/components/embeds/.index.md +58 -0
  305. package/src/components/embeds/.linkedin-embed-client.md +50 -0
  306. package/src/components/embeds/.markdown-image.md +40 -0
  307. package/src/components/embeds/.og-link-preview.md +54 -0
  308. package/src/components/embeds/.pdf-viewer.md +43 -0
  309. package/src/components/embeds/.reddit-embed-client.md +40 -0
  310. package/src/components/embeds/.rich-markdown-runtime.md +53 -0
  311. package/src/components/embeds/.twitter-embed-client.md +44 -0
  312. package/src/components/faq/.faq-document-page.md +68 -0
  313. package/src/components/faq/.faq-section.md +55 -0
  314. package/src/components/faq/.index.md +29 -0
  315. package/src/components/faq/.json-ld.md +48 -0
  316. package/src/components/features/.array-entry-manager.md +32 -24
  317. package/src/components/features/.auth-providers-list.md +33 -32
  318. package/src/components/features/.captions-url.md +43 -0
  319. package/src/components/features/.cards-strip.md +48 -0
  320. package/src/components/features/.changelog-manager.md +17 -20
  321. package/src/components/features/.command-box.md +11 -16
  322. package/src/components/features/.entity-summary-editor.md +20 -15
  323. package/src/components/features/.entity-tag-badges.md +43 -0
  324. package/src/components/features/.entity-video-section.md +31 -41
  325. package/src/components/features/.figma-prototype-viewer.md +55 -37
  326. package/src/components/features/.filters-dropdown.md +14 -13
  327. package/src/components/features/.highlight-config-section.md +19 -16
  328. package/src/components/features/.highlight-video-combined-section.md +28 -19
  329. package/src/components/features/.highlight-video-preview.md +13 -11
  330. package/src/components/features/.highlight-video-section.md +26 -22
  331. package/src/components/features/.index.md +40 -36
  332. package/src/components/features/.media-gallery-manager.md +37 -35
  333. package/src/components/features/.mux-origins.md +46 -0
  334. package/src/components/features/.og-editor-preview.md +29 -24
  335. package/src/components/features/.os-type-badge-group.md +26 -18
  336. package/src/components/features/.os-type-badge.md +41 -24
  337. package/src/components/features/.paths-display.md +42 -25
  338. package/src/components/features/.platform-badge.md +26 -17
  339. package/src/components/features/.policy-configuration-panel.md +33 -31
  340. package/src/components/features/.provider-button.md +29 -20
  341. package/src/components/features/.push-button-selector.md +39 -41
  342. package/src/components/features/.release-media-manager.md +41 -34
  343. package/src/components/features/.section-selector.md +27 -16
  344. package/src/components/features/.select-button.md +21 -32
  345. package/src/components/features/.seo-editor-preview.md +49 -36
  346. package/src/components/features/.social-links-manager.md +40 -18
  347. package/src/components/features/.start-with-openframe-button.md +30 -32
  348. package/src/components/features/.status-filter-component.md +29 -38
  349. package/src/components/features/.tags-selector.md +25 -29
  350. package/src/components/features/.transcript-summary-editor.md +24 -18
  351. package/src/components/features/.use-video-warmup.md +47 -0
  352. package/src/components/features/.video-bites-display.md +36 -37
  353. package/src/components/features/.video-bites-shared.md +44 -0
  354. package/src/components/features/.video-bites-strip.md +63 -0
  355. package/src/components/features/.video-center-badge.md +38 -0
  356. package/src/components/features/.video-ratio-tabs.md +38 -31
  357. package/src/components/features/.video-source-selector.md +24 -27
  358. package/src/components/features/.video.md +35 -27
  359. package/src/components/features/.waitlist-form.md +39 -33
  360. package/src/components/features/.warning-block.md +53 -0
  361. package/src/components/features/ai-enrich/.AIEnrichSection.md +24 -25
  362. package/src/components/features/ai-enrich/.AIRequiredBadge.md +22 -21
  363. package/src/components/features/ai-enrich/.AIStatusIndicator.md +42 -35
  364. package/src/components/features/ai-enrich/.AIWarningsSection.md +23 -20
  365. package/src/components/features/ai-enrich/.ConfidenceBadge.md +35 -20
  366. package/src/components/features/auth/.auth-benefits-panel.md +48 -0
  367. package/src/components/features/auth/.auth-branding.md +51 -0
  368. package/src/components/features/auth/.auth-shell.md +51 -0
  369. package/src/components/features/auth/.back-to-login-link.md +48 -0
  370. package/src/components/features/auth/.complete-account-form.md +45 -0
  371. package/src/components/features/auth/.create-organization-form.md +53 -0
  372. package/src/components/features/auth/.index.md +48 -0
  373. package/src/components/features/auth/.invite-link-invalid-modal.md +42 -0
  374. package/src/components/features/auth/.login-form.md +42 -0
  375. package/src/components/features/auth/.openframe-sso-login-form.md +46 -0
  376. package/src/components/features/auth/.openframe-sso-signup-form.md +51 -0
  377. package/src/components/features/auth/.password-reset-form.md +57 -0
  378. package/src/components/features/auth/.sso-auth-shell.md +35 -0
  379. package/src/components/features/auth/.sso-providers.md +42 -0
  380. package/src/components/features/auth/.terms-agreement-label.md +28 -0
  381. package/src/components/features/board/.board-column-header.md +24 -18
  382. package/src/components/features/board/.board-column.md +32 -32
  383. package/src/components/features/board/.board-ticket-approval.md +42 -0
  384. package/src/components/features/board/.board.md +38 -38
  385. package/src/components/features/board/.index.md +35 -38
  386. package/src/components/features/board/.ticket-card.md +33 -36
  387. package/src/components/features/board/.types.md +38 -31
  388. package/src/components/features/card-hit-layer.tsx +84 -0
  389. package/src/components/features/floating-walkthrough-video.tsx +891 -0
  390. package/src/components/features/index.ts +4 -0
  391. package/src/components/features/notifications/.approval-request-notification-tile.md +45 -0
  392. package/src/components/features/notifications/.index.md +35 -31
  393. package/src/components/features/notifications/.notification-drawer.md +32 -19
  394. package/src/components/features/notifications/.notification-popups.md +51 -0
  395. package/src/components/features/notifications/.notification-tile.md +43 -27
  396. package/src/components/features/notifications/.notifications-context.md +42 -45
  397. package/src/components/features/notifications/.types.md +51 -31
  398. package/src/components/features/ticket-status-config-list/.ticket-status-config-list.md +51 -0
  399. package/src/components/features/time-tracker/.index.md +48 -0
  400. package/src/components/features/time-tracker/.time-tracker-context.md +55 -0
  401. package/src/components/features/time-tracker/.time-tracker-header-button.md +51 -0
  402. package/src/components/features/time-tracker/.time-tracker-panel.md +58 -0
  403. package/src/components/features/time-tracker/.types.md +51 -0
  404. package/src/components/features/time-tracker/.use-tracker-clock.md +32 -0
  405. package/src/components/features/use-walkthrough-video.ts +70 -0
  406. package/src/components/features/video-bites-strip.tsx +46 -146
  407. package/src/components/features/video-center-badge.tsx +11 -2
  408. package/src/components/features/video-hover-preview.tsx +201 -0
  409. package/src/components/features/video.tsx +368 -73
  410. package/src/components/help-center-pages/.delivery-page.md +51 -0
  411. package/src/components/help-center-pages/.index.md +51 -0
  412. package/src/components/help-center-pages/.onboarding-guides-catalog-page.md +53 -0
  413. package/src/components/help-center-pages/.product-releases-list-page.md +51 -0
  414. package/src/components/help-center-pages/.roadmap-page.md +46 -0
  415. package/src/components/icons/.figma-icon.md +13 -7
  416. package/src/components/icons/.index.md +26 -22
  417. package/src/components/icons/.vendor-directory-icon.md +30 -18
  418. package/src/components/icons/.x-logo.md +26 -10
  419. package/src/components/icons-v2-generated/.index.md +30 -41
  420. package/src/components/icons-v2-generated/brand-logos/.index.md +25 -19
  421. package/src/components/icons-v2-generated/communication/.index.md +26 -30
  422. package/src/components/icons-v2-generated/logos/.flamingo-logo-icon.md +41 -0
  423. package/src/components/layout/.article-detail-layout.md +32 -21
  424. package/src/components/layout/.page-container.md +25 -23
  425. package/src/components/layout/.page-heading.md +48 -0
  426. package/src/components/layout/.page-layout.md +30 -25
  427. package/src/components/layout/.title-block.md +43 -24
  428. package/src/components/loading/.card-skeleton.md +28 -35
  429. package/src/components/loading/.category-card-skeleton.md +25 -23
  430. package/src/components/loading/.device-card-skeleton.md +22 -15
  431. package/src/components/loading/.margin-report-skeleton.md +30 -35
  432. package/src/components/loading/.openmsp-heartbeat.md +30 -32
  433. package/src/components/loading/.organization-card-skeleton.md +22 -25
  434. package/src/components/loading/.organization-icon-skeleton.md +39 -27
  435. package/src/components/loading/.page-layout-skeleton.md +50 -28
  436. package/src/components/loading/.unified-skeleton.md +37 -40
  437. package/src/components/loading/.users-grid-skeleton.md +19 -38
  438. package/src/components/navigation/.app-header.md +35 -28
  439. package/src/components/navigation/.app-layout-context.md +48 -0
  440. package/src/components/navigation/.app-layout-drawer.md +56 -0
  441. package/src/components/navigation/.app-layout.md +24 -23
  442. package/src/components/navigation/.header-mingo-button.md +46 -0
  443. package/src/components/navigation/.header-organization-filter.md +32 -18
  444. package/src/components/navigation/.header.md +24 -31
  445. package/src/components/navigation/.index.md +36 -50
  446. package/src/components/navigation/.mingo-ai-button.md +41 -0
  447. package/src/components/navigation/.mobile-burger-menu.md +29 -29
  448. package/src/components/navigation/.mobile-nav-panel.md +41 -49
  449. package/src/components/navigation/.multi-level-navigation.md +76 -0
  450. package/src/components/navigation/.navigation-sidebar-item.md +14 -14
  451. package/src/components/navigation/.navigation-sidebar.md +30 -23
  452. package/src/components/navigation/.sliding-sidebar.md +30 -25
  453. package/src/components/navigation/.sticky-section-nav.md +23 -21
  454. package/src/components/onboarding-guides/.index.md +40 -0
  455. package/src/components/onboarding-guides/.onboarding-guide-detail-view.md +55 -0
  456. package/src/components/onboarding-guides/.onboarding-guides-catalog-skeleton.md +33 -0
  457. package/src/components/onboarding-guides/.onboarding-guides-catalog-view.md +50 -0
  458. package/src/components/onboarding-guides/hooks/.use-onboarding-guides.md +54 -0
  459. package/src/components/platform/.CveLink.md +28 -17
  460. package/src/components/platform/.ScriptArguments.md +18 -23
  461. package/src/components/platform/.ScriptInfoSection.md +27 -21
  462. package/src/components/platform/.ShellTypeBadge.md +34 -18
  463. package/src/components/platform/.SoftwareInfo.md +23 -21
  464. package/src/components/platform/.ToolBadge.md +18 -16
  465. package/src/components/profile/.ProfileLoadingSkeleton.md +24 -23
  466. package/src/components/related-content/.index.md +41 -0
  467. package/src/components/related-content/.related-content-section.md +62 -0
  468. package/src/components/shared/.article-author-byline.md +56 -0
  469. package/src/components/shared/.detail-page-skeleton.md +32 -43
  470. package/src/components/shared/.media-gallery-strip.md +43 -0
  471. package/src/components/shared/delivery/.delivery-lists.md +20 -19
  472. package/src/components/shared/delivery/.delivery-row.md +24 -20
  473. package/src/components/shared/delivery/.delivery-table.md +20 -22
  474. package/src/components/shared/dev-section/.dev-card-row.md +28 -36
  475. package/src/components/shared/dev-section/.dev-section-page.md +36 -25
  476. package/src/components/shared/dev-section/.dev-section-view.md +32 -22
  477. package/src/components/shared/doc-search/.doc-search-bar.md +58 -0
  478. package/src/components/shared/doc-search/.doc-search-result-row.md +50 -0
  479. package/src/components/shared/doc-search/.format-relative-path.md +30 -0
  480. package/src/components/shared/doc-search/.index.md +46 -0
  481. package/src/components/shared/doc-search/.map-doc-search-results.md +44 -0
  482. package/src/components/shared/doc-search/.resolve-search-result-action.md +52 -0
  483. package/src/components/shared/doc-search/.types.md +49 -0
  484. package/src/components/shared/doc-search/.use-doc-search.md +66 -0
  485. package/src/components/shared/legal-document/.legal-document-page.md +26 -20
  486. package/src/components/shared/legal-document/.use-legal-docs.md +36 -30
  487. package/src/components/shared/onboarding/.onboarding-step-card.md +24 -16
  488. package/src/components/shared/onboarding/.onboarding-walkthrough.md +42 -28
  489. package/src/components/shared/product-release/.index.md +33 -24
  490. package/src/components/shared/product-release/.product-release-card-skeleton.md +22 -28
  491. package/src/components/shared/product-release/.product-release-card.md +28 -29
  492. package/src/components/shared/product-release/.product-releases-view.md +49 -0
  493. package/src/components/shared/product-release/.release-detail-page.md +30 -15
  494. package/src/components/shared/roadmap/.index.md +29 -24
  495. package/src/components/shared/roadmap/.roadmap-grid.md +43 -54
  496. package/src/components/shared/roadmap/.roadmap-view.md +41 -0
  497. package/src/components/shared/roadmap/.use-roadmap-voting.md +27 -17
  498. package/src/components/switch.tsx +1 -1
  499. package/src/components/tickets/.help-center-card.md +32 -28
  500. package/src/components/tickets/.help-center-create-form.md +34 -22
  501. package/src/components/tickets/.help-center-list.md +36 -25
  502. package/src/components/tickets/.index.md +30 -45
  503. package/src/components/tickets/.ticket-center.md +31 -38
  504. package/src/components/tickets/.ticket-detail-drawer.md +20 -30
  505. package/src/components/tickets/.ticket-open-form.md +24 -26
  506. package/src/components/tickets/.ticket-reply-composer.md +51 -0
  507. package/src/components/tickets/.ticket-row.md +26 -11
  508. package/src/components/tickets/.types.md +56 -38
  509. package/src/components/tickets/hooks/.use-ticket-actions.md +60 -47
  510. package/src/components/tickets/hooks/.use-ticket-engagements.md +27 -27
  511. package/src/components/tickets/hooks/.use-tickets-list.md +24 -30
  512. package/src/components/ui/.accordion.md +28 -21
  513. package/src/components/ui/.actions-menu.md +36 -54
  514. package/src/components/ui/.ai-generated-badge.md +25 -0
  515. package/src/components/ui/.alert-dialog.md +21 -16
  516. package/src/components/ui/.alert.md +30 -25
  517. package/src/components/ui/.allowed-domains-input.md +26 -15
  518. package/src/components/ui/.announcement-bar-view.md +46 -0
  519. package/src/components/ui/.autocomplete.md +40 -27
  520. package/src/components/ui/.badge.md +34 -31
  521. package/src/components/ui/.brand-association-card.md +22 -18
  522. package/src/components/ui/.breadcrumb.md +18 -14
  523. package/src/components/ui/.bullet-list.md +35 -23
  524. package/src/components/ui/.card.md +47 -30
  525. package/src/components/ui/.checkbox-block.md +34 -22
  526. package/src/components/ui/.checkbox-with-description.md +18 -20
  527. package/src/components/ui/.chevron-button.md +29 -29
  528. package/src/components/ui/.circular-progress.md +30 -41
  529. package/src/components/ui/.color-preset-select.md +54 -0
  530. package/src/components/ui/.color-swatch.md +37 -0
  531. package/src/components/ui/.content-loader.md +34 -27
  532. package/src/components/ui/.crossfade-panels.md +50 -0
  533. package/src/components/ui/.cursor-pagination.md +38 -26
  534. package/src/components/ui/.dashboard-info-card.md +46 -27
  535. package/src/components/ui/.date-picker.md +52 -36
  536. package/src/components/ui/.device-card-compact.md +23 -20
  537. package/src/components/ui/.device-card.md +39 -30
  538. package/src/components/ui/.dialog.md +14 -14
  539. package/src/components/ui/.drawer.md +45 -39
  540. package/src/components/ui/.dropdown-button.md +41 -33
  541. package/src/components/ui/.dropdown-menu.md +40 -23
  542. package/src/components/ui/.duration-input.md +41 -0
  543. package/src/components/ui/.entity-image.md +32 -28
  544. package/src/components/ui/.error-state.md +30 -26
  545. package/src/components/ui/.fade-preview.md +44 -0
  546. package/src/components/ui/.field-wrapper.md +34 -23
  547. package/src/components/ui/.file-upload.md +30 -18
  548. package/src/components/ui/.filter-modal.md +30 -32
  549. package/src/components/ui/.filter-pill-row.md +58 -0
  550. package/src/components/ui/.floating-tooltip.md +27 -32
  551. package/src/components/ui/.hidden-tags-popup.md +18 -20
  552. package/src/components/ui/.highlight-card.md +36 -23
  553. package/src/components/ui/.honeypot-field.md +41 -0
  554. package/src/components/ui/.hover-dropdown.md +44 -31
  555. package/src/components/ui/.image-gallery-modal.md +28 -30
  556. package/src/components/ui/.image-uploader.md +39 -22
  557. package/src/components/ui/.index.md +33 -31
  558. package/src/components/ui/.info-card-row.md +50 -0
  559. package/src/components/ui/.info-card.md +27 -20
  560. package/src/components/ui/.info-row.md +30 -24
  561. package/src/components/ui/.info-section.md +63 -0
  562. package/src/components/ui/.input.md +29 -28
  563. package/src/components/ui/.label.md +34 -26
  564. package/src/components/ui/.markdown-editor.md +26 -25
  565. package/src/components/ui/.marquee-wall.md +64 -0
  566. package/src/components/ui/.menubar.md +50 -16
  567. package/src/components/ui/.modal-v2.md +41 -27
  568. package/src/components/ui/.modal.md +22 -19
  569. package/src/components/ui/.more-actions-menu.md +30 -24
  570. package/src/components/ui/.navigation-menu.md +40 -25
  571. package/src/components/ui/.organization-card.md +46 -27
  572. package/src/components/ui/.page-actions.md +55 -41
  573. package/src/components/ui/.page-loader.md +40 -23
  574. package/src/components/ui/.password-input.md +30 -0
  575. package/src/components/ui/.phone-input.md +20 -22
  576. package/src/components/ui/.portal-container.md +43 -0
  577. package/src/components/ui/.progress-bar.md +40 -27
  578. package/src/components/ui/.release-changelog-section.md +32 -26
  579. package/src/components/ui/.rich-markdown-renderer.md +45 -0
  580. package/src/components/ui/.scroll-fade.md +56 -0
  581. package/src/components/ui/.search-input.md +55 -37
  582. package/src/components/ui/.select.md +25 -26
  583. package/src/components/ui/.service-card.md +25 -19
  584. package/src/components/ui/.sheet.md +21 -21
  585. package/src/components/ui/.simple-markdown-renderer.md +36 -24
  586. package/src/components/ui/.slack-channel-chip.md +49 -0
  587. package/src/components/ui/.square-avatar.md +29 -26
  588. package/src/components/ui/.stacked-rows-panel.md +61 -0
  589. package/src/components/ui/.status-badge.md +30 -24
  590. package/src/components/ui/.status-indicator.md +35 -21
  591. package/src/components/ui/.tab-content.md +34 -22
  592. package/src/components/ui/.tab-navigation.md +40 -50
  593. package/src/components/ui/.tab-selector.md +48 -31
  594. package/src/components/ui/.tabs.md +34 -21
  595. package/src/components/ui/.tag-search-input.md +20 -20
  596. package/src/components/ui/.tag-select-dropdown.md +59 -0
  597. package/src/components/ui/.tag.md +25 -43
  598. package/src/components/ui/.tags-input.md +31 -31
  599. package/src/components/ui/.textarea.md +32 -30
  600. package/src/components/ui/.ticket-attachments-list.md +36 -29
  601. package/src/components/ui/.ticket-info-section.md +37 -42
  602. package/src/components/ui/.ticket-status-config-row.md +66 -0
  603. package/src/components/ui/.ticket-status-tag.md +39 -35
  604. package/src/components/ui/.toaster.md +21 -15
  605. package/src/components/ui/.toggle.md +38 -37
  606. package/src/components/ui/.tooltip.md +16 -13
  607. package/src/components/ui/button/.button-styles.md +17 -18
  608. package/src/components/ui/button/.button.md +30 -37
  609. package/src/components/ui/button/.split-button.md +46 -23
  610. package/src/components/ui/button/button-styles.ts +13 -0
  611. package/src/components/ui/button/button.tsx +5 -0
  612. package/src/components/ui/data-table/.data-table-body.md +50 -35
  613. package/src/components/ui/data-table/.data-table-empty.md +17 -33
  614. package/src/components/ui/data-table/.data-table-header.md +43 -40
  615. package/src/components/ui/data-table/.data-table-row.md +31 -31
  616. package/src/components/ui/data-table/.types.md +23 -28
  617. package/src/components/ui/file-manager/.file-manager-breadcrumb.md +16 -24
  618. package/src/components/ui/file-manager/.file-manager-empty.md +23 -15
  619. package/src/components/ui/file-manager/.file-manager-skeleton.md +34 -36
  620. package/src/components/ui/file-manager/.file-manager-table-row.md +29 -29
  621. package/src/components/ui/file-manager/.file-manager-table.md +39 -24
  622. package/src/components/ui/no-data/.index.md +22 -0
  623. package/src/components/ui/no-data/.no-data-actions.md +29 -0
  624. package/src/components/ui/no-data/.no-data-message.md +37 -0
  625. package/src/components/ui/no-data/.no-data-styles.md +39 -0
  626. package/src/components/ui/no-data/.no-data.md +59 -0
  627. package/src/components/ui/page-actions.tsx +2 -1
  628. package/src/components/ui/query-report-table/.query-report-table-header.md +15 -15
  629. package/src/components/ui/query-report-table/.query-report-table-row.md +16 -16
  630. package/src/components/ui/query-report-table/.query-report-table.md +39 -24
  631. package/src/components/ui/table/.table-column-filter-dropdown.md +15 -9
  632. package/src/components/ui/table/.table-description-cell.md +13 -12
  633. package/src/components/ui/table/.table-empty-state.md +19 -20
  634. package/src/components/ui/table/.table-row.md +30 -20
  635. package/src/components/ui/table/.table-skeleton.md +32 -27
  636. package/src/components/ui/table/.table-timestamp-cell.md +24 -23
  637. package/src/components/ui/table/.table.md +43 -30
  638. package/src/components/ui/table/.types.md +49 -45
  639. package/src/components/ui/table/.use-table-motion.md +45 -0
  640. package/src/contexts/.chat-runtime-context.md +55 -26
  641. package/src/contexts/.endpoints-runtime-context.md +40 -44
  642. package/src/embed-shims/.next-navigation.md +38 -31
  643. package/src/hooks/.api-hooks.md +28 -21
  644. package/src/hooks/.index.md +30 -25
  645. package/src/hooks/.use-authed-image-src.md +38 -0
  646. package/src/hooks/.use-contact-submission.md +35 -36
  647. package/src/hooks/.use-humanity-signals.md +47 -0
  648. package/src/hooks/.use-near-viewport.md +30 -30
  649. package/src/hooks/.use-og-placeholder-url.md +57 -0
  650. package/src/hooks/.use-scroll-to-hash.md +46 -0
  651. package/src/hooks/.use-self-fetch.md +52 -0
  652. package/src/hooks/state/.flatten-schema.md +37 -29
  653. package/src/hooks/ui/.index.md +37 -25
  654. package/src/hooks/ui/.use-auto-limit-tags.md +55 -38
  655. package/src/hooks/ui/.use-deferred-error.md +44 -0
  656. package/src/hooks/ui/.use-focus-trap.md +59 -0
  657. package/src/hooks/ui/.use-header-height.md +37 -0
  658. package/src/hooks/ui/.use-horizontal-scrollbar.md +25 -34
  659. package/src/hooks/ui/.use-marquee-engine.md +73 -0
  660. package/src/hooks/ui/.use-notification-permission.md +49 -0
  661. package/src/hooks/ui/.use-reset-on-page-hidden.md +40 -0
  662. package/src/hooks/ui/.use-suppress-clone-focus.md +41 -0
  663. package/src/nats/.index.md +39 -0
  664. package/src/nats/.nats-provider.md +46 -0
  665. package/src/nats/.nats.md +38 -28
  666. package/src/nats/.shared-connection.md +56 -0
  667. package/src/nats/.use-nats-subscription.md +57 -0
  668. package/src/stories/.ActionsMenu.stories.md +57 -0
  669. package/src/stories/.Alert.stories.md +46 -0
  670. package/src/stories/.AnnouncementBar.stories.md +59 -32
  671. package/src/stories/.AppLayoutDrawer.stories.md +60 -0
  672. package/src/stories/.AppLayoutSidebar.stories.md +45 -0
  673. package/src/stories/.ApprovalBatchMessage.stories.md +46 -0
  674. package/src/stories/.ApprovalBatchMessageClient.stories.md +55 -0
  675. package/src/stories/.ApprovalRequestMessage.stories.md +50 -0
  676. package/src/stories/.ApprovalRequestMessageClient.stories.md +41 -0
  677. package/src/stories/.BlogCard.stories.md +52 -0
  678. package/src/stories/.Board.stories.md +25 -20
  679. package/src/stories/.Button.stories.md +35 -40
  680. package/src/stories/.CampaignCardAdmin.stories.md +38 -0
  681. package/src/stories/.CardsStrip.stories.md +39 -0
  682. package/src/stories/.CaseStudyCard.stories.md +41 -0
  683. package/src/stories/.ChatContainer.stories.md +41 -0
  684. package/src/stories/.ChatInlineVideoPill.stories.md +36 -0
  685. package/src/stories/.ChatMessageEnhanced.stories.md +51 -0
  686. package/src/stories/.ChatMingoInfoCards.stories.md +30 -0
  687. package/src/stories/.ChatTicketList.stories.md +38 -22
  688. package/src/stories/.ChatTypingIndicator.stories.md +47 -0
  689. package/src/stories/.CheckboxBlock.stories.md +34 -35
  690. package/src/stories/.ContextCompactionDisplay.stories.md +28 -0
  691. package/src/stories/.CustomerInterviewCard.stories.md +36 -0
  692. package/src/stories/.DashboardInfoCard.stories.md +40 -33
  693. package/src/stories/.DataRoomDocCard.stories.md +42 -0
  694. package/src/stories/.DataTable.stories.md +37 -32
  695. package/src/stories/.DatePicker.stories.md +34 -30
  696. package/src/stories/.EmbeddableChat.stories.md +45 -28
  697. package/src/stories/.EmptyState.stories.md +55 -0
  698. package/src/stories/.ErrorMessageDisplay.stories.md +45 -0
  699. package/src/stories/.FilterModal.stories.md +28 -22
  700. package/src/stories/.GenericEntityCard.stories.md +50 -0
  701. package/src/stories/.GitHubActivityCard.stories.md +41 -0
  702. package/src/stories/.GuideWelcome.stories.md +38 -0
  703. package/src/stories/.Header.stories.md +32 -22
  704. package/src/stories/.HubspotTicketCard.stories.md +41 -0
  705. package/src/stories/.InfoCard.stories.md +37 -26
  706. package/src/stories/.InfoCardRow.stories.md +48 -0
  707. package/src/stories/.InfoSection.stories.md +55 -0
  708. package/src/stories/.Input.stories.md +45 -35
  709. package/src/stories/.InvestorUpdateCard.stories.md +41 -0
  710. package/src/stories/.MarqueeWall.stories.md +53 -0
  711. package/src/stories/.MingoAiButton.stories.md +31 -0
  712. package/src/stories/.MingoChatModals.stories.md +47 -0
  713. package/src/stories/.MingoInfoCard.stories.md +50 -0
  714. package/src/stories/.MingoOnboardingCard.stories.md +19 -19
  715. package/src/stories/.MingoWelcome.stories.md +41 -0
  716. package/src/stories/.MobileNavPanel.stories.md +52 -0
  717. package/src/stories/.Modal.stories.md +19 -16
  718. package/src/stories/.MspOrganizationCard.stories.md +45 -0
  719. package/src/stories/.NotificationDrawer.stories.md +39 -28
  720. package/src/stories/.OSTypeBadge.stories.md +34 -25
  721. package/src/stories/.OnboardingGuideCard.stories.md +41 -0
  722. package/src/stories/.PageActions.stories.md +21 -21
  723. package/src/stories/.PageContainer.stories.md +29 -24
  724. package/src/stories/.PageLayout.stories.md +18 -35
  725. package/src/stories/.PolicyConfigurationPanel.stories.md +58 -0
  726. package/src/stories/.ProductReleaseCard.stories.md +39 -0
  727. package/src/stories/.ProgramCard.stories.md +51 -0
  728. package/src/stories/.QuickActionChip.stories.md +59 -0
  729. package/src/stories/.QuickActionMarquee.stories.md +51 -0
  730. package/src/stories/.QuickActionWall.stories.md +58 -0
  731. package/src/stories/.RoadmapCard.stories.md +41 -0
  732. package/src/stories/.ShellTypeBadge.stories.md +42 -22
  733. package/src/stories/.SlackMessageCard.stories.md +42 -0
  734. package/src/stories/.SlashCommandSuggestions.stories.md +21 -31
  735. package/src/stories/.SplitButton.stories.md +23 -25
  736. package/src/stories/.StackedRowsPanel.stories.md +65 -0
  737. package/src/stories/.TabSelector.stories.md +26 -38
  738. package/src/stories/.Tag.stories.md +32 -27
  739. package/src/stories/.ThinkingDisplay.stories.md +43 -0
  740. package/src/stories/.TicketCard.stories.md +60 -0
  741. package/src/stories/.TicketInfoSection.stories.md +28 -20
  742. package/src/stories/.TimeTracker.stories.md +35 -0
  743. package/src/stories/.Toaster.stories.md +26 -20
  744. package/src/stories/.ToolBadge.stories.md +34 -24
  745. package/src/stories/.ToolExecutionDisplay.stories.md +22 -20
  746. package/src/stories/.ToolExecutionDisplayClient.stories.md +33 -0
  747. package/src/stories/.VideoBitesStrip.stories.md +37 -0
  748. package/src/stories/.WarningBlock.stories.md +51 -0
  749. package/src/stories/__fixtures__/.chat-card-decorator.md +39 -0
  750. package/src/stories/__fixtures__/.chat-cards.md +57 -0
  751. package/src/stories/auth/.CompleteAccount.stories.md +36 -0
  752. package/src/stories/auth/.CreateOrganization.stories.md +52 -0
  753. package/src/stories/auth/.InviteLinkInvalid.stories.md +21 -0
  754. package/src/stories/auth/.Login.stories.md +32 -0
  755. package/src/stories/auth/.OpenFrameSso.stories.md +58 -0
  756. package/src/stories/auth/.PasswordReset.stories.md +49 -0
  757. package/src/styles/ods-interaction-states.css +32 -0
  758. package/src/types/.announcement.md +67 -35
  759. package/src/types/.blog.md +44 -41
  760. package/src/types/.case-study.md +31 -17
  761. package/src/types/.content-ref.md +37 -0
  762. package/src/types/.customer-interview.md +38 -38
  763. package/src/types/.doc-source.md +87 -0
  764. package/src/types/.entity-author.md +53 -0
  765. package/src/types/.entity-platform.md +40 -0
  766. package/src/types/.index.md +23 -17
  767. package/src/types/.marketing.md +32 -35
  768. package/src/types/.navigation.md +31 -19
  769. package/src/types/.os.types.md +30 -31
  770. package/src/types/.permissions.md +49 -35
  771. package/src/types/.platform.md +44 -28
  772. package/src/types/.product-release.md +59 -42
  773. package/src/types/.shell.types.md +46 -30
  774. package/src/types/.supabase.md +43 -29
  775. package/src/types/.tool.types.md +43 -23
  776. package/src/types/.video-processing.md +40 -31
  777. package/src/types/marketing.ts +11 -0
  778. package/src/types/supabase.ts +80 -0
  779. package/src/types/video-processing.ts +1 -0
  780. package/src/utils/.announcement-storage.md +49 -17
  781. package/src/utils/.app-config.md +22 -18
  782. package/src/utils/.brand-marks.md +46 -0
  783. package/src/utils/.cn.md +40 -29
  784. package/src/utils/.color-analysis.md +34 -25
  785. package/src/utils/.common.md +43 -23
  786. package/src/utils/.content-href.md +64 -0
  787. package/src/utils/.content-ref-groups.md +51 -0
  788. package/src/utils/.date-utils.md +46 -35
  789. package/src/utils/.doc-path-utils.md +38 -0
  790. package/src/utils/.doc-tree-nav.md +51 -0
  791. package/src/utils/.embed-authed-fetch.md +48 -32
  792. package/src/utils/.embed-content-fetch.md +36 -0
  793. package/src/utils/.embed-url-converters.md +52 -0
  794. package/src/utils/.extract-items.md +49 -0
  795. package/src/utils/.faq-anchor.md +48 -0
  796. package/src/utils/.format.md +73 -55
  797. package/src/utils/.humanity-signals.md +59 -0
  798. package/src/utils/.index.md +73 -31
  799. package/src/utils/.list-url.md +43 -0
  800. package/src/utils/.markdown-section-extractor.md +57 -0
  801. package/src/utils/.markdown-to-plain.md +51 -0
  802. package/src/utils/.media-carousel-utils-stub.md +42 -31
  803. package/src/utils/.ods-color-utils.md +84 -43
  804. package/src/utils/.og-placeholder.md +45 -0
  805. package/src/utils/.page-header-constants.md +26 -0
  806. package/src/utils/.platform-config.md +34 -34
  807. package/src/utils/.release-badge.md +47 -0
  808. package/src/utils/.release-cover.md +45 -0
  809. package/src/utils/.same-page-hash-nav.md +45 -0
  810. package/src/utils/.scroll-into-view.md +32 -25
  811. package/src/utils/.seo-description.md +37 -0
  812. package/src/utils/.seo-title.md +25 -0
  813. package/src/utils/.social-embed-cache.md +37 -0
  814. package/src/utils/.source-icons.md +30 -34
  815. package/src/utils/.suggestion-url.md +46 -0
  816. package/src/utils/.tool-utils.md +39 -24
  817. package/src/utils/.tree-builder.md +64 -0
  818. package/src/utils/.video-bite-id.md +42 -0
  819. package/src/utils/announcement-storage.ts +9 -18
  820. package/src/utils/dev-sections/.dev-section-param-keys.md +51 -0
  821. package/src/utils/dev-sections/.openframe-dev-sections.md +40 -28
  822. package/src/utils/dismiss-cookie.ts +55 -0
  823. package/src/utils/dismissal-storage.ts +44 -0
  824. package/src/utils/index.ts +3 -0
  825. package/dist/chunk-BBUEY73L.js.map +0 -1
  826. package/dist/chunk-G3UN2DXU.cjs.map +0 -1
  827. package/dist/chunk-OWMLWJQY.cjs.map +0 -1
  828. package/dist/chunk-SASR7SK5.js.map +0 -1
  829. package/src/components/chat/utils/.onboarding-icons.md +0 -28
  830. package/src/hooks/.use-og-placeholder.md +0 -51
  831. /package/dist/{chunk-FP4H6Y5O.js.map → chunk-3VMCJK7A.js.map} +0 -0
  832. /package/dist/{chunk-4SMRQ4SN.js.map → chunk-6U7HIZSW.js.map} +0 -0
  833. /package/dist/{chunk-66BNAFO6.js.map → chunk-FIRIO2NB.js.map} +0 -0
  834. /package/dist/{chunk-MGKCS6KS.js.map → chunk-GWJNTDXR.js.map} +0 -0
  835. /package/dist/{chunk-DEHZ5CTC.js.map → chunk-HAJQWSSU.js.map} +0 -0
  836. /package/dist/{chunk-VTSRDC4W.js.map → chunk-JKRX3JHT.js.map} +0 -0
  837. /package/dist/{chunk-Y3Y2DLNO.js.map → chunk-LT2PU6SK.js.map} +0 -0
  838. /package/dist/{chunk-R5WJJL4V.js.map → chunk-RDCAJDX7.js.map} +0 -0
  839. /package/dist/{chunk-PSPWT2Q5.js.map → chunk-T2S7A5IU.js.map} +0 -0
  840. /package/dist/{chunk-2DIOV7BR.js.map → chunk-WIITTL5I.js.map} +0 -0
  841. /package/dist/{chunk-ZRANZNEA.js.map → chunk-Y37XYIWA.js.map} +0 -0
@@ -0,0 +1,45 @@
1
+ <!-- source-hash: 90922d1a0fba270fdb0d92bc58406d0e -->
2
+ Resolves the cover image for a `ProductReleaseCard` using a deterministic priority chain, serving as the single source of truth for all surfaces that render release covers.
3
+
4
+ ## Key Components
5
+
6
+ ### `ReleaseCoverSource`
7
+ Input interface describing the available image candidates on a release entity:
8
+
9
+ | Field | Description |
10
+ |---|---|
11
+ | `featured_image` | Editor-curated cover — highest priority |
12
+ | `highlight_video_thumbnail` | AI-generated highlight reel thumbnail |
13
+ | `main_video_thumbnail` | Full-release video thumbnail |
14
+ | `og_image_url` | SEO/OG fallback image |
15
+
16
+ ### `ReleaseCoverResult`
17
+ Output interface returned by the resolver:
18
+
19
+ | Field | Description |
20
+ |---|---|
21
+ | `cover` | Resolved image URL, or `null` if none available |
22
+ | `hasVideoCover` | `true` only when the active cover is a video thumbnail (priorities 2–3) |
23
+
24
+ ### `resolveReleaseCover(r: ReleaseCoverSource): ReleaseCoverResult`
25
+ Applies the priority chain using `||` (not `??`) so empty strings fall through rather than rendering a broken `<Image src="">`. `hasVideoCover` is suppressed when `featured_image` is set, preventing a misleading Play overlay on still images.
26
+
27
+ ## Usage Example
28
+
29
+ ```typescript
30
+ import { resolveReleaseCover } from './release-cover'
31
+
32
+ const { cover, hasVideoCover } = resolveReleaseCover({
33
+ featured_image: null,
34
+ highlight_video_thumbnail: 'https://cdn.example.com/highlight.jpg',
35
+ main_video_thumbnail: 'https://cdn.example.com/main.jpg',
36
+ og_image_url: 'https://cdn.example.com/og.jpg',
37
+ })
38
+
39
+ // cover → 'https://cdn.example.com/highlight.jpg'
40
+ // hasVideoCover → true
41
+ ```
42
+
43
+ > **Adding a new fallback source?** Edit only `ReleaseCoverSource`, `ReleaseCoverResult`, and the chain in `resolveReleaseCover` — all rendering surfaces pick up the change automatically.
44
+
45
+ **Source:** [`release-cover.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/release-cover.ts)
@@ -0,0 +1,45 @@
1
+ <!-- source-hash: 67a0df770f7417b847b731191fc01a80 -->
2
+ Handles same-page hash navigation by combining `history.pushState`, synthetic `hashchange` events, and smooth scrolling — working around Next.js limitations that suppress smooth scroll during navigation and treat same-URL `router.push` as a no-op.
3
+
4
+ ## Key Components
5
+
6
+ ### Constants
7
+
8
+ | Constant | Value | Purpose |
9
+ |---|---|---|
10
+ | `STICKY_HEADER_OFFSET_PX` | `96` | Offset for pages with both a section-nav strip and the global hub header |
11
+ | `HUB_HEADER_OFFSET_PX` | `80` | Offset for pages with only the global hub header (docs, blog, vendor detail) |
12
+
13
+ ### Functions & Interfaces
14
+
15
+ - **`normalizeHashFragment(hash)`** — Strips any extra `#` segments from a fragment string (e.g., `'#a#b'` → `'#a'`), keeping the URL bar and `getElementById` in sync.
16
+ - **`NavigateSamePageHashOptions`** — Interface with optional `headerOffset` (pixels to subtract for sticky chrome) and `history` mode (`'push'` or `'replace'`).
17
+ - **`navigateSamePageHash(target, options)`** — Core primitive that validates the target is same-origin/pathname/search, normalizes malformed fragments, updates history, fires a synthetic `hashchange` event, and smooth-scrolls to the anchor. Returns `true` if the navigation was claimed, `false` for cross-page targets.
18
+
19
+ ## Usage Example
20
+
21
+ ```typescript
22
+ import {
23
+ navigateSamePageHash,
24
+ HUB_HEADER_OFFSET_PX,
25
+ STICKY_HEADER_OFFSET_PX,
26
+ } from './same-page-hash-nav'
27
+
28
+ // In a TOC link click handler (replaces history entry instead of pushing)
29
+ function handleTocClick(href: string) {
30
+ const claimed = navigateSamePageHash(href, {
31
+ headerOffset: HUB_HEADER_OFFSET_PX,
32
+ history: 'replace',
33
+ })
34
+ if (!claimed) {
35
+ router.push(href) // fall through for cross-page targets
36
+ }
37
+ }
38
+
39
+ // Bare-hash shorthand — no need to reconstruct pathname + search
40
+ navigateSamePageHash('#features', {
41
+ headerOffset: STICKY_HEADER_OFFSET_PX,
42
+ })
43
+ ```
44
+
45
+ > **Dev-mode warnings:** In development, `navigateSamePageHash` logs to the console when it detects a malformed multi-fragment hash or a missing anchor element, pointing to the upstream composer as the source.
@@ -1,40 +1,47 @@
1
- <!-- source-hash: ec93c3a6544d7f572c8219bc65ceaf67 -->
2
- Smooth-scroll utility that positions an element at the top of the viewport with support for sticky header offsets and pre-computed layout-shift adjustments.
1
+ <!-- source-hash: 265569e7b29e4fca2ffe9d67c0157121 -->
2
+ Cancellation-proof scroll helper that animates a target element to the top of the viewport using a self-driven `requestAnimationFrame` tween — immune to browser scroll anchoring, layout shifts, and mid-scroll cancellation issues that affect native smooth scrolling.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `ScrollElementIntoViewOptions`
7
-
8
- | Option | Type | Default | Description |
9
- |---|---|---|---|
10
- | `headerOffset` | `number` | `0` | Pixels to subtract for sticky chrome (e.g., `96` for `scroll-mt-24`) |
11
- | `behavior` | `ScrollBehavior` | `'smooth'` | `'smooth'` for animated scrolls, `'instant'` for deep-link jumps |
12
- | `adjustTargetY` | `(raw: number) => number` | — | Callback to correct the pixel target before animation starts |
13
-
14
- ### `scrollElementIntoView(target, options?)`
15
-
16
- Computes a fixed pixel target via `getBoundingClientRect().top + scrollY - headerOffset`, then calls `window.scrollTo()` directly. This avoids the jitter caused by `element.scrollIntoView()`, which re-targets continuously during layout shifts. Handles `null`/`undefined` refs as a no-op and short-circuits in SSR environments.
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `ScrollElementIntoViewOptions` | `interface` | Configuration: `headerOffset`, `behavior`, `adjustTargetY`, `durationMs` |
9
+ | `scrollElementIntoView` | `function` | Main entry point — resolves the scroll container, cancels any prior tween, and drives the animation |
10
+ | `getScrollableAncestor` | `function` (internal) | Walks up the DOM to find the nearest real scroll container (`auto\|scroll\|overlay`), ignoring `clip`/`hidden` |
11
+ | `cancelActiveScroll` | `function` (internal) | Cancels the in-flight `rAF` loop and removes gesture listeners |
12
+ | `easeOutCubic` | `function` (internal) | Easing curve `1 - (1 - t)³` applied per frame |
17
13
 
18
14
  ## Usage Example
19
15
 
20
16
  ```typescript
21
17
  import { scrollElementIntoView } from './scroll-into-view'
22
18
 
23
- // Basic — scroll a ref to top, accounting for a 96px sticky header
24
- scrollElementIntoView(cardRef.current, { headerOffset: 96 })
19
+ // Basic — smooth scroll below a 64px sticky header
20
+ const el = document.getElementById('section-target')
21
+ scrollElementIntoView(el, { headerOffset: 64 })
25
22
 
26
- // Instant jump on deep-link land
27
- scrollElementIntoView(anchorRef.current, {
28
- headerOffset: 96,
29
- behavior: 'instant',
30
- })
23
+ // Instant jump (deep-link land, programmatic focus)
24
+ scrollElementIntoView(el, { behavior: 'instant', headerOffset: 64 })
31
25
 
32
- // Pre-computed layout-shift adjustment (e.g. HelpCenterCard accordion)
33
- // Row A (above target) collapses simultaneously — shift target up by A's height
34
- scrollElementIntoView(rowBRef.current, {
26
+ // With a layout-shift adjustment (e.g. sibling drawer collapsing adds 120px)
27
+ scrollElementIntoView(el, {
35
28
  headerOffset: 96,
36
- adjustTargetY: (raw) => raw - getAboveDrawerHeight(),
29
+ durationMs: 400,
30
+ adjustTargetY: (rawY) => rawY - 120,
37
31
  })
32
+
33
+ // Null-safe — safe to pass a ref directly without defensive branching
34
+ scrollElementIntoView(ref.current, { headerOffset: 96 })
38
35
  ```
39
36
 
40
- > **Why not `element.scrollIntoView()`?** That API re-targets continuously as the page reflows during the animation, causing visible jitter when sibling content is also moving. Pre-computing a fixed pixel value lets the browser commit to a clean, uninterrupted animation.
37
+ **Behaviors at a glance:**
38
+
39
+ - **Scroll container auto-detection** — drives the nearest `overflow-y: auto/scroll` ancestor (e.g. OpenFrame's `<main class="overflow-y-auto">`) rather than always targeting `window`
40
+ - **Anchoring immunity** — per-frame instant writes mean there is no native smooth scroll for browser scroll anchoring or `focus()` to abort
41
+ - **Live target recomputation** — target pixel is recalculated each frame, so a drawer still expanding is tracked to its resting position
42
+ - **User takeover** — `wheel` and `touchmove` cancel the tween immediately; the user is never fought
43
+ - **`prefers-reduced-motion`** — falls back to a single synchronous write automatically
44
+
45
+ ## Source
46
+
47
+ [`scroll-into-view.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/scroll-into-view.ts)
@@ -0,0 +1,37 @@
1
+ <!-- source-hash: a978a1280534da5c75f87c43d8c70e25 -->
2
+ Defines and exports the single source of truth for the `seo_description` field length constraint, enforcing a hard database-level character cap.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Value | Description |
7
+ |--------|------|-------|-------------|
8
+ | `SEO_DESCRIPTION_MAX_LENGTH` | `number` | `160` | Hard cap matching the `varchar(160)` DB column constraint |
9
+
10
+ ## Usage Example
11
+
12
+ ```typescript
13
+ import { SEO_DESCRIPTION_MAX_LENGTH } from '@flamingo-stack/openframe-frontend-core/utils';
14
+
15
+ // UI input enforcement
16
+ <input maxLength={SEO_DESCRIPTION_MAX_LENGTH} />
17
+
18
+ // AI prompt guidance
19
+ const prompt = `Generate a description under ${SEO_DESCRIPTION_MAX_LENGTH} characters.`;
20
+
21
+ // Validation guard
22
+ if (description.length > SEO_DESCRIPTION_MAX_LENGTH) {
23
+ throw new Error(`SEO description exceeds ${SEO_DESCRIPTION_MAX_LENGTH} character limit.`);
24
+ }
25
+ ```
26
+
27
+ ## Notes
28
+
29
+ > **Hard cap** — unlike `seo_title` (a soft search-engine recommendation), this limit is enforced at the database level (`varchar(160)`). Postgres will reject values exceeding it outright.
30
+
31
+ **Known consumers:**
32
+ - `SEOEditorPreview` — binds `maxLength` and renders an over-length alert
33
+ - The hub — uses this constant for AI generation prompt guidance and the rewrite-to-fit helper
34
+
35
+ ---
36
+
37
+ **Source:** [`seo-description.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/seo-description.ts)
@@ -0,0 +1,25 @@
1
+ <!-- source-hash: 822bf336cf43bc797363ba147feae651 -->
2
+ Defines and exports the single source of truth for the `seo_title` field length budget used across SEO tooling, AI generation prompts, and database validation.
3
+
4
+ ## Key Components
5
+
6
+ - **`SEO_TITLE_MAX_LENGTH`** — Constant (`60`) representing the maximum character length for an SEO title, aligned with search engine truncation thresholds.
7
+
8
+ ## Usage Example
9
+
10
+ ```typescript
11
+ import { SEO_TITLE_MAX_LENGTH } from '@flamingo-stack/openframe-oss-lib/seo-title';
12
+
13
+ // Validate an SEO title before saving
14
+ if (title.length > SEO_TITLE_MAX_LENGTH) {
15
+ throw new Error(`SEO title must be ${SEO_TITLE_MAX_LENGTH} characters or fewer.`);
16
+ }
17
+ ```
18
+
19
+ ## Notes
20
+
21
+ - The `seo_title` is rendered **verbatim** as the HTML `<title>` tag — no brand suffix is appended (unlike the default title fallback).
22
+ - The value `60` reflects the widely accepted character limit before search engines truncate page titles in results.
23
+ - Consumers include:
24
+ - **`SEOEditorPreview`** — drives the `maxLength` attribute on the input field and triggers the too-long alert.
25
+ - **The hub** — imported via `@flamingo-stack/openframe-frontend-core/utils` for AI prompt guidance and database `CHECK` constraint values.
@@ -0,0 +1,37 @@
1
+ <!-- source-hash: 9f786a0730fdf75c06716b087e1f5b2f -->
2
+ Unified social media embed caching singleton that provides a three-tier cache hierarchy (memory → server → direct fetch) for Reddit and Twitter embed clients, with request deduplication and async background refresh.
3
+
4
+ ## Key Components
5
+
6
+ - **`SocialEmbedCache`** — Singleton class exposing all cache operations
7
+ - **`CacheOptions`** — Interface defining `platform`, `url`, and `apiEndpoint` per-call inputs
8
+ - **`getFromMemory / setInMemory`** — In-process `Map`-backed cache layer
9
+ - **`getFromServer`** — Checks the server-side cache via `?cache-only=true` query param
10
+ - **`setInServer`** — Writes data to the server cache with promise-level deduplication via `cachingRequests`
11
+ - **`fetchWithHierarchy`** — Orchestrates the full lookup chain: memory → server cache → Reddit direct browser fetch → server proxy fallback
12
+ - **`scheduleAsyncRefresh`** — Fires a background refresh 1 second after load to keep the server cache warm without blocking the consumer
13
+ - **`fetchDirect`** — Thin wrapper around a caller-supplied `directFetcher` function with uniform logging
14
+
15
+ ## Usage Example
16
+
17
+ ```typescript
18
+ import { SocialEmbedCache } from './social-embed-cache';
19
+
20
+ const cache = SocialEmbedCache.getInstance();
21
+
22
+ await cache.fetchWithHierarchy({
23
+ platform: 'reddit',
24
+ url: 'https://www.reddit.com/r/example/comments/abc123/.json',
25
+ apiEndpoint: '/content/api/blog/reddit-proxy',
26
+ dataValidator: (data) => Array.isArray(data) && data.length > 0,
27
+ onDataUpdate: (data) => setEmbedData(data),
28
+ onError: (msg) => setError(msg),
29
+ onLoading: (loading) => setLoading(loading),
30
+ });
31
+ ```
32
+
33
+ > **Note:** Pass `apiEndpoint` on each call to route through your own reverse proxy rather than a hard-coded hub path. The singleton is pure TypeScript with no React dependency, making it safe to share across any embed satellite.
34
+
35
+ ## Source
36
+
37
+ [`social-embed-cache.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/social-embed-cache.ts)
@@ -1,16 +1,23 @@
1
- <!-- source-hash: 4129d05ad3798983504dba26d6153a8c -->
2
- Maps RAG table IDs to their display icons, human-readable labels, and document type lookups for the OpenFrame chat source chip system. Server-safe with no client-only imports.
1
+ <!-- source-hash: 64605009d59b6e0fa3559c548a66b58b -->
2
+ Provides static lookup maps and helper functions for resolving RAG table IDs to icon names, display labels, and document type mappings — designed to be server-safe so both server-side chat route handlers and client-side components can import from a single source.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `SOURCE_ICON_NAMES` | `Record<string, string>` | Maps `RagTableConfig.id` → icon name string (resolved to React components via `icon-registry.ts`) |
9
- | `SOURCE_LABELS_BY_TABLE` | `Record<string, string>` | Maps `RagTableConfig.id` → human-readable display label used in chat source chips |
10
- | `DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID` | `Record<string, string>` | Reverse maps LLM-emitted `documentType` strings → `RagTableConfig.id` |
11
- | `getSourceIconName()` | Function | Safe lookup returning `undefined` for unknown table IDs |
12
- | `getSourceLabel()` | Function | Lookup with fallback to raw table slug when no label is registered |
13
- | `defaultTableIdForDocumentType()` | Function | Default resolver for `useEmbeddedChat` when no custom callback is provided; returns `null` for unknown types |
6
+ ### Constants
7
+
8
+ | Export | Purpose |
9
+ |---|---|
10
+ | `SOURCE_ICON_NAMES` | Maps `RagTableConfig.id` → icon name string (resolved to a React component client-side via `icon-registry.ts`) |
11
+ | `SOURCE_LABELS_BY_TABLE` | Maps `RagTableConfig.id` → human-readable display label used in chat chip strips |
12
+ | `DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID` | Reverse map from LLM-emitted `documentType` strings → `RagTableConfig.id` |
13
+
14
+ ### Functions
15
+
16
+ | Export | Signature | Behavior |
17
+ |---|---|---|
18
+ | `getSourceIconName` | `(tableId: string \| null \| undefined) => string \| undefined` | Returns icon name or `undefined` (caller decides fallback) |
19
+ | `getSourceLabel` | `(tableId: string) => string` | Returns display label; falls back to raw `tableId` slug if unmapped |
20
+ | `defaultTableIdForDocumentType` | `(documentType: string) => string \| null` | Default resolver for `useEmbeddedChat`; returns `null` for unknown types |
14
21
 
15
22
  ## Usage Example
16
23
 
@@ -21,33 +28,22 @@ import {
21
28
  defaultTableIdForDocumentType,
22
29
  } from '@/utils/source-icons'
23
30
 
24
- // Resolve icon name for a known RAG table
25
- const iconName = getSourceIconName('github-commits')
26
- // → 'github'
27
-
28
- // Get display label for a chip strip
29
- const label = getSourceLabel('hubspot-tickets-anon')
30
- // → 'Tickets'
31
+ // Resolve icon name for a chip strip glyph
32
+ const iconName = getSourceIconName('github-commits') // → 'github'
31
33
 
32
- // Map a documentType emitted by the LLM to its table ID
33
- const tableId = defaultTableIdForDocumentType('slack_message')
34
- // → 'slack-messages'
34
+ // Resolve display label for a sub-message chip
35
+ const label = getSourceLabel('hubspot-tickets-self') // → 'My Tickets'
36
+ getSourceLabel('unknown-table') // → 'unknown-table' (fallback)
35
37
 
36
- // Graceful handling of unknown types
37
- const unknown = defaultTableIdForDocumentType('custom_type')
38
- // → null
38
+ // Map an LLM-emitted documentType to its RAG table
39
+ const tableId = defaultTableIdForDocumentType('slack_message') // → 'slack-messages'
40
+ defaultTableIdForDocumentType('custom_type') // → null
39
41
  ```
40
42
 
41
- ## Supported Source Categories
43
+ ## Architecture Notes
42
44
 
43
- | Category | Tables Covered |
44
- |----------|---------------|
45
- | **Docs** | `openframe-docs`, `data-room-docs` |
46
- | **CMS / Programs** | Blog posts, releases, case studies, webinars, events, podcasts, interviews |
47
- | **Financials** | KPIs, cap table, P&L, balance sheet, cash flow, investor updates |
48
- | **ClickUp** | Roadmap, delivery, internal tasks |
49
- | **GitHub** | Commits, PRs, PR reviews (public + internal variants) |
50
- | **HubSpot** | Tickets (full, anon, self) |
51
- | **Communications** | Slack messages |
45
+ - **Server-safe by design** — no `'use client'` banner; icon *names* live here while icon *components* remain client-only in `src/components/chat/utils/icon-registry.ts`.
46
+ - The client-side chat barrel re-exports these helpers for ergonomic imports.
47
+ - `DEFAULT_DOCUMENT_TYPE_TO_TABLE_ID` mirrors the hub's `tableIdForDocumentType()` registry; embedders needing tenant-specific overrides pass a custom callback to `useEmbeddedChat` instead.
52
48
 
53
- > **Design note:** Icon names are intentionally decoupled from React components — the resolver (`icon-registry.ts`) stays client-only while this file remains server-safe, allowing hub-side RAG mappers and chat route handlers to call these utilities directly.
49
+ **Source:** [`src/utils/source-icons.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/utils/source-icons.ts)
@@ -0,0 +1,46 @@
1
+ <!-- source-hash: 6fc430d117cdf20c7781e51705df5734 -->
2
+ Composes fetch URLs for suggestion sections (FaqSection and RelatedContentSection) with a consistent query parameter shape, ensuring the two consumers never drift in their `entityType`/`entityId`/`count` parameter ordering.
3
+
4
+ ## Key Components
5
+
6
+ ### `SuggestionUrlOptions`
7
+ Configuration interface controlling URL construction:
8
+
9
+ | Property | Type | Description |
10
+ |---|---|---|
11
+ | `apiBaseUrl` | `string?` | Prefix for third-party embeds or reverse proxies; defaults to same-origin relative (`''`) |
12
+ | `entityType` | `string?` | Entity scope qualifier; must be paired with `entityId` |
13
+ | `entityId` | `number \| string?` | Entity scope qualifier; must be paired with `entityType` |
14
+ | `count` | `number?` | Maps to the server's `count` param; omitted when undefined (server default applies) |
15
+ | `extraParams` | `Record<string, string \| undefined>?` | Additional query params appended after the shared trio; empty/undefined values are skipped |
16
+
17
+ ### `buildSuggestionUrl(path, opts)`
18
+ Pure, server-safe function that assembles the final URL string. Parameter ordering is fixed: `entityType` → `entityId` → `count` → `extraParams`. Both `entityType` and `entityId` must be non-empty to be included; a partial pair is silently dropped.
19
+
20
+ ## Usage Example
21
+
22
+ ```typescript
23
+ // Same-origin relative URL with entity scope
24
+ buildSuggestionUrl('/api/faqs', {
25
+ entityType: 'article',
26
+ entityId: 42,
27
+ count: 5,
28
+ })
29
+ // → '/api/faqs?entityType=article&entityId=42&count=5'
30
+
31
+ // Absolute URL with extra params and no entity scope
32
+ buildSuggestionUrl('/api/related', {
33
+ apiBaseUrl: 'https://api.example.com',
34
+ count: 10,
35
+ extraParams: { excludeTypes: 'video,file', draft: undefined }, // 'draft' skipped
36
+ })
37
+ // → 'https://api.example.com/api/related?count=10&excludeTypes=video%2Cfile'
38
+
39
+ // Bare path — no query string appended
40
+ buildSuggestionUrl('/api/faqs')
41
+ // → '/api/faqs'
42
+ ```
43
+
44
+ ## Source
45
+
46
+ [`suggestion-url.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/suggestion-url.ts)
@@ -1,40 +1,55 @@
1
- <!-- source-hash: 6ea14bfd05bc32d44e0bdda863e8da6c -->
2
- Provides normalization and conversion utilities for tool types across the Flamingo platform. Handles various input formats (aliases, case variations) and converts them to canonical ToolType values used throughout the system.
1
+ <!-- source-hash: 656c2a7658a961c816d272983ab9827c -->
2
+ Provides normalization and conversion utilities for mapping tool name variants (aliases, case variations, separator styles) to canonical `ToolType` values used across the OpenFrame platform.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`normalizeToolType()`** - Converts tool name variants to canonical ToolType, returns undefined for invalid inputs
7
- - **`normalizeToolTypeWithFallback()`** - Same as above but defaults to 'SYSTEM' for invalid inputs
8
- - **`toToolLabel()`** - Converts any tool name variant to its display label
9
- - **`isValidToolType()`** - Validates if a string can be normalized to a valid ToolType
10
- - **`getToolTypeAliases()`** - Returns all valid aliases for a given canonical ToolType
11
- - **`getToolLabel()`** - Gets display label for a canonical ToolType
12
- - **`toolAliasMap`** - Internal mapping of tool name variants to canonical types
6
+ | Export | Description |
7
+ |---|---|
8
+ | `normalizeToolType(input?)` | Converts any tool name variant to a canonical `ToolType`; returns `undefined` if no match |
9
+ | `normalizeToolTypeWithFallback(input?)` | Same as above but defaults to `'SYSTEM'` when no match is found |
10
+ | `toToolLabel(input?)` | Converts any tool name variant to its human-readable display label |
11
+ | `isValidToolType(input?)` | Returns `true` if the input resolves to a known `ToolType` |
12
+ | `getToolTypeAliases(toolType)` | Returns all alias strings that map to a given canonical `ToolType` |
13
+ | `getToolLabel(toolType)` | Returns the display label for a canonical `ToolType` |
14
+ | `toolAliasMap` | Internal lookup table covering all supported tools: `FLEET_MDM`, `MESHCENTRAL`, `AUTHENTIK`, `OPENFRAME`, `OPENFRAME_CHAT`, `OPENFRAME_CLIENT`, `OPENFRAME_RMM`, `OSQUERY`, `SYSTEM` |
13
15
 
14
16
  ## Usage Example
15
17
 
16
18
  ```typescript
17
- import {
18
- normalizeToolType,
19
- normalizeToolTypeWithFallback,
19
+ import {
20
+ normalizeToolType,
21
+ normalizeToolTypeWithFallback,
20
22
  toToolLabel,
21
- isValidToolType
23
+ isValidToolType,
24
+ getToolTypeAliases,
22
25
  } from './tool-utils'
23
26
 
24
27
  // Normalize various input formats
25
- normalizeToolType('FLEET-MDM') // => 'FLEET_MDM'
26
- normalizeToolType('unknown') // => undefined
28
+ normalizeToolType('rmm') // => 'OPENFRAME_RMM'
29
+ normalizeToolType('FLEET-MDM') // => 'FLEET_MDM'
30
+ normalizeToolType('unknown') // => undefined
27
31
 
28
- // With fallback to SYSTEM
29
- normalizeToolTypeWithFallback('mesh') // => 'MESHCENTRAL'
30
- normalizeToolTypeWithFallback('invalid') // => 'SYSTEM'
32
+ // Safe fallback for unknown inputs
33
+ normalizeToolTypeWithFallback('unknown') // => 'SYSTEM'
31
34
 
32
- // Convert to display labels
33
- toToolLabel('fleet_mdm') // => 'Fleet'
35
+ // Human-readable labels
36
+ toToolLabel('fleet-mdm') // => 'Fleet'
37
+ toToolLabel('rmm') // => 'RMM'
34
38
 
35
- // Validation
36
- isValidToolType('authentik') // => true
37
- isValidToolType('invalid') // => false
39
+ // Validation guard
40
+ if (isValidToolType(userInput)) {
41
+ // safe to use as ToolType
42
+ }
43
+
44
+ // Enumerate all aliases for a tool (e.g. docs or validation UI)
45
+ getToolTypeAliases('FLEET_MDM')
46
+ // => ['FLEET', 'FLEET_MDM', 'FLEET-MDM', 'FLEETMDM', 'fleet', ...]
38
47
  ```
39
48
 
40
- The utility supports all major MSP tools including Fleet MDM, MeshCentral, Authentik, and OpenFrame components with comprehensive alias mapping for different naming conventions.
49
+ ## Notes
50
+
51
+ - Resolution order: exact match → uppercase → lowercase
52
+ - All separator styles are supported: underscores (`FLEET_MDM`), hyphens (`fleet-mdm`), and concatenated (`fleetmdm`)
53
+ - Agent suffixes like `fleetmdm-agent` and `openframe-rmm-agent` are included in the alias map
54
+
55
+ **Source:** [`tool-utils.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/tool-utils.ts)
@@ -0,0 +1,64 @@
1
+ <!-- source-hash: e02e3bf5bd0b2062565eb3542938d795 -->
2
+ Builds hierarchical document trees from flat record lists using a generic 3-pass algorithm, shared across all doc-source DALs in the OpenFrame platform.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `TreeNodeBase` | Interface | Base shape for tree nodes — extend with domain-specific fields |
9
+ | `formatDocName` | Function | Strips `.md` extension, handles `README` casing, and humanizes hyphenated names |
10
+ | `sortTreeChildren` | Function | Recursively sorts nodes: README first → folders → files, each sub-group ordered by `sortOrder` then alphabetically |
11
+ | `buildDocumentTree` | Function | Generic 3-pass tree builder accepting mapper and path resolver callbacks |
12
+
13
+ ## 3-Pass Algorithm
14
+
15
+ ```mermaid
16
+ graph TD
17
+ Pass1["Pass 1: Map flat records to nodes"] --> Pass2["Pass 2: Resolve parent paths and build hierarchy"]
18
+ Pass2 --> Pass3["Pass 3: Sort children recursively"]
19
+ Pass3 --> Root["Return root nodes"]
20
+ ```
21
+
22
+ ## Usage Example
23
+
24
+ ```typescript
25
+ import { buildDocumentTree, formatDocName, TreeNodeBase } from './tree-builder'
26
+
27
+ interface DocNode extends TreeNodeBase {
28
+ slug: string
29
+ }
30
+
31
+ interface DbDoc {
32
+ path: string
33
+ parent_path: string | null
34
+ name: string
35
+ type: 'file' | 'folder'
36
+ }
37
+
38
+ const docs: DbDoc[] = fetchDocsFromDb()
39
+
40
+ const tree = buildDocumentTree<DocNode, DbDoc>(
41
+ docs,
42
+ (doc) => ({
43
+ id: doc.path,
44
+ name: formatDocName(doc.name),
45
+ path: doc.path,
46
+ type: doc.type,
47
+ slug: doc.path.split('/').pop() ?? '',
48
+ children: [],
49
+ }),
50
+ (doc) => doc.parent_path, // Pass 2: explicit parent path
51
+ (doc) => doc.path // Pass 2: node's own path key
52
+ )
53
+ ```
54
+
55
+ ## Sort Order
56
+
57
+ | Priority | Rule |
58
+ |---|---|
59
+ | 1 | `README` / `readme.md` always first |
60
+ | 2 | Folders before files |
61
+ | 3 | Ascending `sortOrder` (nodes without it sort last) |
62
+ | 4 | Alphabetical (locale-insensitive) |
63
+
64
+ **Source:** [`lib/tree-builder.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/lib/tree-builder.ts)
@@ -0,0 +1,42 @@
1
+ <!-- source-hash: a8a83c1fb84a9906fd7502112718264a -->
2
+ Isomorphic SSOT module for stable per-element identity on `video_bites` / `teasers` JSONB array elements. Provides ID generation, ID stamping, and the canonical element-matching predicate shared across the admin editor (browser) and Mux reconciliation sweep (Node).
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `BiteIdentity` | Interface | Identity-relevant subset of `VideoTeaser` (`id?`, `url`, `source_url?`) |
9
+ | `BITE_ID_RE` | `RegExp` | Validates 8 lowercase hex char IDs — collision-safe within a single array |
10
+ | `generateBiteId()` | Function | Produces a new 8-hex ID via `crypto.randomUUID()` |
11
+ | `ensureBiteIds()` | Function | Stamps missing IDs and re-stamps in-array duplicates; returns same reference when unchanged |
12
+ | `matchBiteElement()` | Function | Canonical three-leg predicate for identifying the same clip across array states |
13
+
14
+ ## Usage Example
15
+
16
+ ```typescript
17
+ import { ensureBiteIds, matchBiteElement } from './video-bite-id'
18
+
19
+ // Stamp incoming bites before persistence
20
+ const { bites, changed } = ensureBiteIds(rawBites)
21
+ if (changed) await persistBites(bites)
22
+
23
+ // Match an incoming element against the existing array (multiset — consume each existing once)
24
+ const matched = existingBites.find(existing => matchBiteElement(existing, incoming))
25
+ if (matched) {
26
+ // Carry matched.id forward — id equality, url match, or source_url flip
27
+ }
28
+ ```
29
+
30
+ ## Matching Legs
31
+
32
+ `matchBiteElement` uses an **any-of** strategy (not short-circuit on ID mismatch) to handle cases where two sides represent the same clip with different IDs:
33
+
34
+ 1. **ID equality** — both sides carry an ID and they match
35
+ 2. **URL equality** — `incoming.url === existing.url` (pre-flip sessions, plain re-saves)
36
+ 3. **Source URL flip** — `incoming.url === existing.source_url` (Mux HLS pipeline already flipped the URL; redelivered Vizard ingests)
37
+
38
+ > **Caller contract:** When matching a whole incoming array, each existing element must be consumed at most once to prevent duplicate incoming URLs from cloning a single element's ID.
39
+
40
+ ---
41
+
42
+ **Source:** [`video-bite-id.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video-bite-id.ts)