@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
@@ -19,7 +19,7 @@
19
19
  'use client'
20
20
 
21
21
  import { useEffect, useState, useMemo, useCallback } from 'react'
22
- import { useRouter, useSearchParams } from 'next/navigation'
22
+ import { useRouter, useSearchParams } from '../../embed-shims/next-navigation'
23
23
  import { DocumentNode } from 'graphql'
24
24
 
25
25
  import { extractVariablesFromQuery } from './graphql-parser'
@@ -0,0 +1,107 @@
1
+ 'use client'
2
+
3
+ /**
4
+ * Access Code Integration Hook
5
+ *
6
+ * React-side wrapper around the pure `access-code-client` utilities.
7
+ * Lives in `hooks/` (client bundle) so the `createContext()` call in
8
+ * `endpoints-runtime-context` doesn't get pulled into the server-safe
9
+ * `utils/index` bundle.
10
+ *
11
+ * The pure standalone functions (`validateAccessCode`,
12
+ * `consumeAccessCode`, `validateAndConsumeAccessCode`) remain importable
13
+ * from `@flamingo-stack/openframe-frontend-core/utils` — they take the
14
+ * endpoints object as an argument. This hook binds those endpoints from
15
+ * `EndpointsRuntimeContext` so React callers don't have to plumb URLs.
16
+ */
17
+
18
+ import React from 'react'
19
+
20
+ import { useRequiredEndpointsRuntime } from '../contexts/endpoints-runtime-context'
21
+ import {
22
+ validateAccessCode,
23
+ consumeAccessCode,
24
+ validateAndConsumeAccessCode,
25
+ } from '../utils/access-code-client'
26
+
27
+ /**
28
+ * Resolves access-code endpoints from `EndpointsRuntimeContext` (throws
29
+ * if no provider is mounted) and exposes loading-state-aware wrappers
30
+ * around the standalone helpers in `utils/access-code-client`.
31
+ *
32
+ * @returns the following fields. The `validate` / `consume` /
33
+ * `validateAndConsume` functions and the returned object identity are
34
+ * NOT memoized — they're re-created each render. Wrap with
35
+ * `useCallback` / `useMemo` at the call site if downstream effect
36
+ * dep arrays depend on stable identities.
37
+ * - `validate(email, code)`: validates only.
38
+ * - `consume(email, code)`: consumes only.
39
+ * - `validateAndConsume(email, code)`: one-step validate-then-consume.
40
+ * - `isValidating: boolean`: a validate call is in flight.
41
+ * - `isConsuming: boolean`: a consume call is in flight.
42
+ * - `isProcessing: boolean`: convenience — `isValidating || isConsuming`.
43
+ * Use this for a single "in-flight" indicator on UI affordances that
44
+ * should disable during both phases.
45
+ *
46
+ * @example
47
+ * const { validate, consume, isProcessing } = useAccessCodeIntegration();
48
+ *
49
+ * const handleRegistration = async (formData) => {
50
+ * const validation = await validate(formData.email, formData.accessCode);
51
+ * if (!validation.valid) {
52
+ * setError(validation.message);
53
+ * return;
54
+ * }
55
+ *
56
+ * // Process registration...
57
+ * const registrationResult = await registerUser(formData);
58
+ *
59
+ * if (registrationResult.success) {
60
+ * await consume(formData.email, formData.accessCode);
61
+ * }
62
+ * };
63
+ */
64
+ export function useAccessCodeIntegration() {
65
+ const runtime = useRequiredEndpointsRuntime()
66
+ const endpoints = runtime.accessCode
67
+ const [isValidating, setIsValidating] = React.useState(false)
68
+ const [isConsuming, setIsConsuming] = React.useState(false)
69
+
70
+ const validate = async (email: string, code: string) => {
71
+ setIsValidating(true)
72
+ try {
73
+ return await validateAccessCode(email, code, endpoints)
74
+ } finally {
75
+ setIsValidating(false)
76
+ }
77
+ }
78
+
79
+ const consume = async (email: string, code: string) => {
80
+ setIsConsuming(true)
81
+ try {
82
+ return await consumeAccessCode(email, code, endpoints)
83
+ } finally {
84
+ setIsConsuming(false)
85
+ }
86
+ }
87
+
88
+ const validateAndConsume = async (email: string, code: string) => {
89
+ setIsValidating(true)
90
+ setIsConsuming(true)
91
+ try {
92
+ return await validateAndConsumeAccessCode(email, code, endpoints)
93
+ } finally {
94
+ setIsValidating(false)
95
+ setIsConsuming(false)
96
+ }
97
+ }
98
+
99
+ return {
100
+ validate,
101
+ consume,
102
+ validateAndConsume,
103
+ isValidating,
104
+ isConsuming,
105
+ isProcessing: isValidating || isConsuming,
106
+ }
107
+ }
@@ -1,6 +1,7 @@
1
1
  import { useState, useCallback, useEffect } from 'react';
