@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,51 @@
1
+ <!-- source-hash: 565bab727ed764f8f2e7853cc222b4d8 -->
2
+ Converts Markdown source to plain text with two output modes: structured article text (preserving paragraph breaks) and collapsed single-line preview text.
3
+
4
+ ## Key Components
5
+
6
+ ### `MarkdownToPlainOptions`
7
+ Configuration interface with two optional properties:
8
+ - `mode`: `'article'` (default) preserves `\n\n` paragraph structure; `'preview'` collapses all whitespace to a single line
9
+ - `maxChars`: Optional character cap — truncates without ellipsis (caller decides truncation presentation)
10
+
11
+ ### `stripInlineMarkdown(s: string): string`
12
+ Shared utility that strips inline Markdown markers from a string:
13
+ - `[text](url)` → `text`
14
+ - `**bold**` → `bold`
15
+ - `*italic*` → `italic`
16
+ - `` `inline code` `` → `inline code`
17
+
18
+ All patterns use negated character classes to avoid catastrophic backtracking.
19
+
20
+ ### `markdownToPlainText(markdown, options): string`
21
+ Main conversion function. Processing order matters — fenced code blocks and images are stripped first (before inline backtick stripping could interfere), then `stripInlineMarkdown` runs, followed by heading markers and list bullets. Final pass applies mode-specific whitespace normalization and optional character truncation.
22
+
23
+ ## Usage Example
24
+
25
+ ```typescript
26
+ import { markdownToPlainText, stripInlineMarkdown } from './markdown-to-plain'
27
+
28
+ // Article mode — preserves paragraph breaks (e.g. JSON-LD body echo)
29
+ const articleText = markdownToPlainText(`
30
+ # Getting Started
31
+ Install with **npm** or \`yarn\`.
32
+
33
+ - Clone the repo
34
+ - Run \`npm install\`
35
+ `)
36
+ // → "Getting Started\nInstall with npm or yarn.\n\nClone the repo\nRun npm install"
37
+
38
+ // Preview mode — single line for chat cards / OG snippets
39
+ const preview = markdownToPlainText(markdownSource, {
40
+ mode: 'preview',
41
+ maxChars: 160,
42
+ })
43
+
44
+ // Standalone inline strip (e.g. inside extractSections)
45
+ const clean = stripInlineMarkdown('**Bold** and [a link](https://example.com)')
46
+ // → "Bold and a link"
47
+ ```
48
+
49
+ ## Source
50
+
51
+ [`markdown-to-plain.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/markdown-to-plain.ts)
@@ -1,38 +1,49 @@
1
- <!-- source-hash: 32a85dbde6926a50b796aea0a1880802 -->
2
- A utility module that defines the core data structure and helper functions for handling different types of media items in carousel components.
1
+ <!-- source-hash: f4d365e1aafe7c4342c44a64be1e2e6e -->
2
+ Defines the shared `MediaItem` data contract and lightweight accessor utilities used by media carousel components across the OpenFrame platform.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`MediaItem` interface**: Comprehensive type definition for media objects supporting images, videos, and YouTube content with optional metadata like captions, dimensions, and duration
7
- - **`getMediaType()`**: Returns the media type ('image', 'video', or 'youtube') for a given media item
8
- - **`getMediaSrc()`**: Extracts the source URL from a media item
9
- - **`getMediaPoster()`**: Retrieves the poster/thumbnail URL for video content
6
+ ### `MediaItem` Interface
7
+
8
+ Core data shape for a single carousel slide. Supports three media types:
9
+
10
+ | Field | Type | Description |
11
+ |---|---|---|
12
+ | `id` | `string?` | Optional stable key (omitted by most vendor/profile/category converters) |
13
+ | `type` | `'image' \| 'video' \| 'youtube'` | Media kind — drives rendering strategy |
14
+ | `src` | `string` | Media source URL |
15
+ | `alt` | `string?` | Accessibility alt text |
16
+ | `title` | `string?` | Display title |
17
+ | `caption` | `string?` | Slide caption |
18
+ | `poster` | `string?` | Video poster/placeholder image |
19
+ | `thumbnail` | `string?` | Thumbnail URL |
20
+ | `width` / `height` | `number?` | Intrinsic dimensions |
21
+ | `duration` | `number?` | Video duration in seconds |
22
+
23
+ ### Accessor Functions
24
+
25
+ | Function | Returns | Description |
26
+ |---|---|---|
27
+ | `getMediaType(item)` | `'image' \| 'video' \| 'youtube'` | Extracts the media type from an item |
28
+ | `getMediaSrc(item)` | `string` | Extracts the source URL |
29
+ | `getMediaPoster(item)` | `string \| undefined` | Extracts the video poster image URL |
10
30
 
