@flamingo-stack/openframe-frontend-core 0.0.481 → 0.0.482

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (838) hide show
  1. package/dist/{chunk-H6DFCF44.cjs → chunk-22AED5IC.cjs} +82 -82
  2. package/dist/{chunk-H6DFCF44.cjs.map → chunk-22AED5IC.cjs.map} +1 -1
  3. package/dist/{chunk-MGKCS6KS.js → chunk-3WCARCI4.js} +2 -2
  4. package/dist/{chunk-LNKWY74S.cjs → chunk-4HL6UENH.cjs} +5 -5
  5. package/dist/{chunk-LNKWY74S.cjs.map → chunk-4HL6UENH.cjs.map} +1 -1
  6. package/dist/{chunk-Y3Y2DLNO.js → chunk-6UGYBCEN.js} +3 -3
  7. package/dist/{chunk-BBUEY73L.js → chunk-7I5B5PQ4.js} +6269 -5339
  8. package/dist/chunk-7I5B5PQ4.js.map +1 -0
  9. package/dist/{chunk-PSPWT2Q5.js → chunk-7LWXWXEY.js} +4 -4
  10. package/dist/{chunk-M7O74OWG.cjs → chunk-ACOU5YJI.cjs} +31 -31
  11. package/dist/{chunk-M7O74OWG.cjs.map → chunk-ACOU5YJI.cjs.map} +1 -1
  12. package/dist/{chunk-INDFIVDV.cjs → chunk-AHGSN4AT.cjs} +12 -12
  13. package/dist/{chunk-INDFIVDV.cjs.map → chunk-AHGSN4AT.cjs.map} +1 -1
  14. package/dist/{chunk-VTSRDC4W.js → chunk-CKC3EAYT.js} +2 -2
  15. package/dist/{chunk-SASR7SK5.js → chunk-GZK7FWJJ.js} +20 -4
  16. package/dist/chunk-GZK7FWJJ.js.map +1 -0
  17. package/dist/{chunk-ZRANZNEA.js → chunk-JJE5TUZK.js} +2 -2
  18. package/dist/{chunk-66BNAFO6.js → chunk-JQIUBFHL.js} +4 -4
  19. package/dist/{chunk-MMCBQJKE.cjs → chunk-KUBJHB6I.cjs} +11 -11
  20. package/dist/{chunk-MMCBQJKE.cjs.map → chunk-KUBJHB6I.cjs.map} +1 -1
  21. package/dist/{chunk-ZV6E3U3C.cjs → chunk-MRGTMMJ3.cjs} +30 -30
  22. package/dist/{chunk-ZV6E3U3C.cjs.map → chunk-MRGTMMJ3.cjs.map} +1 -1
  23. package/dist/{chunk-OZJN54R5.cjs → chunk-NWVKG7QC.cjs} +37 -37
  24. package/dist/{chunk-OZJN54R5.cjs.map → chunk-NWVKG7QC.cjs.map} +1 -1
  25. package/dist/{chunk-AN47EIIJ.cjs → chunk-PHTSSHIQ.cjs} +59 -59
  26. package/dist/{chunk-AN47EIIJ.cjs.map → chunk-PHTSSHIQ.cjs.map} +1 -1
  27. package/dist/{chunk-N2JZ33V7.cjs → chunk-RUA3OXSJ.cjs} +26 -26
  28. package/dist/{chunk-N2JZ33V7.cjs.map → chunk-RUA3OXSJ.cjs.map} +1 -1
  29. package/dist/{chunk-LK623WCC.cjs → chunk-RZPF7MJ2.cjs} +9 -9
  30. package/dist/{chunk-LK623WCC.cjs.map → chunk-RZPF7MJ2.cjs.map} +1 -1
  31. package/dist/{chunk-G3UN2DXU.cjs → chunk-STYA77PH.cjs} +20 -4
  32. package/dist/chunk-STYA77PH.cjs.map +1 -0
  33. package/dist/{chunk-JUJY3HQS.cjs → chunk-U37UTLP7.cjs} +19 -19
  34. package/dist/{chunk-JUJY3HQS.cjs.map → chunk-U37UTLP7.cjs.map} +1 -1
  35. package/dist/{chunk-2DIOV7BR.js → chunk-UPN6EFOM.js} +4 -4
  36. package/dist/{chunk-OWMLWJQY.cjs → chunk-VPVOJD5X.cjs} +2432 -1502
  37. package/dist/chunk-VPVOJD5X.cjs.map +1 -0
  38. package/dist/{chunk-4SMRQ4SN.js → chunk-WBL5Y4PS.js} +3 -3
  39. package/dist/{chunk-FP4H6Y5O.js → chunk-WPYPSIY2.js} +3 -3
  40. package/dist/{chunk-R5WJJL4V.js → chunk-X5X43HFV.js} +5 -5
  41. package/dist/{chunk-DEHZ5CTC.js → chunk-XTWKDMCG.js} +2 -2
  42. package/dist/components/case-studies/index.cjs +9 -9
  43. package/dist/components/case-studies/index.js +3 -3
  44. package/dist/components/chat/index.cjs +3 -3
  45. package/dist/components/chat/index.js +2 -2
  46. package/dist/components/contact/index.cjs +4 -4
  47. package/dist/components/contact/index.js +3 -3
  48. package/dist/components/docs/index.cjs +6 -6
  49. package/dist/components/docs/index.js +5 -5
  50. package/dist/components/embeds/index.cjs +4 -4
  51. package/dist/components/embeds/index.js +3 -3
  52. package/dist/components/faq/index.cjs +4 -4
  53. package/dist/components/faq/index.js +3 -3
  54. package/dist/components/features/captions-url.cjs +12 -0
  55. package/dist/components/features/captions-url.cjs.map +1 -0
  56. package/dist/components/features/captions-url.js +10 -0
  57. package/dist/components/features/captions-url.js.map +1 -0
  58. package/dist/components/features/card-hit-layer.d.ts +40 -0
  59. package/dist/components/features/card-hit-layer.d.ts.map +1 -0
  60. package/dist/components/features/floating-walkthrough-video.d.ts +71 -0
  61. package/dist/components/features/floating-walkthrough-video.d.ts.map +1 -0
  62. package/dist/components/features/index.cjs +11 -3
  63. package/dist/components/features/index.cjs.map +1 -1
  64. package/dist/components/features/index.d.ts +4 -0
  65. package/dist/components/features/index.d.ts.map +1 -1
  66. package/dist/components/features/index.js +12 -4
  67. package/dist/components/features/use-walkthrough-video.d.ts +16 -0
  68. package/dist/components/features/use-walkthrough-video.d.ts.map +1 -0
  69. package/dist/components/features/video-bites-strip.d.ts.map +1 -1
  70. package/dist/components/features/video-center-badge.d.ts.map +1 -1
  71. package/dist/components/features/video-hover-preview.d.ts +68 -0
  72. package/dist/components/features/video-hover-preview.d.ts.map +1 -0
  73. package/dist/components/features/video.d.ts +78 -40
  74. package/dist/components/features/video.d.ts.map +1 -1
  75. package/dist/components/form.d.ts +0 -1
  76. package/dist/components/form.d.ts.map +1 -1
  77. package/dist/components/help-center-pages/index.cjs +21 -21
  78. package/dist/components/help-center-pages/index.js +12 -12
  79. package/dist/components/index.cjs +163 -155
  80. package/dist/components/index.cjs.map +1 -1
  81. package/dist/components/index.js +18 -10
  82. package/dist/components/index.js.map +1 -1
  83. package/dist/components/navigation/index.cjs +3 -3
  84. package/dist/components/navigation/index.js +2 -2
  85. package/dist/components/onboarding-guides/index.cjs +6 -6
  86. package/dist/components/onboarding-guides/index.js +5 -5
  87. package/dist/components/related-content/index.cjs +4 -4
  88. package/dist/components/related-content/index.js +3 -3
  89. package/dist/components/tickets/index.cjs +6 -6
  90. package/dist/components/tickets/index.js +5 -5
  91. package/dist/components/ui/button/button-styles.d.ts +2 -0
  92. package/dist/components/ui/button/button-styles.d.ts.map +1 -1
  93. package/dist/components/ui/button/button.d.ts +2 -2
  94. package/dist/components/ui/button/button.d.ts.map +1 -1
  95. package/dist/components/ui/file-manager/index.cjs +50 -50
  96. package/dist/components/ui/file-manager/index.js +1 -1
  97. package/dist/components/ui/index.cjs +3 -3
  98. package/dist/components/ui/index.js +2 -2
  99. package/dist/components/ui/page-actions.d.ts +2 -1
  100. package/dist/components/ui/page-actions.d.ts.map +1 -1
  101. package/dist/index.cjs +27 -3
  102. package/dist/index.cjs.map +1 -1
  103. package/dist/index.js +28 -4
  104. package/dist/types/supabase.d.ts +80 -0
  105. package/dist/types/supabase.d.ts.map +1 -1
  106. package/dist/types/video-processing.d.ts +1 -1
  107. package/dist/types/video-processing.d.ts.map +1 -1
  108. package/dist/utils/announcement-storage.d.ts +1 -1
  109. package/dist/utils/announcement-storage.d.ts.map +1 -1
  110. package/dist/utils/dismiss-cookie.d.ts +27 -0
  111. package/dist/utils/dismiss-cookie.d.ts.map +1 -0
  112. package/dist/utils/dismissal-storage.d.ts +19 -0
  113. package/dist/utils/dismissal-storage.d.ts.map +1 -0
  114. package/dist/utils/index.cjs +48 -10
  115. package/dist/utils/index.cjs.map +1 -1
  116. package/dist/utils/index.d.ts +2 -0
  117. package/dist/utils/index.d.ts.map +1 -1
  118. package/dist/utils/index.js +41 -11
  119. package/dist/utils/index.js.map +1 -1
  120. package/package.json +8 -2
  121. package/src/.index.md +39 -32
  122. package/src/.platform-domains.md +65 -0
  123. package/src/assets/.fae-avatar.md +33 -0
  124. package/src/assets/.index.md +15 -9
  125. package/src/components/.agent-mark.md +31 -0
  126. package/src/components/.announcement-bar.md +47 -35
  127. package/src/components/.calendar.md +19 -15
  128. package/src/components/.categories-cart.md +34 -30
  129. package/src/components/.category-card.md +33 -33
  130. package/src/components/.chart.md +38 -40
  131. package/src/components/.command.md +47 -23
  132. package/src/components/.comment-card.md +31 -26
  133. package/src/components/.content-loading-container.md +45 -20
  134. package/src/components/.context-menu.md +45 -31
  135. package/src/components/.date-time-picker.md +36 -30
  136. package/src/components/.empty-state.md +31 -31
  137. package/src/components/.faq-accordion.md +20 -30
  138. package/src/components/.filter-chip.md +36 -33
  139. package/src/components/.footer-waitlist-button.md +27 -21
  140. package/src/components/.footer.md +39 -24
  141. package/src/components/.form.md +32 -20
  142. package/src/components/.hero-image-uploader.md +35 -31
  143. package/src/components/.icon-display.md +53 -0
  144. package/src/components/.image-cropper.md +34 -33
  145. package/src/components/.index.md +25 -29
  146. package/src/components/.logs-list.md +27 -23
  147. package/src/components/.media-carousel.md +47 -26
  148. package/src/components/.metric-value.md +27 -24
  149. package/src/components/.msp-display.md +29 -23
  150. package/src/components/.open-source-features.md +23 -26
  151. package/src/components/.pagination.md +44 -39
  152. package/src/components/.persistent-filter-controls.md +61 -28
  153. package/src/components/.pricing-display.md +34 -33
  154. package/src/components/.results-count.md +33 -20
  155. package/src/components/.smooth-accordion.md +24 -20
  156. package/src/components/.social-icon-row.md +33 -21
  157. package/src/components/.sonner.md +40 -25
  158. package/src/components/.steps.md +39 -25
  159. package/src/components/.tool-icon.md +34 -21
  160. package/src/components/.unified-filter-logic.md +32 -36
  161. package/src/components/.user-display.md +33 -28
  162. package/src/components/.user-summary-stub.md +40 -33
  163. package/src/components/.vendor-display-button.md +17 -15
  164. package/src/components/.vendor-icon.md +17 -25
  165. package/src/components/.vendor-tag.md +39 -34
  166. package/src/components/.why-it-matters.md +15 -11
  167. package/src/components/.yes-no-display.md +36 -31
  168. package/src/components/authors/.author-detail-view.md +50 -0
  169. package/src/components/case-studies/.index.md +26 -0
  170. package/src/components/case-studies/.share-experience-section.md +45 -0
  171. package/src/components/chat/.approval-batch-message.md +48 -33
  172. package/src/components/chat/.approval-request-message.md +37 -26
  173. package/src/components/chat/.chat-archive-page.md +56 -0
  174. package/src/components/chat/.chat-attachment-bar.md +32 -40
  175. package/src/components/chat/.chat-composer.md +43 -0
  176. package/src/components/chat/.chat-container.md +41 -25
  177. package/src/components/chat/.chat-context-memory-bar.md +53 -0
  178. package/src/components/chat/.chat-context-picker.md +89 -0
  179. package/src/components/chat/.chat-header-icon-button.md +43 -0
  180. package/src/components/chat/.chat-header-search-field.md +51 -0
  181. package/src/components/chat/.chat-input.md +63 -30
  182. package/src/components/chat/.chat-list-empty-state.md +44 -0
  183. package/src/components/chat/.chat-message-enhanced.md +29 -31
  184. package/src/components/chat/.chat-message-list.md +34 -44
  185. package/src/components/chat/.chat-message-row.md +56 -0
  186. package/src/components/chat/.chat-message-skeleton.md +32 -26
  187. package/src/components/chat/.chat-panel-header-mobile.md +46 -0
  188. package/src/components/chat/.chat-panel-header.md +80 -0
  189. package/src/components/chat/.chat-sidebar-skeleton.md +31 -30
  190. package/src/components/chat/.chat-sidebar.md +36 -29
  191. package/src/components/chat/.chat-ticket-list.md +38 -23
  192. package/src/components/chat/.chat-typing-indicator.md +37 -19
  193. package/src/components/chat/.context-compaction-display.md +19 -15
  194. package/src/components/chat/.context-items-list.md +57 -0
  195. package/src/components/chat/.embeddable-chat.md +57 -66
  196. package/src/components/chat/.error-message-display.md +40 -22
  197. package/src/components/chat/.guide-mode-banner.md +41 -0
  198. package/src/components/chat/.guide-welcome.md +43 -0
  199. package/src/components/chat/.index.md +26 -21
  200. package/src/components/chat/.mingo-chat-history.md +63 -0
  201. package/src/components/chat/.mingo-chat-modals.md +44 -0
  202. package/src/components/chat/.mingo-history-rail.md +63 -0
  203. package/src/components/chat/.mingo-info-card.md +59 -0
  204. package/src/components/chat/.mingo-onboarding-card.md +21 -27
  205. package/src/components/chat/.mingo-welcome.md +60 -0
  206. package/src/components/chat/.model-display.md +33 -25
  207. package/src/components/chat/.msp-organization-card-skeleton.md +44 -0
  208. package/src/components/chat/.msp-organization-card.md +51 -0
  209. package/src/components/chat/.nav-link-anchor-via-runtime.md +36 -25
  210. package/src/components/chat/.quick-action-chip.md +60 -0
  211. package/src/components/chat/.quick-action-marquee.md +53 -0
  212. package/src/components/chat/.quick-action-wall.md +68 -0
  213. package/src/components/chat/.remark-mention-chips.md +41 -0
  214. package/src/components/chat/.slash-command-suggestions.md +30 -36
  215. package/src/components/chat/.source-action-button.md +28 -25
  216. package/src/components/chat/.tool-call-blocks.md +18 -30
  217. package/src/components/chat/.tool-execution-display.md +29 -34
  218. package/src/components/chat/entity-cards/.admin-content-card.md +29 -22
  219. package/src/components/chat/entity-cards/.blog-card.md +44 -33
  220. package/src/components/chat/entity-cards/.blog-image-placeholder.md +20 -18
  221. package/src/components/chat/entity-cards/.case-study-card.md +24 -33
  222. package/src/components/chat/entity-cards/.chat-ticket-item.md +39 -22
  223. package/src/components/chat/entity-cards/.customer-interview-card.md +29 -32
  224. package/src/components/chat/entity-cards/.data-room-doc-card.md +21 -22
  225. package/src/components/chat/entity-cards/.dispatch.md +41 -24
  226. package/src/components/chat/entity-cards/.entity-author-card.md +36 -33
  227. package/src/components/chat/entity-cards/.entity-portrait-card.md +47 -0
  228. package/src/components/chat/entity-cards/.generic-entity-card.md +26 -25
  229. package/src/components/chat/entity-cards/.github-activity-card.md +35 -41
  230. package/src/components/chat/entity-cards/.hubspot-ticket-card.md +22 -28
  231. package/src/components/chat/entity-cards/.index.md +33 -44
  232. package/src/components/chat/entity-cards/.investor-update-card.md +36 -25
  233. package/src/components/chat/entity-cards/.onboarding-guide-card.md +20 -29
  234. package/src/components/chat/entity-cards/.product-release-card-defaults.md +26 -19
  235. package/src/components/chat/entity-cards/.program-card.md +30 -33
  236. package/src/components/chat/entity-cards/.roadmap-card.md +40 -31
  237. package/src/components/chat/entity-cards/.roadmap-vote-button.md +33 -36
  238. package/src/components/chat/entity-cards/.slack-message-card.md +31 -32
  239. package/src/components/chat/entity-cards/.use-cover-image-fallback.md +47 -0
  240. package/src/components/chat/entity-cards/.use-entity-card-link.md +51 -0
  241. package/src/components/chat/entity-cards/.use-entity-card-placeholder.md +47 -0
  242. package/src/components/chat/entity-cards/.what-i-shipped-card.md +43 -0
  243. package/src/components/chat/hooks/.index.md +33 -30
  244. package/src/components/chat/hooks/.use-chat-card-item.md +30 -17
  245. package/src/components/chat/hooks/.use-chat-dialog-manager.md +59 -0
  246. package/src/components/chat/hooks/.use-chat-identity.md +37 -25
  247. package/src/components/chat/hooks/.use-chunk-catchup.md +53 -36
  248. package/src/components/chat/hooks/.use-empty-state-config.md +39 -0
  249. package/src/components/chat/hooks/.use-jetstream-dialog-subscription.md +65 -30
  250. package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
  251. package/src/components/chat/hooks/.use-nats-dialog-subscription.md +66 -50
  252. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +58 -31
  253. package/src/components/chat/hooks/.use-scripted-stream.md +46 -0
  254. package/src/components/chat/hooks/.use-slash-commands.md +32 -25
  255. package/src/components/chat/hooks/.use-sse-chat-adapter.md +32 -21
  256. package/src/components/chat/hooks/.use-unified-chat.md +45 -35
  257. package/src/components/chat/types/.api.types.md +49 -41
  258. package/src/components/chat/types/.chat.types.md +56 -34
  259. package/src/components/chat/types/.component.types.md +36 -36
  260. package/src/components/chat/types/.context-item.types.md +61 -0
  261. package/src/components/chat/types/.index.md +32 -17
  262. package/src/components/chat/types/.message.types.md +44 -45
  263. package/src/components/chat/types/.network.types.md +46 -46
  264. package/src/components/chat/types/.processing.types.md +49 -37
  265. package/src/components/chat/types/.unified-chat-state.types.md +41 -26
  266. package/src/components/chat/types/entities/.content-ref.md +20 -31
  267. package/src/components/chat/types/entities/.investor-update.md +14 -16
  268. package/src/components/chat/types/entities/.onboarding-guide.md +35 -34
  269. package/src/components/chat/types/entities/.program-types.md +55 -43
  270. package/src/components/chat/utils/.chip-action-class.md +17 -19
  271. package/src/components/chat/utils/.chip-styles.md +18 -18
  272. package/src/components/chat/utils/.chunk-parser.md +48 -37
  273. package/src/components/chat/utils/.compact-card-classes.md +33 -35
  274. package/src/components/chat/utils/.execute-navigation.md +49 -0
  275. package/src/components/chat/utils/.extract-incomplete-message-state.md +9 -12
  276. package/src/components/chat/utils/.history-merge.md +65 -0
  277. package/src/components/chat/utils/.icon-library.md +33 -31
  278. package/src/components/chat/utils/.icon-registry.md +44 -0
  279. package/src/components/chat/utils/.index.md +37 -33
  280. package/src/components/chat/utils/.is-cross-origin-url.md +26 -22
  281. package/src/components/chat/utils/.message-segment-accumulator.md +46 -25
  282. package/src/components/chat/utils/.nav-anchor-props.md +29 -34
  283. package/src/components/chat/utils/.nav-click-handler.md +29 -33
  284. package/src/components/chat/utils/.process-historical-messages.md +29 -33
  285. package/src/components/chat/utils/.scripted-stream.md +52 -0
  286. package/src/components/chat/utils/.source-row-cta.md +32 -31
  287. package/src/components/chat/utils/.tool-call-helpers.md +25 -17
  288. package/src/components/contact/.contact-form.md +24 -19
  289. package/src/components/docs/.doc-navigation-context.md +49 -0
  290. package/src/components/docs/.doc-viewer.md +64 -0
  291. package/src/components/docs/.docs-hub-page.md +49 -0
  292. package/src/components/docs/.index.md +51 -0
  293. package/src/components/docs/.skeletons.md +47 -0
  294. package/src/components/docs/.use-docs-resolve-link.md +61 -0
  295. package/src/components/docs/.use-document-tree.md +83 -0
  296. package/src/components/docs/.use-scroll-spy.md +58 -0
  297. package/src/components/embeds/.embed-container.md +45 -0
  298. package/src/components/embeds/.embed-iframe.md +51 -0
  299. package/src/components/embeds/.figma-embed.md +43 -0
  300. package/src/components/embeds/.file-download-card.md +47 -0
  301. package/src/components/embeds/.google-sheets-viewer.md +40 -0
  302. package/src/components/embeds/.index.md +58 -0
  303. package/src/components/embeds/.linkedin-embed-client.md +50 -0
  304. package/src/components/embeds/.markdown-image.md +40 -0
  305. package/src/components/embeds/.og-link-preview.md +54 -0
  306. package/src/components/embeds/.pdf-viewer.md +43 -0
  307. package/src/components/embeds/.reddit-embed-client.md +40 -0
  308. package/src/components/embeds/.rich-markdown-runtime.md +53 -0
  309. package/src/components/embeds/.twitter-embed-client.md +44 -0
  310. package/src/components/faq/.faq-document-page.md +68 -0
  311. package/src/components/faq/.faq-section.md +55 -0
  312. package/src/components/faq/.index.md +29 -0
  313. package/src/components/faq/.json-ld.md +48 -0
  314. package/src/components/features/.array-entry-manager.md +32 -24
  315. package/src/components/features/.auth-providers-list.md +33 -32
  316. package/src/components/features/.captions-url.md +43 -0
  317. package/src/components/features/.cards-strip.md +48 -0
  318. package/src/components/features/.changelog-manager.md +17 -20
  319. package/src/components/features/.command-box.md +11 -16
  320. package/src/components/features/.entity-summary-editor.md +20 -15
  321. package/src/components/features/.entity-tag-badges.md +43 -0
  322. package/src/components/features/.entity-video-section.md +31 -41
  323. package/src/components/features/.figma-prototype-viewer.md +55 -37
  324. package/src/components/features/.filters-dropdown.md +14 -13
  325. package/src/components/features/.highlight-config-section.md +19 -16
  326. package/src/components/features/.highlight-video-combined-section.md +28 -19
  327. package/src/components/features/.highlight-video-preview.md +13 -11
  328. package/src/components/features/.highlight-video-section.md +26 -22
  329. package/src/components/features/.index.md +40 -36
  330. package/src/components/features/.media-gallery-manager.md +37 -35
  331. package/src/components/features/.mux-origins.md +46 -0
  332. package/src/components/features/.og-editor-preview.md +29 -24
  333. package/src/components/features/.os-type-badge-group.md +26 -18
  334. package/src/components/features/.os-type-badge.md +41 -24
  335. package/src/components/features/.paths-display.md +42 -25
  336. package/src/components/features/.platform-badge.md +26 -17
  337. package/src/components/features/.policy-configuration-panel.md +33 -31
  338. package/src/components/features/.provider-button.md +29 -20
  339. package/src/components/features/.push-button-selector.md +39 -41
  340. package/src/components/features/.release-media-manager.md +41 -34
  341. package/src/components/features/.section-selector.md +27 -16
  342. package/src/components/features/.select-button.md +21 -32
  343. package/src/components/features/.seo-editor-preview.md +49 -36
  344. package/src/components/features/.social-links-manager.md +40 -18
  345. package/src/components/features/.start-with-openframe-button.md +30 -32
  346. package/src/components/features/.status-filter-component.md +29 -38
  347. package/src/components/features/.tags-selector.md +25 -29
  348. package/src/components/features/.transcript-summary-editor.md +24 -18
  349. package/src/components/features/.use-video-warmup.md +47 -0
  350. package/src/components/features/.video-bites-display.md +36 -37
  351. package/src/components/features/.video-bites-shared.md +44 -0
  352. package/src/components/features/.video-bites-strip.md +63 -0
  353. package/src/components/features/.video-center-badge.md +38 -0
  354. package/src/components/features/.video-ratio-tabs.md +38 -31
  355. package/src/components/features/.video-source-selector.md +24 -27
  356. package/src/components/features/.video.md +35 -27
  357. package/src/components/features/.waitlist-form.md +39 -33
  358. package/src/components/features/.warning-block.md +53 -0
  359. package/src/components/features/ai-enrich/.AIEnrichSection.md +24 -25
  360. package/src/components/features/ai-enrich/.AIRequiredBadge.md +22 -21
  361. package/src/components/features/ai-enrich/.AIStatusIndicator.md +42 -35
  362. package/src/components/features/ai-enrich/.AIWarningsSection.md +23 -20
  363. package/src/components/features/ai-enrich/.ConfidenceBadge.md +35 -20
  364. package/src/components/features/auth/.auth-benefits-panel.md +48 -0
  365. package/src/components/features/auth/.auth-branding.md +51 -0
  366. package/src/components/features/auth/.auth-shell.md +51 -0
  367. package/src/components/features/auth/.back-to-login-link.md +48 -0
  368. package/src/components/features/auth/.complete-account-form.md +45 -0
  369. package/src/components/features/auth/.create-organization-form.md +53 -0
  370. package/src/components/features/auth/.index.md +48 -0
  371. package/src/components/features/auth/.invite-link-invalid-modal.md +42 -0
  372. package/src/components/features/auth/.login-form.md +42 -0
  373. package/src/components/features/auth/.openframe-sso-login-form.md +46 -0
  374. package/src/components/features/auth/.openframe-sso-signup-form.md +51 -0
  375. package/src/components/features/auth/.password-reset-form.md +57 -0
  376. package/src/components/features/auth/.sso-auth-shell.md +35 -0
  377. package/src/components/features/auth/.sso-providers.md +42 -0
  378. package/src/components/features/auth/.terms-agreement-label.md +28 -0
  379. package/src/components/features/board/.board-column-header.md +24 -18
  380. package/src/components/features/board/.board-column.md +32 -32
  381. package/src/components/features/board/.board-ticket-approval.md +42 -0
  382. package/src/components/features/board/.board.md +38 -38
  383. package/src/components/features/board/.index.md +35 -38
  384. package/src/components/features/board/.ticket-card.md +33 -36
  385. package/src/components/features/board/.types.md +38 -31
  386. package/src/components/features/card-hit-layer.tsx +84 -0
  387. package/src/components/features/floating-walkthrough-video.tsx +891 -0
  388. package/src/components/features/index.ts +4 -0
  389. package/src/components/features/notifications/.approval-request-notification-tile.md +45 -0
  390. package/src/components/features/notifications/.index.md +35 -31
  391. package/src/components/features/notifications/.notification-drawer.md +32 -19
  392. package/src/components/features/notifications/.notification-popups.md +51 -0
  393. package/src/components/features/notifications/.notification-tile.md +43 -27
  394. package/src/components/features/notifications/.notifications-context.md +42 -45
  395. package/src/components/features/notifications/.types.md +51 -31
  396. package/src/components/features/ticket-status-config-list/.ticket-status-config-list.md +51 -0
  397. package/src/components/features/time-tracker/.index.md +48 -0
  398. package/src/components/features/time-tracker/.time-tracker-context.md +55 -0
  399. package/src/components/features/time-tracker/.time-tracker-header-button.md +51 -0
  400. package/src/components/features/time-tracker/.time-tracker-panel.md +58 -0
  401. package/src/components/features/time-tracker/.types.md +51 -0
  402. package/src/components/features/time-tracker/.use-tracker-clock.md +32 -0
  403. package/src/components/features/use-walkthrough-video.ts +70 -0
  404. package/src/components/features/video-bites-strip.tsx +46 -146
  405. package/src/components/features/video-center-badge.tsx +11 -2
  406. package/src/components/features/video-hover-preview.tsx +201 -0
  407. package/src/components/features/video.tsx +368 -73
  408. package/src/components/help-center-pages/.delivery-page.md +51 -0
  409. package/src/components/help-center-pages/.index.md +51 -0
  410. package/src/components/help-center-pages/.onboarding-guides-catalog-page.md +53 -0
  411. package/src/components/help-center-pages/.product-releases-list-page.md +51 -0
  412. package/src/components/help-center-pages/.roadmap-page.md +46 -0
  413. package/src/components/icons/.figma-icon.md +13 -7
  414. package/src/components/icons/.index.md +26 -22
  415. package/src/components/icons/.vendor-directory-icon.md +30 -18
  416. package/src/components/icons/.x-logo.md +26 -10
  417. package/src/components/icons-v2-generated/.index.md +30 -41
  418. package/src/components/icons-v2-generated/brand-logos/.index.md +25 -19
  419. package/src/components/icons-v2-generated/communication/.index.md +26 -30
  420. package/src/components/icons-v2-generated/logos/.flamingo-logo-icon.md +41 -0
  421. package/src/components/layout/.article-detail-layout.md +32 -21
  422. package/src/components/layout/.page-container.md +25 -23
  423. package/src/components/layout/.page-heading.md +48 -0
  424. package/src/components/layout/.page-layout.md +30 -25
  425. package/src/components/layout/.title-block.md +43 -24
  426. package/src/components/loading/.card-skeleton.md +28 -35
  427. package/src/components/loading/.category-card-skeleton.md +25 -23
  428. package/src/components/loading/.device-card-skeleton.md +22 -15
  429. package/src/components/loading/.margin-report-skeleton.md +30 -35
  430. package/src/components/loading/.openmsp-heartbeat.md +30 -32
  431. package/src/components/loading/.organization-card-skeleton.md +22 -25
  432. package/src/components/loading/.organization-icon-skeleton.md +39 -27
  433. package/src/components/loading/.page-layout-skeleton.md +50 -28
  434. package/src/components/loading/.unified-skeleton.md +37 -40
  435. package/src/components/loading/.users-grid-skeleton.md +19 -38
  436. package/src/components/navigation/.app-header.md +35 -28
  437. package/src/components/navigation/.app-layout-context.md +48 -0
  438. package/src/components/navigation/.app-layout-drawer.md +56 -0
  439. package/src/components/navigation/.app-layout.md +24 -23
  440. package/src/components/navigation/.header-mingo-button.md +46 -0
  441. package/src/components/navigation/.header-organization-filter.md +32 -18
  442. package/src/components/navigation/.header.md +24 -31
  443. package/src/components/navigation/.index.md +36 -50
  444. package/src/components/navigation/.mingo-ai-button.md +41 -0
  445. package/src/components/navigation/.mobile-burger-menu.md +29 -29
  446. package/src/components/navigation/.mobile-nav-panel.md +41 -49
  447. package/src/components/navigation/.multi-level-navigation.md +76 -0
  448. package/src/components/navigation/.navigation-sidebar-item.md +14 -14
  449. package/src/components/navigation/.navigation-sidebar.md +30 -23
  450. package/src/components/navigation/.sliding-sidebar.md +30 -25
  451. package/src/components/navigation/.sticky-section-nav.md +23 -21
  452. package/src/components/onboarding-guides/.index.md +40 -0
  453. package/src/components/onboarding-guides/.onboarding-guide-detail-view.md +55 -0
  454. package/src/components/onboarding-guides/.onboarding-guides-catalog-skeleton.md +33 -0
  455. package/src/components/onboarding-guides/.onboarding-guides-catalog-view.md +50 -0
  456. package/src/components/onboarding-guides/hooks/.use-onboarding-guides.md +54 -0
  457. package/src/components/platform/.CveLink.md +28 -17
  458. package/src/components/platform/.ScriptArguments.md +18 -23
  459. package/src/components/platform/.ScriptInfoSection.md +27 -21
  460. package/src/components/platform/.ShellTypeBadge.md +34 -18
  461. package/src/components/platform/.SoftwareInfo.md +23 -21
  462. package/src/components/platform/.ToolBadge.md +18 -16
  463. package/src/components/profile/.ProfileLoadingSkeleton.md +24 -23
  464. package/src/components/related-content/.index.md +41 -0
  465. package/src/components/related-content/.related-content-section.md +62 -0
  466. package/src/components/shared/.article-author-byline.md +56 -0
  467. package/src/components/shared/.detail-page-skeleton.md +32 -43
  468. package/src/components/shared/.media-gallery-strip.md +43 -0
  469. package/src/components/shared/delivery/.delivery-lists.md +20 -19
  470. package/src/components/shared/delivery/.delivery-row.md +24 -20
  471. package/src/components/shared/delivery/.delivery-table.md +20 -22
  472. package/src/components/shared/dev-section/.dev-card-row.md +28 -36
  473. package/src/components/shared/dev-section/.dev-section-page.md +36 -25
  474. package/src/components/shared/dev-section/.dev-section-view.md +32 -22
  475. package/src/components/shared/doc-search/.doc-search-bar.md +58 -0
  476. package/src/components/shared/doc-search/.doc-search-result-row.md +50 -0
  477. package/src/components/shared/doc-search/.format-relative-path.md +30 -0
  478. package/src/components/shared/doc-search/.index.md +46 -0
  479. package/src/components/shared/doc-search/.map-doc-search-results.md +44 -0
  480. package/src/components/shared/doc-search/.resolve-search-result-action.md +52 -0
  481. package/src/components/shared/doc-search/.types.md +49 -0
  482. package/src/components/shared/doc-search/.use-doc-search.md +66 -0
  483. package/src/components/shared/legal-document/.legal-document-page.md +26 -20
  484. package/src/components/shared/legal-document/.use-legal-docs.md +36 -30
  485. package/src/components/shared/onboarding/.onboarding-step-card.md +24 -16
  486. package/src/components/shared/onboarding/.onboarding-walkthrough.md +42 -28
  487. package/src/components/shared/product-release/.index.md +33 -24
  488. package/src/components/shared/product-release/.product-release-card-skeleton.md +22 -28
  489. package/src/components/shared/product-release/.product-release-card.md +28 -29
  490. package/src/components/shared/product-release/.product-releases-view.md +49 -0
  491. package/src/components/shared/product-release/.release-detail-page.md +30 -15
  492. package/src/components/shared/roadmap/.index.md +29 -24
  493. package/src/components/shared/roadmap/.roadmap-grid.md +43 -54
  494. package/src/components/shared/roadmap/.roadmap-view.md +41 -0
  495. package/src/components/shared/roadmap/.use-roadmap-voting.md +27 -17
  496. package/src/components/switch.tsx +1 -1
  497. package/src/components/tickets/.help-center-card.md +32 -28
  498. package/src/components/tickets/.help-center-create-form.md +34 -22
  499. package/src/components/tickets/.help-center-list.md +36 -25
  500. package/src/components/tickets/.index.md +30 -45
  501. package/src/components/tickets/.ticket-center.md +31 -38
  502. package/src/components/tickets/.ticket-detail-drawer.md +20 -30
  503. package/src/components/tickets/.ticket-open-form.md +24 -26
  504. package/src/components/tickets/.ticket-reply-composer.md +51 -0
  505. package/src/components/tickets/.ticket-row.md +26 -11
  506. package/src/components/tickets/.types.md +56 -38
  507. package/src/components/tickets/hooks/.use-ticket-actions.md +60 -47
  508. package/src/components/tickets/hooks/.use-ticket-engagements.md +27 -27
  509. package/src/components/tickets/hooks/.use-tickets-list.md +24 -30
  510. package/src/components/ui/.accordion.md +28 -21
  511. package/src/components/ui/.actions-menu.md +36 -54
  512. package/src/components/ui/.ai-generated-badge.md +25 -0
  513. package/src/components/ui/.alert-dialog.md +21 -16
  514. package/src/components/ui/.alert.md +30 -25
  515. package/src/components/ui/.allowed-domains-input.md +26 -15
  516. package/src/components/ui/.announcement-bar-view.md +46 -0
  517. package/src/components/ui/.autocomplete.md +40 -27
  518. package/src/components/ui/.badge.md +34 -31
  519. package/src/components/ui/.brand-association-card.md +22 -18
  520. package/src/components/ui/.breadcrumb.md +18 -14
  521. package/src/components/ui/.bullet-list.md +35 -23
  522. package/src/components/ui/.card.md +47 -30
  523. package/src/components/ui/.checkbox-block.md +34 -22
  524. package/src/components/ui/.checkbox-with-description.md +18 -20
  525. package/src/components/ui/.chevron-button.md +29 -29
  526. package/src/components/ui/.circular-progress.md +30 -41
  527. package/src/components/ui/.color-preset-select.md +54 -0
  528. package/src/components/ui/.color-swatch.md +37 -0
  529. package/src/components/ui/.content-loader.md +34 -27
  530. package/src/components/ui/.crossfade-panels.md +50 -0
  531. package/src/components/ui/.cursor-pagination.md +38 -26
  532. package/src/components/ui/.dashboard-info-card.md +46 -27
  533. package/src/components/ui/.date-picker.md +52 -36
  534. package/src/components/ui/.device-card-compact.md +23 -20
  535. package/src/components/ui/.device-card.md +39 -30
  536. package/src/components/ui/.dialog.md +14 -14
  537. package/src/components/ui/.drawer.md +45 -39
  538. package/src/components/ui/.dropdown-button.md +41 -33
  539. package/src/components/ui/.dropdown-menu.md +40 -23
  540. package/src/components/ui/.duration-input.md +41 -0
  541. package/src/components/ui/.entity-image.md +32 -28
  542. package/src/components/ui/.error-state.md +30 -26
  543. package/src/components/ui/.fade-preview.md +44 -0
  544. package/src/components/ui/.field-wrapper.md +34 -23
  545. package/src/components/ui/.file-upload.md +30 -18
  546. package/src/components/ui/.filter-modal.md +30 -32
  547. package/src/components/ui/.filter-pill-row.md +58 -0
  548. package/src/components/ui/.floating-tooltip.md +27 -32
  549. package/src/components/ui/.hidden-tags-popup.md +18 -20
  550. package/src/components/ui/.highlight-card.md +36 -23
  551. package/src/components/ui/.honeypot-field.md +41 -0
  552. package/src/components/ui/.hover-dropdown.md +44 -31
  553. package/src/components/ui/.image-gallery-modal.md +28 -30
  554. package/src/components/ui/.image-uploader.md +39 -22
  555. package/src/components/ui/.index.md +33 -31
  556. package/src/components/ui/.info-card-row.md +50 -0
  557. package/src/components/ui/.info-card.md +27 -20
  558. package/src/components/ui/.info-row.md +30 -24
  559. package/src/components/ui/.info-section.md +63 -0
  560. package/src/components/ui/.input.md +29 -28
  561. package/src/components/ui/.label.md +34 -26
  562. package/src/components/ui/.markdown-editor.md +26 -25
  563. package/src/components/ui/.marquee-wall.md +64 -0
  564. package/src/components/ui/.menubar.md +50 -16
  565. package/src/components/ui/.modal-v2.md +41 -27
  566. package/src/components/ui/.modal.md +22 -19
  567. package/src/components/ui/.more-actions-menu.md +30 -24
  568. package/src/components/ui/.navigation-menu.md +40 -25
  569. package/src/components/ui/.organization-card.md +46 -27
  570. package/src/components/ui/.page-actions.md +55 -41
  571. package/src/components/ui/.page-loader.md +40 -23
  572. package/src/components/ui/.password-input.md +30 -0
  573. package/src/components/ui/.phone-input.md +20 -22
  574. package/src/components/ui/.portal-container.md +43 -0
  575. package/src/components/ui/.progress-bar.md +40 -27
  576. package/src/components/ui/.release-changelog-section.md +32 -26
  577. package/src/components/ui/.rich-markdown-renderer.md +45 -0
  578. package/src/components/ui/.scroll-fade.md +56 -0
  579. package/src/components/ui/.search-input.md +55 -37
  580. package/src/components/ui/.select.md +25 -26
  581. package/src/components/ui/.service-card.md +25 -19
  582. package/src/components/ui/.sheet.md +21 -21
  583. package/src/components/ui/.simple-markdown-renderer.md +36 -24
  584. package/src/components/ui/.slack-channel-chip.md +49 -0
  585. package/src/components/ui/.square-avatar.md +29 -26
  586. package/src/components/ui/.stacked-rows-panel.md +61 -0
  587. package/src/components/ui/.status-badge.md +30 -24
  588. package/src/components/ui/.status-indicator.md +35 -21
  589. package/src/components/ui/.tab-content.md +34 -22
  590. package/src/components/ui/.tab-navigation.md +40 -50
  591. package/src/components/ui/.tab-selector.md +48 -31
  592. package/src/components/ui/.tabs.md +34 -21
  593. package/src/components/ui/.tag-search-input.md +20 -20
  594. package/src/components/ui/.tag-select-dropdown.md +59 -0
  595. package/src/components/ui/.tag.md +25 -43
  596. package/src/components/ui/.tags-input.md +31 -31
  597. package/src/components/ui/.textarea.md +32 -30
  598. package/src/components/ui/.ticket-attachments-list.md +36 -29
  599. package/src/components/ui/.ticket-info-section.md +37 -42
  600. package/src/components/ui/.ticket-status-config-row.md +66 -0
  601. package/src/components/ui/.ticket-status-tag.md +39 -35
  602. package/src/components/ui/.toaster.md +21 -15
  603. package/src/components/ui/.toggle.md +38 -37
  604. package/src/components/ui/.tooltip.md +16 -13
  605. package/src/components/ui/button/.button-styles.md +17 -18
  606. package/src/components/ui/button/.button.md +30 -37
  607. package/src/components/ui/button/.split-button.md +46 -23
  608. package/src/components/ui/button/button-styles.ts +13 -0
  609. package/src/components/ui/button/button.tsx +5 -0
  610. package/src/components/ui/data-table/.data-table-body.md +50 -35
  611. package/src/components/ui/data-table/.data-table-empty.md +17 -33
  612. package/src/components/ui/data-table/.data-table-header.md +43 -40
  613. package/src/components/ui/data-table/.data-table-row.md +31 -31
  614. package/src/components/ui/data-table/.types.md +23 -28
  615. package/src/components/ui/file-manager/.file-manager-breadcrumb.md +16 -24
  616. package/src/components/ui/file-manager/.file-manager-empty.md +23 -15
  617. package/src/components/ui/file-manager/.file-manager-skeleton.md +34 -36
  618. package/src/components/ui/file-manager/.file-manager-table-row.md +29 -29
  619. package/src/components/ui/file-manager/.file-manager-table.md +39 -24
  620. package/src/components/ui/no-data/.index.md +22 -0
  621. package/src/components/ui/no-data/.no-data-actions.md +29 -0
  622. package/src/components/ui/no-data/.no-data-message.md +37 -0
  623. package/src/components/ui/no-data/.no-data-styles.md +39 -0
  624. package/src/components/ui/no-data/.no-data.md +59 -0
  625. package/src/components/ui/page-actions.tsx +2 -1
  626. package/src/components/ui/query-report-table/.query-report-table-header.md +15 -15
  627. package/src/components/ui/query-report-table/.query-report-table-row.md +16 -16
  628. package/src/components/ui/query-report-table/.query-report-table.md +39 -24
  629. package/src/components/ui/table/.table-column-filter-dropdown.md +15 -9
  630. package/src/components/ui/table/.table-description-cell.md +13 -12
  631. package/src/components/ui/table/.table-empty-state.md +19 -20
  632. package/src/components/ui/table/.table-row.md +30 -20
  633. package/src/components/ui/table/.table-skeleton.md +32 -27
  634. package/src/components/ui/table/.table-timestamp-cell.md +24 -23
  635. package/src/components/ui/table/.table.md +43 -30
  636. package/src/components/ui/table/.types.md +49 -45
  637. package/src/components/ui/table/.use-table-motion.md +45 -0
  638. package/src/contexts/.chat-runtime-context.md +55 -26
  639. package/src/contexts/.endpoints-runtime-context.md +40 -44
  640. package/src/embed-shims/.next-navigation.md +38 -31
  641. package/src/hooks/.api-hooks.md +28 -21
  642. package/src/hooks/.index.md +30 -25
  643. package/src/hooks/.use-authed-image-src.md +38 -0
  644. package/src/hooks/.use-contact-submission.md +35 -36
  645. package/src/hooks/.use-humanity-signals.md +47 -0
  646. package/src/hooks/.use-near-viewport.md +30 -30
  647. package/src/hooks/.use-og-placeholder-url.md +57 -0
  648. package/src/hooks/.use-scroll-to-hash.md +46 -0
  649. package/src/hooks/.use-self-fetch.md +52 -0
  650. package/src/hooks/state/.flatten-schema.md +37 -29
  651. package/src/hooks/ui/.index.md +37 -25
  652. package/src/hooks/ui/.use-auto-limit-tags.md +55 -38
  653. package/src/hooks/ui/.use-deferred-error.md +44 -0
  654. package/src/hooks/ui/.use-focus-trap.md +59 -0
  655. package/src/hooks/ui/.use-header-height.md +37 -0
  656. package/src/hooks/ui/.use-horizontal-scrollbar.md +25 -34
  657. package/src/hooks/ui/.use-marquee-engine.md +73 -0
  658. package/src/hooks/ui/.use-notification-permission.md +49 -0
  659. package/src/hooks/ui/.use-reset-on-page-hidden.md +40 -0
  660. package/src/hooks/ui/.use-suppress-clone-focus.md +41 -0
  661. package/src/nats/.index.md +39 -0
  662. package/src/nats/.nats-provider.md +46 -0
  663. package/src/nats/.nats.md +38 -28
  664. package/src/nats/.shared-connection.md +56 -0
  665. package/src/nats/.use-nats-subscription.md +57 -0
  666. package/src/stories/.ActionsMenu.stories.md +57 -0
  667. package/src/stories/.Alert.stories.md +46 -0
  668. package/src/stories/.AnnouncementBar.stories.md +59 -32
  669. package/src/stories/.AppLayoutDrawer.stories.md +60 -0
  670. package/src/stories/.AppLayoutSidebar.stories.md +45 -0
  671. package/src/stories/.ApprovalBatchMessage.stories.md +46 -0
  672. package/src/stories/.ApprovalBatchMessageClient.stories.md +55 -0
  673. package/src/stories/.ApprovalRequestMessage.stories.md +50 -0
  674. package/src/stories/.ApprovalRequestMessageClient.stories.md +41 -0
  675. package/src/stories/.BlogCard.stories.md +52 -0
  676. package/src/stories/.Board.stories.md +25 -20
  677. package/src/stories/.Button.stories.md +35 -40
  678. package/src/stories/.CampaignCardAdmin.stories.md +38 -0
  679. package/src/stories/.CardsStrip.stories.md +39 -0
  680. package/src/stories/.CaseStudyCard.stories.md +41 -0
  681. package/src/stories/.ChatContainer.stories.md +41 -0
  682. package/src/stories/.ChatInlineVideoPill.stories.md +36 -0
  683. package/src/stories/.ChatMessageEnhanced.stories.md +51 -0
  684. package/src/stories/.ChatMingoInfoCards.stories.md +30 -0
  685. package/src/stories/.ChatTicketList.stories.md +38 -22
  686. package/src/stories/.ChatTypingIndicator.stories.md +47 -0
  687. package/src/stories/.CheckboxBlock.stories.md +34 -35
  688. package/src/stories/.ContextCompactionDisplay.stories.md +28 -0
  689. package/src/stories/.CustomerInterviewCard.stories.md +36 -0
  690. package/src/stories/.DashboardInfoCard.stories.md +40 -33
  691. package/src/stories/.DataRoomDocCard.stories.md +42 -0
  692. package/src/stories/.DataTable.stories.md +37 -32
  693. package/src/stories/.DatePicker.stories.md +34 -30
  694. package/src/stories/.EmbeddableChat.stories.md +45 -28
  695. package/src/stories/.EmptyState.stories.md +55 -0
  696. package/src/stories/.ErrorMessageDisplay.stories.md +45 -0
  697. package/src/stories/.FilterModal.stories.md +28 -22
  698. package/src/stories/.GenericEntityCard.stories.md +50 -0
  699. package/src/stories/.GitHubActivityCard.stories.md +41 -0
  700. package/src/stories/.GuideWelcome.stories.md +38 -0
  701. package/src/stories/.Header.stories.md +32 -22
  702. package/src/stories/.HubspotTicketCard.stories.md +41 -0
  703. package/src/stories/.InfoCard.stories.md +37 -26
  704. package/src/stories/.InfoCardRow.stories.md +48 -0
  705. package/src/stories/.InfoSection.stories.md +55 -0
  706. package/src/stories/.Input.stories.md +45 -35
  707. package/src/stories/.InvestorUpdateCard.stories.md +41 -0
  708. package/src/stories/.MarqueeWall.stories.md +53 -0
  709. package/src/stories/.MingoAiButton.stories.md +31 -0
  710. package/src/stories/.MingoChatModals.stories.md +47 -0
  711. package/src/stories/.MingoInfoCard.stories.md +50 -0
  712. package/src/stories/.MingoOnboardingCard.stories.md +19 -19
  713. package/src/stories/.MingoWelcome.stories.md +41 -0
  714. package/src/stories/.MobileNavPanel.stories.md +52 -0
  715. package/src/stories/.Modal.stories.md +19 -16
  716. package/src/stories/.MspOrganizationCard.stories.md +45 -0
  717. package/src/stories/.NotificationDrawer.stories.md +39 -28
  718. package/src/stories/.OSTypeBadge.stories.md +34 -25
  719. package/src/stories/.OnboardingGuideCard.stories.md +41 -0
  720. package/src/stories/.PageActions.stories.md +21 -21
  721. package/src/stories/.PageContainer.stories.md +29 -24
  722. package/src/stories/.PageLayout.stories.md +18 -35
  723. package/src/stories/.PolicyConfigurationPanel.stories.md +58 -0
  724. package/src/stories/.ProductReleaseCard.stories.md +39 -0
  725. package/src/stories/.ProgramCard.stories.md +51 -0
  726. package/src/stories/.QuickActionChip.stories.md +59 -0
  727. package/src/stories/.QuickActionMarquee.stories.md +51 -0
  728. package/src/stories/.QuickActionWall.stories.md +58 -0
  729. package/src/stories/.RoadmapCard.stories.md +41 -0
  730. package/src/stories/.ShellTypeBadge.stories.md +42 -22
  731. package/src/stories/.SlackMessageCard.stories.md +42 -0
  732. package/src/stories/.SlashCommandSuggestions.stories.md +21 -31
  733. package/src/stories/.SplitButton.stories.md +23 -25
  734. package/src/stories/.StackedRowsPanel.stories.md +65 -0
  735. package/src/stories/.TabSelector.stories.md +26 -38
  736. package/src/stories/.Tag.stories.md +32 -27
  737. package/src/stories/.ThinkingDisplay.stories.md +43 -0
  738. package/src/stories/.TicketCard.stories.md +60 -0
  739. package/src/stories/.TicketInfoSection.stories.md +28 -20
  740. package/src/stories/.TimeTracker.stories.md +35 -0
  741. package/src/stories/.Toaster.stories.md +26 -20
  742. package/src/stories/.ToolBadge.stories.md +34 -24
  743. package/src/stories/.ToolExecutionDisplay.stories.md +22 -20
  744. package/src/stories/.ToolExecutionDisplayClient.stories.md +33 -0
  745. package/src/stories/.VideoBitesStrip.stories.md +37 -0
  746. package/src/stories/.WarningBlock.stories.md +51 -0
  747. package/src/stories/__fixtures__/.chat-card-decorator.md +39 -0
  748. package/src/stories/__fixtures__/.chat-cards.md +57 -0
  749. package/src/stories/auth/.CompleteAccount.stories.md +36 -0
  750. package/src/stories/auth/.CreateOrganization.stories.md +52 -0
  751. package/src/stories/auth/.InviteLinkInvalid.stories.md +21 -0
  752. package/src/stories/auth/.Login.stories.md +32 -0
  753. package/src/stories/auth/.OpenFrameSso.stories.md +58 -0
  754. package/src/stories/auth/.PasswordReset.stories.md +49 -0
  755. package/src/styles/ods-interaction-states.css +32 -0
  756. package/src/types/.announcement.md +67 -35
  757. package/src/types/.blog.md +44 -41
  758. package/src/types/.case-study.md +31 -17
  759. package/src/types/.content-ref.md +37 -0
  760. package/src/types/.customer-interview.md +38 -38
  761. package/src/types/.doc-source.md +87 -0
  762. package/src/types/.entity-author.md +53 -0
  763. package/src/types/.entity-platform.md +40 -0
  764. package/src/types/.index.md +23 -17
  765. package/src/types/.marketing.md +32 -35
  766. package/src/types/.navigation.md +31 -19
  767. package/src/types/.os.types.md +30 -31
  768. package/src/types/.permissions.md +49 -35
  769. package/src/types/.platform.md +44 -28
  770. package/src/types/.product-release.md +59 -42
  771. package/src/types/.shell.types.md +46 -30
  772. package/src/types/.supabase.md +43 -29
  773. package/src/types/.tool.types.md +43 -23
  774. package/src/types/.video-processing.md +40 -31
  775. package/src/types/supabase.ts +80 -0
  776. package/src/types/video-processing.ts +1 -0
  777. package/src/utils/.announcement-storage.md +49 -17
  778. package/src/utils/.app-config.md +22 -18
  779. package/src/utils/.brand-marks.md +46 -0
  780. package/src/utils/.cn.md +40 -29
  781. package/src/utils/.color-analysis.md +34 -25
  782. package/src/utils/.common.md +43 -23
  783. package/src/utils/.content-href.md +64 -0
  784. package/src/utils/.content-ref-groups.md +51 -0
  785. package/src/utils/.date-utils.md +46 -35
  786. package/src/utils/.doc-path-utils.md +38 -0
  787. package/src/utils/.doc-tree-nav.md +51 -0
  788. package/src/utils/.embed-authed-fetch.md +48 -32
  789. package/src/utils/.embed-content-fetch.md +36 -0
  790. package/src/utils/.embed-url-converters.md +52 -0
  791. package/src/utils/.extract-items.md +49 -0
  792. package/src/utils/.faq-anchor.md +48 -0
  793. package/src/utils/.format.md +73 -55
  794. package/src/utils/.humanity-signals.md +59 -0
  795. package/src/utils/.index.md +73 -31
  796. package/src/utils/.list-url.md +43 -0
  797. package/src/utils/.markdown-section-extractor.md +57 -0
  798. package/src/utils/.markdown-to-plain.md +51 -0
  799. package/src/utils/.media-carousel-utils-stub.md +42 -31
  800. package/src/utils/.ods-color-utils.md +84 -43
  801. package/src/utils/.og-placeholder.md +45 -0
  802. package/src/utils/.page-header-constants.md +26 -0
  803. package/src/utils/.platform-config.md +34 -34
  804. package/src/utils/.release-badge.md +47 -0
  805. package/src/utils/.release-cover.md +45 -0
  806. package/src/utils/.same-page-hash-nav.md +45 -0
  807. package/src/utils/.scroll-into-view.md +32 -25
  808. package/src/utils/.seo-description.md +37 -0
  809. package/src/utils/.seo-title.md +25 -0
  810. package/src/utils/.social-embed-cache.md +37 -0
  811. package/src/utils/.source-icons.md +30 -34
  812. package/src/utils/.suggestion-url.md +46 -0
  813. package/src/utils/.tool-utils.md +39 -24
  814. package/src/utils/.tree-builder.md +64 -0
  815. package/src/utils/.video-bite-id.md +42 -0
  816. package/src/utils/announcement-storage.ts +9 -18
  817. package/src/utils/dev-sections/.dev-section-param-keys.md +51 -0
  818. package/src/utils/dev-sections/.openframe-dev-sections.md +40 -28
  819. package/src/utils/dismiss-cookie.ts +55 -0
  820. package/src/utils/dismissal-storage.ts +38 -0
  821. package/src/utils/index.ts +3 -0
  822. package/dist/chunk-BBUEY73L.js.map +0 -1
  823. package/dist/chunk-G3UN2DXU.cjs.map +0 -1
  824. package/dist/chunk-OWMLWJQY.cjs.map +0 -1
  825. package/dist/chunk-SASR7SK5.js.map +0 -1
  826. package/src/components/chat/utils/.onboarding-icons.md +0 -28
  827. package/src/hooks/.use-og-placeholder.md +0 -51
  828. /package/dist/{chunk-MGKCS6KS.js.map → chunk-3WCARCI4.js.map} +0 -0
  829. /package/dist/{chunk-Y3Y2DLNO.js.map → chunk-6UGYBCEN.js.map} +0 -0
  830. /package/dist/{chunk-PSPWT2Q5.js.map → chunk-7LWXWXEY.js.map} +0 -0
  831. /package/dist/{chunk-VTSRDC4W.js.map → chunk-CKC3EAYT.js.map} +0 -0
  832. /package/dist/{chunk-ZRANZNEA.js.map → chunk-JJE5TUZK.js.map} +0 -0
  833. /package/dist/{chunk-66BNAFO6.js.map → chunk-JQIUBFHL.js.map} +0 -0
  834. /package/dist/{chunk-2DIOV7BR.js.map → chunk-UPN6EFOM.js.map} +0 -0
  835. /package/dist/{chunk-4SMRQ4SN.js.map → chunk-WBL5Y4PS.js.map} +0 -0
  836. /package/dist/{chunk-FP4H6Y5O.js.map → chunk-WPYPSIY2.js.map} +0 -0
  837. /package/dist/{chunk-R5WJJL4V.js.map → chunk-X5X43HFV.js.map} +0 -0
  838. /package/dist/{chunk-DEHZ5CTC.js.map → chunk-XTWKDMCG.js.map} +0 -0
