@flamingo-stack/openframe-frontend-core 0.0.204 → 0.0.205

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 (509) hide show
  1. package/dist/{chunk-4CWSZPXH.cjs → chunk-24KCAECR.cjs} +9 -9
  2. package/dist/{chunk-4CWSZPXH.cjs.map → chunk-24KCAECR.cjs.map} +1 -1
  3. package/dist/chunk-27APPAJN.cjs +24 -0
  4. package/dist/chunk-27APPAJN.cjs.map +1 -0
  5. package/dist/{chunk-UC43NICZ.cjs → chunk-664KA5FI.cjs} +2 -35
  6. package/dist/chunk-664KA5FI.cjs.map +1 -0
  7. package/dist/chunk-6RZYJICV.cjs +24 -0
  8. package/dist/chunk-6RZYJICV.cjs.map +1 -0
  9. package/dist/chunk-7L4DWM7P.js +24 -0
  10. package/dist/chunk-7L4DWM7P.js.map +1 -0
  11. package/dist/chunk-BZFW3FOF.cjs +21 -0
  12. package/dist/chunk-BZFW3FOF.cjs.map +1 -0
  13. package/dist/{chunk-N57KWHDB.js → chunk-CIPO6DXK.js} +5 -5
  14. package/dist/chunk-EL5YVPD5.js +21 -0
  15. package/dist/chunk-EL5YVPD5.js.map +1 -0
  16. package/dist/{chunk-ARQ4XP64.cjs → chunk-FDCFI7YT.cjs} +40080 -31492
  17. package/dist/chunk-FDCFI7YT.cjs.map +1 -0
  18. package/dist/chunk-G7UE6RKV.cjs +121 -0
  19. package/dist/chunk-G7UE6RKV.cjs.map +1 -0
  20. package/dist/{chunk-25LVV26X.cjs → chunk-JUZGUQMX.cjs} +178 -50
  21. package/dist/chunk-JUZGUQMX.cjs.map +1 -0
  22. package/dist/{chunk-SZPJ5R5B.js → chunk-KSOOKNBG.js} +1 -34
  23. package/dist/chunk-KSOOKNBG.js.map +1 -0
  24. package/dist/{chunk-RMB5DVED.cjs → chunk-KUZGEA7U.cjs} +83 -66
  25. package/dist/chunk-KUZGEA7U.cjs.map +1 -0
  26. package/dist/chunk-LXC6P2EO.js +63 -0
  27. package/dist/chunk-LXC6P2EO.js.map +1 -0
  28. package/dist/chunk-MJNXIEV2.js +24 -0
  29. package/dist/chunk-MJNXIEV2.js.map +1 -0
  30. package/dist/{chunk-CPXLQ57U.js → chunk-MVGGXOFA.js} +37 -20
  31. package/dist/chunk-MVGGXOFA.js.map +1 -0
  32. package/dist/{chunk-LY34ORX6.js → chunk-O55ZUAX7.js} +39920 -31332
  33. package/dist/chunk-O55ZUAX7.js.map +1 -0
  34. package/dist/chunk-OHPI2HRK.js +47 -0
  35. package/dist/chunk-OHPI2HRK.js.map +1 -0
  36. package/dist/chunk-PLJLE4A4.js +121 -0
  37. package/dist/chunk-PLJLE4A4.js.map +1 -0
  38. package/dist/{chunk-XGL5FKIK.js → chunk-SCN5WFIZ.js} +148 -20
  39. package/dist/chunk-SCN5WFIZ.js.map +1 -0
  40. package/dist/chunk-WBR7H6E3.cjs +47 -0
  41. package/dist/chunk-WBR7H6E3.cjs.map +1 -0
  42. package/dist/chunk-XL4V2PYG.cjs +63 -0
  43. package/dist/chunk-XL4V2PYG.cjs.map +1 -0
  44. package/dist/components/announcement-bar.d.ts.map +1 -1
  45. package/dist/components/chat/chat-attachment-bar.d.ts +66 -0
  46. package/dist/components/chat/chat-attachment-bar.d.ts.map +1 -0
  47. package/dist/components/chat/chat-container.d.ts +21 -1
  48. package/dist/components/chat/chat-container.d.ts.map +1 -1
  49. package/dist/components/chat/chat-input.d.ts.map +1 -1
  50. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  51. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  52. package/dist/components/chat/chat-panel-context.d.ts +9 -0
  53. package/dist/components/chat/chat-panel-context.d.ts.map +1 -0
  54. package/dist/components/chat/chat-ticket-list.d.ts +1 -1
  55. package/dist/components/chat/chat-ticket-list.d.ts.map +1 -1
  56. package/dist/components/chat/embeddable-chat.d.ts +42 -0
  57. package/dist/components/chat/embeddable-chat.d.ts.map +1 -0
  58. package/dist/components/chat/entity-cards/admin-content-card.d.ts +34 -0
  59. package/dist/components/chat/entity-cards/admin-content-card.d.ts.map +1 -0
  60. package/dist/components/chat/entity-cards/block-card.d.ts.map +1 -0
  61. package/dist/components/chat/entity-cards/blog-card.d.ts +30 -0
  62. package/dist/components/chat/entity-cards/blog-card.d.ts.map +1 -0
  63. package/dist/components/chat/entity-cards/blog-image-placeholder.d.ts +26 -0
  64. package/dist/components/chat/entity-cards/blog-image-placeholder.d.ts.map +1 -0
  65. package/dist/components/chat/entity-cards/campaign-card-admin.d.ts +33 -0
  66. package/dist/components/chat/entity-cards/campaign-card-admin.d.ts.map +1 -0
  67. package/dist/components/chat/entity-cards/case-study-card.d.ts +20 -0
  68. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -0
  69. package/dist/components/chat/entity-cards/chat-ticket-item.d.ts.map +1 -0
  70. package/dist/components/chat/{chat-video-entity-card.d.ts → entity-cards/chat-video-entity-card.d.ts} +1 -1
  71. package/dist/components/chat/entity-cards/chat-video-entity-card.d.ts.map +1 -0
  72. package/dist/components/chat/entity-cards/customer-interview-card.d.ts +19 -0
  73. package/dist/components/chat/entity-cards/customer-interview-card.d.ts.map +1 -0
  74. package/dist/components/chat/entity-cards/data-room-doc-card.d.ts +47 -0
  75. package/dist/components/chat/entity-cards/data-room-doc-card.d.ts.map +1 -0
  76. package/dist/components/chat/entity-cards/dispatch.d.ts +119 -0
  77. package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -0
  78. package/dist/components/chat/entity-cards/entity-author-card.d.ts +87 -0
  79. package/dist/components/chat/entity-cards/entity-author-card.d.ts.map +1 -0
  80. package/dist/components/chat/entity-cards/generic-entity-card.d.ts +42 -0
  81. package/dist/components/chat/entity-cards/generic-entity-card.d.ts.map +1 -0
  82. package/dist/components/chat/entity-cards/github-activity-card.d.ts +37 -0
  83. package/dist/components/chat/entity-cards/github-activity-card.d.ts.map +1 -0
  84. package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts +28 -0
  85. package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts.map +1 -0
  86. package/dist/components/chat/entity-cards/index.d.ts +32 -0
  87. package/dist/components/chat/entity-cards/index.d.ts.map +1 -0
  88. package/dist/components/chat/entity-cards/investor-update-card.d.ts +19 -0
  89. package/dist/components/chat/entity-cards/investor-update-card.d.ts.map +1 -0
  90. package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts +20 -0
  91. package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -0
  92. package/dist/components/chat/entity-cards/product-release-card-defaults.d.ts +21 -0
  93. package/dist/components/chat/entity-cards/product-release-card-defaults.d.ts.map +1 -0
  94. package/dist/components/chat/entity-cards/product-release-card.d.ts +12 -0
  95. package/dist/components/chat/entity-cards/product-release-card.d.ts.map +1 -0
  96. package/dist/components/chat/entity-cards/program-card-defaults.d.ts +32 -0
  97. package/dist/components/chat/entity-cards/program-card-defaults.d.ts.map +1 -0
  98. package/dist/components/chat/entity-cards/program-card.d.ts +37 -0
  99. package/dist/components/chat/entity-cards/program-card.d.ts.map +1 -0
  100. package/dist/components/chat/entity-cards/roadmap-card.d.ts +28 -0
  101. package/dist/components/chat/entity-cards/roadmap-card.d.ts.map +1 -0
  102. package/dist/components/chat/entity-cards/roadmap-vote-button.d.ts +12 -0
  103. package/dist/components/chat/entity-cards/roadmap-vote-button.d.ts.map +1 -0
  104. package/dist/components/chat/entity-cards/slack-message-card.d.ts +28 -0
  105. package/dist/components/chat/entity-cards/slack-message-card.d.ts.map +1 -0
  106. package/dist/components/chat/entity-cards/task-type-icon.d.ts +6 -0
  107. package/dist/components/chat/entity-cards/task-type-icon.d.ts.map +1 -0
  108. package/dist/components/chat/hooks/index.d.ts +10 -0
  109. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  110. package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts +5 -0
  111. package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts.map +1 -0
  112. package/dist/components/chat/hooks/use-chat-attachments.d.ts +33 -0
  113. package/dist/components/chat/hooks/use-chat-attachments.d.ts.map +1 -0
  114. package/dist/components/chat/hooks/use-chat-card-item.d.ts +7 -0
  115. package/dist/components/chat/hooks/use-chat-card-item.d.ts.map +1 -0
  116. package/dist/components/chat/hooks/use-chat-identity.d.ts +44 -0
  117. package/dist/components/chat/hooks/use-chat-identity.d.ts.map +1 -0
  118. package/dist/components/chat/hooks/use-chat.d.ts +30 -0
  119. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -0
  120. package/dist/components/chat/hooks/use-close-on-navigation.d.ts +2 -0
  121. package/dist/components/chat/hooks/use-close-on-navigation.d.ts.map +1 -0
  122. package/dist/components/chat/hooks/use-embedded-chat.d.ts +174 -0
  123. package/dist/components/chat/hooks/use-embedded-chat.d.ts.map +1 -0
  124. package/dist/components/chat/hooks/use-proxied-image-url.d.ts +18 -0
  125. package/dist/components/chat/hooks/use-proxied-image-url.d.ts.map +1 -0
  126. package/dist/components/chat/hooks/use-slash-commands.d.ts +32 -0
  127. package/dist/components/chat/hooks/use-slash-commands.d.ts.map +1 -0
  128. package/dist/components/chat/hooks/use-sse.d.ts +57 -0
  129. package/dist/components/chat/hooks/use-sse.d.ts.map +1 -0
  130. package/dist/components/chat/index.cjs +393 -0
  131. package/dist/components/chat/index.cjs.map +1 -0
  132. package/dist/components/chat/index.d.ts +5 -3
  133. package/dist/components/chat/index.d.ts.map +1 -1
  134. package/dist/components/chat/index.js +393 -0
  135. package/dist/components/chat/index.js.map +1 -0
  136. package/dist/components/chat/nav-link-anchor-via-runtime.d.ts +33 -0
  137. package/dist/components/chat/nav-link-anchor-via-runtime.d.ts.map +1 -0
  138. package/dist/components/chat/source-action-button.d.ts +39 -0
  139. package/dist/components/chat/source-action-button.d.ts.map +1 -0
  140. package/dist/components/chat/types/chat.types.d.ts +36 -0
  141. package/dist/components/chat/types/chat.types.d.ts.map +1 -1
  142. package/dist/components/chat/types/component.types.d.ts +56 -11
  143. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  144. package/dist/components/chat/types/entities/blog.d.ts +14 -0
  145. package/dist/components/chat/types/entities/blog.d.ts.map +1 -0
  146. package/dist/components/chat/types/entities/case-study.d.ts +10 -0
  147. package/dist/components/chat/types/entities/case-study.d.ts.map +1 -0
  148. package/dist/components/chat/types/entities/content-ref.d.ts +23 -0
  149. package/dist/components/chat/types/entities/content-ref.d.ts.map +1 -0
  150. package/dist/components/chat/types/entities/customer-interview.d.ts +10 -0
  151. package/dist/components/chat/types/entities/customer-interview.d.ts.map +1 -0
  152. package/dist/components/chat/types/entities/data-room-doc.d.ts +37 -0
  153. package/dist/components/chat/types/entities/data-room-doc.d.ts.map +1 -0
  154. package/dist/components/chat/types/entities/github-activity.d.ts +29 -0
  155. package/dist/components/chat/types/entities/github-activity.d.ts.map +1 -0
  156. package/dist/components/chat/types/entities/hubspot-ticket.d.ts +39 -0
  157. package/dist/components/chat/types/entities/hubspot-ticket.d.ts.map +1 -0
  158. package/dist/components/chat/types/entities/index.d.ts +28 -0
  159. package/dist/components/chat/types/entities/index.d.ts.map +1 -0
  160. package/dist/components/chat/types/entities/investor-update.d.ts +83 -0
  161. package/dist/components/chat/types/entities/investor-update.d.ts.map +1 -0
  162. package/dist/components/chat/types/entities/onboarding-guide.d.ts +79 -0
  163. package/dist/components/chat/types/entities/onboarding-guide.d.ts.map +1 -0
  164. package/dist/components/chat/types/entities/program-types.d.ts +303 -0
  165. package/dist/components/chat/types/entities/program-types.d.ts.map +1 -0
  166. package/dist/components/chat/types/entities/roadmap-item.d.ts +41 -0
  167. package/dist/components/chat/types/entities/roadmap-item.d.ts.map +1 -0
  168. package/dist/components/chat/types/entities/slack-message.d.ts +28 -0
  169. package/dist/components/chat/types/entities/slack-message.d.ts.map +1 -0
  170. package/dist/components/chat/types/index.d.ts +1 -0
  171. package/dist/components/chat/types/index.d.ts.map +1 -1
  172. package/dist/components/chat/utils/agent-status-message.d.ts +18 -0
  173. package/dist/components/chat/utils/agent-status-message.d.ts.map +1 -0
  174. package/dist/components/chat/utils/auto-continuation-directive.d.ts +38 -0
  175. package/dist/components/chat/utils/auto-continuation-directive.d.ts.map +1 -0
  176. package/dist/components/chat/utils/chat-attachment-markdown.d.ts +114 -0
  177. package/dist/components/chat/utils/chat-attachment-markdown.d.ts.map +1 -0
  178. package/dist/components/chat/utils/chat-authed-fetch.d.ts +13 -0
  179. package/dist/components/chat/utils/chat-authed-fetch.d.ts.map +1 -0
  180. package/dist/components/chat/utils/chat-nav-resolution.d.ts +72 -0
  181. package/dist/components/chat/utils/chat-nav-resolution.d.ts.map +1 -0
  182. package/dist/components/chat/utils/chat-proxy-auth-storage.d.ts +43 -0
  183. package/dist/components/chat/utils/chat-proxy-auth-storage.d.ts.map +1 -0
  184. package/dist/components/chat/utils/chip-action-class.d.ts +16 -0
  185. package/dist/components/chat/utils/chip-action-class.d.ts.map +1 -0
  186. package/dist/components/chat/utils/chip-styles.d.ts +32 -0
  187. package/dist/components/chat/utils/chip-styles.d.ts.map +1 -0
  188. package/dist/components/chat/utils/clickup-task-type-utils.d.ts +38 -0
  189. package/dist/components/chat/utils/clickup-task-type-utils.d.ts.map +1 -0
  190. package/dist/components/chat/utils/compact-card-classes.d.ts +50 -0
  191. package/dist/components/chat/utils/compact-card-classes.d.ts.map +1 -0
  192. package/dist/components/chat/utils/decide-new-tab.d.ts +39 -0
  193. package/dist/components/chat/utils/decide-new-tab.d.ts.map +1 -0
  194. package/dist/components/chat/utils/external-app-urls.d.ts +14 -0
  195. package/dist/components/chat/utils/external-app-urls.d.ts.map +1 -0
  196. package/dist/components/chat/utils/flatten-assistant-content.d.ts +25 -0
  197. package/dist/components/chat/utils/flatten-assistant-content.d.ts.map +1 -0
  198. package/dist/components/chat/utils/icon-registry.d.ts +67 -0
  199. package/dist/components/chat/utils/icon-registry.d.ts.map +1 -0
  200. package/dist/components/chat/utils/index.d.ts +21 -0
  201. package/dist/components/chat/utils/index.d.ts.map +1 -1
  202. package/dist/components/chat/utils/is-cross-origin-url.d.ts +22 -0
  203. package/dist/components/chat/utils/is-cross-origin-url.d.ts.map +1 -0
  204. package/dist/components/chat/utils/nav-anchor-props.d.ts +54 -0
  205. package/dist/components/chat/utils/nav-anchor-props.d.ts.map +1 -0
  206. package/dist/components/chat/utils/nav-click-handler.d.ts +51 -0
  207. package/dist/components/chat/utils/nav-click-handler.d.ts.map +1 -0
  208. package/dist/components/chat/utils/scroll-anchor.d.ts +30 -0
  209. package/dist/components/chat/utils/scroll-anchor.d.ts.map +1 -0
  210. package/dist/components/chat/utils/slash-dispatch-utils.d.ts +109 -0
  211. package/dist/components/chat/utils/slash-dispatch-utils.d.ts.map +1 -0
  212. package/dist/components/chat/utils/source-icons.d.ts +8 -0
  213. package/dist/components/chat/utils/source-icons.d.ts.map +1 -0
  214. package/dist/components/chat/utils/source-row-cta.d.ts +111 -0
  215. package/dist/components/chat/utils/source-row-cta.d.ts.map +1 -0
  216. package/dist/components/features/figma-prototype-viewer.d.ts.map +1 -1
  217. package/dist/components/features/index.cjs +12 -6
  218. package/dist/components/features/index.cjs.map +1 -1
  219. package/dist/components/features/index.js +11 -5
  220. package/dist/components/features/video.d.ts.map +1 -1
  221. package/dist/components/icons/index.cjs +3 -3
  222. package/dist/components/icons/index.js +2 -2
  223. package/dist/components/index.cjs +274 -8
  224. package/dist/components/index.cjs.map +1 -1
  225. package/dist/components/index.js +273 -7
  226. package/dist/components/interactive-wrapper.d.ts +3 -3
  227. package/dist/components/navigation/index.cjs +12 -6
  228. package/dist/components/navigation/index.cjs.map +1 -1
  229. package/dist/components/navigation/index.js +11 -5
  230. package/dist/components/resizable.d.ts +1 -1
  231. package/dist/components/shared/product-release/product-release-card-skeleton.d.ts +1 -1
  232. package/dist/components/shared/product-release/product-release-card-skeleton.d.ts.map +1 -1
  233. package/dist/components/shared/product-release/product-release-card.d.ts +19 -12
  234. package/dist/components/shared/product-release/product-release-card.d.ts.map +1 -1
  235. package/dist/components/shared/product-release/release-detail-page.d.ts +2 -4
  236. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  237. package/dist/components/ui/button/button.d.ts +13 -0
  238. package/dist/components/ui/button/button.d.ts.map +1 -1
  239. package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
  240. package/dist/components/ui/entity-image.d.ts.map +1 -1
  241. package/dist/components/ui/file-manager/index.cjs +71 -70
  242. package/dist/components/ui/file-manager/index.cjs.map +1 -1
  243. package/dist/components/ui/file-manager/index.js +6 -5
  244. package/dist/components/ui/file-manager/index.js.map +1 -1
  245. package/dist/components/ui/hover-dropdown.d.ts +66 -0
  246. package/dist/components/ui/hover-dropdown.d.ts.map +1 -0
  247. package/dist/components/ui/index.cjs +276 -6
  248. package/dist/components/ui/index.cjs.map +1 -1
  249. package/dist/components/ui/index.d.ts +1 -0
  250. package/dist/components/ui/index.d.ts.map +1 -1
  251. package/dist/components/ui/index.js +278 -8
  252. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -1
  253. package/dist/components/ui/square-avatar.d.ts.map +1 -1
  254. package/dist/contexts/chat-runtime-context.d.ts +109 -0
  255. package/dist/contexts/chat-runtime-context.d.ts.map +1 -0
  256. package/dist/contexts/endpoints-runtime-context.d.ts +28 -0
  257. package/dist/contexts/endpoints-runtime-context.d.ts.map +1 -0
  258. package/dist/contexts/index.cjs +30 -0
  259. package/dist/contexts/index.cjs.map +1 -0
  260. package/dist/contexts/index.d.ts +26 -0
  261. package/dist/contexts/index.d.ts.map +1 -0
  262. package/dist/contexts/index.js +30 -0
  263. package/dist/contexts/index.js.map +1 -0
  264. package/dist/contexts/use-outer-or-default.d.ts +29 -0
  265. package/dist/contexts/use-outer-or-default.d.ts.map +1 -0
  266. package/dist/embed-shims/index.cjs +51 -0
  267. package/dist/embed-shims/index.cjs.map +1 -0
  268. package/dist/embed-shims/index.d.ts +31 -0
  269. package/dist/embed-shims/index.d.ts.map +1 -0
  270. package/dist/embed-shims/index.js +51 -0
  271. package/dist/embed-shims/index.js.map +1 -0
  272. package/dist/embed-shims/next-dynamic.cjs +12 -0
  273. package/dist/embed-shims/next-dynamic.cjs.map +1 -0
  274. package/dist/embed-shims/next-dynamic.d.ts +47 -0
  275. package/dist/embed-shims/next-dynamic.d.ts.map +1 -0
  276. package/dist/embed-shims/next-dynamic.js +12 -0
  277. package/dist/embed-shims/next-dynamic.js.map +1 -0
  278. package/dist/embed-shims/next-image.cjs +12 -0
  279. package/dist/embed-shims/next-image.cjs.map +1 -0
  280. package/dist/embed-shims/next-image.d.ts +28 -0
  281. package/dist/embed-shims/next-image.d.ts.map +1 -0
  282. package/dist/embed-shims/next-image.js +12 -0
  283. package/dist/embed-shims/next-image.js.map +1 -0
  284. package/dist/embed-shims/next-link.cjs +14 -0
  285. package/dist/embed-shims/next-link.cjs.map +1 -0
  286. package/dist/embed-shims/next-link.d.ts +22 -0
  287. package/dist/embed-shims/next-link.d.ts.map +1 -0
  288. package/dist/embed-shims/next-link.js +14 -0
  289. package/dist/embed-shims/next-link.js.map +1 -0
  290. package/dist/embed-shims/next-navigation.cjs +30 -0
  291. package/dist/embed-shims/next-navigation.cjs.map +1 -0
  292. package/dist/embed-shims/next-navigation.d.ts +46 -0
  293. package/dist/embed-shims/next-navigation.d.ts.map +1 -0
  294. package/dist/embed-shims/next-navigation.js +30 -0
  295. package/dist/embed-shims/next-navigation.js.map +1 -0
  296. package/dist/hooks/index.cjs +10 -4
  297. package/dist/hooks/index.cjs.map +1 -1
  298. package/dist/hooks/index.d.ts +2 -0
  299. package/dist/hooks/index.d.ts.map +1 -1
  300. package/dist/hooks/index.js +9 -3
  301. package/dist/hooks/use-access-code-integration.d.ts +48 -0
  302. package/dist/hooks/use-access-code-integration.d.ts.map +1 -0
  303. package/dist/hooks/use-contact-submission.d.ts.map +1 -1
  304. package/dist/hooks/use-og-placeholder.d.ts +31 -0
  305. package/dist/hooks/use-og-placeholder.d.ts.map +1 -0
  306. package/dist/hooks/use-toast.d.ts +1 -1
  307. package/dist/index.cjs +367 -7
  308. package/dist/index.cjs.map +1 -1
  309. package/dist/index.js +378 -18
  310. package/dist/types/index.cjs.map +1 -1
  311. package/dist/types/index.js.map +1 -1
  312. package/dist/utils/access-code-client.d.ts +21 -37
  313. package/dist/utils/access-code-client.d.ts.map +1 -1
  314. package/dist/utils/cn.d.ts +0 -27
  315. package/dist/utils/cn.d.ts.map +1 -1
  316. package/dist/utils/color-analysis.d.ts +33 -0
  317. package/dist/utils/color-analysis.d.ts.map +1 -0
  318. package/dist/utils/date-formatters.d.ts +16 -5
  319. package/dist/utils/date-formatters.d.ts.map +1 -1
  320. package/dist/utils/fetch-priority.d.ts +3 -0
  321. package/dist/utils/fetch-priority.d.ts.map +1 -0
  322. package/dist/utils/format.d.ts +192 -1
  323. package/dist/utils/format.d.ts.map +1 -1
  324. package/dist/utils/image-proxy.d.ts +67 -2
  325. package/dist/utils/image-proxy.d.ts.map +1 -1
  326. package/dist/utils/index.cjs +1274 -155
  327. package/dist/utils/index.cjs.map +1 -1
  328. package/dist/utils/index.d.ts +19 -3
  329. package/dist/utils/index.d.ts.map +1 -1
  330. package/dist/utils/index.js +1200 -157
  331. package/dist/utils/index.js.map +1 -1
  332. package/dist/utils/local-storage-adapter.d.ts +46 -0
  333. package/dist/utils/local-storage-adapter.d.ts.map +1 -0
  334. package/dist/utils/source-icons.d.ts +78 -0
  335. package/dist/utils/source-icons.d.ts.map +1 -0
  336. package/package.json +29 -2
  337. package/src/components/announcement-bar.tsx +26 -4
  338. package/src/components/categories-cart.tsx +1 -1
  339. package/src/components/chat/chat-attachment-bar.tsx +323 -0
  340. package/src/components/chat/chat-container.tsx +39 -5
  341. package/src/components/chat/chat-input.tsx +7 -1
  342. package/src/components/chat/chat-message-enhanced.tsx +32 -22
  343. package/src/components/chat/chat-message-list.tsx +53 -4
  344. package/src/components/chat/chat-panel-context.tsx +37 -0
  345. package/src/components/chat/chat-ticket-list.tsx +1 -1
  346. package/src/components/chat/embeddable-chat.tsx +1106 -0
  347. package/src/components/chat/entity-cards/admin-content-card.tsx +155 -0
  348. package/src/components/chat/entity-cards/blog-card.tsx +259 -0
  349. package/src/components/chat/entity-cards/blog-image-placeholder.tsx +52 -0
  350. package/src/components/chat/entity-cards/campaign-card-admin.tsx +113 -0
  351. package/src/components/chat/entity-cards/case-study-card.tsx +192 -0
  352. package/src/components/chat/{chat-ticket-item.tsx → entity-cards/chat-ticket-item.tsx} +2 -2
  353. package/src/components/chat/{chat-video-entity-card.tsx → entity-cards/chat-video-entity-card.tsx} +2 -2
  354. package/src/components/chat/entity-cards/customer-interview-card.tsx +211 -0
  355. package/src/components/chat/entity-cards/data-room-doc-card.tsx +120 -0
  356. package/src/components/chat/entity-cards/dispatch.tsx +1093 -0
  357. package/src/components/chat/entity-cards/entity-author-card.tsx +193 -0
  358. package/src/components/chat/entity-cards/generic-entity-card.tsx +144 -0
  359. package/src/components/chat/entity-cards/github-activity-card.tsx +305 -0
  360. package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +205 -0
  361. package/src/components/chat/entity-cards/index.ts +125 -0
  362. package/src/components/chat/entity-cards/investor-update-card.tsx +150 -0
  363. package/src/components/chat/entity-cards/onboarding-guide-card.tsx +326 -0
  364. package/src/components/chat/entity-cards/product-release-card-defaults.ts +57 -0
  365. package/src/components/chat/entity-cards/product-release-card.tsx +19 -0
  366. package/src/components/chat/entity-cards/program-card-defaults.ts +62 -0
  367. package/src/components/chat/entity-cards/program-card.tsx +451 -0
  368. package/src/components/chat/entity-cards/roadmap-card.tsx +356 -0
  369. package/src/components/chat/entity-cards/roadmap-vote-button.tsx +54 -0
  370. package/src/components/chat/entity-cards/slack-message-card.tsx +182 -0
  371. package/src/components/chat/entity-cards/task-type-icon.tsx +60 -0
  372. package/src/components/chat/hooks/index.ts +22 -0
  373. package/src/components/chat/hooks/use-chat-attachment-image-gallery.tsx +114 -0
  374. package/src/components/chat/hooks/use-chat-attachments.ts +429 -0
  375. package/src/components/chat/hooks/use-chat-card-item.ts +102 -0
  376. package/src/components/chat/hooks/use-chat-identity.ts +139 -0
  377. package/src/components/chat/hooks/use-chat.ts +501 -0
  378. package/src/components/chat/hooks/use-close-on-navigation.ts +87 -0
  379. package/src/components/chat/hooks/use-embedded-chat.ts +1023 -0
  380. package/src/components/chat/hooks/use-proxied-image-url.ts +31 -0
  381. package/src/components/chat/hooks/use-slash-commands.ts +106 -0
  382. package/src/components/chat/hooks/use-sse.ts +143 -0
  383. package/src/components/chat/index.ts +30 -4
  384. package/src/components/chat/nav-link-anchor-via-runtime.tsx +72 -0
  385. package/src/components/chat/source-action-button.tsx +120 -0
  386. package/src/components/chat/types/chat.types.ts +61 -0
  387. package/src/components/chat/types/component.types.ts +57 -11
  388. package/src/components/chat/types/entities/blog.ts +27 -0
  389. package/src/components/chat/types/entities/case-study.ts +14 -0
  390. package/src/components/chat/types/entities/content-ref.ts +23 -0
  391. package/src/components/chat/types/entities/customer-interview.ts +15 -0
  392. package/src/components/chat/types/entities/data-room-doc.ts +37 -0
  393. package/src/components/chat/types/entities/github-activity.ts +36 -0
  394. package/src/components/chat/types/entities/hubspot-ticket.ts +39 -0
  395. package/src/components/chat/types/entities/index.ts +28 -0
  396. package/src/components/chat/types/entities/investor-update.ts +100 -0
  397. package/src/components/chat/types/entities/onboarding-guide.ts +101 -0
  398. package/src/components/chat/types/entities/program-types.ts +433 -0
  399. package/src/components/chat/types/entities/roadmap-item.ts +42 -0
  400. package/src/components/chat/types/entities/slack-message.ts +28 -0
  401. package/src/components/chat/types/index.ts +1 -0
  402. package/src/components/chat/utils/agent-status-message.ts +52 -0
  403. package/src/components/chat/utils/auto-continuation-directive.ts +70 -0
  404. package/src/components/chat/utils/chat-attachment-markdown.ts +190 -0
  405. package/src/components/chat/utils/chat-authed-fetch.ts +73 -0
  406. package/src/components/chat/utils/chat-nav-resolution.ts +151 -0
  407. package/src/components/chat/utils/chat-proxy-auth-storage.ts +148 -0
  408. package/src/components/chat/utils/chip-action-class.ts +19 -0
  409. package/src/components/chat/utils/chip-styles.ts +51 -0
  410. package/src/components/chat/utils/clickup-task-type-utils.ts +59 -0
  411. package/src/components/chat/utils/compact-card-classes.ts +97 -0
  412. package/src/components/chat/utils/decide-new-tab.ts +57 -0
  413. package/src/components/chat/utils/external-app-urls.ts +19 -0
  414. package/src/components/chat/utils/flatten-assistant-content.ts +35 -0
  415. package/src/components/chat/utils/icon-registry.ts +297 -0
  416. package/src/components/chat/utils/index.ts +133 -0
  417. package/src/components/chat/utils/is-cross-origin-url.ts +28 -0
  418. package/src/components/chat/utils/nav-anchor-props.ts +78 -0
  419. package/src/components/chat/utils/nav-click-handler.ts +81 -0
  420. package/src/components/chat/utils/scroll-anchor.ts +35 -0
  421. package/src/components/chat/utils/slash-dispatch-utils.ts +183 -0
  422. package/src/components/chat/utils/source-icons.ts +14 -0
  423. package/src/components/chat/utils/source-row-cta.ts +215 -0
  424. package/src/components/empty-state.tsx +1 -1
  425. package/src/components/features/board/ticket-card.tsx +1 -1
  426. package/src/components/features/figma-prototype-viewer.tsx +2 -1
  427. package/src/components/features/media-gallery-manager.tsx +1 -1
  428. package/src/components/features/parallax-image-showcase.tsx +1 -1
  429. package/src/components/features/release-media-manager.tsx +1 -1
  430. package/src/components/features/seo-editor-preview.tsx +1 -1
  431. package/src/components/features/video.tsx +54 -3
  432. package/src/components/footer-waitlist-button.tsx +1 -1
  433. package/src/components/navigation/header.tsx +1 -1
  434. package/src/components/shared/onboarding/onboarding-step-card.tsx +1 -1
  435. package/src/components/shared/product-release/product-release-card-skeleton.tsx +8 -44
  436. package/src/components/shared/product-release/product-release-card.tsx +31 -116
  437. package/src/components/shared/product-release/release-detail-page.tsx +12 -16
  438. package/src/components/ui/actions-menu.tsx +1 -1
  439. package/src/components/ui/button/button.tsx +41 -11
  440. package/src/components/ui/button/split-button.tsx +1 -1
  441. package/src/components/ui/dashboard-info-card.tsx +2 -3
  442. package/src/components/ui/data-table/data-table-row.tsx +1 -1
  443. package/src/components/ui/entity-image.tsx +2 -8
  444. package/src/components/ui/hover-dropdown.tsx +258 -0
  445. package/src/components/ui/image-gallery-modal.tsx +1 -1
  446. package/src/components/ui/index.ts +1 -0
  447. package/src/components/ui/markdown-editor.tsx +1 -1
  448. package/src/components/ui/more-actions-menu.tsx +1 -1
  449. package/src/components/ui/organization-card.tsx +1 -1
  450. package/src/components/ui/simple-markdown-renderer.tsx +53 -5
  451. package/src/components/ui/square-avatar.tsx +3 -12
  452. package/src/components/ui/tab-navigation.tsx +1 -1
  453. package/src/components/ui/table/table-row.tsx +1 -1
  454. package/src/components/unified-filter-logic.tsx +1 -1
  455. package/src/components/unified-pagination.tsx +1 -1
  456. package/src/components/user-summary-stub.tsx +1 -1
  457. package/src/components/vendor-display-button.tsx +1 -1
  458. package/src/components/vendor-icon.tsx +1 -1
  459. package/src/contexts/chat-runtime-context.tsx +163 -0
  460. package/src/contexts/endpoints-runtime-context.tsx +68 -0
  461. package/src/contexts/index.ts +38 -0
  462. package/src/contexts/use-outer-or-default.ts +42 -0
  463. package/src/embed-shims/index.ts +42 -0
  464. package/src/embed-shims/next-dynamic.tsx +70 -0
  465. package/src/embed-shims/next-image.tsx +114 -0
  466. package/src/embed-shims/next-link.tsx +91 -0
  467. package/src/embed-shims/next-navigation.tsx +201 -0
  468. package/src/hooks/index.ts +9 -0
  469. package/src/hooks/state/use-api-params.ts +1 -1
  470. package/src/hooks/state/use-query-params.ts +1 -1
  471. package/src/hooks/use-access-code-integration.ts +107 -0
  472. package/src/hooks/use-contact-submission.ts +7 -3
  473. package/src/hooks/use-og-placeholder.ts +45 -0
  474. package/src/stories/OnboardingStepCard.stories.tsx +140 -0
  475. package/src/styles/chat-animations.css +65 -0
  476. package/src/styles/index.css +1 -0
  477. package/src/utils/access-code-client.ts +32 -75
  478. package/src/utils/cn.ts +0 -65
  479. package/src/utils/color-analysis.ts +205 -0
  480. package/src/utils/date-formatters.ts +54 -11
  481. package/src/utils/fetch-priority.ts +41 -0
  482. package/src/utils/format.ts +525 -1
  483. package/src/utils/image-proxy.ts +127 -7
  484. package/src/utils/index.ts +145 -5
  485. package/src/utils/local-storage-adapter.ts +105 -0
  486. package/src/utils/source-icons.ts +219 -0
  487. package/dist/chunk-25LVV26X.cjs.map +0 -1
  488. package/dist/chunk-ARQ4XP64.cjs.map +0 -1
  489. package/dist/chunk-CPXLQ57U.js.map +0 -1
  490. package/dist/chunk-LY34ORX6.js.map +0 -1
  491. package/dist/chunk-RMB5DVED.cjs.map +0 -1
  492. package/dist/chunk-SZPJ5R5B.js.map +0 -1
  493. package/dist/chunk-UC43NICZ.cjs.map +0 -1
  494. package/dist/chunk-XGL5FKIK.js.map +0 -1
  495. package/dist/components/chat/block-card.d.ts.map +0 -1
  496. package/dist/components/chat/chat-ticket-item.d.ts.map +0 -1
  497. package/dist/components/chat/chat-video-entity-card.d.ts.map +0 -1
  498. package/dist/utils/dynamic-icons.d.ts +0 -26
  499. package/dist/utils/dynamic-icons.d.ts.map +0 -1
  500. package/dist/utils/format-relative-time.d.ts +0 -21
  501. package/dist/utils/format-relative-time.d.ts.map +0 -1
  502. package/src/utils/.dynamic-icons.md +0 -30
  503. package/src/utils/.format-relative-time.md +0 -36
  504. package/src/utils/dynamic-icons.tsx +0 -120
  505. package/src/utils/format-relative-time.ts +0 -52
  506. /package/dist/{chunk-N57KWHDB.js.map → chunk-CIPO6DXK.js.map} +0 -0
  507. /package/dist/components/chat/{block-card.d.ts → entity-cards/block-card.d.ts} +0 -0
  508. /package/dist/components/chat/{chat-ticket-item.d.ts → entity-cards/chat-ticket-item.d.ts} +0 -0
  509. /package/src/components/chat/{block-card.tsx → entity-cards/block-card.tsx} +0 -0