11
31
  ## Usage Example
12
32
 
13
33
  ```typescript
14
- import { MediaItem, getMediaType, getMediaSrc } from './media-carousel-utils-stub';
15
-
16
- const mediaItems: MediaItem[] = [
17
- {
18
- id: '1',
19
- type: 'image',
20
- src: '/images/photo.jpg',
21
- alt: 'Sample photo',
22
- width: 1920,
23
- height: 1080
24
- },
25
- {
26
- id: '2',
27
- type: 'video',
28
- src: '/videos/demo.mp4',
29
- poster: '/thumbnails/demo.jpg',
30
- duration: 120
31
- }
32
- ];
33
-
34
- // Get media type and source
35
- const firstItem = mediaItems[0];
36
- const type = getMediaType(firstItem); // 'image'
37
- const src = getMediaSrc(firstItem); // '/images/photo.jpg'
38
- ```
34
+ import { MediaItem, getMediaType, getMediaSrc, getMediaPoster } from './media-carousel-utils-stub';
35
+
36
+ const slide: MediaItem = {
37
+ type: 'video',
38
+ src: 'https://cdn.example.com/clip.mp4',
39
+ poster: 'https://cdn.example.com/thumb.jpg',
40
+ title: 'Product Demo',
41
+ duration: 120,
42
+ };
43
+
44
+ const type = getMediaType(slide); // 'video'
45
+ const src = getMediaSrc(slide); // 'https://cdn.example.com/clip.mp4'
46
+ const poster = getMediaPoster(slide); // 'https://cdn.example.com/thumb.jpg'
47
+ ```
48
+
49
+ > **Note:** The carousel keys slides by array index rather than `item.id`. Converters (hub vendor, profile, and category) conventionally omit the `id` field.
@@ -1,27 +1,48 @@
1
- <!-- source-hash: 8d0a4e249109b10a270ca0755176abc6 -->
2
- Runtime utility library for working with ODS (OpenFrame Design System) color tokens, providing platform-aware theming, token lookup, CSS generation, and React integration helpers.
1
+ <!-- source-hash: 67651d104f2d85ae6efdf60affb29813 -->
2
+ Runtime utilities for working with ODS (OpenFrame Design System) color tokens, providing platform-aware color resolution, CSS custom property management, and color math helpers for the `openmsp`, `openframe`, and `flamingo` platforms.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `Platform` | Type | Union of `'openmsp' \| 'openframe' \| 'flamingo'` |
9
- | `ColorCategory` | Type | Union of `'open' \| 'flamingo' \| 'system' \| 'attention'` |
10
- | `ColorVariant` | Type | Union of `'base' \| 'hover' \| 'active' \| 'focus' \| 'disabled'` |
11
- | `getODSToken` | Function | Looks up a raw token value by category, color name, and variant |
12
- | `getPlatformAccentColor` | Function | Returns the CSS variable for the current or specified platform's accent color |
13
- | `getCurrentPlatform` | Function | Resolves platform from DOM attribute or `NEXT_PUBLIC_APP_TYPE` env var |
14
- | `switchPlatformTheme` | Function | Updates `data-app-type` on `<html>` and dispatches `platformThemeChanged` event |
15
- | `getSemanticColor` | Function | Reads a computed `--color-*` CSS property for a given platform |
16
- | `tokenToTailwindClass` | Function | Maps a semantic token key to its corresponding Tailwind utility class |
17
- | `getTokensByCategory` | Function | Returns all tokens matching a given `ColorCategory` prefix |
18
- | `isValidODSToken` | Function | Checks whether a token key exists in the ODS token map |
19
- | `getPlatformConfig` | Function | Returns a config object with accent color, theme type, and brand name |
20
- | `generatePlatformCSS` | Function | Builds a CSS block of custom property overrides for a platform |
21
- | `applyColorToken` | Function | Directly sets a CSS custom property on an `HTMLElement` |
22
- | `interpolateColors` | Function | Linearly interpolates between two hex ODS tokens by progress (0–1) |
23
- | `usePlatformColors` | Function | React-friendly helper returning platform config and token accessors |
24
- | `getReadableTextColor` | Function | Returns `#212121` or `#fafafa` based on Rec. 601 luminance of a hex color |
6
+ ### Types
7
+
8
+ | Type | Values |
9
+ |---|---|
10
+ | `Platform` | `'openmsp'` \| `'openframe'` \| `'flamingo'` |
11
+ | `ColorCategory` | `'open'` \| `'flamingo'` \| `'system'` \| `'attention'` |
12
+ | `ColorVariant` | `'base'` \| `'hover'` \| `'active'` \| `'focus'` \| `'disabled'` |
13
+
14
+ ### Token Lookup
15
+
16
+ - **`getODSToken(category, color, variant?)`** Resolves a raw token value by composing the key as `{category}-{color}-{variant}`.
17
+ - **`getTokensByCategory(category)`** Returns all tokens matching a category prefix.
18
+ - **`isValidODSToken(tokenKey)`** Validates token existence in the ODS registry.
19
+
20
+ ### Platform & Theme
21
+
22
+ - **`getCurrentPlatform()`** Resolves the active platform from `data-app-type` DOM attribute or `NEXT_PUBLIC_APP_TYPE` env var (SSR-safe).
23
+ - **`getPlatformAccentColor(platform?)`** Returns the CSS variable for the platform accent color.
24
+ - **`getPlatformConfig(platform?)`** Returns a config object with accent color, theme mode, and brand name.
25
+ - **`switchPlatformTheme(platform)`** — Updates `data-app-type` on `<html>` and dispatches a `platformThemeChanged` custom event.
26
+ - **`generatePlatformCSS(platform)`** — Generates a CSS block with platform-scoped custom property overrides.
27
+
28
+ ### Color Math
29
+
30
+ - **`hexToRgb(hex)`** / **`rgbToHex(r, g, b)`** — Hex ↔ RGB conversion with clamping. `hexToRgb` returns `null` on invalid input.
31
+ - **`rgbToHsl(r, g, b)`** / **`hslToRgb(h, s, l)`** — RGB ↔ HSL conversion.
32
+ - **`deriveHoverColor(hex)`** — Darkens each channel by 10.
33
+ - **`deriveActiveColor(hex)`** — Darkens each channel by 20.
34
+ - **`interpolateColors(startToken, endToken, progress)`** — Linear hex interpolation between two token values.
35
+ - **`getReadableTextColor(hex)`** — Returns `'#212121'` (dark) or `'#fafafa'` (light) based on WCAG luminance via `pickReadableTextColor`.
36
+
37
+ ### Tailwind & DOM Helpers
38
+
39
+ - **`tokenToTailwindClass(tokenKey, type?)`** — Maps a semantic token name to a Tailwind class (e.g., `bg-ods-accent`).
40
+ - **`applyColorToken(element, property, tokenKey)`** — Sets a CSS custom property directly on an element.
41
+ - **`getSemanticColor(semanticName, platform?)`** — Reads a computed `--color-{name}` value from the live DOM.
42
+
43
+ ### React Hook
44
+
45
+ - **`usePlatformColors(platform?)`** — Returns a platform config object plus convenience methods (`getToken`, `switchTheme`, `getSemanticColor`) suitable for use in React components.
25
46
 
