@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
@@ -1,26 +1,17 @@
1
- <!-- source-hash: f3fb53b66abf55ba1b2ac14522e64cbb -->
2
- Provides two composable React primitives for the chat compose-box attachment UX: a `+` add-button rendered inline in the bottom controls row, and a horizontal chip strip rendered above the textarea showing staged file previews with upload progress.
1
+ <!-- source-hash: 9b87d21631234ee48c0578e5959504ff -->
2
+ Renders the two primary UI primitives for chat file attachments: a horizontal chip strip displayed above the textarea and a borderless `+` button rendered inline in the bottom-controls row.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### Exports
7
-
8
- | Export | Type | Description |
9
- |--------|------|-------------|
10
- | `ChatAttachmentAddButton` | Component | Borderless `+` icon button for triggering file picker; renders an invisible 28×28 spacer when `attachmentsEnabled` is false to prevent layout shift |
11
- | `ChatAttachmentChipStrip` | Component | Horizontal strip of file chips above the textarea; returns `null` when no attachments are staged |
12
- | `StagedAttachment` | Interface | Shape consumed by the chip strip, mirrors the hub's `useChatAttachments` output |
13
- | `CHAT_ATTACHMENT_MIME_TYPES` | Constant | Allowed MIME types (JPEG, PNG, WebP, GIF, MP4, WebM, QuickTime) excludes `image/svg+xml` for XSS safety |
14
- | `CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER` | Constant | Client-side cap of 5 concurrent staged files |
15
-
16
- ### Internal Helpers
17
-
18
- | Name | Purpose |
19
- |------|---------|
20
- | `AttachmentChip` | Single chip: inline blob thumbnail (images), progress bar overlay, filename, status text, × remove button |
21
- | `useObjectUrl` | Hook managing `URL.createObjectURL` lifecycle — revokes on unmount and file change |
22
- | `formatFileSize` | Human-readable byte formatter (B / KB / MB / GB) |
23
- | `extLabel` | Extracts up to 3-char file extension for non-image chip placeholders |
6
+ | Export | Description |
7
+ |---|---|
8
+ | `ChatAttachmentAddButton` | Icon-only `+` button for triggering file selection; reserves layout space when disabled to prevent CLS |
9
+ | `ChatAttachmentChipStrip` | Horizontal strip of staged-file chips rendered above the input; returns `null` when empty |
10
+ | `AttachmentChip` | Internal chip component showing thumbnail/initials, upload progress, file name, size, and a remove button |
11
+ | `StagedAttachment` | Interface describing a staged file (id, file, status, progress, storagePath, viewToken, errorMessage) |
12
+ | `ChatAttachmentSize` | `'default' \| 'compact'` density union for narrow surfaces like the ticket-drawer composer |
13
+ | `CHAT_ATTACHMENT_MIME_TYPES` | Allow-listed MIME types (images + video); excludes `image/svg+xml` for XSS safety |
14
+ | `CHAT_ATTACHMENT_CONCURRENT_UPLOADS_PER_USER` | Client-side cap of 5 concurrent uploads |
24
15
 
25
16
  ## Usage Example
26
17
 
@@ -28,37 +19,38 @@ Provides two composable React primitives for the chat compose-box attachment UX:
28
19
  import {
29
20
  ChatAttachmentAddButton,
30
21
  ChatAttachmentChipStrip,
31
- StagedAttachment,
22
+ type StagedAttachment,
32
23
  } from './chat-attachment-bar'
33
24
 
