@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
@@ -1,46 +1,45 @@
1
- <!-- source-hash: 5b4e3ad25ef1abb4f28d722afea48eb0 -->
2
- Renders a responsive, lazily-loaded grid of short video bites grouped by aspect ratio (portrait, square, landscape), using viewport-gating to defer off-screen player mounts and prevent cumulative layout shift (CLS).
1
+ <!-- source-hash: 6a2710f318159a01ed58b31f201488ba -->
2
+ Transitional shim component that forwards its props to `<VideoBitesStrip>`, preserving the legacy four-prop signature for hub call sites during migration.
3
+
4
+ > ⚠️ **Deprecated** — this component is scheduled for deletion after the hub-side migration completes. Use [`<VideoBitesStrip>`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/src/components/video-bites/video-bites-strip.tsx) directly in all new code.
3
5
 
4
6
  ## Key Components
5
7
 
6
- | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `VideoBitesDisplay` | Component | Primary public component; filters, sorts, and groups bites by aspect ratio |
9
- | `VideoBiteCard` | Component | Individual bite card wrapping `<Video>` inside a styled `<Card>` |
10
- | `LazyBite` | Component (internal) | Defers child mount until within 500px of the viewport via `useNearViewport` |
11
- | `BiteGrid` | Component (internal) | Renders ratio-appropriate column grid with each bite wrapped in `LazyBite` |
8
+ ### `VideoBitesDisplayProps`
9
+
10
+ | Prop | Type | Default | Description |
11
+ |---|---|---|---|
12
+ | `bites` | `VideoTeaser[]` | | Array of video bites/teasers to render |
13
+ | `title` | `string` | `DEFAULT_VIDEO_BITES_TITLE` | Section heading text |
14
+ | `filterPublished` | `boolean` | `true` | When true, only published bites are shown |
15
+ | `showTitle` | `boolean` | `true` | Toggles visibility of the section heading |
12
16
 
13
- ## Key Behaviors
17
+ ### `VideoBitesDisplay`
14
18
 
15
- - **Filtering & sorting**: Optionally filters to published bites only, sorted newest-first by `created_at`
16
- - **Aspect ratio grouping**: When multiple ratios exist, renders `<RatioTabs>`; otherwise falls back to a flat `<BiteGrid>`
17
- - **CLS prevention**: `LazyBite` uses a CSS `aspect-ratio` placeholder matching the bite's ratio before the player mounts; `layout="fill"` on `<Video>` fills the card from first paint
18
- - **Player routing**: All bites go through the `<Video>` primitive (no raw `VideoPlayer` carve-out) since MuxPlayer loads its HLS engine lazily
19
+ Client component that passes all four props directly to `<VideoBitesStrip>` with no additional logic.
19
20
 
20
21
  ## Usage Example
21
22
 
