@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,52 @@
1
+ <!-- source-hash: 2e5892bd515faa4d91f2c3e44db6baa3 -->
2
+ Shared utilities for converting external service URLs (Google Sheets, Figma) into embeddable iframe-compatible formats. Used by embed components in the lib and the admin document editor in the hub.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Description |
7
+ |---|---|
8
+ | `toGoogleSheetsEmbedUrl` | Converts a Google Sheets URL to the `htmlembed` format, preserving the `gid` (sheet tab) parameter |
9
+ | `toGoogleSheetsOriginalUrl` | Normalizes a Sheets URL back to the standard `/edit#gid=` format |
10
+ | `toFigmaEmbedUrl` | Converts any Figma URL (design, proto, slides/deck, board) to `embed.figma.com`, injecting `embed-host` and optional `client-id` params |
11
+ | `isFigmaSlidesUrl` | Returns `true` if the URL points to a Figma Slides or Deck resource |
12
+ | `toFigmaOriginalUrl` | Strips embed-specific domain and query string to recover the original Figma URL |
13
+
14
+ ## Usage Example
15
+
16
+ ```typescript
17
+ import {
18
+ toGoogleSheetsEmbedUrl,
19
+ toFigmaEmbedUrl,
20
+ isFigmaSlidesUrl,
21
+ } from './embed-url-converters'
22
+
23
+ // Google Sheets — converts to htmlembed with tab preserved
24
+ const sheetsEmbed = toGoogleSheetsEmbedUrl(
25
+ 'https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/edit#gid=0'
26
+ )
27
+ // → https://docs.google.com/spreadsheets/d/1Bxi.../htmlembed?widget=true&chrome=false&headers=false&gid=0
28
+
29
+ // Figma design
30
+ const figmaEmbed = toFigmaEmbedUrl(
31
+ 'https://www.figma.com/design/ABC123/My-Component'
32
+ )
33
+ // → https://embed.figma.com/design/ABC123/My-Component?embed-host=flamingo
34
+
35
+ // Figma slides — browse mode
36
+ const slidesEmbed = toFigmaEmbedUrl(
37
+ 'https://www.figma.com/slides/ABC123/Deck',
38
+ { slidesView: 'browse' }
39
+ )
40
+ // → https://embed.figma.com/slides/ABC123/Deck?embed-host=flamingo
41
+
42
+ // Type guard
43
+ isFigmaSlidesUrl('https://www.figma.com/deck/ABC123/Q3-Review') // → true
44
+ ```
45
+
46
+ ## Notes
47
+
48
+ - `toFigmaEmbedUrl` reads `NEXT_PUBLIC_FIGMA_CLIENT_ID` from the environment and injects it as a `client-id` query param when present.
49
+ - Already-embedded URLs (containing `embed.figma.com` or `/htmlembed`) are returned unchanged — all converters are idempotent.
50
+ - Figma `slides` and `deck` URL types both map to the `deck` embed view by default; pass `{ slidesView: 'browse' }` to switch to the `slides` browse view.
51
+
52
+ **Source:** [`embed-url-converters.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/embed-url-converters.ts)
@@ -0,0 +1,49 @@
1
+ <!-- source-hash: 5e010896207fab5f7b8fcce5af44e754 -->
2
+ Normalizes list-API response shapes into a consistent `unknown[]` array and extracts stable item identifiers across varying endpoint payload structures. Pure utility functions with no runtime dependencies — safe for server and client use.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Signature | Description |
7
+ |---|---|---|
8
+ | `extractItems` | `(data: unknown) => unknown[]` | Normalizes heterogeneous response shapes into a flat array |
9
+ | `extractItemId` | `(type: string, item: unknown) => string \| null` | Extracts a stable primary key from an item, handling `id` vs `external_id` variance |
10
+
11
+ ### `extractItems` — Supported Response Shapes
12
+
13
+ | Property | Source |
14
+ |---|---|
15
+ | `{ items }` | General list endpoints |
16
+ | `{ posts }` | Post/blog endpoints |
17
+ | `{ campaigns }` | Campaign endpoints |
18
+ | `{ completed, inProgress }` | Delivery endpoints (flattened) |
19
+ | `{ data }` | Generic data wrapper |
20
+ | Raw `Array` | Direct array responses |
21
+
22
+ ### `extractItemId` — Key Resolution Strategy
23
+
24
+ For `roadmap_item`, `delivery_item`, and `internal_task` types, `external_id` is checked first (ClickUp-backed IDs). Falls back to `obj.id` as string or coerced number for all other types.
25
+
26
+ ## Usage Example
27
+
28
+ ```typescript
29
+ import { extractItems, extractItemId } from './extract-items'
30
+
31
+ // Normalize any list endpoint response
32
+ const rawResponse = await fetchCampaigns()
33
+ const items = extractItems(rawResponse) // always returns Item[]
34
+
35
+ // Resolve a stable ID regardless of item type
36
+ for (const item of items) {
37
+ const id = extractItemId('roadmap_item', item)
38
+ if (id) console.log('Matched item:', id)
39
+ }
40
+
41
+ // Delivery endpoint — flattens completed + inProgress automatically
42
+ const deliveryItems = extractItems({ completed: [...], inProgress: [...] })
43
+ ```
44
+
45
+ ## Notes
46
+
47
+ - **No external dependencies** — no `@tanstack/react-query` import, intentionally hoisted to keep this out of the chat hooks chunk
48
+ - **Re-exported** from `lib/utils/entity-list-api.ts` in the hub repo as the single normalization implementation across both repositories
49
+ - Source: [`src/lib/utils/extract-items.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/lib/utils/extract-items.ts)
@@ -0,0 +1,48 @@
1
+ <!-- source-hash: 86e3de31861d76eca010d803a819a536 -->
2
+ Single source of truth for FAQ deep-link anchor formatting and parsing on the `/faqs` page, covering both category-level and item-level hash targets.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `faqSectionSlug` | `function` | Generates a `faq-<slug>` anchor id for a category section |
9
+ | `faqItemAnchor` | `function` | Generates a `faq-item-<id>` anchor id for an individual FAQ row |
10
+ | `FaqHashTarget` | `type` | Discriminated union representing a parsed hash result (`item` or `section`) |
11
+ | `parseFaqHash` | `function` | Parses a `/faqs#…` hash string into a typed `FaqHashTarget` or `null` |
12
+
13
+ ## Hash Format Contract
14
+
15
+ ```text
16
+ /faqs#faq-pricing → section anchor (jump-nav, scroll-spy)
17
+ /faqs#faq-item-42 → item anchor (chat citation, auto-expand + scroll)
18
+ /faqs#anything-else → null (unrecognised, callers early-out)
19
+ ```
20
+
21
+ ## Usage Example
22
+
23
+ ```typescript
24
+ import { faqSectionSlug, faqItemAnchor, parseFaqHash } from './faq-anchor'
25
+
26
+ // Rendering anchors
27
+ const sectionId = faqSectionSlug('Pricing & Plans') // → 'faq-pricing-plans'
28
+ const itemId = faqItemAnchor(42) // → 'faq-item-42'
29
+
30
+ // Parsing on mount (e.g. FaqSection auto-open logic)
31
+ const target = parseFaqHash(window.location.hash)
32
+
33
+ if (target?.kind === 'item') {
34
+ const row = items.find(i => String(i.id) === target.rawId)
35
+ row?.expand()
36
+ } else if (target?.kind === 'section') {
37
+ document.getElementById(target.slug)?.scrollIntoView()
38
+ }
39
+ // target === null → no hash or unrecognised prefix, no-op
40
+ ```
41
+
42
+ ## Notes
43
+
44
+ - **Collision safety:** The `faq-item-<digits>` namespace is reserved exclusively for item anchors; `parseFaqHash` uses a digits-only regex so word-suffixed slugs like `faq-item-whatever` are correctly classified as sections.
45
+ - **`rawId` is a string** — coercion to compare against `item.id` is intentionally deferred to the call site.
46
+ - Centralising format helpers and the parser in one file prevents format drift across the page component, chat RAG mapper, and any future consumers.
47
+
48
+ **Source:** [`faq-anchor.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/faq-anchor.ts)
@@ -1,31 +1,25 @@
1
- <!-- source-hash: dbfaad05e48db5fac78d6f613b9afd1e -->
2
- Utility functions for formatting data across dates, numbers, currencies, bytes, durations, and display strings. Serves as the single source of truth for all presentation-layer formatting in the Flamingo/OpenFrame stack.
1
+ <!-- source-hash: 801f56963096c8525cf1e145bb056b0f -->
2
+ Utility functions for consistent formatting of dates, times, numbers, file sizes, durations, and name initials across server and client environments, with UTC-pinned rendering to prevent React hydration mismatches.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Function | Description |
6
+ | Export | Description |
7
7
  |---|---|
8
- | `formatDate` | Locale-aware date formatting with `Intl.DateTimeFormatOptions` support |
9
- | `formatDateUTC` | UTC-anchored date formatter with fallback; handles ISO strings, epoch ms, and numeric strings |
10
- | `formatLegalDate` | Fixed `MM/DD/YYYY` format for legal documents |
11
- | `formatNumber` | Thousands-separator number formatting |
12
- | `formatPrice` | Currency-symbol formatting via `Intl.NumberFormat` |
13
- | `formatCurrency` | USD whole-dollar KPI formatter with `'N/A'` null guard |
14
- | `formatWholeDollars` | Configurable whole-dollar formatter (no cents) |
15
- | `formatPercent` | Fixed 2-decimal percent string with `'N/A'` null guard |
16
- | `formatBytes` | Human-readable byte sizes up to YB |
17
- | `formatBytesShort` | Compact byte formatter (`'B'` unit) for tight UI spaces |
18
- | `formatLargeNumber` | Abbreviated integers `1K`, `2M`, `3B` (floor, no decimals) |
19
- | `formatAbbreviatedNumber` | Abbreviated numbers with one decimal when needed `1.2K`, `2.5M` |
20
- | `getFirstLastInitials` | First + last word initials (e.g. `"John Michael Doe"` `"JD"`) |
21
- | `nameInitials` | First + second word initials, max 2 chars, with configurable fallback |
22
- | `formatDurationMMSS` | Duration as `MM:SS` or `HH:MM:SS` |
23
- | `formatDurationCompact` | Duration as `"Xh Xm"` or `"X min"` |
24
- | `formatDurationFromRange` | Duration between two timestamps as compact string |
25
- | `formatTimeWithTimezone` | Time string with optional timezone label |
26
- | `formatCompactMetric` | Metric value with compact notation for KPI cards (partial) |
27
- | `MetricFormat` | Type: `'number' \| 'currency' \| 'percentage' \| 'months'` |
28
- | `TrendPolarity` | Type: `'positive' \| 'negative' \| 'neutral'` |
8
+ | `formatDate` | Formats a `Date` or ISO string to a localized date string; UTC-pinned by default to prevent SSR/client hydration drift |
9
+ | `formatDateUTC` | UTC-anchored date formatter for RAG mappers and audit consumers; handles epoch numbers, ISO strings, and numeric string timestamps with a configurable fallback |
10
+ | `formatNumber` | Formats a number with locale-aware thousands separators |
11
+ | `formatPrice` | Formats a number as a currency string using `Intl.NumberFormat` (defaults to USD) |
12
+ | `formatBytes` | Converts bytes to human-readable size with configurable decimal places (`Bytes` → `YB`) |
13
+ | `formatBytesShort` | Compact byte formatter using single-letter `B` unit (2 decimal places, caps at `TB`) for space-constrained UIs |
14
+ | `formatFileSize` | File-size formatter using 1 decimal place and `B` unit, capping at `GB`; canonical formatter for upload UIs and publication cards |
15
+ | `formatLargeNumber` | Abbreviates large numbers to `K`, `M`, `B` with no decimal places |
16
+ | `formatAbbreviatedNumber` | Similar abbreviation but preserves one decimal place when the value is not a whole number |
17
+ | `getFirstLastInitials` | Extracts two-letter initials from the first and last word of a name (e.g., `"John Michael Doe"` `"JD"`) |
18
+ | `nameInitials` | Extracts up to two-letter initials from the first and second word; single source of truth for avatar fallbacks |
19
+ | `formatDurationMMSS` | Formats seconds as `MM:SS` or `HH:MM:SS` for media players |
20
+ | `formatDurationCompact` | Formats seconds as `Xh Xm` or `X min` for cards and headers |
21
+ | `formatDurationFromRange` | Calculates and formats duration between two timestamps as `1h 30m` or `45m` |
22
+ | `formatTimeWithTimezone` | Formats an event's wall-clock time in its own IANA timezone; falls back to UTC on invalid zone labels |
29
23
 
30
24
  ## Usage Example
31
25
 
@@ -33,55 +27,79 @@ Utility functions for formatting data across dates, numbers, currencies, bytes,
33
27
  import {
34
28
  formatDate,
35
29
  formatDateUTC,
30
+ formatPrice,
36
31
  formatBytes,
37
32
  formatBytesShort,
33
+ formatFileSize,
38
34
  formatLargeNumber,
39
35
  formatAbbreviatedNumber,
40
- formatPrice,
41
- formatCurrency,
42
- formatPercent,
36
+ nameInitials,
37
+ getFirstLastInitials,
43
38
  formatDurationMMSS,
44
39
  formatDurationCompact,
45
40
  formatDurationFromRange,
46
41
  formatTimeWithTimezone,
47
- nameInitials,
48
- getFirstLastInitials,
49
42
  } from './format'
50
43
 
51
- // Dates
44
+ // Dates — UTC-pinned to prevent SSR/client mismatch
52
45
  formatDate('2024-08-15')
53
46
  // → "August 15, 2024"
54
47
 
55
- formatDateUTC('2024-08-15')
56
- // → "Aug 15, 2024" (UTC-anchored, no timezone drift)
48
+ formatDateUTC('2024-08-15', { fallback: 'N/A' })
49
+ // → "Aug 15, 2024"
50
+
51
+ formatDateUTC(null)
52
+ // → "N/A"
53
+
54
+ // Numbers and currency
55
+ formatPrice(4999.99, 'EUR')
56
+ // → "€4,999.99"
57
57
 
58
- formatDateUTC(null, { fallback: 'Unknown' })
59
- // → "Unknown"
58
+ formatLargeNumber(1_450_000)
59
+ // → "1M"
60
60
 
61
- // Bytes
62
- formatBytes(1536) // → "1.5 KB"
63
- formatBytesShort(1536) // → "1.5 KB" (tight UI variant)
61
+ formatAbbreviatedNumber(1_200)
62
+ // → "1.2K"
64
63
 
65
- // Numbers
66
- formatLargeNumber(1_500_000) // → "1M" (floor, no decimals)
67
- formatAbbreviatedNumber(1_200) // → "1.2K" (one decimal when needed)
64
+ // File sizes
65
+ formatBytes(1536)
66
+ // → "1.50 KB"
68
67
 
69
- // Currency
70
- formatPrice(49.99) // → "$49.99"
71
- formatCurrency(1234567) // → "$1,234,567"
72
- formatPercent(12.5) // → "12.50%"
68
+ formatBytesShort(1536)
69
+ // → "1.5 KB" (compact UI variant)
73
70
 
74
- // Duration
75
- formatDurationMMSS(3725) // → "1:02:05"
76
- formatDurationCompact(3725) // → "1h 2m"
77
- formatDurationFromRange('2024-01-01T10:00:00Z', '2024-01-01T11:30:00Z')
71
+ formatFileSize(1500)
72
+ // → "1.5 KB" (1 decimal, caps at GB)
73
+
74
+ // Avatar initials
75
+ nameInitials('John Doe')
76
+ // → "JD"
77
+
78
+ getFirstLastInitials('John Michael Doe')
79
+ // → "JD" (first + last word)
80
+
81
+ nameInitials(null, 'U')
82
+ // → "U"
83
+
84
+ // Durations
85
+ formatDurationMMSS(3725)
86
+ // → "1:02:05"
87
+
88
+ formatDurationCompact(3725)
89
+ // → "1h 2m"
90
+
91
+ formatDurationFromRange('2024-08-15T14:00:00Z', '2024-08-15T15:30:00Z')
78
92
  // → "1h 30m"
79
93
 
80
- formatTimeWithTimezone(new Date(), 'EST')
81
- // → "10:30 AM EST"
94
+ // Event time in its own timezone (prevents React #418 hydration mismatch)
95
+ formatTimeWithTimezone('2024-08-15T20:00:00Z', 'America/New_York')
96
+ // → "4:00 PM"
97
+ ```
98
+
99
+ ## Notes
100
+
101
+ - **Hydration safety**: `formatDate` and `formatTimeWithTimezone` pin to UTC by default so Vercel (UTC runtime) and browser clients always render identical strings, avoiding React hydration error #418.
102
+ - **Avatar fallback hierarchy**: Prefer `nameInitials` over `getFirstLastInitials` for new components — it is the designated single source of truth and accepts a configurable `fallback` character.
103
+ - **File size variants**: Three formatters exist for historical reasons. Use `formatFileSize` for publication cards and upload UIs, `formatBytesShort` for space-constrained progress indicators, and `formatBytes` for general-purpose display.
82
104
 
83
- // Initials
84
- nameInitials('John Michael Doe') // → "JM"
85
- getFirstLastInitials('John Michael Doe') // → "JD"
86
- nameInitials(null) // → "E" (default fallback)
87
- ```
105
+ **Source:** [`format.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/format.ts)
@@ -0,0 +1,59 @@
1
+ <!-- source-hash: e5bd0dff73673a1dcedb4a72a3a18491 -->
2
+ Invisible bot-protection primitives for shared use between public forms (client) and the hub's per-route `verifyHuman` gate (server). Designed as a pure, React-free server entry so the hub can import it without triggering a client-reference boundary.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `HONEYPOT_FIELD` | `const string` | Hidden field name bots may fill; real users never interact with it |
9
+ | `ELAPSED_MS_FIELD` | `const string` | Field name carrying client-measured ms from form mount to submit |
10
+ | `DEFAULT_MIN_FILL_MS` | `const number` | Minimum acceptable fill time (`700` ms); faster submits are treated as bots |
11
+ | `HumanitySignals` | `type` | Wire object spread into the POST body by `useHumanitySignals().getSignals()` |
12
+ | `HumanityVerdict` | `type` | Union result — `{ ok: true }` or `{ ok: false; reason: 'honeypot' \| 'too_fast' }` |
13
+ | `extractHumanitySignals` | `function` | Tolerant reader that parses raw POST body; never throws, returns `null` for missing/garbage timing |
14
+ | `evaluateHumanitySignals` | `function` | Single source of truth for the block/allow decision — honeypot fill or sub-threshold timing → reject |
15
+ | `splitCsvEnv` | `function` | Utility to parse comma-separated env strings into trimmed, non-empty arrays |
16
+
17
+ ## Usage Example
18
+
19
+ ```typescript
20
+ import {
21
+ evaluateHumanitySignals,
22
+ DEFAULT_MIN_FILL_MS,
23
+ } from 'openframe-oss-lib/humanity-signals'
24
+
25
+ // Server-side route handler (hub's verifyHuman gate)
26
+ export async function POST(req: Request) {
27
+ const body = await req.json()
28
+
29
+ const verdict = evaluateHumanitySignals(body, {
30
+ minFillMs: DEFAULT_MIN_FILL_MS,
31
+ })
32
+
33
+ if (!verdict.ok) {
34
+ // 'honeypot' — hidden field was filled
35
+ // 'too_fast' — submission arrived before a human could type
36
+ return new Response(`Blocked: ${verdict.reason}`, { status: 400 })
37
+ }
38
+
39
+ // Proceed with legitimate submission...
40
+ }
41
+ ```
42
+
43
+ ```typescript
44
+ // Client-side form — spread signals into the POST body
45
+ import { HONEYPOT_FIELD, ELAPSED_MS_FIELD } from 'openframe-oss-lib/humanity-signals'
46
+
47
+ const payload = {
48
+ email: formData.email,
49
+ message: formData.message,
50
+ [HONEYPOT_FIELD]: '', // always empty for real users
51
+ [ELAPSED_MS_FIELD]: elapsedMs, // measured since form mount
52
+ }
53
+ ```
54
+
55
+ > **Note:** Missing timing values (`elapsedMs: null`) are always allowed — only a present sub-threshold value triggers a `too_fast` block, preventing false positives from clients that omit the field.
56
+
57
+ ## Source
58
+
59
+ [`humanity-signals.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/humanity-signals.ts)
@@ -1,49 +1,91 @@
1
- <!-- source-hash: a199bfb2e9675c73161c9b56f81904f7 -->
2
- Barrel export index for the `utils` package, re-exporting all utility functions, types, and constants from their canonical source files to provide a single stable import path for consumers across the frontend library and hub.
1
+ <!-- source-hash: d40f5b4bdeaf9f6f4c4960fabf86ab54 -->
2
+ Central barrel export for the `utils` package, aggregating and re-exporting all utility functions, constants, and types from across the library to provide a single stable import surface for consumers.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export Group | Source | Description |
7
- |---|---|---|
8
- | `cn`, `getAllPlatformBaseDomains`, `getBaseUrl`, `getPlatformProductionUrl` | `./cn` | CSS class merging and platform URL helpers |
9
- | `formatDate`, `formatNumber`, `formatPrice`, `formatBytes`, `formatCurrency`, `formatPercent`, etc. | `./format` | Number, currency, byte, date, and metric formatters |
10
- | `getPlatformAccentColor`, `getCurrentPlatform` | `./ods-color-utils` | Platform theming and color utilities |
11
- | `getDynamicIcon`, `ICON_REGISTRY`, `getIconComponent` | `chat/utils/icon-registry` | Dynamic icon registry |
12
- | `embedAuthedFetch`, `getEmbedProxyAuth`, `setEmbedProxyAuth` | `./embed-*` | Embed-surface authentication helpers |
13
- | `formatRelativeTime`, `formatAbsoluteDate`, `isToday`, `createUTCTimestamp` | `./date-utils` | Date/time formatting and comparison |
14
- | `escapeMarkdownInline`, `buildChatAttachmentViewUrl` | `chat/utils/chat-attachment-markdown` | Chat attachment markdown helpers |
15
- | `scrollElementIntoView` | `./scroll-into-view` | Smooth scroll with sticky-chrome offset |
16
- | `readLeadingDecisionFrame` | `./sse-decision-frame` | SSE frame reader for confirm-tool route |
17
- | `isCrossOriginUrl` | `chat/utils/is-cross-origin-url` | Cross-origin URL detection (server-safe) |
6
+ ### Formatting Utilities
7
+ - **`formatDate`, `formatNumber`, `formatPrice`, `formatBytes`** — Core number/currency/byte/date formatters (`./format`)
8
+ - **`formatLargeNumber`, `formatCurrency`, `formatPercent`, `formatDurationMMSS`**, and many more Extended formatter suite covering metrics, trends, durations, and text
9
+ - **`formatRelativeTime`, `formatAbsoluteDate`, `formatDateTime`** Date/time helpers from `./date-utils`
10
+
11
+ ### Color & Styling
12
+ - **`getPlatformAccentColor`, `getCurrentPlatform`** Platform-aware accent color resolution
13
+ - **`getReadableTextColor`, `hexToRgb`, `deriveHoverColor`, `deriveActiveColor`** Design-system color math utilities
14
+ - **`cn`** Class name utility (client-side only)
15
+
16
+ ### Platform & Domain
17
+ - **`getPlatformProductionUrl`, `getAllPlatformBaseDomains`** Platform domain SSOT re-exported from `../platform-domains`
18
+ - **`getPlatformLogo`** — Platform icon component resolver
19
+
20
+ ### Navigation & Scroll
21
+ - **`scrollElementIntoView`** — Smooth scroll with sticky-chrome offset compensation
22
+ - **`navigateSamePageHash`, `normalizeHashFragment`** — Same-page hash navigation with `pushState` and synthetic `hashchange`
23
+
24
+ ### Embed Auth
25
+ - **`embedAuthedFetch`, `setEmbedAuthAdapter`** — Generic embed surface authentication
26
+ - **`getEmbedProxyAuth`, `setEmbedProxyAuth`, `applyProxyAuth`** — Proxy auth storage (cookie SSOT)
27
+
28
+ ### Chat Utilities (Server-Safe Re-exports)
29
+ - **`escapeMarkdownInline`, `buildChatAttachmentViewUrl`** — Chat attachment markdown helpers
30
+ - **`getSourceIconName`, `getSourceLabel`** — Source icons/labels, safe for server-side hub callers
31
+ - **`readLeadingDecisionFrame`** — SSE leading-frame reader for `confirm-tool` route
32
+
33
+ ### Icon & Media
34
+ - **`getDynamicIcon`, `ICON_REGISTRY`, `getIconComponent`** — Dynamic icon registry
35
+ - **`PLAY_ICON_PATH`** — SVG path constant (server-safe)
36
+
37
+ ### SEO & Content
38
+ - **`SEO_TITLE_MAX_LENGTH`, `SEO_DESCRIPTION_MAX_LENGTH`** — Character budget constants
39
+ - **`buildListUrl`, `canonicalContentRefType`** — List-API URL builder
40
+ - **`faqSectionSlug`, `faqItemAnchor`, `parseFaqHash`** — FAQ anchor SSOTs
41
+
42
+ ### Miscellaneous
43
+ - **`delay`, `generateRandomString`, `truncateString`, `deepClone`** — Common utilities
44
+ - **`getProxiedImageUrl`, `shouldProxyImage`, `generateImageSizes`** — Image proxy builder
45
+ - **`DEV_SECTION_PARAM_KEYS`, `devSectionAnchorId`** — Dev-center URL param keys
46
+ - **`fetchPriorityProp`** — React 18/19 compatible `fetchpriority` prop builder
18
47
 
19
48
  ## Usage Example
20
49
 
21
50
  ```typescript
22
- // Import any utility directly from the utils barrel
51
+ // Import from the unified utils barrel
23
52
  import {
24
53
  cn,
54
+ formatDate,
25
55
  formatCurrency,
26
- formatRelativeTime,
27
- getDynamicIcon,
28
- getEmbedProxyAuth,
56
+ getPlatformAccentColor,
29
57
  scrollElementIntoView,
30
- getCurrentPlatform,
31
- } from '@flamingo-stack/openframe-frontend-core/utils'
58
+ embedAuthedFetch,
59
+ SEO_TITLE_MAX_LENGTH,
60
+ buildListUrl,
61
+ } from '@flamingo-stack/openframe-oss-lib/utils'
62
+
63
+ // Formatting
64
+ const price = formatCurrency(1999, 'USD') // "$19.99"
65
+ const date = formatDate(new Date(), 'short')
32
66
 