2
2
  import { useToast } from "./use-toast";
3
- import { useRouter } from 'next/navigation';
3
+ import { useRouter } from '../embed-shims/next-navigation';
4
+ import { useRequiredEndpointsRuntime } from '../contexts/endpoints-runtime-context';
4
5
 
5
6
  interface ContactSubmissionOptions {
6
7
  userId?: string;
@@ -44,6 +45,9 @@ export function useContactSubmission(options: ContactSubmissionOptions = {}) {
44
45
  const { userId, successRedirectUrl, successToastMessage, onSuccess } = options;
45
46
  const { toast } = useToast();
46
47
  const router = useRouter();
48
+ // Endpoint URL injected via context — hub provides hub default, embedded
49
+ // app provides its proxied path. Throws if no provider is mounted.
50
+ const { contactUrl } = useRequiredEndpointsRuntime();
47
51
  const [isSubmitting, setIsSubmitting] = useState(false);
48
52
  const [isSuccess, setIsSuccess] = useState(false);
49
53
 
@@ -53,7 +57,7 @@ export function useContactSubmission(options: ContactSubmissionOptions = {}) {
53
57
  setIsSubmitting(true);
54
58
 
55
59
  try {
56
- const response = await fetch('/api/contact', {
60
+ const response = await fetch(contactUrl, {
57
61
  method: 'POST',
58
62
  headers: { 'Content-Type': 'application/json' },
59
63
  body: JSON.stringify({
@@ -90,7 +94,7 @@ export function useContactSubmission(options: ContactSubmissionOptions = {}) {
90
94
  } finally {
91
95
  setIsSubmitting(false);
92
96
  }
93
- }, [isSubmitting, toast, userId, successToastMessage]);
97
+ }, [isSubmitting, toast, userId, successToastMessage, contactUrl]);
94
98
 
95
99
  // Handle redirect after success
96
100
  useEffect(() => {
@@ -0,0 +1,45 @@
1
+ 'use client'
2
+
3
+ import { useMemo } from 'react'
4
+
5
+ /**
6
+ * Hook that generates a branded placeholder image URL using the
7
+ * host's `/api/og-placeholder` server-side image generator (or any
8
+ * builder the caller supplies).
9
+ *
10
+ * THIS HOOK IS A THIN CLIENT-SIDE WRAPPER. The hub-side wrapper
11
+ * (`hooks/use-og-placeholder.ts` in multi-platform-hub) injects its
12
+ * canonical `buildOgPlaceholderUrl` from `lib/utils/entity-image.ts`.
13
+ * The lib version takes the builder as an argument so the lib has no
14
+ * hub dependency.
15
+ *
16
+ * @param buildUrl - Function that builds the placeholder URL from a
17
+ * title + options object (`{ site?, aspect? }`).
18
+ * Hub passes `buildOgPlaceholderUrl` from
19
+ * `lib/utils/entity-image.ts`. Embedded apps can
20
+ * wire any equivalent that hits their own placeholder
21
+ * route.
22
+ * @param title - Text to display on the placeholder
23
+ * @param siteName - Site name shown below the title (optional —
24
+ * defaults to empty)
25
+ * @param enabled - Whether to generate the URL (default: true)
26
+ * @param aspect - `'wide'` (1200×630 social-card; default) or `'square'`
27
+ * (1024×1024 — used by compact chat-inline card slots
28
+ * so `object-cover` doesn't crop the title off).
29
+ * @returns Placeholder image URL or null if disabled / no title
30
+ */
31
+ export function useOgPlaceholder(
32
+ buildUrl: (title: string, options: { site?: string; aspect?: 'wide' | 'square' }) => string,
33
+ title: string | undefined | null,
34
+ siteName: string = '',
35
+ enabled: boolean = true,
36
+ aspect: 'wide' | 'square' = 'wide',
37
+ ): string | null {
38
+ return useMemo(() => {
39
+ if (!enabled || !title) return null
40
+ const options: { site?: string; aspect?: 'wide' | 'square' } = {}
41
+ if (siteName) options.site = siteName
42
+ if (aspect === 'square') options.aspect = 'square'
43
+ return buildUrl(title, options)
44
+ }, [buildUrl, title, siteName, enabled, aspect])
45
+ }
@@ -0,0 +1,140 @@
1
+ import type { Meta, StoryObj } from '@storybook/nextjs-vite'
2
+ import { OnboardingStepCard } from '../components/shared/onboarding/onboarding-step-card'
3
+ import { UserPlusIcon } from '../components/icons-v2-generated/users/user-plus-icon'
4
+
5
+ const baseStep = {
6
+ id: 'invite-users',
7
+ title: 'Company & Team',
8
+ description: 'Invite team members and set up roles',
9
+ actionIcon: (color?: string) => <UserPlusIcon color={color} size={20} />,
10
+ actionText: 'Invite Users',
11
+ completedText: 'Manage Users',
12
+ onAction: () => console.log('action'),
13
+ onSkip: () => console.log('skip'),
14
+ }
15
+
16
+ const meta = {
17
+ title: 'Shared/OnboardingStepCard',
18
+ component: OnboardingStepCard,
19
+ parameters: {
20
+ layout: 'padded',
21
+ docs: {
22
+ description: {
23
+ component:
24
+ 'A single row in the Get Started onboarding list. Renders title + description on the left and state-dependent controls on the right (Skip / Action, Completed badge + Manage, Skipped badge, or loading skeleton). The card itself has no click action — only the inner buttons are interactive — so it has no hover state.',
25
+ },
26
+ },
27
+ },
28
+ tags: ['autodocs'],
29
+ } satisfies Meta<typeof OnboardingStepCard>
30
+
31
+ export default meta
32
+ type Story = StoryObj<typeof meta>
33
+
34
+ /**
35
+ * Pending step — shows Skip Step + the primary action button.
36
+ */
37
+ export const Default: Story = {
38
+ args: {
39
+ step: baseStep,
40
+ isCompleted: false,
41
+ isSkipped: false,
42
+ isCheckingCompletion: false,
43
+ onAction: () => console.log('action'),
44
+ onSkip: () => console.log('skip'),
45
+ },
46
+ }
47
+
48
+ /**
49
+ * Completed step — shows the success badge and a "Manage" button.
50
+ */
51
+ export const Completed: Story = {
52
+ args: {
53
+ ...Default.args,
54
+ isCompleted: true,
55
+ },
56
+ }
57
+
58
+ /**
59
+ * Skipped step — shows only the SKIPPED badge.
60
+ */
61
+ export const Skipped: Story = {
62
+ args: {
63
+ ...Default.args,
64
+ isSkipped: true,
65
+ },
66
+ }
67
+
68
+ /**
69
+ * Loading state while completion status is being checked.
70
+ */
71
+ export const CheckingCompletion: Story = {
72
+ args: {
73
+ ...Default.args,
74
+ isCheckingCompletion: true,
75
+ },
76
+ }
77
+
78
+ /**
79
+ * Full list rendered the way it appears on the Get Started page.
80
+ * Use this story to verify that hovering any row does NOT change its
81
+ * border or background — only the inner buttons should react.
82
+ */
83
+ export const List: Story = {
84
+ args: Default.args,
85
+ render: () => {
86
+ const steps = [
87
+ {
88
+ ...baseStep,
89
+ id: 'orgs',
90
+ title: 'Organizations Setup',
91
+ description: 'Create and configure your organizational structure',
92
+ completed: true,
93
+ },
94
+ {
95
+ ...baseStep,
96
+ id: 'devices',
97
+ title: 'Device Management',
98
+ description: 'Connect and monitor your fleet of devices',
99
+ completed: true,
100
+ },
101
+ {
102
+ ...baseStep,
103
+ id: 'team',
104
+ title: 'Company & Team',
105
+ description: 'Invite team members and set up roles',
106
+ completed: false,
107
+ },
108
+ {
109
+ ...baseStep,
110
+ id: 'sso',
111
+ title: 'SSO Configuration',
112
+ description: 'Link Microsoft 365, Google Workspace, and other identity providers',
113
+ completed: false,
114
+ },
115
+ {
116
+ ...baseStep,
117
+ id: 'kb',
118
+ title: 'Knowledge Base',
119
+ description: 'Access documentation and learning resources',
120
+ completed: false,
121
+ },
122
+ ]
123
+
124
+ return (
125
+ <div className="flex flex-col gap-3">
126
+ {steps.map((s) => (
127
+ <OnboardingStepCard
128
+ key={s.id}
129
+ step={s}
130
+ isCompleted={s.completed}
131
+ isSkipped={false}
132
+ isCheckingCompletion={false}
133
+ onAction={() => console.log('action', s.id)}
134
+ onSkip={() => console.log('skip', s.id)}
135
+ />
136
+ ))}
137
+ </div>
138
+ )
139
+ },
140
+ }
@@ -0,0 +1,65 @@
1
+ /* =============================================================================
2
+ * Chat Panel (Mingo AI) — open/close motion
3
+ *
4
+ * Duration & easing follow Material 3 motion tokens + Nielsen Norman Group's
5
+ * 200–300 ms panel guidance:
6
+ * - enter: 250 ms with emphasized-decelerate (settle into place)
7
+ * - exit: 200 ms with emphasized-accelerate (snap away)
8
+ * Only transform + opacity are animated so frames stay on the GPU compositor.
9
+ *
10
+ * On <md viewports the panel is a bottom sheet (slides up); on md+ it's a
11
+ * right side panel (slides in from the right edge). One keyframe set per axis.
12
+ *
13
+ * prefers-reduced-motion: cross-fade replaces all slide motion (vestibular-safe
14
+ * per WCAG 2.3.3 / MDN guidance) — the panel still animates, just without
15
+ * positional movement.
16
+ * ============================================================================= */
17
+
18
+ @keyframes mingo-chat-overlay-in {
19
+ from { opacity: 0; }
20
+ to { opacity: 1; }
21
+ }
22
+ @keyframes mingo-chat-overlay-out {
23
+ from { opacity: 1; }
24
+ to { opacity: 0; }
25
+ }
26
+
27
+ @keyframes mingo-chat-slide-in-right {
28
+ from { opacity: 0; transform: translate3d(100%, 0, 0); }
29
+ to { opacity: 1; transform: translate3d(0, 0, 0); }
30
+ }
31
+ @keyframes mingo-chat-slide-out-right {
32
+ from { opacity: 1; transform: translate3d(0, 0, 0); }
33
+ to { opacity: 0; transform: translate3d(100%, 0, 0); }
34
+ }
35
+
36
+ @keyframes mingo-chat-slide-in-bottom {
37
+ from { opacity: 0; transform: translate3d(0, 100%, 0); }
38
+ to { opacity: 1; transform: translate3d(0, 0, 0); }
39
+ }
40
+ @keyframes mingo-chat-slide-out-bottom {
41
+ from { opacity: 1; transform: translate3d(0, 0, 0); }
42
+ to { opacity: 0; transform: translate3d(0, 100%, 0); }
43
+ }
44
+
45
+ @keyframes mingo-chat-fade-in {
46
+ from { opacity: 0; }
47
+ to { opacity: 1; }
48
+ }
49
+ @keyframes mingo-chat-fade-out {
50
+ from { opacity: 1; }
51
+ to { opacity: 0; }
52
+ }
53
+
54
+ .mingo-chat-overlay[data-state="open"] { animation: mingo-chat-overlay-in 200ms cubic-bezier(0.05, 0.7, 0.1, 1) both; }
55
+ .mingo-chat-overlay[data-state="closed"] { animation: mingo-chat-overlay-out 150ms cubic-bezier(0.3, 0, 0.8, 0.15) both; }
56
+
57
+ /* Mobile: bottom-sheet motion */
58
+ .mingo-chat-content[data-state="open"] { animation: mingo-chat-slide-in-bottom 250ms cubic-bezier(0.05, 0.7, 0.1, 1) both; }
59
+ .mingo-chat-content[data-state="closed"] { animation: mingo-chat-slide-out-bottom 200ms cubic-bezier(0.3, 0, 0.8, 0.15) both; }
60
+
61
+ /* Desktop (>=768px): side-panel motion */
62
+ @media (min-width: 768px) {
63
+ .mingo-chat-content[data-state="open"] { animation-name: mingo-chat-slide-in-right; }
64
+ .mingo-chat-content[data-state="closed"] { animation-name: mingo-chat-slide-out-right; }
65
+ }
@@ -4,6 +4,7 @@
4
4
  @import "./ods-interaction-states.css";
5
5
  @import "./ods-responsive-tokens.css";
6
6
  @import "./app-globals.css";
7
+ @import "./chat-animations.css";
7
8
 
8
9
  /* Vendor/library style overrides */
9
10
  @import "./vendor-react-easy-crop.css";
@@ -1,17 +1,32 @@
1
1
  /**
2
- * Access Code Client Utilities
2
+ * Access Code Client Utilities — pure standalone functions.
3
3
  *
4
- * Simple client-side utilities for integrating access code validation
5
- * and consumption into registration forms.
4
+ * Endpoint paths are NOT hardcoded every function takes an
5
+ * `endpoints` argument. The React-side wrapper that binds them from
6
+ * `EndpointsRuntimeContext` lives separately at
7
+ * `hooks/use-access-code-integration.ts` (`useAccessCodeIntegration`).
8
+ *
9
+ * Keep this file **free of React imports** — it lives in the
10
+ * server-safe `utils/index` tsup bundle. Any module-top-level call
11
+ * into `createContext()` (which the runtime context file does) would
12
+ * be pulled into the server bundle and crash SSR with
13
+ * `createContext is not a function`.
6
14
  */
7
15
 
8
- import React from 'react';
9
16
  import {
10
17
  AccessCodeValidation,
11
18
  AccessCodeValidationResponse,
12
19
  AccessCodeConsumptionResponse
13
20
  } from '../types/access-code-cohorts';
14
21
 
22
+ /** Endpoints required by the standalone client utilities. The
23
+ * `useAccessCodeIntegration` hook (in `hooks/`) resolves these from
24
+ * `EndpointsRuntimeContext.accessCode` automatically. */
25
+ export interface AccessCodeEndpoints {
26
+ validateUrl: string
27
+ consumeUrl: string
28
+ }
29
+
15
30
  /**
16
31
  * Validate an access code for a given email
17
32
  *
@@ -31,10 +46,11 @@ import {
31
46
  */
32
47
  export async function validateAccessCode(
33
48
  email: string,
34
- code: string
49
+ code: string,
50
+ endpoints: AccessCodeEndpoints,
35
51
  ): Promise<AccessCodeValidationResponse> {
36
52
  try {
37
- const response = await fetch('/api/validate-access-code', {
53
+ const response = await fetch(endpoints.validateUrl, {
38
54
  method: 'POST',
39
55
  headers: {
40
56
  'Content-Type': 'application/json',
@@ -77,10 +93,11 @@ export async function validateAccessCode(
77
93
  */
78
94
  export async function consumeAccessCode(
79
95
  email: string,
80
- code: string
96
+ code: string,
97
+ endpoints: AccessCodeEndpoints,
81
98
  ): Promise<AccessCodeConsumptionResponse> {
82
99
  try {
83
- const response = await fetch('/api/consume-access-code', {
100
+ const response = await fetch(endpoints.consumeUrl, {
84
101
  method: 'POST',
85
102
  headers: {
86
103
  'Content-Type': 'application/json',
@@ -125,17 +142,18 @@ export async function consumeAccessCode(
125
142
  */
126
143
  export async function validateAndConsumeAccessCode(
127
144
  email: string,
128
- code: string
145
+ code: string,
146
+ endpoints: AccessCodeEndpoints,
129
147
  ): Promise<AccessCodeValidationResponse & { consumed?: boolean }> {
130
148
  // First validate
131
- const validation = await validateAccessCode(email, code);
149
+ const validation = await validateAccessCode(email, code, endpoints);
132
150
 
133
151
  if (!validation.valid) {
134
152
  return validation;
135
153
  }
136
154
 
137
155
  // If valid, consume the code
138
- const consumption = await consumeAccessCode(email, code);
156
+ const consumption = await consumeAccessCode(email, code, endpoints);
139
157
 
140
158
  return {
141
159
  ...validation,
@@ -146,67 +164,6 @@ export async function validateAndConsumeAccessCode(
146
164
  };
147
165
  }
148
166
 
149
- /**
150
- * Access Code Integration Hook (for React components)
151
- *
152
- * @example
153
- * const { validate, consume, isValidating, isConsuming } = useAccessCodeIntegration();
154
- *
155
- * const handleRegistration = async (formData) => {
156
- * const validation = await validate(formData.email, formData.accessCode);
157
- * if (!validation.valid) {
158
- * setError(validation.message);
159
- * return;
160
- * }
161
- *
162
- * // Process registration...
163
- * const registrationResult = await registerUser(formData);
164
- *
165
- * if (registrationResult.success) {
166
- * await consume(formData.email, formData.accessCode);
167
- * }
168
- * };
169
- */
170
- export function useAccessCodeIntegration() {
171
- const [isValidating, setIsValidating] = React.useState(false);
172
- const [isConsuming, setIsConsuming] = React.useState(false);
173
-
174
- const validate = async (email: string, code: string) => {
175
- setIsValidating(true);
176
- try {
177
- return await validateAccessCode(email, code);
178
- } finally {
179
- setIsValidating(false);
180
- }
181
- };
182
-
183
- const consume = async (email: string, code: string) => {
184
- setIsConsuming(true);
185
- try {
186
- return await consumeAccessCode(email, code);
187
- } finally {
188
- setIsConsuming(false);
189
- }
190
- };
191
-
192
- const validateAndConsume = async (email: string, code: string) => {
193
- setIsValidating(true);
194
- setIsConsuming(true);
195
- try {
196
- return await validateAndConsumeAccessCode(email, code);
197
- } finally {
198
- setIsValidating(false);
199
- setIsConsuming(false);
200
- }
201
- };
202
-
203
- return {
204
- validate,
205
- consume,
206
- validateAndConsume,
207
- isValidating,
208
- isConsuming,
209
- isProcessing: isValidating || isConsuming,
210
- };
211
- }
212
-
167
+ // `useAccessCodeIntegration` (the React-side wrapper) lives in
168
+ // `hooks/use-access-code-integration.ts`. It binds the endpoints from
169
+ // `EndpointsRuntimeContext` so React callers don't have to plumb URLs.
package/src/utils/cn.ts CHANGED
@@ -16,71 +16,6 @@ export function cn(...inputs: ClassValue[]) {
16
16
  return twMerge(clsx(inputs))
17
17
  }
18
18
 
19
- /**
20
- * Format a date to a human-readable string
21
- * @param date - The date to format (Date object or ISO string)
22
- * @param options - Formatting options
23
- * @returns Formatted date string
24
- */
25
- export function formatDate(
26
- date: Date | string,
27
- options: Intl.DateTimeFormatOptions = {
28
- year: "numeric",
29
- month: "long",
30
- day: "numeric",
31
- },
32
- ): string {
33
- const dateObj = typeof date === "string" ? new Date(date) : date
34
-
35
- // Check if the date is valid
36
- if (isNaN(dateObj.getTime())) {
37
- console.warn("Invalid date provided to formatDate:", date)
38
- return "Invalid Date"
39
- }
40
-
41
- return dateObj.toLocaleDateString("en-US", options)
42
- }
43
-
44
- /**
45
- * Format a number with thousands separators
46
- * @param num - The number to format
47
- * @returns Formatted number string
48
- */
49
- export function formatNumber(num: number): string {
50
- return num.toLocaleString()
51
- }
52
-
53
- /**
54
- * Format a price with currency symbol
55
- * @param price - The price to format
56
- * @param currency - The currency code
57
- * @returns Formatted price string
58
- */
59
- export function formatPrice(price: number, currency = "USD"): string {
60
- return new Intl.NumberFormat("en-US", {
61
- style: "currency",
62
- currency,
63
- }).format(price)
64
- }
65
-
66
- /**
67
- * Format bytes to a human-readable string (KB, MB, GB, etc.)
68
- * @param bytes - The number of bytes
69
- * @param decimals - Number of decimal places
70
- * @returns Formatted bytes string
71
- */
72
- export function formatBytes(bytes: number, decimals = 2): string {
73
- if (bytes === 0) return "0 Bytes"
74
-
75
- const k = 1024
76
- const dm = decimals < 0 ? 0 : decimals
77
- const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
78
-
79
- const i = Math.floor(Math.log(bytes) / Math.log(k))
80
-
81
- return Number.parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i]
82
- }
83
-
84
19
  /**
85
20
  * Platform URL mappings for production (with environment variable overrides)
86
21
  */