26
47
  ## Usage Example
27
48
 
@@ -30,42 +51,62 @@ import {
30
51
  getCurrentPlatform,
31
52
  getPlatformConfig,
32
53
  getODSToken,
33
- tokenToTailwindClass,
34
- interpolateColors,
54
+ deriveHoverColor,
35
55
  getReadableTextColor,
36
- usePlatformColors,
37
- switchPlatformTheme
56
+ tokenToTailwindClass,
57
+ hexToRgb,
58
+ rgbToHex,
38
59
  } from './ods-color-utils';
39
60
 
40
- // Resolve the active platform (SSR + CSR safe)
61
+ // Resolve active platform and config
41
62
  const platform = getCurrentPlatform(); // 'openframe'
42
-
43
- // Get full platform configuration
44
63
  const config = getPlatformConfig(platform);
45
- // { platform: 'openframe', accentColor: 'var(--ods-open-yellow-base)',
46
- // isDarkTheme: true, isLightTheme: false, brandName: 'OpenFrame' }
64
+ // {
65
+ // platform: 'openframe',
66
+ // accentColor: 'var(--ods-open-yellow-base)',
67
+ // isDarkTheme: true,
68
+ // isLightTheme: false,
69
+ // brandName: 'OpenFrame'
70
+ // }
71
+
72
+ // Look up a raw ODS token
73
+ const yellowBase = getODSToken('open', 'yellow', 'base'); // '#f5c518'
47
74
 
