@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,65 @@
1
+ <!-- source-hash: 5df51000b55f2d031915f5b4412ac8e6 -->
2
+ Reconciles persisted dialog history (processed GraphQL pages) with realtime messages accumulated from streaming chunks, preventing both duplicate and lost turns across MSP chat interfaces (Mingo, tickets, openframe-chat).
3
+
4
+ ## Key Components
5
+
6
+ ### Interfaces & Types
7
+
8
+ - **`MergeableChatMessage`** — Minimal structural contract for mergeable messages; hosts pass their own type and get it back. Includes optional `streamSeq` for per-message coverage resolution.
9
+ - **`HistoryMergeInput<M>`** — Input shape for `mergeHistoryWithRealtime`, encapsulating processed history, existing realtime messages, seq signals, and fetch timestamps.
10
+
11
+ ### Constants
12
+
13
+ - **`SYNTHETIC_REALTIME_ID_PREFIXES`** — Cross-host contract listing all client-minted ID prefixes (`assistant-`, `user-`, `direct-`, `system-`, `error-`). Centralised here to prevent double-rendering of persisted/synthetic message pairs.
14
+
15
+ ### Functions
16
+
17
+ | Function | Description |
18
+ |---|---|
19
+ | `mergeHistoryWithRealtime<M>` | Core merge logic. Applies seq-based coverage, per-role max seq, approval batch reconciliation, and wall-clock fallback to produce a single deduplicated message list. |
20
+ | `flattenMessagePagesChronological<T>` | Flattens DESC-sorted GraphQL pages into a single chronological array. |
21
+ | `maxPersistedStreamSeq` | Computes the highest `lastChunkStreamSeq` across all history pages; used as the `historyMaxStreamSeq` input and JetStream replay offset. |
22
+ | `assistantAnswerText` | Extracts rendered text from an assistant message for content-based deduplication fallback. |
23
+
24
+ ## Usage Example
25
+
26
+ ```typescript
27
+ import {
28
+ mergeHistoryWithRealtime,
29
+ flattenMessagePagesChronological,
30
+ maxPersistedStreamSeq,
31
+ } from '@openframe-oss-lib/history-merge'
32
+
33
+ const processedHistory = flattenMessagePagesChronological(queryData?.pages)
34
+ const historyMaxStreamSeq = maxPersistedStreamSeq(queryData?.pages)
35
+
36
+ const merged = mergeHistoryWithRealtime({
37
+ processedHistory,
38
+ existingMessages: store.messages,
39
+ streamingMessageId: activeStreamId ?? null,
40
+ historyFetchedAt: dataUpdatedAt,
41
+ historyMaxStreamSeq,
42
+ realtimeSeenStreamSeq: store.lastSeenSeq,
43
+ })
44
+
45
+ store.setMessages(merged)
46
+ ```
47
+
48
+ ## Coverage Resolution Priority
49
+
50
+ ```mermaid
51
+ graph TD
52
+ A[Synthetic message] --> B{"Per-row streamSeq\navailable?"}
53
+ B -->|Yes| C{"Same-role history\nmax seq >= synthetic seq?"}
54
+ B -->|No| D{"Global seq\ncoverage known?"}
55
+ C -->|Yes| E[Drop synthetic]
56
+ C -->|No| F[Keep synthetic]
57
+ D -->|Yes| G{"historyMaxStreamSeq\n>= realtimeSeenSeq?"}
58
+ D -->|No| H{"Created after\nhistoryFetchedAt?"}
59
+ G -->|Yes| E
60
+ G -->|No| F
61
+ H -->|Yes| F
62
+ H -->|No| E
63
+ ```
64
+
65
+ > **Source:** [`history-merge.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/history-merge.ts)
@@ -1,46 +1,48 @@
1
- <!-- source-hash: d7e38b48af56d6db68e8de321044b39c -->
2
- Single source of truth for resolving icon name strings (kebab-case or PascalCase) to React components, with sized rendering helpers.
1
+ <!-- source-hash: 179ff4aa1bbfe40397134cf9b75647a6 -->
2
+ Resolves backend `SlashCommandSummary.iconName` strings to React icon components for the OpenFrame chat UI, supporting brand logos, semantic aliases, and the full `icons-v2-generated` library with a single unified entry point.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### Exports
6
+ ### `resolveIcon(iconName, opts?)`
7
+ The primary export — maps any backend `iconName` to an `IconComponent`. Supports two variants:
8
+ - `'design'` (default): Checks `ICON_ALIASES` first, then falls back to `resolveFromLibrary`, then `FileIcon`.
9
+ - `'brand'`: Delegates to `getIconComponent` from the icon registry (brand-colored social glyphs).
7
10
 
8
- | Export | Type | Description |
9
- |--------|------|-------------|
10
- | `ICON_REGISTRY` | `Record<string, IconComponent>` | Kebab-case map of all registered icon names to React components |
11
- | `normalizeIconKey(key)` | `(string) => string` | Converts PascalCase icon names to canonical kebab-case; passes kebab keys through unchanged |
12
- | `getIconComponent(iconName)` | `(string\|null\|undefined) => ComponentType` | Resolves any icon name to a component; falls back to `FileText` |
13
- | `getDynamicIcon(iconName, size, className)` | `(...) => ReactNode` | Renders a sized icon element directly; falls back to `Globe` |
14
- | `DynamicIconSize` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | Size preset type (12px–48px) |
11
+ ### `ICON_ALIASES`
12
+ Static registry mapping backend keys and Figma-canonical aliases to specific components. Covers production `/api/docs/commands` contract keys (`clickup`, `slack`, `hubspot`, `github`, `openframe`), legacy announcement-bar names (`megaphone`, `flamingo`, `bell`), and common generic v2 glyphs.
15
13
 
16
- ### Key Conventions
14
+ ### `resolveFromLibrary(iconName)`
15
+ Generic fallback that resolves any kebab-case name against the full `icons-v2-generated` namespace by convention (`chart-pie` → `ChartPieIcon`). Tries two PascalCase candidates to handle the inconsistent `ai`/`AI` token in generator output.
17
16
 
18
- - **Registry keys** are always kebab-case (e.g. `'dollar-sign'`, `'book-open'`)
19
- - **Brand vs. Lucide variants** share the same base name: `'github'` brand icon, `'github-lucide'` Lucide outline
20
- - **PascalCase aliases** (`social_platforms.icon_name` column) are resolved via `PASCAL_TO_KEBAB_ALIASES` before lookup
21
- - **Unknown names** never crash render — `getIconComponent` falls back to `FileText`, `getDynamicIcon` falls back to `Globe`
17
+ ### `ICON_OPTIONS`
18
+ Curated `ReadonlyArray<IconOption>` for the admin slash-command icon picker (`/admin/chat-config`). Each entry has a `key` (kebab-case DB value) and a `label` (human-readable dropdown text).
19
+
20
+ ### `sizedLogo(Logo)`
21
+ HOC that wraps brand logos (which lack a `size` prop) to satisfy the `IconComponent` contract by driving dimensions via inline `style`.
22
+
23
+ ### `IconComponent` / `IconOption`
24
+ Exported TypeScript types for the shared `{ size, className, color }` icon contract and picker entries.
22
25
 
23
26
  ## Usage Example
24
27
 
25
28
  ```typescript
26
- import { getIconComponent, getDynamicIcon, normalizeIconKey } from './icon-registry'
29
+ import { resolveIcon } from './icon-library'
30
+
31
+ // Design variant (default) — resolves to SlackLogoGreyIcon
32
+ const SlackIcon = resolveIcon('slack')
27
33
 
28
- // Resolve a component for use in JSX (kebab or PascalCase both work)
29
- const Icon = getIconComponent('rocket') // → Rocket
30
- const Icon2 = getIconComponent('LinkedInIcon') // → LinkedInIcon (via alias)
31
- const Icon3 = getIconComponent('unknown-icon') // → FileText (fallback)
34
+ // Alias resolution resolves to Rocket02Icon
35
+ const RocketIcon = resolveIcon('rocket-02')
32
36
 
33
- // Render a sized icon node directly
34
- const node = getDynamicIcon('youtube', 'lg') // 32px YouTubeIcon with brand color
35
- const node2 = getDynamicIcon('dollar-sign', 'sm', 'text-green-500')
37
+ // Generic library resolution no alias needed
38
+ const ChartIcon = resolveIcon('chart-pie')
36
39
 
37
- // Normalize a PascalCase key manually
38
- normalizeIconKey('GitHubIcon') // → 'github'
39
- normalizeIconKey('globe') // → 'globe' (pass-through)
40
- ```
40
+ // Null/unknown input falls back to FileIcon
41
+ const FallbackIcon = resolveIcon(null)
41
42
 
42
- ### Adding a New Icon
43
+ // Brand variant delegates to getIconComponent
44
+ const BrandSlack = resolveIcon('slack', { variant: 'brand' })
43
45
 
44
- 1. Import the component at the top of the file
45
- 2. Add a `'kebab-name': Component` entry to `ICON_REGISTRY`
46
- 3. If the icon is stored as PascalCase in any DB column, add a `PascalName → 'kebab-name'` row to `PASCAL_TO_KEBAB_ALIASES`
46
+ // Render in JSX
47
+ <SlackIcon size={24} className="text-ods-text-secondary" />
48
+ ```
@@ -0,0 +1,44 @@
1
+ <!-- source-hash: 7ecf3f317fa8164ab2bb260642085dcc -->
2
+ Centralized icon registry mapping string icon names to React components, serving as the single source of truth for icon lookups across the OpenFrame lib and hub.
3
+
4
+ ## Key Components
5
+
6
+ ### `ICON_REGISTRY`
7
+ A kebab-case keyed record mapping icon names to `IconComponent` types. Covers Lucide React icons, brand icons (Slack, GitHub, HubSpot, LinkedIn, etc.), and the OpenFrame logo. For social platform icons where both a brand and Lucide variant exist, the kebab key resolves to the brand component while a `-lucide` suffix key accesses the outline variant (e.g., `'github'` → `GitHubIcon`, `'github-lucide'` → `Github`).
8
+
9
+ ### `normalizeIconKey(key: string): string`
10
+ Converts PascalCase icon identifiers (from `social_platforms.icon_name` DB column) to their canonical kebab-case registry keys using `PASCAL_TO_KEBAB_ALIASES`. Kebab-case keys pass through unchanged.
11
+
12
+ ### `getIconComponent(iconName)`
13
+ Resolves an icon name to its React component. Handles `null`/`undefined` gracefully, falling back to `FileText` so UI chips always render with a glyph.
14
+
15
+ ### `getDynamicIcon(iconName, size, className)`
16
+ Renders an icon as a `ReactNode` with a size preset (`xs`/`sm`/`md`/`lg`/`xl`) and optional className. Applies per-icon color overrides (e.g., LinkedIn blue, YouTube red) and falls back to `Globe` for unknown names.
17
+
18
+ ### `OpenFrameLogoIcon`
19
+ A local wrapper around `RawOpenFrameLogo` that wires the logo's outer frame color to `currentColor`, making it visible on dark surfaces alongside Lucide icons.
20
+
21
+ ## Usage Example
22
+
23
+ ```typescript
24
+ import { getIconComponent, getDynamicIcon, normalizeIconKey } from './icon-registry'
25
+
26
+ // Resolve a component for custom rendering
27
+ const Icon = getIconComponent('hubspot')
28
+ // <Icon className="w-5 h-5 text-orange-500" />
29
+
30
+ // Handle PascalCase keys from social_platforms.icon_name
31
+ const Icon2 = getIconComponent('LinkedInIcon') // resolves to LinkedInIcon component
32
+
33
+ // Render a sized icon node directly
34
+ const node = getDynamicIcon('rocket', 'lg') // 32px Rocket
35
+ const node2 = getDynamicIcon('youtube', 'sm') // 16px YouTubeIcon, color: #FF0000
36
+
37
+ // Normalize a key manually
38
+ normalizeIconKey('GitHubIcon') // → 'github'
39
+ normalizeIconKey('github') // → 'github' (pass-through)
40
+ ```
41
+
42
+ **Adding a new icon:** Import the component, add a `'kebab-key': Component` entry to `ICON_REGISTRY`, and add a `PascalName → 'kebab-key'` row to `PASCAL_TO_KEBAB_ALIASES` if the icon arrives from a PascalCase DB column.
43
+
44
+ **Source:** [`icon-registry.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/icon-registry.ts)
@@ -1,20 +1,21 @@
1
- <!-- source-hash: 85c0af6cd361347beeabcd097260378a -->
2
- Barrel export module that consolidates and re-exports all message processing, chat navigation, UI styling, and content utility functions for chat interfaces.
1
+ <!-- source-hash: 0435e7889d0ba1d3a5186507e28737c9 -->
2
+ Barrel export module for the message processing utilities library, re-exporting all public APIs from specialized sub-modules covering chat message parsing, navigation, attachments, icons, and more.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Category | Exports |
7
- |----------|---------|
8
- | **Chunk Parsing** | `parseChunkToAction`, `isControlChunk`, `isErrorChunk`, `isMetadataChunk`, `extractTextFromChunk` |
9
- | **Message Accumulation** | `MessageSegmentAccumulator`, `createMessageSegmentAccumulator`, `AccumulatorCallbacks` |
10
- | **Historical Messages** | `processHistoricalMessages`, `extractErrorMessages`, `processHistoricalMessagesWithErrors` |
11
- | **Chat Navigation** | `handleChatNavClick`, `resolveExternalNavigation`, `decideNewTab`, `computeIsNewTab`, `buildAnchorProps` |
12
- | **Proxy Auth** | `getChatProxyAuth`, `setChatProxyAuth`, `clearChatProxyAuth`, `applyProxyAuth`, `chatAuthedFetch` |
13
- | **Attachments** | `formatChatAttachmentMarkdownForBubble`, `stripChatAttachmentMarkdown`, `buildChatAttachmentViewUrl` |
14
- | **UI / Styling** | `chatChipClass`, compact card class constants (`COMPACT_CARD_*`), `getStatusColorScheme` |
15
- | **Icon Registry** | `ICON_REGISTRY`, `getIconComponent`, `normalizeIconKey`, `getDynamicIcon` |
16
- | **Source Utilities** | `getSourceIconName`, `getSourceLabel`, `resolveSourceRowCTA`, `resolveSourceIcon` |
17
- | **Slash Commands** | `parseWireCommandOverride`, `sanitizeTitleForChat`, `buildDiscussAddendum` |
6
+ | Export Group | Source Module | Description |
7
+ |---|---|---|
8
+ | Chunk parsing | `chunk-parser` | Parse streaming chunks into actions, detect control/error/metadata chunks |
9
+ | Segment accumulator | `message-segment-accumulator` | Accumulate streaming message segments with callbacks |
10
+ | Historical messages | `process-historical-messages` | Process and reconcile chat history with error extraction |
11
+ | History merge | `history-merge` | Reconcile persisted history with realtime stream data |
12
+ | Navigation | `execute-navigation`, `nav-click-handler`, `decide-new-tab` | Unified navigation primitive for new-tab/same-tab, internal/external, embed/host routing |
13
+ | Chat attachment | `chat-attachment-markdown` | Format and strip attachment markdown, URL/token helpers |
14
+ | Icon registry | `icon-registry`, `icon-library`, `source-icons` | Single source of truth for icon-name → component lookups |
15
+ | Proxy auth | `chat-proxy-auth-storage`, `chat-authed-fetch` | localStorage adapter and authenticated fetch wrapper |
16
+ | Slash commands | `slash-dispatch-utils` | Command parsing, entity filtering, and dispatch utilities |
17
+ | Compact card | `compact-card-classes` | Shared CSS class constants and safe-href guard |
18
+ | Scripted stream | `scripted-stream` | Re-exported wholesale via `export *` |
18
19
 
19
20
  ## Usage Example
20
21
 
@@ -22,32 +23,35 @@ Barrel export module that consolidates and re-exports all message processing, ch
22
23
  import {
23
24
  parseChunkToAction,
24
25
  createMessageSegmentAccumulator,
25
- handleChatNavClick,
26
- getChatProxyAuth,
27
- getIconComponent,
28
- formatChatAttachmentMarkdownForBubble,
29
- decideNewTab,
26
+ executeNavigation,
27
+ resolveIcon,
30
28
  getStatusColorScheme,
31
- } from '@flamingo/chat-utils'
29
+ mergeHistoryWithRealtime,
30
+ formatChatAttachmentMarkdownForBubble,
31
+ } from '@openframe/chat-utils'
32
32
 
33
- // Parse a streaming chunk from the AI response
33
+ // Parse a streaming chunk
34
34
  const action = parseChunkToAction(rawChunk)
35
35
 
36
- // Accumulate streamed message segments
36
+ // Accumulate message segments from a stream
37
37
  const accumulator = createMessageSegmentAccumulator({
38
- onSegmentComplete: (segment) => console.log('Segment:', segment),
38
+ onSegmentComplete: (segment) => console.log('Segment done:', segment),
39
39
  })
40
40
 
41
- // Resolve navigation target for a chat link
42
- const { openInNewTab } = decideNewTab({
43
- href: 'https://app.example.com/tickets/123',
44
- surface: 'chat-bubble',
45
- mode: 'web',
41
+ // Execute navigation respecting new-tab rules
42
+ executeNavigation({
43
+ href: '/tickets/123',
44
+ event: clickEvent,
45
+ surface: 'chat',
46
46
  })
47
47
 
48
- // Look up a registered icon by kebab-case key
49
- const Icon = getIconComponent('clickup')
48
+ // Resolve an icon by name
49
+ const Icon = resolveIcon('clickup')
50
+
51
+ // Get agent status color scheme
52
+ const colors = getStatusColorScheme('online')
53
+ ```
54
+
55
+ ## Source
50
56
 
51
- // Apply agent status color scheme to UI
52
- const colors = getStatusColorScheme('running')
53
- ```
57
+ [`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
@@ -1,35 +1,39 @@
1
- <!-- source-hash: 4303371bd78ed68ce85468361247ddc3 -->
2
- Determines whether a URL is cross-origin by checking for an explicit host, used to drive new-tab navigation decisions in chat and link rendering.
1
+ <!-- source-hash: 44dae2d6eddc55109e9284520b771589 -->
2
+ Determines whether a URL string refers to a cross-origin resource, using purely static string analysis without any `window` or runtime context. Designed to be SSR-deterministic, avoiding React hydration mismatches caused by server/client value divergence.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `isCrossOriginUrl(url)`
7
- - **Input:** `string | null | undefined`
8
- - **Returns:** `boolean` — `true` if the URL has an explicit host (absolute or protocol-relative), `false` for relative paths or falsy values
6
+ **`isCrossOriginUrl(url)`**
7
+ Returns `true` if the URL would resolve to a different origin; `false` for relative paths, fragments, query-only strings, and nullish values.
9
8
 
10
- ## Logic
11
-
12
- ```text
13
- null / undefined / "" → false
14
- /relative/path false (same-origin by convention)
15
- //protocol-relative true (explicit host)
16
- https://example.com → true (explicit host)
17
- http://example.com true (explicit host)
18
- ```
9
+ | Input pattern | Result | Reason |
10
+ |---|---|---|
11
+ | `null` / `undefined` / `""` | `false` | No URL |
12
+ | `#anchor`, `?tab=x` | `false` | Same-document reference |
13
+ | `/path/to/page` | `false` | Relative path, same origin |
14
+ | `//cdn.example.com/...` | `true` | Protocol-relative, explicit host |
15
+ | `https://flamingo.run/...` | `true` | Absolute URL, explicit host |
16
+ | `http://external.com/...` | `true` | Absolute URL, explicit host |
19
17
 
20
18
  ## Usage Example
21
19
 
22
20
  ```typescript
23
21
  import { isCrossOriginUrl } from './is-cross-origin-url'
24
22
 
25
- isCrossOriginUrl('/support') // falsesame-origin
26
- isCrossOriginUrl('//cdn.example.com/file.js') // true — cross-origin
27
- isCrossOriginUrl('https://flamingo.run') // true — cross-origin
28
- isCrossOriginUrl(null) // false — falsy guard
23
+ // Navigation link open externally if cross-origin
24
+ const href = buildContentURL(item)
25
+ const openInNewTab = isCrossOriginUrl(href)
26
+
27
+ // <a href={href} target={openInNewTab ? '_blank' : undefined} />
28
+
29
+ isCrossOriginUrl('/support') // false — same-origin relative path
30
+ isCrossOriginUrl('https://flamingo.run') // true — external absolute URL
31
+ isCrossOriginUrl('#section') // false — fragment, same page
32
+ isCrossOriginUrl(null) // false — safe nullish handling
29
33
  ```
30
34
 
31
- ## Design Notes
35
+ ## Notes
32
36
 
33
- - **SSR-deterministic:** avoids `window.location` comparison, which previously caused React hydration mismatches when SSR (no `window`) and client produced different results for the same URL
34
- - **Convention-based:** same-origin navigation within the app always uses relative paths; any URL with a host is treated as external regardless of the actual deployment origin
35
- - **Scope:** only handles the fallback case in `decideNewTab`; absolute same-platform URLs are caught earlier by the `targetPlatform !== currentSource` branch and never reach this function
37
+ - Intentionally avoids `window.location` comparisons to stay SSR-safe
38
+ - Same-platform absolute URLs (e.g. from `buildContentURL`) are expected to be handled upstream via `targetPlatform` checks before this function is reached
39
+ - Source: [`packages/utils/is-cross-origin-url.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/packages/utils/is-cross-origin-url.ts)
@@ -1,41 +1,62 @@
1
- <!-- source-hash: 17a77a7a52f5be3583fd5569ca4bb36f -->
2
- Manages the accumulation and lifecycle of message segments during real-time AI chat streaming, handling text, tool executions, and approval workflows.
1
+ <!-- source-hash: dab060497e2fa3825072e74aa1f72abf -->
2
+ Manages the accumulation and lifecycle of streaming message segments in a chat interface, handling text, tool executions, and approval workflows during real-time or historical message processing.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`MessageSegmentAccumulator`** — Core class that tracks all segment types (`text`, `thinking`, `tool_execution`, `approval_request`, `approval_batch`) in a stateful array
7
- - **`AccumulatorCallbacks`** Interface for wiring `onApprove`/`onReject` handlers into approval segments
8
- - **`initializeWithState()`** — Restores accumulator from serialized state across reconnections or page refreshes
9
- - **`appendText()` / `appendThinking()`** — Coalesces consecutive same-type segments instead of creating duplicates
10
- - **`addToolExecution()`** — Routes `EXECUTING_TOOL` → `EXECUTED_TOOL` state transitions, merging into approval batches when a `toolExecutionRequestId` matches
11
- - **`addApprovalBatch()`** Upserts batch approval segments by `approvalRequestId` to prevent duplicates during replay
12
- - **`resolvePendingApprovalForExecution()`** Implicitly marks the latest pending approval as approved when a tool execution arrives (handles observer streams with no `APPROVAL_RESULT` chunk)
13
- - **`getState()` / `reset()`** Serialization and teardown helpers
6
+ ### `MessageSegmentAccumulator` (class)
7
+ Core class managing segment state across the message lifecycle.
8
+
9
+ | Method | Description |
10
+ |---|---|
11
+ | `appendText(text)` | Appends to the last text segment or creates a new one |
12
+ | `appendThinking(text)` | Same coalescing logic for `thinking`-type segments |
13
+ | `addToolExecution(segment)` | Routes `EXECUTING_TOOL` / `EXECUTED_TOOL` events; patches batch approvals or standalone segments |
14
+ | `addApprovalRequest(...)` | Pushes a single `approval_request` segment with callbacks |
15
+ | `addApprovalBatch(...)` | Upserts an `approval_batch` segment by `approvalRequestId` |
16
+ | `initializeWithState(state)` | Restores segments, pending approvals, and executing tool maps (e.g. after page refresh) |
17
+ | `getState()` | Returns serializable `AccumulatorState` snapshot |
18
+ | `reset()` / `resetSegments()` | Clears all state or only segments |
19
+
20
+ ### `AccumulatorCallbacks` (interface)
21
+ Optional `onApprove` / `onReject` async callbacks injected into approval segments.
22
+
23
+ ### Private helpers
24
+ - `applyExecutionToBatch` — merges tool execution results into an existing `approval_batch` segment
25
+ - `resolvePendingApprovalForExecution` — implicitly marks the latest pending `approval_request` as approved when a tool execution arrives (handles observer sessions that never receive `APPROVAL_RESULT`)
14
26
 
15
27
  ## Usage Example
16
28
 
17
29
  ```typescript
30
+ import { MessageSegmentAccumulator } from './message-segment-accumulator'
31
+
18
32
  const accumulator = new MessageSegmentAccumulator({
19
- onApprove: async (requestId) => await approveRequest(requestId),
20
- onReject: async (requestId) => await rejectRequest(requestId),
33
+ onApprove: async (requestId) => { /* handle approval */ },
34
+ onReject: async (requestId) => { /* handle rejection */ },
21
35
  })
22
36
 
23
- // Restore state after reconnection
24
- accumulator.initializeWithState({
25
- existingSegments: previousSegments,
26
- pendingApprovals: savedApprovals,
27
- })
37
+ // Streaming text chunks
38
+ accumulator.appendText('Hello, ')
39
+ accumulator.appendText('world!')
28
40
 
29
- // Stream incoming chunks
30
- accumulator.appendText('Checking your ')
31
- accumulator.appendText('ticket status...')
41
+ // Tool execution lifecycle
42
+ accumulator.addToolExecution({
43
+ type: 'tool_execution',
44
+ data: { type: 'EXECUTING_TOOL', toolFunction: 'runScript', integratedToolType: 'shell', toolExecutionRequestId: 'req-1' }
45
+ })
32
46
 
33
- // Handle tool lifecycle
34
47
  accumulator.addToolExecution({
35
48
  type: 'tool_execution',
36
- data: { type: 'EXECUTING_TOOL', toolFunction: 'getTicket', toolTitle: 'Get Ticket', ... },
49
+ data: { type: 'EXECUTED_TOOL', toolFunction: 'runScript', integratedToolType: 'shell', toolExecutionRequestId: 'req-1', result: 'ok', success: true }
37
50
  })
38
51
 
39
- // Retrieve rendered segments
40
- const segments = accumulator.getSegments()
41
- ```
52
+ // Serialize and restore across reconnects
53
+ const state = accumulator.getState()
54
+ const restored = new MessageSegmentAccumulator()
55
+ restored.initializeWithState(state)
56
+
57
+ console.log(restored.getSegments())
58
+ ```
59
+
60
+ ## Source
61
+
62
+ [`message-segment-accumulator.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/message-segment-accumulator.ts)
@@ -1,44 +1,39 @@
1
- <!-- source-hash: 24346a4b70daaa3c49e151b19cf6cf28 -->
2
- Provides pure helper functions for computing new-tab navigation decisions and building `<a>` anchor attribute objects used by chat-rendered links across inline cards, source chips, and runtime nav wrappers.
1
+ <!-- source-hash: bdc2b1fb114772393dd4ed7a7eea4c6f -->
2
+ Pure helpers for computing new-tab navigation decisions and assembling `<a>` element attribute objects for chat-rendered links.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Signature | Purpose |
7
- |--------|-----------|---------|
8
- | `computeIsNewTab` | `(runtime, href, targetPlatform) → boolean` | Single source of truth for the new-tab rule; always returns `true` in `embed` mode, defers to `decideNewTab` callback or lib default in `host` mode |
9
- | `newTabAnchorAttrs` | `(isNewTab) → { target?, rel? }` | Returns `_blank` + `noopener noreferrer` pair or empty object; safe to spread directly into JSX `<a>` |
10
- | `buildAnchorProps` | `(href, isNewTab) { href, target?, rel? } \| undefined` | Combines href + anchor attrs into a single `anchorProps` slot; returns `undefined` (not `{}`) when href is absent so card components can branch on `!= null` |
6
+ ### `isSameOriginAbsoluteHref(href)` *(internal)*
7
+ Checks whether a given `href` is an absolute `http(s)` URL on the current page's origin. SSR-safe — returns `false` when `window` is undefined.
8
+
9
+ ### `computeIsNewTab(runtime, href, targetPlatform)`
10
+ **Single source of truth** for the new-tab decision across inline cards, source chips, and `NavLinkAnchorViaRuntime`. Implements two modes:
11
+ - **`embed` mode** — opens new tab except for same-origin absolute hrefs (e.g. embedder in-app routes under `/help-center`).
12
+ - **`host` mode** — delegates to `runtime.navigation.decideNewTab` or falls back to `libDecideNewTab`.
13
+
14
+ ### `newTabAnchorAttrs(isNewTab)`
15
+ Returns `{ target: '_blank', rel: 'noopener noreferrer' }` when `isNewTab` is `true`, or `{}` otherwise. Ensures new-tab links always include `noopener noreferrer` to prevent tab-nabbing.
16
+
17
+ ### `buildAnchorProps(href, isNewTab)`
18
+ Combines `href` and new-tab attributes into a single `anchorProps` object. Returns `undefined` (not a falsy object) when `href` is absent, enabling clean conditional rendering between `<a>` and `<span>`.
11
19
 
12
20
  ## Usage Example
13
21
 
14
22
  ```typescript
15
- import {
16
- computeIsNewTab,
17
- buildAnchorProps,
18
- } from './nav-anchor-props'
19
-
20
- // Inside a card dispatcher wrapper
21
- function CardLink({ runtime, chatRef, targetPlatform }) {
22
- const isNewTab = computeIsNewTab(runtime, chatRef.url, targetPlatform)
23
- const anchorProps = buildAnchorProps(chatRef.url, isNewTab)
24
-
25
- return anchorProps != null
26
- ? <a {...anchorProps}>{children}</a>
27
- : <span>{children}</span>
28
- }
29
- ```
23
+ import { computeIsNewTab, buildAnchorProps } from './nav-anchor-props'
24
+
25
+ // Inside a card wrapper component
26
+ const isNewTab = computeIsNewTab(runtime, chatRef.url, targetPlatform)
27
+ const anchorProps = buildAnchorProps(chatRef.url, isNewTab)
28
+
29
+ // In JSX renders <a> or <span> based on whether a URL exists
30
+ return anchorProps != null
31
+ ? <a {...anchorProps}>{children}</a>
32
+ : <span>{children}</span>
30
33
 
31
- ## Navigation Mode Rules
32
-
33
- ```mermaid
34
- graph TD
35
- A["computeIsNewTab called"] --> B{"href present?"}
36
- B -- No --> C["return false"]
37
- B -- Yes --> D{"embed mode?"}
38
- D -- Yes --> E["return true (always new-tab)"]
39
- D -- No --> F{"runtime.decideNewTab defined?"}
40
- F -- Yes --> G["call runtime.decideNewTab"]
41
- F -- No --> H["call libDecideNewTab fallback"]
34
+ // Or spread newTabAnchorAttrs directly when href is already known
35
+ import { newTabAnchorAttrs } from './nav-anchor-props'
36
+ <a href={href} {...newTabAnchorAttrs(isNewTab)} />
42
37
  ```
43
38
 
44
- > **Important:** Do not inline the `embed` short-circuit or `decideNewTab` fallback chain elsewhere. `computeIsNewTab` is the **only** place this logic should live.
39
+ **Source:** [`nav-anchor-props.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/nav-anchor-props.ts)
@@ -1,47 +1,43 @@
1
- <!-- source-hash: 52e6bfa6e916758ef4a95f83d0eb97da -->
2
- Unified click-handler for chat-rendered navigation links. Centralizes the routing decision logic (same-tab vs. new-tab, embed vs. host, modifier-key pass-through) so callers like chip blocks, entity-card wrappers, and markdown anchor wrappers share a single implementation.
1
+ <!-- source-hash: dd19b1c249728537a01b0a89f3b94541 -->
2
+ Thin compatibility wrapper that forwards chat-rendered navigation link clicks to the unified `executeNavigation` primitive.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### `ChatNavClickInput`
7
- Input interface describing the navigation target:
8
- - `href` — destination URL (required)
9
- - `path` — optional internal route path
10
- - `targetPlatform` — optional platform hint for routing decisions
7
+ Interface describing the navigation target passed to the handler:
11
8
 
12
- ### `NavClickEvent`
13
- Structural mouse-event interface (subset of `React.MouseEvent`) that keeps the handler callable from non-anchor surfaces without requiring a cast.
9
+ | Field | Type | Description |
10
+ |---|---|---|
11
+ | `href` | `string` | Destination URL |
12
+ | `path` | `string \| null` | Optional soft-nav path override |
13
+ | `targetPlatform` | `string \| null` | Target rendering platform hint |
14
14
 
15
- ### `handleChatNavClick(e, runtime, input): boolean`
16
- The core export. Processes a click event against a `ChatRuntime` and returns:
17
- - `true` — handler took action and called `preventDefault()`
18
- - `false` — modifier-click or non-primary button; browser default applies
15
+ ### `handleChatNavClick`
16
+ Delegates directly to [`executeNavigation`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/execute-navigation.ts), preserving the call shape expected by existing chat callers (chip blocks, `<ChatCardNavWrap>`, `<NavLinkAnchorViaRuntime>`). Returns a `boolean` indicating whether the click was handled.
19
17
 
20
- **Routing rules in priority order:**
21
- 1. Empty `href` → `preventDefault` + no-op
22
- 2. Non-primary button or any modifier key (`meta`, `ctrl`, `shift`, `alt`) → pass through to browser
23
- 3. New-tab decision via `computeIsNewTab` → `runtime.navigation.openExternal` or `window.open`
24
- 4. Same-tab → `runtime.navigation.navigate?.()` → fallback to `window.location.assign`
18
+ > **Deprecated.** New code should call `executeNavigation` directly. The full decision tree (empty-href no-op, modifier/non-primary passthrough, new-tab, same-tab soft-nav with fallback) lives exclusively in `execute-navigation.ts`.
25
19
 
26
20
  ## Usage Example
27
21
 
28
22
  ```typescript
29
23
  import { handleChatNavClick } from './nav-click-handler'
30
- import { useChatRuntime } from '../../../contexts/chat-runtime-context'
31
-
32
- function NavChip({ href, path, targetPlatform }) {
33
- const runtime = useChatRuntime()
34
-
35
- return (
36
- <button
37
- onClick={(e) =>
38
- handleChatNavClick(e, runtime, { href, path, targetPlatform })
39
- }
40
- >
41
- {label}
42
- </button>
43
- )
44
- }
24
+ import { useRouter } from 'next/navigation'
25
+
26
+ const router = useRouter()
27
+
28
+ <a
29
+ href={href}
30
+ onClick={(e) =>
31
+ handleChatNavClick(
32
+ e,
33
+ runtime,
34
+ { href, path: '/dashboard', targetPlatform: 'web' },
35
+ router.push, // fallback for runtimes without navigation.navigate
36
+ )
37
+ }
38
+ >
39
+ Dashboard
40
+ </a>
45
41
  ```
46
42
 
47
- > **Note:** Pass-through (`return false`) preserves native `<a>` semantics for modifier-clicks (e.g., Cmd+Click opens a new tab), so wrapping anchor elements still behave correctly without extra logic in the caller.
43
+ The `fallbackNavigate` parameter accepts `useRouter().push` for same-origin soft-navigation when the `ChatRuntime` does not wire a `navigation.navigate` handler.