@@ -0,0 +1,47 @@
1
+ <!-- source-hash: 13917fe1e6b23215d3b8f20208831188 -->
2
+ Client-side React hook that manages invisible bot-protection signals — a honeypot field reference and a mount timestamp — for attachment to public form submissions.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `useHumanitySignals` | Hook | Returns honeypot input props, a signal getter, and a reset function |
9
+ | `honeypotInputProps` | `{ ref, name }` | Spread onto a hidden `<input>` to capture bot-filled values |
10
+ | `getSignals` | `() => HumanitySignals` | Produces the wire object (`HONEYPOT_FIELD` + `ELAPSED_MS_FIELD`) to merge into a POST body |
11
+ | `resetSignals` | `() => void` | Clears the honeypot value and resets the mount timestamp after a successful submit |
12
+
13
+ **Signal strategy:**
14
+ - `HONEYPOT_FIELD` — a hidden input that legitimate users never fill; non-empty value indicates a bot.
15
+ - `ELAPSED_MS_FIELD` — milliseconds since mount using `performance.now()` (monotonic, immune to wall-clock skew); suspiciously low values indicate automated submissions.
16
+
17
+ Both signals travel in the request body, so they remain functional behind reverse proxies or prefixed URLs.
18
+
19
+ ## Usage Example
20
+
21
+ ```typescript
22
+ import { useHumanitySignals } from '@/hooks/use-humanity-signals'
23
+ import { HoneypotField } from '@/components/honeypot-field'
24
+
25
+ function ContactForm() {
26
+ const { honeypotInputProps, getSignals, resetSignals } = useHumanitySignals()
27
+
28
+ async function handleSubmit(formData: Record<string, string>) {
29
+ await fetch('/api/contact', {
30
+ method: 'POST',
31
+ body: JSON.stringify({ ...formData, ...getSignals() }),
32
+ })
33
+ resetSignals()
34
+ }
35
+
36
+ return (
37
+ <form onSubmit={...}>
38
+ <HoneypotField {...honeypotInputProps} />
39
+ {/* ...other fields */}
40
+ </form>
41
+ )
42
+ }
43
+ ```
44
+
45
+ > This hook is SSR-safe: both `performance.now()` calls are guarded against server-side execution even though the hook is marked `'use client'`.
46
+
47
+ **Source:** [`use-humanity-signals.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-humanity-signals.ts)
@@ -1,44 +1,44 @@
1
- <!-- source-hash: 22dd3f53bc1b8db26b9d173ca6be7427 -->
2
- A React hook that detects when an element is approaching the viewport using a shared, module-level `IntersectionObserver` pool one observer instance per unique `rootMargin` value, shared across all components using the hook.
1
+ <!-- source-hash: c797174c623bbd0d74779f436ba36a2f -->
2
+ Provides a shared, module-level `IntersectionObserver` hook that efficiently detects when an element approaches the viewport, firing once and unobserving on first intersection.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Export | Type | Description |
7
- |--------|------|-------------|
8
- | `useNearViewport` | Hook | Main hook; returns `ref` and `isNear` state |
9
- | `UseNearViewportResult` | Interface | Return type generic over element type `T` |
10
- | `getObserverFor` | Internal | Lazily creates/retrieves a shared `IntersectionObserver` per `rootMargin` |
11
- | `observers` | `Map<string, IntersectionObserver>` | Module-level singleton pool keyed by `rootMargin` |
12
- | `subscribers` | `WeakMap<Element, () => void>` | Tracks per-element callbacks; auto-GC'd when elements are removed |
6
+ ### Constants & Module-Level Singletons
7
+
8
+ - **`NEAR_VIEWPORT_ROOT_MARGIN`** Default lookahead distance (`'500px'`); exported as SSOT for viewport-proximity logic across the codebase.
9
+ - **`observers`** — `Map<string, IntersectionObserver>` keyed by `rootMargin|threshold`; one IO per unique config, shared across all subscribers.
10
+ - **`subscribers`** — `WeakMap<Element, () => void>` mapping observed elements to their callbacks; avoids memory leaks on unmount.
11
+ - **`THRESHOLD_EPSILON`** Float rounding slack (`0.01`) for sub-pixel `intersectionRatio` comparisons.
12
+
13
+ ### Functions
14
+
15
+ - **`observerKey(rootMargin, threshold)`** — Generates a stable string key for the observer map.
16
+ - **`getObserverFor(rootMargin, threshold)`** — Returns an existing IO or creates and caches a new one for the given config.
17
+
18
+ ### Hook
19
+
20
+ - **`useNearViewport<T>(rootMargin?, threshold?)`** — Returns `{ ref, isNear }`. Subscribes the attached element to the shared IO; flips `isNear` to `true` once the element meets the threshold, then unobserves. Safe under React StrictMode's double-mount via callback identity checks.
21
+
22
+ ### Interface
23
+
24
+ - **`UseNearViewportResult<T>`** — `{ ref: (node: T | null) => void, isNear: boolean }`
13
25
 
14
26
  ## Usage Example
15
27
 
16
28
  ```typescript
17
29
  import { useNearViewport } from './use-near-viewport';
18
30
 
19
- // Basic lazy-render pattern
20
- function MediaCard() {
21
- const { ref, isNear } = useNearViewport('500px');
22
- return (
23
- <div ref={ref}>
24
- {isNear ? <HeavyMediaComponent /> : <Placeholder />}
25
- </div>
26
- );
31
+ function LazyCard() {
32
+ // Start loading 500px before scroll-in (default margin)
33
+ const { ref, isNear } = useNearViewport();
34
+ return <div ref={ref}>{isNear ? <HeavyChild /> : <Placeholder />}</div>;
27
35
  }
28
36
 
29
- // Strict on-screen detection
30
- function AnalyticsTracker() {
31
- const { ref, isNear } = useNearViewport('0px');
32
- useEffect(() => {
33
- if (isNear) trackImpression();
34
- }, [isNear]);
35
- return <div ref={ref} />;
37
+ function HalfVisibleCard() {
38
+ // Fire only when at least 50% of the element is on-screen
39
+ const { ref, isNear } = useNearViewport('0px', 0.5);
40
+ return <div ref={ref}>{isNear ? <Chart /> : null}</div>;
36
41
  }
37
42
  ```
38
43
 
39
- ## Behavior Notes
40
-
41
- - **Fires once**: `isNear` flips to `true` on first intersection and never resets; the element is unobserved immediately after
42
- - **Shared observers**: All components using the same `rootMargin` share a single `IntersectionObserver` — efficient for grid/list pages with many cards
43
- - **StrictMode safe**: Cleanup uses callback identity checks to survive React's dev-mode double-mount cycle without dropping subscriptions
44
- - **Race safe**: IO callback re-reads `subscribers` at fire time so late-firing callbacks after unmount cannot invoke stale state setters
44
+ > **Note:** `isNear` is fire-once and never resets. For two-way mount/unmount behavior, use a raw `IntersectionObserver` instead and share `NEAR_VIEWPORT_ROOT_MARGIN` for distance consistency.
@@ -0,0 +1,57 @@
1
+ <!-- source-hash: 6a8b6b64036a92c403c29835e73faf22 -->
2
+ React hook that resolves a branded OG placeholder image URL by reading runtime endpoints from `ChatRuntime` context and delegating to `buildOgPlaceholderUrl`.
3
+
4
+ ## Key Components
5
+
6
+ ### `UseOgPlaceholderUrlArgs`
7
+ Configuration interface for the hook:
8
+
9
+ | Property | Type | Default | Description |
10
+ |---|---|---|---|
11
+ | `title` | `string \| undefined \| null` | — | Text displayed on the placeholder image |
12
+ | `siteName` | `string` | `''` | Site name shown below the title |
13
+ | `aspect` | `'wide' \| 'square'` | `'wide'` | `'wide'` = 1200×630 social card; `'square'` = 1024×1024 for compact chat-inline slots |
14
+ | `enabled` | `boolean` | `true` | When `false`, returns `null` instead of a URL |
15
+
16
+ ### `useOgPlaceholderUrl`
17
+ The single canonical hook for OG placeholder resolution. Reads `endpoints` from `ChatRuntime` context and passes them to `buildOgPlaceholderUrl`, which resolves the route base via:
18
+
19
+ 1. Explicit `ogPlaceholderUrl` endpoint
20
+ 2. Derived from `imageProxyUrlPrefix`
21
+ 3. Same-origin fallback `/api/og-placeholder`
22
+
23
+ Returns a memoized `string | null`. Per-platform brand colors are resolved server-side by the route handler — nothing is baked into the URL.
24
+
25
+ ## Usage Example
26
+
27
+ ```typescript
28
+ import { useOgPlaceholderUrl } from './use-og-placeholder-url'
29
+
30
+ function LinkCard({ title, siteName }: { title: string; siteName: string }) {
31
+ // Wide social-card placeholder (default)
32
+ const placeholderUrl = useOgPlaceholderUrl({ title, siteName })
33
+
34
+ // Square variant for compact chat-inline slots
35
+ const squarePlaceholderUrl = useOgPlaceholderUrl({
36
+ title,
37
+ siteName,
38
+ aspect: 'square',
39
+ })
40
+
41
+ // Conditionally disabled — returns null when no title is available
42
+ const conditionalUrl = useOgPlaceholderUrl({
43
+ title,
44
+ enabled: Boolean(title),
45
+ })
46
+
47
+ return <img src={placeholderUrl ?? '/fallback.png'} alt={title} />
48
+ }
49
+ ```
50
+
51
+ ## Notes
52
+
53
+ - Replaces the older builder-injection pattern `useOgPlaceholder(buildUrl, …)` — callers no longer supply a URL builder.
54
+ - `useEntityCardPlaceholder` delegates here, ensuring all surfaces share one memo and one code path.
55
+ - Safe to call with a nullish `title`; returns `null` without throwing.
56
+
57
+ **Source:** [`use-og-placeholder-url.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-og-placeholder-url.ts)
@@ -0,0 +1,46 @@
1
+ <!-- source-hash: 41cddbc1609de359a4385ad11867ade8 -->
2
+ Scrolls the page to `window.location.hash` after a dependency resolves, using a `requestAnimationFrame` polling loop to handle lazy-mounted elements like Radix accordion panels or SWR-fetched rows.
3
+
4
+ ## Key Components
5
+
6
+ | Export | Type | Description |
7
+ |---|---|---|
8
+ | `useScrollToHash` | Hook | Main hook that drives hash-based scroll behavior |
9
+ | `UseScrollToHashOptions` | Interface | Configuration options for the hook |
10
+ | `MAX_POLL_FRAMES` | Constant | rAF poll budget (~1s at 60fps) before giving up |
11
+
12
+ ### `UseScrollToHashOptions`
13
+
14
+ | Property | Type | Default | Description |
15
+ |---|---|---|---|
16
+ | `headerOffset` | `number` | `0` | Pixels to subtract for sticky headers/chrome |
17
+
18
+ ## Usage Example
19
+
20
+ ```typescript
21
+ // Basic — runs on mount for SSR-rendered anchors
22
+ useScrollToHash()
23
+
24
+ // Wait for async data before attempting scroll
25
+ const { data } = useSWR('/api/items')
26
+ useScrollToHash(data)
27
+
28
+ // With sticky header compensation
29
+ useScrollToHash(data, { headerOffset: 64 })
30
+
31
+ // Delay until accordion/drawer is fully open
32
+ const [isOpen, setIsOpen] = useState(false)
33
+ useScrollToHash(isOpen)
34
+ ```
35
+
36
+ ## Behavior Notes
37
+
38
+ - **Polling:** Calls `requestAnimationFrame` up to `MAX_POLL_FRAMES` (60) times, giving lazy-mounted DOM nodes ~1 second to appear before aborting.
39
+ - **Skipped when** `readyDep` is `null` or `false` — safe to pass unresolved async state directly.
40
+ - **Re-runs on:** `hashchange` events (browser back/forward navigation) and the synthetic `navigateSamePageHash` event, in addition to `readyDep` reference changes.
41
+ - **Concurrent safety:** Cancels any in-flight rAF poll before starting a new one to prevent double-scroll races.
42
+ - **SSR safe:** Guards against `window` being undefined.
43
+
44
+ ## Source
45
+
46
+ [`use-scroll-to-hash.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-scroll-to-hash.ts)
@@ -0,0 +1,52 @@
1
+ <!-- source-hash: 884662ede8163c89d9ac2a0519142f27 -->
2
+ A lightweight React hook that fetches JSON data into component state using plain `fetch` + `useEffect`, intentionally avoiding any external data-fetching library (no react-query, no QueryClient required).
3
+
4
+ ## Key Components
5
+
6
+ ### `UseSelfFetchResult<T>`
7
+ Return type interface exposing:
8
+ - `data` — fetched payload or `null`
9
+ - `setData` — imperative state setter for optimistic updates
10
+ - `isLoading` — boolean loading indicator
11
+ - `error` — boolean error flag
12
+ - `reload()` — forces a re-fetch (error-retry affordance)
13
+
14
+ ### `useSelfFetch<T>(url, options?)`
15
+ Core hook with two optional config values:
16
+ - `options.initialData` — seeds state from SSR-rendered data, skipping the initial fetch
17
+ - `options.revalidateOnVisibleAfterMs` — opt-in tab-visibility revalidation; re-fetches when the held data is older than the given threshold (replaces `setInterval` polling)
18
+
19
+ ## Usage Example
20
+
21
+ ```typescript
22
+ // Basic self-fetch
23
+ const { data, isLoading, error, reload } = useSelfFetch<Product[]>(
24
+ '/api/products?page=1'
25
+ )
26
+
27
+ // SSR-hydrated: skips first fetch, re-fetches on url change
28
+ const { data, setData } = useSelfFetch<RoadmapItem[]>(
29
+ `/api/roadmap?section=${section}`,
30
+ { initialData: serverData }
31
+ )
32
+
33
+ // With tab-visibility revalidation (5 minutes)
34
+ const { data } = useSelfFetch<Release[]>(
35
+ '/api/releases',
36
+ { revalidateOnVisibleAfterMs: 5 * 60 * 1000 }
37
+ )
38
+
39
+ // Optimistic update (e.g. upvote)
40
+ setData((prev) => prev ? { ...prev, votes: prev.votes + 1 } : prev)
41
+ ```
42
+
43
+ ## Behavior Notes
44
+
45
+ - **`url = null`** disables fetching entirely (controlled/SSR mode)
46
+ - **Stale-request guard** — an `AbortController` + `cancelled` flag prevents race conditions when `url` changes rapidly (e.g. pagination)
47
+ - **SSR hydration skip** — `dataUrlRef` tracks the URL whose data is currently held; the fetch effect is skipped when it matches, surviving React 18 StrictMode's double-mount in dev
48
+ - **`reload()`** nulls `dataUrlRef` so the same URL can be re-fetched after an error
49
+
50
+ ## Source
51
+
52
+ [`use-self-fetch.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-self-fetch.ts)
@@ -1,43 +1,51 @@
1
- <!-- source-hash: 35adb97eaacf2c17d09efbd85a569c46 -->
2
- Provides utilities to flatten nested GraphQL input types into URL parameter mappings for cleaner URL state management. Converts complex nested objects like `{ filter: { severity: [...] } }` into simple URL parameters like `?severity=...`.
1
+ <!-- source-hash: f6f23c54f1dcd6f13c1c04a935fe719d -->
2
+ Utilities for flattening nested GraphQL input type schemas into flat URL parameter mappings, enabling clean URL state management for GraphQL-powered views.
3
3
 
4
4
  ## Key Components
5
5
 
6
- **Main Functions:**
7
- - `flattenQueryVariables()` - Core function that flattens GraphQL variables using schema introspection
8
- - `mergeDefaults()` - Merges default values into the flattened schema
9
- - `validateSchema()` - Ensures no URL parameter name conflicts exist
10
- - `getArrayParams()` - Identifies which parameters should use repeated URL values
11
- - `getRequiredParams()` - Lists required parameters from the schema
12
- - `shouldIncludeInUrl()` - Determines if a parameter value should be included in the URL
6
+ ### Interfaces
13
7
 
14
- **Types:**
15
- - `FlattenedParam` - Configuration mapping URL parameter names to GraphQL paths with type information
8
+ - **`FlattenedParam`** — Describes a single URL parameter, including its `urlParamName`, `graphqlPath` (e.g., `filter.severity`), `type`, `defaultValue`, `required`, and `isArray` flags.
9
+
10
+ ### Functions
11
+
12
+ | Function | Description |
13
+ |---|---|
14
+ | `flattenQueryVariables` | Async. Converts nested GraphQL query variables into a flat `Record<string, FlattenedParam>`. Uses introspection to expand input object fields. |
15
+ | `mergeDefaults` | Merges a defaults map into an existing flattened schema, overriding or populating `defaultValue` per param. |
16
+ | `validateSchema` | Throws if any two params resolve to the same `urlParamName` (conflict detection). |
17
+ | `getArrayParams` | Returns keys of all array-typed params; useful for repeated URL value handling (e.g., `?severity=error&severity=warning`). |
18
+ | `getRequiredParams` | Returns keys of all required params. |
19
+ | `shouldIncludeInUrl` | Returns `false` for `null`/`undefined`, empty arrays, empty strings, or values matching `defaultValue`; keeps URLs clean. |
16
20
 
17
21
  ## Usage Example
18
22
 
19
23
  ```typescript
20
- import { flattenQueryVariables, validateSchema } from './flatten-schema'
24
+ import { flattenQueryVariables, mergeDefaults, validateSchema, shouldIncludeInUrl } from './flatten-schema'
21
25
  import { GraphQLIntrospector } from './introspection'
22
26
 
23
- // GraphQL query variables
24
- const queryVars = {
25
- search: { type: 'string', required: false },
26
- filter: { type: 'object', graphqlTypeName: 'LogFilterInput' },
27
- cursor: { type: 'string', required: false }
27
+ const introspector = new GraphQLIntrospector(/* ... */)
28
+ await introspector.load()
29
+
30
+ const queryVariables = {
31
+ search: { type: 'string', required: false, isArray: false },
32
+ filter: { type: 'object', graphqlTypeName: 'LogFilterInput', required: false, isArray: false },
28
33
  }
29
34
 
30
- // Flatten to URL parameter schema
31
- const introspector = new GraphQLIntrospector(schema)
32
- const flatSchema = await flattenQueryVariables(queryVars, introspector)
35
+ // Flatten: { filter: { severity } } → ?severity=...
36
+ let schema = await flattenQueryVariables(queryVariables, introspector)
37
+
38
+ // Apply defaults
39
+ schema = mergeDefaults(schema, { severity: ['info'] })
40
+
41
+ // Validate no URL param name conflicts
42
+ validateSchema(schema)
43
+
44
+ // Check if a value should be written to the URL
45
+ const include = shouldIncludeInUrl(['critical'], schema.severity) // true
46
+ const skip = shouldIncludeInUrl([], schema.severity) // false
47
+ ```
33
48
 
34
- // Result maps nested filter fields to top-level URL params
35
- // flatSchema = {
36
- // search: { urlParamName: 'search', graphqlPath: 'search', type: 'string' },
37
- // severity: { urlParamName: 'severity', graphqlPath: 'filter.severity', type: 'array' },
38
- // toolType: { urlParamName: 'toolType', graphqlPath: 'filter.toolType', type: 'array' }
39
- // }
49
+ ## Source
40
50
 
41
- validateSchema(flatSchema) // Ensure no conflicts
42
- const arrayParams = getArrayParams(flatSchema) // ['severity', 'toolType']
43
- ```
51
+ [`flatten-schema.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/flatten-schema.ts)
@@ -1,41 +1,53 @@
1
- <!-- source-hash: fc4a9d5f3d9a97f43016324c6310b828 -->
2
- Barrel export file that re-exports all UI hooks from the hooks package, providing a single entry point for consuming hook utilities across the application.
1
+ <!-- source-hash: f2ee6838846ee9d01b393ef923facc58 -->
2
+ Barrel export file for the UI hooks library, re-exporting all custom React hooks and the `usePreventScroll` utility from `@react-aria/overlays` under a single import path.
3
3
 
4
4
  ## Key Components
5
5
 
6
- | Hook | Description |
7
- |------|-------------|
8
- | `use-debounce` | Delays value updates until after a specified wait period |
9
- | `use-local-storage` | Persists and retrieves state from browser local storage |
10
- | `use-media-query` | Evaluates CSS media queries reactively |
11
- | `use-memoized-callback` | Memoizes callback functions to prevent unnecessary re-renders |
12
- | `use-onboarding-state` | Manages onboarding flow state and progress |
13
- | `use-table-pagination` | Handles pagination logic for data tables |
14
- | `use-throttle` | Limits function call frequency to a specified interval |
15
- | `use-window-size` | Tracks browser window dimensions reactively |
16
- | `use-horizontal-scrollbar` | Detects and manages horizontal scrollbar visibility |
17
- | `use-image-edge-color` | Extracts dominant edge color from an image |
18
- | `use-search` | Manages search input state and filtering logic |
19
- | `use-auto-limit-tags` | Automatically limits visible tags based on available space |
6
+ | Export | Description |
7
+ |---|---|
8
+ | `useAutoLimitTags` | Limits visible tags based on container width |
9
+ | `useDebounce` | Delays value updates by a specified duration |
10
+ | `useDeferredError` | Defers error state for async workflows |
11
+ | `useFocusTrap` | Traps keyboard focus within a DOM subtree |
12
+ | `useHeaderHeight` | Tracks the application header's pixel height |
13
+ | `useHorizontalScrollbar` | Detects and manages horizontal scrollbar presence |
14
+ | `useImageEdgeColor` | Samples the edge color of an image element |
15
+ | `useLocalStorage` | Synced, typed `localStorage` state |
16
+ | `useMarqueeEngine` | Drives text marquee/ticker animations |
17
+ | `useMediaQuery` | Reactive CSS media query matching |
18
+ | `useMemoizedCallback` | Stable callback reference with deep-equality memoization |
19
+ | `useNotificationPermission` | Reads and requests browser notification permission |
20
+ | `useOnboardingState` | Manages multi-step onboarding flow state |
21
+ | `useResetOnPageHidden` | Resets state when the page visibility changes to hidden |
22
+ | `useSearch` | Controlled search input with filtering logic |
23
+ | `useSuppressCloneFocus` | Prevents focus events on cloned DOM nodes |
24
+ | `useTablePagination` | Pagination state and helpers for data tables |
25
+ | `useThrottle` | Throttles rapidly firing values or callbacks |
26
+ | `useWindowSize` | Reactive viewport width and height |
27
+ | `usePreventScroll` | Ref-counted, iOS-aware body scroll lock (`@react-aria/overlays`) |
20
28
 
21
29
  ## Usage Example
22
30
 
23
31
  ```typescript
32
+ // Single import path for all hooks
24
33
  import {
25
34
  useDebounce,
26
35
  useLocalStorage,
27
36
  useWindowSize,
28
- useSearch,
29
- useTablePagination,
30
- } from '@your-package/hooks'
37
+ usePreventScroll,
38
+ } from '@openframe-oss-lib/hooks'
31
39
 
32
- const MyComponent = () => {
33
- const { width, height } = useWindowSize()
40
+ function SearchPanel() {
34
41
  const [query, setQuery] = useLocalStorage('search-query', '')
35
42
  const debouncedQuery = useDebounce(query, 300)
36
- const { results } = useSearch(debouncedQuery, items)
37
- const { page, pageSize, onPageChange } = useTablePagination()
43
+ const { width } = useWindowSize()
38
44
 
39
- return <Table data={results} page={page} pageSize={pageSize} />
45
+ usePreventScroll({ isDisabled: width > 768 })
46
+
47
+ return <input value={query} onChange={e => setQuery(e.target.value)} />
40
48
  }
41
- ```
49
+ ```
50
+
51
+ ## Source
52
+
53
+ [`index.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/index.ts)
@@ -1,54 +1,71 @@
1
- <!-- source-hash: 4ddac380d848a0dcab830bec82a667f6 -->
2
- Calculates how many tags fit within a single-line container using real DOM measurements, supporting both a fixed numeric limit and an automatic layout-aware mode.
1
+ <!-- source-hash: 3512572c1b5ae0dfa77abc80ec31167a -->
2
+ Calculates how many tag chips fit in a single-line container using real DOM measurements, supporting both fixed and automatic (`"auto"`) limits with `ResizeObserver`-driven updates.
3
3
 
