@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,47 +1,58 @@
1
- <!-- source-hash: 756619c21c965403499e06eb7fef94fa -->
2
- Pure presentation component for rendering investor update cards in two density modes (`default` and `sm`), with no internal click logic — callers supply the resolved `href`.
1
+ <!-- source-hash: a793a81d6d93872c90072ec1575fa676 -->
2
+ Pure presentation component for displaying investor update entities across three density variants (`default`, `sm`, `portrait`), with no internal click logic — callers provide the resolved `href`.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `InvestorUpdateCard`
7
- Main card component. Renders differently based on the `size` prop:
8
- - **`default`** delegates to `AdminContentCard` with image, title, summary, badges, and period meta
9
- - **`sm`** compact horizontal layout using shared `COMPACT_CARD_*` utility classes
6
+ | Export | Description |
7
+ |---|---|
8
+ | `InvestorUpdateCard` | Main card component rendering one of three layouts based on the `size` prop |
9
+ | `InvestorUpdateCardSkeleton` | Loading placeholder matching the card's layout for `default`/`portrait` or `sm` density |
10
+ | `InvestorUpdateCardProps` | Props interface defining the card's API |
10
11
 
11
- ### `InvestorUpdateCardSkeleton`
12
- Loading placeholder matching the visual footprint of each density mode. Uses `animate-pulse` for the default size.
12
+ **Size variants:**
13
13
 
14
- ### `InvestorUpdateCardProps`
15
-
16
- | Prop | Type | Description |
17
- |------|------|-------------|
18
- | `update` | `InvestorUpdate` | Entity data |
19
- | `href` | `string` | Resolved detail URL (caller-supplied) |
20
- | `target` | `'_blank'` | Optional new-tab behavior |
21
- | `placeholderUrl` | `string \| null` | OG fallback when `featured_image` is absent |
22
- | `size` | `'default' \| 'sm'` | Card density (defaults to `'default'`) |
14
+ - **`default`** — Full card using `AdminContentCard` with cover image, title, summary, badge, and period meta
15
+ - **`sm`** — Compact horizontal layout (`EntityPortraitCard`-style) with image slot, title, update number badge, period subtitle, and truncated summary
16
+ - **`portrait`** Rail/strip layout delegated to `EntityPortraitCard`, with optional content-type chip controlled by `showTypeBadge`
23
17
 
24
18
  ## Usage Example
25
19
 
26
20
  ```typescript
27
- // Default density full card
21
+ import { InvestorUpdateCard, InvestorUpdateCardSkeleton } from './investor-update-card'
22
+
23
+ // Default density
28
24
  <InvestorUpdateCard
29
25
  update={investorUpdate}
30
- href={`/investor-updates/${investorUpdate.slug}`}
31
- placeholderUrl="/images/update-placeholder.png"
26
+ href="/updates/q3-2024"
27
+ size="default"
32
28
  />
33
29
 
34
- // Compact horizontal e.g. inside a chat dispatch or sidebar list
30
+ // Compact horizontal (e.g., list/feed rows)
35
31
  <InvestorUpdateCard
36
32
  update={investorUpdate}
37
- href={`/investor-updates/${investorUpdate.slug}`}
33
+ href="/updates/q3-2024"
34
+ size="sm"
38
35
  target="_blank"
39
36
  rel="noopener noreferrer"
40
- size="sm"
41
37
  />
42
38
 
43
- // Skeleton while data loads
39
+ // Portrait rail (mixed-type content strips)
40
+ <InvestorUpdateCard
41
+ update={investorUpdate}
42
+ href="/updates/q3-2024"
43
+ size="portrait"
44
+ showTypeBadge={true}
45
+ />
46
+
47
+ // Loading state
44
48
  <InvestorUpdateCardSkeleton size="sm" />
45
49
  ```
46
50
 
