@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
package/src/utils/.cn.md CHANGED
@@ -1,44 +1,55 @@
1
- <!-- source-hash: c1693a304ddf9b29bde0ca02b6f6b8ea -->
2
- Utility module providing class name merging with extended Tailwind support, and platform URL resolution helpers for multi-tenant Flamingo/OpenFrame deployments.
1
+ <!-- source-hash: 700d6c65ebfb65630e665b437acf4e83 -->
2
+ Utility module providing two core helpers: a Tailwind-aware class name merger (`cn`) that correctly handles custom ODS typography utilities, and an environment-aware base URL resolver (`getBaseUrl`) that delegates platform canonical URLs to the SSOT in `platform-domains.ts`.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  | Export | Type | Description |
7
7
  |--------|------|-------------|
8
- | `cn` | Function | Merges class names using `clsx` + `tailwind-merge`, extended with custom ODS typography classes (`text-h1`–`text-h6`) |
9
- | `getPlatformProductionUrl` | Function | Returns the production URL for a named platform, with `NEXT_PUBLIC_*` env var override support |
10
- | `getAllPlatformBaseDomains` | Function | Extracts all unique base domains across platforms; handles localhost, Vercel preview, and production cases (useful for cross-domain cookie scope) |
11
- | `getBaseUrl` | Function | Resolves the current app's base URL using a priority chain: env override → platform URL → Vercel domain → production fallback → `localhost:3000` |
8
+ | `cn` | `function` | Combines class names using `clsx` + a custom `tailwind-merge` instance |
9
+ | `getBaseUrl` | `function` | Returns the application base URL for the current environment |
10
+ | `twMerge` | internal | Extended `tailwind-merge` instance with the `ods-typography` class group |
11
+
12
+ ### `ods-typography` Class Group
13
+
14
+ Custom Tailwind text-size utilities registered to prevent silent conflicts with `text-color` utilities:
15
+
16
+ ```text
17
+ text-h1 · text-h2 · text-h3 · text-h4 · text-h5 · text-h6 · text-code · text-badge
18
+ ```
19
+
20
+ Without this registration, `cn('text-badge', 'text-ods-text-on-accent')` would drop `text-badge` — only the colour survives.
12
21
 
13
22
  ## Usage Example
14
23
 
15
24
  ```typescript
16
- import { cn, getBaseUrl, getPlatformProductionUrl, getAllPlatformBaseDomains } from '@/lib/cn'
17
-
18
- // Merge Tailwind classes (including custom ODS typography)
19
- const className = cn('text-h1 font-bold', isActive && 'text-yellow-400')
25
+ import { cn, getBaseUrl } from '@/lib/cn'
20
26
 
21
- // Resolve current app base URL
22
- const apiBase = getBaseUrl() // http://localhost:3000 (dev)
23
- // https://www.openmsp.ai (prod fallback)
27
+ // Merge conditional classes safely — typography and colour both survive
28
+ const className = cn(
29
+ 'text-badge',
30
+ 'text-ods-text-on-accent',
31
+ isActive && 'bg-accent',
32
+ )
24
33
 
25
- // Resolve a specific platform URL (respects NEXT_PUBLIC_* overrides)
26
- const flamingoUrl = getBaseUrl('flamingo') // https://www.flamingo.run
27
- const openframeUrl = getPlatformProductionUrl('openframe') // https://openframe.ai
34
+ // Current deployment URL (dev → localhost, prod → Vercel/canonical domain)
35
+ const currentUrl = getBaseUrl()
28
36
 
29
- // Get all cookie-scoped base domains (e.g. for document.cookie domain=)
30
- const domains = getAllPlatformBaseDomains()
31
- // Production: ['.flamingo.run', 'flamingo.run', '.openmsp.ai', 'openmsp.ai', ...]
32
- // Vercel preview: ['.vercel.app', 'vercel.app']
33
- // Localhost: []
37
+ // Specific platform URL (respects env override, falls back to canonical)
38
+ const flamingoUrl = getBaseUrl('flamingo') // https://www.flamingo.run
39
+ const openMspUrl = getBaseUrl('openmsp') // https://www.openmsp.ai
34
40
  ```
35
41
 