4
4
  ## Key Components
5
5
 
6
6
  ### `useAutoLimitTags(options)`
7
- Main hook that returns layout refs and the computed `visibleCount`.
7
+ Main hook that returns refs and a `visibleCount` to drive tag overflow rendering.
8
+
9
+ **Options (`UseAutoLimitTagsOptions`):**
8
10
 
9
- **Options**
10
11
  | Option | Type | Default | Description |
11
12
  |---|---|---|---|
12
13
  | `count` | `number` | — | Total number of tags |
13
- | `limitTags` | `number \| "auto"` | `"auto"` | Fixed cap or DOM-measured auto mode |
14
- | `placeholder` | `string` | `""` | Input placeholder used to reserve width |
14
+ | `limitTags` | `number \| "auto"` | `"auto"` | Fixed limit or DOM-based measurement |
15
+ | `placeholder` | `string` | `""` | Input placeholder used to reserve input width |
16
+ | `reserveInputWidth` | `boolean` | `true` | Reserve trailing space for a combobox input |
17
+
18
+ **Returns (`UseAutoLimitTagsReturn`):**
15
19
 
16
- **Returns (`UseAutoLimitTagsReturn`)**
17
- | Ref | Element | Purpose |
20
+ | Ref / Value | Attach to | Purpose |
18
21
  |---|---|---|
