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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (841) hide show
  1. package/dist/{chunk-FP4H6Y5O.js → chunk-3VMCJK7A.js} +3 -3
  2. package/dist/{chunk-OWMLWJQY.cjs → chunk-5YFXUXOV.cjs} +2432 -1502
  3. package/dist/chunk-5YFXUXOV.cjs.map +1 -0
  4. package/dist/{chunk-4SMRQ4SN.js → chunk-6U7HIZSW.js} +3 -3
  5. package/dist/{chunk-MMCBQJKE.cjs → chunk-AZZQLEKY.cjs} +11 -11
  6. package/dist/{chunk-MMCBQJKE.cjs.map → chunk-AZZQLEKY.cjs.map} +1 -1
  7. package/dist/{chunk-OZJN54R5.cjs → chunk-CG5OX6WF.cjs} +37 -37
  8. package/dist/{chunk-OZJN54R5.cjs.map → chunk-CG5OX6WF.cjs.map} +1 -1
  9. package/dist/{chunk-LK623WCC.cjs → chunk-DYLIBE6I.cjs} +9 -9
  10. package/dist/{chunk-LK623WCC.cjs.map → chunk-DYLIBE6I.cjs.map} +1 -1
  11. package/dist/{chunk-AN47EIIJ.cjs → chunk-FEQW64Q5.cjs} +59 -59
  12. package/dist/{chunk-AN47EIIJ.cjs.map → chunk-FEQW64Q5.cjs.map} +1 -1
  13. package/dist/{chunk-66BNAFO6.js → chunk-FIRIO2NB.js} +4 -4
  14. package/dist/{chunk-MGKCS6KS.js → chunk-GWJNTDXR.js} +2 -2
  15. package/dist/{chunk-SASR7SK5.js → chunk-GZK7FWJJ.js} +20 -4
  16. package/dist/chunk-GZK7FWJJ.js.map +1 -0
  17. package/dist/{chunk-DEHZ5CTC.js → chunk-HAJQWSSU.js} +2 -2
  18. package/dist/{chunk-JUJY3HQS.cjs → chunk-JBC5DAI5.cjs} +19 -19
  19. package/dist/{chunk-JUJY3HQS.cjs.map → chunk-JBC5DAI5.cjs.map} +1 -1
  20. package/dist/{chunk-VTSRDC4W.js → chunk-JKRX3JHT.js} +2 -2
  21. package/dist/{chunk-M7O74OWG.cjs → chunk-KDXEKD3K.cjs} +31 -31
  22. package/dist/{chunk-M7O74OWG.cjs.map → chunk-KDXEKD3K.cjs.map} +1 -1
  23. package/dist/{chunk-Y3Y2DLNO.js → chunk-LT2PU6SK.js} +3 -3
  24. package/dist/{chunk-R5WJJL4V.js → chunk-RDCAJDX7.js} +5 -5
  25. package/dist/{chunk-N2JZ33V7.cjs → chunk-RFMH6MLM.cjs} +26 -26
  26. package/dist/{chunk-N2JZ33V7.cjs.map → chunk-RFMH6MLM.cjs.map} +1 -1
  27. package/dist/{chunk-BBUEY73L.js → chunk-RJ4OJWT5.js} +6269 -5339
  28. package/dist/chunk-RJ4OJWT5.js.map +1 -0
  29. package/dist/{chunk-G3UN2DXU.cjs → chunk-STYA77PH.cjs} +20 -4
  30. package/dist/chunk-STYA77PH.cjs.map +1 -0
  31. package/dist/{chunk-PSPWT2Q5.js → chunk-T2S7A5IU.js} +4 -4
  32. package/dist/{chunk-INDFIVDV.cjs → chunk-UAFJX7YV.cjs} +12 -12
  33. package/dist/{chunk-INDFIVDV.cjs.map → chunk-UAFJX7YV.cjs.map} +1 -1
  34. package/dist/{chunk-H6DFCF44.cjs → chunk-UO7TF67V.cjs} +82 -82
  35. package/dist/{chunk-H6DFCF44.cjs.map → chunk-UO7TF67V.cjs.map} +1 -1
  36. package/dist/{chunk-LNKWY74S.cjs → chunk-UTIW7O7R.cjs} +5 -5
  37. package/dist/{chunk-LNKWY74S.cjs.map → chunk-UTIW7O7R.cjs.map} +1 -1
  38. package/dist/{chunk-2DIOV7BR.js → chunk-WIITTL5I.js} +4 -4
  39. package/dist/{chunk-ZRANZNEA.js → chunk-Y37XYIWA.js} +2 -2
  40. package/dist/{chunk-ZV6E3U3C.cjs → chunk-ZN56E4FX.cjs} +30 -30
  41. package/dist/{chunk-ZV6E3U3C.cjs.map → chunk-ZN56E4FX.cjs.map} +1 -1
  42. package/dist/components/case-studies/index.cjs +9 -9
  43. package/dist/components/case-studies/index.js +3 -3
  44. package/dist/components/chat/index.cjs +3 -3
  45. package/dist/components/chat/index.js +2 -2
  46. package/dist/components/contact/index.cjs +4 -4
  47. package/dist/components/contact/index.js +3 -3
  48. package/dist/components/docs/index.cjs +6 -6
  49. package/dist/components/docs/index.js +5 -5
  50. package/dist/components/embeds/index.cjs +4 -4
  51. package/dist/components/embeds/index.js +3 -3
  52. package/dist/components/faq/index.cjs +4 -4
  53. package/dist/components/faq/index.js +3 -3
  54. package/dist/components/features/captions-url.cjs +12 -0
  55. package/dist/components/features/captions-url.cjs.map +1 -0
  56. package/dist/components/features/captions-url.js +10 -0
  57. package/dist/components/features/captions-url.js.map +1 -0
  58. package/dist/components/features/card-hit-layer.d.ts +40 -0
  59. package/dist/components/features/card-hit-layer.d.ts.map +1 -0
  60. package/dist/components/features/floating-walkthrough-video.d.ts +71 -0
  61. package/dist/components/features/floating-walkthrough-video.d.ts.map +1 -0
  62. package/dist/components/features/index.cjs +11 -3
  63. package/dist/components/features/index.cjs.map +1 -1
  64. package/dist/components/features/index.d.ts +4 -0
  65. package/dist/components/features/index.d.ts.map +1 -1
  66. package/dist/components/features/index.js +12 -4
  67. package/dist/components/features/use-walkthrough-video.d.ts +16 -0
  68. package/dist/components/features/use-walkthrough-video.d.ts.map +1 -0
  69. package/dist/components/features/video-bites-strip.d.ts.map +1 -1
  70. package/dist/components/features/video-center-badge.d.ts.map +1 -1
  71. package/dist/components/features/video-hover-preview.d.ts +68 -0
  72. package/dist/components/features/video-hover-preview.d.ts.map +1 -0
  73. package/dist/components/features/video.d.ts +78 -40
  74. package/dist/components/features/video.d.ts.map +1 -1
  75. package/dist/components/form.d.ts +0 -1
  76. package/dist/components/form.d.ts.map +1 -1
  77. package/dist/components/help-center-pages/index.cjs +21 -21
  78. package/dist/components/help-center-pages/index.js +12 -12
  79. package/dist/components/index.cjs +163 -155
  80. package/dist/components/index.cjs.map +1 -1
  81. package/dist/components/index.js +18 -10
  82. package/dist/components/index.js.map +1 -1
  83. package/dist/components/navigation/index.cjs +3 -3
  84. package/dist/components/navigation/index.js +2 -2
  85. package/dist/components/onboarding-guides/index.cjs +6 -6
  86. package/dist/components/onboarding-guides/index.js +5 -5
  87. package/dist/components/related-content/index.cjs +4 -4
  88. package/dist/components/related-content/index.js +3 -3
  89. package/dist/components/tickets/index.cjs +6 -6
  90. package/dist/components/tickets/index.js +5 -5
  91. package/dist/components/ui/button/button-styles.d.ts +2 -0
  92. package/dist/components/ui/button/button-styles.d.ts.map +1 -1
  93. package/dist/components/ui/button/button.d.ts +2 -2
  94. package/dist/components/ui/button/button.d.ts.map +1 -1
  95. package/dist/components/ui/file-manager/index.cjs +50 -50
  96. package/dist/components/ui/file-manager/index.js +1 -1
  97. package/dist/components/ui/index.cjs +3 -3
  98. package/dist/components/ui/index.js +2 -2
  99. package/dist/components/ui/page-actions.d.ts +2 -1
  100. package/dist/components/ui/page-actions.d.ts.map +1 -1
  101. package/dist/index.cjs +27 -3
  102. package/dist/index.cjs.map +1 -1
  103. package/dist/index.js +28 -4
  104. package/dist/types/marketing.d.ts +11 -1
  105. package/dist/types/marketing.d.ts.map +1 -1
  106. package/dist/types/supabase.d.ts +80 -0
  107. package/dist/types/supabase.d.ts.map +1 -1
  108. package/dist/types/video-processing.d.ts +1 -1
  109. package/dist/types/video-processing.d.ts.map +1 -1
  110. package/dist/utils/announcement-storage.d.ts +1 -1
  111. package/dist/utils/announcement-storage.d.ts.map +1 -1
  112. package/dist/utils/dismiss-cookie.d.ts +27 -0
  113. package/dist/utils/dismiss-cookie.d.ts.map +1 -0
  114. package/dist/utils/dismissal-storage.d.ts +25 -0
  115. package/dist/utils/dismissal-storage.d.ts.map +1 -0
  116. package/dist/utils/index.cjs +48 -10
  117. package/dist/utils/index.cjs.map +1 -1
  118. package/dist/utils/index.d.ts +2 -0
  119. package/dist/utils/index.d.ts.map +1 -1
  120. package/dist/utils/index.js +41 -11
  121. package/dist/utils/index.js.map +1 -1
  122. package/package.json +8 -2
  123. package/src/.index.md +39 -32
  124. package/src/.platform-domains.md +65 -0
  125. package/src/assets/.fae-avatar.md +33 -0
  126. package/src/assets/.index.md +15 -9
  127. package/src/components/.agent-mark.md +31 -0
  128. package/src/components/.announcement-bar.md +47 -35
  129. package/src/components/.calendar.md +19 -15
  130. package/src/components/.categories-cart.md +34 -30
  131. package/src/components/.category-card.md +33 -33
  132. package/src/components/.chart.md +38 -40
  133. package/src/components/.command.md +47 -23
  134. package/src/components/.comment-card.md +31 -26
  135. package/src/components/.content-loading-container.md +45 -20
  136. package/src/components/.context-menu.md +45 -31
  137. package/src/components/.date-time-picker.md +36 -30
  138. package/src/components/.empty-state.md +31 -31
  139. package/src/components/.faq-accordion.md +20 -30
  140. package/src/components/.filter-chip.md +36 -33
  141. package/src/components/.footer-waitlist-button.md +27 -21
  142. package/src/components/.footer.md +39 -24
  143. package/src/components/.form.md +32 -20
  144. package/src/components/.hero-image-uploader.md +35 -31
  145. package/src/components/.icon-display.md +53 -0
  146. package/src/components/.image-cropper.md +34 -33
  147. package/src/components/.index.md +25 -29
  148. package/src/components/.logs-list.md +27 -23
  149. package/src/components/.media-carousel.md +47 -26
  150. package/src/components/.metric-value.md +27 -24
  151. package/src/components/.msp-display.md +29 -23
  152. package/src/components/.open-source-features.md +23 -26
  153. package/src/components/.pagination.md +44 -39
  154. package/src/components/.persistent-filter-controls.md +61 -28
  155. package/src/components/.pricing-display.md +34 -33
  156. package/src/components/.results-count.md +33 -20
  157. package/src/components/.smooth-accordion.md +24 -20
  158. package/src/components/.social-icon-row.md +33 -21
  159. package/src/components/.sonner.md +40 -25
  160. package/src/components/.steps.md +39 -25
  161. package/src/components/.tool-icon.md +34 -21
  162. package/src/components/.unified-filter-logic.md +32 -36
  163. package/src/components/.user-display.md +33 -28
  164. package/src/components/.user-summary-stub.md +40 -33
  165. package/src/components/.vendor-display-button.md +17 -15
  166. package/src/components/.vendor-icon.md +17 -25
  167. package/src/components/.vendor-tag.md +39 -34
  168. package/src/components/.why-it-matters.md +15 -11
  169. package/src/components/.yes-no-display.md +36 -31
  170. package/src/components/authors/.author-detail-view.md +50 -0
  171. package/src/components/case-studies/.index.md +26 -0
  172. package/src/components/case-studies/.share-experience-section.md +45 -0
  173. package/src/components/chat/.approval-batch-message.md +48 -33
  174. package/src/components/chat/.approval-request-message.md +37 -26
  175. package/src/components/chat/.chat-archive-page.md +56 -0
  176. package/src/components/chat/.chat-attachment-bar.md +32 -40
  177. package/src/components/chat/.chat-composer.md +43 -0
  178. package/src/components/chat/.chat-container.md +41 -25
  179. package/src/components/chat/.chat-context-memory-bar.md +53 -0
  180. package/src/components/chat/.chat-context-picker.md +89 -0
  181. package/src/components/chat/.chat-header-icon-button.md +43 -0
  182. package/src/components/chat/.chat-header-search-field.md +51 -0
  183. package/src/components/chat/.chat-input.md +63 -30
  184. package/src/components/chat/.chat-list-empty-state.md +44 -0
  185. package/src/components/chat/.chat-message-enhanced.md +29 -31
  186. package/src/components/chat/.chat-message-list.md +34 -44
  187. package/src/components/chat/.chat-message-row.md +56 -0
  188. package/src/components/chat/.chat-message-skeleton.md +32 -26
  189. package/src/components/chat/.chat-panel-header-mobile.md +46 -0
  190. package/src/components/chat/.chat-panel-header.md +80 -0
  191. package/src/components/chat/.chat-sidebar-skeleton.md +31 -30
  192. package/src/components/chat/.chat-sidebar.md +36 -29
  193. package/src/components/chat/.chat-ticket-list.md +38 -23
  194. package/src/components/chat/.chat-typing-indicator.md +37 -19
  195. package/src/components/chat/.context-compaction-display.md +19 -15
  196. package/src/components/chat/.context-items-list.md +57 -0
  197. package/src/components/chat/.embeddable-chat.md +57 -66
  198. package/src/components/chat/.error-message-display.md +40 -22
  199. package/src/components/chat/.guide-mode-banner.md +41 -0
  200. package/src/components/chat/.guide-welcome.md +43 -0
  201. package/src/components/chat/.index.md +26 -21
  202. package/src/components/chat/.mingo-chat-history.md +63 -0
  203. package/src/components/chat/.mingo-chat-modals.md +44 -0
  204. package/src/components/chat/.mingo-history-rail.md +63 -0
  205. package/src/components/chat/.mingo-info-card.md +59 -0
  206. package/src/components/chat/.mingo-onboarding-card.md +21 -27
  207. package/src/components/chat/.mingo-welcome.md +60 -0
  208. package/src/components/chat/.model-display.md +33 -25
  209. package/src/components/chat/.msp-organization-card-skeleton.md +44 -0
  210. package/src/components/chat/.msp-organization-card.md +51 -0
  211. package/src/components/chat/.nav-link-anchor-via-runtime.md +36 -25
  212. package/src/components/chat/.quick-action-chip.md +60 -0
  213. package/src/components/chat/.quick-action-marquee.md +53 -0
  214. package/src/components/chat/.quick-action-wall.md +68 -0
  215. package/src/components/chat/.remark-mention-chips.md +41 -0
  216. package/src/components/chat/.slash-command-suggestions.md +30 -36
  217. package/src/components/chat/.source-action-button.md +28 -25
  218. package/src/components/chat/.tool-call-blocks.md +18 -30
  219. package/src/components/chat/.tool-execution-display.md +29 -34
  220. package/src/components/chat/entity-cards/.admin-content-card.md +29 -22
  221. package/src/components/chat/entity-cards/.blog-card.md +44 -33
  222. package/src/components/chat/entity-cards/.blog-image-placeholder.md +20 -18
  223. package/src/components/chat/entity-cards/.case-study-card.md +24 -33
  224. package/src/components/chat/entity-cards/.chat-ticket-item.md +39 -22
  225. package/src/components/chat/entity-cards/.customer-interview-card.md +29 -32
  226. package/src/components/chat/entity-cards/.data-room-doc-card.md +21 -22
  227. package/src/components/chat/entity-cards/.dispatch.md +41 -24
  228. package/src/components/chat/entity-cards/.entity-author-card.md +36 -33
  229. package/src/components/chat/entity-cards/.entity-portrait-card.md +47 -0
  230. package/src/components/chat/entity-cards/.generic-entity-card.md +26 -25
  231. package/src/components/chat/entity-cards/.github-activity-card.md +35 -41
  232. package/src/components/chat/entity-cards/.hubspot-ticket-card.md +22 -28
  233. package/src/components/chat/entity-cards/.index.md +33 -44
  234. package/src/components/chat/entity-cards/.investor-update-card.md +36 -25
  235. package/src/components/chat/entity-cards/.onboarding-guide-card.md +20 -29
  236. package/src/components/chat/entity-cards/.product-release-card-defaults.md +26 -19
  237. package/src/components/chat/entity-cards/.program-card.md +30 -33
  238. package/src/components/chat/entity-cards/.roadmap-card.md +40 -31
  239. package/src/components/chat/entity-cards/.roadmap-vote-button.md +33 -36
  240. package/src/components/chat/entity-cards/.slack-message-card.md +31 -32
  241. package/src/components/chat/entity-cards/.use-cover-image-fallback.md +47 -0
  242. package/src/components/chat/entity-cards/.use-entity-card-link.md +51 -0
  243. package/src/components/chat/entity-cards/.use-entity-card-placeholder.md +47 -0
  244. package/src/components/chat/entity-cards/.what-i-shipped-card.md +43 -0
  245. package/src/components/chat/hooks/.index.md +33 -30
  246. package/src/components/chat/hooks/.use-chat-card-item.md +30 -17
  247. package/src/components/chat/hooks/.use-chat-dialog-manager.md +59 -0
  248. package/src/components/chat/hooks/.use-chat-identity.md +37 -25
  249. package/src/components/chat/hooks/.use-chunk-catchup.md +53 -36
  250. package/src/components/chat/hooks/.use-empty-state-config.md +39 -0
  251. package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +65 -30
  252. package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
  253. package/src/components/chat/hooks/.use-nats-dialog-subscription.md +66 -50
  254. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +58 -31
  255. package/src/components/chat/hooks/.use-scripted-stream.md +46 -0
  256. package/src/components/chat/hooks/.use-slash-commands.md +32 -25
  257. package/src/components/chat/hooks/.use-sse-chat-adapter.md +32 -21
  258. package/src/components/chat/hooks/.use-unified-chat.md +45 -35
  259. package/src/components/chat/types/.api.types.md +49 -41
  260. package/src/components/chat/types/.chat.types.md +56 -34
  261. package/src/components/chat/types/.component.types.md +36 -36
  262. package/src/components/chat/types/.context-item.types.md +61 -0
  263. package/src/components/chat/types/.index.md +32 -17
  264. package/src/components/chat/types/.message.types.md +44 -45
  265. package/src/components/chat/types/.network.types.md +46 -46
  266. package/src/components/chat/types/.processing.types.md +49 -37
  267. package/src/components/chat/types/.unified-chat-state.types.md +41 -26
  268. package/src/components/chat/types/entities/.content-ref.md +20 -31
  269. package/src/components/chat/types/entities/.investor-update.md +14 -16
  270. package/src/components/chat/types/entities/.onboarding-guide.md +35 -34
  271. package/src/components/chat/types/entities/.program-types.md +55 -43
  272. package/src/components/chat/utils/.chip-action-class.md +17 -19
  273. package/src/components/chat/utils/.chip-styles.md +18 -18
  274. package/src/components/chat/utils/.chunk-parser.md +48 -37
  275. package/src/components/chat/utils/.compact-card-classes.md +33 -35
  276. package/src/components/chat/utils/.execute-navigation.md +49 -0
  277. package/src/components/chat/utils/.extract-incomplete-message-state.md +9 -12
  278. package/src/components/chat/utils/.history-merge.md +65 -0
  279. package/src/components/chat/utils/.icon-library.md +33 -31
  280. package/src/components/chat/utils/.icon-registry.md +44 -0
  281. package/src/components/chat/utils/.index.md +37 -33
  282. package/src/components/chat/utils/.is-cross-origin-url.md +26 -22
  283. package/src/components/chat/utils/.message-segment-accumulator.md +46 -25
  284. package/src/components/chat/utils/.nav-anchor-props.md +29 -34
  285. package/src/components/chat/utils/.nav-click-handler.md +29 -33
  286. package/src/components/chat/utils/.process-historical-messages.md +29 -33
  287. package/src/components/chat/utils/.scripted-stream.md +52 -0
  288. package/src/components/chat/utils/.source-row-cta.md +32 -31
  289. package/src/components/chat/utils/.tool-call-helpers.md +25 -17
  290. package/src/components/contact/.contact-form.md +24 -19
  291. package/src/components/docs/.doc-navigation-context.md +49 -0
  292. package/src/components/docs/.doc-viewer.md +64 -0
  293. package/src/components/docs/.docs-hub-page.md +49 -0
  294. package/src/components/docs/.index.md +51 -0
  295. package/src/components/docs/.skeletons.md +47 -0
  296. package/src/components/docs/.use-docs-resolve-link.md +61 -0
  297. package/src/components/docs/.use-document-tree.md +83 -0
  298. package/src/components/docs/.use-scroll-spy.md +58 -0
  299. package/src/components/embeds/.embed-container.md +45 -0
  300. package/src/components/embeds/.embed-iframe.md +51 -0
  301. package/src/components/embeds/.figma-embed.md +43 -0
  302. package/src/components/embeds/.file-download-card.md +47 -0
  303. package/src/components/embeds/.google-sheets-viewer.md +40 -0
  304. package/src/components/embeds/.index.md +58 -0
  305. package/src/components/embeds/.linkedin-embed-client.md +50 -0
  306. package/src/components/embeds/.markdown-image.md +40 -0
  307. package/src/components/embeds/.og-link-preview.md +54 -0
  308. package/src/components/embeds/.pdf-viewer.md +43 -0
  309. package/src/components/embeds/.reddit-embed-client.md +40 -0
  310. package/src/components/embeds/.rich-markdown-runtime.md +53 -0
  311. package/src/components/embeds/.twitter-embed-client.md +44 -0
  312. package/src/components/faq/.faq-document-page.md +68 -0
  313. package/src/components/faq/.faq-section.md +55 -0
  314. package/src/components/faq/.index.md +29 -0
  315. package/src/components/faq/.json-ld.md +48 -0
  316. package/src/components/features/.array-entry-manager.md +32 -24
  317. package/src/components/features/.auth-providers-list.md +33 -32
  318. package/src/components/features/.captions-url.md +43 -0
  319. package/src/components/features/.cards-strip.md +48 -0
  320. package/src/components/features/.changelog-manager.md +17 -20
  321. package/src/components/features/.command-box.md +11 -16
  322. package/src/components/features/.entity-summary-editor.md +20 -15
  323. package/src/components/features/.entity-tag-badges.md +43 -0
  324. package/src/components/features/.entity-video-section.md +31 -41
  325. package/src/components/features/.figma-prototype-viewer.md +55 -37
  326. package/src/components/features/.filters-dropdown.md +14 -13
  327. package/src/components/features/.highlight-config-section.md +19 -16
  328. package/src/components/features/.highlight-video-combined-section.md +28 -19
  329. package/src/components/features/.highlight-video-preview.md +13 -11
  330. package/src/components/features/.highlight-video-section.md +26 -22
  331. package/src/components/features/.index.md +40 -36
  332. package/src/components/features/.media-gallery-manager.md +37 -35
  333. package/src/components/features/.mux-origins.md +46 -0
  334. package/src/components/features/.og-editor-preview.md +29 -24
  335. package/src/components/features/.os-type-badge-group.md +26 -18
  336. package/src/components/features/.os-type-badge.md +41 -24
  337. package/src/components/features/.paths-display.md +42 -25
  338. package/src/components/features/.platform-badge.md +26 -17
  339. package/src/components/features/.policy-configuration-panel.md +33 -31
  340. package/src/components/features/.provider-button.md +29 -20
  341. package/src/components/features/.push-button-selector.md +39 -41
  342. package/src/components/features/.release-media-manager.md +41 -34
  343. package/src/components/features/.section-selector.md +27 -16
  344. package/src/components/features/.select-button.md +21 -32
  345. package/src/components/features/.seo-editor-preview.md +49 -36
  346. package/src/components/features/.social-links-manager.md +40 -18
  347. package/src/components/features/.start-with-openframe-button.md +30 -32
  348. package/src/components/features/.status-filter-component.md +29 -38
  349. package/src/components/features/.tags-selector.md +25 -29
  350. package/src/components/features/.transcript-summary-editor.md +24 -18
  351. package/src/components/features/.use-video-warmup.md +47 -0
  352. package/src/components/features/.video-bites-display.md +36 -37
  353. package/src/components/features/.video-bites-shared.md +44 -0
  354. package/src/components/features/.video-bites-strip.md +63 -0
  355. package/src/components/features/.video-center-badge.md +38 -0
  356. package/src/components/features/.video-ratio-tabs.md +38 -31
  357. package/src/components/features/.video-source-selector.md +24 -27
  358. package/src/components/features/.video.md +35 -27
  359. package/src/components/features/.waitlist-form.md +39 -33
  360. package/src/components/features/.warning-block.md +53 -0
  361. package/src/components/features/ai-enrich/.AIEnrichSection.md +24 -25
  362. package/src/components/features/ai-enrich/.AIRequiredBadge.md +22 -21
  363. package/src/components/features/ai-enrich/.AIStatusIndicator.md +42 -35
  364. package/src/components/features/ai-enrich/.AIWarningsSection.md +23 -20
  365. package/src/components/features/ai-enrich/.ConfidenceBadge.md +35 -20
  366. package/src/components/features/auth/.auth-benefits-panel.md +48 -0
  367. package/src/components/features/auth/.auth-branding.md +51 -0
  368. package/src/components/features/auth/.auth-shell.md +51 -0
  369. package/src/components/features/auth/.back-to-login-link.md +48 -0
  370. package/src/components/features/auth/.complete-account-form.md +45 -0
  371. package/src/components/features/auth/.create-organization-form.md +53 -0
  372. package/src/components/features/auth/.index.md +48 -0
  373. package/src/components/features/auth/.invite-link-invalid-modal.md +42 -0
  374. package/src/components/features/auth/.login-form.md +42 -0
  375. package/src/components/features/auth/.openframe-sso-login-form.md +46 -0
  376. package/src/components/features/auth/.openframe-sso-signup-form.md +51 -0
  377. package/src/components/features/auth/.password-reset-form.md +57 -0
  378. package/src/components/features/auth/.sso-auth-shell.md +35 -0
  379. package/src/components/features/auth/.sso-providers.md +42 -0
  380. package/src/components/features/auth/.terms-agreement-label.md +28 -0
  381. package/src/components/features/board/.board-column-header.md +24 -18
  382. package/src/components/features/board/.board-column.md +32 -32
  383. package/src/components/features/board/.board-ticket-approval.md +42 -0
  384. package/src/components/features/board/.board.md +38 -38
  385. package/src/components/features/board/.index.md +35 -38
  386. package/src/components/features/board/.ticket-card.md +33 -36
  387. package/src/components/features/board/.types.md +38 -31
  388. package/src/components/features/card-hit-layer.tsx +84 -0
  389. package/src/components/features/floating-walkthrough-video.tsx +891 -0
  390. package/src/components/features/index.ts +4 -0
  391. package/src/components/features/notifications/.approval-request-notification-tile.md +45 -0
  392. package/src/components/features/notifications/.index.md +35 -31
  393. package/src/components/features/notifications/.notification-drawer.md +32 -19
  394. package/src/components/features/notifications/.notification-popups.md +51 -0
  395. package/src/components/features/notifications/.notification-tile.md +43 -27
  396. package/src/components/features/notifications/.notifications-context.md +42 -45
  397. package/src/components/features/notifications/.types.md +51 -31
  398. package/src/components/features/ticket-status-config-list/.ticket-status-config-list.md +51 -0
  399. package/src/components/features/time-tracker/.index.md +48 -0
  400. package/src/components/features/time-tracker/.time-tracker-context.md +55 -0
  401. package/src/components/features/time-tracker/.time-tracker-header-button.md +51 -0
  402. package/src/components/features/time-tracker/.time-tracker-panel.md +58 -0
  403. package/src/components/features/time-tracker/.types.md +51 -0
  404. package/src/components/features/time-tracker/.use-tracker-clock.md +32 -0
  405. package/src/components/features/use-walkthrough-video.ts +70 -0
  406. package/src/components/features/video-bites-strip.tsx +46 -146
  407. package/src/components/features/video-center-badge.tsx +11 -2
  408. package/src/components/features/video-hover-preview.tsx +201 -0
  409. package/src/components/features/video.tsx +368 -73
  410. package/src/components/help-center-pages/.delivery-page.md +51 -0
  411. package/src/components/help-center-pages/.index.md +51 -0
  412. package/src/components/help-center-pages/.onboarding-guides-catalog-page.md +53 -0
  413. package/src/components/help-center-pages/.product-releases-list-page.md +51 -0
  414. package/src/components/help-center-pages/.roadmap-page.md +46 -0
  415. package/src/components/icons/.figma-icon.md +13 -7
  416. package/src/components/icons/.index.md +26 -22
  417. package/src/components/icons/.vendor-directory-icon.md +30 -18
  418. package/src/components/icons/.x-logo.md +26 -10
  419. package/src/components/icons-v2-generated/.index.md +30 -41
  420. package/src/components/icons-v2-generated/brand-logos/.index.md +25 -19
  421. package/src/components/icons-v2-generated/communication/.index.md +26 -30
  422. package/src/components/icons-v2-generated/logos/.flamingo-logo-icon.md +41 -0
  423. package/src/components/layout/.article-detail-layout.md +32 -21
  424. package/src/components/layout/.page-container.md +25 -23
  425. package/src/components/layout/.page-heading.md +48 -0
  426. package/src/components/layout/.page-layout.md +30 -25
  427. package/src/components/layout/.title-block.md +43 -24
  428. package/src/components/loading/.card-skeleton.md +28 -35
  429. package/src/components/loading/.category-card-skeleton.md +25 -23
  430. package/src/components/loading/.device-card-skeleton.md +22 -15
  431. package/src/components/loading/.margin-report-skeleton.md +30 -35
  432. package/src/components/loading/.openmsp-heartbeat.md +30 -32
  433. package/src/components/loading/.organization-card-skeleton.md +22 -25
  434. package/src/components/loading/.organization-icon-skeleton.md +39 -27
  435. package/src/components/loading/.page-layout-skeleton.md +50 -28
  436. package/src/components/loading/.unified-skeleton.md +37 -40
  437. package/src/components/loading/.users-grid-skeleton.md +19 -38
  438. package/src/components/navigation/.app-header.md +35 -28
  439. package/src/components/navigation/.app-layout-context.md +48 -0
  440. package/src/components/navigation/.app-layout-drawer.md +56 -0
  441. package/src/components/navigation/.app-layout.md +24 -23
  442. package/src/components/navigation/.header-mingo-button.md +46 -0
  443. package/src/components/navigation/.header-organization-filter.md +32 -18
  444. package/src/components/navigation/.header.md +24 -31
  445. package/src/components/navigation/.index.md +36 -50
  446. package/src/components/navigation/.mingo-ai-button.md +41 -0
  447. package/src/components/navigation/.mobile-burger-menu.md +29 -29
  448. package/src/components/navigation/.mobile-nav-panel.md +41 -49
  449. package/src/components/navigation/.multi-level-navigation.md +76 -0
  450. package/src/components/navigation/.navigation-sidebar-item.md +14 -14
  451. package/src/components/navigation/.navigation-sidebar.md +30 -23
  452. package/src/components/navigation/.sliding-sidebar.md +30 -25
  453. package/src/components/navigation/.sticky-section-nav.md +23 -21
  454. package/src/components/onboarding-guides/.index.md +40 -0
  455. package/src/components/onboarding-guides/.onboarding-guide-detail-view.md +55 -0
  456. package/src/components/onboarding-guides/.onboarding-guides-catalog-skeleton.md +33 -0
  457. package/src/components/onboarding-guides/.onboarding-guides-catalog-view.md +50 -0
  458. package/src/components/onboarding-guides/hooks/.use-onboarding-guides.md +54 -0
  459. package/src/components/platform/.CveLink.md +28 -17
  460. package/src/components/platform/.ScriptArguments.md +18 -23
  461. package/src/components/platform/.ScriptInfoSection.md +27 -21
  462. package/src/components/platform/.ShellTypeBadge.md +34 -18
  463. package/src/components/platform/.SoftwareInfo.md +23 -21
  464. package/src/components/platform/.ToolBadge.md +18 -16
  465. package/src/components/profile/.ProfileLoadingSkeleton.md +24 -23
  466. package/src/components/related-content/.index.md +41 -0
  467. package/src/components/related-content/.related-content-section.md +62 -0
  468. package/src/components/shared/.article-author-byline.md +56 -0
  469. package/src/components/shared/.detail-page-skeleton.md +32 -43
  470. package/src/components/shared/.media-gallery-strip.md +43 -0
  471. package/src/components/shared/delivery/.delivery-lists.md +20 -19
  472. package/src/components/shared/delivery/.delivery-row.md +24 -20
  473. package/src/components/shared/delivery/.delivery-table.md +20 -22
  474. package/src/components/shared/dev-section/.dev-card-row.md +28 -36
  475. package/src/components/shared/dev-section/.dev-section-page.md +36 -25
  476. package/src/components/shared/dev-section/.dev-section-view.md +32 -22
  477. package/src/components/shared/doc-search/.doc-search-bar.md +58 -0
  478. package/src/components/shared/doc-search/.doc-search-result-row.md +50 -0
  479. package/src/components/shared/doc-search/.format-relative-path.md +30 -0
  480. package/src/components/shared/doc-search/.index.md +46 -0
  481. package/src/components/shared/doc-search/.map-doc-search-results.md +44 -0
  482. package/src/components/shared/doc-search/.resolve-search-result-action.md +52 -0
  483. package/src/components/shared/doc-search/.types.md +49 -0
  484. package/src/components/shared/doc-search/.use-doc-search.md +66 -0
  485. package/src/components/shared/legal-document/.legal-document-page.md +26 -20
  486. package/src/components/shared/legal-document/.use-legal-docs.md +36 -30
  487. package/src/components/shared/onboarding/.onboarding-step-card.md +24 -16
  488. package/src/components/shared/onboarding/.onboarding-walkthrough.md +42 -28
  489. package/src/components/shared/product-release/.index.md +33 -24
  490. package/src/components/shared/product-release/.product-release-card-skeleton.md +22 -28
  491. package/src/components/shared/product-release/.product-release-card.md +28 -29
  492. package/src/components/shared/product-release/.product-releases-view.md +49 -0
  493. package/src/components/shared/product-release/.release-detail-page.md +30 -15
  494. package/src/components/shared/roadmap/.index.md +29 -24
  495. package/src/components/shared/roadmap/.roadmap-grid.md +43 -54
  496. package/src/components/shared/roadmap/.roadmap-view.md +41 -0
  497. package/src/components/shared/roadmap/.use-roadmap-voting.md +27 -17
  498. package/src/components/switch.tsx +1 -1
  499. package/src/components/tickets/.help-center-card.md +32 -28
  500. package/src/components/tickets/.help-center-create-form.md +34 -22
  501. package/src/components/tickets/.help-center-list.md +36 -25
  502. package/src/components/tickets/.index.md +30 -45
  503. package/src/components/tickets/.ticket-center.md +31 -38
  504. package/src/components/tickets/.ticket-detail-drawer.md +20 -30
  505. package/src/components/tickets/.ticket-open-form.md +24 -26
  506. package/src/components/tickets/.ticket-reply-composer.md +51 -0
  507. package/src/components/tickets/.ticket-row.md +26 -11
  508. package/src/components/tickets/.types.md +56 -38
  509. package/src/components/tickets/hooks/.use-ticket-actions.md +60 -47
  510. package/src/components/tickets/hooks/.use-ticket-engagements.md +27 -27
  511. package/src/components/tickets/hooks/.use-tickets-list.md +24 -30
  512. package/src/components/ui/.accordion.md +28 -21
  513. package/src/components/ui/.actions-menu.md +36 -54
  514. package/src/components/ui/.ai-generated-badge.md +25 -0
  515. package/src/components/ui/.alert-dialog.md +21 -16
  516. package/src/components/ui/.alert.md +30 -25
  517. package/src/components/ui/.allowed-domains-input.md +26 -15
  518. package/src/components/ui/.announcement-bar-view.md +46 -0
  519. package/src/components/ui/.autocomplete.md +40 -27
  520. package/src/components/ui/.badge.md +34 -31
  521. package/src/components/ui/.brand-association-card.md +22 -18
  522. package/src/components/ui/.breadcrumb.md +18 -14
  523. package/src/components/ui/.bullet-list.md +35 -23
  524. package/src/components/ui/.card.md +47 -30
  525. package/src/components/ui/.checkbox-block.md +34 -22
  526. package/src/components/ui/.checkbox-with-description.md +18 -20
  527. package/src/components/ui/.chevron-button.md +29 -29
  528. package/src/components/ui/.circular-progress.md +30 -41
  529. package/src/components/ui/.color-preset-select.md +54 -0
  530. package/src/components/ui/.color-swatch.md +37 -0
  531. package/src/components/ui/.content-loader.md +34 -27
  532. package/src/components/ui/.crossfade-panels.md +50 -0
  533. package/src/components/ui/.cursor-pagination.md +38 -26
  534. package/src/components/ui/.dashboard-info-card.md +46 -27
  535. package/src/components/ui/.date-picker.md +52 -36
  536. package/src/components/ui/.device-card-compact.md +23 -20
  537. package/src/components/ui/.device-card.md +39 -30
  538. package/src/components/ui/.dialog.md +14 -14
  539. package/src/components/ui/.drawer.md +45 -39
  540. package/src/components/ui/.dropdown-button.md +41 -33
  541. package/src/components/ui/.dropdown-menu.md +40 -23
  542. package/src/components/ui/.duration-input.md +41 -0
  543. package/src/components/ui/.entity-image.md +32 -28
  544. package/src/components/ui/.error-state.md +30 -26
  545. package/src/components/ui/.fade-preview.md +44 -0
  546. package/src/components/ui/.field-wrapper.md +34 -23
  547. package/src/components/ui/.file-upload.md +30 -18
  548. package/src/components/ui/.filter-modal.md +30 -32
  549. package/src/components/ui/.filter-pill-row.md +58 -0
  550. package/src/components/ui/.floating-tooltip.md +27 -32
  551. package/src/components/ui/.hidden-tags-popup.md +18 -20
  552. package/src/components/ui/.highlight-card.md +36 -23
  553. package/src/components/ui/.honeypot-field.md +41 -0
  554. package/src/components/ui/.hover-dropdown.md +44 -31
  555. package/src/components/ui/.image-gallery-modal.md +28 -30
  556. package/src/components/ui/.image-uploader.md +39 -22
  557. package/src/components/ui/.index.md +33 -31
  558. package/src/components/ui/.info-card-row.md +50 -0
  559. package/src/components/ui/.info-card.md +27 -20
  560. package/src/components/ui/.info-row.md +30 -24
  561. package/src/components/ui/.info-section.md +63 -0
  562. package/src/components/ui/.input.md +29 -28
  563. package/src/components/ui/.label.md +34 -26
  564. package/src/components/ui/.markdown-editor.md +26 -25
  565. package/src/components/ui/.marquee-wall.md +64 -0
  566. package/src/components/ui/.menubar.md +50 -16
  567. package/src/components/ui/.modal-v2.md +41 -27
  568. package/src/components/ui/.modal.md +22 -19
  569. package/src/components/ui/.more-actions-menu.md +30 -24
  570. package/src/components/ui/.navigation-menu.md +40 -25
  571. package/src/components/ui/.organization-card.md +46 -27
  572. package/src/components/ui/.page-actions.md +55 -41
  573. package/src/components/ui/.page-loader.md +40 -23
  574. package/src/components/ui/.password-input.md +30 -0
  575. package/src/components/ui/.phone-input.md +20 -22
  576. package/src/components/ui/.portal-container.md +43 -0
  577. package/src/components/ui/.progress-bar.md +40 -27
  578. package/src/components/ui/.release-changelog-section.md +32 -26
  579. package/src/components/ui/.rich-markdown-renderer.md +45 -0
  580. package/src/components/ui/.scroll-fade.md +56 -0
  581. package/src/components/ui/.search-input.md +55 -37
  582. package/src/components/ui/.select.md +25 -26
  583. package/src/components/ui/.service-card.md +25 -19
  584. package/src/components/ui/.sheet.md +21 -21
  585. package/src/components/ui/.simple-markdown-renderer.md +36 -24
  586. package/src/components/ui/.slack-channel-chip.md +49 -0
  587. package/src/components/ui/.square-avatar.md +29 -26
  588. package/src/components/ui/.stacked-rows-panel.md +61 -0
  589. package/src/components/ui/.status-badge.md +30 -24
  590. package/src/components/ui/.status-indicator.md +35 -21
  591. package/src/components/ui/.tab-content.md +34 -22
  592. package/src/components/ui/.tab-navigation.md +40 -50
  593. package/src/components/ui/.tab-selector.md +48 -31
  594. package/src/components/ui/.tabs.md +34 -21
  595. package/src/components/ui/.tag-search-input.md +20 -20
  596. package/src/components/ui/.tag-select-dropdown.md +59 -0
  597. package/src/components/ui/.tag.md +25 -43
  598. package/src/components/ui/.tags-input.md +31 -31
  599. package/src/components/ui/.textarea.md +32 -30
  600. package/src/components/ui/.ticket-attachments-list.md +36 -29
  601. package/src/components/ui/.ticket-info-section.md +37 -42
  602. package/src/components/ui/.ticket-status-config-row.md +66 -0
  603. package/src/components/ui/.ticket-status-tag.md +39 -35
  604. package/src/components/ui/.toaster.md +21 -15
  605. package/src/components/ui/.toggle.md +38 -37
  606. package/src/components/ui/.tooltip.md +16 -13
  607. package/src/components/ui/button/.button-styles.md +17 -18
  608. package/src/components/ui/button/.button.md +30 -37
  609. package/src/components/ui/button/.split-button.md +46 -23
  610. package/src/components/ui/button/button-styles.ts +13 -0
  611. package/src/components/ui/button/button.tsx +5 -0
  612. package/src/components/ui/data-table/.data-table-body.md +50 -35
  613. package/src/components/ui/data-table/.data-table-empty.md +17 -33
  614. package/src/components/ui/data-table/.data-table-header.md +43 -40
  615. package/src/components/ui/data-table/.data-table-row.md +31 -31
  616. package/src/components/ui/data-table/.types.md +23 -28
  617. package/src/components/ui/file-manager/.file-manager-breadcrumb.md +16 -24
  618. package/src/components/ui/file-manager/.file-manager-empty.md +23 -15
  619. package/src/components/ui/file-manager/.file-manager-skeleton.md +34 -36
  620. package/src/components/ui/file-manager/.file-manager-table-row.md +29 -29
  621. package/src/components/ui/file-manager/.file-manager-table.md +39 -24
  622. package/src/components/ui/no-data/.index.md +22 -0
  623. package/src/components/ui/no-data/.no-data-actions.md +29 -0
  624. package/src/components/ui/no-data/.no-data-message.md +37 -0
  625. package/src/components/ui/no-data/.no-data-styles.md +39 -0
  626. package/src/components/ui/no-data/.no-data.md +59 -0
  627. package/src/components/ui/page-actions.tsx +2 -1
  628. package/src/components/ui/query-report-table/.query-report-table-header.md +15 -15
  629. package/src/components/ui/query-report-table/.query-report-table-row.md +16 -16
  630. package/src/components/ui/query-report-table/.query-report-table.md +39 -24
  631. package/src/components/ui/table/.table-column-filter-dropdown.md +15 -9
  632. package/src/components/ui/table/.table-description-cell.md +13 -12
  633. package/src/components/ui/table/.table-empty-state.md +19 -20
  634. package/src/components/ui/table/.table-row.md +30 -20
  635. package/src/components/ui/table/.table-skeleton.md +32 -27
  636. package/src/components/ui/table/.table-timestamp-cell.md +24 -23
  637. package/src/components/ui/table/.table.md +43 -30
  638. package/src/components/ui/table/.types.md +49 -45
  639. package/src/components/ui/table/.use-table-motion.md +45 -0
  640. package/src/contexts/.chat-runtime-context.md +55 -26
  641. package/src/contexts/.endpoints-runtime-context.md +40 -44
  642. package/src/embed-shims/.next-navigation.md +38 -31
  643. package/src/hooks/.api-hooks.md +28 -21
  644. package/src/hooks/.index.md +30 -25
  645. package/src/hooks/.use-authed-image-src.md +38 -0
  646. package/src/hooks/.use-contact-submission.md +35 -36
  647. package/src/hooks/.use-humanity-signals.md +47 -0
  648. package/src/hooks/.use-near-viewport.md +30 -30
  649. package/src/hooks/.use-og-placeholder-url.md +57 -0
  650. package/src/hooks/.use-scroll-to-hash.md +46 -0
  651. package/src/hooks/.use-self-fetch.md +52 -0
  652. package/src/hooks/state/.flatten-schema.md +37 -29
  653. package/src/hooks/ui/.index.md +37 -25
  654. package/src/hooks/ui/.use-auto-limit-tags.md +55 -38
  655. package/src/hooks/ui/.use-deferred-error.md +44 -0
  656. package/src/hooks/ui/.use-focus-trap.md +59 -0
  657. package/src/hooks/ui/.use-header-height.md +37 -0
  658. package/src/hooks/ui/.use-horizontal-scrollbar.md +25 -34
  659. package/src/hooks/ui/.use-marquee-engine.md +73 -0
  660. package/src/hooks/ui/.use-notification-permission.md +49 -0
  661. package/src/hooks/ui/.use-reset-on-page-hidden.md +40 -0
  662. package/src/hooks/ui/.use-suppress-clone-focus.md +41 -0
  663. package/src/nats/.index.md +39 -0
  664. package/src/nats/.nats-provider.md +46 -0
  665. package/src/nats/.nats.md +38 -28
  666. package/src/nats/.shared-connection.md +56 -0
  667. package/src/nats/.use-nats-subscription.md +57 -0
  668. package/src/stories/.ActionsMenu.stories.md +57 -0
  669. package/src/stories/.Alert.stories.md +46 -0
  670. package/src/stories/.AnnouncementBar.stories.md +59 -32
  671. package/src/stories/.AppLayoutDrawer.stories.md +60 -0
  672. package/src/stories/.AppLayoutSidebar.stories.md +45 -0
  673. package/src/stories/.ApprovalBatchMessage.stories.md +46 -0
  674. package/src/stories/.ApprovalBatchMessageClient.stories.md +55 -0
  675. package/src/stories/.ApprovalRequestMessage.stories.md +50 -0
  676. package/src/stories/.ApprovalRequestMessageClient.stories.md +41 -0
  677. package/src/stories/.BlogCard.stories.md +52 -0
  678. package/src/stories/.Board.stories.md +25 -20
  679. package/src/stories/.Button.stories.md +35 -40
  680. package/src/stories/.CampaignCardAdmin.stories.md +38 -0
  681. package/src/stories/.CardsStrip.stories.md +39 -0
  682. package/src/stories/.CaseStudyCard.stories.md +41 -0
  683. package/src/stories/.ChatContainer.stories.md +41 -0
  684. package/src/stories/.ChatInlineVideoPill.stories.md +36 -0
  685. package/src/stories/.ChatMessageEnhanced.stories.md +51 -0
  686. package/src/stories/.ChatMingoInfoCards.stories.md +30 -0
  687. package/src/stories/.ChatTicketList.stories.md +38 -22
  688. package/src/stories/.ChatTypingIndicator.stories.md +47 -0
  689. package/src/stories/.CheckboxBlock.stories.md +34 -35
  690. package/src/stories/.ContextCompactionDisplay.stories.md +28 -0
  691. package/src/stories/.CustomerInterviewCard.stories.md +36 -0
  692. package/src/stories/.DashboardInfoCard.stories.md +40 -33
  693. package/src/stories/.DataRoomDocCard.stories.md +42 -0
  694. package/src/stories/.DataTable.stories.md +37 -32
  695. package/src/stories/.DatePicker.stories.md +34 -30
  696. package/src/stories/.EmbeddableChat.stories.md +45 -28
  697. package/src/stories/.EmptyState.stories.md +55 -0
  698. package/src/stories/.ErrorMessageDisplay.stories.md +45 -0
  699. package/src/stories/.FilterModal.stories.md +28 -22
  700. package/src/stories/.GenericEntityCard.stories.md +50 -0
  701. package/src/stories/.GitHubActivityCard.stories.md +41 -0
  702. package/src/stories/.GuideWelcome.stories.md +38 -0
  703. package/src/stories/.Header.stories.md +32 -22
  704. package/src/stories/.HubspotTicketCard.stories.md +41 -0
  705. package/src/stories/.InfoCard.stories.md +37 -26
  706. package/src/stories/.InfoCardRow.stories.md +48 -0
  707. package/src/stories/.InfoSection.stories.md +55 -0
  708. package/src/stories/.Input.stories.md +45 -35
  709. package/src/stories/.InvestorUpdateCard.stories.md +41 -0
  710. package/src/stories/.MarqueeWall.stories.md +53 -0
  711. package/src/stories/.MingoAiButton.stories.md +31 -0
  712. package/src/stories/.MingoChatModals.stories.md +47 -0
  713. package/src/stories/.MingoInfoCard.stories.md +50 -0
  714. package/src/stories/.MingoOnboardingCard.stories.md +19 -19
  715. package/src/stories/.MingoWelcome.stories.md +41 -0
  716. package/src/stories/.MobileNavPanel.stories.md +52 -0
  717. package/src/stories/.Modal.stories.md +19 -16
  718. package/src/stories/.MspOrganizationCard.stories.md +45 -0
  719. package/src/stories/.NotificationDrawer.stories.md +39 -28
  720. package/src/stories/.OSTypeBadge.stories.md +34 -25
  721. package/src/stories/.OnboardingGuideCard.stories.md +41 -0
  722. package/src/stories/.PageActions.stories.md +21 -21
  723. package/src/stories/.PageContainer.stories.md +29 -24
  724. package/src/stories/.PageLayout.stories.md +18 -35
  725. package/src/stories/.PolicyConfigurationPanel.stories.md +58 -0
  726. package/src/stories/.ProductReleaseCard.stories.md +39 -0
  727. package/src/stories/.ProgramCard.stories.md +51 -0
  728. package/src/stories/.QuickActionChip.stories.md +59 -0
  729. package/src/stories/.QuickActionMarquee.stories.md +51 -0
  730. package/src/stories/.QuickActionWall.stories.md +58 -0
  731. package/src/stories/.RoadmapCard.stories.md +41 -0
  732. package/src/stories/.ShellTypeBadge.stories.md +42 -22
  733. package/src/stories/.SlackMessageCard.stories.md +42 -0
  734. package/src/stories/.SlashCommandSuggestions.stories.md +21 -31
  735. package/src/stories/.SplitButton.stories.md +23 -25
  736. package/src/stories/.StackedRowsPanel.stories.md +65 -0
  737. package/src/stories/.TabSelector.stories.md +26 -38
  738. package/src/stories/.Tag.stories.md +32 -27
  739. package/src/stories/.ThinkingDisplay.stories.md +43 -0
  740. package/src/stories/.TicketCard.stories.md +60 -0
  741. package/src/stories/.TicketInfoSection.stories.md +28 -20
  742. package/src/stories/.TimeTracker.stories.md +35 -0
  743. package/src/stories/.Toaster.stories.md +26 -20
  744. package/src/stories/.ToolBadge.stories.md +34 -24
  745. package/src/stories/.ToolExecutionDisplay.stories.md +22 -20
  746. package/src/stories/.ToolExecutionDisplayClient.stories.md +33 -0
  747. package/src/stories/.VideoBitesStrip.stories.md +37 -0
  748. package/src/stories/.WarningBlock.stories.md +51 -0
  749. package/src/stories/__fixtures__/.chat-card-decorator.md +39 -0
  750. package/src/stories/__fixtures__/.chat-cards.md +57 -0
  751. package/src/stories/auth/.CompleteAccount.stories.md +36 -0
  752. package/src/stories/auth/.CreateOrganization.stories.md +52 -0
  753. package/src/stories/auth/.InviteLinkInvalid.stories.md +21 -0
  754. package/src/stories/auth/.Login.stories.md +32 -0
  755. package/src/stories/auth/.OpenFrameSso.stories.md +58 -0
  756. package/src/stories/auth/.PasswordReset.stories.md +49 -0
  757. package/src/styles/ods-interaction-states.css +32 -0
  758. package/src/types/.announcement.md +67 -35
  759. package/src/types/.blog.md +44 -41
  760. package/src/types/.case-study.md +31 -17
  761. package/src/types/.content-ref.md +37 -0
  762. package/src/types/.customer-interview.md +38 -38
  763. package/src/types/.doc-source.md +87 -0
  764. package/src/types/.entity-author.md +53 -0
  765. package/src/types/.entity-platform.md +40 -0
  766. package/src/types/.index.md +23 -17
  767. package/src/types/.marketing.md +32 -35
  768. package/src/types/.navigation.md +31 -19
  769. package/src/types/.os.types.md +30 -31
  770. package/src/types/.permissions.md +49 -35
  771. package/src/types/.platform.md +44 -28
  772. package/src/types/.product-release.md +59 -42
  773. package/src/types/.shell.types.md +46 -30
  774. package/src/types/.supabase.md +43 -29
  775. package/src/types/.tool.types.md +43 -23
  776. package/src/types/.video-processing.md +40 -31
  777. package/src/types/marketing.ts +11 -0
  778. package/src/types/supabase.ts +80 -0
  779. package/src/types/video-processing.ts +1 -0
  780. package/src/utils/.announcement-storage.md +49 -17
  781. package/src/utils/.app-config.md +22 -18
  782. package/src/utils/.brand-marks.md +46 -0
  783. package/src/utils/.cn.md +40 -29
  784. package/src/utils/.color-analysis.md +34 -25
  785. package/src/utils/.common.md +43 -23
  786. package/src/utils/.content-href.md +64 -0
  787. package/src/utils/.content-ref-groups.md +51 -0
  788. package/src/utils/.date-utils.md +46 -35
  789. package/src/utils/.doc-path-utils.md +38 -0
  790. package/src/utils/.doc-tree-nav.md +51 -0
  791. package/src/utils/.embed-authed-fetch.md +48 -32
  792. package/src/utils/.embed-content-fetch.md +36 -0
  793. package/src/utils/.embed-url-converters.md +52 -0
  794. package/src/utils/.extract-items.md +49 -0
  795. package/src/utils/.faq-anchor.md +48 -0
  796. package/src/utils/.format.md +73 -55
  797. package/src/utils/.humanity-signals.md +59 -0
  798. package/src/utils/.index.md +73 -31
  799. package/src/utils/.list-url.md +43 -0
  800. package/src/utils/.markdown-section-extractor.md +57 -0
  801. package/src/utils/.markdown-to-plain.md +51 -0
  802. package/src/utils/.media-carousel-utils-stub.md +42 -31
  803. package/src/utils/.ods-color-utils.md +84 -43
  804. package/src/utils/.og-placeholder.md +45 -0
  805. package/src/utils/.page-header-constants.md +26 -0
  806. package/src/utils/.platform-config.md +34 -34
  807. package/src/utils/.release-badge.md +47 -0
  808. package/src/utils/.release-cover.md +45 -0
  809. package/src/utils/.same-page-hash-nav.md +45 -0
  810. package/src/utils/.scroll-into-view.md +32 -25
  811. package/src/utils/.seo-description.md +37 -0
  812. package/src/utils/.seo-title.md +25 -0
  813. package/src/utils/.social-embed-cache.md +37 -0
  814. package/src/utils/.source-icons.md +30 -34
  815. package/src/utils/.suggestion-url.md +46 -0
  816. package/src/utils/.tool-utils.md +39 -24
  817. package/src/utils/.tree-builder.md +64 -0
  818. package/src/utils/.video-bite-id.md +42 -0
  819. package/src/utils/announcement-storage.ts +9 -18
  820. package/src/utils/dev-sections/.dev-section-param-keys.md +51 -0
  821. package/src/utils/dev-sections/.openframe-dev-sections.md +40 -28
  822. package/src/utils/dismiss-cookie.ts +55 -0
  823. package/src/utils/dismissal-storage.ts +44 -0
  824. package/src/utils/index.ts +3 -0
  825. package/dist/chunk-BBUEY73L.js.map +0 -1
  826. package/dist/chunk-G3UN2DXU.cjs.map +0 -1
  827. package/dist/chunk-OWMLWJQY.cjs.map +0 -1
  828. package/dist/chunk-SASR7SK5.js.map +0 -1
  829. package/src/components/chat/utils/.onboarding-icons.md +0 -28
  830. package/src/hooks/.use-og-placeholder.md +0 -51
  831. /package/dist/{chunk-FP4H6Y5O.js.map → chunk-3VMCJK7A.js.map} +0 -0
  832. /package/dist/{chunk-4SMRQ4SN.js.map → chunk-6U7HIZSW.js.map} +0 -0
  833. /package/dist/{chunk-66BNAFO6.js.map → chunk-FIRIO2NB.js.map} +0 -0
  834. /package/dist/{chunk-MGKCS6KS.js.map → chunk-GWJNTDXR.js.map} +0 -0
  835. /package/dist/{chunk-DEHZ5CTC.js.map → chunk-HAJQWSSU.js.map} +0 -0
  836. /package/dist/{chunk-VTSRDC4W.js.map → chunk-JKRX3JHT.js.map} +0 -0
  837. /package/dist/{chunk-Y3Y2DLNO.js.map → chunk-LT2PU6SK.js.map} +0 -0
  838. /package/dist/{chunk-R5WJJL4V.js.map → chunk-RDCAJDX7.js.map} +0 -0
  839. /package/dist/{chunk-PSPWT2Q5.js.map → chunk-T2S7A5IU.js.map} +0 -0
  840. /package/dist/{chunk-2DIOV7BR.js.map → chunk-WIITTL5I.js.map} +0 -0
  841. /package/dist/{chunk-ZRANZNEA.js.map → chunk-Y37XYIWA.js.map} +0 -0
