@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,433 @@
1
+ /**
2
+ * Unified Program System Types
3
+ *
4
+ * Base interfaces and types for the Unified Program System that handles
5
+ * events, podcasts, and webinars through a single set of generic components.
6
+ *
7
+ * Design Goals:
8
+ * 1. Maximum Reuse: Single set of components works for all program types
9
+ * 2. Type Safety: TypeScript generics ensure correct data shapes
10
+ * 3. Configuration-Driven: Program types defined via configuration objects
11
+ * 4. Admin Consistency: Same patterns work for public pages and admin CRUD
12
+ *
13
+ * Lifted from `lib/types/program-types.ts` in the hub. The pure transform
14
+ * helpers (`transformEventToProgram`, `transformPodcastToProgram`,
15
+ * `transformWebinarToProgram`) also move here — they're pure shape
16
+ * mappers with no DB / state access.
17
+ */
18
+
19
+ import type { ReactNode } from 'react';
20
+
21
+ // ============================================================================
22
+ // HOST TYPES
23
+ // ============================================================================
24
+
25
+ /**
26
+ * Host/Speaker information for programs
27
+ */
28
+ export interface ProgramHost {
29
+ id?: string;
30
+ name: string;
31
+ email?: string;
32
+ avatar_url?: string;
33
+ bio?: string;
34
+ role?: string; // e.g., "Host", "Speaker", "Guest"
35
+ }
36
+
37
+ // ============================================================================
38
+ // DATABASE ROW TYPES
39
+ // ============================================================================
40
+
41
+ /**
42
+ * Raw database row from luma_events table
43
+ * Note: Many fields are optional to support partial queries
44
+ * where not all columns are selected. The hosts field uses
45
+ * unknown to accommodate JSON parsing from the database.
46
+ */
47
+ export interface LumaEventRow {
48
+ id: string;
49
+ name: string;
50
+ description?: string | null;
51
+ cover_url?: string | null;
52
+ start_at: string;
53
+ end_at: string;
54
+ timezone?: string | null;
55
+ location_name?: string | null;
56
+ location_full_address?: string | null;
57
+ geo_latitude?: number | null;
58
+ geo_longitude?: number | null;
59
+ meeting_url?: string | null;
60
+ event_url?: string | null;
61
+ guest_count?: number | null;
62
+ visibility?: string | null;
63
+ hosts?: ProgramHost[] | null;
64
+ platform_id: string;
65
+ luma_api_id: string;
66
+ is_deleted?: boolean;
67
+ }
68
+
69
+ /**
70
+ * Raw database row from podcast_episodes table
71
+ * Note: Many fields are optional to support partial queries
72
+ * where not all columns are selected.
73
+ */
74
+ export interface PodcastEpisodeRow {
75
+ id: string;
76
+ title: string;
77
+ description?: string | null;
78
+ cover_url?: string | null;
79
+ published_at?: string | null;
80
+ created_at: string;
81
+ external_url?: string | null;
82
+ hosts?: ProgramHost[] | null;
83
+ platform_id: string;
84
+ podbean_episode_id: string;
85
+ podbean_podcast_id: string;
86
+ audio_url?: string | null;
87
+ /** Podbean-supplied source video URL (was `video_url` pre-rename). */
88
+ main_video_url?: string | null;
89
+ media_type?: 'audio' | 'video' | null;
90
+ duration_seconds?: number | null;
91
+ status?: string | null;
92
+ is_deleted?: boolean;
93
+ // Override fields (not synced by job)
94
+ cover_image_override?: string | null;
95
+ custom_video_url?: string | null;
96
+ }
97
+
98
+ /**
99
+ * Raw database row from webinars table
100
+ * Note: Many fields are optional to support partial queries
101
+ * where not all columns are selected.
102
+ */
103
+ export interface WebinarRow {
104
+ id: string;
105
+ title: string;
106
+ description?: string | null;
107
+ cover_url?: string | null;
108
+ start_at: string;
109
+ end_at?: string | null;
110
+ timezone?: string | null;
111
+ registration_url?: string | null;
112
+ hosts?: ProgramHost[] | null;
113
+ platform_id: string;
114
+ livestorm_event_id: string;
115
+ is_deleted?: boolean;
116
+ /** Livestorm-supplied recording URL (was `recording_url` pre-rename). */
117
+ main_video_url?: string | null;
118
+ // Override fields (not synced by job)
119
+ custom_video_url?: string | null;
120
+ display_date_override?: string | null;
121
+ cover_image_override?: string | null;
122
+ }
123
+
124
+ // ============================================================================
125
+ // BASE PROGRAM ITEM
126
+ // ============================================================================
127
+
128
+ /**
129
+ * Base interface that all program items must implement
130
+ * This enables the generic components to work across events, podcasts, and webinars
131
+ */
132
+ export interface BaseProgramItem {
133
+ id: string;
134
+ title: string; // Maps to: name (events), title (podcasts/webinars)
135
+ description: string | null;
136
+ cover_url: string | null; // Primary image
137
+ date: string; // ISO date string - maps to: start_at, published_at
138
+ external_url?: string | null; // Registration/play link
139
+ hosts?: ProgramHost[] | null; // Speakers/hosts
140
+ platform_id: string;
141
+ }
142
+
143
+ // ============================================================================
144
+ // PROGRAM-SPECIFIC INTERFACES
145
+ // ============================================================================
146
+
147
+ /**
148
+ * Event-specific fields (from luma_events table)
149
+ */
150
+ export interface EventItem extends BaseProgramItem {
151
+ luma_api_id: string;
152
+ end_at: string;
153
+ timezone?: string | null;
154
+ location_name?: string | null;
155
+ location_full_address?: string | null;
156
+ geo_latitude?: number | null;
157
+ geo_longitude?: number | null;
158
+ meeting_url?: string | null;
159
+ event_url?: string | null;
160
+ guest_count?: number | null;
161
+ visibility?: string | null;
162
+ is_deleted: boolean;
163
+ }
164
+
165
+ /**
166
+ * Podcast episode fields (from podcast_episodes table)
167
+ * Updated for Podbean video podcast support
168
+ */
169
+ export interface PodcastItem extends BaseProgramItem {
170
+ author_id?: string | null;
171
+ podbean_episode_id: string;
172
+ podbean_podcast_id: string;
173
+ audio_url?: string | null;
174
+ /** Podbean-supplied source video URL (was `video_url` pre-rename). */
175
+ main_video_url?: string | null;
176
+ media_type: 'audio' | 'video';
177
+ duration_seconds?: number | null;
178
+ status: string;
179
+ published_at: string | null;
180
+ is_deleted: boolean;
181
+ podcast_url?: string | null; // Main podcast page URL from Podbean
182
+ // Override fields (not synced by job)
183
+ cover_image_override?: string | null;
184
+ custom_video_url?: string | null;
185
+ // Video processing fields
186
+ transcript?: string | null;
187
+ transcript_words_data?: unknown;
188
+ srt_content?: string | null;
189
+ video_summary?: string | null;
190
+ video_bites?: unknown[];
191
+ highlight_video_url?: string | null;
192
+ highlight_video_source?: string | null;
193
+ highlight_video_thumbnail?: string | null;
194
+ highlight_video_duration_ms?: number | null;
195
+ main_video_thumbnail?: string | null;
196
+ config?: Record<string, unknown>;
197
+ custom_instructions?: string | null;
198
+ seo_title?: string | null;
199
+ seo_description?: string | null;
200
+ seo_keywords?: string | null;
201
+ ai_confidence_video_summary?: number | null;
202
+ ai_confidence_transcript?: number | null;
203
+ }
204
+
205
+ /**
206
+ * Webinar fields (from webinars table)
207
+ */
208
+ export interface WebinarItem extends BaseProgramItem {
209
+ author_id?: string | null;
210
+ livestorm_event_id: string;
211
+ start_at: string;
212
+ end_at?: string | null;
213
+ timezone?: string | null;
214
+ registration_url?: string | null;
215
+ is_deleted: boolean;
216
+ /** Livestorm-supplied recording URL (was `recording_url` pre-rename). */
217
+ main_video_url?: string | null;
218
+ // Override fields (not synced by job)
219
+ custom_video_url?: string | null;
220
+ display_date_override?: string | null;
221
+ cover_image_override?: string | null;
222
+ // Video processing fields
223
+ transcript?: string | null;
224
+ transcript_words_data?: unknown;
225
+ srt_content?: string | null;
226
+ video_summary?: string | null;
227
+ video_bites?: unknown[];
228
+ highlight_video_url?: string | null;
229
+ highlight_video_source?: string | null;
230
+ highlight_video_thumbnail?: string | null;
231
+ highlight_video_duration_ms?: number | null;
232
+ main_video_thumbnail?: string | null;
233
+ config?: Record<string, unknown>;
234
+ custom_instructions?: string | null;
235
+ seo_title?: string | null;
236
+ seo_description?: string | null;
237
+ seo_keywords?: string | null;
238
+ ai_confidence_video_summary?: number | null;
239
+ ai_confidence_transcript?: number | null;
240
+ }
241
+
242
+ // ============================================================================
243
+ // PROGRAM CONFIGURATION
244
+ // ============================================================================
245
+
246
+ /**
247
+ * Program type identifier
248
+ */
249
+ export type ProgramType = 'event' | 'podcast' | 'webinar';
250
+
251
+ /**
252
+ * Labels configuration for a program type
253
+ */
254
+ export interface ProgramLabels {
255
+ singular: string; // "Event", "Episode", "Webinar"
256
+ plural: string; // "Events", "Episodes", "Webinars"
257
+ upcoming: string; // "Next Event", "Latest Episode", "Upcoming Webinar"
258
+ upcomingSection: string; // "Upcoming Events", "Upcoming Episodes", "Upcoming Webinars"
259
+ archive: string; // "Past Events", "All Episodes", "Past Webinars"
260
+ empty: string; // "No events yet", "No episodes yet", "No webinars yet"
261
+ }
262
+
263
+ /**
264
+ * Configuration object that defines how a program type behaves
265
+ * This is the core abstraction that enables generic components
266
+ */
267
+ export interface ProgramConfig<T extends BaseProgramItem = BaseProgramItem> {
268
+ type: ProgramType;
269
+ labels: ProgramLabels;
270
+ dateField: keyof T; // Which field to sort/filter by
271
+ table: string; // Database table name
272
+ apiEndpoint: string; // Base API path
273
+ icon: ReactNode; // Section icon (CalendarDays, Mic, Video)
274
+ platformIcon?: ReactNode; // External platform icon (optional)
275
+ externalLinkLabel: string; // "View on Luma", "Listen on Podbean", "Watch on Livestorm"
276
+ detailRoute: string; // "/events", "/podcasts", "/webinars"
277
+
278
+ // Optional customization
279
+ sortOrder?: 'asc' | 'desc'; // Default sort order for archive
280
+ showInNav?: boolean; // Whether to show in navigation
281
+ platformUrl?: string; // Fallback URL to external platform (e.g., Podbean main page)
282
+ heroCoverAspect?: 'landscape' | 'square'; // Hero cover image aspect ratio (default: 'landscape')
283
+ }
284
+
285
+ // ============================================================================
286
+ // GENERIC DATA TYPES
287
+ // ============================================================================
288
+
289
+ /**
290
+ * Generic response for program list queries
291
+ */
292
+ export interface ProgramListResponse<T extends BaseProgramItem> {
293
+ items: T[];
294
+ count: number;
295
+ hasMore?: boolean;
296
+ }
297
+
298
+ /**
299
+ * Generic response for single program queries
300
+ */
301
+ export interface ProgramItemResponse<T extends BaseProgramItem> {
302
+ item: T;
303
+ media?: ProgramMedia[];
304
+ }
305
+
306
+ /**
307
+ * Program media (photos, videos, etc.)
308
+ */
309
+ export interface ProgramMedia {
310
+ id: string;
311
+ program_id: string;
312
+ media_type: 'image' | 'video' | 'audio';
313
+ media_url: string;
314
+ title?: string | null;
315
+ description?: string | null;
316
+ display_order: number;
317
+ created_at: string;
318
+ }
319
+
320
+ // ============================================================================
321
+ // FILTER AND QUERY TYPES
322
+ // ============================================================================
323
+
324
+ /**
325
+ * Filter options for program queries
326
+ */
327
+ export interface ProgramFilter {
328
+ filter: 'upcoming' | 'past' | 'all';
329
+ limit?: number;
330
+ offset?: number;
331
+ search?: string;
332
+ }
333
+
334
+ /**
335
+ * Admin query options
336
+ */
337
+ export interface AdminProgramFilter extends ProgramFilter {
338
+ includeDeleted?: boolean;
339
+ sortBy?: string;
340
+ sortOrder?: 'asc' | 'desc';
341
+ }
342
+
343
+ // ============================================================================
344
+ // TRANSFORM UTILITIES
345
+ // ============================================================================
346
+
347
+ /**
348
+ * Transform a database event row to EventItem
349
+ */
350
+ export function transformEventToProgram(event: LumaEventRow): EventItem {
351
+ return {
352
+ id: event.id,
353
+ title: event.name,
354
+ description: event.description ?? null,
355
+ cover_url: event.cover_url ?? null,
356
+ date: event.start_at,
357
+ external_url: event.event_url ?? null,
358
+ hosts: event.hosts ?? null,
359
+ platform_id: event.platform_id,
360
+ luma_api_id: event.luma_api_id,
361
+ end_at: event.end_at,
362
+ timezone: event.timezone ?? null,
363
+ location_name: event.location_name ?? null,
364
+ location_full_address: event.location_full_address ?? null,
365
+ geo_latitude: event.geo_latitude ?? null,
366
+ geo_longitude: event.geo_longitude ?? null,
367
+ meeting_url: event.meeting_url ?? null,
368
+ event_url: event.event_url ?? null,
369
+ guest_count: event.guest_count ?? null,
370
+ visibility: event.visibility ?? null,
371
+ is_deleted: event.is_deleted ?? false,
372
+ };
373
+ }
374
+
375
+ /**
376
+ * Transform a database podcast row to PodcastItem
377
+ */
378
+ export function transformPodcastToProgram(episode: PodcastEpisodeRow): PodcastItem {
379
+ return {
380
+ id: episode.id,
381
+ title: episode.title,
382
+ description: episode.description ?? null,
383
+ // Use cover_image_override if set, otherwise use cover_url
384
+ cover_url: episode.cover_image_override ?? episode.cover_url ?? null,
385
+ date: episode.published_at ?? episode.created_at,
386
+ external_url: episode.external_url ?? null,
387
+ hosts: episode.hosts ?? null,
388
+ platform_id: episode.platform_id,
389
+ podbean_episode_id: episode.podbean_episode_id,
390
+ podbean_podcast_id: episode.podbean_podcast_id,
391
+ audio_url: episode.audio_url ?? null,
392
+ main_video_url: episode.main_video_url ?? null,
393
+ media_type: episode.media_type ?? 'audio',
394
+ duration_seconds: episode.duration_seconds ?? null,
395
+ status: episode.status ?? 'published',
396
+ published_at: episode.published_at ?? null,
397
+ is_deleted: episode.is_deleted ?? false,
398
+ // Override fields
399
+ cover_image_override: episode.cover_image_override ?? null,
400
+ custom_video_url: episode.custom_video_url ?? null,
401
+ };
402
+ }
403
+
404
+ /**
405
+ * Transform a database webinar row to WebinarItem
406
+ * Uses display_date_override for date field when available (for backdating)
407
+ * Uses cover_image_override for cover_url when available
408
+ */
409
+ export function transformWebinarToProgram(webinar: WebinarRow): WebinarItem {
410
+ return {
411
+ id: webinar.id,
412
+ title: webinar.title,
413
+ description: webinar.description ?? null,
414
+ // Use cover_image_override if set, otherwise use cover_url
415
+ cover_url: webinar.cover_image_override ?? webinar.cover_url ?? null,
416
+ // Use display_date_override if set, otherwise use start_at
417
+ date: webinar.display_date_override ?? webinar.start_at,
418
+ external_url: webinar.registration_url ?? null,
419
+ hosts: webinar.hosts ?? null,
420
+ platform_id: webinar.platform_id,
421
+ livestorm_event_id: webinar.livestorm_event_id,
422
+ start_at: webinar.start_at,
423
+ end_at: webinar.end_at ?? null,
424
+ timezone: webinar.timezone ?? null,
425
+ registration_url: webinar.registration_url ?? null,
426
+ is_deleted: webinar.is_deleted ?? false,
427
+ main_video_url: webinar.main_video_url ?? null,
428
+ // Override fields
429
+ custom_video_url: webinar.custom_video_url ?? null,
430
+ display_date_override: webinar.display_date_override ?? null,
431
+ cover_image_override: webinar.cover_image_override ?? null,
432
+ };
433
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Roadmap Item entity — wire shape for the chat roadmap card and the
3
+ * public `/api/roadmap` reads.
4
+ *
5
+ * Lifted from `lib/data/clickup-query-utils.ts` in the hub. Mirrors the
6
+ * `roadmap_items` projection produced by `transformTask()` in
7
+ * `clickup-sync-utils.ts`.
8
+ *
9
+ * Naming note: a `RoadmapItem` stub already exists in
10
+ * `src/components/shared/product-release/release-detail-page.tsx` as
11
+ * `{ id: string; [key: string]: unknown }` — that placeholder predates this
12
+ * canonical shape and lives in a different module, so the two don't
13
+ * collide. Callers that want the strongly-typed wire shape import from
14
+ * `@/components/chat/types/entities/roadmap-item`; the product-release
15
+ * placeholder will be reconciled in a follow-up.
16
+ */
17
+
18
+ export interface RoadmapItem {
19
+ id: string;
20
+ title: string;
21
+ description: string;
22
+ status: string;
23
+ statusColor: string;
24
+ icon: string | null;
25
+ figmaUrl: string | null;
26
+ screenshots: string[];
27
+ targetVersion: string | null;
28
+ upvotes: number;
29
+ downvotes: number;
30
+ quarter: string;
31
+ clickupUrl: string;
32
+ /** ClickUp canonical task-type taxonomy ID (1008=Bug, 1009=Request,
33
+ * 1010=Feature, …). Drives the type-specific icon rendered in the
34
+ * chat's compact card for the internal-tasks variant — see
35
+ * `getTaskTypeIcon` in `lib/utils/clickup-task-type-utils.ts`. */
36
+ customItemId: number | null;
37
+ }
38
+
39
+ export interface RoadmapStaleness {
40
+ lastSyncedAt: string | null;
41
+ staleSinceMs: number;
42
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Slack Message entity — wire shape for the chat slack-message card.
3
+ *
4
+ * Lifted from `components/shared/slack/slack-message-card.tsx`. The card
5
+ * consumes this shape; the row shape coming out of the `slack_messages`
6
+ * RAG table is reduced to this minimal projection at render time.
7
+ *
8
+ * Naming note: this is intentionally `SlackMessageItem` (not the broader
9
+ * `SlackMessage` in `src/types/slack.ts`, which describes the Slack
10
+ * Community feature's message structure including reactions / threading /
11
+ * user objects). The chat card needs only the post-RAG projection: id,
12
+ * title, preview, channel, date, permalink — no reactions / threads.
13
+ */
14
+
15
+ export interface SlackMessageItem {
16
+ /** Slack message ID (ts or url-derived) */
17
+ id: string;
18
+ /** Display title — typically "author · channel" or message subject */
19
+ title: string;
20
+ /** Message body preview (PII-sanitized server-side) */
21
+ preview?: string;
22
+ /** Channel name parsed from URL or stored on the row, when available */
23
+ channel?: string;
24
+ /** ISO timestamp or millisecond epoch */
25
+ dateUpdated?: string | number | null;
26
+ /** Slack permalink (https://*.slack.com/archives/<channel>/p<ts>) */
27
+ url?: string | null;
28
+ }
@@ -4,3 +4,4 @@ export * from './component.types'
4
4
  export * from './network.types'
5
5
  export * from './processing.types'
6
6
  export * from './api.types'
7
+ export * from './entities'
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Status color-scheme resolver used by chat-adjacent badges (StatusBadge
3
+ * components rendering job, ClickUp task, and log-level statuses).
4
+ *
5
+ * Lib-side subset of the hub's `lib/utils/agent-status-message.ts`. The
6
+ * hub file also carries CSS-class resolvers + an `AgentStatusMessage`
7
+ * builder for the SSE-status surface; those live hub-side because they
8
+ * reference hub-only ODS class names. This function returns the abstract
9
+ * color scheme name only — the consuming `StatusBadge` (in this lib)
10
+ * maps it to concrete colors.
11
+ */
12
+
13
+ export type ColorScheme = 'success' | 'error' | 'warning' | 'cyan' | 'default'
14
+
15
+ /**
16
+ * Map a status to a color scheme name for StatusBadge components.
17
+ * Supports job/processing statuses, ClickUp task statuses, and log levels.
18
+ */
19
+ export function getStatusColorScheme(status: string): ColorScheme {
20
+ const s = status?.toLowerCase() || ''
21
+
22
+ // Exact matches first (most common)
23
+ switch (status) {
24
+ case 'completed':
25
+ case 'success':
26
+ case 'active': // review cycles, feature flags, etc.
27
+ return 'success'
28
+ case 'failed':
29
+ case 'failure':
30
+ case 'cancelled':
31
+ case 'error':
32
+ return 'error'
33
+ case 'running':
34
+ case 'processing':
35
+ case 'closed': // review cycles past their active window
36
+ return 'cyan'
37
+ case 'pending':
38
+ case 'warning':
39
+ return 'warning'
40
+ case 'draft': // review cycles not yet opened to reviewers
41
+ case 'info':
42
+ return 'default'
43
+ }
44
+
45
+ // Partial matches for ClickUp-style statuses (Complete, Done, Working, etc.)
46
+ if (s.includes('complete') || s.includes('done')) return 'success'
47
+ if (s.includes('review')) return 'cyan'
48
+ if (s.includes('working') || s.includes('progress')) return 'warning'
49
+ if (s.includes('blocked') || s.includes('failed')) return 'error'
50
+
51
+ return 'default'
52
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Shared cross-process contract for the post-approval auto-continuation
3
+ * directive. The client emits a hidden synthetic user message starting
4
+ * with `AUTO_CONTINUATION_DIRECTIVE_PREFIX`; the server's `decideRoute`
5
+ * matches that exact prefix on the RAW user query (pre-rewriter) and
6
+ * hard-disables tools for the directive turn, forcing the LLM to
7
+ * respond with prose follow-up questions instead of duplicating the
8
+ * just-approved tool call.
9
+ *
10
+ * Single source of truth — both server-side `decideRoute` AND
11
+ * client-side `autoContinueRef` import from here. Drifting the literal
12
+ * on either side would silently break the duplicate-ticket guard
13
+ * (server would route normally with tools wired; LLM would propose the
14
+ * same tool again).
15
+ *
16
+ * `toolName` is typed as `string` (not a const-union) so the lib stays
17
+ * generic across hub deployments — host code that has a sharper
18
+ * `KnownWriteToolName` type can pass that through; this builder only
19
+ * cares about a handful of string-equal branches.
20
+ */
21
+
22
+ export const AUTO_CONTINUATION_DIRECTIVE_PREFIX = '[internal-auto-continuation]'
23
+
24
+ export interface BuildAutoContinuationOptions {
25
+ ticketId?: string
26
+ /** Reading of `args.status` on the just-approved tool call. Used to
27
+ * branch the directive between "post-create diagnostic Qs",
28
+ * "post-close resolution ask", and "post-update acknowledgement". */
29
+ status?: string
30
+ }
31
+
32
+ /**
33
+ * Build the directive text the client sends as a HIDDEN user message
34
+ * after every successful Approve. The LLM treats it as the user
35
+ * speaking; the chat shell filters it out at render time.
36
+ *
37
+ * Branch logic mirrors `TICKET_TOOL_PROTOCOL` §1a/§1b — keep them in
38
+ * sync: the directive tells the model WHICH section to follow.
39
+ */
40
+ export function buildAutoContinuationDirective(
41
+ toolName: string,
42
+ opts: BuildAutoContinuationOptions = {},
43
+ ): string {
44
+ const ticketRef = opts.ticketId ? ` (ticket #${opts.ticketId})` : ''
45
+ const ticketHash = opts.ticketId ? ` #${opts.ticketId}` : ''
46
+ const isClose = toolName === 'update_ticket' && opts.status?.toUpperCase() === 'CLOSED'
47
+ if (toolName === 'create_ticket') {
48
+ return (
49
+ `${AUTO_CONTINUATION_DIRECTIVE_PREFIX} The user just approved create_ticket${ticketRef}. ` +
50
+ `Per ticket-protocol §1a, ask 2-4 SHORT, issue-specific diagnostic follow-up questions ` +
51
+ `tailored to the symptom they reported in their original message. When they answer, ` +
52
+ `propose an update_ticket with content_addendum carrying a clean Q&A digest. ` +
53
+ `Do NOT call any tool in this turn — just write the questions as prose.`
54
+ )
55
+ }
56
+ if (isClose) {
57
+ return (
58
+ `${AUTO_CONTINUATION_DIRECTIVE_PREFIX} The user just approved closing ticket${ticketHash}. ` +
59
+ `Per ticket-protocol §1b, ask ONE short question: "How was this resolved? I'll add it ` +
60
+ `to the ticket as a closing note." Phrase kindly even if the user was curt. When they ` +
61
+ `answer, propose an update_ticket with content_addendum="[Resolution] <their words>". ` +
62
+ `Do NOT call any tool in this turn — just write the prose ask.`
63
+ )
64
+ }
65
+ return (
66
+ `${AUTO_CONTINUATION_DIRECTIVE_PREFIX} The user just approved update_ticket${ticketHash}. ` +
67
+ `Acknowledge the change in ONE short sentence; if anything else looks like it needs ` +
68
+ `attention, ask. Do NOT call any tool in this turn.`
69
+ )
70
+ }