48
- // Look up a raw design token
49
- const tokenValue = getODSToken('system', 'greys-background', 'base');
75
+ // Derive interaction states from a custom hex color
76
+ const customBg = '#3a7bd5';
77
+ const hoverBg = deriveHoverColor(customBg); // '#306bcb' (–10 per channel)
78
+ const activeBg = deriveActiveColor(customBg); // '#275bb5' (–20 per channel)
50
79
 
51
- // Map a semantic token to a Tailwind class
52
- const twClass = tokenToTailwindClass('text-primary', 'text');
53
- // → 'text-ods-text-primary'
80
+ // Pick accessible text color over a background
81
+ const textColor = getReadableTextColor(customBg); // '#fafafa'
54
82
 
55
- // Interpolate between two hex tokens (e.g. for animations)
56
- const midColor = interpolateColors('open-yellow-base', 'flamingo-pink-base', 0.5);
83
+ // Map a semantic token to a Tailwind utility class
84
+ const bgClass = tokenToTailwindClass('accent-primary', 'bg'); // 'bg-ods-accent'
57
85
 
58
- // Ensure readable text on a dynamic background
59
- const textColor = getReadableTextColor('#FFC008'); // '#212121'
86
+ // Low-level color math
87
+ const rgb = hexToRgb('#ff6600'); // { r: 255, g: 102, b: 0 }
88
+ const hex = rgbToHex(255, 102, 0); // '#ff6600'
60
89
 
61
- // Switch platform at runtime (updates <html data-app-type> + fires event)
62
- switchPlatformTheme('flamingo');
90
+ // Switch platform theme at runtime (client-side only)
91
+ import { switchPlatformTheme } from './ods-color-utils';
92
+ switchPlatformTheme('flamingo'); // sets data-app-type="flamingo", dispatches event
93
+
94
+ // React usage
95
+ import { usePlatformColors } from './ods-color-utils';
63
96
 
64
- // React component usage
65
97
  function MyComponent() {
66
98
  const { accentColor, isDarkTheme, getToken, switchTheme } = usePlatformColors();
67
99
  return <div style={{ color: accentColor }}>{isDarkTheme ? 'Dark' : 'Light'}</div>;
68
100
  }
