@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,40 +1,51 @@
1
- <!-- source-hash: 827d4c23e1bcd10b78b97232f2822fa0 -->
2
- Renders the full Help Center surface for authenticated users, providing ticket listing, creation, filtering, pagination, and optimistic UI updates. Serves as the primary component mounted on the `/tickets` route in OpenFrame.
1
+ <!-- source-hash: ec12c761ba72a6ce29047ad308561c0d -->
2
+ Renders the full Help Center surface for the OpenFrame `/tickets` page, managing ticket listing, creation, optimistic updates, and drawer state via URL params.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`HelpCenterList`** — Public entry point. Guards against unauthenticated access (renders skeleton during identity load, `EmptyState` for anon users), then delegates to `HelpCenterListAuthed`.
7
- - **`HelpCenterListAuthed`** Internal component handling all authenticated state: merges optimistic + server tickets, manages expanded row, wires mutation callbacks, and composes the full page layout via `<DevSectionPage>`.
8
- - **`HelpCenterListProps`** Accepts an optional `toast` override for testability.
9
-
10
- **Key hooks used:**
11
- - `useTicketsList` — fetches paginated tickets by `search`, `status`, `page`
12
- - `useTicketActions` — mutations (submit, close, reopen, send message) with optimistic callbacks
13
- - `useChatIdentity` resolves session email/name; guards the auth gate
6
+ ### `HelpCenterList` (default export)
7
+ Top-level component that gates rendering on auth state:
8
+ - **Loading** renders `DevSectionPage` with skeleton placeholders
9
+ - **Anon** → renders a sign-in `EmptyState`
10
+ - **Authed** delegates to `HelpCenterListAuthed` with resolved session identity
11
+
12
+ ### `HelpCenterListAuthed` (internal)
13
+ Core authenticated view handling:
14
+ - **`useTicketsList`** — fetches paginated tickets from URL params (`?search=`, `?status=`, `?page=`); live-polls while a drawer is open
15
+ - **`useTicketActions`** — mutation handlers with optimistic prepend/remove callbacks
16
+ - **Optimistic state** — local `useState` (not TanStack cache) so pending placeholders survive refetches triggered by filter changes
17
+ - **Drawer state** — derived from `?ticket=<external_id>` URL param; a single `setOpenTicket` callback reads/writes it via `router.replace`
18
+
19
+ ### `HelpCenterListProps`
20
+ | Prop | Type | Description |
21
+ |---|---|---|
22
+ | `toast` | `typeof defaultToast` | Test-friendly toast override |
23
+ | `backButton` | `{label?, href?} \| false` | Forwarded to `DevSectionPage` chrome |
24
+ | `title` | `string` | Override hero title (e.g. `"Support Tickets"`) |
25
+ | `shell` | `boolean` | Pass `false` when host layout provides the page container |
14
26
 
15
27
  ## Usage Example
16
28
 
17
29
  ```typescript
18
- // Mounted directly on the /tickets page (OpenFrame):
19
- import { HelpCenterList } from './help-center-list'
30
+ // Standard mount on the /tickets route
31
+ import { HelpCenterList } from '@openframe/lib'
20
32
 
21
33
  export default function TicketsPage() {
22
34
  return <HelpCenterList />
23
35
  }
24
36
 
25
- // With toast override for testing:
26
- import { mockToast } from '../test-utils'
27
-
28
- render(<HelpCenterList toast={mockToast} />)
37
+ // Embedded in a custom host layout with overrides
38
+ export default function SupportPage() {
39
+ return (
40
+ <HelpCenterList
41
+ title="Support Tickets"
42
+ backButton={{ label: 'Back to Dashboard', href: '/dashboard' }}
43
+ shell={false}
44
+ />
45
+ )
46
+ }
29
47
  ```
30
48
 
31
- ## State Model
32
-
33
- ```text
34
- URL params → search, status, page (read by useTicketsList)
35
- optimisticTickets → local useState (prepend on submit, remove on settle)
36
- expandedTicketId → local useState (single drawer open at a time)
37
- supportSystemDown → local useState (disables create form on error)
38
- ```
49
+ > **Deep-linking:** Append `?ticket=<external_id>` to auto-open a specific ticket drawer on load. All open/close/share flows route through this single URL param.
39
50
 