33
- // CSS class merging
34
- const className = cn('base-class', isActive && 'active')
67
+ // Color utilities
68
+ const accent = getPlatformAccentColor('flamingo')
35
69
 
36
- // Format a currency value
37
- const price = formatCurrency(4999, 'USD') // "$49.99"
70
+ // Scroll
71
+ scrollElementIntoView(document.getElementById('section'), { offset: 64 })
38
72
 
39
- // Relative time display
40
- const label = formatRelativeTime(new Date('2024-01-01')) // "6 months ago"
73
+ // Embed auth
74
+ const response = await embedAuthedFetch('/api/data')
41
75
 
42
- // Retrieve embed proxy auth for non-chat surfaces
43
- const auth = getEmbedProxyAuth()
76
+ // SEO guard
77
+ if (title.length > SEO_TITLE_MAX_LENGTH) {
78
+ console.warn('Title exceeds SEO budget')
79
+ }
44
80
 
45
- // Scroll an element into view respecting sticky chrome
46
- scrollElementIntoView(targetElement, { offsetPx: 64 })
81
+ // List URL builder
82
+ const url = buildListUrl('ticket', ['id-1', 'id-2'], '/content')
47
83
  ```
48
84
 
49
- > **Note:** Several exports are intentionally re-routed through this barrel to keep server-safe utilities (e.g. `CUSTOM_ITEM_ID`, `getSourceLabel`, `isCrossOriginUrl`) accessible from SSR/server code without crossing `"use client"` boundaries.
85
+ ## Notes
86
+
87
+ - **Server-safe vs. client-only**: `cn` and canvas-based utilities (e.g., `color-analysis`) are client-only. Most other exports are isomorphic/server-safe.
88
+ - **SSOT pattern**: Several exports are re-exports from canonical locations (e.g., `../platform-domains`, `./format`) to preserve backward compatibility without duplicating logic.
89
+ - **Deprecated aliases**: Chat-prefixed auth symbols (`chat-authed-fetch`, `chat-proxy-auth-storage`) are kept as `@deprecated` re-exports in their original locations; use the `embed*` equivalents from this barrel going forward.
90
+
91
+ **Source:** [`src/utils/index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/utils/index.ts)
@@ -0,0 +1,43 @@
1
+ <!-- source-hash: 4926a63272f9475827aa4c96aaa551da -->
2
+ Builds and returns list-API endpoint URLs for chat entity-card fetches, mapping canonical `contentRefType` strings to their type-specific query shapes. Returns `null` for types without a list endpoint, preventing spurious fetches.
3
+
4
+ ## Key Components
5
+
6
+ ### `canonicalContentRefType(contentRefType)`
7
+ Resolves legacy `ContentRef` type aliases to their canonical `documentType`. Exported so consumers share this alias map rather than redeclaring it (e.g., `blog_post_existing` → `blog_post`).
8
+
9
+ ### `buildListUrl(contentRefType, ids, base?)`
10
+ Main export. Constructs a type-specific list-API URL for the given IDs, or returns `null` if the type has no list endpoint. The optional `base` prefix supports reverse-proxy deployments (default: `''` → hub-relative `/api/...`; `'/content'` → `/content/api/...`).
11
+
12
+ ### `BUILDERS` (internal)
13
+ Per-type URL factory map keyed by canonical `documentType`. Covers 13 fetch-mode types with their exact parameter shapes (`task_ids=` for ClickUp-backed types, `pageSize=` for blog, `limit=&filter=all` for programs, etc.). Absent keys return `null` by design — non-list types (`github_*`, `slack_message`, financials) are intentionally excluded.
14
+
15
+ ### `ALIASES` (internal)
16
+ Maps legacy `ContentRef` rail-vocab types to canonical `documentType` values before BUILDERS lookup.
17
+
18
+ ## Usage Example
19
+
20
+ ```typescript
21
+ import { buildListUrl, canonicalContentRefType } from '@flamingo-stack/openframe-frontend-core/utils'
22
+
23
+ // Hub-relative (default)
24
+ buildListUrl('roadmap_item', ['abc', 'def'])
25
+ // → '/api/roadmap?task_ids=abc,def'
26
+
27
+ // With reverse-proxy prefix
28
+ buildListUrl('blog_post_existing', ['x', 'y'], '/content')
29
+ // → '/content/api/blog/posts?ids=x,y&pageSize=2' (alias resolved)
30
+
31
+ // Type with no list endpoint → null (fetch skipped)
32
+ buildListUrl('github_pr', ['z'])
33
+ // → null
34
+
35
+ // Wire into embedder endpoints once:
36
+ endpoints.buildListUrl = (type, ids) => buildListUrl(type, ids, '/content')
37
+
38
+ // Resolve alias for external comparison
39
+ canonicalContentRefType('blog_post_existing') // → 'blog_post'
40
+ canonicalContentRefType('webinar') // → 'webinar'
41
+ ```
42
+
43
+ > **Security note:** `marketing_campaign` is handled as a literal static branch (not a `BUILDERS` entry) so CodeQL can prove no user-controlled dynamic dispatch reaches `/api/admin`. Prototype-poisoning keys (`__proto__`, `constructor`) are blocked via an explicit `hasOwnProperty` guard before dispatching into `BUILDERS`.
@@ -0,0 +1,57 @@
1
+ <!-- source-hash: 7c9c0c76751534f9471aac4fddb8f3e7 -->
2
+ Parses markdown content line-by-line to extract heading sections for navigation, returning structured metadata including IDs, titles, and heading levels.
3
+
4
+ ## Key Components
5
+
6
+ ### Interfaces
7
+
8
+ - **`MarkdownSection`** — Output shape with `id` (URL-safe slug), `title` (cleaned text), and `level` (heading depth 1–6)
9
+ - **`ExtractSectionsOptions`** — Configuration for extraction behavior (see defaults below)
10
+
11
+ ### Function
12
+
13
+ - **`extractSections(markdown, options?)`** — Main export. Iterates over lines, skips fenced code blocks and YAML frontmatter, matches heading patterns up to `maxLevel`, and returns a `MarkdownSection[]`
14
+
15
+ ### Default Options
16
+
17
+ | Option | Default | Description |
18
+ |---|---|---|
19
+ | `maxLevel` | `2` | Include H1–H2 only |
20
+ | `removeEmojis` | `true` | Strip emoji from generated IDs |
21
+ | `handleDuplicateIds` | `true` | Append `-2`, `-3`, etc. for duplicate slugs |
22
+ | `stripFormattingMarkers` | `true` | Remove bold/italic/code markers from titles |
23
+ | `skipCodeAndYamlBlocks` | `true` | Ignore headings inside code fences or frontmatter |
24
+
25
+ ## Usage Example
26
+
27
+ ```typescript
28
+ import { extractSections } from './markdown-section-extractor'
29
+
30
+ const markdown = `
31
+ ---
32
+ title: Guide
33
+ ---
34
+
35
+ # Introduction
36
+
37
+ ## **Getting Started**
38
+
39
+ ## Getting Started
40
+
41
+ \`\`\`bash
42
+ # This heading is skipped
43
+ \`\`\`
44
+
45
+ ### Deep Section
46
+ `
47
+
48
+ const sections = extractSections(markdown, { maxLevel: 3 })
49
+ // [
50
+ // { id: 'introduction', title: 'Introduction', level: 1 },
51
+ // { id: 'getting-started', title: 'Getting Started', level: 2 },
52
+ // { id: 'getting-started-2', title: 'Getting Started', level: 2 },
53
+ // { id: 'deep-section', title: 'Deep Section', level: 3 },
54
+ // ]
55
+ ```
56
+
57
+ > **Note:** ID generation lowercases text, strips non-word characters, and replaces spaces with hyphens. Empty IDs fall back to `section-N`. Depends on [`stripInlineMarkdown`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/markdown-to-plain.ts) for title cleanup.