@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,26 +1,30 @@
1
- <!-- source-hash: bce89d098aaae5a0045e31b754508d2a -->
2
- A client-side React page component that renders a detailed view of a product release, including metadata, changelog sections, linked roadmap/delivery tasks, media, and video content. It supports injectable components for app-specific rendering and pre-fetched data for admin preview.
1
+ <!-- source-hash: 2d7b47eeea450e199010485ffef88bdb -->
2
+ Renders a full product release detail page with support for injectable components, linked task fetching, and flexible layout modes.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### Exported Types
7
- - **`ReleaseDetailPageProps`** Main props interface; accepts `slug`, optional `initialData`, a `useRelease` hook, and injectable section components
8
- - **`UseReleaseResult`** — Shape returned by the injected `useRelease` hook
9
- - **`MarkdownRendererProps`**, **`RoadmapSectionProps`**, **`DeliverySectionProps`**, **`VideoSectionProps`**, **`VideoDisplaySectionProps`** — Props interfaces for each injectable section component
10
- - **`RoadmapItem`**, **`DeliveryResponse`** — Re-exported canonical types for source compatibility
6
+ ### `ReleaseDetailPage`
7
+ Primary export. Renders a complete release detail view including metadata, changelog, media gallery, roadmap/delivery sections, and related content.
11
8
 
12
- ### Main Export
13
- - **`ReleaseDetailPage`** — Primary page component; orchestrates data fetching, linked task loading, gallery state, and layout rendering
9
+ ### Exported Types
14
10
 
15
- ### Internal Helpers
16
- - **`DefaultMarkdownRenderer`** — Fallback renderer using `whitespace-pre-wrap` when no `MarkdownRenderer` is injected
11
+ | Type | Purpose |
12
+ |---|---|
13
+ | `ReleaseDetailPageProps` | Full prop interface for the page component |
14
+ | `UseReleaseResult` | Shape returned by the required `useRelease` hook |
15
+ | `VideoDisplaySectionProps` | Props for the injectable video section with bites/tabs support |
16
+ | `RoadmapSectionProps` | Props for the injectable roadmap task section |
17
+ | `DeliverySectionProps` | Props for the injectable delivery task section |
18
+ | `MarkdownRendererProps` | Props for the injectable markdown renderer |
19
+ | `RoadmapItem` | Re-exported from `../../chat/types/entities/roadmap-item` |
20
+ | `DeliveryResponse` | Re-exported from `../../../types/delivery` |
17
21
 
18
22
  ## Usage Example
19
23
 
20
24
  ```typescript
21
- import { ReleaseDetailPage } from './release-detail-page';
25
+ import { ReleaseDetailPage } from '@openframe/ui';
22
26
  import { useRelease } from '@/hooks/use-release';
23
- import { MarkdownRenderer } from '@/components/markdown-renderer';
27
+ import { AppMarkdownRenderer } from '@/components/markdown-renderer';
24
28
  import { RoadmapSection } from '@/components/roadmap-section';
25
29
 
26
30
  export default function ReleasePage({ params }: { params: { slug: string } }) {
@@ -28,14 +32,25 @@ export default function ReleasePage({ params }: { params: { slug: string } }) {
28
32
  <ReleaseDetailPage
29
33
  slug={params.slug}
30
34
  useRelease={useRelease}
31
- MarkdownRenderer={MarkdownRenderer}
35
+ MarkdownRenderer={AppMarkdownRenderer}
32
36
  RoadmapSection={RoadmapSection}
33
37
  roadmapApiEndpoint="/api/roadmap"
34
38
  deliveryApiEndpoint="/api/delivery"
35
39
  backButton={{ label: 'Back to releases', href: '/releases' }}
40
+ relatedContent={<RelatedReleases />}
41
+ shell={true}
36
42
  />
37
43
  );
38
44
  }
39
45
  ```
40
46
 