40
- > **Note:** Optimistic placeholders are kept in local state (not the TanStack query cache) so URL filter changes don't discard in-flight submissions mid-render.
51
+ **Source:** [`help-center-list.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/help-center-list.tsx)
@@ -1,65 +1,50 @@
1
- <!-- source-hash: 9ab6eac897ae7fbb7ae6454201513bed -->
2
- Barrel export file for the tickets feature module, re-exporting all public components, hooks, and types related to ticket management and the Help Center UI.
1
+ <!-- source-hash: b1b3afa2679df984c26b9b2281cbbe54 -->
2
+ Barrel export file for the tickets domain, re-exporting all public components, hooks, and types from their respective modules.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### Components
7
- | Export | Description |
8
- |--------|-------------|
9
- | `TicketCenter` | Main ticket management surface |
10
- | `TicketOpenForm` | Form for opening new tickets |
11
- | `TicketRow` | Individual ticket row renderer |
12
- | `TicketDetailDrawer` | Slide-out drawer for ticket details |
13
- | `TicketLinkedDeliveryCard` | Card linking a ticket to a delivery |
14
- | `HelpCenterList` | Full-page customer-facing ticket list, used by OpenFrame's `/tickets` route |
15
- | `HelpCenterCard` | Expandable card for a single Help Center entry |
16
- | `HelpCenterCreateForm` / `HelpCenterCreateFormSkeleton` | Ticket creation form with loading skeleton |
17
-
18
- ### Hooks
19
- | Export | Description |
20
- |--------|-------------|
21
- | `useTicketsList` | Fetches and manages the tickets list state |
22
- | `useTicketActions` | Provides ticket mutation actions; `mapTicketActionError` maps error codes |
23
- | `useTicketEngagements` | Manages ticket engagement threads and file attachments |
24
-
25
- ### Types & Constants
26
- | Export | Description |
27
- |--------|-------------|
28
- | `TicketData`, `AnyTicket`, `OptimisticTicket` | Core ticket data shapes |
29
- | `TicketClickupSummary` | ClickUp-specific ticket summary |
30
- | `TicketActionErrorCode`, `MappedTicketActionError` | Typed error handling |
31
- | `TICKET_TOAST_COPY` | Toast notification copy constants |
32
- | `isOptimistic` | Type guard for optimistic ticket entries |
33
- | `TicketRef`, `TicketEngagement`, `TicketEngagementFile` | Supporting types |
6
+ **Components**
7
+ - `TicketCenter` Top-level ticket management surface
8
+ - `TicketOpenForm` — Form for opening new tickets
9
+ - `TicketRow` Individual ticket list row
10
+ - `TicketDetailDrawer` Slide-out drawer for ticket details
11
+ - `TicketLinkedDeliveryCard` Card linking a ticket to a delivery
12
+ - `TicketReplyComposer` Composer for ticket replies
13
+ - `HelpCenterList` Full-page customer-facing ticket list; mounts inside `<PageShell>` for third-party embedders
14
+ - `HelpCenterCard` Individual help center ticket card
15
+ - `HelpCenterCreateForm` / `HelpCenterCreateFormSkeleton` Creation form with loading skeleton
16
+
17
+ **Hooks**
18
+ - `useTicketsList` — Fetches and manages the tickets list
19
+ - `useTicketActions` Ticket CRUD actions; exposes `mapTicketActionError` helper and `UseTicketActionsReturn` type
20
+ - `useTicketEngagements` — Manages ticket engagement threads and file attachments
21
+
22
+ **Types & Constants**
23
+ - `TicketData`, `OptimisticTicket`, `AnyTicket` Core ticket data shapes
24
+ - `TicketClickupSummary` — ClickUp integration summary type
25
+ - `TicketActionErrorCode`, `MappedTicketActionError` — Typed error handling
26
+ - `TICKET_TOAST_COPY` Toast notification strings
27
+ - `isOptimistic` — Type guard for optimistic ticket entries
34
28
 
35
29
  ## Usage Example
36
30
 
37
31
  ```typescript
38
32
  import {
39
33
  HelpCenterList,
40
- TicketDetailDrawer,
41
34
  useTicketsList,
42
35
  useTicketActions,
43
36
  isOptimistic,
44
37
  type AnyTicket,
45
- } from '@/features/tickets'
38
+ } from '@openframe-oss-lib/tickets'
46
39
 