@@ -1,46 +1,62 @@
1
- <!-- source-hash: 585108e1683f75548fc4f177781fa0c8 -->
2
- A client-side `fetch` wrapper for embedded surfaces (chat, ticket center, widgets) that automatically attaches bearer-act-as proxy authentication headers from `sessionStorage` while enforcing same-origin security.
1
+ <!-- source-hash: 136c109b7bdd3302447f1c154892d2e4 -->
2
+ Shared `fetch` wrapper for embedded surfaces (chat, ticket center, widgets) that attaches bearer-act-as identity headers (`Authorization` + `X-Chat-Act-As`) from proxy auth storage, with support for host-supplied auth adapters, cross-origin defense, and 401 self-healing.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `embedAuthedFetch(url, init?)`
7
- Drop-in replacement for `fetch()` that:
8
- - Normalizes `RequestInit.headers` (handles `Headers` instance, tuple arrays, or plain objects) into `Record<string, string>`
9
- - Delegates to `applyProxyAuth` to merge `Authorization` and `X-Chat-Act-As` headers — **proxy credentials always win** over caller-supplied headers
10
- - Defaults `Content-Type: application/json` when no headers are provided
11
- - Forces `credentials: 'same-origin'` to ensure Supabase auth cookies are included alongside bearer tokens
12
- - **Self-heals on `401`** when a host registered an `EmbedAuthAdapter` with a `refresh` callback: calls `refresh()` once, and on success retries the same request a single time with freshly-recomputed headers (so a rotated bearer is picked up). Concurrent 401s share ONE refresh. With no adapter / no `refresh`, the 401 passes through unchanged.
13
-
14
- ### `setEmbedAuthAdapter(adapter | null)` + `EmbedAuthAdapter`
15
- Optional host-owned auth override registered at module level (one chat panel per app). The adapter can supply:
16
- - `getHeaders()` — headers merged onto every call AFTER proxy-auth (adapter wins), re-read per request so token rotation is seen
17
- - `credentials` — overrides the default `'same-origin'` (e.g. `'include'` for cross-origin cookie auth)
18
- - `refresh()` — `Promise<boolean>` 401 self-heal hook (see above). This lifts the openframe `apiClient`'s refresh-then-retry behaviour into the lib so embedded surfaces no longer need a host-side `window.fetch` monkey-patch to survive an expired token mid-session.
19
-
20
- ### `assertSameOrigin(url)` *(internal)*
21
- Defense-in-depth guard that:
22
- - Resolves all URL forms (relative, absolute, protocol-relative, whitespace-prefixed) against `window.location.href` via the WHATWG `URL` constructor — bypasses regex shortcuts vulnerable to `\t`/`\n` prefix tricks
23
- - Blocks non-`http(s):` schemes explicitly (`javascript:`, `data:`, `blob:`, etc.)
24
- - Throws on cross-origin destinations before any bearer token leaves the page
25
- - Skips silently during SSR (`typeof window === 'undefined'`)
6
+ ### Interfaces
7
+
8
+ - **`EmbedAuthAdapter`** — Interface for host-supplied auth overrides. Supports `getHeaders()`, `credentials`, `refresh` (401 self-heal), and `allowedOrigins` (native-shell hatch for cross-origin allowlisting).
9
+
10
+ ### Functions
11
+
12
+ | Function | Description |
13
+ |---|---|
14
+ | `setEmbedAuthAdapter(adapter)` | Registers (or clears) a host-owned auth adapter at the `globalThis` slot `__embedAuthedFetchAdapter__`. Warns on overwrite in non-production. |
15
+ | `hasEmbedAuthAdapter()` | Returns `true` when an adapter is currently registered; used by sibling helpers to route through `embedAuthedFetch` only when embedded auth is active. |
16
+ | `needsBearerAssetFetch(url)` | Returns `true` when the URL's origin is in the adapter's `allowedOrigins` AND the adapter is supplying an `Authorization` header — signals that native asset loads (`<img src>`) must use fetch + blob object-URL instead. |
17
+ | `embedAuthedFetch(url, init?)` | Drop-in `fetch` replacement. Merges proxy auth headers, enforces same-origin (or `allowedOrigins`) guard synchronously, and performs a single 401 refresh + retry when `adapter.refresh` is registered. |
26
18
 