22
23
  ```typescript
23
- import { VideoBitesDisplay } from './video-bites-display';
24
- import type { VideoTeaser } from '../../types/video-processing';
25
-
26
- const bites: VideoTeaser[] = [
27
- {
28
- url: 'https://stream.example.com/clip1.mp4',
29
- title: 'Product Demo',
30
- thumbnail_url: 'https://cdn.example.com/thumb1.jpg',
31
- published: true,
32
- created_at: '2024-06-01T12:00:00Z',
33
- },
34
- ];
35
-
36
- export function HighlightsSection() {
37
- return (
38
- <VideoBitesDisplay
39
- bites={bites}
40
- title="Product Highlights"
41
- filterPublished={true}
42
- showTitle={true}
43
- />
44
- );
45
- }
46
- ```
24
+ // ⚠️ Deprecated prefer VideoBitesStrip directly
25
+ import { VideoBitesDisplay } from '@openframe/lib/components/video-bites';
26
+
27
+ <VideoBitesDisplay
28
+ bites={videoTeasers}
29
+ title="Latest Clips"
30
+ filterPublished={true}
31
+ showTitle={true}
32
+ />
33
+
34
+ // ✅ Preferred replacement
35
+ import { VideoBitesStrip } from '@openframe/lib/components/video-bites';
36
+
37
+ <VideoBitesStrip
38
+ bites={videoTeasers}
39
+ title="Latest Clips"
40
+ filterPublished={true}
41
+ showTitle={true}
42
+ />
43
+ ```
44
+
45
+ Do not add features or new consumers to this component. Track migration progress via the grep gate described in the JSDoc before removal.
@@ -0,0 +1,44 @@
1
+ <!-- source-hash: e280ed2bbd7fa3083e59e5490366cc24 -->
2
+ Server-safe shared utilities for the video-bites surface, providing a title constant, profile adapter, and sort comparator that can be imported in server-side contexts without pulling in client-only dependencies.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `DEFAULT_VIDEO_BITES_TITLE` | `const` | Canonical section title string (`'Key Moments'`) |
9
+ | `VideoBiteStripProfile` | `interface` | Profile shape rendered in the strip's hover overlay |
10
+ | `toStripProfile()` | function | Adapter that maps repo-wide author/user rows to `VideoBiteStripProfile` |
11
+ | `sortBitesByCreatedAtDesc()` | function | Null-safe `created_at`-descending comparator for `VideoTeaser` arrays |
12
+
13
+ ## Usage Example
14
+
15
+ ```typescript
16
+ import {
17
+ DEFAULT_VIDEO_BITES_TITLE,
18
+ toStripProfile,
19
+ sortBitesByCreatedAtDesc,
20
+ } from '@flamingo-stack/openframe-frontend-core/components/features/video-bites-shared'
21
+
22
+ // Section title
23
+ console.log(DEFAULT_VIDEO_BITES_TITLE) // 'Key Moments'
24
+
25
+ // Map an author row → strip profile (returns null when full_name is absent)
26
+ const profile = toStripProfile(
27
+ { full_name: 'Ada Lovelace', avatar_url: '/avatars/ada.jpg', job_title: 'Engineer' },
28
+ 'Contributor', // fallback subtitle
29
+ )
30
+ // → { name: 'Ada Lovelace', avatarUrl: '/avatars/ada.jpg', subtitle: 'Engineer' }
31
+
32
+ const profile2 = toStripProfile(null) // → null
33
+
34
+ // Sort bites newest-first; missing created_at sorts last
35
+ const sorted = [...videoBites].sort(sortBitesByCreatedAtDesc)
36
+ ```
37
+
38
+ ## Notes
39
+
40
+ - **Server-safe by design** — no React imports, no `'use client'` directive. Mirrors the same isolation pattern as `mux-origins.ts`.
41
+ - `toStripProfile` returns `null` (never `{ name: '' }`) when `full_name` is absent, enabling safe `profile ?? fallback` chains at call sites.
42
+ - Client components (`<VideoBitesStrip>`, the features barrel) re-export from this file — definitions must never be duplicated.
43
+
44
+ **Source:** [`video-bites-shared.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video-bites-shared.ts)
@@ -0,0 +1,63 @@
1
+ <!-- source-hash: f6cb5509048904127db3df5bae07f87b -->
2
+ Brief description: `video-bites-strip.tsx` is the unified public video-bites surface component that renders a horizontally scrolling marquee strip of video preview cards with hover-activated muted autoplay, built on the shared `CardsStrip` engine.
3
+
4
+ ## Key Components
5
+
6
+ ### `VideoBitesStrip`
7
+ The main section-level component. Filters and sorts bites by publish status and creation date, warms up Mux/Supabase origins, and delegates rendering to `CardsStrip` via render-prop.
8
+
9
+ ### `VideoBiteCard`
10
+ The individual card component, exported for reuse in the admin bites editor. Manages:
11
+ - Hover activation (controlled by strip or self-managed standalone)
12
+ - Player mount gating via a two-way `IntersectionObserver` (~500px root margin) to bound live `MuxPlayer` instances to the visible strip width
13
+ - Rendition-capped preview URLs via `toMuxPreviewUrl` (720p cap for HLS)
14
+ - Overlay navigation (anchor or button depending on `href` vs `onNavigate`)
15
+
16
+ ### Key Types
17
+ - **`VideoBiteStripItem`** — extends `VideoTeaserWithRatio` with per-bite `profile`, `href`, and `onNavigate`
18
+ - **`VideoBitesStripProps`** — section-level config: bites array, title, scroll behavior, card dimensions, chevrons
19
+ - **`VideoBiteCardProps`** — card-level config: controlled vs. self-managed hover/mount, toolbar slot, inline title editing
20
+
21
+ ## Usage Example
22
+
23
+ ```typescript
24
+ import { VideoBitesStrip } from './video-bites-strip';
25
+
26
+ // Section-level strip (typical public page usage)
27
+ <VideoBitesStrip
28
+ bites={bites}
29
+ title="Key Moments"
30
+ profile={{ name: 'Acme Corp', avatarUrl: '/logo.png' }}
31
+ href="/entity/acme"
32
+ autoScroll
33
+ autoScrollSpeed={60}
34
+ cardHeightDesktop={416}
35
+ cardHeightMobile={300}
36
+ />
37
+
38
+ // Standalone card (admin editor — self-managed hover/mount)
39
+ import { VideoBiteCard } from './video-bites-strip';
40
+
41
+ <VideoBiteCard
42
+ bite={bite}
43
+ index={0}
44
+ profile={profile}
45
+ toolbar={<AdminToolbar />}
46
+ titleEditable
47
+ onTitleCommit={handleTitleSave}
48
+ />
49
+ ```
50
+
51
+ ## Architecture Notes
52
+
53
+ ```mermaid
54
+ graph TD
55
+ A[VideoBitesStrip] --> B[CardsStrip engine]
56
+ B --> C[VideoBiteCard]
57
+ C --> D[Video / MuxPlayer]
58
+ C --> E[IntersectionObserver gate]
59
+ A --> F[useVideoWarmup]
60
+ A --> G[sortBitesByCreatedAtDesc]
61
+ ```
62
+
63
+ **Source:** [`video-bites-strip.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video-bites-strip.tsx)
@@ -0,0 +1,38 @@
1
+ <!-- source-hash: 4badfa3be12a3b317bb3a4fb9a73fba2 -->
2
+ Defines the canonical center-overlay glyph components used for play and unmute affordances across all video surfaces in the project — solid white icons with a legibility drop-shadow and no background disc.
3
+
4
+ ## Key Components
5
+
6
+ ### Types & Constants
7
+
8
+ - **`VideoCenterBadgeSize`** — Union type `'sm' | 'md' | 'lg'` controlling icon pixel size (20 / 56 / 64px respectively)
9
+ - **`SIZES`** — Size map: `sm` for gallery thumbnails, `md` for strip cards/unmute chip, `lg` for hero facades
10
+ - **`GLYPH_SHADOW`** — Shared CSS `drop-shadow` filter applied to all glyphs for legibility over arbitrary video frames
11
+
12
+ ### Exports
13
+
14
+ - **`VideoPlayBadge`** — Decorative (`pointer-events-none`) play glyph rendered via `PlayFilledIcon`. Host surfaces own click activation; accent color applied externally via `group-hover:text-ods-accent`
15
+ - **`VideoUnmuteGlyph`** — Muted-volume glyph rendered via `VolumeOffFilledIcon`. Used by `<FilePlayer>`'s unmute button; shares the same visual identity as `VideoPlayBadge`
16
+
17
+ ## Usage Example
18
+
19
+ ```typescript
20
+ // Play badge on a video poster (e.g. VideoBiteCard)
21
+ <div className="group relative">
22
+ <img src={posterUrl} alt={title} />
23
+ <VideoPlayBadge
24
+ size="md"
25
+ className="absolute inset-0 m-auto group-hover:text-ods-accent"
26
+ />
27
+ </div>
28
+
29
+ // Unmute chip in FilePlayer
30
+ <button onClick={handleUnmute}>
31
+ <VideoUnmuteGlyph size="md" className="text-ods-text-primary" />
32
+ </button>
33
+
34
+ // Small glyph for MediaCarousel thumbnails
35
+ <VideoPlayBadge size="sm" className="group-hover:text-ods-accent" />
36
+ ```
37
+
38
+ **Consumers:** `<VideoBiteCard>`, `<YouTubeFacade>`, `<MediaCarousel>`, `<FilePlayer>`. MuxPlayer's native center button is aligned to this glyph language via `styles/app-globals.css`.
@@ -1,56 +1,63 @@
1
- <!-- source-hash: d2815a723188c45f4c5d2910a19ffd76 -->
2
- Aspect-ratio tab and grouping primitives for video grids, used by `VideoBitesDisplay` and admin editors to render portrait, square, and landscape clips in cohesive tabbed groups.
1
+ <!-- source-hash: 98c77db08c2b5bd65885d9fe120e315e -->
2
+ Aspect-ratio tab and grouping primitives for video surfaces, shared between admin editors and the public `VideoBitesStrip` component.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### Types & Interfaces
7
- - **`VizardAspectRatio`** — Union type for Vizard clip ratios: `'9:16' | '16:9' | '1:1'`
8
- - **`VideoTeaserWithRatio`** — Extends `VideoTeaser` with `aspect_ratio`, `confidence`, `viral_reason`, and timing metadata
9
- - **`RatioCategory`** — Grid grouping label: `'portrait' | 'square' | 'landscape'`
6
+ ### Types
7
+
8
+ - **`VizardAspectRatio`** — Union type for Vizard clip extraction ratios: `'9:16' | '16:9' | '1:1'`
9
+ - **`RatioCategory`** — Grid/tab grouping category: `'portrait' | 'square' | 'landscape'`
10
+ - **`VideoTeaserWithRatio`** — Extends `VideoTeaser` with an optional `aspect_ratio` field; canonical type for display/aggregation code
10
11
 
11
12
  ### Constants
12
- - **`RATIO_GRID_CLASS`** — Tailwind grid classes for admin editor views (narrower columns)
13
- - **`RATIO_DISPLAY_GRID_CLASS`** — Tailwind grid classes for public display pages (wider columns)
13
+
14
+ - **`RATIO_GRID_CLASS`** — Tailwind grid classes per `RatioCategory` (admin editors)
15
+ - **`RATIO_TO_CSS_ASPECT`** — CSS `aspect-ratio` values per category, consumed by strip cards and placeholders
14
16
 
15
17
  ### Components
16
- - **`RatioTabs`** — Tab wrapper that only renders tabs with content; auto-collapses to flat render when only one ratio group is populated; uses `forceMount` to prevent scroll-jump on tab switch
18
+
19
+ - **`RatioTabs`** — Tab wrapper rendering only populated ratio groups; uses `forceMount` + CSS hiding to prevent scroll-jump on tab switch. Collapses to a flat render when only one ratio has content.
17
20
 
18
21
  ### Utilities
19
- - **`detectAspectRatio(ratioString?, width?, height?)`** — Resolves a `VizardAspectRatio` from a string, falling back to dimension inference, defaulting to `'9:16'`
20
- - **`ratioToCategory(ratio)`** — Maps `VizardAspectRatio` `RatioCategory`
21
- - **`groupByAspectRatio(items, getAspectRatio)`** — Buckets any item array into `{ portrait, square, landscape, hasMultiple }`
22
+
23
+ - **`detectAspectRatio(ratioString?, width?, height?)`** — Resolves a `VizardAspectRatio` from a Vizard ratio string, falling back to dimension inference. Defaults to `'9:16'`.
24
+ - **`ratioToCategory(ratio)`** — Maps a `VizardAspectRatio` to its `RatioCategory`
25
+ - **`groupByAspectRatio(items, getAspectRatio)`** — Buckets an array into portrait/square/landscape groups; includes `hasMultiple` flag for downstream tab-vs-grid decisions
22
26
 
23
27
  ## Usage Example
24
28
 
25
29
  ```typescript
26
30
  import {
27
- RatioTabs,
28
- groupByAspectRatio,
29
31
  detectAspectRatio,
30
- ratioToCategory,
31
- RATIO_DISPLAY_GRID_CLASS,
32
+ groupByAspectRatio,
33
+ RatioTabs,
34
+ RATIO_TO_CSS_ASPECT,
32
35
  } from './video-ratio-tabs';
33
36
 
34
- // Group clips by detected aspect ratio
37
+ // Detect ratio from Vizard metadata, with dimension fallback
38
+ const ratio = detectAspectRatio(bite.aspect_ratio, bite.width, bite.height);
39
+ // → '9:16'
40
+
41
+ // Group bites into buckets
35
42
  const { portrait, square, landscape, hasMultiple } = groupByAspectRatio(
36
- clips,
37
- (clip) => detectAspectRatio(clip.aspect_ratio, clip.width, clip.height),
43
+ bites,
44
+ (b) => detectAspectRatio(b.aspect_ratio),
38
45
  );
39
46
 
40
- // Render with tabbed UI
47
+ // Render tabbed grid (admin editors only)
41
48
  <RatioTabs
42
49
  groups={{
43
- portrait: {
44
- count: portrait.length,
45
- render: () => (
46
- <div className={RATIO_DISPLAY_GRID_CLASS.portrait}>
47
- {portrait.map((c) => <ClipCard key={c.id} clip={c} />)}
48
- </div>
49
- ),
50
- },
51
- square: { count: square.length, render: () => <SquareGrid items={square} /> },
52
- landscape: { count: landscape.length, render: () => <LandscapeGrid items={landscape} /> },
50
+ portrait: { count: portrait.length, render: () => <PortraitGrid items={portrait} /> },
51
+ square: { count: square.length, render: () => <SquareGrid items={square} /> },
52
+ landscape:{ count: landscape.length, render: () => <LandscapeGrid items={landscape} /> },
53
53
  }}
54
54
  defaultTab="portrait"
55
55
  />
56
- ```
56
+
57
+ // Apply CSS aspect-ratio in strip cards
58
+ const aspectStyle = { aspectRatio: RATIO_TO_CSS_ASPECT['portrait'] }; // '9 / 16'
59
+ ```
60
+
61
+ > **Scope note:** `RatioTabs` and `RATIO_GRID_CLASS` are admin-only (`VideoBitesEditor`, `VideoLibraryGrid`). The public `VideoBitesStrip` consumes only `detectAspectRatio` and `RATIO_TO_CSS_ASPECT`.
62
+
63
+ **Source:** [`lib/components/video-ratio-tabs.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/lib/components/video-ratio-tabs.tsx)
@@ -1,40 +1,41 @@
1
- <!-- source-hash: 1995e98822c487bba791ce8689ae2447 -->
2
- Unified toggle component for selecting between a YouTube URL input and a direct video file upload, managing upload state, progress, and preview rendering internally.
1
+ <!-- source-hash: dbedaa2fa25b04c2c550b2eefc8f1a0d -->
2
+ Reusable React component that lets users switch between a YouTube URL input and a direct video upload, preserving both values across source-type toggles.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### Exports
7
- - **`VideoSourceSelector`** Main React component (default + named export)
8
- - **`VideoSourceType`** Union type: `'youtube' | 'uploaded'`
9
- - **`VideoSourceSelectorProps`** Full prop interface for the component
6
+ ### `VideoSourceSelector` (main export)
7
+ Controlled component rendering a YouTube/Upload toggle with:
8
+ - **YouTube mode** URL text input with configurable placeholder and helper text
9
+ - **Upload mode** file picker trigger, progress bar (custom or built-in fallback), error display, and video preview
10
+ - Supports optional AI-generated badge, custom preview/progress components, and disabled state
10
11
 
11
- ### Internal State
12
- | State | Purpose |
13
- |---|---|
14
- | `isUploading` | Tracks active upload operation |
15
- | `uploadProgress` | Numeric progress (0–100) |
16
- | `uploadMessage` | Status message during upload |
17
- | `uploadError` | Error string if upload fails |
12
+ ### `DefaultVideoPreview` (internal)
13
+ Fallback preview rendered when no `VideoPreviewComponent` prop is supplied. Wraps the shared `<Video>` component (Mux HLS / MP4) inside a `16:9` aspect-ratio container with a floating delete button.
18
14
 
19
- ### Key Handlers
20
- - **`handleUploadClick`** Programmatically triggers a hidden `<input type="file">`, invokes `onUploadVideo`, and manages progress callbacks
21
- - **`handleDeleteVideo`** — Clears the uploaded video URL via `onMainVideoUrlChange('')`
15
+ ### Types
16
+ | Export | Description |
17
+ |---|---|
18
+ | `VideoSourceType` | `'youtube' \| 'uploaded'` |
19
+ | `VideoSourceSelectorProps` | Full prop interface with JSDoc on every field |
22
20
 
23
21
  ## Usage Example
24
22
 
25
23
  ```typescript
26
24
  import { VideoSourceSelector, VideoSourceType } from './video-source-selector';
25
+ import { useState } from 'react';
27
26
 
28
- function MyForm() {
27
+ function CourseEditor() {
29
28
  const [sourceType, setSourceType] = useState<VideoSourceType>('youtube');
30
29
  const [youtubeUrl, setYoutubeUrl] = useState('');
31
- const [videoUrl, setVideoUrl] = useState('');
30
+ const [uploadedUrl, setUploadedUrl] = useState('');
32
31
 
33
32
  const handleUpload = async (file: File, onProgress?: (p: number) => void) => {
34
33
  const formData = new FormData();
35
34
  formData.append('file', file);
36
- // ... upload logic with progress callbacks
37
- return 'https://cdn.example.com/video.mp4';
35
+ // Call your upload endpoint; report progress via onProgress
36
+ const res = await fetch('/api/upload-video', { method: 'POST', body: formData });
37
+ const { url } = await res.json();
38
+ return url; // returned URL stored in uploadedUrl
38
39
  };
39
40
 
40
41
  return (
@@ -43,8 +44,8 @@ function MyForm() {
43
44
  onVideoSourceTypeChange={setSourceType}
44
45
  youtubeUrl={youtubeUrl}
45
46
  onYoutubeUrlChange={setYoutubeUrl}
46
- mainVideoUrl={videoUrl}
47
- onMainVideoUrlChange={setVideoUrl}
47
+ mainVideoUrl={uploadedUrl}
48
+ onMainVideoUrlChange={setUploadedUrl}
48
49
  onUploadVideo={handleUpload}
49
50
  isAIGenerated={false}
50
51
  title="Course Video"
@@ -53,8 +54,4 @@ function MyForm() {
53
54
  }
54
55
  ```
55
56
 
56
- ## Notes
57
-
58
- - Switching between `youtube` and `uploaded` tabs **preserves both values** — no data is cleared on toggle
59
- - Accepts optional `VideoPreviewComponent` and `UploadProgressComponent` for custom rendering; falls back to built-in implementations if omitted
60
- - All text labels and placeholders are customizable via props for reuse across different contexts
57
+ **Source:** [`video-source-selector.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video-source-selector.tsx)
@@ -1,44 +1,52 @@
1
- <!-- source-hash: 9e88b910bdaffc13eb668740a6d415f4 -->
2
- Renders video content from YouTube URLs, bare video IDs, or file sources (HLS/MP4) with smart auto-detection and three layout modes. Consolidates the previous `<VideoPlayer>` and `<YouTubeEmbed>` primitives into a single component.
1
+ <!-- source-hash: 9c0955b67c6b1b22bab746a927f92650 -->
2
+ Renders video content from YouTube URLs, file URLs (HLS/MP4), or bare YouTube IDs with automatic source detection, three layout modes, and optional hover-play/muted-autoplay behavior.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`Video`** — Primary export. Discriminates on `kind` prop (`'youtube'` | `'file'` | `'auto'`) to route to the correct player branch, then wraps in the chosen layout
7
- - **`extractYouTubeId`** — Exported utility that parses any YouTube URL shape or bare 11-char video ID into a raw video ID. Uses strict URL parsing + anchored regex (ReDoS-safe)
8
- - **`VideoProps`** — Discriminated union type (`VideoFileProps | VideoYouTubeProps | VideoAutoProps`)
9
- - **`VideoLayout`** — `'centered'` | `'fill'` | `'native'`
10
- - **`resolveKind`** (internal) — URL classifier that maps a URL to `'youtube'` or `'file'`
11
- - **`YouTubeFacade`** (internal) — Lite-YouTube poster + click-to-iframe embed
12
- - **`FilePlayer`** (internal) — `<MuxPlayer>` wrapper handling HLS, MP4, captions, and Mux Data
6
+ ### Exports
7
+
8
+ - **`extractYouTubeId(url: string): string | null`** — Parses any YouTube URL shape or bare 11-char ID into a video ID. Uses strict `URL` parsing with anchored regexes to prevent ReDoS attacks.
9
+ - **`VideoLayout`** — Union type: `'centered' | 'fill' | 'native'`
10
+ - **`<Video>`** (default export) — Single unified video component routing to lite-YouTube facade or `<MuxPlayer>` based on `kind` prop.
11
+
12
+ ### Internal Utilities
13
+
14
+ - **`videoPerfDebugEnabled()`** — Gates hover-to-play latency instrumentation; always on in dev, opt-in via `localStorage.VIDEO_PERF_DEBUG` in production.
15
+ - **`isYouTubeUrl(url)`** — Hostname-based YouTube detection against a strict allowlist.
16
+ - **`extractYouTubeId(url)`** — Exported ID extractor usable by admin tooling without rendering the component.
17
+
18
+ ### Key Behaviors
19
+
20
+ | Feature | Detail |
21
+ |---|---|
22
+ | `kind="auto"` | Bare 11-char ID → YouTube; YouTube hostname → YouTube; anything else → file |
23
+ | `layout="centered"` | `max-w-3xl` centered wrapper — detail pages |
24
+ | `layout="fill"` | `absolute inset-0` — carousel slides |
25
+ | `layout="native"` | Intrinsic aspect ratio — grid/card embeds |
26
+ | Cast suppression | Stubs `chrome.cast` to block MuxPlayer's CSP-violating Cast SDK injection |
27
+ | Autoplay policy | Module-level `pointerdown`/`keydown` tracker gates muted vs. sound-first hover play |
13
28
 
14
29
  ## Usage Example
15
30
 
16
31
  ```typescript
17
- // Auto-detect source from URL (recommended)
18
- <Video url="https://www.youtube.com/watch?v=dQw4w9WgXcQ" layout="centered" />
32
+ import { Video, extractYouTubeId } from '@/components/video';
19
33
 
20
- // Bare YouTube ID
21
- <Video url="dQw4w9WgXcQ" layout="native" priority />
34
+ // Auto-detect source from URL
35
+ <Video url="https://www.youtube.com/watch?v=dQw4w9WgXcQ" layout="centered" />
22
36
 
23
- // HLS or MP4 file with captions
37
+ // Explicit file source with captions
24
38
  <Video
25
39
  kind="file"
26
- url="https://cdn.example.com/video.m3u8"
40
+ url="https://cdn.example.com/clip.m3u8"
27
41
  captionsUrl="https://cdn.example.com/captions.vtt"
28
42
  layout="fill"
43
+ autoPlay
29
44
  muted
45
+ loop
30
46
  />
31
47
 
32
- // Marketing embed minimal YouTube controls
33
- <Video
34
- kind="youtube"
35
- url="https://youtu.be/dQw4w9WgXcQ"
36
- layout="centered"
37
- minimalControls
38
- title="Product demo"
39
- />
48
+ // Extract ID for thumbnail logic without rendering
49
+ const id = extractYouTubeId('https://youtu.be/dQw4w9WgXcQ'); // "dQw4w9WgXcQ"
50
+ ```
40
51
 
41
- // Validate a URL without rendering
42
- import { extractYouTubeId } from './video';
43
- const id = extractYouTubeId('https://youtu.be/dQw4w9WgXcQ'); // → "dQw4w9WgXcQ"
44
- ```
52
+ **Source:** [`video.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/video.tsx)
@@ -1,60 +1,66 @@
1
- <!-- source-hash: 6dd94b5db8fe43eb78a9a8032c387c0e -->
2
- A platform-agnostic waitlist registration form component for OpenFrame/Flamingo, handling email capture, optional phone input with country detection, SMS consent, and submission state management.
1
+ <!-- source-hash: 8fbc6cc433de62257e74785b11ef3d03 -->
2
+ Platform-agnostic waitlist registration form component with email/phone capture, bot protection, geo-detection, and SMS consent handling.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### `WaitlistFormProps`
7
- Configuration interface with the following notable props:
8
7
 
9
- | Prop | Type | Description |
10
- |------|------|-------------|
11
- | `onRegister` | `(email, phone?) => Promise<void>` | Required submission handler; must throw on failure |
12
- | `geoApiUrl` | `string \| null` | Geo-detection endpoint for auto-selecting country code (default: `"/api/geo"`) |
13
- | `isSubmitting` | `boolean` | Controls loading state on the submit button |
14
- | `isSuccess` | `boolean` | Switches button label to `successLabel` |
15
- | `defaultEmail` / `defaultPhone` | `string` | Pre-filled values from auth context or user profile |
16
- | `termsOfServiceUrl` / `privacyPolicyUrl` | `string` | Links rendered in SMS consent copy |
8
+ | Prop | Type | Default | Description |
9
+ |---|---|---|---|
10
+ | `onRegister` | `(email, phone?, signals?) => Promise<void>` | — | **Required.** Registration handler; must throw on failure |
11
+ | `isSubmitting` | `boolean` | `false` | Controls loading state |
12
+ | `isSuccess` | `boolean` | `false` | Toggles success label on submit button |
13
+ | `defaultEmail` | `string` | `''` | Pre-filled email |
14
+ | `defaultPhone` | `string` | `''` | Pre-filled phone |
15
+ | `geoApiUrl` | `string \| null` | `'/api/geo'` | Geo-detection endpoint; set to `null` to disable |
16
+ | `submitLabel` | `string` | `'Get Beta Access'` | Submit button label |
17
+ | `successLabel` | `string` | `"You're in!"` | Post-success button label |
18
+ | `termsOfServiceUrl` | `string` | — | ToS link in consent text |
19
+ | `privacyPolicyUrl` | `string` | — | Privacy Policy link in consent text |
17
20
 
18
21
  ### `WaitlistForm`
19
- The exported form component. Key internal behaviors:
20
22
 
21
- - **Hydration-safe skeleton** renders animated placeholder blocks until client-side mount
22
- - **Geo-detection** — fetches `geoApiUrl` on mount to pre-select the user's country code via `libphonenumber-js`
23
- - **Generic email warning** — surfaces a warning (not a block) when a personal domain is detected
24
- - **SMS consent gate** — requires checkbox agreement before submitting a phone number
25
- - **E.164 formatting** — converts raw phone input via `formatPhoneE164` before calling `onRegister`
26
- - **Enter key support** — `handleKeyDown` triggers submission from any field
23
+ The exported form component. Internally manages:
24
+
25
+ - **Email validation** — warns on generic domains via `hasGenericEmailDomain`
26
+ - **Phone handling** — E.164 formatting via `formatPhoneE164`; country auto-detected from geo API
27
+ - **Bot protection** — invisible `HoneypotField` + timing signals via `useHumanitySignals`
28
+ - **SMS consent gate** — blocks submission if phone is provided without consent
29
+ - **Hydration safety** — renders an animated skeleton until client-side hydration completes
27
30
 
28
31
  ## Usage Example
29
32
 
30
33
  ```typescript
31
34
  import { WaitlistForm } from './waitlist-form'
32
35
 
33
- function WaitlistPage() {
36
+ async function register(email: string, phone?: string, signals?: HumanitySignals) {
37
+ const res = await fetch('/api/waitlist', {
38
+ method: 'POST',
39
+ body: JSON.stringify({ email, phone, ...signals }),
40
+ })
41
+ if (!res.ok) throw new Error('Registration failed')
42
+ }
43
+
44
+ export default function Page() {
34
45
  const [isSubmitting, setIsSubmitting] = useState(false)
35
46
  const [isSuccess, setIsSuccess] = useState(false)
36
47
 
37
- const handleRegister = async (email: string, phone?: string) => {
38
- setIsSubmitting(true)
39
- try {
40
- await api.joinWaitlist({ email, phone })
41
- setIsSuccess(true)
42
- } finally {
43
- setIsSubmitting(false)
44
- }
45
- }
46
-
47
48
  return (
48
49
  <WaitlistForm
49
- onRegister={handleRegister}
50
+ onRegister={async (email, phone, signals) => {
51
+ setIsSubmitting(true)
52
+ await register(email, phone, signals)
53
+ setIsSuccess(true)
54
+ setIsSubmitting(false)
55
+ }}
50
56
  isSubmitting={isSubmitting}
51
57
  isSuccess={isSuccess}
52
58
  geoApiUrl="/api/geo"
53
- termsOfServiceUrl="/legal/terms"
54
- privacyPolicyUrl="/legal/privacy"
59
+ termsOfServiceUrl="https://flamingo.run/terms"
60
+ privacyPolicyUrl="https://flamingo.run/privacy"
55
61
  />
56
62
  )
57
63
  }
58
64
  ```
59
65
 
60
- > **Note:** `onRegister` is responsible for its own error toasts. The form handles only email-empty and consent-missing validation client-side.
66
+ **Source:** [`waitlist-form.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/waitlist-form.tsx)