@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
@@ -0,0 +1,205 @@
1
+ 'use client'
2
+
3
+ /**
4
+ * HubSpot Ticket Card — unified visual for hubspot-tickets markers.
5
+ *
6
+ * PURE PRESENTATION (no internal nav). The card receives the structured
7
+ * `<a>` prop bundle via `anchorProps` (composed by the caller from a
8
+ * runtime hook) and renders the rest from the `HubspotTicketItem` shape
9
+ * directly.
10
+ */
11
+
12
+ import React from 'react'
13
+ import { ExternalLink } from 'lucide-react'
14
+ import { StatusBadge } from '../../ui/status-badge'
15
+ import {
16
+ COMPACT_CARD_META_ROW,
17
+ COMPACT_CARD_META_ROW_BOX,
18
+ COMPACT_CARD_OUTER,
19
+ COMPACT_CARD_OUTER_STATIC,
20
+ COMPACT_CARD_SKELETON_OUTER,
21
+ COMPACT_CARD_TEXT_COL,
22
+ COMPACT_CARD_TITLE,
23
+ safeHref,
24
+ } from '../utils/compact-card-classes'
25
+ import { formatDateUTC as formatDate } from '../../../utils/format'
26
+ import type { HubspotTicketItem } from '../types/entities/hubspot-ticket'
27
+
28
+ export interface HubspotTicketCardAnchorProps {
29
+ href: string
30
+ target?: '_blank'
31
+ rel?: 'noopener noreferrer'
32
+ onClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void
33
+ }
34
+
35
+ export interface HubspotTicketCardProps {
36
+ item: HubspotTicketItem
37
+ variant?: 'row' | 'compact'
38
+ className?: string
39
+ anchorProps?: HubspotTicketCardAnchorProps
40
+ }
41
+
42
+ function formatToken(token: string | null | undefined): string | null {
43
+ if (!token) return null
44
+ const lower = token.toLowerCase().replace(/_/g, ' ')
45
+ return lower.charAt(0).toUpperCase() + lower.slice(1)
46
+ }
47
+
48
+ type BadgeScheme = 'success' | 'error' | 'warning' | 'cyan' | 'default'
49
+
50
+ function priorityScheme(priority: string | null | undefined): BadgeScheme {
51
+ const p = (priority || '').toUpperCase()
52
+ if (p === 'URGENT') return 'error'
53
+ if (p === 'HIGH') return 'warning'
54
+ if (p === 'MEDIUM') return 'cyan'
55
+ return 'default'
56
+ }
57
+
58
+ function statusScheme(status: string | null | undefined): BadgeScheme {
59
+ const s = (status || '').toUpperCase()
60
+ if (s === 'CLOSED') return 'success'
61
+ if (s === 'OPEN') return 'warning'
62
+ return 'default'
63
+ }
64
+
65
+ export function HubspotTicketCard({ item, variant = 'compact', className, anchorProps }: HubspotTicketCardProps) {
66
+ const statusText = item.statusLabel ?? formatToken(item.status)
67
+ const priorityText = formatToken(item.priority)
68
+ const dateText = formatDate(item.dateUpdated, { fallback: '', timezone: 'local' })
69
+
70
+ if (variant === 'row') {
71
+ return (
72
+ <div className={`flex items-center gap-3 min-w-0 ${className ?? ''}`}>
73
+ <span className="text-ods-text-primary text-sm font-medium truncate max-w-[260px] shrink-0">{item.title}</span>
74
+ {item.preview ? (
75
+ <span className="text-ods-text-secondary text-sm flex-1 min-w-0 truncate">{item.preview}</span>
76
+ ) : null}
77
+ {statusText ? (
78
+ <StatusBadge text={statusText} variant="button" colorScheme={statusScheme(item.status)} />
79
+ ) : null}
80
+ {dateText ? (
81
+ <span className="text-ods-text-secondary text-xs w-24 shrink-0 text-right">{dateText}</span>
82
+ ) : null}
83
+ </div>
84
+ )
85
+ }
86
+
87
+ const metaParts: React.ReactNode[] = []
88
+ if (item.customerCompany) {
89
+ metaParts.push(
90
+ <span key="company" className="min-w-0 truncate">{item.customerCompany}</span>,
91
+ )
92
+ }
93
+ if (dateText) metaParts.push(<span key="date" className="whitespace-nowrap">{dateText}</span>)
94
+
95
+ const href = safeHref(item.url)
96
+ const body = (
97
+ <>
98
+ <span className={COMPACT_CARD_TEXT_COL}>
99
+ <span className="flex flex-wrap items-center gap-1.5 min-w-0">
100
+ <span className={`${COMPACT_CARD_TITLE} shrink min-w-0`}>{item.title}</span>
101
+ {priorityText ? (
102
+ <StatusBadge
103
+ text={priorityText}
104
+ variant="button"
105
+ colorScheme={priorityScheme(item.priority)}
106
+ className="shrink-0"
107
+ />
108
+ ) : null}
109
+ {statusText ? (
110
+ <StatusBadge
111
+ text={statusText}
112
+ variant="button"
113
+ colorScheme={statusScheme(item.status)}
114
+ className="shrink-0"
115
+ />
116
+ ) : null}
117
+ </span>
118
+ {item.customerEmail ? (
119
+ <span className="flex min-w-0 items-center gap-1 text-[11px] leading-4 text-ods-text-secondary">
120
+ <span className="shrink-0 text-ods-text-secondary/70">From:</span>
121
+ <span className="min-w-0 truncate">{item.customerEmail}</span>
122
+ </span>
123
+ ) : null}
124
+ <span className="flex min-w-0">
125
+ <span className="line-clamp-4 whitespace-pre-wrap break-words text-[13px] leading-5 text-ods-text-secondary">
126
+ {item.preview || <span className="italic text-ods-text-secondary/60">No description provided.</span>}
127
+ </span>
128
+ </span>
129
+ {metaParts.length > 0 ? (
130
+ <span className={COMPACT_CARD_META_ROW_BOX}>
131
+ <span className={COMPACT_CARD_META_ROW}>
132
+ {metaParts.map((part, i) => (
133
+ <React.Fragment key={i}>
134
+ {i > 0 ? <span className="text-ods-text-secondary/40 shrink-0">·</span> : null}
135
+ <span className="min-w-0 truncate">{part}</span>
136
+ </React.Fragment>
137
+ ))}
138
+ </span>
139
+ </span>
140
+ ) : null}
141
+ </span>
142
+ {href ? (
143
+ <span className="flex shrink-0 items-center self-start h-5 text-ods-text-secondary">
144
+ <ExternalLink className="w-3.5 h-3.5" />
145
+ </span>
146
+ ) : null}
147
+ </>
148
+ )
149
+ if (anchorProps) {
150
+ return (
151
+ <a {...anchorProps} className={`${COMPACT_CARD_OUTER} ${className ?? ''}`}>
152
+ {body}
153
+ </a>
154
+ )
155
+ }
156
+ return href ? (
157
+ <a
158
+ href={href}
159
+ target="_blank"
160
+ rel="noopener noreferrer"
161
+ className={`${COMPACT_CARD_OUTER} ${className ?? ''}`}
162
+ >
163
+ {body}
164
+ </a>
165
+ ) : (
166
+ <span className={`${COMPACT_CARD_OUTER_STATIC} ${className ?? ''}`} aria-label="No link available">{body}</span>
167
+ )
168
+ }
169
+
170
+ export function HubspotTicketCardSkeleton({ variant = 'compact', className }: { variant?: 'row' | 'compact'; className?: string }) {
171
+ if (variant === 'row') {
172
+ return (
173
+ <div className={`flex items-center gap-3 min-w-0 animate-pulse ${className ?? ''}`}>
174
+ <div className="h-3 w-40 bg-ods-bg rounded shrink-0" />
175
+ <div className="h-3 w-2/3 bg-ods-bg/60 rounded flex-1" />
176
+ <div className="h-3 w-16 bg-ods-bg/60 rounded shrink-0" />
177
+ <div className="h-3 w-20 bg-ods-bg/60 rounded shrink-0" />
178
+ </div>
179
+ )
180
+ }
181
+ return (
182
+ <span className={`${COMPACT_CARD_SKELETON_OUTER} ${className ?? ''}`}>
183
+ <span className={COMPACT_CARD_TEXT_COL}>
184
+ <span className="flex flex-wrap items-center gap-1.5 min-w-0">
185
+ <span className="h-3.5 w-2/3 rounded bg-ods-bg" />
186
+ <span className="h-4 w-12 rounded-full bg-ods-bg/60" />
187
+ <span className="h-4 w-16 rounded-full bg-ods-bg/60" />
188
+ </span>
189
+ <span className="h-4 w-1/2 rounded bg-ods-bg/60" />
190
+ <span className="flex flex-col gap-0 min-w-0">
191
+ <span className="h-5 w-5/6 rounded bg-ods-bg/60" />
192
+ <span className="h-5 w-4/6 rounded bg-ods-bg/60" />
193
+ <span className="h-5 w-3/4 rounded bg-ods-bg/60" />
194
+ <span className="h-5 w-2/5 rounded bg-ods-bg/60" />
195
+ </span>
196
+ <span className={COMPACT_CARD_META_ROW_BOX}>
197
+ <span className="h-3 w-1/3 rounded bg-ods-bg/70" />
198
+ </span>
199
+ </span>
200
+ <span className="flex shrink-0 items-center self-start h-5">
201
+ <span className="h-3.5 w-3.5 rounded bg-ods-bg" />
202
+ </span>
203
+ </span>
204
+ )
205
+ }
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Entity-card barrel — re-exports every chat-surface card under one path.
3
+ *
4
+ * Cards in this directory are PURE PRESENTATION: they take a pre-resolved
5
+ * `href`, optional `placeholderUrl`, and entity data as props. They write
6
+ * NO internal click logic — consumers wrap the card with their own anchor
7
+ * (hub's `<NavLinkAnchor>` or lib's `<NavLinkAnchorViaRuntime>`).
8
+ */
9
+
10
+ // Existing supporting primitives
11
+ export {
12
+ EntityAuthorCard,
13
+ EntityMetadataValueCell,
14
+ EntityMetadataAuthorCell,
15
+ EMPTY_AUTHOR_PLACEHOLDER,
16
+ type EntityAuthorCardProps,
17
+ } from './entity-author-card'
18
+ export { BlogImagePlaceholder } from './blog-image-placeholder'
19
+ export { AdminContentCard } from './admin-content-card'
20
+
21
+ // Moved-into-subdir flat cards
22
+ export { BlockCard, type BlockCardProps } from './block-card'
23
+ export {
24
+ ChatTicketItem,
25
+ type ChatTicketItemData,
26
+ type ChatTicketItemProps,
27
+ } from './chat-ticket-item'
28
+ export {
29
+ ChatVideoEntityCard,
30
+ type ChatVideoEntityCardProps,
31
+ } from './chat-video-entity-card'
32
+ export {
33
+ ProductReleaseCard,
34
+ ProductReleaseCardSkeleton,
35
+ type ProductReleaseCardProps,
36
+ type ProductReleaseCardSize,
37
+ type ProductReleaseCardAnchorProps,
38
+ } from './product-release-card'
39
+
40
+ // Refactored pure-presentation cards
41
+ export { BlogCard, BlogCardSkeleton, type BlogCardProps } from './blog-card'
42
+ export {
43
+ CaseStudyCard,
44
+ CaseStudyCardSkeleton,
45
+ type CaseStudyCardProps,
46
+ } from './case-study-card'
47
+ export {
48
+ CustomerInterviewCard,
49
+ CustomerInterviewCardSkeleton,
50
+ type CustomerInterviewCardProps,
51
+ } from './customer-interview-card'
52
+ export {
53
+ InvestorUpdateCard,
54
+ InvestorUpdateCardSkeleton,
55
+ type InvestorUpdateCardProps,
56
+ } from './investor-update-card'
57
+ export {
58
+ OnboardingGuideCard,
59
+ OnboardingGuideCardSkeleton,
60
+ type OnboardingGuideCardProps,
61
+ } from './onboarding-guide-card'
62
+ export {
63
+ RoadmapCard,
64
+ RoadmapCardSkeleton,
65
+ type RoadmapCardProps,
66
+ type VoteType,
67
+ } from './roadmap-card'
68
+ export {
69
+ RoadmapVoteButton,
70
+ type RoadmapVoteButtonProps,
71
+ } from './roadmap-vote-button'
72
+ export { TaskTypeIcon, type TaskTypeIconProps } from './task-type-icon'
73
+ export {
74
+ GitHubActivityCard,
75
+ GitHubActivityCardSkeleton,
76
+ type GitHubActivityCardProps,
77
+ type GitHubActivityCardAnchorProps,
78
+ } from './github-activity-card'
79
+ export {
80
+ SlackMessageCard,
81
+ SlackMessageCardSkeleton,
82
+ type SlackMessageCardProps,
83
+ type SlackMessageCardAnchorProps,
84
+ } from './slack-message-card'
85
+ export {
86
+ HubspotTicketCard,
87
+ HubspotTicketCardSkeleton,
88
+ type HubspotTicketCardProps,
89
+ type HubspotTicketCardAnchorProps,
90
+ } from './hubspot-ticket-card'
91
+ export {
92
+ DataRoomDocCard,
93
+ DataRoomDocCardSkeleton,
94
+ type DataRoomDocCardProps,
95
+ type DataRoomDocCardAnchorProps,
96
+ } from './data-room-doc-card'
97
+ export {
98
+ ProgramCard,
99
+ ProgramCardSkeleton,
100
+ type ProgramCardProps,
101
+ } from './program-card'
102
+ export {
103
+ CampaignCardAdmin,
104
+ CampaignCardAdminSkeleton,
105
+ type CampaignCardItem,
106
+ type CampaignCardAdminProps,
107
+ type CampaignCardAdminAnchorProps,
108
+ } from './campaign-card-admin'
109
+ export {
110
+ GenericEntityCard,
111
+ GenericEntityCardSkeleton,
112
+ type GenericEntityCardItem,
113
+ type GenericEntityCardProps,
114
+ type GenericEntityCardAnchorProps,
115
+ } from './generic-entity-card'
116
+
117
+ // Per-type dispatch + ChatCardLoader — single switch over canonical
118
+ // chat cards. Adding a new card type = one entry in `CHAT_CARD_REGISTRY`
119
+ // inside `./dispatch.tsx`.
120
+ export {
121
+ renderChatInlineEntityCard,
122
+ ChatCardLoader,
123
+ type ChatCardRenderOptions,
124
+ type ChatCardDispatchExtras,
125
+ } from './dispatch'
@@ -0,0 +1,150 @@
1
+ 'use client'
2
+
3
+ /**
4
+ * InvestorUpdateCard (pure presentation).
5
+ *
6
+ * Two densities — `default` (uses `AdminContentCard`) and `sm` (compact
7
+ * horizontal). The card writes NO click logic — callers wrap with their
8
+ * own anchor and pass the resolved detail URL via `href`.
9
+ */
10
+
11
+ import React from 'react'
12
+ import { Calendar } from 'lucide-react'
13
+ import { AdminContentCard } from './admin-content-card'
14
+ import { formatInvestorUpdatePeriod, type InvestorUpdate } from '../types/entities/investor-update'
15
+ import {
16
+ COMPACT_CARD_IMAGE_SLOT,
17
+ COMPACT_CARD_META_ROW_BOX,
18
+ COMPACT_CARD_OUTER,
19
+ COMPACT_CARD_ROW_FILLER,
20
+ COMPACT_CARD_SKELETON_IMAGE_SLOT,
21
+ COMPACT_CARD_SKELETON_OUTER,
22
+ COMPACT_CARD_SUBTITLE,
23
+ COMPACT_CARD_SUMMARY,
24
+ COMPACT_CARD_TEXT_COL,
25
+ COMPACT_CARD_TITLE,
26
+ COMPACT_CARD_TITLE_ROW,
27
+ } from '../utils/compact-card-classes'
28
+
29
+ export interface InvestorUpdateCardProps {
30
+ update: InvestorUpdate
31
+ href: string
32
+ /** When `_blank`, opens in a new tab. Set by chat dispatch via
33
+ * `computeIsNewTab`. Defaults to same-tab. */
34
+ target?: '_blank'
35
+ rel?: 'noopener noreferrer'
36
+ targetPlatform?: string | null
37
+ /** OG placeholder URL used when `update.featured_image` is missing. */
38
+ placeholderUrl?: string | null
39
+ size?: 'default' | 'sm'
40
+ className?: string
41
+ }
42
+
43
+ export function InvestorUpdateCardSkeleton({ size = 'default' }: { size?: 'default' | 'sm' }) {
44
+ if (size === 'sm') {
45
+ return (
46
+ <span className={COMPACT_CARD_SKELETON_OUTER}>
47
+ <span className={COMPACT_CARD_SKELETON_IMAGE_SLOT} />
48
+ <span className={COMPACT_CARD_TEXT_COL}>
49
+ <span className={`${COMPACT_CARD_TITLE_ROW} flex-nowrap gap-2`}>
50
+ <span className="h-3.5 w-1/2 rounded bg-ods-bg" />
51
+ <span className="h-4 w-8 rounded bg-ods-bg/70 shrink-0" />
52
+ </span>
53
+ <span className={COMPACT_CARD_META_ROW_BOX}>
54
+ <span className="h-3 w-1/3 rounded bg-ods-bg/70" />
55
+ </span>
56
+ <span className={COMPACT_CARD_META_ROW_BOX}>
57
+ <span className="h-3 w-11/12 rounded bg-ods-bg/40" />
58
+ </span>
59
+ </span>
60
+ </span>
61
+ )
62
+ }
63
+ return (
64
+ <div className="bg-ods-card border border-ods-border rounded-lg overflow-hidden h-full animate-pulse">
65
+ <div className="aspect-[16/9] bg-ods-bg" />
66
+ <div className="p-4 space-y-3">
67
+ <div className="h-5 w-3/4 bg-ods-bg rounded" />
68
+ <div className="h-3 w-full bg-ods-bg/60 rounded" />
69
+ <div className="h-3 w-4/5 bg-ods-bg/60 rounded" />
70
+ <div className="h-4 w-1/3 bg-ods-bg/60 rounded" />
71
+ </div>
72
+ </div>
73
+ )
74
+ }
75
+
76
+ export function InvestorUpdateCard({ update, href, target, rel, placeholderUrl, size = 'default', className }: InvestorUpdateCardProps) {
77
+ const coverImage = update.featured_image || placeholderUrl || null
78
+
79
+ if (size === 'sm') {
80
+ const periodText = formatInvestorUpdatePeriod(update.period_start, update.period_end)
81
+ return (
82
+ <a href={href} target={target} rel={rel} className={`${COMPACT_CARD_OUTER} ${className ?? ''}`}>
83
+ <span className={COMPACT_CARD_IMAGE_SLOT}>
84
+ {coverImage ? (
85
+ <img
86
+ src={coverImage}
87
+ alt={update.title ?? 'Investor update'}
88
+ className="absolute inset-0 block w-full h-full object-contain"
89
+ onError={(e) => {
90
+ ;(e.currentTarget as HTMLImageElement).style.display = 'none'
91
+ }}
92
+ />
93
+ ) : (
94
+ <span className="flex h-full w-full items-center justify-center text-ods-accent">
95
+ <Calendar className="h-4 w-4" />
96
+ </span>
97
+ )}
98
+ </span>
99
+ <span className={COMPACT_CARD_TEXT_COL}>
100
+ <span className={`${COMPACT_CARD_TITLE_ROW} gap-2`}>
101
+ <span className={`${COMPACT_CARD_TITLE} min-w-0`}>
102
+ {update.title || `Update #${update.update_number ?? '?'}`}
103
+ </span>
104
+ {update.update_number ? (
105
+ <span className="shrink-0 rounded bg-ods-accent/10 px-1.5 py-0.5 text-[10px] font-medium text-ods-accent">
106
+ #{update.update_number}
107
+ </span>
108
+ ) : null}
109
+ </span>
110
+ <span className={COMPACT_CARD_META_ROW_BOX}>
111
+ <span className={COMPACT_CARD_SUBTITLE}>
112
+ {periodText || 'Investor update'}
113
+ </span>
114
+ </span>
115
+ <span className={COMPACT_CARD_META_ROW_BOX}>
116
+ <span className={COMPACT_CARD_SUMMARY}>
117
+ {(update.strategic_update || update.content || '').slice(0, 120) || COMPACT_CARD_ROW_FILLER}
118
+ </span>
119
+ </span>
120
+ </span>
121
+ </a>
122
+ )
123
+ }
124
+
125
+ return (
126
+ <a href={href} target={target} rel={rel} className={`block h-full ${className ?? ''}`}>
127
+ <AdminContentCard
128
+ imageUrl={update.featured_image}
129
+ placeholderUrl={placeholderUrl}
130
+ title={update.title || `Update #${update.update_number || '?'}`}
131
+ summary={update.strategic_update?.slice(0, 120) || update.content?.slice(0, 120) || 'No description'}
132
+ badges={
133
+ update.update_number ? (
134
+ <span className="px-2 py-0.5 rounded text-xs font-medium bg-ods-accent/10 text-ods-accent">
135
+ #{update.update_number}
136
+ </span>
137
+ ) : undefined
138
+ }
139
+ meta={
140
+ (update.period_start || update.period_end) ? (
141
+ <div className="flex items-center gap-1">
142
+ <Calendar className="h-3 w-3" />
143
+ <span>{formatInvestorUpdatePeriod(update.period_start, update.period_end)}</span>
144
+ </div>
145
+ ) : undefined
146
+ }
147
+ />
148
+ </a>
149
+ )
150
+ }