27
19
  ## Usage Example
28
20
 
29
21
  ```typescript
30
- // JSON POST to chat API — proxy headers attached automatically
31
- const res = await embedAuthedFetch('/api/chat/messages', {
22
+ import {
23
+ setEmbedAuthAdapter,
24
+ embedAuthedFetch,
25
+ needsBearerAssetFetch,
26
+ } from './embed-authed-fetch'
27
+
28
+ // Register a host adapter on provider mount
29
+ setEmbedAuthAdapter({
30
+ getHeaders: () => ({
31
+ Authorization: token ? `Bearer ${token}` : undefined,
32
+ }),
33
+ credentials: 'include',
34
+ refresh: async () => {
35
+ const refreshed = await refreshAccessToken()
36
+ return refreshed
37
+ },
38
+ allowedOrigins: ['https://gateway.example.com'],
39
+ })
40
+
41
+ // Use as a drop-in fetch replacement for /api/chat/* routes
42
+ const response = await embedAuthedFetch('/api/chat/messages', {
32
43
  method: 'POST',
33
44
  body: JSON.stringify({ message: 'Hello' }),
34
45
  })
35
46
 
36
- // GET with explicit empty headers — skips Content-Type default
37
- const upload = await embedAuthedFetch('/api/storage/generate-upload-url', {
38
- method: 'GET',
39
- headers: {},
40
- })
47
+ // Route asset loads through fetch when bearer is required
48
+ if (needsBearerAssetFetch(imageUrl)) {
49
+ const res = await embedAuthedFetch(imageUrl)
50
+ const blob = await res.blob()
51
+ imgElement.src = URL.createObjectURL(blob)
52
+ }
41
53
 
42
- // Vanilla fetch — use for routes that don't need bearer-act-as
43
- const profile = await fetch('/api/profile/me', { credentials: 'same-origin' })
54
+ // Clear adapter on provider unmount
55
+ setEmbedAuthAdapter(null)
44
56
  ```