@@ -1,13 +1,12 @@
1
1
  'use client'
2
2
 
3
3
  import React from 'react'
4
- import Image from 'next/image'
4
+ import Image from '../../../embed-shims/next-image'
5
5
  import { InteractiveCard } from '../../ui/interactive-card'
6
6
  import { StatusBadge } from '../../ui/status-badge'
7
7
  import { SquareAvatar } from '../../ui/square-avatar'
8
8
  import {
9
9
  AlertTriangle,
10
- ChevronRight,
11
10
  Eye,
12
11
  Package,
13
12
  Play,
@@ -18,21 +17,28 @@ import {
18
17
  import { cn } from '../../../utils/cn'
19
18
 
20
19
  /**
21
- * Card density:
22
- * - `default`: full /releases page row (vertical title + description on the
23
- * left, version + date column on the right).
24
- * - `sm`: compact horizontal layout (~80px tall) sized for inline rendering
25
- * inside chat messages and other tight surfaces. Drops `<h3>` (block-only,
20
+ * Card density. Two variants, both actively used across openframe + flamingo
21
+ * apps and the related-content rail:
22
+ *
23
+ * - `lg`: rich large card used everywhere a product release is the focal
24
+ * item openframe's `/releases` catalog row, flamingo's DevCenter tab,
25
+ * investor-update related-content section. Three zones — hero (16:9 cover
26
+ * + version pill + title + summary), changelog stats strip (icons +
27
+ * counts), metadata grid footer (Type · Status · Released · Author). The
28
+ * grid mirrors the hub's `<EntityAuthorCard>` byte-for-byte (see lg
29
+ * branch comment).
30
+ *
31
+ * - `sm`: compact horizontal layout (~80px tall) for inline rendering inside
32
+ * chat messages and other tight surfaces. Drops `<h3>` (block-only,
26
33
  * illegal inside markdown `<p>`) for `<span>` text, swaps the outer
27
34
  * `InteractiveCard` for a `<span>`-anchored link, and collapses to:
28
35
  * 56px icon + 1-line title + 1-line meta (version · date).
29
- * - `catalog`: rich /releases catalog row. Three zones — hero (16:9 cover +
30
- * version pill + title + summary), changelog stats strip (icons + counts),
31
- * metadata grid footer (Type · Status · Released · Author). The grid
32
- * mirrors the hub's `<EntityAuthorCard>` byte-for-byte (see catalog
33
- * branch comment).
36
+ *
37
+ * A previous `default` variant (vertical title+description / version+date
38
+ * column) was deleted in the 2026-05 DRY pass it had a single consumer
39
+ * (the hub's RelatedContentSection) that has since moved to `lg`.
34
40
  */
35
- export type ProductReleaseCardSize = 'default' | 'sm' | 'catalog'
41
+ export type ProductReleaseCardSize = 'lg' | 'sm'
36
42
 
37
43
  /**
38
44
  * Minimal structural `<a>` prop bundle the consumer composes (typically
@@ -80,7 +86,7 @@ export interface ProductReleaseCardProps {
80
86
  anchorProps?: ProductReleaseCardAnchorProps
81
87
  /** Additional CSS classes */
82
88
  className?: string
83
- /** Card density. Defaults to `'default'`. */
89
+ /** Card density. Defaults to `'lg'` (the canonical large card). */
84
90
  size?: ProductReleaseCardSize
85
91
 
86
92
  // ─── Catalog-only props (ignored by `default` / `sm` branches) ─────────
@@ -125,7 +131,7 @@ export function ProductReleaseCard({
125
131
  onClick,
126
132
  anchorProps,
127
133
  className,
128
- size = 'default',
134
+ size = 'lg',
129
135
  coverImage,
130
136
  hasVideoCover,
131
137
  releaseType,
@@ -135,7 +141,7 @@ export function ProductReleaseCard({
135
141
  author,
136
142
  changelogCounts,
137
143
  }: ProductReleaseCardProps) {
138
- // ----- CATALOG branch (rich /releases catalog row) -------------------------
144
+ // ----- LG branch (rich /releases catalog row + related-content rail) -----
139
145
  // The card has THREE zones:
140
146
  // 1. Hero — cover image LEFT, version pill + title + summary RIGHT.
141
147
  // 2. Changelog strip — icons + counts (hidden when total === 0).
@@ -145,11 +151,11 @@ export function ProductReleaseCard({
145
151
  // author-cell shapes, byte-for-byte). The OSS lib has zero hub
146
152
  // coupling by design; we cannot import the hub's
147
153
  // <EntityAuthorCard>. This is the SAME inline-duplication policy
148
- // documented for the COMPACT_CARD_* string set at lines ~104-108.
149
- // If the hub's <EntityAuthorCard> visual changes (cell padding,
150
- // divider styles, avatar size, etc.), update this branch in
151
- // lockstep.
152
- if (size === 'catalog') {
154
+ // documented for the COMPACT_CARD_* string set in the chat-card
155
+ // file. If the hub's <EntityAuthorCard> visual changes (cell
156
+ // padding, divider styles, avatar size, etc.), update this branch
157
+ // in lockstep.
158
+ if (size === 'lg') {
153
159
  const totalChangelog =
154
160
  (changelogCounts?.features ?? 0) +
155
161
  (changelogCounts?.fixes ?? 0) +
@@ -556,99 +562,8 @@ export function ProductReleaseCard({
556
562
  )
557
563
  }
558
564
 
559
- // ----- DEFAULT branch (existing /releases card layout) -----------------
560
- // When `anchorProps` is supplied, the card behaves like every other
561
- // entity card on the related-content rail — real `<a>` with the
562
- // consumer's `useNavLink` bundle (cross-origin new tab, same-origin
563
- // → soft RSC nav, modifier-click → browser default). The
564
- // `<InteractiveCard onClick>` form remains the back-compat path for
565
- // the public `/releases` tab caller which still routes via
566
- // `router.push()` directly.
567
- if (anchorProps) {
568
- return (
569
- <a
570
- {...anchorProps}
571
- className={cn(
572
- 'bg-ods-card border border-ods-border rounded-[6px]',
573
- 'flex flex-col md:flex-row',
574
- 'items-start md:items-center',
575
- 'gap-3 md:gap-4',
576
- 'p-4 no-underline',
577
- 'transition-colors hover:border-ods-text-secondary/40',
578
- 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-1 focus-visible:ring-offset-ods-card',
579
- className,
580
- )}
581
- >
582
- {/* Left column - content */}
583
- <div className="flex-1 w-full md:w-auto min-w-0 flex flex-col justify-center gap-2">
584
- <div className="min-h-[48px] flex items-center">
585
- <h3 className="text-h3 text-ods-text-primary tracking-[-0.36px] line-clamp-2" title={title}>
586
- {title}
587
- </h3>
588
- </div>
589
- <p className="text-h4 text-ods-text-secondary line-clamp-3" title={summary || ' '}>
590
- {summary || ' '}
591
- </p>
592
- </div>
593
- <div className="flex items-center gap-2 w-full md:w-auto justify-start md:justify-end shrink-0">
594
- <div className="w-[200px] flex flex-col justify-center gap-2">
595
- <p className="text-h3 text-ods-text-primary tracking-[-0.36px] truncate">
596
- {version}
597
- </p>
598
- <p className="font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary truncate">
599
- {formattedDate}
600
- </p>
601
- </div>
602
- <div className="flex items-center justify-center p-3 shrink-0">
603
- <ChevronRight className="h-6 w-6 text-ods-text-primary" />
604
- </div>
605
- </div>
606
- </a>
607
- )
608
- }
609
- return (
610
- <InteractiveCard
611
- clickable={true}
612
- onClick={onClick}
613
- className={cn(
614
- 'bg-ods-card border border-ods-border rounded-[6px]',
615
- 'flex flex-col md:flex-row',
616
- 'items-start md:items-center',
617
- 'gap-3 md:gap-4',
618
- 'p-4',
619
- className
620
- )}
621
- >
622
- {/* Left column - content */}
623
- <div className="flex-1 w-full md:w-auto min-w-0 flex flex-col justify-center gap-2">
624
- <div className="min-h-[48px] flex items-center">
625
- <h3 className="text-h3 text-ods-text-primary tracking-[-0.36px] line-clamp-2" title={title}>
626
- {title}
627
- </h3>
628
- </div>
629
- <p className="text-h4 text-ods-text-secondary line-clamp-3" title={summary || ' '}>
630
- {summary || ' '}
631
- </p>
632
- </div>
633
-
634
- {/* Right column - version + date */}
635
- <div
636
- className="flex items-center gap-2 w-full md:w-auto justify-start md:justify-end shrink-0"
637
- onClick={(e) => e.stopPropagation()}
638
- >
639
- <div className="w-[200px] flex flex-col justify-center gap-2">
640
- <p className="text-h3 text-ods-text-primary tracking-[-0.36px] truncate">
641
- {version}
642
- </p>
643
- <p className="font-['DM_Sans'] font-medium text-[14px] leading-[20px] text-ods-text-secondary truncate">
644
- {formattedDate}
645
- </p>
646
- </div>
647
- {/* Icon column */}
648
- <div className="flex items-center justify-center p-3 shrink-0">
649
- <ChevronRight className="h-6 w-6 text-ods-text-primary" />
650
- </div>
651
- </div>
652
- </InteractiveCard>
653
- )
565
+ // Unreachable `size` is typed `'lg' | 'sm'` and both branches return
566
+ // above. Kept as a defensive throw so a future variant addition that
567
+ // forgets to return doesn't silently render `undefined`.
568
+ throw new Error(`ProductReleaseCard: unsupported size '${size as string}'`)
654
569
  }
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { useState, useEffect, ComponentType } from 'react';
4
- import Link from 'next/link';
4
+ import Link from '../../../embed-shims/next-link';
5
5
  import { Card, CardContent } from '../../ui/card';
6
6
  import { ArticleDetailLayout } from '../../layout/article-detail-layout';
7
7
  import { ReleaseChangelogSection } from '../../ui/release-changelog-section';
@@ -11,6 +11,7 @@ import { ImageGalleryModal } from '../../ui/image-gallery-modal';
11
11
  import { GitHubIcon } from '../../icons/github-icon';
12
12
  import { AlertTriangle, ExternalLink, BookMarked, Sparkles, TrendingUp, Wrench } from 'lucide-react';
13
13
  import { formatReleaseDate } from '../../../utils/date-formatters';
14
+ import { nameInitials } from '../../../utils/format';
14
15
  import { Video } from '../../features/video';
15
16
  import { DetailPageSkeleton } from '../detail-page-skeleton';
16
17
  import type { ChangelogEntry } from '../../../types/product-release';
@@ -21,10 +22,15 @@ export interface MarkdownRendererProps {
21
22
  content: string;
22
23
  }
23
24
 
24
- export interface RoadmapItem {
25
- id: string;
26
- [key: string]: unknown;
27
- }
25
+ // Canonical RoadmapItem shape lives in chat entity types — see
26
+ // `src/components/chat/types/entities/roadmap-item.ts`. The product-release
27
+ // detail page previously declared a structural placeholder
28
+ // (`{ id; [k: string]: unknown }`) that conflicted with the canonical
29
+ // shape once the entities barrel was added; re-exporting the canonical
30
+ // type fixes the collision while keeping the same import path for
31
+ // downstream consumers of `./release-detail-page`.
32
+ export type { RoadmapItem } from '../../chat/types/entities/roadmap-item';
33
+ import type { RoadmapItem } from '../../chat/types/entities/roadmap-item';
28
34
 
29
35
  export interface DeliveryResponse {
30
36
  completed: unknown[];
@@ -168,16 +174,6 @@ export function ReleaseDetailPage({
168
174
 
169
175
  const hasBreakingChanges = Array.isArray(release.breaking_changes) && release.breaking_changes.length > 0;
170
176
 
171
- // Get initials from full name
172
- const getInitials = (name: string) => {
173
- return name
174
- .split(' ')
175
- .map(n => n[0])
176
- .join('')
177
- .toUpperCase()
178
- .slice(0, 2);
179
- };
180
-
181
177
  // Type assertions for release data
182
178
  const releaseTitle = release.title as string;
183
179
  const releaseVersion = release.version as string;
@@ -277,7 +273,7 @@ export function ReleaseDetailPage({
277
273
  <SquareAvatar
278
274
  src={author?.avatar_url || ''}
279
275
  alt={author?.full_name || 'Author'}
280
- fallback={getInitials(author?.full_name || 'Unknown')}
276
+ fallback={nameInitials(author?.full_name || 'Unknown', '')}
281
277
  size="md"
282
278
  variant="round"
283
279
  />
@@ -2,7 +2,7 @@
2
2
 
3
3
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
4
4
  import { Check } from "lucide-react";
5
- import Link from "next/link";
5
+ import Link from "../../embed-shims/next-link";
6
6
  import React, { useCallback, useState } from "react";
7
7
  import { Chevron02RightIcon, Ellipsis01Icon } from "../icons-v2-generated";
8
8
  import { cn } from "../../utils/cn";
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Slot } from "@radix-ui/react-slot"
4
4
  import { cva, type VariantProps } from "class-variance-authority"
5
- import Link from "next/link"
5
+ import Link from "../../../embed-shims/next-link"
6
6
  import React from "react"
7
7
 
8
8
  import { cn } from "../../../utils/cn"
@@ -123,6 +123,19 @@ interface ButtonProps
123
123
  href?: string
124
124
  openInNewTab?: boolean
125
125
  prefetch?: boolean
126
+ /**
127
+ * Pre-resolved anchor bundle (from `useNavLink({ href, targetPlatform })`).
128
+ * When set, renders the Button as `<Link>` with `href` / `target` / `rel`
129
+ * / `onClick` spread from this object. Lets callers thread the unified
130
+ * nav decision directly without `<Button asChild><a {...linkProps}/>`
131
+ * gymnastics. Wins over the separate `href` / `openInNewTab` props.
132
+ */
133
+ linkProps?: {
134
+ href: string
135
+ target?: '_blank'
136
+ rel?: 'noopener noreferrer'
137
+ onClick?: React.MouseEventHandler<HTMLAnchorElement>
138
+ } | null
126
139
  leftIcon?: React.ReactNode
127
140
  rightIcon?: React.ReactNode
128
141
  /**
@@ -158,6 +171,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(
158
171
  href,
159
172
  openInNewTab,
160
173
  prefetch,
174
+ linkProps,
161
175
  leftIcon,
162
176
  rightIcon,
163
177
  splitIcon,
@@ -205,17 +219,26 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(
205
219
  </>
206
220
  )
207
221
 
208
- if (href) {
222
+ // `linkProps` (the pre-resolved bundle from `useNavLink({ href, targetPlatform })`)
223
+ // wins over the legacy `href` + `openInNewTab` props so callers can thread
224
+ // the unified nav decision directly. Either path produces the same `<Link>`.
225
+ const splitAnchor = linkProps ?? (href ? {
226
+ href,
227
+ target: openInNewTab ? '_blank' as const : undefined,
228
+ rel: openInNewTab ? 'noopener noreferrer' as const : undefined,
229
+ onClick: onClick as unknown as React.MouseEventHandler<HTMLAnchorElement> | undefined,
230
+ } : null)
231
+ if (splitAnchor) {
209
232
  return (
210
233
  <Link
211
- href={href}
234
+ href={splitAnchor.href}
212
235
  prefetch={prefetch}
213
- target={openInNewTab ? "_blank" : undefined}
214
- rel={openInNewTab ? "noopener noreferrer" : undefined}
236
+ target={splitAnchor.target}
237
+ rel={splitAnchor.rel}
215
238
  aria-disabled={isDisabled || undefined}
216
239
  tabIndex={isDisabled ? -1 : undefined}
217
240
  className={cn(shellClasses, isDisabled && "pointer-events-none")}
218
- onClick={onClick as unknown as React.MouseEventHandler<HTMLAnchorElement> | undefined}
241
+ onClick={splitAnchor.onClick}
219
242
  >
220
243
  {splitContent}
221
244
  </Link>
@@ -263,17 +286,24 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(
263
286
  </>
264
287
  )
265
288
 
266
- if (href) {
289
+ // Same `linkProps`-wins-over-href resolution as the splitIcon branch.
290
+ const anchor = linkProps ?? (href ? {
291
+ href,
292
+ target: openInNewTab ? '_blank' as const : undefined,
293
+ rel: openInNewTab ? 'noopener noreferrer' as const : undefined,
294
+ onClick: onClick as unknown as React.MouseEventHandler<HTMLAnchorElement> | undefined,
295
+ } : null)
296
+ if (anchor) {
267
297
  return (
268
298
  <Link
269
- href={href}
299
+ href={anchor.href}
270
300
  prefetch={prefetch}
271
- target={openInNewTab ? "_blank" : undefined}
272
- rel={openInNewTab ? "noopener noreferrer" : undefined}
301
+ target={anchor.target}
302
+ rel={anchor.rel}
273
303
  aria-disabled={isDisabled || undefined}
274
304
  tabIndex={isDisabled ? -1 : undefined}
275
305
  className={cn(classes, isDisabled && "pointer-events-none")}
276
- onClick={onClick as unknown as React.MouseEventHandler<HTMLAnchorElement> | undefined}
306
+ onClick={anchor.onClick}
277
307
  >
278
308
  {content}
279
309
  </Link>
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
 
3
3
  import { cva, type VariantProps } from "class-variance-authority"
4
- import Link from "next/link"
4
+ import Link from "../../../embed-shims/next-link"
5
5
  import React from "react"
6
6
 
7
7
  import { cn } from "../../../utils/cn"
@@ -1,5 +1,5 @@
1
1
  import type * as React from 'react'
2
- import Link from 'next/link'
2
+ import Link from '../../embed-shims/next-link'
3
3
  import { cn } from '../../utils/cn'
4
4
  import { QuestionCircleIcon } from '../icons-v2-generated/signs-and-symbols/question-circle-icon'
5
5
  import { CircularProgress, type CircularProgressOverflow, type CircularProgressVariant } from './circular-progress'
@@ -100,8 +100,7 @@ export function DashboardInfoCard({
100
100
  className={cn(
101
101
  baseClassName,
102
102
  'cursor-pointer group',
103
- 'hover:border-ods-accent',
104
- '[&:hover_.text-ods-text-primary]:text-ods-accent',
103
+ 'hover:border-ods-border-hover hover:bg-ods-card-hover',
105
104
  className
106
105
  )}
107
106
  >
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
 
3
- import Link from 'next/link'
3
+ import Link from '../../../embed-shims/next-link'
4
4
  import React, { memo, useCallback, useRef, type ReactNode } from 'react'
5
5
  import { flexRender, type Row } from '@tanstack/react-table'
6
6
  import { cn } from '../../../utils/cn'
@@ -2,13 +2,7 @@
2
2
 
3
3
  import React from 'react'
4
4
  import { cn } from '../../utils/cn'
5
-
6
- function getInitials(name?: string): string {
7
- if (!name) return ''
8
- const words = name.trim().split(/\s+/)
9
- if (words.length === 1) return words[0].charAt(0).toUpperCase()
10
- return (words[0].charAt(0) + words[words.length - 1].charAt(0)).toUpperCase()
11
- }
5
+ import { getFirstLastInitials } from '../../utils/format'
12
6
 
13
7
  export interface EntityImageProps {
14
8
  src?: string | null
@@ -26,7 +20,7 @@ export function EntityImage({ src, alt, fallbackText, className }: EntityImagePr
26
20
  }, [src])
27
21
 
28
22
  const showFallback = imageFailed || !src
29
- const initials = getInitials(fallbackText ?? alt)
23
+ const initials = getFirstLastInitials(fallbackText ?? alt)
30
24
 
31
25
  if (showFallback) {
32
26
  return (