19
- | `middleRef` | `HTMLDivElement` | Container with tags + input (reads padding/gap from here) |
20
- | `measureRef` | `HTMLDivElement` | Off-screen container holding copies of all tags |
21
- | `textMeasureRef` | `HTMLSpanElement` | Hidden span measuring placeholder text width |
22
- | `badgeRef` | `HTMLButtonElement` | The `+N` overflow badge (measures its width) |
23
- | `inputRef` | `HTMLInputElement` | The text input (reads its `min-width`) |
24
- | `visibleCount` | `number` | How many tags to render visibly |
22
+ | `visibleCount` | | Number of tags to render visibly |
23
+ | `middleRef` | `<div>` (tag + input zone) | Source of CSS metrics (padding, gap, width) |
24
+ | `measureRef` | `<div>` (off-screen) | Holds hidden copies of all tags for width measurement |
25
+ | `textMeasureRef` | `<span>` (off-screen) | Measures placeholder text width |
26
+ | `badgeRef` | `<button>` (+N badge) | Measures overflow badge width |
27
+ | `inputRef` | `<input>` | Reads `min-width` for input reservation |
25
28
 
26
29
  ## Usage Example
27
30
 
28
31
  ```typescript
29
- const { visibleCount, middleRef, measureRef, textMeasureRef, badgeRef, inputRef } =
30
- useAutoLimitTags({ count: tags.length, placeholder: "Search..." })
31
-
32
- return (
33
- <>
34
- {/* Off-screen measurement container */}
35
- <div ref={measureRef} style={{ position: "absolute", visibility: "hidden" }}>
36
- {tags.map((tag) => <TagChip key={tag.id} tag={tag} />)}
37
- </div>
38
- <span ref={textMeasureRef} style={{ visibility: "hidden", position: "absolute" }}>
39
- Search...
40
- </span>
41
-
42
- {/* Visible tag zone */}
43
- <div ref={middleRef} className="flex overflow-hidden gap-1 px-2">
44
- {tags.slice(0, visibleCount).map((tag) => <TagChip key={tag.id} tag={tag} />)}
45
- {visibleCount < tags.length && (
46
- <button ref={badgeRef}>+{tags.length - visibleCount}</button>
47
- )}
48
- <input ref={inputRef} placeholder="Search..." />
49
- </div>
50
- </>
51
- )
32
+ import { useAutoLimitTags } from "./use-auto-limit-tags"
33
+
34
+ function TagRow({ tags }: { tags: string[] }) {
35
+ const {
36
+ visibleCount,
37
+ middleRef,
38
+ measureRef,
39
+ textMeasureRef,
40
+ badgeRef,
41
+ inputRef,
42
+ } = useAutoLimitTags({ count: tags.length, placeholder: "Search..." })
43
+
44
+ const overflowCount = tags.length - visibleCount
45
+
46
+ return (
47
+ <>
48
+ {/* Visible tag zone */}
49
+ <div ref={middleRef} style={{ overflow: "hidden", display: "flex", gap: 8 }}>
50
+ {tags.slice(0, visibleCount).map((tag) => (
51
+ <span key={tag}>{tag}</span>
52
+ ))}
53
+ {overflowCount > 0 && (
54
+ <button ref={badgeRef}>+{overflowCount}</button>
55
+ )}
56
+ <input ref={inputRef} placeholder="Search..." />
57
+ </div>
58
+
59
+ {/* Off-screen measurement elements */}
60
+ <div ref={measureRef} style={{ visibility: "hidden", position: "absolute" }}>
61
+ {tags.map((tag) => <span key={tag}>{tag}</span>)}
62
+ </div>
63
+ <span ref={textMeasureRef} style={{ visibility: "hidden", position: "absolute" }}>
64
+ Search...
65
+ </span>
66
+ </>
67
+ )
68
+ }
52
69
  ```