41
- > **Note:** The `useRelease` hook must be provided at the app level to ensure it uses the correct `QueryClient`. When `initialData` is supplied, the hook is bypassed entirely — enabling admin preview without a network fetch.
47
+ ## Key Behaviors
48
+
49
+ - **Injectable architecture**: `MarkdownRenderer`, `RoadmapSection`, `DeliverySection`, and `VideoDisplaySection` are all optional overrides; defaults fall back to lib-provided components
50
+ - **Dual data modes**: Accepts `initialData` for admin preview (skips fetch); otherwise uses the required `useRelease` hook
51
+ - **Linked task fetching**: Automatically fetches ClickUp roadmap/delivery tasks via `contentFetch` when task IDs are present on the release record
52
+ - **Shell toggle**: `shell={false}` suppresses the outer `<PageShell>` for host layouts that already provide a page container
53
+
54
+ ## Source
55
+
56
+ [`release-detail-page.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/release-detail-page.tsx)
@@ -1,37 +1,42 @@
1
- <!-- source-hash: 499214f4840bb2650161d384a662b71b -->
2
- Barrel export file for the shared roadmap surface, exposing grid components and voting hook while intentionally omitting `RoadmapItem` and `VoteType` to prevent TypeScript TS2308 ambiguous re-export errors.
1
+ <!-- source-hash: 84846be8d32682355ecb5cfae1b2e793 -->
2
+ Barrel export file for the shared roadmap surface, exposing grid, skeleton, voting logic, and the self-fetching list view while intentionally omitting `RoadmapItem` and `VoteType` to avoid TypeScript TS2308 ambiguous re-export errors.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `RoadmapGrid` | Component | Main grid layout for displaying roadmap items |
9
- | `RoadmapGridProps` | Type | Props interface for `RoadmapGrid` |
10
- | `RoadmapGridSkeleton` | Component | Loading skeleton for the roadmap grid |
11
- | `RoadmapGridSkeletonProps` | Type | Props interface for `RoadmapGridSkeleton` |
12
- | `useRoadmapVoting` | Hook | Hook encapsulating roadmap voting logic |
13
- | `VoteState` | Type | State shape for a vote interaction |
14
- | `UseRoadmapVotingOptions` | Type | Options interface for `useRoadmapVoting` |
15
-
16
- ## Intentionally Omitted Exports
17
-
18
- | Omitted | Reason | Canonical Import Path |
19
- |---------|--------|-----------------------|
20
- | `RoadmapItem` | Already exported via two paths; a third triggers TS2308 | `@flamingo-stack/openframe-frontend-core/components/chat` |
21
- | `VoteType` | Duplicate of the same type re-exported from `./chat` | `@flamingo-stack/openframe-frontend-core/components/chat` |
7
+ |---|---|---|
8
+ | `RoadmapGrid` / `RoadmapGridProps` | Component | Renders a grid of roadmap cards |
9
+ | `RoadmapGridSkeleton` / `RoadmapGridSkeletonProps` | Component | Loading skeleton for the roadmap grid |
10
+ | `useRoadmapVoting` / `VoteState` / `UseRoadmapVotingOptions` | Hook + Types | Manages voting state and interactions on roadmap items |
11
+ | `RoadmapView` / `RoadmapViewProps` | Component | Self-fetching roadmap list surface; host only configures API routes |
22
12
 
23
13
  ## Usage Example
24
14
 
25
15
  ```typescript
26
- // ✅ Import roadmap surface components from this barrel
27
16
  import {
28
17
  RoadmapGrid,
29
18
  RoadmapGridSkeleton,
19
+ RoadmapView,
30
20
  useRoadmapVoting,
31
- type VoteState,
32
- type UseRoadmapVotingOptions,
33
- } from '@flamingo-stack/openframe-frontend-core/components/shared/roadmap';
21
+ } from '@flamingo-stack/openframe-frontend-core/components/roadmap';
34
22
 