69
101
  ```
70
102
 
71
- > **Note:** `getSemanticColor` and `applyColorToken` are browser-only — they return `undefined` or no-op on the server. `switchPlatformTheme` cannot persist `process.env` changes in production; use it for UI-layer toggling only.
103
+ ## Notes
104
+
105
+ - **SSR-safe**: Functions that touch `window` or `document` guard with `typeof window === 'undefined'` checks.
106
+ - **`HEX_PATTERN`** (`/^#[0-9a-fA-F]{6}$/`) is exported for external validation.
107
+ - Hover/active darken steps (`10` / `20` per RGB channel) mirror the design system's preset interaction states, keeping custom colors consistent with system tokens.
108
+ - `getSemanticColor` temporarily switches the platform theme to read computed styles — avoid calling it in hot paths.
109
+
110
+ ## Source
111
+
112
+ [`ods-color-utils.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ods-color-utils.ts)
@@ -0,0 +1,45 @@
1
+ <!-- source-hash: 89ad4456d6f452acc2ba185db7b6f3b5 -->
2
+ Constructs branded fallback cover-image URLs for entity cards (onboarding guides, blog posts, releases, etc.) that have no image, centralizing all URL-building logic so consumers never concatenate og-placeholder URLs themselves.
3
+
4
+ ## Key Components
5
+
6
+ ### Interfaces
7
+
8
+ - **`OgPlaceholderEndpoints`** — Slice of `ChatRuntime.endpoints` needed for base URL resolution; accepts `ogPlaceholderUrl` (explicit) or `imageProxyUrlPrefix` (derived fallback).
9
+ - **`BuildOgPlaceholderOptions`** — Options for `site` label, `aspect` ratio (`'wide'` | `'square'`), and explicit `width`/`height` pixel overrides.
10
+
11
+ ### Functions
12
+
13
+ - **`resolveOgPlaceholderBase(endpoints?)`** *(internal)* — Resolves the route base via three-tier priority: explicit `ogPlaceholderUrl` → derived from `imageProxyUrlPrefix` (swaps `/image-proxy` for `/og-placeholder`) → same-origin relative `/api/og-placeholder`.
14
+ - **`buildOgPlaceholderUrl(endpoints, title, options?)`** — Primary entry point. Resolves the base URL, preserves any pre-existing query params, and appends `title`, `site`, and dimension params. SSR- and browser-safe; always returns a usable URL.
15
+
16
+ ## Usage Example
17
+
18
+ ```typescript
19
+ import { buildOgPlaceholderUrl } from './og-placeholder'
20
+
21
+ const endpoints = {
22
+ imageProxyUrlPrefix: 'https://api.example.com/image-proxy',
23
+ }
24
+
25
+ // Wide fallback (1200×630, route default)
26
+ const wideUrl = buildOgPlaceholderUrl(endpoints, 'Getting Started Guide', {
27
+ site: 'Docs',
28
+ aspect: 'wide',
29
+ })
30
+ // → https://api.example.com/og-placeholder?title=Getting+Started+Guide&site=Docs
31
+
32
+ // Square fallback for compact chat-inline slots (1024×1024)
33
+ const squareUrl = buildOgPlaceholderUrl(endpoints, 'Release v2.0', {
34
+ aspect: 'square',
35
+ })
36
+ // → https://api.example.com/og-placeholder?title=Release+v2.0&w=1024&h=1024
37
+
38
+ // Explicit dimensions win over aspect
39
+ const customUrl = buildOgPlaceholderUrl(endpoints, 'Case Study', {
40
+ width: 800,
41
+ height: 400,
42
+ })
43
+ ```
44
+
45
+ **Base resolution priority:** `ogPlaceholderUrl` → derived from `imageProxyUrlPrefix` → `/api/og-placeholder` (same-origin fallback). Per-platform brand colors are resolved server-side — never baked into the URL.
@@ -0,0 +1,26 @@
1
+ <!-- source-hash: 9edb965a12c9dd5942bb4987087d4fed -->
2
+ Exports a single Tailwind class string used to standardize icon styling across all section-hero and page-header components in the library. Intentionally placed in `utils/` as a plain server-safe module (no `'use client'` directive) to prevent Next.js client-reference proxy issues when the constant is consumed by server components.
3
+
4
+ ## Key Components
5
+
6
+ - **`SECTION_HERO_ICON_CLASS`** — Tailwind class string (`'h-10 w-10 text-ods-accent'`) applied uniformly to every section-hero icon (Roadmap, Releases, Knowledge Hub, Data Room, etc.)
7
+
8
+ ## Usage Example
9
+
10
+ ```typescript
11
+ import { SECTION_HERO_ICON_CLASS } from './page-header-constants'
12
+ import { BookOpen } from 'lucide-react'
13
+
14
+ // Server component — safe to import directly
15
+ export function KnowledgeHubHero() {
16
+ return <BookOpen className={SECTION_HERO_ICON_CLASS} />
17
+ }
18
+ ```
19
+
20
+ ## Why Not `'use client'`?
21
+
22
+ Importing this constant from a `'use client'` module causes Next.js to wrap it in a **client-reference proxy** when consumed in a server context. Lucide's internal `mergeClasses` then calls `.trim()` on that proxy object instead of a plain string, resulting in a runtime crash. Keeping this file in `utils/` with no client directive ensures it always resolves to a raw string in all rendering contexts.
23
+
24
+ ## Source
25
+
26
+ [`page-header-constants.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/page-header-constants.ts)
@@ -1,57 +1,57 @@
1
- <!-- source-hash: 744818572300c7f98b30a728467179eb -->
2
- Centralized configuration module for all platform branding assets and metadata across the Flamingo/OpenFrame ecosystem, providing icons, colors, display names, descriptions, and utility functions for consistent platform presentation.
1
+ <!-- source-hash: 760045cd91c218f69a16fe3966013d41 -->
2
+ Centralized configuration module for all platform branding assets icons, colors, display names, descriptions, and slogans across the OpenFrame OSS library's supported platforms.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### Lookup Maps (exported constants)
6
+ ### Static Lookup Maps
7
7
 