34
- function Composebox() {
35
- const { attachments, addFiles, removeFile } = useChatAttachments()
36
- const { attachmentsEnabled } = useChatIdentity()
37
-
25
+ function ComposerToolbar({ attachments, onAdd, onRemove, isStreaming }) {
38
26
  return (
39
27
  <div className="flex flex-col">
40
- {/* Chip strip floats above textarea — hidden when empty */}
28
+ {/* Chip strip floats above the textarea — hidden when empty */}
41
29
  <ChatAttachmentChipStrip
42
30
  attachments={attachments}
43
- onRemove={removeFile}
31
+ onRemove={onRemove}
44
32
  disabled={isStreaming}
33
+ size="compact" // narrow drawer surface
45
34
  />
46
35
 
47
- <textarea placeholder="Message…" />
48
-
49
- {/* Bottom controls row */}
50
- <div className="flex items-center gap-2">
51
- <ChatAttachmentAddButton
52
- attachmentsEnabled={attachmentsEnabled}
53
- attachmentsCount={attachments.length}
54
- onAddFiles={addFiles}
55
- disabled={isStreaming}
56
- />
57
- <ModelDisplay />
58
- </div>
36
+ {/* + button lives in the bottom-controls row */}
37
+ <ChatAttachmentAddButton
38
+ attachmentsEnabled={true} // from useChatIdentity().attachmentsEnabled
39
+ attachmentsCount={attachments.length}
40
+ onAddFiles={onAdd}
41
+ disabled={isStreaming}
42
+ size="compact"
43
+ />
59
44
  </div>
60
45
  )
61
46
  }
62
47
  ```
63
48
 
64
- > **Layout stability note:** `ChatAttachmentAddButton` renders an invisible `<span>` placeholder before `attachmentsEnabled` resolves, preventing the bottom-controls row from shifting when chat identity loads asynchronously (~100–500 ms).
49
+ ## Notes
50
+
51
+ - **No `capture="environment"`** on the hidden file input — prevents iOS Safari from forcing camera-only mode.
52
+ - **Layout stability**: when `attachmentsEnabled` is `false` (async load or anon user), an invisible `<span>` with the same `h-7 w-7` footprint replaces the button, eliminating row-width jumps on identity resolution.
53
+ - Image chips render a local `createObjectURL` blob preview immediately, independent of upload progress.
54
+ - All colors use ODS design tokens; no hex values are used directly.
55
+
56
+ **Source:** [`chat-attachment-bar.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-attachment-bar.tsx)
@@ -0,0 +1,43 @@
1
+ <!-- source-hash: f8f1c7865379c443151b15db768be877 -->
2
+ Presentational footer composer for the OpenFrame chat panel, rendering either a live `ChatInput` or a read-only archived placeholder above the model/usage row, with optional entity-context picker integration.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |--------|------|-------------|
8
+ | `ChatComposer` | Component | Main composer component combining input, context strips, and model row |
9
+ | `ChatComposerProps` | Interface | Full prop contract for the composer |
10
+
11
+ ## Key Behaviors
12
+
13
+ - **Archived mode** — replaces the input with an unarchive prompt banner (`BoxArchiveIcon` + message)
14
+ - **Context mode** — activated when `contextPicker` is set; wraps input in a unified card with a focus-ring border, renders `ChatContextMemoryBar` (ambient navigation history), `ChatContextChipStrip` (explicitly assigned items), and a `+` plus-menu anchored inside the input's start adornment
15
+ - **Legacy mode** — plain `ChatInput` with an optional standalone `ChatAttachmentAddButton` to the left of the model row
16
+ - **Icon resolution** — memoizes a `type → icon` map from `contextPicker.entityTypes` to avoid rebuilding on every render
17
+
18
+ ## Usage Example
19
+
20
+ ```typescript
21
+ <ChatComposer
22
+ inputRef={inputRef}
23
+ onSend={handleSend}
24
+ onStop={handleStop}
25
+ sending={isSending}
26
+ placeholder="Message Mingo..."
27
+ model={{ name: 'gpt-4o', tokensUsed: 1200, tokenLimit: 8000 }}
28
+ contextPicker={pickerConfig}
29
+ selectedContextItems={selectedItems}
30
+ onToggleContextItem={handleToggle}
31
+ onRemoveContextItem={handleRemove}
32
+ contextMemoryItems={memoryItems}
33
+ contextPickerOpen={pickerOpen}
34
+ onOpenContextPicker={() => setPickerOpen(true)}
35
+ onCloseContextPicker={() => setPickerOpen(false)}
36
+ mentionQuery={mentionQuery}
37
+ onMentionQueryChange={setMentionQuery}
38
+ />
39
+ ```
40
+
41
+ ## Source
42
+
43
+ [`chat-composer.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-composer.tsx)
@@ -1,15 +1,33 @@
1
- <!-- source-hash: 748948c6317fda009af640633bb6c0e5 -->
2
- Composable React components for building a full-screen chat interface shell, including layout, header, content area, and footer sections with ODS design token styling.
1
+ <!-- source-hash: 837e81768e91b5500387c07ee348adb7 -->
2
+ Compound component set providing the structural layout for an AI chat interface, including header (with avatar, connection status, ticket info, and MSP branding), scrollable content area, and footer regions.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Component | Description |
7
- |-----------|-------------|
8
- | `ChatContainer` | Root full-screen wrapper with ODS background and responsive padding |
9
- | `ChatHeader` | Rich header with avatar, user info, connection status, ticket context, and action buttons |
10
- | `ChatContent` | Flex-grow scrollable content region between header and footer |
11
- | `ChatFooter` | Sticky footer wrapper with optional full-width or narrow-column layout |
12
- | `ConnectionIndicator` | Internal dot badge showing `connected` / `connecting` / `disconnected` states using ODS attention tokens |
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `ChatContainer` | `forwardRef<HTMLDivElement>` | Root full-screen flex wrapper with ODS background and padding |
9
+ | `ChatHeader` | `forwardRef<HTMLDivElement>` | Header with avatar, connection indicator, ticket status, MSP org card, and action buttons |
10
+ | `ChatContent` | `forwardRef<HTMLDivElement>` | Flex-growing scrollable content region between header and footer |
11
+ | `ChatFooter` | `forwardRef<HTMLDivElement>` | Sticky bottom area housing the input composer |
12
+ | `ConnectionIndicator` | `FC` | Internal pulsing dot reflecting `connected` / `connecting` / `disconnected` states |
13
+
14
+ ### `ChatHeader` Notable Props
15
+
16
+ | Prop | Type | Default | Description |
17
+ |---|---|---|---|
18
+ | `connectionStatus` | `'connected' \| 'connecting' \| 'disconnected'` | `'disconnected'` | Drives `ConnectionIndicator` color |
19
+ | `ticketInfo` | `object` | — | Renders a ticket title, meta, and `TicketStatusTag` in the sub-row |
20
+ | `mspOrganization` | `object` | — | Shows `MspOrganizationCard` when no `ticketInfo` is present |
21
+ | `fullWidth` | `boolean` | `false` | Drops the `max-w-ods-content-narrow` column constraint for side-panel use |
22
+ | `bare` | `boolean` | `false` | Removes card chrome (border, background, rounding) |
23
+ | `isLoading` | `boolean` | `false` | Renders skeleton placeholders in place of avatar and name |
24
+
25
+ ### `ChatFooterProps`
26
+
27
+ | Prop | Type | Description |
28
+ |---|---|---|
29
+ | `fullWidth` | `boolean` | Drops inner `max-w-ods-content-narrow` wrapper |
30
+ | `contentClassName` | `string` *(deprecated)* | Legacy escape hatch for custom width/padding overrides |
13
31
 
14
32
  ## Usage Example
15
33
 
@@ -19,40 +37,38 @@ import {
19
37
  ChatHeader,
20
38
  ChatContent,
21
39
  ChatFooter,
22
- } from "./chat-container"
40
+ } from "@openframe/ui/chat"
23
41
 
24
- export function MyChatShell() {
42
+ export function MyChatPanel() {
25
43
  return (
26
44
  <ChatContainer>
27
45
  <ChatHeader
28
- userName='Grace "Fae" Meadows'
46
+ userName="Fae"
29
47
  userTitle="Your Personal Assistant"
30
48
  connectionStatus="connected"
31
- serverUrl="mcp.flamingo.run"
49
+ serverUrl="acme.flamingo.run"
32
50
  showNewChat
33
- onNewChat={() => console.log("new chat")}
34
- onClose={() => console.log("close")}
51
+ onNewChat={() => startNewSession()}
52
+ onClose={() => closePanel()}
35
53
  ticketInfo={{
36
- title: "Printer offline – Ticket #4821",
37
- meta: "Assigned to: J. Smith",
38
- status: "in-progress",
54
+ title: "Printer not responding",
55
+ meta: "#4821 · Open",
56
+ status: "open",
57
+ statusName: "Open",
39
58
  }}
40
59
  fullWidth
41
60
  />
42
61
  <ChatContent>
43
- {/* message list */}
62
+ {/* message bubbles */}
44
63
  </ChatContent>
45
64
  <ChatFooter fullWidth>
46
- {/* input bar */}
65
+ {/* composer input */}
47
66
  </ChatFooter>
48
67
  </ChatContainer>
49
68
  )
50
69
  }
51
70
  ```
52
71
 
53
- ## Notes
72
+ ## Source
54
73
 
55
- - `fullWidth` on both `ChatHeader` and `ChatFooter` drops the default `max-w-ods-content-narrow` (≈600px) column — use this when embedding the chat in a side panel.
56
- - `ChatFooter.contentClassName` is a legacy escape hatch for custom `max-w` overrides; prefer `fullWidth` for standard full-panel layouts.
57
- - `ChatHeader` accepts a `bare` prop to remove card chrome (shadow, border, background) for flush-mounted contexts.
58
- - All components are `forwardRef`-compatible and spread unknown props to their root `<div>`.
74
+ [`chat-container.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-container.tsx)
@@ -0,0 +1,53 @@
1
+ <!-- source-hash: 841aa743a8a7671177fef949f75252e1 -->
2
+ A passive "context memory" strip rendered above the chat composer, showing a count of ambient remembered entities ("5 recently viewed items in context") with an ellipsis trigger that opens a scrollable dropdown listing each item with an optional remove button.
3
+
4
+ ## Key Components
5
+
6
+ ### `ChatContextMemoryBar` (exported component)
7
+
8
+ The sole export. Renders `null` when `items` is empty, so it has zero DOM footprint when unused.
9
+
10
+ **Props (`ChatContextMemoryBarProps`):**
11
+
12
+ | Prop | Type | Description |
13
+ |---|---|---|
14
+ | `items` | `ChatContextItem[]` | Remembered entities, most-recent-first |
15
+ | `onRemove` | `(item: ChatContextItem) => void` | Optional removal handler; omit for read-only |
16
+ | `resolveIcon` | `(item: ChatContextItem) => React.ReactNode` | Entity-type icon resolver matching the picker/chip icon map |
17
+ | `disabled` | `boolean` | Disables remove buttons (e.g. during streaming) |
18
+ | `className` | `string` | Additional classes for the root strip |
19
+
20
+ ### Internal behaviors
21
+
22
+ - **Outside-click dismiss** — uses capture-phase `mousedown`/`touchstart` listeners on `document` to reliably close the dropdown even inside resizable drawers or `contentEditable` ancestors that may call `stopPropagation`.
23
+ - **Auto-close on empty** — a `useEffect` watching `items.length` closes the dropdown before the bar unmounts, preventing a stale popover outliving its trigger.
24
+ - **Escape key** — closes the dropdown via `onKeyDown` on the root element.
25
+
26
+ ## Usage Example
27
+
28
+ ```typescript
29
+ import { ChatContextMemoryBar } from './chat-context-memory-bar'
30
+ import type { ChatContextItem } from './types/context-item.types'
31
+
32
+ const memoryItems: ChatContextItem[] = [
33
+ { type: 'ticket', id: '42', label: 'Printer offline – HQ' },
34
+ { type: 'device', id: '7', label: 'DESKTOP-ABC123' },
35
+ ]
36
+
37
+ function Composer() {
38
+ const handleRemove = (item: ChatContextItem) => {
39
+ console.log('Remove from memory:', item.id)
40
+ }
41
+
42
+ return (
43
+ <ChatContextMemoryBar
44
+ items={memoryItems}
45
+ onRemove={handleRemove}
46
+ resolveIcon={(item) => <EntityIcon type={item.type} />}
47
+ disabled={isStreaming}
48
+ />
49
+ )
50
+ }
51
+ ```
52
+
53
+ > **Placement note:** This "ambient" bar sits above `<ChatContextChipStrip>` (user-assigned items). Both live above the textarea — memory on top (passive), chips below (active per-message selection).
@@ -0,0 +1,89 @@
1
+ <!-- source-hash: 561900464791edb34123d4b8cbc3991e -->
2
+ Renders a three-part entity-context picker UI for the chat composer: a `+` trigger button, a two-level popover for browsing and searching entity types/items, and a chip strip for displaying selected items.
3
+
4
+ ## Key Components
5
+
6
+ ### `ChatComposerPlusMenu`
7
+ The `+` button rendered inside the composer input. Toggles the context picker open/closed, with visual states (grey → white → accent-yellow) reflecting hover, press, and open states.
8
+
9
+ **Props:**
10
+ | Prop | Type | Description |
11
+ |---|---|---|
12
+ | `onToggle` | `() => void` | Opens/closes the picker |
13
+ | `open` | `boolean` | Drives the accent-yellow active state |
14
+ | `disabled` | `boolean` | Disables the trigger during streaming |
15
+ | `dropdown` | `React.ReactNode` | The `<ChatContextPicker>` anchored to this button |
16
+
17
+ ### `ChatContextPicker`
18
+ A two-level popover (`bottom-full` positioned above the input). Level 1 lists entity types; Level 2 shows a debounced-search, multi-select list of items with checkmarks. Supports `@`-mention query seeding.
19
+
20
+ **Props:**
21
+ | Prop | Type | Description |
22
+ |---|---|---|
23
+ | `open` | `boolean` | Controls render |
24
+ | `config` | `ChatContextPickerConfig` | Host-provided entity types and `search()` resolver |
25
+ | `selectedItems` | `ChatContextItem[]` | Drives ✓ state |
26
+ | `onToggleItem` | `(item) => void` | Add/remove selection |
27
+ | `onClose` | `() => void` | Escape, outside-click, or X |
28
+ | `mentionQuery` | `string \| null` | Pre-filters type list from `@` trigger |
29
+
30
+ ### Constants
31
+
32
+ | Constant | Value | Purpose |
33
+ |---|---|---|
34
+ | `CHAT_CONTEXT_ITEMS_DEFAULT_MAX` | `10` | Max selectable items |
35
+ | `SEARCH_DEBOUNCE_MS` | `300` | Keystroke debounce before calling `config.search()` |
36
+ | `ITEMS_SKELETON_ROWS` | `10` | Suspense fallback row count |
37
+
38
+ ## Usage Example
39
+
40
+ ```typescript
41
+ import {
42
+ ChatComposerPlusMenu,
43
+ ChatContextPicker,
44
+ } from './chat-context-picker'
45
+
46
+ function ComposerToolbar() {
47
+ const [open, setOpen] = useState(false)
48
+ const [selected, setSelected] = useState<ChatContextItem[]>([])
49
+
50
+ const config: ChatContextPickerConfig = {
51
+ entityTypes: [
52
+ { id: 'device', label: 'Device' },
53
+ { id: 'script', label: 'Script' },
54
+ ],
55
+ search: async (type, query, signal) => fetchItems(type, query, signal),
56
+ }
57
+
58
+ const toggleItem = (item: ChatContextItem) =>
59
+ setSelected((prev) =>
60
+ prev.some((i) => i.id === item.id)
61
+ ? prev.filter((i) => i.id !== item.id)
62
+ : [...prev, item],
63
+ )
64
+
65
+ return (
66
+ <ChatComposerPlusMenu
67
+ open={open}
68
+ onToggle={() => setOpen((v) => !v)}
69
+ dropdown={
70
+ <ChatContextPicker
71
+ open={open}
72
+ config={config}
73
+ selectedItems={selected}
74
+ onToggleItem={toggleItem}
75
+ onClose={() => setOpen(false)}
76
+ />
77
+ }
78
+ />
79
+ )
80
+ }
81
+ ```
82
+
83
+ ## Behavioral Notes
84
+
85
+ - **Height measurement** (`useLayoutEffect`): caps the popover to the real visible space above the button by walking up to the nearest `overflow` clip ancestor — handles drawer/panel layouts without hard-coded pixel values.
86
+ - **Outside-click handling**: ignores clicks on `[data-context-trigger]` so the `+` button can toggle cleanly without immediately re-closing.
87
+ - **Library boundary**: the component owns only UI and selection state. All data fetching is delegated to `config.search()` — the library has no knowledge of specific entity types.
88
+
89
+ **Source:** [`chat-context-picker.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-context-picker.tsx)
@@ -0,0 +1,43 @@
1
+ <!-- source-hash: 3f73058e6afda4a07e57e42605ab516d -->
2
+ A 56×56 square icon button component for the chat panel's top-navigation bar, supporting configurable 1px cell dividers and accessible focus styling.
3
+
4
+ ## Key Components
5
+
6
+ - **`ChatHeaderIconButton`** — A `forwardRef` button component rendering a fixed-size (`size-14`) icon cell with optional left/right/none border dividers, hover background transitions, and focus-visible ring support.
7
+ - **`ChatHeaderIconButtonProps`** — Extends `React.ButtonHTMLAttributes<HTMLButtonElement>` with a `divider` prop (`'left' | 'right' | 'none'`, default `'left'`).
8
+
9
+ ## Usage Example
10
+
11
+ ```typescript
12
+ import { ChatHeaderIconButton } from './chat-header-icon-button'
13
+ import { X, ChevronLeft, ArchiveIcon } from 'lucide-react'
14
+
15
+ // Trailing cell (default left divider)
16
+ <ChatHeaderIconButton onClick={onClose} aria-label="Close chat">
17
+ <X className="size-5" />
18
+ </ChatHeaderIconButton>
19
+
20
+ // Leading back chevron (right divider)
21
+ <ChatHeaderIconButton divider="right" onClick={onBack} aria-label="Go back">
22
+ <ChevronLeft className="size-5" />
23
+ </ChatHeaderIconButton>
24
+
25
+ // No divider
26
+ <ChatHeaderIconButton divider="none" onClick={onArchive} aria-label="Archive">
27
+ <ArchiveIcon className="size-5" />
28
+ </ChatHeaderIconButton>
29
+
30
+ // As a Radix asChild trigger
31
+ <DropdownMenu.Trigger asChild>
32
+ <ChatHeaderIconButton aria-label="More options">
33
+ <MoreHorizontal className="size-5" />
34
+ </ChatHeaderIconButton>
35
+ </DropdownMenu.Trigger>
36
+ ```
37
+
38
+ ## Notes
39
+
40
+ - Icon color stays `ods-text-secondary` on hover — only the background transitions to `ods-bg-hover`.
41
+ - `forwardRef` + full prop spread make it composable as a Radix `asChild` trigger.
42
+ - `type="button"` is set by default to prevent accidental form submission.
43
+ - Source: [`chat-header-icon-button.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-header-icon-button.tsx)
@@ -0,0 +1,51 @@
1
+ <!-- source-hash: a50c170e985f2e097a37aa07979fae4b -->
2
+ Controlled inline search field that replaces the chat panel header's title area when search is active, debouncing typed input before emitting it to the host for server-side refetching.
3
+
4
+ ## Key Components
5
+
6
+ ### `ChatHeaderSearchField`
7
+
8
+ The primary export. Renders a leading `SearchIcon` alongside a borderless, full-height `<input>` that takes over the header title slot. Manages its own text state locally for snappy typing, then propagates the debounced query (300 ms) via `onSearchChange`.
9
+
10
+ **Collapse lifecycle** — exit animations are coordinated manually:
11
+
12
+ 1. `beginCollapse()` sets `exiting = true`, disabling the input and triggering CSS leave animations.
13
+ 2. `finishCollapse()` is called on `animationend` of the root element (bubbled child events are ignored).
14
+ 3. A 240 ms `setTimeout` fallback fires `finishCollapse` when `animationend` never fires (reduced-motion or stripped utilities).
15
+
16
+ **Stale-debounce guard** — when Escape is pressed or the field blurs empty, the cleared term is emitted synchronously and recorded in `lastEmitted`, preventing the still-pending 300 ms debounce from triggering a redundant server round-trip after unmount begins.
17
+
18
+ ### `ChatHeaderSearchFieldProps`
19
+
20
+ | Prop | Type | Default | Description |
21
+ |---|---|---|---|
22
+ | `initialValue` | `string` | `''` | Seeds the input on mount |
23
+ | `onSearchChange` | `(query: string) => void` | — | Receives the debounced search term |
24
+ | `onCollapse` | `() => void` | — | Called after the leave animation completes |
25
+ | `autoFocus` | `boolean` | `true` | Focuses the input on mount |
26
+ | `className` | `string` | — | Appended to the root element |
27
+
28
+ ## Usage Example
29
+
30
+ ```typescript
31
+ import { ChatHeaderSearchField } from './chat-header-search-field'
32
+
33
+ function ChatPanelHeader() {
34
+ const [searchOpen, setSearchOpen] = React.useState(false)
35
+ const [query, setQuery] = React.useState('')
36
+
37
+ return (
38
+ <header>
39
+ {searchOpen ? (
40
+ <ChatHeaderSearchField
41
+ initialValue={query}
42
+ onSearchChange={(term) => setQuery(term)}
43
+ onCollapse={() => setSearchOpen(false)}
44
+ />
45
+ ) : (
46
+ <h1>Chats</h1>
47
+ )}
48
+ </header>
49
+ )
50
+ }
51
+ ```
@@ -1,29 +1,35 @@
1
- <!-- source-hash: 6d459e335b05378d1756f274a61128f0 -->
2
- A controlled chat input component with slash-command autocomplete, send/stop functionality, and an imperative ref API for programmatic control.
1
+ <!-- source-hash: 5ef079ca48dfe4a6d1f2fa08a9c755fe -->
2
+ Rich contenteditable chat input component with support for `@`-mention chips, slash-command suggestions, send/stop controls, and a ghost preview overlay.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `ChatInput` (default export)
7
- A `forwardRef` component that renders a textarea-based chat input with:
8
- - **Slash command autocomplete** — triggers on `/` prefix, debounced 150ms, keyboard-navigable dropdown
9
- - **Send/Stop modes** — toggles between send and stop-stream actions based on `sending`/`onStop` props
10
- - **Awaiting response indicator** — replaces input with `ChatTypingIndicator` while waiting for a reply
11
- - **Auto-refocus** — restores focus after send completes or streaming stops
6
+ ### Exported
12
7
 
13
- ### `ChatInputRef` (imperative handle)
14
- Exposed methods for parent components:
8
+ - **`ChatInput`** (`forwardRef<ChatInputRef, ChatInputProps>`) — Primary component. Renders a `contenteditable` div editor rather than a `<textarea>`, enabling inline mention chips as atomic DOM nodes.
9
+
10
+ ### Internal Helpers
11
+
12
+ | Function | Purpose |
13
+ |---|---|
14
+ | `parseSegments` | Splits a draft string into `text` and `mention` segments using `MENTION_GLOBAL` regex |
15
+ | `serialize` | Walks the editor's `childNodes` to reconstruct the draft string from text nodes and chip elements |
16
+ | `buildChipEl` | Creates a non-React DOM node for a committed `@`-mention using `renderToStaticMarkup` on the `Tag` component |
17
+ | `rebuildDom` | Replaces editor content wholesale from a value string + metadata map |
18
+ | `placeCaretAtEnd` / `placeCaretAtOffset` | Caret placement utilities using the Selection API |
19
+ | `insertTextAtCaret` | Inserts plain text at caret without injecting `<br>` or `<div>` elements |
20
+
21
+ ### `ChatInputRef` (Imperative Handle)
15
22
 
16
23
  | Method | Description |
17
24
  |---|---|
18
25
  | `focus()` / `blur()` | Programmatic focus control |
19
- | `clear()` | Resets input value |
20
- | `setValue(next)` | Prefills input, places caret at end |
21
- | `setValueAndCursor(next, offset)` | Prefills input with clamped caret position |
22
- | `submit(next)` | Fires `onSend` and clears, bypassing user interaction |
23
- | `getValue()` | Returns current value via stable ref |
24
-
25
- ### `SLASH_INPUT_TRIGGER`
26
- Regex `/^\/([a-z][a-z0-9-]*)?$/` — kept in sync with server-side slash command registration to prevent suggesting commands the API would reject.
26
+ | `clear()` | Resets draft and metadata |
27
+ | `setValue(next)` | Replaces editor content |
28
+ | `setValueAndCursor(next, offset)` | Replaces content and positions caret |
29
+ | `submit(next)` | Fires the send handler directly |
30
+ | `getValue()` | Synchronous draft read |
31
+ | `removeMentionTrigger()` | Strips trailing `@query` from draft |
32
+ | `commitMention(token, meta?)` | Replaces in-progress `@query` with a chip token |
27
33
 
28
34
  ## Usage Example
29
35
 
@@ -32,25 +38,52 @@ import { useRef } from "react"
32
38
  import { ChatInput } from "./chat-input"
33
39
  import type { ChatInputRef } from "./types"
34
40
 
35
- function ChatPanel() {
41
+ function MyComposer() {
36
42
  const inputRef = useRef<ChatInputRef>(null)
37
43
 
38
- const prefillSlashCommand = () => {
39
- inputRef.current?.setValue("/reboot ")
40
- }
41
-
42
44
  return (
43
45
  <ChatInput
44
46
  ref={inputRef}
45
- sending={false}
46
- awaitingResponse={false}
47
- onSend={(message) => console.log("Sending:", message)}
48
- onStop={() => abortStream()}
49
- slashCommands={{
50
- fetchCommands: async (prefix, signal) => fetchSlashCommands(prefix, signal),
47
+ placeholder="Type a message..."
48
+ onSend={(message) => {
49
+ console.log("Sending:", message)
50
+ return fetch("/api/chat", { method: "POST", body: message })
51
+ .then(() => true)
51
52
  }}
53
+ onMentionQueryChange={(query) => {
54
+ // fetch mention suggestions for `query`
55
+ }}
56
+ slashCommands={[
57
+ { name: "summarize", description: "Summarize the conversation" },
58
+ ]}
52
59
  autoFocus
53
60
  />
54
61
  )
55
62
  }
56
- ```
63
+
64
+ // Imperative control
65
+ inputRef.current?.setValue("/summarize ")
66
+ inputRef.current?.commitMention("ticket:abc123", {
67
+ label: "Ticket #123",
68
+ icon: <TicketIcon />,
69
+ })
70
+ ```
71
+
72
+ ## Key Regex Constants
73
+
74
+ ```typescript
75
+ // Committed mention token in draft string
76
+ const MENTION_GLOBAL = /@[A-Za-z0-9_.+/=-]+:[A-Za-z0-9_.+/=-]+/g
77
+
78
+ // In-progress @query at end of draft (excludes email addresses)
79
+ const MENTION_TRIGGER_AT_END = /(^|\s)@([\w.-]*)$/
80
+
81
+ // Slash command activation trigger
82
+ const SLASH_INPUT_TRIGGER = /^\/([a-z][a-z0-9-]*)?$/
83
+ ```
84
+
85
+ > **Note:** `SLASH_INPUT_TRIGGER` is shared with `lib/config/slash-commands-config.ts` and the chat-route slash dispatch parser — keep all three in sync.
86
+
87
+ ## Source
88
+
89
+ [`chat-input.tsx` on GitHub](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-input.tsx)
@@ -0,0 +1,44 @@
1
+ <!-- source-hash: 5fc10ddb4837c0d5506138aed4e8345a -->
2
+ Reusable empty-state component for chat-list surfaces, rendering a muted icon above a title and optional description in a vertically centred layout.
3
+
4
+ ## Key Components
5
+
6
+ ### `ChatListEmptyState`
7
+ A client component that renders a centred empty state with three elements:
8
+ - **Icon** — a 24px muted glyph (`ods-text-secondary`) wrapped in a fixed `size-6` container
9
+ - **Title** — displayed as an `h4` paragraph
10
+ - **Description** — optional `h6` caption rendered below the title
11
+
12
+ ### `ChatListEmptyStateProps`
13
+
14
+ | Prop | Type | Required | Description |
15
+ |---|---|---|---|
16
+ | `icon` | `React.ReactNode` | ✅ | Pre-sized 24px icon glyph |
17
+ | `title` | `React.ReactNode` | ✅ | Title line rendered as `h4` |
18
+ | `description` | `React.ReactNode` | ❌ | Optional caption rendered as `h6` |
19
+ | `className` | `string` | ❌ | Appended to root element |
20
+
21
+ ## Usage Example
22
+
23
+ ```typescript
24
+ import { ChatListEmptyState } from './chat-list-empty-state'
25
+ import { ChatsIcon } from '../icons'
26
+
27
+ // With title only
28
+ <ChatListEmptyState
29
+ icon={<ChatsIcon size={24} />}
30
+ title="No active chats"
31
+ />
32
+
33
+ // With description
34
+ <ChatListEmptyState
35
+ icon={<ChatsIcon size={24} />}
36
+ title="No archived chats"
37
+ description="Completed conversations will appear here."
38
+ className="my-custom-class"
39
+ />
40
+ ```
41
+
42
+ > **Design note:** This component is shared between the "Current Chats" rail and the Chat Archive page (Figma node `113:60939`) to keep both surfaces visually consistent.
43
+
44
+ **Source:** [`flamingo-stack/openframe-oss-lib`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/chat-list-empty-state.tsx)