35
- // Import omitted types from their canonical paths
36
- import type { RoadmapItem, VoteType } from '@flamingo-stack/openframe-frontend-core/components/chat';
37
- ```
23
+ // Self-fetching view host provides API route config only
24
+ <RoadmapView apiRoute="/api/roadmap" />
25
+
26
+ // Manual grid with voting hook
27
+ const { vote, voteState } = useRoadmapVoting({ itemId: 'item-123' });
28
+ <RoadmapGrid items={roadmapItems} onVote={vote} />
29
+ ```
30
+
31
+ ## Intentional Omissions
32
+
33
+ - **`RoadmapItem`** — canonical type is available via:
34
+ - `@flamingo-stack/openframe-frontend-core/components/chat`
35
+ - `@flamingo-stack/openframe-frontend-core/components` (via `./shared/product-release`)
36
+ - **`VoteType`** — canonical import path is `@flamingo-stack/openframe-frontend-core/components/chat`
37
+
38
+ Both are excluded to prevent [TS2308](https://www.typescriptlang.org/tsconfig#isolatedModules) ambiguous re-export errors at the top-level barrel.
39
+
40
+ ## Source
41
+
42
+ [`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
@@ -1,66 +1,55 @@
1
- <!-- source-hash: afe909dc035ab417a954948a391b890a -->
2
- Full-page roadmap surface that renders a responsive 2-column grid of `RoadmapCard` components with integrated voting state and live count refresh.
1
+ <!-- source-hash: 20b142caf72c6c8479a957bacef62151 -->
2
+ Shared roadmap list surface component that renders roadmap items either as a flat two-column grid or grouped into collapsible per-quarter accordions, with centralized voting state management.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `RoadmapGrid` | Component | Main grid component rendering all roadmap items |
9
- | `RoadmapGridProps` | Interface | Component prop contract |
10
- | `DEFAULT_BUILD_REFRESH_URL` | Constant | Default URL builder: `(taskId) => /api/roadmap/${taskId}` |
11
-
12
- ## Props
6
+ ### `RoadmapGrid` (main export)
7
+ The top-level component that orchestrates both rendering modes and shared voting state.
13
8
 
9
+ **Props:**
14
10
  | Prop | Type | Default | Description |
15
- |------|------|---------|-------------|
16
- | `items` | `RoadmapItem[]` | — | Roadmap entries to display |
17
- | `onItemUpdate` | `(item: RoadmapItem) => void` | | Callback fired after a successful vote refresh |
18
- | `showLeftMargin` | `boolean` | `true` | Applies `md:ml-[120px]` for hero alignment; pass `false` for rails |
19
- | `buildRefreshUrl` | `(taskId: string) => string` | `DEFAULT_BUILD_REFRESH_URL` | Path-based URL builder for per-task refresh after vote |
20
- | `votingOptions` | `UseRoadmapVotingOptions` | | Vote endpoint + storage key forwarded to `useRoadmapVoting` |
21
-
22
- ## Voting Flow
23
-
24
- ```mermaid
25
- graph TD
26
- A["User Clicks Vote"] --> B{"Task Already Voting?"}
27
- B -->|Yes| C["Ignore / No-op"]
28
- B -->|No| D["Lock Task ID in votingTasks"]
29
- D --> E["toggleVote()"]
30
- E --> F{"result.success?"}
31
- F -->|No| G["Unlock Task ID"]
32
- F -->|Yes| H["GET buildRefreshUrl(taskId)"]
33
- H --> I{"response.ok?"}
34
- I -->|Yes| J["onItemUpdate(data.item)"]
35
- I -->|No| G
36
- J --> G
37
- ```
11
+ |---|---|---|---|
12
+ | `items` | `RoadmapItem[]` | — | Roadmap items to display |
13
+ | `groupByQuarter` | `boolean` | `false` | Enables accordion quarter grouping |
14
+ | `hasActiveFilters` | `boolean` | `false` | Expands all quarters when filters are active |
15
+ | `quartersToKeepClosed` | `number` | `2` | Past quarter collapse window |
16
+ | `showLeftMargin` | `boolean` | `true` | Desktop alignment margin (~120px) |
17
+ | `buildRefreshUrl` | `(taskId: string) => string` | `/api/roadmap/:id` | URL builder for post-vote refresh |
18
+ | `votingOptions` | `UseRoadmapVotingOptions` | — | Vote endpoint + storage key config |
19
+ | `onItemUpdate` | `(item: RoadmapItem) => void` | — | Callback after successful vote refresh |
20
+
21
+ ### `RoadmapGridSingle` (internal)
22
+ Flat 2-column grid for a single set of items. Receives voting handlers from the parent to avoid split state across quarters.
23
+
24
+ ### Quarter Helpers (pure functions)
25
+ - `parseQuarterString(q)` — parses `"Q<n> <year>"` labels
26
+ - `compareQuarters(a, b)` — chronological sort comparator
27
+ - `computeDefaultExpandedQuarters(quarters, quartersToKeepClosed)` determines which quarters open by default
28
+ - `getStatusPriority(status)` sorts items within a quarter by status (Complete → Working → Review → To-Do)
38
29
 
39
30
  ## Usage Example
40
31
 
41
32
  ```typescript
42
- import { RoadmapGrid } from './roadmap-grid';
43
- import type { RoadmapItem } from '../../chat/types/entities/roadmap-item';
44
-
45
- function RoadmapPage({ items }: { items: RoadmapItem[] }) {
46
- const [roadmapItems, setRoadmapItems] = useState(items);
33
+ // Grouped by quarter (full roadmap page)
34
+ <RoadmapGrid
35
+ items={roadmapItems}
36
+ groupByQuarter={true}
37
+ hasActiveFilters={searchQuery.length > 0}
38
+ quartersToKeepClosed={2}
39
+ onItemUpdate={(updated) => patchItem(updated)}
40
+ votingOptions={{ endpoint: '/api/vote', storageKey: 'roadmap-votes' }}
41
+ />
42
+
43
+ // Flat mode (related-content rail)
44
+ <RoadmapGrid
45
+ items={filteredItems}
46
+ showLeftMargin={false}
47
+ votingOptions={{ endpoint: '/api/vote', storageKey: 'roadmap-votes' }}
48
+ />
49
+ ```
47
50
 
48
- const handleItemUpdate = (updated: RoadmapItem) => {
49
- setRoadmapItems(prev =>
50
- prev.map(i => (i.id === updated.id ? updated : i))
51
- );
52
- };
51
+ ## Hydration Strategy
53
52
 
54
- return (
55
- <RoadmapGrid
56
- items={roadmapItems}
57
- onItemUpdate={handleItemUpdate}
58
- showLeftMargin={true}
59
- buildRefreshUrl={(taskId) => `/api/roadmap/${taskId}`}
60
- votingOptions={{ endpoint: '/api/votes', storageKey: 'roadmap-votes' }}
61
- />
62
- );
63
- }
64
- ```
53
+ `expandedQuarters` initializes to `[]` on the server and is populated in a client-only `useEffect`, ensuring SSR markup matches the first client paint before accordion state is applied.
65
54
 
66
- > **Note on `buildRefreshUrl`:** This prop is intentionally a function rather than a string template to safely support embedders whose by-id route shape differs (e.g. `/api/roadmap?id=…`). String concatenation would silently break non-standard routes.
55
+ **Source:** [`roadmap-grid.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/roadmap-grid.tsx)
@@ -0,0 +1,41 @@
1
+ <!-- source-hash: 84574f4998ed905b3d23591c61799aab -->
2
+ Self-contained roadmap list surface that fetches roadmap data via `useSelfFetch`, applies URL-driven search/status filters, and renders the controlled `<RoadmapGrid>` with SSR hydration support.
3
+
4
+ ## Key Components
5
+
6
+ - **`RoadmapView`** — Primary export. Orchestrates data fetching, URL parameter reading, scroll-to-hash deep linking, and delegates rendering to `<RoadmapGrid>`.
7
+ - **`RoadmapViewProps`** — Configuration interface for API routes, SSR hydration, voting, and URL parameter key overrides.
8
+ - **`useSelfFetch`** — Shared hook providing `data`, `setData`, `isLoading`, `error`, and `reload`. The fetch URL acts as the cache key, so filter changes automatically trigger refetches.
9
+ - **`useScrollToHash`** — Handles deep-link hash dispatch (e.g. `?search=<id>#roadmap-<id>` from chat cards), polling until the target item mounts.
10
+ - **`RoadmapGridSkeleton`** — Shown only during the first in-flight fetch when no data exists yet.
11
+ - **`LoadError`** — Rendered on fetch failure with a retry callback.
12
+
13
+ ## Usage Example
14
+
15
+ ```typescript
16
+ import { RoadmapView } from './roadmap-view'
17
+
18
+ // Minimal — uses all defaults (/api/roadmap, 'search', 'status' params)
19
+ <RoadmapView />
20
+
21
+ // With SSR hydration, custom endpoint, and voting
22
+ <RoadmapView
23
+ endpoint="/api/v2/roadmap"
24
+ initialItems={serverSideItems}
25
+ showLeftMargin
26
+ buildRefreshUrl={(taskId) => `/api/v2/roadmap/${taskId}`}
27
+ votingOptions={{
28
+ voteEndpoint: '/api/roadmap/vote',
29
+ storageKey: 'roadmap-votes',
30
+ }}
31
+ searchParamKey="q"
32
+ statusParamKey="status"
33
+ />
34
+ ```
35
+
36
+ ## Notes
37
+
38
+ - Filter params are folded into the fetch URL (`?search=&status=`), keeping the URL as the single cache key. This mirrors the `ProductReleasesView` pattern.
39
+ - The `initialData` wrapper is memoized to maintain stable identity and prevent optimistic vote patches from being clobbered by re-sync effects.
40
+ - After a vote, `onItemUpdate` patches the refreshed task directly into local state via `setData`, keeping vote counts live without a full list refetch.
41
+ - `searchParamKey` and `statusParamKey` default to values from `DEV_SECTION_PARAM_KEYS` — the same registry used by the section chrome — preventing silent key divergence.
@@ -1,5 +1,5 @@
1
- <!-- source-hash: f066f48b7e750fe429b96a6f9a50da79 -->
2
- A `localStorage`-backed React hook providing optimistic up/down voting for roadmap cards, with one vote per task per user, automatic vote toggling/switching, and server sync via a configurable API endpoint.
1
+ <!-- source-hash: 97838d0f1dd2839bee9f826d368aa0df -->
2
+ Custom React hook that manages optimistic up/down voting for roadmap cards, persisting vote state to `localStorage` with one vote per task per user and syncing changes to a configurable API endpoint.
3
3
 
4
4
  ## Key Components
5
5
 
@@ -9,7 +9,14 @@ A `localStorage`-backed React hook providing optimistic up/down voting for roadm
9
9
  |------|-------------|
10
10
  | `VoteType` | `'up' \| 'down' \| null` — current vote state for a task |
11
11
  | `VoteState` | Record mapping `taskId → VoteType` |
12
- | `UseRoadmapVotingOptions` | Configuration interface for endpoint and storage key |
12
+ | `UseRoadmapVotingOptions` | Hook configuration options |
13
+
14
+ ### `UseRoadmapVotingOptions`
15
+
16
+ | Option | Default | Description |
17
+ |--------|---------|-------------|
18
+ | `voteApiEndpoint` | `/api/roadmap/vote` | Vote POST endpoint; override for reverse-proxy embedders |
19
+ | `storageKey` | `roadmap_votes_v1` | `localStorage` key; scope per surface to avoid cross-contamination |
13
20
 
14
21
  ### Hook Return Values
15
22
 
@@ -17,16 +24,15 @@ A `localStorage`-backed React hook providing optimistic up/down voting for roadm
17
24
  |-------|------|-------------|
18
25
  | `votes` | `VoteState` | All current votes keyed by `taskId` |
19
26
  | `isLoading` | `boolean` | `true` while hydrating from `localStorage` |
20
- | `getVote` | `(taskId) => VoteType` | Returns current vote for a task |
21
- | `toggleVote` | `async (taskId, voteType) => result` | Casts or removes a vote with optimistic update |
27
+ | `getVote` | `(taskId: string) => VoteType` | Returns current vote for a task |
28
+ | `toggleVote` | `(taskId, voteType) => Promise<{success, newVote, action}>` | Casts or retracts a vote |
22
29
  | `clearVotes` | `() => void` | Clears all votes from state and `localStorage` |
23
30
 
24
- ### Core Behavior
31
+ ### `toggleVote` Logic
25
32
 
26
- - **Optimistic updates** UI reflects vote immediately; reverts on API failure
27
- - **Toggle semantics** clicking the active vote removes it; switching direction sends a remove + add pair to keep server totals consistent
28
- - **Namespace isolation** `storageKey` option allows multiple roadmap surfaces on the same origin without vote cross-contamination
29
- - **Key change safety** — state resets and re-hydrates whenever `storageKey` changes mid-lifecycle
33
+ - **Same direction** removes the existing vote (`action: 'remove'`)
34
+ - **Opposite direction** fires a remove for the old vote first, then adds the new one (keeps server totals consistent)
35
+ - **Optimistic update** state updates immediately; reverts on API failure
30
36
 
31
37
  ## Usage Example
32
38
 
@@ -35,34 +41,38 @@ import { useRoadmapVoting } from './use-roadmap-voting';
35
41
 
36
42
  function RoadmapCard({ taskId }: { taskId: string }) {
37
43
  const { getVote, toggleVote, isLoading } = useRoadmapVoting({
38
- voteApiEndpoint: '/api/roadmap/vote',
44
+ voteApiEndpoint: '/proxy/roadmap/vote',
39
45
  storageKey: 'roadmap_votes_v1_main',
40
46
  });
41
47
 
42
48
  const currentVote = getVote(taskId);
43
49
 
44
- const handleVote = async (type: 'up' | 'down') => {
45
- const { success, newVote } = await toggleVote(taskId, type);
50
+ const handleVote = async (direction: 'up' | 'down') => {
51
+ const { success, newVote } = await toggleVote(taskId, direction);
46
52
  if (!success) console.warn('Vote failed, reverted to:', newVote);
47
53
  };
48
54
 
49
- if (isLoading) return <span>Loading...</span>;
55
+ if (isLoading) return null;
50
56
 
51
57
  return (
52
58
  <div>
53
59
  <button
54
60
  onClick={() => handleVote('up')}
55
- style={{ fontWeight: currentVote === 'up' ? 'bold' : 'normal' }}
61
+ aria-pressed={currentVote === 'up'}
56
62
  >
57
63
  👍
58
64
  </button>
59
65
  <button
60
66
  onClick={() => handleVote('down')}
61
- style={{ fontWeight: currentVote === 'down' ? 'bold' : 'normal' }}
67
+ aria-pressed={currentVote === 'down'}
62
68
  >
63
69
  👎
64
70
  </button>
65
71
  </div>
66
72
  );
67
73
  }
68
- ```
74
+ ```
75
+
76
+ > **Storage key scoping:** When mounting multiple roadmap surfaces on the same origin, use distinct `storageKey` values (e.g. `roadmap_votes_v1_main` vs `roadmap_votes_v1_admin`) to prevent votes from bleeding across surfaces.
77
+
78
+ **Source:** [`use-roadmap-voting.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-roadmap-voting.ts)
@@ -11,7 +11,7 @@ const Switch = React.forwardRef<
11
11
  >(({ className, ...props }, ref) => (
12
12
  <SwitchPrimitives.Root
13
13
  className={cn(
14
- "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
14
+ "peer inline-flex h-6 w-11 shrink-0 items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
15
15
  className,
16
16
  )}
17
17
  {...props}
@@ -1,39 +1,38 @@
1
- <!-- source-hash: a4fe8194703f767fe2216ee1b9351f99 -->
2
- A client-side React component that renders a single support ticket row in the Help Center list, featuring a toggleable expanded drawer for full ticket interaction.
1
+ <!-- source-hash: e00a581ebb9cca5570476237e530ae85 -->
2
+ Renders a single ticket row in the Help Center list, combining a toggleable summary button with an expandable detail drawer (`TicketDetailDrawer`) that provides full ticket interaction (compose, close, reopen).
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### `HelpCenterCard` (default export)
7
- The primary component rendering a ticket summary row as a clickable `<button>` that toggles a `<TicketDetailDrawer>` below it. Key behaviors:
7
+ The primary component. Renders a `<button>` summary row using `DevCardRowContent` (shared with the delivery list for visual consistency). When expanded, mounts a sibling `TicketDetailDrawer` beneath the row. Optimistic (locally-created, not yet server-confirmed) tickets render as non-expandable, dimmed rows.
8
8
 
9
- - **Optimistic rows** are rendered as non-expandable (dimmed, `opacity-60`) until the server confirms the ticket ID
10
- - **Scroll-on-expand** uses `scrollElementIntoView` with a cross-row layout-shift correctioncompensates when a sibling drawer above collapses simultaneously, shifting the page Y position
11
- - **Sticky header offset** (`STICKY_HEADER_OFFSET_PX = 96`) is applied both as `scrollMarginTop` inline style (for browser/anchor scrolls) and as `headerOffset` (for programmatic scroll), keeping them in sync from a single constant
9
+ **Notable behaviors:**
10
+ - Smooth-scroll via `scrollElementIntoView` (rAF-driven, immune to browser scroll-anchor cancellation) on expand runs in a `useEffect`, not the click handler, so the drawer height is committed before measurement
11
+ - Deep-link support: accepts an `id` prop (`ticket-<external_id>`) for `useScrollToHash` hash navigation from chat cards
12
+ - Drawer is a DOM sibling of the toggle button — click events inside the drawer do not bubble to the row's toggle handler
12
13
 
13
- ### `HelpCenterCardProps`
14
- ```typescript
15
- interface HelpCenterCardProps {
16
- ticket: AnyTicket
17
- expanded: boolean
18
- onToggle: (id: string) => void
19
- busy: boolean
20
- supportSystemDown: boolean
21
- onSendMessage: TicketDetailDrawerProps['onSendMessage']
22
- onClose: TicketDetailDrawerProps['onClose']
23
- onReopen: TicketDetailDrawerProps['onReopen']
24
- onActionCollapsed: () => void
25
- }
26
- ```
14
+ ### `mapPriorityScheme` (local helper)
15
+ Maps ticket priority strings to `StatusBadge` color schemes:
27
16
 
28
- ### `mapPriorityScheme` (internal)
29
- Maps ticket priority strings to `StatusBadge` color schemes. Kept separate from the shared `getStatusColorScheme` to avoid conflating workflow status with severity.
30
-
31
- | Priority | Color Scheme |
32
- |----------|-------------|
17
+ | Priority | Scheme |
18
+ |---|---|
33
19
  | `HIGH` / `URGENT` | `error` (red) |
34
20
  | `MEDIUM` | `warning` (yellow) |
35
21
  | `LOW` / unknown | `default` |
36
22
 
23
+ Kept local to avoid conflating workflow status colors (from `getStatusColorScheme`) with severity colors.
24
+
25
+ ## Key Props (`HelpCenterCardProps`)
26
+
27
+ | Prop | Type | Description |
28
+ |---|---|---|
29
+ | `ticket` | `AnyTicket` | Ticket data (real or optimistic) |
30
+ | `expanded` | `boolean` | Controlled open/closed state |
31
+ | `onToggle` | `(id: string) => void` | Called on row click |
32
+ | `busy` | `boolean` | Forwarded to drawer for loading state |
33
+ | `replyError` | `TicketDetailDrawerProps['replyError']` | Persisted reply-failure banner |
34
+ | `id` | `string?` | DOM `id` for hash-based deep linking |
35
+
37
36
  ## Usage Example
38
37
 
39
38
  ```typescript
@@ -44,8 +43,13 @@ Maps ticket priority strings to `StatusBadge` color schemes. Kept separate from
44
43
  busy={isBusy}
45
44
  supportSystemDown={false}
46
45
  onSendMessage={handleSendMessage}
47
- onClose={handleCloseTicket}
48
- onReopen={handleReopenTicket}
46
+ onClose={handleClose}
47
+ onReopen={handleReopen}
49
48
  onActionCollapsed={() => setExpandedId(null)}
49
+ replyError={replyErrors[ticket.external_id]}
50
+ onClearReplyError={() => clearReplyError(ticket.external_id)}
51
+ id={`ticket-${ticket.external_id}`}
50
52
  />
51
- ```
53
+ ```
54
+
55
+ **Source:** [`help-center-card.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/help-center-card.tsx)
@@ -1,38 +1,50 @@
1
- <!-- source-hash: a34cdabdcffe2227fd25cb927e40e785 -->
2
- Thin wrapper around `<ContactForm />` that preconfigures it for Help Center ticket creation, plus a pixel-accurate loading skeleton.
1
+ <!-- source-hash: c50de1033f2620ae73492d4bf1b8bd20 -->
2
+ Thin wrapper around `<ContactForm />` that preconfigures it for Help Center ticket creation, managing local Subject field state and wiring submission to `useTicketActions.submitTicket`.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### `HelpCenterCreateForm`
7
- The primary export. Wraps `<ContactForm />` with ticket-specific configuration:
8
- - Hides irrelevant contact fields (`name`, `email`, `companySize`, `referralSource`, `helpCategory`)
7
+ Main form component that composes `<ContactForm />` with ticket-specific behavior:
8
+ - Hides contact-only fields (`name`, `email`, `companySize`, `referralSource`, `helpCategory`)
9
9
  - Injects a locally-managed `Subject` input via `extraTopField`
10
- - Pre-fills hidden fields from session identity to satisfy Zod validators
11
- - Wires `onCustomSubmit` to `actions.submitTicket(...)` with subject validation before delegating
10
+ - Pre-fills hidden fields from `sessionName`/`sessionEmail` so Zod validators pass silently
11
+ - Routes submission through `actions.submitTicket()` into the optimistic-placeholder flow
12
12
 
13
13
  ### `HelpCenterCreateFormSkeleton`
14
- A loading placeholder that mirrors the real form's dimensions pixel-for-pixel (verified at `lg` breakpoint: 556px wrapper height). Includes 4 hidden `<input type="hidden">` elements to replicate Tailwind's `space-y-*` sibling spacing behavior omitting them shifts the visible stack up by 24px on page load.
14
+ Pixel-accurate loading placeholder that mirrors the real form's layout to prevent layout shift (CLS) while session identity resolves. Includes four hidden `<input>` elements to replicate `space-y-*` sibling counting behavior from `<ContactForm />`.
15
15
 
16
16
  ### `HelpCenterCreateFormProps`
17
17
  | Prop | Type | Description |
18
- |------|------|-------------|
19
- | `actions` | `UseTicketActionsReturn` | Full actions bag; `submitTicket` is consumed |
20
- | `sessionName` | `string` | Pre-resolved identity name from parent |
21
- | `sessionEmail` | `string` | Pre-resolved identity email from parent |
22
- | `supportSystemDown` | `boolean` | Disables all inputs when HubSpot is unavailable |
18
+ |---|---|---|
19
+ | `actions` | `UseTicketActionsReturn` | Full actions bag from `useTicketActions` |
20
+ | `sessionName` | `string` | Resolved session display name |
21
+ | `sessionEmail` | `string` | Resolved session email |
22
+ | `supportSystemDown` | `boolean?` | Disables all inputs when HubSpot is unavailable |
23
23
 
24
24
  ## Usage Example
25
25
 
26
26
  ```typescript
27
- <HelpCenterCreateForm
28
- actions={ticketActions}
29
- sessionName={identity.name}
30
- sessionEmail={identity.email}
31
- supportSystemDown={ticketActions.onSupportSystemDown}
32
- />
33
-
34
- // While identity.isLoading:
35
- <HelpCenterCreateFormSkeleton />
27
+ import { HelpCenterCreateForm, HelpCenterCreateFormSkeleton } from './help-center-create-form'
28
+ import { useTicketActions } from './hooks/use-ticket-actions'
29
+ import { useChatIdentity } from '../hooks/use-chat-identity'
30
+
31
+ function HelpCenterList() {
32
+ const actions = useTicketActions()
33
+ const identity = useChatIdentity()
34
+
35
+ if (identity.isLoading) {
36
+ return <HelpCenterCreateFormSkeleton />
37
+ }
38
+
39
+ return (
40
+ <HelpCenterCreateForm
41
+ actions={actions}
42
+ sessionName={identity.user?.name ?? ''}
43
+ sessionEmail={identity.sessionEmail}
44
+ supportSystemDown={actions.onSupportSystemDown}
45
+ />
46
+ )
47
+ }
36
48
  ```
37
49
 
38
- > **Note:** `sessionName`/`sessionEmail` must be passed from the parent rather than re-calling `useChatIdentity` inside this component — a second hook call mounts with `user = null`, causing react-hook-form to lock `defaultValues.email` to an empty string for the form's lifetime, silently failing Zod validation on submit.
50
+ > **Note:** Pass `sessionName`/`sessionEmail` from the parent rather than calling `useChatIdentity` again inside this component — a second hook call mounts with stale defaults, causing Zod to silently reject submission with an empty email.