@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,59 @@
1
+ <!-- source-hash: 5a28579d80860450719a15e80835fea5 -->
2
+ Provides a React hook for managing keyboard focus within overlay UI surfaces (modals, sidebars, nav panels), handling initial focus, Tab cycling, Escape key handling, and guarded focus restoration on close.
3
+
4
+ ## Key Components
5
+
6
+ ### `useFocusTrap(containerRef, active, options)`
7
+
8
+ The primary export. Attaches a container-scoped `keydown` listener when `active` is `true` and cleans up on deactivate.
9
+
10
+ | Parameter | Type | Description |
11
+ |---|---|---|
12
+ | `containerRef` | `RefObject<HTMLElement \| null>` | Ref to the overlay container element |
13
+ | `active` | `boolean` | Enables/disables the trap |
14
+ | `options` | `UseFocusTrapOptions` | Optional configuration |
15
+
16
+ ### `UseFocusTrapOptions`
17
+
18
+ | Option | Type | Default | Description |
19
+ |---|---|---|---|
20
+ | `onEscape` | `() => void` | — | Called on Escape keypress; passes through without `stopPropagation` |
21
+ | `contain` | `boolean` | `true` | When `false`, disables Tab cycling (for non-modal surfaces like sliding sidebars) |
22
+
23
+ ### `FOCUSABLE_SELECTOR`
24
+
25
+ Internal CSS selector matching all interactive, non-disabled, visible elements eligible for Tab focus.
26
+
27
+ ## Usage Example
28
+
29
+ ```typescript
30
+ import { useRef } from 'react'
31
+ import { useFocusTrap } from './use-focus-trap'
32
+
33
+ function MobileNavPanel({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) {
34
+ const panelRef = useRef<HTMLDivElement>(null)
35
+
36
+ // Tab cycles within the panel; Escape triggers onClose
37
+ useFocusTrap(panelRef, isOpen, { onEscape: onClose })
38
+
39
+ return (
40
+ // tabIndex={-1} is required — see hook CONTRACT
41
+ <div ref={panelRef} tabIndex={-1}>
42
+ <a href="/home">Home</a>
43
+ <button onClick={onClose}>Close</button>
44
+ </div>
45
+ )
46
+ }
47
+ ```
48
+
49
+ > **Contract:** The container element **must** have `tabIndex={-1}`. Without it, clicking non-focusable areas inside the surface moves focus to `body`, causing the trap to stop receiving keyboard events.
50
+
51
+ ## Behavior Notes
52
+
53
+ - **Stacking-safe:** Listener is container-scoped, so a modal opened above a sidebar will not leak its Escape event downward.
54
+ - **Stable callback:** `onEscape` is stored in a `useRef` to prevent the effect from re-running on every inline function re-render.
55
+ - **Guarded restore:** On deactivate, focus returns to the previously focused element only if focus has not moved to another intentional target (e.g. a dialog that opened during the overlay's lifetime).
56
+
57
+ ## Source
58
+
59
+ [`use-focus-trap.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-focus-trap.ts)
@@ -0,0 +1,37 @@
1
+ <!-- source-hash: 542d3494c008ba1da83803f8b2a5a8bc -->
2
+ React hook that measures and tracks the combined pixel height of the sticky page header and optional announcement bar in real time, using `ResizeObserver` and `MutationObserver`.
3
+
4
+ ## Key Components
5
+
6
+ - **`useHeaderHeight(defaultHeight?, options?)`** — Main export. Queries `<header>` and `[data-announcement-bar]` elements, sums their `offsetHeight` values, and re-measures whenever either element resizes or the DOM changes.
7
+ - **`enabled` option** — Gates all observer setup. When `false`, skips measurement and returns `defaultHeight` immediately, avoiding document-wide observers for components that are always mounted but only need the value while an overlay is open.
8
+ - **`ResizeObserver`** — Watches both the header and announcement bar for size changes.
9
+ - **`MutationObserver`** — Watches `document.body` for child list changes or `data-announcement-bar` attribute mutations (e.g., bar appearing/disappearing dynamically), then re-observes the bar if it's newly added.
10
+
11
+ ## Usage Example
12
+
13
+ ```typescript
14
+ import { useHeaderHeight } from './use-header-height'
15
+
16
+ // Basic usage — offsets a fixed panel below the header
17
+ function SearchOverlay({ isOpen }: { isOpen: boolean }) {
18
+ const headerHeight = useHeaderHeight(64, { enabled: isOpen })
19
+
20
+ return (
21
+ <div
22
+ style={{ top: headerHeight }}
23
+ className="fixed inset-x-0 bottom-0 z-50"
24
+ >
25
+ {/* panel content */}
26
+ </div>
27
+ )
28
+ }
29
+ ```
30
+
31
+ > Pass `enabled: isOpen` to avoid attaching document-wide observers when the overlay is closed.
32
+
33
+ ## Notes
34
+
35
+ - Falls back to `defaultHeight` (default `64`) when no matching elements are found or when `enabled` is `false`.
36
+ - Observers are fully disconnected on unmount or when `enabled` changes to `false`.
37
+ - Source: [`use-header-height.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-header-height.ts)
@@ -1,28 +1,24 @@
1
- <!-- source-hash: 9f63d7c2dd408b85d0a130f82da97780 -->
2
- Custom React hook for building a fully controlled horizontal scrollbar with drag, click-to-seek, wheel forwarding, edge-fade indicators, and RAF-throttled sync — all driven directly against the DOM without relying on native scrollbar styling.
1
+ <!-- source-hash: a8097b26f77c0c63a9b433f937ece2a5 -->
2
+ A React hook that manages a custom horizontal scrollbar with thumb sizing, position syncing, drag interaction, edge-fade indicators, and RAF-throttled scroll handling — all driven directly against the DOM for performance.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `useHorizontalScrollbar` | Hook | Main hook returning all refs, state, and event handlers |
9
- | `scrollRef` | Callback ref | Attach to the scrollable container; auto-sets up `ResizeObserver` |
10
- | `trackRef` | `RefObject<HTMLDivElement>` | Attach to the scrollbar track element |
11
- | `thumbRef` | `RefObject<HTMLDivElement>` | Attach to the draggable thumb element |
12
- | `thumbRatio` | `number` | Thumb width as a fraction of track width (`0` = hidden) |
13
- | `canScrollLeft` | `boolean` | Whether content can scroll further left (for edge fades) |
14
- | `canScrollRight` | `boolean` | Whether content can scroll further right (for edge fades) |
6
+ **`useHorizontalScrollbar()`** the single export; returns everything needed to wire up a scrollable container and its custom scrollbar UI.
15
7
 
16
- **Event Handlers Returned:**
8
+ ### Returned Values
17
9
 
18
- | Handler | Attach To |
19
- |---------|-----------|
20
- | `onScroll` | Scrollable container `onScroll` |
21
- | `onTrackClick` | Track element `onClick` |
22
- | `onTrackWheel` | Track element `onWheel` |
23
- | `onThumbPointerDown` | Thumb `onPointerDown` |
24
- | `onThumbPointerMove` | Thumb `onPointerMove` |
25
- | `onThumbPointerUp` | Thumb `onPointerUp` |
10
+ | Name | Type | Description |
11
+ |---|---|---|
12
+ | `scrollRef` | callback ref | Attach to the scrollable container; sets up `ResizeObserver` + `MutationObserver` automatically |
13
+ | `trackRef` | `RefObject<HTMLDivElement>` | Attach to the scrollbar track element |
14
+ | `thumbRef` | `RefObject<HTMLDivElement>` | Attach to the scrollbar thumb element |
15
+ | `thumbRatio` | `number` | Thumb width as a fraction of track width (`0` when no overflow) |
16
+ | `canScrollLeft` | `boolean` | `true` when content is scrolled past the left edge |
17
+ | `canScrollRight` | `boolean` | `true` when more content exists to the right |
18
+ | `onScroll` | handler | RAF-throttled; attach to the container's `onScroll` |
19
+ | `onTrackClick` | handler | Scrolls to clicked position on the track |
20
+ | `onTrackWheel` | handler | Forwards wheel events from the track to the scroll container |
21
+ | `onThumbPointerDown/Move/Up` | handlers | Full pointer-capture drag implementation |
26
22
 
27
23
  ## Usage Example
28
24
 
@@ -40,29 +36,20 @@ function ScrollableTable() {
40
36
  return (
41
37
  <div>
42
38
  {canScrollLeft && <div className="fade-left" />}
43
-
44
- {/* Scrollable content */}
45
39
  <div ref={scrollRef} onScroll={onScroll} style={{ overflowX: 'auto' }}>
46
- <table>{/* wide content */}</table>
40
+ {/* wide content */}
47
41
  </div>
48
-
49
42
  {canScrollRight && <div className="fade-right" />}
50
43
 
51
- {/* Custom scrollbar */}
52
- {thumbRatio > 0 && (
53
- <div
54
- ref={trackRef}
55
- onClick={onTrackClick}
56
- onWheel={onTrackWheel}
57
- style={{ position: 'relative', height: 8 }}
58
- >
44
+ {thumbRatio > 0 && thumbRatio < 1 && (
45
+ <div ref={trackRef} onClick={onTrackClick} onWheel={onTrackWheel}>
59
46
  <div
60
47
  ref={thumbRef}
61
48
  data-scrollbar-thumb
49
+ style={{ width: `${thumbRatio * 100}%`, position: 'absolute' }}
62
50
  onPointerDown={onThumbPointerDown}
63
51
  onPointerMove={onThumbPointerMove}
64
52
  onPointerUp={onThumbPointerUp}
65
- style={{ position: 'absolute', width: `${thumbRatio * 100}%`, cursor: 'grab' }}
66
53
  />
67
54
  </div>
68
55
  )}
@@ -71,4 +58,8 @@ function ScrollableTable() {
71
58
  }
72
59
  ```
73
60
 
74
- > **Performance note:** Thumb position is written directly to `thumb.style.left` via `requestAnimationFrame`, bypassing React re-renders on every scroll event. Only `thumbRatio`, `canScrollLeft`, and `canScrollRight` trigger state updates.
61
+ ## Notes
62
+
63
+ - `scrollRef` is a **callback ref**, so observer setup runs correctly even when the container mounts asynchronously (e.g. after data loads).
64
+ - Thumb position is updated **directly on the DOM** (`thumb.style.left`) during scroll and drag to avoid React re-render overhead.
65
+ - `ResizeObserver` watches both the container and its children; a `MutationObserver` re-observes when children change, keeping thumb size accurate after dynamic content updates.
@@ -0,0 +1,73 @@
1
+ <!-- source-hash: d8118aab70c3c6c9b39223ea34e7dd94 -->
2
+ Provides a reusable `requestAnimationFrame` position engine for endless-scroll marquee animations, decoupled from any specific DOM strategy (scroll position or CSS transform).
3
+
4
+ ## Key Components
5
+
6
+ ### `MarqueeEngineOptions` (interface)
7
+
8
+ Configuration object passed to the hook:
9
+
10
+ | Option | Description |
11
+ |---|---|
12
+ | `active` | Master switch; enables/disables the rAF loop |
13
+ | `speed` | Cruise speed in px/s |
14
+ | `isPaused` | Per-frame pause verdict function (caller-owned reason set) |
15
+ | `getWrapSize` | Returns the single-copy width/height for seam wrapping |
16
+ | `getWrapMin` | Optional lower bound of the wrap range (default `0`) |
17
+ | `apply` | Writes position to the DOM (`scrollLeft` or `transform`) |
18
+ | `readBack` | Reads externally mutated position (user drag, native scroll) |
19
+ | `onAfterFrame` | Called after each frame (e.g. hover re-resolution) |
20
+
21
+ ### `MarqueeEngineHandle` (interface)
22
+
23
+ Returned by the hook:
24
+
25
+ | Member | Description |
26
+ |---|---|
27
+ | `posRef` | Float position ref in px; callers may write during seam warps |
28
+ | `glideBy(px)` | Accumulates a signed glide distance for chevron navigation |
29
+ | `wrap(pos)` | Utility to normalize any position into `[0, wrapSize)` |
30
+
31
+ ### `useMarqueeEngine(options)` (hook)
32
+
33
+ Core export. Manages three internal refs (`posRef`, `glideRemainingRef`, `speedEnvRef`), a latest-options ref to avoid restarting the rAF loop on every render, and the main `tick` function handling:
34
+
35
+ - **Velocity envelope** — ~250ms ease between `0` and `speed` (smooth pause/resume)
36
+ - **Glide mode** — proportional ease-out for chevron navigation, wrapping modulo copy size
37
+ - **Cruise mode** — steady advance at enveloped speed with external resync
38
+ - **Idle mode** — follows external scroll position so resume starts from current location
39
+
40
+ ## Usage Example
41
+
42
+ ```typescript
43
+ // CardsStrip (horizontal scroller driver)
44
+ const engine = useMarqueeEngine({
45
+ active: isVisible,
46
+ speed: 80,
47
+ isPaused: (now) => pauseReasons.size > 0 || suppressUntil > now,
48
+ getWrapSize: () => trackRef.current?.scrollWidth / 2 ?? 0,
49
+ getWrapMin: () => SEAM_BUFFER,
50
+ apply: (pos) => { if (trackRef.current) trackRef.current.scrollLeft = pos },
51
+ readBack: () => trackRef.current?.scrollLeft ?? 0,
52
+ onAfterFrame: resolveHover,
53
+ })
54
+
55
+ // Chevron navigation
56
+ engine.glideBy(cardWidth)
57
+
58
+ // MarqueeWall (transform driver — no readBack needed)
59
+ const engine = useMarqueeEngine({
60
+ active: true,
61
+ speed: 50,
62
+ isPaused: () => !isVisible,
63
+ getWrapSize: () => trackRef.current?.offsetWidth / 2 ?? 0,
64
+ apply: (pos) => {
65
+ if (trackRef.current)
66
+ trackRef.current.style.transform = `translateX(${-pos}px)`
67
+ },
68
+ })
69
+ ```
70
+
71
+ ## Source
72
+
73
+ [`use-marquee-engine.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-marquee-engine.ts)
@@ -0,0 +1,49 @@
1
+ <!-- source-hash: d6766f600f05a52d295b880209627895 -->
2
+ React hook that tracks and requests browser desktop notification permission, with cross-browser support including a Safari compatibility fallback.
3
+
4
+ ## Key Components
5
+
6
+ ### `UseNotificationPermissionResult` (interface)
7
+
8
+ | Property | Type | Description |
9
+ |---|---|---|
10
+ | `supported` | `boolean` | Whether the Notification API is available (false during SSR or on iOS Safari) |
11
+ | `permission` | `NotificationPermission` | Current permission state: `"default"`, `"granted"`, or `"denied"` |
12
+ | `request` | `() => Promise<NotificationPermission>` | Prompts the user for permission; must be triggered by a user gesture |
13
+
14
+ ### `useNotificationPermission()` (hook)
15
+
16
+ Initializes permission state and registers three sync strategies to stay current:
17
+
18
+ 1. **Permissions API** — `navigator.permissions.query({ name: 'notifications' })` change event (Chrome, Firefox)
19
+ 2. **Visibility change** — re-reads `Notification.permission` when the tab becomes visible (Safari fallback)
20
+ 3. **Window focus** — re-reads on focus for cases where the user changed site settings in a browser panel
21
+
22
+ Cleans up all listeners on unmount via a `cancelled` flag guard to prevent attaching listeners after the effect tears down.
23
+
24
+ ## Usage Example
25
+
26
+ ```typescript
27
+ import { useNotificationPermission } from './use-notification-permission'
28
+
29
+ function NotificationToggle() {
30
+ const { supported, permission, request } = useNotificationPermission()
31
+
32
+ if (!supported) return null
33
+
34
+ return (
35
+ <button
36
+ onClick={request}
37
+ disabled={permission === 'granted' || permission === 'denied'}
38
+ >
39
+ {permission === 'granted'
40
+ ? 'Notifications enabled'
41
+ : permission === 'denied'
42
+ ? 'Notifications blocked'
43
+ : 'Enable notifications'}
44
+ </button>
45
+ )
46
+ }
47
+ ```
48
+
49
+ > **Note:** Call `request()` only inside a user gesture handler (click, keydown, etc.). Browsers silently deny programmatic calls made outside a gesture context.
@@ -0,0 +1,40 @@
1
+ <!-- source-hash: 9b85f4bd4fed063a86a9725221200835 -->
2
+ Resets a callback whenever the browser tab is hidden or the window loses focus, guarding against `pointerleave`/`pointercancel` events being swallowed during tab switches or overlay interruptions.
3
+
4
+ ## Key Components
5
+
6
+ - **`useResetOnPageHidden(reset)`** — React hook that attaches `blur` (on `window`) and `visibilitychange` (on `document`) listeners; invokes `reset` when either fires (visibility only on `'hidden'`). Cleans up both listeners on unmount or when `reset` identity changes.
7
+
8
+ ## Usage Example
9
+
10
+ ```typescript
11
+ import { useCallback, useState } from 'react'
12
+ import { useResetOnPageHidden } from './use-reset-on-page-hidden'
13
+
14
+ function MarqueeWall() {
15
+ const [isHovered, setIsHovered] = useState(false)
16
+
17
+ // Must be stable — memoize with useCallback to avoid re-attaching listeners
18
+ const resetHover = useCallback(() => setIsHovered(false), [])
19
+
20
+ useResetOnPageHidden(resetHover)
21
+
22
+ return (
23
+ <div
24
+ onPointerEnter={() => setIsHovered(true)}
25
+ onPointerLeave={() => setIsHovered(false)}
26
+ >
27
+ {/* marquee pauses when isHovered is true */}
28
+ </div>
29
+ )
30
+ }
31
+ ```
32
+
33
+ ## Notes
34
+
35
+ - Pass a **stable** `reset` reference (via `useCallback`) — the hook re-attaches listeners whenever `reset`'s identity changes.
36
+ - `blur` fires even when `visibilitychange` does not (e.g., a second window focused alongside this tab), making both listeners necessary.
37
+ - On `blur` without tab hiding, the marquee may briefly resume under a stationary cursor in the unfocused window; it re-pauses on the next `pointermove`/`pointerenter`.
38
+ - Intended as the single wiring point (SSOT) for all marquee surfaces (`MarqueeWall`, `CardsStrip`).
39
+
40
+ **Source:** [`use-reset-on-page-hidden.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-reset-on-page-hidden.ts)
@@ -0,0 +1,41 @@
1
+ <!-- source-hash: 6043e94056db9c7b4cc50fc1680e236a -->
2
+ Keeps a marquee clone's interactive elements clickable while removing them from keyboard tab order and the accessibility tree — solving the "clone cards swallow clicks" bug caused by using `inert`.
3
+
4
+ ## Key Components
5
+
6
+ **`CLONE_FOCUSABLE_SELECTOR`** — Comprehensive CSS selector covering all natively focusable elements: anchors, form controls, `iframe`, `summary`, media with `controls`, `[tabindex]`, and editable content regions.
7
+
8
+ **`useSuppressCloneFocus(active: boolean)`** — React hook that returns a `ref` to attach to a clone wrapper `<div>`. When `active`, it:
9
+ - Sets `tabindex="-1"` on every focusable descendant (removes duplicate tab stops)
10
+ - Watches for DOM mutations that could re-introduce tabbable elements via `MutationObserver`
11
+ - Leaves click/pointer behavior fully intact (unlike `inert`, which blocks all interaction)
12
+ - Re-applies suppression only when `tabindex` hasn't already been stamped, preventing infinite observer loops
13
+
14
+ ## Usage Example
15
+
16
+ ```typescript
17
+ import { useSuppressCloneFocus } from './use-suppress-clone-focus'
18
+
19
+ function MarqueeClone({ isClone }: { isClone: boolean }) {
20
+ const cloneRef = useSuppressCloneFocus(isClone)
21
+
22
+ return (
23
+ // aria-hidden keeps clone out of a11y tree;
24
+ // hook keeps it out of tab order while staying clickable
25
+ <div ref={cloneRef} aria-hidden={isClone}>
26
+ <a href="/article-1">Card One</a>
27
+ <a href="/article-2">Card Two</a>
28
+ </div>
29
+ )
30
+ }
31
+ ```
32
+
33
+ ## Accessibility Contract
34
+
35
+ | Mechanism | Handled by |
36
+ |---|---|
37
+ | Out of a11y tree | `aria-hidden` on clone wrapper (caller's responsibility) |
38
+ | Out of tab order | This hook (`tabindex="-1"` on all focusable descendants) |
39
+ | Clickable / pointer events | Preserved — clone anchors handle mouse, <kbd>⌘</kbd>-click, middle-click, and context menu natively |
40
+
41
+ > **Why not `inert`?** The `inert` attribute also disables pointer events, causing clone cards near the seam of an endless-loop scroll to silently swallow all clicks — the core bug this hook is designed to prevent.
@@ -0,0 +1,39 @@
1
+ <!-- source-hash: c277685d024b3565e47f9f7688345fba -->
2
+ Barrel export file that re-exports all public API symbols from the NATS messaging module's submodules into a single entry point.
3
+
4
+ ## Key Components
5
+
6
+ | Export Source | Description |
7
+ |---|---|
8
+ | `./nats` | Core NATS client utilities and types |
9
+ | `./shared-connection` | Shared/singleton NATS connection management |
10
+ | `./nats-provider` | NATS provider setup and configuration |
11
+ | `./use-nats-subscription` | Composable for subscribing to NATS subjects |
12
+
13
+ ## Usage Example
14
+
15
+ ```typescript
16
+ // Import everything from a single entry point
17
+ import {
18
+ createNatsConnection,
19
+ sharedConnection,
20
+ NatsProvider,
21
+ useNatsSubscription,
22
+ } from '@openframe/nats'
23
+
24
+ // Subscribe to a subject using the composable
25
+ const { messages, unsubscribe } = useNatsSubscription('msp.tickets.>')
26
+
27
+ // Use the shared connection directly
28
+ const nc = await sharedConnection()
29
+ await nc.publish('msp.events.created', JSON.stringify({ id: 42 }))
30
+ ```
31
+
32
+ ## Notes
33
+
34
+ - Import from this index rather than individual submodules to avoid internal path coupling.
35
+ - Tree-shaking remains effective — bundlers resolve each `export *` to its originating module.
36
+
37
+ ## Source
38
+
39
+ [`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
@@ -0,0 +1,46 @@
1
+ <!-- source-hash: ab1964ccd3e26ab6a9f1caf2c64d5367 -->
2
+ Manages a shared NATS WebSocket connection within a React component tree, exposing connection state and client access via context.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `NatsProvider` | Component | Establishes and maintains a NATS connection lifecycle; handles connect, reconnect, and teardown |
9
+ | `useNats` | Hook | Returns `NatsContextValue`; throws if used outside `<NatsProvider>` |
10
+ | `useOptionalNats` | Hook | Returns `NatsContextValue | null`; safe to call outside a provider |
11
+ | `NatsProviderProps` | Interface | Props for `NatsProvider`, including `getWsUrl`, `onBeforeReconnect`, `clientConfig`, `reconnectionBackoff`, and `urlRevision` |
12
+ | `NatsContextValue` | Interface | `{ client, status, isReady, reconnectionCount }` available to consumers |
13
+ | `NatsReconnectionBackoff` | Re-export | Backoff configuration type from `shared-connection` |
14
+
15
+ **`urlRevision`** is the primary mechanism to trigger URL re-evaluation (e.g., after an auth state change). Increment or change it to restart the connection lifecycle.
16
+
17
+ ## Usage Example
18
+
19
+ ```typescript
20
+ import { NatsProvider, useNats } from './nats-provider'
21
+
22
+ function App() {
23
+ const [revision, setRevision] = React.useState(0)
24
+ const getWsUrl = () => session ? `wss://nats.example.com?token=${session.token}` : null
25
+
26
+ return (
27
+ <NatsProvider
28
+ getWsUrl={getWsUrl}
29
+ urlRevision={revision}
30
+ onBeforeReconnect={async () => { await refreshSession() }}
31
+ reconnectionBackoff={{ initialDelayMs: 500, maxDelayMs: 10_000 }}
32
+ >
33
+ <MyComponent />
34
+ </NatsProvider>
35
+ )
36
+ }
37
+
38
+ function MyComponent() {
39
+ const { client, status, isReady, reconnectionCount } = useNats()
40
+
41
+ if (!isReady) return <p>Connecting… ({status})</p>
42
+ return <p>Connected — reconnections: {reconnectionCount}</p>
43
+ }
44
+ ```
45
+
46
+ **Source:** [`nats-provider.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/nats-provider.tsx)
package/src/nats/.nats.md CHANGED
@@ -1,25 +1,32 @@
1
- <!-- source-hash: 418321f518535eef27f0004848e1e1b3 -->
2
- A browser/Tauri-only NATS client factory for WebSocket-based NATS connections (`nats.ws`), providing typed pub/sub, request/reply, JetStream ordered consumer subscriptions, and connection lifecycle management.
1
+ <!-- source-hash: 67f40ff2bcded544220309f5fd1f87ad -->
2
+ Browser/Tauri-compatible NATS client factory built on `nats.ws`, providing typed publish, subscribe, request-reply, and JetStream ordered consumer support with connection lifecycle management.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### Interfaces & Types
7
+
7
8
  | Export | Description |
8
- |--------|-------------|
9
- | `NatsClient` | Core client interface with all pub/sub/request/JetStream methods |
10
- | `NatsClientOptions` | Connection config: servers, auth, reconnect, exponential backoff, ping |
9
+ |---|---|
10
+ | `NatsClient` | Core client interface with connect/close/publish/subscribe/request methods |
11
+ | `NatsClientOptions` | Connection config including servers, auth, reconnect, and exponential backoff |
11
12
  | `NatsSubscribeOptions` | Per-subscription options: queue group, max messages, abort signal |
12
- | `NatsPublishOptions` / `NatsRequestOptions` | Optional headers and timeout per operation |
13
- | `JetStreamOrderedSubscribeOptions` | JetStream ephemeral consumer config: stream, filter, deliver policy, start sequence |
14
- | `NatsStatus` / `NatsStatusEvent` | Connection state machine: `connecting`, `connected`, `disconnected`, `reconnecting`, `closed`, `error` |
13
+ | `NatsPublishOptions` / `NatsRequestOptions` | Optional headers and timeout for publish/request operations |
14
+ | `JetStreamOrderedSubscribeOptions` | JetStream ephemeral consumer config with deliver policy and idle threshold |
15
+ | `NatsStatus` / `NatsStatusEvent` | Union type and event shape for connection lifecycle events |
16
+ | `JetStreamDeliverPolicy` | `'new'` or `'byStartSequence'` for ordered consumer replay |
17
+
18
+ ### Functions
15
19
 
16
- ### Factory Function
17
- - **`createNatsClient(options)`** — Returns a `NatsClient` instance. Lazily imports `nats.ws` (browser-safe). All methods are lazy-connected and browser-only (throws if `window` is undefined).
20
+ | Export | Description |
21
+ |---|---|
22
+ | `createNatsClient(options)` | Factory function — returns a fully-implemented `NatsClient` instance |
18
23
 
19
24
  ### Internal Helpers
20
- - **`createExponentialBackoffHandler`** — Configurable exponential backoff with optional crypto jitter for reconnect delays.
21
- - **`toNatsHeaders`**Converts `Record<string, string>` or native `NatsHeaders` into a `nats.ws` headers object.
22
- - **`mapNatsTypeToStatus`**Normalizes raw `nats.ws` status events to the typed `NatsStatus` union.
25
+
26
+ - `createExponentialBackoffHandler`configurable backoff with optional jitter using `crypto.getRandomValues`
27
+ - `mapOptionsToConnectionOptions`maps `NatsClientOptions` to `nats.ws` `ConnectionOptions`
28
+ - `toNatsHeaders` — converts `Record<string, string>` or existing `NatsHeaders` into a `nats.ws` headers object
29
+ - `assertClientSide` — throws if called outside a browser/WebSocket-capable runtime
23
30
 
24
31
  ## Usage Example
25
32
 
@@ -28,36 +35,36 @@ import { createNatsClient } from './nats'
28
35
 
29
36
  const client = createNatsClient({
30
37
  servers: 'wss://nats.example.com:443',
31
- name: 'flamingo-ui',
32
38
  token: 'my-token',
33
39
  exponentialBackoff: {
34
40
  initialDelayMs: 500,
35
41
  maxDelayMs: 15_000,
36
- multiplier: 2,
37
42
  jitter: true,
38
43
  },
39
44
  })
40
45
 
41
- // Listen for connection status changes
42
- const off = client.onStatus((event) => {
43
- console.log('NATS status:', event.status)
44
- })
46
+ client.onStatus(({ status }) => console.log('NATS status:', status))
45
47
 
46
48
  await client.connect()
47
49
 
48
- // Typed JSON publish
49
- client.publishJson('telemetry.events', { deviceId: 'abc', value: 42 })
50
+ // Publish JSON
51
+ client.publishJson('events.user.created', { id: '123', name: 'Alice' })
50
52
 
51
- // Typed JSON request/reply
53
+ // Request-reply
52
54
  const response = await client.requestJson<{ ok: boolean }>(
53
- 'devices.query',
54
- { id: 'abc' },
55
+ 'rpc.user.create',
56
+ { name: 'Bob' },
55
57
  { timeoutMs: 3000 },
56
58
  )
57
59
 
58
- // JetStream ordered consumer (live-tail)
60
+ // Core subscribe
61
+ client.subscribeJson<{ id: string }>('events.user.*', (payload, msg) => {
62
+ console.log('Received:', payload)
63
+ })
64
+
65
+ // JetStream ordered (live-tail)
59
66
  const handle = await client.subscribeJetStreamOrdered(
60
- (msg) => console.log('JetStream msg:', msg.seq),
67
+ (msg) => console.log('JetStream:', msg.subject),
61
68
  {
62
69
  streamName: 'EVENTS',
63
70
  filterSubject: 'events.>',
@@ -67,6 +74,9 @@ const handle = await client.subscribeJetStreamOrdered(
67
74
 
68
75
  // Cleanup
69
76
  handle.unsubscribe()
70
- off()
71
77
  await client.close()
72
- ```
78
+ ```
79
+
80
+ ## Source
81
+
82
+ [`nats.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/nats.ts)
@@ -0,0 +1,56 @@
1
+ <!-- source-hash: 4006bdcdcf2f95808859b2ac679a5c98 -->
2
+ Manages a per-URL pool of shared NATS WebSocket connections, providing reference-counted acquire/release lifecycle and a coordinated reconnection loop with exponential backoff.
3
+
4
+ ## Key Components
5
+
6
+ ### Constants
7
+
8
+ - **`NATS_DEFAULTS`** — Tuning knobs for timeouts, ping intervals, and retry backoff used as defaults throughout the module.
9
+
10
+ ### Interfaces
11
+
12
+ - **`SharedConnection`** — Internal state for a single URL slot: client handle, reference count, active timers, connect promise, and retry ownership token.
13
+ - **`NatsReconnectionBackoff`** — Optional backoff configuration (fast retries, exponential phase, jitter cap).
14
+ - **`AcquireClientOptions`** — Client identity/auth and transport settings passed at acquire time.
15
+ - **`ReleaseClientOptions`** — Allows callers to override the default 3-second close grace period.
16
+ - **`ConnectionLifecycleOptions`** / **`ConnectionLifecycleHandle`** — Input and output for `startConnectionLifecycle`.
17
+
18
+ ### Functions
19
+
20
+ | Function | Description |
21
+ |---|---|
22
+ | `acquireClient(url, opts?)` | Returns (or creates) the `SharedConnection` for a URL, increments `refCount`, cancels any pending close timer. |
23
+ | `releaseClient(url, opts?)` | Decrements `refCount`; schedules connection teardown after a grace period if count reaches zero. |
24
+ | `getSharedConnectionFor(url)` | Direct per-URL lookup; preferred over the legacy accessor. |
25
+ | `getSharedConnection()` | Legacy single-slot accessor — returns the first live connection. Avoid in new code. |
26
+ | `startConnectionLifecycle(options)` | Attaches a status observer and manages reconnect scheduling via a single `retryOwner` token. Returns a `stop()` handle. |
27
+
28
+ ## Usage Example
29
+
30
+ ```typescript
31
+ import {
32
+ acquireClient,
33
+ releaseClient,
34
+ startConnectionLifecycle,
35
+ } from './shared-connection'
36
+
37
+ const conn = acquireClient('wss://nats.example.com', {
38
+ name: 'my-service',
39
+ user: 'machine',
40
+ pass: 'secret',
41
+ })
42
+
43
+ const lifecycle = startConnectionLifecycle({
44
+ conn,
45
+ wsUrl: 'wss://nats.example.com',
46
+ getFreshUrl: () => 'wss://nats.example.com',
47
+ backoff: { fastRetries: 2, fastRetryDelayMs: 500, maxDelayMs: 15_000 },
48
+ onStatusChange: (status) => console.log('NATS status:', status),
49
+ })
50
+
51
+ // On component unmount:
52
+ lifecycle.stop()
53
+ releaseClient('wss://nats.example.com', { delayMs: 5000 })
54
+ ```
55
+
56
+ > **Retry ownership:** only one lifecycle instance drives `scheduleRetry` per URL at a time. The `retryOwner` token prevents concurrent reconnect races when multiple consumers share the same connection — remaining consumers re-claim ownership opportunistically on the next status event after the owner stops.