47
- function TicketsPage() {
40
+ function MyHelpCenter() {
48
41
  const { tickets } = useTicketsList()
49
42
  const { closeTicket } = useTicketActions()
50
43
 
51
- return (
52
- <HelpCenterList>
53
- {tickets.map((ticket: AnyTicket) => (
54
- <TicketDetailDrawer
55
- key={isOptimistic(ticket) ? ticket.optimisticId : ticket.id}
56
- ticket={ticket}
57
- onClose={() => closeTicket(ticket.id)}
58
- />
59
- ))}
60
- </HelpCenterList>
61
- )
44
+ const confirmed = tickets.filter((t: AnyTicket) => !isOptimistic(t))
45
+
46
+ return <HelpCenterList tickets={confirmed} onClose={closeTicket} />
62
47
  }
63
48
  ```
64
49
 
65
- > **Note:** Third-party embedders can mount `<HelpCenterList />` inside their own `<PageShell>` to get the full Help Center UX without the OpenFrame route wrapper.
50
+ > Source: [`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
@@ -1,51 +1,44 @@
1
- <!-- source-hash: 342918f6f476b195a4bfc05a9be396e0 -->
2
- Customer-facing ticket management surface that renders a full ticket workflow (open, view, reply, close, reopen) for authenticated users, and an identity-gated sign-in prompt for anonymous visitors.
1
+ <!-- source-hash: b3b2b6747bc982e9566fa90a074c4272 -->
2
+ Customer-facing ticket management surface component that gates rendering on authentication state and composes ticket listing, creation, and action handling into a single embeddable view.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export / Symbol | Description |
7
- |---|---|
8
- | `TicketCenter` | Root exported component; handles identity resolution and delegates to `TicketCenterAuthed` or fallback states |
9
- | `TicketCenterAuthed` | Inner authenticated shell; owns optimistic state, query cache mutations, and composes the form + list |
10
- | `TicketCenterSkeleton` | Full-page skeleton shown during the first-mount identity resolution window |
11
- | `TicketListSkeleton` | List-only skeleton shown while ticket data is loading |
12
- | `TicketCenterProps` | Public prop interface only exposes a `toast` override for testability |
6
+ | Export | Type | Description |
7
+ |--------|------|-------------|
8
+ | `TicketCenter` | Component | Public entry point — resolves identity and delegates to the authed view or a sign-in gate |
9
+ | `TicketCenterProps` | Interface | `toast` override for test-friendly injection |
10
+ | `TicketCenterAuthed` | Internal Component | Full ticket UI: list, form, optimistic state, and row actions |
11
+ | `TicketCenterSkeleton` | Internal Component | Full-page skeleton shown during initial identity resolution |
12
+ | `TicketListSkeleton` | Internal Component | Row-level skeletons shown while the ticket list loads |
13
+
14
+ ### State managed by `TicketCenterAuthed`
15
+
16
+ | State | Purpose |
17
+ |-------|---------|
18
+ | `optimisticTickets` | Local optimistic placeholders prepended above server rows until confirmed |
19
+ | `expandedTicketId` | Tracks which `TicketRow` is currently expanded |
20
+ | `supportSystemDown` | Disables the form and row actions when the upstream ticketing system is unavailable |
13
21
 
14
22
  ## Usage Example
15
23
 
24
+ Mount at your app root alongside a `QueryClientProvider` and `ChatRuntimeContext.Provider` — this component provides neither:
25
+
16
26
  ```typescript
17
- // Minimal embed relies on a QueryClientProvider + ChatRuntimeContext.Provider
18
- // already mounted at the app root (same pattern as <EmbeddableChat />)
19
- import { TicketCenter } from '@/components/ticket-center/ticket-center'
20
-
21
- export function SupportPage() {
22
- return (
23
- <main>
24
- <TicketCenter />
25
- </main>
26
- )
27
- }
27
+ import { TicketCenter } from '@openframe-oss-lib/ticket-center'
28
28
 
29
- // Test-friendly overrideinject a mock toast to assert notifications
30
- import { TicketCenter } from '@/components/ticket-center/ticket-center'
31
- import { mockToast } from '@/test/helpers'
29
+ // Minimal embedtoast defaults to the lib's singleton
30
+ export function TicketsPage() {
31
+ return <TicketCenter />
32
+ }
32
33
 
33
- render(<TicketCenter toast={mockToast} />)
34
+ // With toast override (useful in tests or custom notification systems)
35
+ export function TicketsPageCustomToast() {
36
+ return <TicketCenter toast={myCustomToast} />
37
+ }
34
38
  ```
35
39
 
36
- ## Identity Gate Behavior
37
-
38
- ```mermaid
39
- flowchart TD
40
- A["TicketCenter mounts"] --> B{"identity.isLoading?"}
41
- B -->|yes| C["TicketCenterSkeleton"]
42
- B -->|no| D{"authTier === anon\nor no email?"}
43
- D -->|yes| E["EmptyState: Sign in prompt"]
44
- D -->|no| F["TicketCenterAuthed"]
45
- F --> G["TicketOpenForm"]
46
- F --> H["TicketRow list\noptimistic + server merged"]
47
- ```
40
+ > **Identity gate:** Anonymous visitors see only a sign-in `EmptyState`. No list fetch or form is rendered, keeping the network tab clean and preventing 401s on submit.
48
41
 
49
- ## Optimistic Update Strategy
42
+ ## Source
50
43
 
51
- Optimistic tickets are kept in **local state** (not the React Query cache) so a background refetch cannot overwrite pending placeholders mid-flight. The merged view is always `[...optimisticTickets, ...serverTickets]`, placing new pending rows at the top until the server response confirms or rejects them.
44
+ [`ticket-center.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-center.tsx)
@@ -1,48 +1,38 @@
1
- <!-- source-hash: 8a7542421be9aaeac5211827f8967375 -->
2
- Expanded drawer component for a single ticket's detail view, rendering the conversation timeline, metadata, and status-dependent actions (reply/close/reopen).
1
+ <!-- source-hash: 98bda0d90cb3c746f4f65c2eb703add4 -->
2
+ Renders the expanded drawer view for a single support ticket, including the conversation timeline, metadata, and status-dependent actions (reply composer or reopen). Extracted from `ticket-row.tsx` to be shared across both the lib's `TicketRow` and the hub's `TicketCard` compositions.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `TicketDetailDrawer` (main export)
7
- The root drawer component that composes the full expanded ticket view:
8
- - Renders optional linked ClickUp delivery card
9
- - Delegates conversation rendering to `TicketTimelinePanel`
10
- - Conditionally renders `OpenActions` or `ReopenAction` based on ticket status
11
-
12
- ### `TicketTimelinePanel`
13
- Internal component that builds a chronological conversation thread:
14
- - Splits legacy `ticket.body` on ` --- ` separators for historical compatibility
15
- - Fetches Note engagements via `useTicketEngagements`
16
- - Resolves customer identity with a 4-level precedence chain (live identity → mirror name → email → "You")
17
- - Shows skeleton loader during initial fetch; `EmptyState` when no content exists
18
-
19
- ### `TicketRef`
20
- Minimal identity bundle (`id` + `external_id`) threaded through mutation callbacks — `external_id` targets HubSpot, `id` drives React/TanStack cache keys.
6
+ - **`TicketDetailDrawer`** — Root component. Renders the assigned agent row, optional linked ClickUp delivery card, conversation timeline, reply-failure banner, and status-gated action area (composer for open tickets, reopen button for closed).
7
+ - **`TicketTimelinePanel`** Internal component. Fetches and renders the chronological conversation feed via `useTicketEngagements`, with Slack-style auto-scroll (`useStickToBottom`). Suppresses duplicate "Original message" body turns when a matching customer engagement already exists.
8
+ - **`TicketRef`** Exported type. Identity bundle `{ id, external_id }` threaded through action callbacks.
9
+ - **`TicketDetailDrawerProps`** Exported interface. Full prop surface including `onSendMessage`, `onClose`, `onReopen`, `replyError`, and `onClearReplyError`.
21
10
 
22
11
  ## Usage Example
23
12
 
24
13
  ```typescript
14
+ import {
15
+ TicketDetailDrawer,
16
+ type TicketRef,
17
+ } from '@openframe-oss-lib/ticket-detail-drawer'
18
+
25
19
  <TicketDetailDrawer
26
20
  ticket={ticket}
27
21
  busy={isMutating}
28
22
  supportSystemDown={false}
29
- onSendMessage={async (ref, text, attachments) => {
30
- await sendNoteEngagement(ref.external_id, text, attachments)
31
- return true
23
+ onSendMessage={async (ref: TicketRef, text, attachments) => {
24
+ return await sendReply(ref.external_id, text, attachments)
32
25
  }}
33
- onClose={async (ref, resolution) => {
34
- await closeTicket(ref.external_id, resolution)
35
- return true
26
+ onClose={async (ref: TicketRef) => {
27
+ return await closeTicket(ref.external_id)
36
28
  }}
37
- onReopen={async (ref) => {
38
- await reopenTicket(ref.external_id)
39
- return true
29
+ onReopen={async (ref: TicketRef) => {
30
+ return await reopenTicket(ref.external_id)
40
31
  }}
41
32
  onActionCollapsed={() => setDrawerOpen(false)}
33
+ replyError={replyError}
34
+ onClearReplyError={() => clearReplyError(ticket.external_id)}
42
35
  />
43
36
  ```
44
37
 
45
- ## Notes
46
- - All local state (composer text, attachments, close-confirm dialog) is owned here; parent owns ticket data and mutation callbacks
47
- - Optimistic tickets (pre-server-confirmation) skip the engagement fetch until a real `external_id` is available
48
- - The timeline intentionally has no inner scroll — content flows with the page to avoid competing scroll surfaces
38
+ **Source:** [`ticket-detail-drawer.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-detail-drawer.tsx)
@@ -1,41 +1,39 @@
1
- <!-- source-hash: b30cd8d851756508ef3f90328778876a -->
2
- A client-side React form component for creating new support tickets, rendered at the top of the `<TicketCenter />` view. Composes existing OSS-lib primitives for subject input, message textarea, file attachments, and submit action with multi-condition gating.
1
+ <!-- source-hash: 6d7cfc4afa4176d11ba07ade11300b10 -->
2
+ Form component that renders the "Open Ticket" submission UI at the top of `<TicketCenter />`, composing existing oss-lib primitives for subject input, message textarea, file attachments, and submit handling with multi-condition gating.
3
3
 
4
4
  ## Key Components
5
5
 
6
- ### `TicketOpenFormProps`
6
+ ### `TicketOpenForm`
7
+
8
+ Main exported component. Renders a two-column `<Card>` layout with a description panel on the left and the form fields on the right.
9
+
10
+ **Props (`TicketOpenFormProps`):**
11
+
7
12
  | Prop | Type | Description |
8
- |------|------|-------------|
13
+ |---|---|---|
9
14
  | `onSubmit` | `(input) => Promise<boolean>` | Wired to `useTicketActions().submitTicket`; returns `true` on success to trigger form reset |
10
- | `isSubmitting` | `boolean` | Parent-owned single-flight submission flag |
11
- | `supportSystemDown` | `boolean` | Disables all inputs and submit when the support system is offline |
12
-
13
- ### Submit Gating (`canSubmit`)
14
- The submit button is enabled only when **all** conditions pass:
15
-
16
- ```mermaid
17
- graph TD
18
- A["canSubmit?"] --> B["not isSubmitting"]
19
- A --> C["not supportSystemDown"]
20
- A --> D["not hasInflightUploads"]
21
- A --> E["subject.trim() not empty"]
22
- A --> F["content.trim() not empty"]
23
- A --> G["content within TICKET_TEXT_MAX_CHARS"]
24
- ```
15
+ | `isSubmitting` | `boolean` | Single-flight guard owned by the parent |
16
+ | `supportSystemDown` | `boolean` | Disables all inputs and shows an error banner when `true` |
17
+
18
+ **Submit gating `canSubmit` is `true` only when all of the following hold:**
19
+ - Subject and content are non-empty after trim
20
+ - Content is within `TICKET_TEXT_MAX_CHARS`
21
+ - No uploads are in-flight (`hasInflightUploads === false`)
22
+ - `isSubmitting` is `false`
23
+ - `supportSystemDown` is `false`
24
+
25
+ **Character counter** visible once content reaches 80% of `TICKET_TEXT_MAX_CHARS`; turns red when the limit is exceeded.
25
26
 
26
- ### Internal State
27
- - `subject` / `content` — controlled inputs, cleared on successful submit
28
- - `attachments` — managed via `useChatAttachments()`, sharing the same upload pipeline as the chat composer
27
+ **Attachment handling** — delegates entirely to `useChatAttachments`, reusing the same upload pipeline as the chat composer.
29
28
 
30
29
  ## Usage Example
31
30
 
32
31
  ```typescript
33
- import { TicketOpenForm } from './ticket-open-form'
32
+ import { TicketOpenForm } from '@openframe/oss-lib'
34
33
  import { useTicketActions } from './hooks/use-ticket-actions'
35
34
 
36
35
  function TicketCenter() {
37
- const { submitTicket, isSubmitting } = useTicketActions()
38
- const supportSystemDown = false
36
+ const { submitTicket, isSubmitting, supportSystemDown } = useTicketActions()
39
37
 
40
38
  return (
41
39
  <TicketOpenForm
@@ -47,4 +45,4 @@ function TicketCenter() {
47
45
  }
48
46
  ```
49
47
 
50
- > A character counter appears once content reaches 80% of `TICKET_TEXT_MAX_CHARS` and turns red if the limit is exceeded, blocking submission.
48
+ On successful submission (`onSubmit` resolves `true`), the form automatically clears subject, content, and all attachments.
@@ -0,0 +1,51 @@
1
+ <!-- source-hash: d48a2a82c23200567034e210dc847d5a -->
2
+ Reply composer component for open support tickets, combining a `ChatInput` with file attachment support and a close-ticket confirmation dialog.
3
+
4
+ ## Key Components
5
+
6
+ ### `TicketReplyComposer`
7
+
8
+ The main exported component. Renders a unified composer layout with:
9
+
10
+ - **`ChatAttachmentChipStrip`** — staged file chips displayed above the input
11
+ - **`ChatInput`** — primary text input with send button; disabled during in-flight uploads or when the support system is down
12
+ - **`ChatAttachmentAddButton`** — attachment trigger in the bottom toolbar (hidden when `supportSystemDown`)
13
+ - **`Close ticket` button** — opens an `AlertDialog` to confirm closure with an optional resolution note
14
+
15
+ ### `TicketReplyComposerProps`
16
+
17
+ | Prop | Type | Description |
18
+ |---|---|---|
19
+ | `ticket` | `AnyTicket` | The ticket being replied to |
20
+ | `busy` | `boolean` | Disables input while a send is in progress |
21
+ | `supportSystemDown` | `boolean` | Signals connection loss; swaps in a placeholder and hides attachments |
22
+ | `onSendMessage` | `TicketDetailDrawerProps['onSendMessage']` | Async send handler; returns `boolean` indicating success |
23
+ | `onClose` | `TicketDetailDrawerProps['onClose']` | Async close handler; receives an optional resolution string |
24
+
25
+ ## Usage Example
26
+
27
+ ```typescript
28
+ <TicketReplyComposer
29
+ ticket={ticket}
30
+ busy={isSending}
31
+ supportSystemDown={!isConnected}
32
+ onSendMessage={async (ref, text, attachments) => {
33
+ const ok = await sendReply(ref.id, text, attachments)
34
+ return ok
35
+ }}
36
+ onClose={async (ref, resolution) => {
37
+ await closeTicket(ref.id, resolution)
38
+ }}
39
+ />
40
+ ```
41
+
42
+ ## Behavior Notes
43
+
44
+ - Draft text and staged files **survive a failed send** — `ChatInput` retains text; attachments are only cleared on success
45
+ - Close confirmation uses a **non-destructive accent button** (closing is reversible via Reopen)
46
+ - `autoFocus` uses `{ preventScroll: true }` internally, so the drawer's scroll-to-top animation is not interrupted
47
+ - The drawer is **not collapsed** after closing a ticket (no `onActionCollapsed`) to preserve the in-place status badge update
48
+
49
+ ## Source
50
+
51
+ [`ticket-reply-composer.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-reply-composer.tsx)
@@ -1,12 +1,25 @@
1
- <!-- source-hash: a4bd0ac033c0ff89f6d4e4e0f75efebc -->
2
- Renders a single ticket row with an expandable inline drawer, combining a compact summary tile with a collapsible detail panel for the `TicketCenter` embed.
1
+ <!-- source-hash: 0cb3a7a072b68a1f0cb377074de90f95 -->
2
+ Renders a single ticket row combining a compact summary tile with an expandable detail drawer, managing toggle interactions and scroll positioning within a ticket list.
3
3
 
4
4
  ## Key Components
5
5
 
6
- - **`TicketRow`** — Main export. Composes a `<ChatTicketItem>` summary tile and a `<CollapsibleContent>` wrapping `<TicketDetailDrawer>`. Controlled via `expanded`/`onToggle` props owned by the parent `<TicketCenter>`.
7
- - **`TicketRowProps`** Interface defining ticket data, expansion state, action handlers (`onSendMessage`, `onClose`, `onReopen`, `onActionCollapsed`), and UI flags (`busy`, `supportSystemDown`).
8
- - **`handleClick`**Memoized click handler that toggles expansion and smooth-scrolls the row into view, pre-adjusting target Y position to account for any drawer above that is simultaneously collapsing.
9
- - **`tileData`** Derived `ChatTicketItemData` object mapping raw `AnyTicket` fields to display values, including HubSpot pipeline stage label, relative timestamps, and ClickUp linked task status chips.
6
+ ### `TicketRow`
7
+ The primary exported component that composes:
8
+ - **`<ChatTicketItem>`**compact summary tile acting as the collapsible trigger (avoids invalid button-in-button nesting via `onClick` prop)
9
+ - **`<CollapsibleContent>` + `<TicketDetailDrawer>`** animated drawer rendered only when this row is the active expanded one
10
+ - **`scrollElementIntoView`** — scroll correction that pre-subtracts a collapsing sibling drawer's height to land at the correct post-animation position
11
+
12
+ ### `TicketRowProps`
13
+ | Prop | Description |
14
+ |---|---|
15
+ | `ticket` | `AnyTicket` — real or optimistic placeholder |
16
+ | `expanded` | Whether this row's drawer is open |
17
+ | `onToggle` | Parent-owned expand/collapse state setter |
18
+ | `busy` | Disables drawer actions during in-flight requests |
19
+ | `supportSystemDown` | Surfaces degraded-mode UI in the drawer |
20
+ | `onSendMessage / onClose / onReopen` | Forwarded to `<TicketDetailDrawer>` |
21
+ | `onActionCollapsed` | Called after close/reopen so parent can collapse stale state |
22
+ | `id` | DOM `id` for deep-link scroll targets (e.g. `ticket-<external_id>`) |
10
23
 
11
24
  ## Usage Example
12
25
 
@@ -14,17 +27,19 @@ Renders a single ticket row with an expandable inline drawer, combining a compac
14
27
  <TicketRow
15
28
  ticket={ticket}
16
29
  expanded={expandedTicketId === ticket.id}
17
- onToggle={(id) => setExpandedTicketId((prev) => (prev === id ? null : id))}
18
- busy={isBusy}
30
+ onToggle={setExpandedTicketId}
31
+ busy={isMutating}
19
32
  supportSystemDown={false}
20
33
  onSendMessage={handleSendMessage}
21
34
  onClose={handleClose}
22
35
  onReopen={handleReopen}
23
36
  onActionCollapsed={() => setExpandedTicketId(null)}
37
+ id={`ticket-${ticket.external_id}`}
24
38
  />
25
39
  ```
26
40
 
27
- ## Notes
41
+ > **Optimistic placeholders** (`isOptimistic(ticket) === true`) render the summary tile as non-interactive — click handler and drawer are suppressed until the real ticket ID arrives from the server.
42
+
43
+ ## Source
28
44
 
29
- - Optimistic tickets (pre-server-confirmation) disable click interaction and suppress drawer rendering since a real ticket ID is not yet available.
30
- - The scroll adjustment logic mirrors `<HelpCenterCard>` — queries `div[id^="ticket-drawer-"]` to find an open drawer above the clicked row and subtracts its height from the raw scroll target, ensuring the final scroll position matches the post-collapse layout.
45
+ [`ticket-row.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/ticket-row.tsx)
@@ -1,19 +1,35 @@
1
- <!-- source-hash: 63b1778d9923d2e7914bfaebf859d9ff -->
2
- Defines the shared type contract for the ticket management feature, including wire shapes for ticket data returned from the `POST /api/chat/agent/find-ticket` endpoint, optimistic UI helpers, error handling types, and UI constants.
1
+ <!-- source-hash: eaad96fbee2b55e506fa06a65db08f00 -->
2
+ Shared type contracts, constants, and utilities for the OpenFrame ticket system consumed by both client-side hooks and UI components to describe ticket wire shapes, cache structure, error codes, and UX constants.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Kind | Description |
7
- |--------|------|-------------|
8
- | `TicketData` | Interface | Wire shape of a ticket row from the find-ticket API, mirroring the server's `FindTicketResult` projection |
9
- | `TicketClickupSummary` | Interface | Compact projection of a linked ClickUp task for the ticket drawer's delivery card |
10
- | `OptimisticTicket` | Interface | Extends `TicketData` with `_optimistic: true` for pre-flight UI placeholders |
11
- | `AnyTicket` | Type | Union of `TicketData \| OptimisticTicket` |
12
- | `isOptimistic()` | Type Guard | Narrows `AnyTicket` to `OptimisticTicket` |
13
- | `TicketActionErrorCode` | Type | Discriminated string union of stable server-side error codes |
14
- | `MappedTicketActionError` | Interface | Structured error envelope with toast copy, cache hints, and retry metadata |
15
- | `TICKET_TEXT_MAX_CHARS` | Constant | Client-side cap of `5000` chars for ticket text inputs |
16
- | `TOAST_COPY` | Constant | Centralized `as const` map of all user-visible toast strings |
6
+ ### Interfaces
7
+
8
+ | Name | Purpose |
9
+ |---|---|
10
+ | `TicketData` | Wire shape of a row from `POST /api/chat/agent/find-ticket`. Mirrors the server's `FindTicketResult` projection intentionally. |
11
+ | `TicketAssignedOwner` | Resolved agent profile (name, email, avatar) joined from `hubspot_owners` `profiles`. |
12
+ | `TicketClickupSummary` | Compact projection of a linked ClickUp task for the "Linked delivery" drawer card. |
13
+ | `OptimisticTicket` | Extends `TicketData` with `_optimistic: true` for pre-flight list entries before server confirmation. |
14
+ | `TicketsCacheSlot` | Shape of a `['tickets', …]` TanStack Query cache slot prevents the `t.map is not a function` class of cache mutation bugs. |
15
+ | `MappedTicketActionError` | Structured error envelope with a typed code, toast copy, and retry/cache-eviction hints. |
16
+
17
+ ### Types & Union
18
+
19
+ - **`AnyTicket`** — `TicketData | OptimisticTicket`
20
+ - **`TicketActionErrorCode`** — discriminated union of 11 server-side error codes routed through `mapTicketActionError`
21
+
22
+ ### Functions
23
+
24
+ - **`isOptimistic(t)`** — type guard narrowing `AnyTicket` to `OptimisticTicket`
25
+
26
+ ### Constants
27
+
28
+ | Name | Value | Purpose |
29
+ |---|---|---|
30
+ | `TICKET_TEXT_MAX_CHARS` | `5000` | Client-side cap on ticket/comment text length |
31
+ | `TICKET_LIVE_POLL_MS` | `8000` | Shared refetch interval (ms) for list + conversation polls on open drawers |
32
+ | `TOAST_COPY` | `as const` object | Centralized, QA-auditable toast strings for all ticket actions |
17
33
 
18
34
  ## Usage Example
19
35
 
@@ -21,37 +37,39 @@ Defines the shared type contract for the ticket management feature, including wi
21
37
  import {
22
38
  AnyTicket,
23
39
  isOptimistic,
24
- MappedTicketActionError,
40
+ TicketsCacheSlot,
41
+ TICKET_LIVE_POLL_MS,
25
42
  TICKET_TEXT_MAX_CHARS,
26
43
  TOAST_COPY,
27
- } from './types'
28
-
29
- // Narrow optimistic rows before rendering the drawer
30
- function renderTicket(ticket: AnyTicket) {
31
- if (isOptimistic(ticket)) {
32
- return <SkeletonDrawer />
33
- }
34
- return <TicketDrawer data={ticket} />
35
- }
44
+ } from '@openframe/oss-lib'
36
45
 
37
- // Validate user input before submission
38
- if (content.length > TICKET_TEXT_MAX_CHARS) {
39
- throw new Error(`Max ${TICKET_TEXT_MAX_CHARS} characters allowed`)
46
+ // Type-guard before rendering optimistic rows
47
+ function renderTicket(t: AnyTicket) {
48
+ if (isOptimistic(t)) return <SkeletonRow />
49
+ return <TicketRow data={t} />
40
50
  }
41
51
 
42
- // Handle a mapped server error
43
- function handleError(err: MappedTicketActionError) {
44
- if (err.supportSystemDown) {
45
- showSupportDownBanner()
46
- }
47
- if (err.removeRowFromCache) {
48
- removeTicketFromList(ticketId)
49
- }
50
- toast({ title: err.message })
52
+ // Safe cache mutation always project through TicketsCacheSlot
53
+ queryClient.setQueriesData<TicketsCacheSlot>(
54
+ { queryKey: ['tickets'] },
55
+ (old) => ({
56
+ ...old,
57
+ tickets: old?.tickets?.map((t) =>
58
+ t.id === updatedId ? { ...t, status: 'CLOSED' } : t
59
+ ),
60
+ })
61
+ )
62
+
63
+ // Enforce text cap before submitting
64
+ if (body.length > TICKET_TEXT_MAX_CHARS) {
65
+ showError(`Max ${TICKET_TEXT_MAX_CHARS} characters`)
51
66
  }
52
67
 
53
- // Use centralized toast copy on success
54
- toast(TOAST_COPY.open_success)
68
+ // Consistent poll cadence across list + conversation hooks
69
+ useQuery({ queryKey: ['tickets'], refetchInterval: TICKET_LIVE_POLL_MS })
70
+
71
+ // Centralized toast copy
72
+ toast(TOAST_COPY.close_success)
55
73
  ```
56
74
 
57
- > **Note:** `TicketData` is intentionally duplicated from the server's `FindTicketResult`. If `FIND_TICKET_SELECT` gains a new column server-side, this interface must be updated to match.
75
+ **Source:** [`types.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/types.ts)