53
70
 
54
- > **Note:** `middleRef` must have `overflow-hidden`, explicit `gap`, and `padding` set via CSS — the hook reads these values directly with `getComputedStyle` and uses a `ResizeObserver` to recalculate on container width changes.
71
+ > **Note:** The `measureRef` container must render a hidden copy of **all** tags off-screen so the hook can measure each chip's true rendered width regardless of which tags are currently visible.
@@ -0,0 +1,44 @@
1
+ <!-- source-hash: 470d7db06c3aaa133ca4e063375a0c98 -->
2
+ Manages the timing of when field-level validation error messages are displayed, deferring visibility until the user has stopped typing or left the field.
3
+
4
+ ## Key Components
5
+
6
+ ### `UseDeferredErrorResult`
7
+ Interface describing the hook's return value:
8
+ - `error` — The validation message to render, or `undefined` when suppressed (user is still typing) or the field is valid
9
+ - `onBlur` — Callback to attach to the field's `onBlur` event; immediately reveals the error and keeps validation live going forward
10
+
11
+ ### `useDeferredError(error, value, delay?)`
12
+ Hook that controls error reveal timing with two trigger paths:
13
+ - **Blur/touch** — Revealing immediately when the field loses focus (`onBlur`), and remaining live thereafter
14
+ - **Idle timer** — Revealing after `delay` ms (default `1500`) of no value changes; every keystroke resets the countdown
15
+
16
+ Once a field is touched, the error stays reactive. If the error clears (field becomes valid), it disappears immediately regardless of touch/pause state.
17
+
18
+ ## Usage Example
19
+
20
+ ```typescript
21
+ import { useDeferredError } from './use-deferred-error'
22
+
23
+ function EmailField({ value, onChange, validationError }) {
24
+ const { error, onBlur } = useDeferredError(validationError, value)
25
+
26
+ return (
27
+ <div>
28
+ <input
29
+ type="email"
30
+ value={value}
31
+ onChange={(e) => onChange(e.target.value)}
32
+ onBlur={onBlur}
33
+ />
34
+ {error && <span className="error">{error}</span>}
35
+ </div>
36
+ )
37
+ }
38
+ ```
39
+
40
+ To use a custom delay (e.g. 800 ms for faster feedback):
41
+
42
+ ```typescript
43
+ const { error, onBlur } = useDeferredError(validationError, value, 800)
44
+ ```