8
- | Export | Purpose |
9
- |--------|---------|
10
- | `platformIcons` | React icon components keyed by platform name |
8
+ | Export | Description |
9
+ |---|---|
10
+ | `platformIcons` | React icon nodes (5×5) per platform |
11
11
  | `platformColors` | Tailwind `bg-*` class strings per platform |
12
- | `platformDisplayNames` | Human-readable names (e.g., `"Flamingo Marketing Hub"`) |
12
+ | `platformDisplayNames` | Human-readable names (e.g. `"OpenFrame"`) |
13
13
  | `platformDescriptions` | Full marketing copy per platform |
14
- | `platformSlogans` | Short taglines for branding use |
15
- | `platformHexColors` | Raw hex values for non-Tailwind contexts |
16
- | `platformIconNames` | String icon identifiers for config serialization |
14
+ | `platformSlogans` | Short taglines per platform |
15
+ | `platformHexColors` | Raw hex strings for dynamic styling |
16
+ | `platformIconNames` | String icon identifiers for config payloads |
17
17
 
18
- Supported platform keys: `openframe`, `openmsp`, `flamingo`, `flamingo-teaser`, `marketing-hub`, `product-hub`, `revenue-hub`, `people-hub`, `company-hub`, `tmcg`, `universal`
18
+ **Supported platforms:** `openframe`, `openmsp`, `flamingo`, `flamingo-teaser`, `marketing-hub`, `product-hub`, `revenue-hub`, `people-hub`, `company-hub`, `tmcg`, `universal`
19
19
 
20
20
  ### Utility Functions
21
21
 
22
22
  | Function | Returns | Notes |
23
- |----------|---------|-------|
24
- | `getPlatformIcon(name)` | `React.ReactNode` | Falls back to `universal` Globe icon |
23
+ |---|---|---|
24
+ | `getPlatformIcon(name)` | `React.ReactNode` | 5×5 icon, falls back to `universal` |
25
+ | `getSmallPlatformIcon(name)` | `React.ReactNode` | 4×4 icon for filter buttons, white-optimized |
26
+ | `getPlatformIconComponent(name, className?)` | `React.ReactNode` | 6×6 default, customizable via `className` |
25
27
  | `getPlatformColor(name)` | `string` | Tailwind `bg-*` class |
26
- | `getPlatformDisplayName(name)` | `string` | Falls back to raw name |
27
- | `getPlatformDescription(name)` | `string` | Falls back to raw name |
28
- | `getPlatformSlogan(name)` | `string` | Falls back to raw name |
29
- | `getDefaultColorForPlatform(name)` | `string` | Hex value, falls back to `universal` |
30
- | `getDefaultIconForPlatform(name)` | `string` | Icon name string, falls back to `universal` |
31
- | `getSmallPlatformIcon(name)` | `React.ReactNode` | 4×4 (`h-4 w-4`), uses CSS variables for hub variants |
32
- | `getPlatformIconComponent(name, className?)` | `React.ReactNode` | 6×6 default, accepts custom `className` |
33
- | `transformPlatformConfigsToOptions(configs)` | `SelectableOption[]` | Maps `PlatformConfig[]` to UI-selectable options with icon and color |
28
+ | `getPlatformDisplayName(name)` | `string` | Falls back to raw `name` |
29
+ | `getPlatformDescription(name)` | `string` | Falls back to raw `name` |
30
+ | `getPlatformSlogan(name)` | `string` | Falls back to raw `name` |
31
+ | `getDefaultColorForPlatform(name)` | `string` | Hex color, defaults to `universal` |
32
+ | `getDefaultIconForPlatform(name)` | `string` | Icon name string, defaults to `universal` |
33
+ | `transformPlatformConfigsToOptions(configs)` | `SelectableOption[]` | Maps `PlatformConfig[]` from DB to UI-ready options |
34
34
 
35
35
  ## Usage Example
36
36
 
