@flamingo-stack/openframe-frontend-core 0.0.204 → 0.0.205-snapshot.20260525113210

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-G7UE6RKV.cjs +121 -0
  17. package/dist/chunk-G7UE6RKV.cjs.map +1 -0
  18. package/dist/{chunk-25LVV26X.cjs → chunk-JUZGUQMX.cjs} +178 -50
  19. package/dist/chunk-JUZGUQMX.cjs.map +1 -0
  20. package/dist/{chunk-SZPJ5R5B.js → chunk-KSOOKNBG.js} +1 -34
  21. package/dist/chunk-KSOOKNBG.js.map +1 -0
  22. package/dist/{chunk-RMB5DVED.cjs → chunk-KUZGEA7U.cjs} +83 -66
  23. package/dist/chunk-KUZGEA7U.cjs.map +1 -0
  24. package/dist/chunk-LXC6P2EO.js +63 -0
  25. package/dist/chunk-LXC6P2EO.js.map +1 -0
  26. package/dist/chunk-MJNXIEV2.js +24 -0
  27. package/dist/chunk-MJNXIEV2.js.map +1 -0
  28. package/dist/{chunk-CPXLQ57U.js → chunk-MVGGXOFA.js} +37 -20
  29. package/dist/chunk-MVGGXOFA.js.map +1 -0
  30. package/dist/chunk-OHPI2HRK.js +47 -0
  31. package/dist/chunk-OHPI2HRK.js.map +1 -0
  32. package/dist/{chunk-LY34ORX6.js → chunk-OLTGB32E.js} +39921 -31333
  33. package/dist/chunk-OLTGB32E.js.map +1 -0
  34. package/dist/chunk-PLJLE4A4.js +121 -0
  35. package/dist/chunk-PLJLE4A4.js.map +1 -0
  36. package/dist/{chunk-XGL5FKIK.js → chunk-SCN5WFIZ.js} +148 -20
  37. package/dist/chunk-SCN5WFIZ.js.map +1 -0
  38. package/dist/chunk-WBR7H6E3.cjs +47 -0
  39. package/dist/chunk-WBR7H6E3.cjs.map +1 -0
  40. package/dist/chunk-XL4V2PYG.cjs +63 -0
  41. package/dist/chunk-XL4V2PYG.cjs.map +1 -0
  42. package/dist/{chunk-ARQ4XP64.cjs → chunk-YGOJIDL5.cjs} +40120 -31532
  43. package/dist/chunk-YGOJIDL5.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 +2 -2
  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
+ }