45
57
 
46
- > Routes outside the `/api/chat/*`, `/api/docs/chat/*`, or `/api/storage/generate-upload-url` surfaces should use vanilla `fetch` — this wrapper is scoped to embedded auth contexts only.
58
+ > **Note:** The adapter is stored on `globalThis` (key `__embedAuthedFetchAdapter__`) rather than module scope to survive bundler code-splitting across multiple entry points. Routes that do not need bearer-act-as (e.g. `/api/profile/me`) should continue using vanilla `fetch`.
59
+
60
+ ## Source
61
+
62
+ [`embed-authed-fetch.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/embed-authed-fetch.ts)
@@ -0,0 +1,36 @@
1
+ <!-- source-hash: 62e7c52af0777cb746a6d452c7225669 -->
2
+ Thin routing shim that directs content-surface HTTP requests through the embed auth adapter when one is registered, or falls back to a plain `fetch` otherwise.
3
+
4
+ ## Key Components
5
+
6
+ ### `contentFetch`
7
+
8
+ A `typeof fetch`-compatible function used by all self-fetching content surfaces (roadmap, delivery, product releases, onboarding guides, legal docs, release-detail injected sections). Routes requests based on adapter presence:
9
+
10
+ - **Adapter registered** → delegates to `embedAuthedFetch`, which attaches bearer tokens/cookies and handles 401 refresh — the same auth path used by the embedded chat.
11
+ - **No adapter** → returns a plain, unmodified `fetch` call.
12
+
13
+ Internally coerces the full `RequestInfo | URL` input shape down to a plain string URL, since `embedAuthedFetch` accepts only strings. Handles all three input variants (`string`, `URL`, `Request`) defensively, even though content surfaces always pass strings in practice.
14
+
15
+ ## Usage Example
16
+
17
+ ```typescript
18
+ // After wiring the embed auth adapter once for the chat surface,
19
+ // all content fetches automatically inherit the same auth:
20
+
21
+ import { contentFetch } from './embed-content-fetch'
22
+
23
+ // Used internally by content surfaces — no configuration needed
24
+ const response = await contentFetch('/api/roadmap/items', {
25
+ method: 'GET',
26
+ headers: { 'Content-Type': 'application/json' },
27
+ })
28
+
29
+ const data = await response.json()
30
+ ```
31
+
32
+ > Hosts register auth **once** via `EmbedAuthAdapter` for the chat surface; `contentFetch` inherits it automatically with no additional setup required.
33
+
34
+ ## Source
35
+
36
+ [`embed-content-fetch.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/embed-content-fetch.ts)
@@ -0,0 +1,52 @@
1
+ <!-- source-hash: 2e5892bd515faa4d91f2c3e44db6baa3 -->
2
+ Shared utilities for converting external service URLs (Google Sheets, Figma) into embeddable iframe-compatible formats. Used by embed components in the lib and the admin document editor in the hub.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Description |
7
+ |---|---|
8
+ | `toGoogleSheetsEmbedUrl` | Converts a Google Sheets URL to the `htmlembed` format, preserving the `gid` (sheet tab) parameter |
9
+ | `toGoogleSheetsOriginalUrl` | Normalizes a Sheets URL back to the standard `/edit#gid=` format |
10
+ | `toFigmaEmbedUrl` | Converts any Figma URL (design, proto, slides/deck, board) to `embed.figma.com`, injecting `embed-host` and optional `client-id` params |
11
+ | `isFigmaSlidesUrl` | Returns `true` if the URL points to a Figma Slides or Deck resource |
12
+ | `toFigmaOriginalUrl` | Strips embed-specific domain and query string to recover the original Figma URL |
13
+
14
+ ## Usage Example
15
+
16
+ ```typescript
17
+ import {
18
+ toGoogleSheetsEmbedUrl,
19
+ toFigmaEmbedUrl,
20
+ isFigmaSlidesUrl,
21
+ } from './embed-url-converters'
22
+
23
+ // Google Sheets — converts to htmlembed with tab preserved
24
+ const sheetsEmbed = toGoogleSheetsEmbedUrl(
25
+ 'https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/edit#gid=0'
26
+ )
27
+ // → https://docs.google.com/spreadsheets/d/1Bxi.../htmlembed?widget=true&chrome=false&headers=false&gid=0
28
+
29
+ // Figma design
30
+ const figmaEmbed = toFigmaEmbedUrl(
31
+ 'https://www.figma.com/design/ABC123/My-Component'
32
+ )
33
+ // → https://embed.figma.com/design/ABC123/My-Component?embed-host=flamingo
34
+
35
+ // Figma slides — browse mode
36
+ const slidesEmbed = toFigmaEmbedUrl(
37
+ 'https://www.figma.com/slides/ABC123/Deck',
38
+ { slidesView: 'browse' }
39
+ )
40
+ // → https://embed.figma.com/slides/ABC123/Deck?embed-host=flamingo
41
+
42
+ // Type guard
43
+ isFigmaSlidesUrl('https://www.figma.com/deck/ABC123/Q3-Review') // → true
44
+ ```
45
+
46
+ ## Notes
47
+
48
+ - `toFigmaEmbedUrl` reads `NEXT_PUBLIC_FIGMA_CLIENT_ID` from the environment and injects it as a `client-id` query param when present.
49
+ - Already-embedded URLs (containing `embed.figma.com` or `/htmlembed`) are returned unchanged — all converters are idempotent.
50
+ - Figma `slides` and `deck` URL types both map to the `deck` embed view by default; pass `{ slidesView: 'browse' }` to switch to the `slides` browse view.
51
+
52
+ **Source:** [`embed-url-converters.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/embed-url-converters.ts)
@@ -0,0 +1,49 @@
1
+ <!-- source-hash: 5e010896207fab5f7b8fcce5af44e754 -->
2
+ Normalizes list-API response shapes into a consistent `unknown[]` array and extracts stable item identifiers across varying endpoint payload structures. Pure utility functions with no runtime dependencies — safe for server and client use.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Signature | Description |
7
+ |---|---|---|
8
+ | `extractItems` | `(data: unknown) => unknown[]` | Normalizes heterogeneous response shapes into a flat array |
9
+ | `extractItemId` | `(type: string, item: unknown) => string \| null` | Extracts a stable primary key from an item, handling `id` vs `external_id` variance |
10
+
11
+ ### `extractItems` — Supported Response Shapes
12
+
13
+ | Property | Source |
14
+ |---|---|
15
+ | `{ items }` | General list endpoints |
16
+ | `{ posts }` | Post/blog endpoints |
17
+ | `{ campaigns }` | Campaign endpoints |
18
+ | `{ completed, inProgress }` | Delivery endpoints (flattened) |
19
+ | `{ data }` | Generic data wrapper |
20
+ | Raw `Array` | Direct array responses |
21
+
22
+ ### `extractItemId` — Key Resolution Strategy
23
+
24
+ For `roadmap_item`, `delivery_item`, and `internal_task` types, `external_id` is checked first (ClickUp-backed IDs). Falls back to `obj.id` as string or coerced number for all other types.
25
+
26
+ ## Usage Example
27
+
28
+ ```typescript
29
+ import { extractItems, extractItemId } from './extract-items'
30
+
31
+ // Normalize any list endpoint response
32
+ const rawResponse = await fetchCampaigns()
33
+ const items = extractItems(rawResponse) // always returns Item[]
34
+
35
+ // Resolve a stable ID regardless of item type
36
+ for (const item of items) {
37
+ const id = extractItemId('roadmap_item', item)
38
+ if (id) console.log('Matched item:', id)
39
+ }
40
+
41
+ // Delivery endpoint — flattens completed + inProgress automatically
42
+ const deliveryItems = extractItems({ completed: [...], inProgress: [...] })
43
+ ```
44
+
45
+ ## Notes
46
+
47
+ - **No external dependencies** — no `@tanstack/react-query` import, intentionally hoisted to keep this out of the chat hooks chunk
48
+ - **Re-exported** from `lib/utils/entity-list-api.ts` in the hub repo as the single normalization implementation across both repositories
49
+ - Source: [`src/lib/utils/extract-items.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/lib/utils/extract-items.ts)
@@ -0,0 +1,48 @@
1
+ <!-- source-hash: 86e3de31861d76eca010d803a819a536 -->
2
+ Single source of truth for FAQ deep-link anchor formatting and parsing on the `/faqs` page, covering both category-level and item-level hash targets.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `faqSectionSlug` | `function` | Generates a `faq-<slug>` anchor id for a category section |
9
+ | `faqItemAnchor` | `function` | Generates a `faq-item-<id>` anchor id for an individual FAQ row |
10
+ | `FaqHashTarget` | `type` | Discriminated union representing a parsed hash result (`item` or `section`) |
11
+ | `parseFaqHash` | `function` | Parses a `/faqs#…` hash string into a typed `FaqHashTarget` or `null` |
12
+
13
+ ## Hash Format Contract
14
+
15
+ ```text
16
+ /faqs#faq-pricing → section anchor (jump-nav, scroll-spy)
17
+ /faqs#faq-item-42 → item anchor (chat citation, auto-expand + scroll)
18
+ /faqs#anything-else → null (unrecognised, callers early-out)
19
+ ```
20
+
21
+ ## Usage Example
22
+
23
+ ```typescript
24
+ import { faqSectionSlug, faqItemAnchor, parseFaqHash } from './faq-anchor'
25
+
26
+ // Rendering anchors
27
+ const sectionId = faqSectionSlug('Pricing & Plans') // → 'faq-pricing-plans'
28
+ const itemId = faqItemAnchor(42) // → 'faq-item-42'
29
+
30
+ // Parsing on mount (e.g. FaqSection auto-open logic)
31
+ const target = parseFaqHash(window.location.hash)
32
+
33
+ if (target?.kind === 'item') {
34
+ const row = items.find(i => String(i.id) === target.rawId)
35
+ row?.expand()
36
+ } else if (target?.kind === 'section') {
37
+ document.getElementById(target.slug)?.scrollIntoView()
38
+ }
39
+ // target === null → no hash or unrecognised prefix, no-op
40
+ ```
41
+
42
+ ## Notes
43
+
44
+ - **Collision safety:** The `faq-item-<digits>` namespace is reserved exclusively for item anchors; `parseFaqHash` uses a digits-only regex so word-suffixed slugs like `faq-item-whatever` are correctly classified as sections.
45
+ - **`rawId` is a string** — coercion to compare against `item.id` is intentionally deferred to the call site.
46
+ - Centralising format helpers and the parser in one file prevents format drift across the page component, chat RAG mapper, and any future consumers.
47
+
48
+ **Source:** [`faq-anchor.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/faq-anchor.ts)
@@ -1,31 +1,25 @@
1
- <!-- source-hash: dbfaad05e48db5fac78d6f613b9afd1e -->
2
- Utility functions for formatting data across dates, numbers, currencies, bytes, durations, and display strings. Serves as the single source of truth for all presentation-layer formatting in the Flamingo/OpenFrame stack.
1
+ <!-- source-hash: 801f56963096c8525cf1e145bb056b0f -->
2
+ Utility functions for consistent formatting of dates, times, numbers, file sizes, durations, and name initials across server and client environments, with UTC-pinned rendering to prevent React hydration mismatches.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Function | Description |
6
+ | Export | Description |
7
7
  |---|---|
8
- | `formatDate` | Locale-aware date formatting with `Intl.DateTimeFormatOptions` support |
9
- | `formatDateUTC` | UTC-anchored date formatter with fallback; handles ISO strings, epoch ms, and numeric strings |
10
- | `formatLegalDate` | Fixed `MM/DD/YYYY` format for legal documents |
11
- | `formatNumber` | Thousands-separator number formatting |
12
- | `formatPrice` | Currency-symbol formatting via `Intl.NumberFormat` |
13
- | `formatCurrency` | USD whole-dollar KPI formatter with `'N/A'` null guard |
14
- | `formatWholeDollars` | Configurable whole-dollar formatter (no cents) |
15
- | `formatPercent` | Fixed 2-decimal percent string with `'N/A'` null guard |
16
- | `formatBytes` | Human-readable byte sizes up to YB |
17
- | `formatBytesShort` | Compact byte formatter (`'B'` unit) for tight UI spaces |
18
- | `formatLargeNumber` | Abbreviated integers — `1K`, `2M`, `3B` (floor, no decimals) |
19
- | `formatAbbreviatedNumber` | Abbreviated numbers with one decimal when needed — `1.2K`, `2.5M` |
20
- | `getFirstLastInitials` | First + last word initials (e.g. `"John Michael Doe"` → `"JD"`) |
21
- | `nameInitials` | First + second word initials, max 2 chars, with configurable fallback |
22
- | `formatDurationMMSS` | Duration as `MM:SS` or `HH:MM:SS` |
23
- | `formatDurationCompact` | Duration as `"Xh Xm"` or `"X min"` |
24
- | `formatDurationFromRange` | Duration between two timestamps as compact string |
25
- | `formatTimeWithTimezone` | Time string with optional timezone label |
26
- | `formatCompactMetric` | Metric value with compact notation for KPI cards (partial) |
27
- | `MetricFormat` | Type: `'number' \| 'currency' \| 'percentage' \| 'months'` |
28
- | `TrendPolarity` | Type: `'positive' \| 'negative' \| 'neutral'` |
8
+ | `formatDate` | Formats a `Date` or ISO string to a localized date string; UTC-pinned by default to prevent SSR/client hydration drift |
9
+ | `formatDateUTC` | UTC-anchored date formatter for RAG mappers and audit consumers; handles epoch numbers, ISO strings, and numeric string timestamps with a configurable fallback |
10
+ | `formatNumber` | Formats a number with locale-aware thousands separators |
11
+ | `formatPrice` | Formats a number as a currency string using `Intl.NumberFormat` (defaults to USD) |
12
+ | `formatBytes` | Converts bytes to human-readable size with configurable decimal places (`Bytes` → `YB`) |
13
+ | `formatBytesShort` | Compact byte formatter using single-letter `B` unit (2 decimal places, caps at `TB`) for space-constrained UIs |
14
+ | `formatFileSize` | File-size formatter using 1 decimal place and `B` unit, capping at `GB`; canonical formatter for upload UIs and publication cards |
15
+ | `formatLargeNumber` | Abbreviates large numbers to `K`, `M`, `B` with no decimal places |
16
+ | `formatAbbreviatedNumber` | Similar abbreviation but preserves one decimal place when the value is not a whole number |
17
+ | `getFirstLastInitials` | Extracts two-letter initials from the first and last word of a name (e.g., `"John Michael Doe"` → `"JD"`) |
18
+ | `nameInitials` | Extracts up to two-letter initials from the first and second word; single source of truth for avatar fallbacks |
19
+ | `formatDurationMMSS` | Formats seconds as `MM:SS` or `HH:MM:SS` for media players |
20
+ | `formatDurationCompact` | Formats seconds as `Xh Xm` or `X min` for cards and headers |
21
+ | `formatDurationFromRange` | Calculates and formats duration between two timestamps as `1h 30m` or `45m` |
22
+ | `formatTimeWithTimezone` | Formats an event's wall-clock time in its own IANA timezone; falls back to UTC on invalid zone labels |
29
23
 
30
24
  ## Usage Example
31
25
 
@@ -33,55 +27,79 @@ Utility functions for formatting data across dates, numbers, currencies, bytes,
33
27
  import {
34
28
  formatDate,
35
29
  formatDateUTC,
30
+ formatPrice,
36
31
  formatBytes,
37
32
  formatBytesShort,
33
+ formatFileSize,
38
34
  formatLargeNumber,
39
35
  formatAbbreviatedNumber,
40
- formatPrice,
41
- formatCurrency,
42
- formatPercent,
36
+ nameInitials,
37
+ getFirstLastInitials,
43
38
  formatDurationMMSS,
44
39
  formatDurationCompact,
45
40
  formatDurationFromRange,
46
41
  formatTimeWithTimezone,
47
- nameInitials,
48
- getFirstLastInitials,
49
42
  } from './format'
50
43
 
51
- // Dates
44
+ // Dates — UTC-pinned to prevent SSR/client mismatch
52
45
  formatDate('2024-08-15')
53
46
  // → "August 15, 2024"
54
47
 
55
- formatDateUTC('2024-08-15')
56
- // → "Aug 15, 2024" (UTC-anchored, no timezone drift)
48
+ formatDateUTC('2024-08-15', { fallback: 'N/A' })
49
+ // → "Aug 15, 2024"
50
+
51
+ formatDateUTC(null)
52
+ // → "N/A"
53
+
54
+ // Numbers and currency
55
+ formatPrice(4999.99, 'EUR')
56
+ // → "€4,999.99"
57
57
 
58
- formatDateUTC(null, { fallback: 'Unknown' })
59
- // → "Unknown"
58
+ formatLargeNumber(1_450_000)
59
+ // → "1M"
60
60
 
61
- // Bytes
62
- formatBytes(1536) // → "1.5 KB"
63
- formatBytesShort(1536) // → "1.5 KB" (tight UI variant)
61
+ formatAbbreviatedNumber(1_200)
62
+ // → "1.2K"
64
63
 
65
- // Numbers
66
- formatLargeNumber(1_500_000) // → "1M" (floor, no decimals)
67
- formatAbbreviatedNumber(1_200) // → "1.2K" (one decimal when needed)
64
+ // File sizes
65
+ formatBytes(1536)
66
+ // → "1.50 KB"
68
67
 
69
- // Currency
70
- formatPrice(49.99) // → "$49.99"
71
- formatCurrency(1234567) // → "$1,234,567"
72
- formatPercent(12.5) // → "12.50%"
68
+ formatBytesShort(1536)
69
+ // → "1.5 KB" (compact UI variant)
73
70
 
74
- // Duration
75
- formatDurationMMSS(3725) // → "1:02:05"
76
- formatDurationCompact(3725) // → "1h 2m"
77
- formatDurationFromRange('2024-01-01T10:00:00Z', '2024-01-01T11:30:00Z')
71
+ formatFileSize(1500)
72
+ // → "1.5 KB" (1 decimal, caps at GB)
73
+
74
+ // Avatar initials
75
+ nameInitials('John Doe')
76
+ // → "JD"
77
+
78
+ getFirstLastInitials('John Michael Doe')
79
+ // → "JD" (first + last word)
80
+
81
+ nameInitials(null, 'U')
82
+ // → "U"
83
+
84
+ // Durations
85
+ formatDurationMMSS(3725)
86
+ // → "1:02:05"
87
+
88
+ formatDurationCompact(3725)
89
+ // → "1h 2m"
90
+
91
+ formatDurationFromRange('2024-08-15T14:00:00Z', '2024-08-15T15:30:00Z')
78
92
  // → "1h 30m"
79
93
 
80
- formatTimeWithTimezone(new Date(), 'EST')
81
- // → "10:30 AM EST"
94
+ // Event time in its own timezone (prevents React #418 hydration mismatch)
95
+ formatTimeWithTimezone('2024-08-15T20:00:00Z', 'America/New_York')
96
+ // → "4:00 PM"
97
+ ```
98
+
99
+ ## Notes
100
+
101
+ - **Hydration safety**: `formatDate` and `formatTimeWithTimezone` pin to UTC by default so Vercel (UTC runtime) and browser clients always render identical strings, avoiding React hydration error #418.
102
+ - **Avatar fallback hierarchy**: Prefer `nameInitials` over `getFirstLastInitials` for new components — it is the designated single source of truth and accepts a configurable `fallback` character.
103
+ - **File size variants**: Three formatters exist for historical reasons. Use `formatFileSize` for publication cards and upload UIs, `formatBytesShort` for space-constrained progress indicators, and `formatBytes` for general-purpose display.
82
104
 
83
- // Initials
84
- nameInitials('John Michael Doe') // → "JM"
85
- getFirstLastInitials('John Michael Doe') // → "JD"
86
- nameInitials(null) // → "E" (default fallback)
87
- ```
105
+ **Source:** [`format.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/format.ts)
@@ -0,0 +1,59 @@
1
+ <!-- source-hash: e5bd0dff73673a1dcedb4a72a3a18491 -->
2
+ Invisible bot-protection primitives for shared use between public forms (client) and the hub's per-route `verifyHuman` gate (server). Designed as a pure, React-free server entry so the hub can import it without triggering a client-reference boundary.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `HONEYPOT_FIELD` | `const string` | Hidden field name bots may fill; real users never interact with it |
9
+ | `ELAPSED_MS_FIELD` | `const string` | Field name carrying client-measured ms from form mount to submit |
10
+ | `DEFAULT_MIN_FILL_MS` | `const number` | Minimum acceptable fill time (`700` ms); faster submits are treated as bots |
11
+ | `HumanitySignals` | `type` | Wire object spread into the POST body by `useHumanitySignals().getSignals()` |
12
+ | `HumanityVerdict` | `type` | Union result — `{ ok: true }` or `{ ok: false; reason: 'honeypot' \| 'too_fast' }` |
13
+ | `extractHumanitySignals` | `function` | Tolerant reader that parses raw POST body; never throws, returns `null` for missing/garbage timing |
14
+ | `evaluateHumanitySignals` | `function` | Single source of truth for the block/allow decision — honeypot fill or sub-threshold timing → reject |
15
+ | `splitCsvEnv` | `function` | Utility to parse comma-separated env strings into trimmed, non-empty arrays |
16
+
17
+ ## Usage Example
18
+
19
+ ```typescript
20
+ import {
21
+ evaluateHumanitySignals,
22
+ DEFAULT_MIN_FILL_MS,
23
+ } from 'openframe-oss-lib/humanity-signals'
24
+
25
+ // Server-side route handler (hub's verifyHuman gate)
26
+ export async function POST(req: Request) {
27
+ const body = await req.json()
28
+
29
+ const verdict = evaluateHumanitySignals(body, {
30
+ minFillMs: DEFAULT_MIN_FILL_MS,
31
+ })
32
+
33
+ if (!verdict.ok) {
34
+ // 'honeypot' — hidden field was filled
35
+ // 'too_fast' — submission arrived before a human could type
36
+ return new Response(`Blocked: ${verdict.reason}`, { status: 400 })
37
+ }
38
+
39
+ // Proceed with legitimate submission...
40
+ }
41
+ ```
42
+
43
+ ```typescript
44
+ // Client-side form — spread signals into the POST body
45
+ import { HONEYPOT_FIELD, ELAPSED_MS_FIELD } from 'openframe-oss-lib/humanity-signals'
46
+
47
+ const payload = {
48
+ email: formData.email,
49
+ message: formData.message,
50
+ [HONEYPOT_FIELD]: '', // always empty for real users
51
+ [ELAPSED_MS_FIELD]: elapsedMs, // measured since form mount
52
+ }
53
+ ```
54
+
55
+ > **Note:** Missing timing values (`elapsedMs: null`) are always allowed — only a present sub-threshold value triggers a `too_fast` block, preventing false positives from clients that omit the field.
56
+
57
+ ## Source
58
+
59
+ [`humanity-signals.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/humanity-signals.ts)
@@ -1,49 +1,91 @@
1
- <!-- source-hash: a199bfb2e9675c73161c9b56f81904f7 -->
2
- Barrel export index for the `utils` package, re-exporting all utility functions, types, and constants from their canonical source files to provide a single stable import path for consumers across the frontend library and hub.
1
+ <!-- source-hash: d40f5b4bdeaf9f6f4c4960fabf86ab54 -->
2
+ Central barrel export for the `utils` package, aggregating and re-exporting all utility functions, constants, and types from across the library to provide a single stable import surface for consumers.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export Group | Source | Description |
7
- |---|---|---|
8
- | `cn`, `getAllPlatformBaseDomains`, `getBaseUrl`, `getPlatformProductionUrl` | `./cn` | CSS class merging and platform URL helpers |
9
- | `formatDate`, `formatNumber`, `formatPrice`, `formatBytes`, `formatCurrency`, `formatPercent`, etc. | `./format` | Number, currency, byte, date, and metric formatters |
10
- | `getPlatformAccentColor`, `getCurrentPlatform` | `./ods-color-utils` | Platform theming and color utilities |
11
- | `getDynamicIcon`, `ICON_REGISTRY`, `getIconComponent` | `chat/utils/icon-registry` | Dynamic icon registry |
12
- | `embedAuthedFetch`, `getEmbedProxyAuth`, `setEmbedProxyAuth` | `./embed-*` | Embed-surface authentication helpers |
13
- | `formatRelativeTime`, `formatAbsoluteDate`, `isToday`, `createUTCTimestamp` | `./date-utils` | Date/time formatting and comparison |
14
- | `escapeMarkdownInline`, `buildChatAttachmentViewUrl` | `chat/utils/chat-attachment-markdown` | Chat attachment markdown helpers |
15
- | `scrollElementIntoView` | `./scroll-into-view` | Smooth scroll with sticky-chrome offset |
16
- | `readLeadingDecisionFrame` | `./sse-decision-frame` | SSE frame reader for confirm-tool route |
17
- | `isCrossOriginUrl` | `chat/utils/is-cross-origin-url` | Cross-origin URL detection (server-safe) |
6
+ ### Formatting Utilities
7
+ - **`formatDate`, `formatNumber`, `formatPrice`, `formatBytes`** — Core number/currency/byte/date formatters (`./format`)
8
+ - **`formatLargeNumber`, `formatCurrency`, `formatPercent`, `formatDurationMMSS`**, and many more — Extended formatter suite covering metrics, trends, durations, and text
9
+ - **`formatRelativeTime`, `formatAbsoluteDate`, `formatDateTime`** — Date/time helpers from `./date-utils`
10
+
11
+ ### Color & Styling
12
+ - **`getPlatformAccentColor`, `getCurrentPlatform`** — Platform-aware accent color resolution
13
+ - **`getReadableTextColor`, `hexToRgb`, `deriveHoverColor`, `deriveActiveColor`** — Design-system color math utilities
14
+ - **`cn`** — Class name utility (client-side only)
15
+
16
+ ### Platform & Domain
17
+ - **`getPlatformProductionUrl`, `getAllPlatformBaseDomains`** — Platform domain SSOT re-exported from `../platform-domains`
18
+ - **`getPlatformLogo`** — Platform icon component resolver
19
+
20
+ ### Navigation & Scroll
21
+ - **`scrollElementIntoView`** — Smooth scroll with sticky-chrome offset compensation
22
+ - **`navigateSamePageHash`, `normalizeHashFragment`** — Same-page hash navigation with `pushState` and synthetic `hashchange`
23
+
24
+ ### Embed Auth
25
+ - **`embedAuthedFetch`, `setEmbedAuthAdapter`** — Generic embed surface authentication
26
+ - **`getEmbedProxyAuth`, `setEmbedProxyAuth`, `applyProxyAuth`** — Proxy auth storage (cookie SSOT)
27
+
28
+ ### Chat Utilities (Server-Safe Re-exports)
29
+ - **`escapeMarkdownInline`, `buildChatAttachmentViewUrl`** — Chat attachment markdown helpers
30
+ - **`getSourceIconName`, `getSourceLabel`** — Source icons/labels, safe for server-side hub callers
31
+ - **`readLeadingDecisionFrame`** — SSE leading-frame reader for `confirm-tool` route
32
+
33
+ ### Icon & Media
34
+ - **`getDynamicIcon`, `ICON_REGISTRY`, `getIconComponent`** — Dynamic icon registry
35
+ - **`PLAY_ICON_PATH`** — SVG path constant (server-safe)
36
+
37
+ ### SEO & Content
38
+ - **`SEO_TITLE_MAX_LENGTH`, `SEO_DESCRIPTION_MAX_LENGTH`** — Character budget constants
39
+ - **`buildListUrl`, `canonicalContentRefType`** — List-API URL builder
40
+ - **`faqSectionSlug`, `faqItemAnchor`, `parseFaqHash`** — FAQ anchor SSOTs
41
+
42
+ ### Miscellaneous
43
+ - **`delay`, `generateRandomString`, `truncateString`, `deepClone`** — Common utilities
44
+ - **`getProxiedImageUrl`, `shouldProxyImage`, `generateImageSizes`** — Image proxy builder
45
+ - **`DEV_SECTION_PARAM_KEYS`, `devSectionAnchorId`** — Dev-center URL param keys
46
+ - **`fetchPriorityProp`** — React 18/19 compatible `fetchpriority` prop builder
18
47
 
19
48
  ## Usage Example
20
49
 
21
50
  ```typescript
22
- // Import any utility directly from the utils barrel
51
+ // Import from the unified utils barrel
23
52
  import {
24
53
  cn,
54
+ formatDate,
25
55
  formatCurrency,
26
- formatRelativeTime,
27
- getDynamicIcon,
28
- getEmbedProxyAuth,
56
+ getPlatformAccentColor,
29
57
  scrollElementIntoView,
30
- getCurrentPlatform,
31
- } from '@flamingo-stack/openframe-frontend-core/utils'
58
+ embedAuthedFetch,
59
+ SEO_TITLE_MAX_LENGTH,
60
+ buildListUrl,
61
+ } from '@flamingo-stack/openframe-oss-lib/utils'
62
+
63
+ // Formatting
64
+ const price = formatCurrency(1999, 'USD') // "$19.99"
65
+ const date = formatDate(new Date(), 'short')
32
66
 