36
- ## Environment Variables
42
+ ## `getBaseUrl` Resolution Order
43
+
44
+ ```mermaid
45
+ graph TD
46
+ A[getBaseUrl called] --> B{NODE_ENV !== production?}
47
+ B -->|Yes| C[NEXT_PUBLIC_DEV_URL or localhost:3000]
48
+ B -->|No| D{platform arg provided?}
49
+ D -->|Yes| E[getPlatformProductionUrl from SSOT]
50
+ D -->|No| F{VERCEL_PROJECT_PRODUCTION_URL set?}
51
+ F -->|Yes| G[https://vercel-domain]
52
+ F -->|No| H[getPlatformProductionUrl via NEXT_PUBLIC_APP_TYPE]
53
+ ```
37
54
 
38
- | Variable | Platform | Default |
39
- |----------|----------|---------|
40
- | `NEXT_PUBLIC_FLAMINGO_URL` | `flamingo`, `universal` | `https://www.flamingo.run` |
41
- | `NEXT_PUBLIC_OPENMSP_URL` | `openmsp` | `https://www.openmsp.ai` |
42
- | `NEXT_PUBLIC_OPENFRAME_URL` | `openframe` | `https://openframe.ai` |
43
- | `NEXT_PUBLIC_MARKETING_HUB_URL` | `marketing-hub` | `https://marketing-hub.flamingo.so` |
44
- | `NEXT_PUBLIC_DEV_URL` | all (dev only) | `http://localhost:3000` |
55
+ > Platform canonical URLs and their `NEXT_PUBLIC_*_URL` environment overrides are defined exclusively in [`src/platform-domains.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/platform-domains.ts).
@@ -1,35 +1,44 @@
1
- <!-- source-hash: 320c7ab088203622f31bd929824e3767 -->
2
- Provides color analysis utilities for extracting dominant colors from images and selecting accessible contrast colors from the Flamingo design palette, primarily used for dynamic badge and card styling.
1
+ <!-- source-hash: 49fcc1fc36872594f424bdbdc5b66d78 -->
2
+ Client-side color analysis utilities for extracting dominant colors from images and selecting accessible badge/background colors based on WCAG contrast ratios.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `ColorPalette` | Interface | Color descriptor with `name`, `hex`, and `rgb` tuple |
9
- | `DESIGN_PALETTE` | Constant | Three-color palette: yellow `#FFC008`, black `#161616`, gray `#888888` |
10
- | `hexToRgb` | Function | Converts a hex string to an RGB tuple |
11
- | `getContrastRatio` | Function | Returns WCAG contrast ratio between two RGB colors |
12
- | `extractDominantColor` | Function | Samples a canvas to find the most frequent bucketed color |
13
- | `getBestContrastColor` | Function | Picks the palette color with highest contrast (≥ 3:1 minimum) |
14
- | `analyzeImageColor` | Function | Loads an image URL, extracts dominant color, returns best palette match |
15
- | `extractImageEdgeColorAsync` | Function | Samples edge pixels of an image and returns the dominant hex color for background fills |
6
+ ### Types & Constants
16
7
 
17
- ## Usage Example
8
+ - **`ColorPalette`** — Interface representing a named color with `hex` and `rgb` tuple fields.
9
+ - **`DESIGN_PALETTE`** — Three-entry design system palette: `yellow`, `black`, and `gray`.
18
10
 
19
- ```typescript
20
- import { analyzeImageColor, extractImageEdgeColorAsync, getContrastRatio, hexToRgb } from './color-analysis';
11
+ ### Functions
21
12
 
22
- // Get the best badge text color for a logo image
23
- const badgeColor = await analyzeImageColor('https://example.com/logo.png');
24
- console.log(badgeColor.hex); // '#161616'
13
+ | Function | Description |
14
+ |---|---|
15
+ | `hexToRgb(hex)` | Converts a hex color string (with shorthand support) to an RGB tuple. |
16
+ | `getContrastRatio(color1, color2)` | Returns the WCAG contrast ratio between two RGB colors. |
17
+ | `pickReadableTextColor(bgHex)` | Returns `'dark'` or `'light'` based on which foreground has better contrast against the given background hex. |
18
+ | `extractDominantColor(canvas)` | Samples ~1000 pixels in a grid pattern and bucket-quantizes (step 32) to find the most frequent color. |
19
+ | `getBestContrastColor(imageColor)` | Picks the `DESIGN_PALETTE` entry with the highest contrast against a given RGB color; falls back to `black` if no entry meets 3:1. |
20
+ | `analyzeImageColor(imageSrc)` | Loads an image via canvas (scaled to max 100px), extracts its dominant color, and resolves with the best-contrast palette entry. |
21
+ | `extractImageEdgeColorAsync(imageUrl)` | Samples a 15% edge band of an image (scaled to max 50px) and returns the average dominant edge color as a hex string. Used for email/card background fills. |
25
22
 
26
- // Extract edge color for email/card background fill
27
- const bgColor = await extractImageEdgeColorAsync('https://example.com/hero.jpg');
28
- console.log(bgColor); // '#1a2b3c'
23
+ ## Usage Example
29
24
 
30
- // Manual contrast check between two hex colors
31
- const ratio = getContrastRatio(hexToRgb('#FFC008'), hexToRgb('#161616'));
32
- console.log(ratio); // ~11.5 (passes WCAG AA and AAA)
25
+ ```typescript
26
+ import {
27
+ pickReadableTextColor,
28
+ analyzeImageColor,
29
+ extractImageEdgeColorAsync,
30
+ } from './color-analysis';
31
+
32
+ // Choose a text theme for a dynamic banner background
33
+ const theme = pickReadableTextColor('#FFC008'); // → 'dark'
34
+
35
+ // Resolve a badge color from a product image
36
+ const paletteColor = await analyzeImageColor('https://cdn.example.com/product.png');
37
+ console.log(paletteColor.name); // e.g. 'yellow'
38
+
39
+ // Fill background color behind an image in an email template
40
+ const edgeHex = await extractImageEdgeColorAsync('https://cdn.example.com/hero.jpg');
41
+ console.log(edgeHex); // e.g. '#1a1a1a'
33
42
  ```
34
43
 
35
- > **Note:** `extractDominantColor` and `analyzeImageColor` are client-side only and require `document`/`canvas` APIs. `extractImageEdgeColorAsync` also guards against SSR with a `typeof window` check, resolving to `#000000` on the server.
44
+ > **Note:** `analyzeImageColor` and `extractImageEdgeColorAsync` are browser-only (they depend on `HTMLCanvasElement` and `document`). `extractImageEdgeColorAsync` returns `#000000` in SSR/Node environments.
@@ -1,36 +1,56 @@
1
- <!-- source-hash: e54e6fb6cb2d70638760dba85e7b09f8 -->
2
- Common utility functions for TypeScript/React applications, providing essential helpers for styling, async operations, string manipulation, and object cloning.
1
+ <!-- source-hash: dd0dfcce5e3006e1d50e924c7a9379a7 -->
2
+ General-purpose utility functions for class name merging, async delays, string manipulation, JSON-LD serialization, object cloning, and environment-based Slack URL resolution.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`cn()`** - Merges and deduplicates Tailwind CSS class names using `clsx` and `tailwind-merge`
7
- - **`delay()`** - Creates a Promise-based delay for async operations
8
- - **`generateRandomString()`** - Generates cryptographically simple random strings for IDs or tokens
9
- - **`truncateString()`** - Safely truncates strings with customizable suffix
10
- - **`deepClone()`** - Performs deep cloning of objects using JSON serialization
11
- - **`getSlackCommunityJoinUrl()`** - Retrieves Slack community URL from environment variables with fallback
6
+ | Export | Signature | Description |
7
+ |---|---|---|
8
+ | `cn` | `(...inputs: ClassValue[]) => string` | Merges Tailwind CSS class names using `clsx` + `tailwind-merge` |
9
+ | `delay` | `(ms: number) => Promise<void>` | Async sleep helper |
10
+ | `generateRandomString` | `(length?: number) => string` | Alphanumeric random string generator (default length: 8) |
11
+ | `truncateString` | `(str, maxLength, suffix?) => string` | Truncates with configurable suffix (default: `"..."`) |
12
+ | `serializeJsonLd` | `(schema: unknown) => string` | XSS-safe JSON-LD serializer — escapes `<` as `\u003c` |
13
+ | `deepClone` | `<T>(obj: T) => T` | Structural clone via JSON round-trip |
14
+ | `getSlackCommunityJoinUrl` | `() => string` | Reads `NEXT_PUBLIC_SLACK_COMMUNITY_JOIN_URL` with fallback to OpenMSP invite |
12
15
 
13
16
  ## Usage Example
14
17
 
15
18
  ```typescript
16
- import { cn, delay, generateRandomString, truncateString, deepClone, getSlackCommunityJoinUrl } from './common'
19
+ import {
20
+ cn,
21
+ delay,
22
+ generateRandomString,
23
+ truncateString,
24
+ serializeJsonLd,
25
+ deepClone,
26
+ getSlackCommunityJoinUrl,
27
+ } from "@/lib/utils/common"
17
28
 
18
- // Merge Tailwind classes (removes duplicates)
19
- const buttonClass = cn('px-4 py-2 bg-blue-500', isActive && 'bg-blue-700', 'hover:bg-blue-600')
29
+ // Merge Tailwind classes (handles conflicts)
30
+ const cls = cn("px-4 py-2", isActive && "bg-blue-500", "px-6") // "py-2 bg-blue-500 px-6"
20
31
 
21
- // Async delay
22
- await delay(1000) // Wait 1 second
32
+ // Async delay in an async function
33
+ await delay(1500) // waits 1.5 seconds
23
34
 
24
- // Generate random ID
25
- const sessionId = generateRandomString(12) // "aB3xY9mN4pQ1"
35
+ // Random token generation
36
+ const token = generateRandomString(16) // e.g. "aZ3kR8mQpL2nWx7T"
26
37
 
27
- // Truncate long text
28
- const preview = truncateString("This is a very long description...", 20) // "This is a very lo..."
38
+ // Safe truncation
39
+ truncateString("OpenFrame AI Platform", 14) // "OpenFrame AI..."
29
40
 
30
- // Deep clone object
31
- const originalData = { user: { name: "John", settings: { theme: "dark" } } }
32
- const clonedData = deepClone(originalData)
41
+ // Safe JSON-LD for <script type="application/ld+json">
42
+ const jsonLd = serializeJsonLd({ "@type": "WebSite", name: "</script>attack" })
43
+ // → '{"@type":"WebSite","name":"\\u003c/script>attack"}'
33
44
 
34
- // Get Slack URL
35
- const slackUrl = getSlackCommunityJoinUrl() // Returns env var or fallback URL
36
- ```
45
+ // Deep clone without reference sharing
46
+ const copy = deepClone({ nested: { value: 42 } })
47
+
48
+ // Slack community URL (set via env or uses OpenMSP fallback)
49
+ const slackUrl = getSlackCommunityJoinUrl()
50
+ ```
51
+
52
+ > **Security note:** `serializeJsonLd` must be used for all `<script type="application/ld+json">` blocks. Raw `JSON.stringify` does not HTML-escape `<`, leaving stored XSS vectors open if user-entered data reaches the schema object.
53
+
54
+ ## Source
55
+
56
+ [`common.ts` on GitHub](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/common.ts)
@@ -0,0 +1,64 @@
1
+ <!-- source-hash: 235fea62f64e91dc73029934b22d60cc -->
2
+ Unified content-href authority for all embeddable surfaces — resolves content links consistently across both page views and chat surfaces using a single configurable seam.
3
+
4
+ ## Key Components
5
+
6
+ ### Constants
7
+
8
+ - **`DEFAULT_CONTENT_SUFFIXES`** — Maps content `documentType` strings (e.g. `'product_release'`, `'blog_post'`) to their URL path segments. Mirrors the hub's `PUBLIC_URL_PATHS`; kept in sync manually across the cross-repo boundary.
9
+
10
+ ### Types
11
+
12
+ - **`ComposeContentUrlInput`** — Unified input for both page views (slug-based) and chat rows (ID + `externalUrl`-based).
13
+ - **`ContentHrefOptions`** — Configuration for `makeComposeContentUrl`: hosted types set, hub origin fallback, optional suffix/override maps.
14
+ - **`ComposeContentUrl`** — The seam function signature on `ChatRuntime`; always returns `{ href, targetPlatform }`, never null.
15
+
16
+ ### Functions
17
+
18
+ - **`makeComposeContentUrl(opts)`** — Factory that builds the embedder's `composeContentUrl`. Resolution order: explicit `overrides` → hosted in-app route → verbatim `externalUrl` → hub-origin fallback.
19
+ - **`buildDefaultHref(basePath, slug)`** — Fallback href when no `composeContentUrl` is wired (single-platform embedders).
20
+ - **`resolveContentHref(composeContentUrl, args)`** — Ternary helper used by catalog/detail views: delegates to `composeContentUrl` when wired, otherwise calls `buildDefaultHref`.
21
+
22
+ ## Usage Example
23
+
24
+ ```typescript
25
+ import {
26
+ makeComposeContentUrl,
27
+ resolveContentHref,
28
+ } from './content-href'
29
+
30
+ // Build the embedder's composer
31
+ const composeContentUrl = makeComposeContentUrl({
32
+ hostedTypes: new Set(['onboarding_guide', 'product_release']),
33
+ contentOrigin: 'https://openframe.app',
34
+ overrides: {
35
+ author: (id) => ({ href: `/team/${id}`, targetPlatform: null }),
36
+ },
37
+ })
38
+
39
+ // Page view — slug passed directly as identifier
40
+ composeContentUrl({ type: 'product_release', identifier: 'my-release-v2' })
41
+ // → { href: '/releases/my-release-v2', targetPlatform: null }
42
+
43
+ // Chat row — id as identifier, slug recovered from externalUrl
44
+ composeContentUrl({
45
+ type: 'product_release',
46
+ identifier: 'abc123',
47
+ externalUrl: 'https://openframe.app/releases/my-release-v2',
48
+ })
49
+ // → { href: '/releases/my-release-v2', targetPlatform: null }
50
+
51
+ // Non-hosted type — opens out to hub
52
+ composeContentUrl({ type: 'blog_post', identifier: 'my-post' })
53
+ // → { href: 'https://openframe.app/blog/my-post', targetPlatform: null }
54
+
55
+ // Catalog/detail view helper
56
+ resolveContentHref(composeContentUrl, {
57
+ type: 'onboarding_guide',
58
+ slug: 'getting-started',
59
+ basePath: '/onboarding-guides',
60
+ })
61
+ // → { href: '/onboarding-guides/getting-started', targetPlatform: null }
62
+ ```
63
+
64
+ **Source:** [`content-href.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/content-href.ts)
@@ -0,0 +1,51 @@
1
+ <!-- source-hash: 0fe0f3b3b32e9874a82e09c286bf0512 -->
2
+ Single source of truth for grouping `content_ref` types with display metadata (label, render order, layout, and card size). Consumed by the `RelatedContentSection` component and the hub's investor email builder to ensure consistent rendering and ordering across surfaces.
3
+
4
+ ## Key Components
5
+
6
+ ### Types
7
+
8
+ - **`ContentRefLayout`** — `'list' | 'grid'`; controls whether a group renders as full-width cards or a responsive column grid.
9
+ - **`ContentRefGridSize`** — `'lg' | 'default' | 'sm'`; card size variant forwarded to the entity-card dispatch. Kept in lockstep with `EntityCardSize` to avoid a config→component import cycle.
10
+ - **`ContentRefGroupConfig`** — shape of each entry: `label`, `order`, `layout`, `gridSize`.
11
+
12
+ ### Constants
13
+
14
+ - **`CONTENT_REF_GROUPS`** — registry of all known `content_ref` types (`investor_update`, `product_release`, `podcast`, `webinar`, `case_study`, `event`, `blog_post_existing`, `customer_interview`, `onboarding_guide`, `what_i_shipped`). Adding one entry here auto-registers the type in `RelatedContentSection` and makes it a hub suggestion candidate (if resolvable via `TYPE_TO_ENTITY` → RAG config).
15
+
16
+ ### Functions
17
+
18
+ | Function | Description |
19
+ |---|---|
20
+ | `getContentRefLabel(type)` | Returns the registered label or `null` for unknown types. |
21
+ | `getContentRefLabelOrTitleCase(type)` | Returns the registered label or a title-cased fallback (e.g. `"podcast_guest"` → `"Podcast Guest"`). |
22
+ | `orderContentRefTypes(present)` | Sorts a set of present types into canonical `order` sequence; unregistered types are appended in insertion order. |
23
+
24
+ ## Usage Example
25
+
26
+ ```typescript
27
+ import {
28
+ CONTENT_REF_GROUPS,
29
+ getContentRefLabelOrTitleCase,
30
+ orderContentRefTypes,
31
+ } from '@openframe-oss-lib/utils/content-ref-groups'
32
+
33
+ // Render groups in canonical order
34
+ const types = ['blog_post_existing', 'podcast', 'custom_type']
35
+ const sorted = orderContentRefTypes(types)
36
+ // → ['podcast', 'blog_post_existing', 'custom_type']
37
+
38
+ for (const type of sorted) {
39
+ const config = CONTENT_REF_GROUPS[type]
40
+ const label = getContentRefLabelOrTitleCase(type)
41
+ // config?.layout === 'list' | 'grid' | undefined for unregistered
42
+ console.log(label, config?.layout)
43
+ }
44
+
45
+ // Adding a new content type — one entry is all that's needed:
46
+ // CONTENT_REF_GROUPS['press_release'] = {
47
+ // label: 'Press Releases', order: 11, layout: 'list', gridSize: 'lg'
48
+ // }
49
+ ```
50
+
51
+ > **Extending:** Add new content types directly to `CONTENT_REF_GROUPS`. Prefer `gridSize: 'lg'` for types whose card component has a large variant. No other file needs updating for `RelatedContentSection` to pick up the new group.
@@ -1,45 +1,56 @@
1
- <!-- source-hash: 7776194e73c7d80a24debaa33cab9591 -->
2
- Unified date formatting utilities that provide consistent timestamp handling and display formatting across the OpenMSP platform. This module serves as the single source of truth for all date and time operations.
1
+ <!-- source-hash: c0ca2308274869b5506bb1e4854c772e -->
2
+ Unified date formatting utilities for the OpenMSP platform, providing consistent timestamp display across all components with built-in SSR/hydration safety (React #418) via UTC-pinned date operations.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - `formatRelativeTime()` - Primary relative time formatter (e.g., "2h ago", "3d ago")
7
- - `formatAbsoluteDate()` - Absolute date formatting with customizable options
8
- - `formatDateTime()` - Combined date and time formatting
9
- - `getDetailedTimeDifference()` - Verbose time difference descriptions
10
- - `isToday()` - Check if timestamp is within current day
11
- - `isWithinMinutes()` - Check if timestamp is within specified time window
12
- - `createUTCTimestamp()` - Generate UTC timestamp strings for database storage
6
+ | Function | Description |
7
+ |---|---|
8
+ | `formatTicketRelativeTime(iso)` | Ticket-specific relative label: "Just now" / "X min ago" / "X hour(s) ago" / "MM/DD/YYYY" |
9
+ | `formatTicketFullTimestamp(iso)` | Full tooltip timestamp in `MM/DD/YYYY, H:MM AM/PM` format |
10
+ | `formatRelativeTime(timestamp)` | General-purpose relative time: "Just now" → "Xm/h/d/w ago" → localized date (source of truth) |
11
+ | `formatAbsoluteDate(timestamp, options?)` | Localized absolute date via `Intl.DateTimeFormatOptions`, UTC-pinned |
12
+ | `formatDateTime(timestamp, options?)` | Localized date + time via `Intl.DateTimeFormatOptions`, UTC-pinned |
13
+ | `getDetailedTimeDifference(timestamp)` | Verbose elapsed time: "X seconds/minutes/hours/days/months/years ago" |
14
+ | `isToday(timestamp)` | Returns `true` if the timestamp falls on today's local date |
15
+ | `isWithinMinutes(timestamp, minutes)` | Returns `true` if the timestamp is within the last N minutes |
16
+ | `createUTCTimestamp()` | Returns current UTC time as an ISO string for database insertion |
13
17
 
14
18
  ## Usage Example
15
19
 
16
20
  ```typescript
17
- import {
18
- formatRelativeTime,
19
- formatAbsoluteDate,
21
+ import {
22
+ formatRelativeTime,
23
+ formatAbsoluteDate,
20
24
  formatDateTime,
21
- isWithinMinutes
22
- } from './date-utils';
23
-
24
- // Relative time formatting (most common use case)
25
- const postTime = formatRelativeTime('2024-01-01T12:00:00Z');
26
- // Returns: "2h ago", "3d ago", or "Jan 1" for older dates
27
-
28
- // Absolute date formatting
29
- const eventDate = formatAbsoluteDate('2024-06-15T10:30:00Z');
30
- // Returns: "Jun 15, 2024"
31
-
32
- // Date with time
33
- const fullDateTime = formatDateTime('2024-06-15T10:30:00Z');
34
- // Returns: "Jun 15, 2024 at 10:30 AM"
35
-
36
- // Check recent activity
37
- const isRecent = isWithinMinutes('2024-01-01T12:00:00Z', 30);
38
- // Returns: true if within last 30 minutes
39
-
40
- // Generate database timestamp
41
- const dbTimestamp = createUTCTimestamp();
42
- // Returns: "2024-01-01T12:00:00.000Z"
25
+ formatTicketRelativeTime,
26
+ formatTicketFullTimestamp,
27
+ getDetailedTimeDifference,
28
+ isToday,
29
+ isWithinMinutes,
30
+ createUTCTimestamp,
31
+ } from './date-utils'
32
+
33
+ // Relative time (general use)
34
+ formatRelativeTime('2024-01-01T12:00:00Z') // 'Jan 1, 2024'
35
+ formatRelativeTime(new Date()) // 'Just now'
36
+ formatRelativeTime('2024-06-15T10:30:00Z') // '3h ago'
37
+
38
+ // Ticket timestamps (UI list / tooltip)
39
+ formatTicketRelativeTime('2024-06-15T10:30:00Z') // '3 hours ago' or '06/15/2024'
40
+ formatTicketFullTimestamp('2024-06-15T10:30:00Z') // '06/15/2024, 10:30 AM'
41
+
42
+ // Absolute and datetime formatting
43
+ formatAbsoluteDate('2024-06-15T10:30:00Z') // 'Jun 15, 2024'
44
+ formatAbsoluteDate('2024-06-15T10:30:00Z', { month: 'long' }) // 'June 15, 2024'
45
+ formatDateTime('2024-06-15T10:30:00Z') // 'Jun 15, 2024, 10:30 AM'
46
+
47
+ // Verbose elapsed time
48
+ getDetailedTimeDifference('2024-06-14T08:00:00Z') // '2 days ago'
49
+
50
+ // Guards and utilities
51
+ isToday(new Date()) // true
52
+ isWithinMinutes('2024-06-15T10:29:00Z', 5) // true (if within 5 min)
53
+ createUTCTimestamp() // '2024-06-15T10:30:00.000Z'
43
54
  ```
44
55
 
45
- All functions handle invalid dates gracefully with console warnings and fallback values. The `formatRelativeTime()` function automatically switches to absolute dates for content older than 30 days to maintain readability.
56
+ > **SSR Safety:** All functions use UTC getters or `timeZone: 'UTC'` to ensure server-rendered output matches client hydration and avoids React hydration mismatch [#418](https://github.com/flamingo-stack/openframe-oss-lib/issues/418).
@@ -0,0 +1,38 @@
1
+ <!-- source-hash: 522b22b251e1243bc131056859525baa -->
2
+ Shared utility module providing path and slug operations for document source viewers (knowledge base, data room, etc.), serving as the single source of truth for path normalization across route handlers.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Signature | Purpose |
7
+ |--------|-----------|---------|
8
+ | `toDocSlug` | `(name: string) => string` | Converts a display name to a URL-safe slug |
9
+ | `pathToNodeId` | `(path: string) => string` | Converts a file path to a DOM-safe node ID |
10
+ | `normalizeDocPath` | `(segments: string[], folderIndexFile?: string) => string` | Normalizes URL path segments, stripping folder-index suffixes |
11
+
12
+ ## Usage Example
13
+
14
+ ```typescript
15
+ import { toDocSlug, pathToNodeId, normalizeDocPath } from './doc-path-utils'
16
+
17
+ // Convert document name to URL slug
18
+ toDocSlug('Investor Thesis') // → "investor-thesis"
19
+ toDocSlug(' Cap Table ') // → "cap-table"
20
+
21
+ // Convert file path to a DOM-safe tree node ID
22
+ pathToNodeId('legal/cap-table/safe.md') // → "legal-cap-table-safe.md"
23
+
24
+ // Normalize route segments, stripping README.md index suffixes
25
+ normalizeDocPath(['legal', 'cap-table']) // → "legal/cap-table"
26
+ normalizeDocPath(['legal', 'cap-table', 'README.md']) // → "legal/cap-table"
27
+ normalizeDocPath(['README.md']) // → ""
28
+
29
+ // Override the default folder-index filename
30
+ normalizeDocPath(['docs', 'index.md'], 'index.md') // → "docs"
31
+ ```
32
+
33
+ ## Notes
34
+
35
+ - `normalizeDocPath` lowercases **both** the input segments and the `folderIndexFile` constant before comparison, ensuring URLs like `readme.md` and `README.md` strip uniformly.
36
+ - `DEFAULT_FOLDER_INDEX_FILE` is imported from `doc-tree-nav` and used as the default `folderIndexFile` argument.
37
+
38
+ **Source:** [`doc-path-utils.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/doc-path-utils.ts)
@@ -0,0 +1,51 @@
1
+ <!-- source-hash: 8886b4928afb072c5436308281384b36 -->
2
+ Pure navigation helpers for traversing and resolving paths within a `DocNode` tree — shared between client-side hooks and server-side RSC rendering.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `DEFAULT_FOLDER_INDEX_FILE` | `const` | Canonical folder-index filename (`'README.md'`); single source of truth across navigation, SEO, and fetch logic |
9
+ | `stripFolderIndexFromPath` | function | Normalizes a file path by removing the trailing folder-index filename, returning the logical folder path |
10
+ | `findDocNodeByPath` | function | Recursively searches a `DocNode[]` tree for a node matching the given path |
11
+ | `getDocAncestorNodeIds` | function | Converts a slash-delimited node path into DOM-style IDs for each ancestor segment (used to pre-open accordion sidebar) |
12
+ | `resolveContentFetchPath` | function | Determines the actual storage path to fetch for a selected node, handling folder README resolution and no-content folders |
13
+ | `getInitialExpandedNodeIds` | function | Derives the set of accordion node IDs that should be expanded on initial load for a given path |
14
+ | `getDocSourceDefaultPath` | function | Finds the first root-level folder with a README when the tree root itself has no index file |
15
+
16
+ ## Usage Example
17
+
18
+ ```typescript
19
+ import {
20
+ stripFolderIndexFromPath,
21
+ findDocNodeByPath,
22
+ resolveContentFetchPath,
23
+ getInitialExpandedNodeIds,
24
+ getDocSourceDefaultPath,
25
+ } from './doc-tree-nav'
26
+
27
+ // Normalize a path for display or URL routing
28
+ stripFolderIndexFromPath('guides/README.md') // → 'guides'
29
+ stripFolderIndexFromPath('README.md') // → ''
30
+
31
+ // Find a node in the tree
32
+ const node = findDocNodeByPath('guides/quickstart', docStructure)
33
+
34
+ // Resolve what to actually fetch from storage
35
+ const fetchPath = resolveContentFetchPath('guides', docStructure)
36
+ // → 'guides/README.md' if the folder has hasReadme: true
37
+
38
+ // Expand ancestor accordions for a deep initial path
39
+ const openIds = getInitialExpandedNodeIds('guides/setup/install.md')
40
+ // → ['guides', 'guides-setup']
41
+
42
+ // Jump to the first meaningful default when root has no README
43
+ const defaultPath = getDocSourceDefaultPath(docStructure)
44
+ // → 'guides' (first folder with hasReadme: true)
45
+ ```
46
+
47
+ ## Notes
48
+
49
+ - All functions accept an optional `folderIndexFile` parameter (defaults to `DEFAULT_FOLDER_INDEX_FILE`) to support non-standard folder-index conventions.
50
+ - `DEFAULT_FOLDER_INDEX` is exported as a deprecated alias — migrate consumers to `DEFAULT_FOLDER_INDEX_FILE`.
51
+ - `resolveContentFetchPath` returns `null` for folders with no README, signaling the UI to suppress a fetch attempt.