37
37
  ```typescript
38
38
  import {
39
+ getPlatformIcon,
39
40
  getPlatformDisplayName,
40
41
  getPlatformColor,
41
42
  getSmallPlatformIcon,
42
- transformPlatformConfigsToOptions
43
- } from './platform-config';
43
+ transformPlatformConfigsToOptions,
44
+ } from './config/platform-config';
44
45
 
45
46
  // Render a platform badge
46
- const PlatformBadge = ({ name }: { name: string }) => (
47
- <span className={`px-2 py-1 rounded ${getPlatformColor(name)}`}>
48
- {getSmallPlatformIcon(name)}
49
- {getPlatformDisplayName(name)}
50
- </span>
51
- );
52
-
53
- // Populate a platform selector dropdown
54
- const options = transformPlatformConfigsToOptions(platformConfigs);
55
- ```
47
+ const icon = getPlatformIcon('openframe'); // OpenFrame SVG node
48
+ const label = getPlatformDisplayName('openframe'); // "OpenFrame"
49
+ const bg = getPlatformColor('openframe'); // "bg-[#8B5CF6]"
50
+
51
+ // Small icon for filter chips
52
+ const smallIcon = getSmallPlatformIcon('flamingo'); // 4×4 pink flamingo
56
53
 
57
- > All lookup functions fall back gracefully to the `universal` platform or the raw input string, so unknown platform keys never produce `undefined` in UI renders.
54
+ // Transform DB records into dropdown options
55
+ const options = transformPlatformConfigsToOptions(platformConfigs);
56
+ // [{ id, name, displayName, description, icon, color }, ...]
57
+ ```
@@ -0,0 +1,47 @@
1
+ <!-- source-hash: 47a64824b89a260db77220062bb3aaf7 -->
2
+ Maps product release types to their corresponding `StatusBadge` color schemes for use in `ProductReleaseCard` (lg variant) metadata rendering.
3
+
4
+ ## Key Components
5
+
6
+ ### Types
7
+
8
+ - **`ReleaseType`** — Union type: `'major' | 'minor' | 'patch' | 'beta' | 'alpha'`
9
+ - **`ReleaseTypeBadgeColor`** — Union type: `'error' | 'cyan' | 'success' | 'warning'`
10
+
11
+ ### Functions
12
+
13
+ - **`releaseTypeToBadgeColor(t)`** — Converts a release type string to its badge color. Accepts `ReleaseType | string | null | undefined` to handle legacy API values gracefully. Returns `undefined` for unknown inputs (badge hidden, no crash).
14
+
15
+ ### Color Mapping
16
+
17
+ | Release Type | Color | Semantic |
18
+ |---|---|---|
19
+ | `major` | `error` (red) | Breaking change |
20
+ | `minor` | `cyan` | New feature |
21
+ | `patch` | `success` (green) | Safe bump |
22
+ | `beta` / `alpha` | `warning` (yellow) | Preview |
23
+
24
+ ## Usage Example
25
+
26
+ ```typescript
27
+ import { releaseTypeToBadgeColor } from './release-badge'
28
+
29
+ // Standard usage in ProductReleaseCard
30
+ const badgeColor = releaseTypeToBadgeColor(release.release_type)
31
+
32
+ // badgeColor is passed alongside releaseType — both are required for the
33
+ // card to render a colored badge; undefined falls back to '—' placeholder
34
+ <ProductReleaseCard
35
+ size="lg"
36
+ releaseType={release.release_type}
37
+ releaseTypeBadgeColor={badgeColor}
38
+ />
39
+
40
+ // Handles unknown/legacy values safely
41
+ releaseTypeToBadgeColor('rc') // → undefined (badge hidden)
42
+ releaseTypeToBadgeColor(null) // → undefined (badge hidden)
43
+ releaseTypeToBadgeColor('patch') // → 'success'
44
+ releaseTypeToBadgeColor('major') // → 'error'
45
+ ```
46
+
47
+ > **Note:** The color vocabulary here is specific to `StatusBadge` / `ProductReleaseCard`. The admin form's `releaseTypeOptions.color` array uses a separate vocabulary — these two mappings are intentionally kept distinct.
@@ -0,0 +1,45 @@
1
+ <!-- source-hash: 90922d1a0fba270fdb0d92bc58406d0e -->
2
+ Resolves the cover image for a `ProductReleaseCard` using a deterministic priority chain, serving as the single source of truth for all surfaces that render release covers.
3
+
4
+ ## Key Components
5
+
6
+ ### `ReleaseCoverSource`
7
+ Input interface describing the available image candidates on a release entity:
8
+
9
+ | Field | Description |
10
+ |---|---|
11
+ | `featured_image` | Editor-curated cover — highest priority |
12
+ | `highlight_video_thumbnail` | AI-generated highlight reel thumbnail |
13
+ | `main_video_thumbnail` | Full-release video thumbnail |
14
+ | `og_image_url` | SEO/OG fallback image |
15
+
16
+ ### `ReleaseCoverResult`
17
+ Output interface returned by the resolver:
18
+
19
+ | Field | Description |
20
+ |---|---|
21
+ | `cover` | Resolved image URL, or `null` if none available |
22
+ | `hasVideoCover` | `true` only when the active cover is a video thumbnail (priorities 2–3) |
23
+
24
+ ### `resolveReleaseCover(r: ReleaseCoverSource): ReleaseCoverResult`
25
+ Applies the priority chain using `||` (not `??`) so empty strings fall through rather than rendering a broken `<Image src="">`. `hasVideoCover` is suppressed when `featured_image` is set, preventing a misleading Play overlay on still images.
26
+
27
+ ## Usage Example
28
+
29
+ ```typescript
30
+ import { resolveReleaseCover } from './release-cover'
31
+
32
+ const { cover, hasVideoCover } = resolveReleaseCover({
33
+ featured_image: null,
34
+ highlight_video_thumbnail: 'https://cdn.example.com/highlight.jpg',
35
+ main_video_thumbnail: 'https://cdn.example.com/main.jpg',
36
+ og_image_url: 'https://cdn.example.com/og.jpg',
37
+ })
38
+
39
+ // cover → 'https://cdn.example.com/highlight.jpg'
40
+ // hasVideoCover → true
41
+ ```
42
+
43
+ > **Adding a new fallback source?** Edit only `ReleaseCoverSource`, `ReleaseCoverResult`, and the chain in `resolveReleaseCover` — all rendering surfaces pick up the change automatically.
44
+
45
+ **Source:** [`release-cover.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/release-cover.ts)
@@ -0,0 +1,45 @@
1
+ <!-- source-hash: 67a0df770f7417b847b731191fc01a80 -->
2
+ Handles same-page hash navigation by combining `history.pushState`, synthetic `hashchange` events, and smooth scrolling — working around Next.js limitations that suppress smooth scroll during navigation and treat same-URL `router.push` as a no-op.
3
+
4
+ ## Key Components
5
+
6
+ ### Constants
7
+
8
+ | Constant | Value | Purpose |
9
+ |---|---|---|
10
+ | `STICKY_HEADER_OFFSET_PX` | `96` | Offset for pages with both a section-nav strip and the global hub header |
11
+ | `HUB_HEADER_OFFSET_PX` | `80` | Offset for pages with only the global hub header (docs, blog, vendor detail) |
12
+
13
+ ### Functions & Interfaces
14
+
15
+ - **`normalizeHashFragment(hash)`** — Strips any extra `#` segments from a fragment string (e.g., `'#a#b'` → `'#a'`), keeping the URL bar and `getElementById` in sync.
16
+ - **`NavigateSamePageHashOptions`** — Interface with optional `headerOffset` (pixels to subtract for sticky chrome) and `history` mode (`'push'` or `'replace'`).
17
+ - **`navigateSamePageHash(target, options)`** — Core primitive that validates the target is same-origin/pathname/search, normalizes malformed fragments, updates history, fires a synthetic `hashchange` event, and smooth-scrolls to the anchor. Returns `true` if the navigation was claimed, `false` for cross-page targets.
18
+
19
+ ## Usage Example
20
+
21
+ ```typescript
22
+ import {
23
+ navigateSamePageHash,
24
+ HUB_HEADER_OFFSET_PX,
25
+ STICKY_HEADER_OFFSET_PX,
26
+ } from './same-page-hash-nav'
27
+
28
+ // In a TOC link click handler (replaces history entry instead of pushing)
29
+ function handleTocClick(href: string) {
30
+ const claimed = navigateSamePageHash(href, {
31
+ headerOffset: HUB_HEADER_OFFSET_PX,
32
+ history: 'replace',
33
+ })
34
+ if (!claimed) {
35
+ router.push(href) // fall through for cross-page targets
36
+ }
37
+ }
38
+
39
+ // Bare-hash shorthand — no need to reconstruct pathname + search
40
+ navigateSamePageHash('#features', {
41
+ headerOffset: STICKY_HEADER_OFFSET_PX,
42
+ })
43
+ ```
44
+
45
+ > **Dev-mode warnings:** In development, `navigateSamePageHash` logs to the console when it detects a malformed multi-fragment hash or a missing anchor element, pointing to the upstream composer as the source.