33
- // CSS class merging
34
- const className = cn('base-class', isActive && 'active')
67
+ // Color utilities
68
+ const accent = getPlatformAccentColor('flamingo')
35
69
 
36
- // Format a currency value
37
- const price = formatCurrency(4999, 'USD') // "$49.99"
70
+ // Scroll
71
+ scrollElementIntoView(document.getElementById('section'), { offset: 64 })
38
72
 
39
- // Relative time display
40
- const label = formatRelativeTime(new Date('2024-01-01')) // "6 months ago"
73
+ // Embed auth
74
+ const response = await embedAuthedFetch('/api/data')
41
75
 
42
- // Retrieve embed proxy auth for non-chat surfaces
43
- const auth = getEmbedProxyAuth()
76
+ // SEO guard
77
+ if (title.length > SEO_TITLE_MAX_LENGTH) {
78
+ console.warn('Title exceeds SEO budget')
79
+ }
44
80
 
45
- // Scroll an element into view respecting sticky chrome
46
- scrollElementIntoView(targetElement, { offsetPx: 64 })
81
+ // List URL builder
82
+ const url = buildListUrl('ticket', ['id-1', 'id-2'], '/content')
47
83
  ```
48
84
 
49
- > **Note:** Several exports are intentionally re-routed through this barrel to keep server-safe utilities (e.g. `CUSTOM_ITEM_ID`, `getSourceLabel`, `isCrossOriginUrl`) accessible from SSR/server code without crossing `"use client"` boundaries.
85
+ ## Notes
86
+
87
+ - **Server-safe vs. client-only**: `cn` and canvas-based utilities (e.g., `color-analysis`) are client-only. Most other exports are isomorphic/server-safe.
88
+ - **SSOT pattern**: Several exports are re-exports from canonical locations (e.g., `../platform-domains`, `./format`) to preserve backward compatibility without duplicating logic.
89
+ - **Deprecated aliases**: Chat-prefixed auth symbols (`chat-authed-fetch`, `chat-proxy-auth-storage`) are kept as `@deprecated` re-exports in their original locations; use the `embed*` equivalents from this barrel going forward.
90
+
91
+ **Source:** [`src/utils/index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/utils/index.ts)