47
- > **Design note:** The component intentionally owns zero click/navigation logic. Tab behavior (`target="_blank"`) is resolved externally (e.g. via `computeIsNewTab`) and passed in, keeping the component fully declarative.
51
+ **Key behaviours:**
52
+ - Falls back to a generated placeholder image via `useEntityCardPlaceholder` when `featured_image` is absent; aspect ratio is `square` for `sm`, `wide` otherwise
53
+ - Tab target and `rel` are resolved by `useEntityCardLink`, supporting cross-platform dispatch via `targetPlatform`
54
+ - Image `onError` hides broken images gracefully in the `sm` variant
55
+
56
+ ## Source
57
+
58
+ [`investor-update-card.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/investor-update-card.tsx)
@@ -1,58 +1,49 @@
1
- <!-- source-hash: ecac941a52e178236e11d54fe42337ec -->
2
- Pure presentation component that renders an onboarding guide card in three layout variants `catalog`, `default`, and `sm` plus matching skeleton states for loading UI.
1
+ <!-- source-hash: a2963272b94148f7415e5c66d6d9d7b8 -->
2
+ Renders an onboarding guide entity card in four layout variants (`catalog`, `default`, `sm`, `portrait`), with runtime-derived link attributes and placeholder images sourced from `ChatRuntime` via hub-wired hooks.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### `OnboardingGuideCard`
7
- Main card component. Stateless and click-logic-free; the caller wraps with navigation and provides the resolved `href`.
7
+ Main export. Renders one of four variants based on the `size` prop:
8
+ - **`catalog`** — Rich detail card with hero image, title, summary, duration badge, and `EntityAuthorCard` author/section grid.
9
+ - **`default`** — Horizontal step-numbered card for "More in section" rails.
10
+ - **`sm`** — Compact horizontal card for inline chat rendering.
11
+ - **`portrait`** — Delegates to `EntityPortraitCard` for strip/rail density layouts.
8
12
 
9
- | Prop | Type | Description |
10
- |------|------|-------------|
11
- | `guide` | `OnboardingGuide` | Guide entity data |
12
- | `href` | `string` | Detail URL resolved by caller |
13
- | `target` | `'_blank'` | Optional new-tab behavior |
14
- | `size` | `'catalog' \| 'default' \| 'sm'` | Layout variant (default: `'default'`) |
15
- | `placeholderUrl` | `string \| null` | OG fallback image for catalog/sm |
16
- | `className` | `string` | Additional CSS classes |
13
+ Link `target`/`rel` are resolved via `useEntityCardLink`; placeholder images via `useEntityCardPlaceholder`. Explicit props always override runtime values.
17
14
 
18
15
  ### `OnboardingGuideCardSkeleton`
19
- Loading placeholder that mirrors each layout variant's structure with animated pulse states.
16
+ Loading placeholder matching the layout of each `size` variant. Supports `catalog`, `default`, and `sm`.
20
17
 
21
- ### `HORIZONTAL_SIZE_TOKENS`
22
- Internal token map for spacing/typography in the `default` variant.
23
-
24
- ## Variants
18
+ ### `stripMarkdownPreview(text)`
19
+ Internal utility. Strips raw markdown syntax (fenced code blocks, headings, links, bold/italic markers) from guide summaries before rendering as prose. Hard-caps output at 240 characters to prevent CSS `line-clamp` failures from dumping full guide content into the card.
25
20
 
26
- | Variant | Layout | Use Case |
27
- |---------|--------|----------|
28
- | `catalog` | Hero image + author grid | Public catalog page |
29
- | `default` | Horizontal step-numbered | "More in section" rail |
30
- | `sm` | Compact horizontal | Chat-inline rendering |
21
+ ### `HORIZONTAL_SIZE_TOKENS`
22
+ Frozen design-token map scoping padding, icon sizing, and typography to the `default` variant.
31
23
 
32
24
  ## Usage Example
33
25
 
34
26
  ```typescript
35
27
  import { OnboardingGuideCard, OnboardingGuideCardSkeleton } from './onboarding-guide-card'
36
28
 
37
- // Loading state
38
- if (isLoading) {
39
- return <OnboardingGuideCardSkeleton size="catalog" />
40
- }
41
-
42
- // Catalog variant (public listing)
29
+ // Catalog variant (public guide listing page)
43
30
  <OnboardingGuideCard
44
31
  guide={guide}
45
32
  href={`/guides/${guide.slug}`}
46
33
  size="catalog"
47
- placeholderUrl={ogImageUrl}
34
+ showTypeBadge={false}
48
35
  />
49
36
 
50
- // Chat inline (sm variant, new tab)
37
+ // Compact inline variant (chat message)
51
38
  <OnboardingGuideCard
52
39
  guide={guide}
53
40
  href={`/guides/${guide.slug}`}
54
41
  size="sm"
55
42
  target="_blank"
56
43
  rel="noopener noreferrer"
44
+ placeholderUrl="https://api.example.com/og-placeholder.png"
57
45
  />
46
+
47
+ // Loading state
48
+ <OnboardingGuideCardSkeleton size="catalog" />
58
49
  ```
@@ -1,31 +1,38 @@
1
- <!-- source-hash: 192500e77aad1a0a4024a9e7d8dfcfec -->
2
- Provides the lib-side default implementation of `buildProductReleaseCardProps` for chat dispatch, satisfying the three fields required by the compact (`size='sm'`) `<ProductReleaseCard>` variant without requiring hub-side extras.
1
+ <!-- source-hash: 29cc203019f2ef9b57297e18679a37af -->
2
+ Provides lib-side default prop builders for `<ProductReleaseCard>`, covering both the compact `sm` (chat dispatch) and full `lg` (catalog page) card variants without requiring embedder-supplied extras.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### Interfaces
7
- - **`ReleaseLike`** — Loosely typed shape for raw API row data, covering image URLs, video URLs, and release date fields
8
- - **`DerivedSmProps`** — Output shape containing only the three sm-relevant props: `coverImage`, `hasVideoCover`, and `formattedDate`
7
+
8
+ - **`ReleaseLike`** — Minimal shape for `sm` builder; covers image/video thumbnail and date fields
9
+ - **`RichReleaseLike`** — Extended shape for `lg` builder; adds `release_type`, `release_status`, `view_count`, `author`, and changelog arrays
10
+ - **`DerivedSmProps`** — Output type for the compact builder (`coverImage`, `hasVideoCover`, `formattedDate`)
11
+ - **`ProductReleaseCardDerivedProps`** — Full output type for the rich builder, including badge color, author, view count, and changelog counts
9
12
 
10
13
  ### Functions
11
- - **`pickCover(item)`** — Resolves the best cover image URL by mirroring the hub's `resolveReleaseCover` precedence: video thumbnails take priority when a video is set, falling back to `featured_image` then `og_image_url`
12
- - **`defaultBuildProductReleaseCardProps(item)`** — Main export; builds the `DerivedSmProps` bundle from an unknown API row, using `formatReleaseDate` for TZ-safe date formatting
14
+
15
+ - **`pickCover(item)`** *(internal)* Selects the best cover image URL using a simplified sm-specific heuristic: prefers video thumbnails when a video URL is present, otherwise falls back to `featured_image` or `og_image_url`
16
+ - **`defaultBuildProductReleaseCardProps(item)`** — Lightweight builder for chat-dispatch `sm` cards; satisfies only the three fields the compact variant reads
17
+ - **`buildProductReleaseCardProps(item)`** — Rich `lg`-variant builder and the **default** for `<ProductReleasesView>`; populates the full metadata grid using `resolveReleaseCover` and `releaseTypeToBadgeColor`
13
18
 
14
19
  ## Usage Example
15
20
 
16
21
  ```typescript
17
- import { defaultBuildProductReleaseCardProps } from './product-release-card-defaults'
18
-
19
- // Used as fallback when opts.extras.buildProductReleaseCardProps is not supplied
20
- const props = defaultBuildProductReleaseCardProps(apiRow)
21
- // → { coverImage: 'https://...', hasVideoCover: true, formattedDate: 'Jan 15, 2025' }
22
-
23
- // Hub-side embedders override with their richer builder via extras:
24
- const cardProps = (opts.extras?.buildProductReleaseCardProps ?? defaultBuildProductReleaseCardProps)(row)
22
+ import {
23
+ defaultBuildProductReleaseCardProps,
24
+ buildProductReleaseCardProps,
25
+ } from './product-release-card-defaults'
26
+
27
+ // Compact sm card (chat dispatch — no extras needed)
28
+ const smProps = defaultBuildProductReleaseCardProps(releaseRow)
29
+ // { coverImage, hasVideoCover, formattedDate }
30
+
31
+ // Full lg card (ProductReleasesView default)
32
+ const lgProps = buildProductReleaseCardProps(releaseRow)
33
+ // → { coverImage, hasVideoCover, formattedDate, releaseType,
34
+ // releaseStatus, releaseTypeBadgeColor, viewCount,
35
+ // author, changelogCounts }
25
36
  ```
26
37
 
27
- ## Notes
28
-
29
- - Uses `formatReleaseDate` (not `new Date().toLocaleDateString`) to avoid UTC off-by-one day shifts on date-only `YYYY-MM-DD` strings
30
- - Produces an empty string for `formattedDate` when `release_date` is absent, rather than throwing
31
- - lg-only fields (`changelogCounts`, badge color, view count) are intentionally omitted — hub embedders supply those via `extras`
38
+ > Hub-side embedders can override the default by passing a richer builder via `opts.extras.buildProductReleaseCardProps`. The `sm` builder intentionally diverges from `resolveReleaseCover` to avoid pulling hub-only dependencies into the lib bundle.
@@ -1,59 +1,56 @@
1
- <!-- source-hash: 882a2c614fa33ecfd7b3ef948ea40a94 -->
2
- Brief overview of the `program-card.tsx` component — a pure presentational card for displaying podcasts, webinars, and events with two density modes.
1
+ <!-- source-hash: d98ea9bb6ec08d6a08478099793fa07d -->
2
+ Presentation-only card component for programs (podcasts, webinars, events) supporting three density modes: `default`, `sm` (compact), and `portrait` (vertical rail).
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### Exports
7
7
 
8
- | Export | Type | Description |
9
- |--------|------|-------------|
10
- | `ProgramCardSkeleton` | Component | Loading placeholder supporting `default` and `sm` sizes |
11
- | `ProgramCard<T>` | Generic Component | Main card component, typed against `BaseProgramItem` |
12
- | `ProgramCardProps<T>` | Interface | Props contract for `ProgramCard` |
8
+ - **`ProgramCard<T>`** Generic card component accepting any `BaseProgramItem` subtype; delegates to density-specific render branches
9
+ - **`ProgramCardSkeleton`** — Animated loading placeholder matching `default` or `sm` layout
10
+ - **`ProgramCardProps<T>`** Interface defining all card inputs
13
11
 
14
- ### Internal Helpers
12
+ ### Internal Utilities
15
13
 
16
- - **`getHosts()`** — Normalizes host data from either a typed array or a JSON string
17
- - **`MediaGallery`** — Scrollable thumbnail strip with `ImageGalleryModal` lightbox integration
14
+ - **`formatUtc(date, fmt)`** — UTC-pinned `date-fns` formatter that prevents React #418 hydration mismatches between server (UTC) and client (local) timezones
15
+ - **`getHosts(hosts)`** — Normalizes `ProgramHost[]` or raw JSON string into `{ name, avatar }[]`
16
+ - **`MediaGallery`** — Horizontally scrollable thumbnail strip with `ImageGalleryModal` lightbox on click
18
17
 
19
- ### Card Sizes (`CardSize`)
18
+ ### Density Modes
20
19
 
21
20
  | Size | Layout | Use Case |
22
- |------|--------|----------|
23
- | `default` | Vertical, full detail | Standalone page/feed cards |
24
- | `sm` | Compact horizontal | Chat-inline embeds |
25
-
26
- ### Type-Aware Metadata
27
-
28
- The card adapts displayed metadata based on `config.type`:
29
-
30
- - **`podcast`** → Duration via `formatDurationCompact`
31
- - **`event`** → Location name
32
- - **`webinar`** → Start time + duration via `formatTimeWithTimezone` / `formatDurationFromRange`
21
+ |---|---|---|
22
+ | `default` | Wide horizontal with full detail | Archive/listing pages |
23
+ | `sm` | Compact horizontal row | Chat-inline cards |
24
+ | `portrait` | Vertical via `EntityPortraitCard` | Mixed-content rails |
33
25
 
34
26
  ## Usage Example
35
27
 
36
28
  ```typescript
37
- import { ProgramCard } from './program-card'
29
+ import { ProgramCard, ProgramCardSkeleton } from './program-card'
30
+ import { podcastConfig } from '../config/podcast-config'
31
+
32
+ // Loading state
33
+ if (isLoading) return <ProgramCardSkeleton size="sm" />
38
34
 
39
- // Default (vertical) layout
35
+ // Default density
40
36
  <ProgramCard
41
- config={{ type: 'podcast', labels: { singular: 'Episode' } }}
37
+ config={podcastConfig}
42
38
  item={episode}
43
- href="/podcasts/ep-42"
39
+ media={episode.media}
40
+ href={`/podcasts/${episode.slug}`}
44
41
  size="default"
45
42
  />
46
43
 
47
- // Compact inline variant (e.g., inside chat)
44
+ // Portrait for mixed-content rail
48
45
  <ProgramCard
49
- config={{ type: 'webinar', labels: { singular: 'Webinar' } }}
50
- item={webinarItem}
51
- href="https://external.com/webinar"
46
+ config={webinarConfig}
47
+ item={webinar}
48
+ href={`/webinars/${webinar.slug}`}
49
+ size="portrait"
50
+ showTypeBadge={true}
52
51
  target="_blank"
53
52
  rel="noopener noreferrer"
54
- size="sm"
55
- placeholderUrl="https://cdn.example.com/og-fallback.png"
56
53
  />
57
54
  ```
58
55
 
59
- > **Note:** `ProgramCard` is purely presentationalit owns no navigation logic. Callers are responsible for computing and passing `href` and `target`.
56
+ > The card writes no click logic callers wrap or pass `href` directly. Use `target="_blank"` with `rel="noopener noreferrer"` for cross-platform or embed contexts.
@@ -1,46 +1,55 @@
1
- <!-- source-hash: 853672c07dc2c32f2542a936a393a3ad -->
2
- Pure presentation component for roadmap items with two density modes a rich default card (vote buttons, Figma/screenshot controls) and a compact horizontal variant for inline chat display.
1
+ <!-- source-hash: 7154e56664d4c339b92c30b7f464bd80 -->
2
+ Pure presentation component for roadmap feature items, supporting two layout densities: a rich `default` card (with vote buttons, Figma links, and screenshot gallery) and a compact `sm` card for inline chat display.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Description |
7
- |--------|-------------|
8
- | `RoadmapCard` | Main card component, renders either `default` or `sm` layout |
9
- | `RoadmapCardSkeleton` | Loading placeholder matching both card densities |
10
- | `VoteType` | Union type `'up' \| 'down' \| null` for vote state |
11
- | `RoadmapCardProps` | Full props interface for the card |
6
+ ### `RoadmapCard`
7
+ Main export. Renders either the full roadmap page card or a compact horizontal card based on the `size` prop.
8
+
9
+ | Prop | Type | Description |
10
+ |------|------|-------------|
11
+ | `item` | `RoadmapItem` | Roadmap item data (title, status, description, votes, etc.) |
12
+ | `size` | `'default' \| 'sm'` | Layout density |
13
+ | `href` | `string` | Navigation URL (compact branch only) |
14
+ | `target` | `'_blank'` | Opens in new tab when set |
15
+ | `userVote` | `VoteType` | Current user's vote (`'up'`, `'down'`, or `null`) |
16
+ | `onVote` | `(type) => void` | Vote handler (default size only) |
17
+ | `isVoting` | `boolean` | Disables vote buttons during pending request |
18
+ | `id` | `string` | DOM id for `useScrollToHash` deep-linking (e.g. `roadmap-<external_id>`) |
19
+
20
+ ### `RoadmapCardSkeleton`
21
+ Loading placeholder that mirrors the layout of either size variant using animated pulse placeholders.
22
+
23
+ ### `VoteType`
24
+ ```typescript
25
+ export type VoteType = 'up' | 'down' | null
26
+ ```
12
27
 
13
28
  ## Usage Example
14
29
 
15
30
  ```typescript
16
- // Default (full roadmap page card with vote controls)
31
+ // Default rich card (roadmap page)
17
32
  <RoadmapCard
18
- item={roadmapItem}
33
+ id={`roadmap-${item.externalId}`}
34
+ item={item}
35
+ size="default"
19
36
  userVote={currentVote}
20
37
  onVote={(type) => handleVote(item.id, type)}
21
- isVoting={isPending}
38
+ isVoting={votingInFlight}
22
39
  />
23
40
 
24
- // Compact inline variant (chat/sidebar)
25
- <a href={`/roadmap/${item.id}`}>
26
- <RoadmapCard
27
- item={roadmapItem}
28
- size="sm"
29
- href={`/roadmap/${item.id}`}
30
- cardType="delivery_item"
31
- target="_blank"
32
- rel="noopener noreferrer"
33
- />
34
- </a>
35
-
36
- // Skeleton loader
41
+ // Compact card (chat inline, wrapped by parent anchor)
42
+ <RoadmapCard
43
+ item={item}
44
+ size="sm"
45
+ href={`/roadmap/${item.externalId}`}
46
+ target="_blank"
47
+ rel="noopener noreferrer"
48
+ cardType="roadmap_item"
49
+ />
50
+
51
+ // Skeleton while loading
37
52
  <RoadmapCardSkeleton size="sm" />
38
53
  ```
39
54
 
40
- ## Key Behaviors
41
-
42
- - **Icon resolution**: prefers `item.icon` (proxied), falls back to `TaskTypeIcon` for internal tasks, then initials
43
- - **`sm` branch**: wraps content in `<a>` when `href` is valid; renders a static `<span>` when no href is available
44
- - **Vote UI** (`default` only): rendered only when `onVote` is provided; buttons disabled during `isVoting`
45
- - **Screenshot gallery**: controlled via local `showScreenshots` state; Figma link and screenshot count displayed as metadata badges in the compact branch
46
- - **Responsive status badge**: shown inline on `md+` screens, moves below the header row on mobile
55
+ > **Icon fallback order (compact branch):** `TaskTypeIcon` (internal tasks) → proxied logo image → 2-letter title abbreviation.
@@ -1,52 +1,49 @@
1
- <!-- source-hash: 69f5a0ba80b7e510b67573e50f546e85 -->
2
- A pure-presentational thumbs-up / thumbs-down vote button used within `RoadmapCard`'s default variant. Renders an icon with an optional vote count; all interaction logic is delegated to the parent via `onClick`.
1
+ <!-- source-hash: 289ff1c6a5daf3110837897be5b2e698 -->
2
+ A presentational thumbs-up/thumbs-down vote button component used within `RoadmapCard`'s default variant. Delegates all interaction logic to the parent via an `onClick` prop.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `RoadmapVoteButtonProps` | `interface` | Prop contract for the button |
9
- | `RoadmapVoteButton` | `function` | Styled outline button with thumb icon and count |
6
+ ### `RoadmapVoteButton`
10
7
 
11
- ### Props
8
+ The sole export — a styled `Button` wrapper that renders either a `ThumbsUpIcon` or `ThumbsDownIcon` based on `voteType`, with optional vote count display and active/disabled states.
9
+
10
+ ### `RoadmapVoteButtonProps`
12
11
 
13
12
  | Prop | Type | Default | Description |
14
- |------|------|---------|-------------|
15
- | `voteType` | `'up' \| 'down'` | — | Selects `ThumbsUpIcon` or `ThumbsDownIcon` |
16
- | `count` | `number` | — | Vote tally displayed next to the icon |
17
- | `isActive` | `boolean` | — | Applies active background when the user has voted |
18
- | `onClick` | `() => void` | — | Click handler supplied by parent (e.g. `useRoadmapVoting`) |
19
- | `disabled` | `boolean` | `false` | Disables interaction and applies reduced opacity |
20
- | `showCount` | `boolean` | `true` | Toggles count label visibility |
21
- | `color` | `string` | — | Forwarded to the icon as a fill/stroke color |
22
- | `className` | `string` | — | Additional CSS classes merged via `cn()` |
13
+ |---|---|---|---|
14
+ | `voteType` | `'up' \| 'down'` | — | Determines which icon to render |
15
+ | `count` | `number` | — | Vote count displayed alongside the icon |
16
+ | `isActive` | `boolean` | — | Applies active background styling when the user has voted |
17
+ | `onClick` | `() => void` | — | Click handler; typically wired from a `useRoadmapVoting` hook |
18
+ | `disabled` | `boolean` | `false` | Prevents interaction and applies reduced opacity |
19
+ | `showCount` | `boolean` | `true` | Toggles visibility of the vote count label |
20
+ | `color` | `string` | — | Optional color override passed to the icon |
21
+ | `className` | `string` | — | Additional classes merged via `cn()` |
23
22
 
24
23
  ## Usage Example
25
24
 
26
25
  ```typescript
27
26
  import { RoadmapVoteButton } from './roadmap-vote-button'
28
27
 
29
- function RoadmapCard() {
30
- const { upvotes, hasVotedUp, handleVote } = useRoadmapVoting(itemId)
28
+ function RoadmapCard({ item }) {
29
+ const { upvoteCount, hasUpvoted, handleUpvote } = useRoadmapVoting(item.id)
31
30
 
32
31
  return (
33
- <div className="flex gap-2">
34
- <RoadmapVoteButton
35
- voteType="up"
36
- count={upvotes}
37
- isActive={hasVotedUp}
38
- onClick={() => handleVote('up')}
39
- color="#FFC008"
40
- />
41
- <RoadmapVoteButton
42
- voteType="down"
43
- count={0}
44
- isActive={false}
45
- onClick={() => handleVote('down')}
46
- showCount={false}
47
- disabled
48
- />
49
- </div>
32
+ <RoadmapVoteButton
33
+ voteType="up"
34
+ count={upvoteCount}
35
+ isActive={hasUpvoted}
36
+ onClick={handleUpvote}
37
+ disabled={!isAuthenticated}
38
+ />
50
39
  )
51
40
  }
52
- ```
41
+ ```
42
+
43
+ ## Notes
44
+
45
+ - Pure presentational component — no internal state or data fetching.
46
+ - Active state (`isActive`) applies `bg-ods-border` styling to visually distinguish a cast vote.
47
+ - Uses the `cn()` utility for conditional class merging; all ODS design tokens (`ods-bg`, `ods-border`) follow the OpenFrame Design System conventions.
48
+
49
+ **Source:** [`roadmap-vote-button.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/roadmap-vote-button.tsx)
@@ -1,48 +1,47 @@
1
- <!-- source-hash: 82997feaf6df9370cc3057cd02b01be6 -->
2
- Renders a visual card component for Slack message markers, supporting both `compact` and `row` display variants with optional anchor navigation and a loading skeleton state.
1
+ <!-- source-hash: 39388beb5287597e62780b1e9b0cd15d -->
2
+ Renders a visual card for Slack message markers in two layout variants (`compact` and `row`), with a matching skeleton loader for loading states. Pure presentation component — navigation behavior is injected externally via `anchorProps`.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `SlackMessageCard`
7
- Main card component that displays a Slack message entry with icon, title, preview text, channel name, and date. Rendering behavior varies by nav context:
8
- - Wraps in a caller-provided `<a>` via `anchorProps` if supplied
9
- - Falls back to a direct external `<a href>` if `item.url` is valid
10
- - Renders a static `<span>` when no link is available
11
-
12
- ### `SlackMessageCardSkeleton`
13
- Animated placeholder matching the card layout for loading states. Accepts `variant` and `className` props.
14
-
15
- ### `parseChannelFromUrl` *(internal)*
16
- Extracts the Slack channel ID from a Slack archive URL (`*.slack.com/archives/<channelId>/...`) as a fallback when `item.channel` is not set.
17
-
18
- ### Interfaces
19
-
20
- | Interface | Purpose |
21
- |---|---|
22
- | `SlackMessageCardProps` | `item`, `variant`, `className`, `anchorProps` |
23
- | `SlackMessageCardAnchorProps` | Typed `<a>` prop bundle composed by the caller |
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `SlackMessageCard` | Component | Main card rendering a `SlackMessageItem` in `compact` (default) or `row` layout |
9
+ | `SlackMessageCardSkeleton` | Component | Animated placeholder matching the card's layout during data fetching |
10
+ | `SlackMessageCardProps` | Interface | Props for `SlackMessageCard`: `item`, `variant`, `className`, `anchorProps` |
11
+ | `SlackMessageCardAnchorProps` | Interface | Anchor prop bundle (`href`, `target`, `rel`, `onClick`) composed by the caller |
12
+ | `parseChannelFromUrl` | Helper (private) | Extracts the Slack channel ID from a `*.slack.com/archives/<channel>` URL |
24
13
 
25
14
  ## Usage Example
26
15
 
27
16
  ```typescript
28
17
  import { SlackMessageCard, SlackMessageCardSkeleton } from './slack-message-card'
18
+ import type { SlackMessageItem } from '../types/entities/slack-message'
19
+
20
+ const item: SlackMessageItem = {
21
+ title: 'Deployment alert',
22
+ preview: 'Production deploy succeeded at 14:32 UTC.',
23
+ url: 'https://myteam.slack.com/archives/C01AB2CD3EF/p1234567890',
24
+ channel: null,
25
+ dateUpdated: '2024-06-01T14:32:00Z',
26
+ }
29
27
 
30
- // Compact card with caller-controlled navigation
28
+ // Compact card with external navigation
29
+ <SlackMessageCard item={item} />
30
+
31
+ // Compact card with caller-controlled navigation (e.g. SPA router)
31
32
  <SlackMessageCard
32
- item={slackMessageItem}
33
- variant="compact"
33
+ item={item}
34
34
  anchorProps={{
35
- href: '/messages/123',
36
- onClick: (e) => handleNavigate(e),
35
+ href: '/messages/42',
36
+ onClick: (e) => { e.preventDefault(); router.push('/messages/42') },
37
37
  }}
38
38
  />
39
39
 
40
- // Inline row variant (e.g. inside a list or table)
41
- <SlackMessageCard
42
- item={slackMessageItem}
43
- variant="row"
44
- />
40
+ // Inline row layout (e.g. inside a list or table)
41
+ <SlackMessageCard item={item} variant="row" />
45
42
 
46
- // Skeleton while loading
43
+ // Loading state
47
44
  <SlackMessageCardSkeleton variant="compact" />
48
- ```
45
+ ```
46
+
47
+ **Anchor resolution priority:** `anchorProps` → `item.url` (opens `_blank`) → static `<span>` when no URL is available.
@@ -0,0 +1,47 @@
1
+ <!-- source-hash: f3c02d66e41de5152b76a04f3d0f2e14 -->
2
+ Manages a two-step cover image fallback chain for entity cards: real cover URL → branded placeholder URL → `null` (hide the media element).
3
+
4
+ ## Key Components
5
+
6
+ ### `useCoverImageFallback(imageUrl?, placeholderUrl?)`
7
+ Primary hook implementing the fallback chain. Tracks failed URLs in a `Set` so derived `src` re-resolves instantly on prop changes without reset effects or retry loops.
8
+
9
+ **Returns `CoverImageFallback`:**
10
+
11
+ | Field | Type | Description |
12
+ |---|---|---|
13
+ | `src` | `string \| null` | First non-failed URL from `[imageUrl, placeholderUrl]`, or `null` |
14
+ | `onError` | `() => void` | Wire directly to the media element's `onError` handler |
15
+
16
+ ### `hideOnError`
17
+ Standalone event handler for compact image slots with no placeholder chain. Sets `display: none` on the broken image element, leaving the slot background visible.
18
+
19
+ ## Usage Example
20
+
21
+ ```typescript
22
+ import { useCoverImageFallback, hideOnError } from './use-cover-image-fallback'
23
+
24
+ // Full fallback chain (cover → placeholder → hide slot)
25
+ function EntityCard({ coverUrl, placeholderUrl }) {
26
+ const { src, onError } = useCoverImageFallback(coverUrl, placeholderUrl)
27
+
28
+ if (!src) return <div className="empty-media-slot" />
29
+
30
+ return <img src={src} onError={onError} alt="Cover" />
31
+ }
32
+
33
+ // Compact card — no placeholder, just hide on break
34
+ function CompactCard({ coverUrl }) {
35
+ return <img src={coverUrl} onError={hideOnError} alt="Cover" />
36
+ }
37
+ ```
38
+
39
+ ## Design Notes
40
+
41
+ - **No retry loops:** failed URLs are stored in a `Set`; once marked failed they are skipped permanently for the component's lifetime.
42
+ - **Prop-change safe:** `src` is fully derived — passing a new `coverUrl` re-resolves immediately with no `useEffect` reset needed.
43
+ - **Centralised logic:** replaces per-card `imageError` state and `displayImage` ternaries that previously drifted across `BlogCard` and `EntityPortraitCard`.
44
+
45
+ ## Source
46
+
47
+ [`use-cover-image-fallback.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-cover-image-fallback.ts)