@databiosphere/findable-ui 49.0.0 → 49.2.0

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 (315) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +26 -0
  3. package/lib/common/ai/config/types.d.ts +22 -0
  4. package/lib/common/ai/config/types.js +1 -0
  5. package/lib/common/ai/constants.d.ts +3 -0
  6. package/lib/common/ai/constants.js +3 -0
  7. package/lib/components/Filter/components/FilterLabel/filterLabel.js +1 -1
  8. package/lib/components/Filter/components/FilterLabel/filterLabel.stories.d.ts +3 -0
  9. package/lib/components/Filter/components/FilterLabel/filterLabel.stories.js +5 -0
  10. package/lib/components/Filter/components/Filters/stories/constants.js +21 -1
  11. package/lib/components/Filter/components/SearchAllFilters/searchAllFilters.styles.js +2 -0
  12. package/lib/components/Layout/components/Sidebar/components/SidebarTools/sidebarTools.styles.d.ts +4 -0
  13. package/lib/components/Layout/components/Sidebar/components/SidebarTools/sidebarTools.styles.js +4 -0
  14. package/lib/components/common/Chip/components/Beta/beta.d.ts +10 -0
  15. package/lib/components/common/Chip/components/Beta/beta.js +12 -0
  16. package/lib/components/common/Chip/components/Beta/beta.styles.d.ts +3 -0
  17. package/lib/components/common/Chip/components/Beta/beta.styles.js +14 -0
  18. package/lib/components/common/Chip/components/Beta/stories/beta.stories.d.ts +6 -0
  19. package/lib/components/common/Chip/components/Beta/stories/beta.stories.js +6 -0
  20. package/lib/components/common/CustomIcon/components/UpArrowIcon/upArrowIcon.d.ts +6 -0
  21. package/lib/components/common/CustomIcon/components/UpArrowIcon/upArrowIcon.js +8 -0
  22. package/lib/components/common/Tabs/tabs.js +1 -1
  23. package/lib/components/common/ToggleButtonGroup/provider/context.d.ts +2 -0
  24. package/lib/components/common/ToggleButtonGroup/provider/context.js +5 -0
  25. package/lib/components/common/ToggleButtonGroup/provider/hook.d.ts +7 -0
  26. package/lib/components/common/ToggleButtonGroup/provider/hook.js +9 -0
  27. package/lib/components/common/ToggleButtonGroup/provider/provider.d.ts +12 -0
  28. package/lib/components/common/ToggleButtonGroup/provider/provider.js +22 -0
  29. package/lib/components/common/ToggleButtonGroup/provider/types.d.ts +9 -0
  30. package/lib/components/common/ToggleButtonGroup/provider/types.js +1 -0
  31. package/lib/config/entities.d.ts +2 -0
  32. package/lib/hooks/ai/useAiRoutes/hook.d.ts +6 -0
  33. package/lib/hooks/ai/useAiRoutes/hook.js +18 -0
  34. package/lib/styles/common/mui/drawer.d.ts +9 -0
  35. package/lib/styles/common/mui/drawer.js +15 -0
  36. package/lib/styles/common/mui/inputBase.d.ts +13 -0
  37. package/lib/styles/common/mui/inputBase.js +25 -0
  38. package/lib/styles/common/mui/stack.d.ts +11 -0
  39. package/lib/styles/common/mui/stack.js +22 -0
  40. package/lib/tests/testIds.d.ts +3 -0
  41. package/lib/tests/testIds.js +3 -0
  42. package/lib/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.d.ts +6 -0
  43. package/lib/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.js +17 -0
  44. package/lib/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.styles.d.ts +6 -0
  45. package/lib/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.styles.js +23 -0
  46. package/lib/views/ExploreView/entityList/filters/filters.styles.d.ts +7 -0
  47. package/lib/views/ExploreView/entityList/filters/filters.styles.js +17 -0
  48. package/lib/views/ExploreView/exploreView.js +3 -2
  49. package/lib/views/ResearchView/assistant/assistant.d.ts +6 -0
  50. package/lib/views/ResearchView/assistant/assistant.js +16 -0
  51. package/lib/views/ResearchView/assistant/components/Drawer/drawer.d.ts +9 -0
  52. package/lib/views/ResearchView/assistant/components/Drawer/drawer.js +15 -0
  53. package/lib/views/ResearchView/assistant/components/Drawer/drawer.styles.d.ts +4 -0
  54. package/lib/views/ResearchView/assistant/components/Drawer/drawer.styles.js +21 -0
  55. package/lib/views/ResearchView/assistant/components/Drawer/types.d.ts +4 -0
  56. package/lib/views/ResearchView/assistant/components/Drawer/types.js +1 -0
  57. package/lib/views/ResearchView/assistant/components/Form/constants.d.ts +3 -0
  58. package/lib/views/ResearchView/assistant/components/Form/constants.js +3 -0
  59. package/lib/views/ResearchView/assistant/components/Form/form.d.ts +11 -0
  60. package/lib/views/ResearchView/assistant/components/Form/form.js +27 -0
  61. package/lib/views/ResearchView/assistant/components/Form/form.styles.d.ts +4 -0
  62. package/lib/views/ResearchView/assistant/components/Form/form.styles.js +7 -0
  63. package/lib/views/ResearchView/assistant/components/Form/types.d.ts +3 -0
  64. package/lib/views/ResearchView/assistant/components/Form/types.js +1 -0
  65. package/lib/views/ResearchView/assistant/components/Form/utils.d.ts +16 -0
  66. package/lib/views/ResearchView/assistant/components/Form/utils.js +41 -0
  67. package/lib/views/ResearchView/assistant/components/Input/constants.d.ts +2 -0
  68. package/lib/views/ResearchView/assistant/components/Input/constants.js +14 -0
  69. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/constants.d.ts +7 -0
  70. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/constants.js +7 -0
  71. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/hook.d.ts +6 -0
  72. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/hook.js +32 -0
  73. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/types.d.ts +8 -0
  74. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/types.js +1 -0
  75. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/utils.d.ts +32 -0
  76. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/utils.js +74 -0
  77. package/lib/views/ResearchView/assistant/components/Input/input.d.ts +9 -0
  78. package/lib/views/ResearchView/assistant/components/Input/input.js +19 -0
  79. package/lib/views/ResearchView/assistant/components/Input/input.styles.d.ts +8 -0
  80. package/lib/views/ResearchView/assistant/components/Input/input.styles.js +19 -0
  81. package/lib/views/ResearchView/assistant/components/Input/stories/input.stories.d.ts +6 -0
  82. package/lib/views/ResearchView/assistant/components/Input/stories/input.stories.js +11 -0
  83. package/lib/views/ResearchView/assistant/components/Input/types.d.ts +2 -0
  84. package/lib/views/ResearchView/assistant/components/Input/types.js +1 -0
  85. package/lib/views/ResearchView/assistant/components/Input/utils.d.ts +9 -0
  86. package/lib/views/ResearchView/assistant/components/Input/utils.js +25 -0
  87. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/assistantMessage.d.ts +9 -0
  88. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/assistantMessage.js +15 -0
  89. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/types.d.ts +4 -0
  90. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/types.js +1 -0
  91. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/utils.d.ts +13 -0
  92. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/utils.js +25 -0
  93. package/lib/views/ResearchView/assistant/components/Messages/components/ErrorMessage/errorMessage.d.ts +9 -0
  94. package/lib/views/ResearchView/assistant/components/Messages/components/ErrorMessage/errorMessage.js +12 -0
  95. package/lib/views/ResearchView/assistant/components/Messages/components/ErrorMessage/types.d.ts +4 -0
  96. package/lib/views/ResearchView/assistant/components/Messages/components/ErrorMessage/types.js +1 -0
  97. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.d.ts +3 -0
  98. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.js +10 -0
  99. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.styles.d.ts +3 -0
  100. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.styles.js +26 -0
  101. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/types.d.ts +5 -0
  102. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/types.js +1 -0
  103. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/promptMessage.d.ts +10 -0
  104. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/promptMessage.js +14 -0
  105. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/types.d.ts +5 -0
  106. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/types.js +1 -0
  107. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/types.d.ts +4 -0
  108. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/types.js +1 -0
  109. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/useMessage.styles.d.ts +5 -0
  110. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/useMessage.styles.js +10 -0
  111. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/userMessage.d.ts +9 -0
  112. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/userMessage.js +13 -0
  113. package/lib/views/ResearchView/assistant/components/Messages/hooks/UseScroll/hook.d.ts +8 -0
  114. package/lib/views/ResearchView/assistant/components/Messages/hooks/UseScroll/hook.js +20 -0
  115. package/lib/views/ResearchView/assistant/components/Messages/messages.d.ts +9 -0
  116. package/lib/views/ResearchView/assistant/components/Messages/messages.js +16 -0
  117. package/lib/views/ResearchView/assistant/components/Messages/messages.styles.d.ts +3 -0
  118. package/lib/views/ResearchView/assistant/components/Messages/messages.styles.js +9 -0
  119. package/lib/views/ResearchView/assistant/components/Messages/selector/messageSelector.d.ts +17 -0
  120. package/lib/views/ResearchView/assistant/components/Messages/selector/messageSelector.js +32 -0
  121. package/lib/views/ResearchView/assistant/components/Messages/selector/types.d.ts +5 -0
  122. package/lib/views/ResearchView/assistant/components/Messages/selector/types.js +1 -0
  123. package/lib/views/ResearchView/assistant/components/Messages/stories/args.d.ts +3 -0
  124. package/lib/views/ResearchView/assistant/components/Messages/stories/args.js +109 -0
  125. package/lib/views/ResearchView/assistant/components/Messages/stories/messages.stories.d.ts +6 -0
  126. package/lib/views/ResearchView/assistant/components/Messages/stories/messages.stories.js +14 -0
  127. package/lib/views/ResearchView/assistant/components/Messages/types.d.ts +4 -0
  128. package/lib/views/ResearchView/assistant/components/Messages/types.js +1 -0
  129. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/stories/toggleButtonGroup.stories.d.ts +6 -0
  130. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/stories/toggleButtonGroup.stories.js +12 -0
  131. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.d.ts +6 -0
  132. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.js +16 -0
  133. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.styles.d.ts +6 -0
  134. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.styles.js +20 -0
  135. package/lib/views/ResearchView/assistant/stories/args.d.ts +4 -0
  136. package/lib/views/ResearchView/assistant/stories/args.js +30 -0
  137. package/lib/views/ResearchView/assistant/stories/assistant.stories.d.ts +6 -0
  138. package/lib/views/ResearchView/assistant/stories/assistant.stories.js +23 -0
  139. package/lib/views/ResearchView/query/constants.d.ts +5 -0
  140. package/lib/views/ResearchView/query/constants.js +5 -0
  141. package/lib/views/ResearchView/query/fetch.d.ts +17 -0
  142. package/lib/views/ResearchView/query/fetch.js +44 -0
  143. package/lib/views/ResearchView/researchView.d.ts +10 -0
  144. package/lib/views/ResearchView/researchView.js +13 -0
  145. package/lib/views/ResearchView/state/actions/setError/action.d.ts +10 -0
  146. package/lib/views/ResearchView/state/actions/setError/action.js +17 -0
  147. package/lib/views/ResearchView/state/actions/setError/dispatch.d.ts +7 -0
  148. package/lib/views/ResearchView/state/actions/setError/dispatch.js +12 -0
  149. package/lib/views/ResearchView/state/actions/setError/types.d.ts +14 -0
  150. package/lib/views/ResearchView/state/actions/setError/types.js +1 -0
  151. package/lib/views/ResearchView/state/actions/setMessage/action.d.ts +10 -0
  152. package/lib/views/ResearchView/state/actions/setMessage/action.js +21 -0
  153. package/lib/views/ResearchView/state/actions/setMessage/dispatch.d.ts +7 -0
  154. package/lib/views/ResearchView/state/actions/setMessage/dispatch.js +12 -0
  155. package/lib/views/ResearchView/state/actions/setMessage/types.d.ts +15 -0
  156. package/lib/views/ResearchView/state/actions/setMessage/types.js +1 -0
  157. package/lib/views/ResearchView/state/actions/setQuery/action.d.ts +10 -0
  158. package/lib/views/ResearchView/state/actions/setQuery/action.js +17 -0
  159. package/lib/views/ResearchView/state/actions/setQuery/dispatch.d.ts +7 -0
  160. package/lib/views/ResearchView/state/actions/setQuery/dispatch.js +12 -0
  161. package/lib/views/ResearchView/state/actions/setQuery/types.d.ts +14 -0
  162. package/lib/views/ResearchView/state/actions/setQuery/types.js +1 -0
  163. package/lib/views/ResearchView/state/actions/setStatus/action.d.ts +10 -0
  164. package/lib/views/ResearchView/state/actions/setStatus/action.js +13 -0
  165. package/lib/views/ResearchView/state/actions/setStatus/dispatch.d.ts +7 -0
  166. package/lib/views/ResearchView/state/actions/setStatus/dispatch.js +12 -0
  167. package/lib/views/ResearchView/state/actions/setStatus/types.d.ts +14 -0
  168. package/lib/views/ResearchView/state/actions/setStatus/types.js +1 -0
  169. package/lib/views/ResearchView/state/actions/types.d.ts +17 -0
  170. package/lib/views/ResearchView/state/actions/types.js +10 -0
  171. package/lib/views/ResearchView/state/constants.d.ts +5 -0
  172. package/lib/views/ResearchView/state/constants.js +7 -0
  173. package/lib/views/ResearchView/state/context.d.ts +5 -0
  174. package/lib/views/ResearchView/state/context.js +9 -0
  175. package/lib/views/ResearchView/state/guards/guards.d.ts +33 -0
  176. package/lib/views/ResearchView/state/guards/guards.js +41 -0
  177. package/lib/views/ResearchView/state/hooks/UseChatDispatch/hook.d.ts +6 -0
  178. package/lib/views/ResearchView/state/hooks/UseChatDispatch/hook.js +26 -0
  179. package/lib/views/ResearchView/state/hooks/UseChatDispatch/types.d.ts +10 -0
  180. package/lib/views/ResearchView/state/hooks/UseChatDispatch/types.js +1 -0
  181. package/lib/views/ResearchView/state/hooks/UseChatReducer/hook.d.ts +8 -0
  182. package/lib/views/ResearchView/state/hooks/UseChatReducer/hook.js +12 -0
  183. package/lib/views/ResearchView/state/hooks/UseChatState/hook.d.ts +7 -0
  184. package/lib/views/ResearchView/state/hooks/UseChatState/hook.js +11 -0
  185. package/lib/views/ResearchView/state/initializer/initializer.d.ts +8 -0
  186. package/lib/views/ResearchView/state/initializer/initializer.js +22 -0
  187. package/lib/views/ResearchView/state/initializer/types.d.ts +2 -0
  188. package/lib/views/ResearchView/state/initializer/types.js +1 -0
  189. package/lib/views/ResearchView/state/provider.d.ts +19 -0
  190. package/lib/views/ResearchView/state/provider.js +20 -0
  191. package/lib/views/ResearchView/state/query/context.d.ts +5 -0
  192. package/lib/views/ResearchView/state/query/context.js +7 -0
  193. package/lib/views/ResearchView/state/query/hooks/UseQuery/hook.d.ts +6 -0
  194. package/lib/views/ResearchView/state/query/hooks/UseQuery/hook.js +9 -0
  195. package/lib/views/ResearchView/state/query/hooks/UseSubmit/hook.d.ts +7 -0
  196. package/lib/views/ResearchView/state/query/hooks/UseSubmit/hook.js +46 -0
  197. package/lib/views/ResearchView/state/query/provider.d.ts +13 -0
  198. package/lib/views/ResearchView/state/query/provider.js +15 -0
  199. package/lib/views/ResearchView/state/query/types.d.ts +24 -0
  200. package/lib/views/ResearchView/state/query/types.js +1 -0
  201. package/lib/views/ResearchView/state/reducer.d.ts +10 -0
  202. package/lib/views/ResearchView/state/reducer.js +32 -0
  203. package/lib/views/ResearchView/state/types.d.ts +125 -0
  204. package/lib/views/ResearchView/state/types.js +22 -0
  205. package/package.json +1 -1
  206. package/src/common/ai/config/types.ts +25 -0
  207. package/src/common/ai/constants.ts +3 -0
  208. package/src/components/Filter/components/FilterLabel/filterLabel.stories.tsx +6 -0
  209. package/src/components/Filter/components/FilterLabel/filterLabel.tsx +6 -1
  210. package/src/components/Filter/components/Filters/stories/constants.ts +25 -1
  211. package/src/components/Filter/components/SearchAllFilters/searchAllFilters.styles.ts +2 -0
  212. package/src/components/Layout/components/Sidebar/components/SidebarTools/sidebarTools.styles.ts +4 -0
  213. package/src/components/common/Chip/components/Beta/beta.styles.ts +15 -0
  214. package/src/components/common/Chip/components/Beta/beta.tsx +25 -0
  215. package/src/components/common/Chip/components/Beta/stories/beta.stories.tsx +12 -0
  216. package/src/components/common/CustomIcon/components/UpArrowIcon/upArrowIcon.tsx +21 -0
  217. package/src/components/common/Tabs/tabs.tsx +5 -1
  218. package/src/components/common/ToggleButtonGroup/provider/context.ts +9 -0
  219. package/src/components/common/ToggleButtonGroup/provider/hook.ts +16 -0
  220. package/src/components/common/ToggleButtonGroup/provider/provider.tsx +37 -0
  221. package/src/components/common/ToggleButtonGroup/provider/types.ts +17 -0
  222. package/src/config/entities.ts +2 -0
  223. package/src/hooks/ai/useAiRoutes/hook.ts +22 -0
  224. package/src/styles/common/mui/drawer.ts +24 -0
  225. package/src/styles/common/mui/inputBase.ts +38 -0
  226. package/src/styles/common/mui/stack.ts +33 -0
  227. package/src/tests/testIds.ts +3 -0
  228. package/src/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.styles.ts +25 -0
  229. package/src/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.tsx +35 -0
  230. package/src/views/ExploreView/entityList/filters/filters.styles.ts +19 -0
  231. package/src/views/ExploreView/exploreView.tsx +16 -12
  232. package/src/views/ResearchView/assistant/assistant.tsx +28 -0
  233. package/src/views/ResearchView/assistant/components/Drawer/drawer.styles.ts +24 -0
  234. package/src/views/ResearchView/assistant/components/Drawer/drawer.tsx +26 -0
  235. package/src/views/ResearchView/assistant/components/Drawer/types.ts +5 -0
  236. package/src/views/ResearchView/assistant/components/Form/constants.ts +3 -0
  237. package/src/views/ResearchView/assistant/components/Form/form.styles.ts +8 -0
  238. package/src/views/ResearchView/assistant/components/Form/form.tsx +40 -0
  239. package/src/views/ResearchView/assistant/components/Form/types.ts +9 -0
  240. package/src/views/ResearchView/assistant/components/Form/utils.ts +51 -0
  241. package/src/views/ResearchView/assistant/components/Input/constants.ts +16 -0
  242. package/src/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/constants.ts +7 -0
  243. package/src/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/hook.ts +45 -0
  244. package/src/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/types.ts +10 -0
  245. package/src/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/utils.ts +93 -0
  246. package/src/views/ResearchView/assistant/components/Input/input.styles.ts +21 -0
  247. package/src/views/ResearchView/assistant/components/Input/input.tsx +37 -0
  248. package/src/views/ResearchView/assistant/components/Input/stories/input.stories.tsx +21 -0
  249. package/src/views/ResearchView/assistant/components/Input/types.ts +3 -0
  250. package/src/views/ResearchView/assistant/components/Input/utils.ts +34 -0
  251. package/src/views/ResearchView/assistant/components/Messages/components/AssistantMessage/assistantMessage.tsx +49 -0
  252. package/src/views/ResearchView/assistant/components/Messages/components/AssistantMessage/types.ts +5 -0
  253. package/src/views/ResearchView/assistant/components/Messages/components/AssistantMessage/utils.ts +31 -0
  254. package/src/views/ResearchView/assistant/components/Messages/components/ErrorMessage/errorMessage.tsx +21 -0
  255. package/src/views/ResearchView/assistant/components/Messages/components/ErrorMessage/types.ts +5 -0
  256. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.styles.ts +27 -0
  257. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.tsx +31 -0
  258. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/types.ts +6 -0
  259. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/promptMessage.tsx +26 -0
  260. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/types.ts +6 -0
  261. package/src/views/ResearchView/assistant/components/Messages/components/UserMessage/types.ts +5 -0
  262. package/src/views/ResearchView/assistant/components/Messages/components/UserMessage/useMessage.styles.ts +11 -0
  263. package/src/views/ResearchView/assistant/components/Messages/components/UserMessage/userMessage.tsx +21 -0
  264. package/src/views/ResearchView/assistant/components/Messages/hooks/UseScroll/hook.ts +25 -0
  265. package/src/views/ResearchView/assistant/components/Messages/messages.styles.ts +10 -0
  266. package/src/views/ResearchView/assistant/components/Messages/messages.tsx +29 -0
  267. package/src/views/ResearchView/assistant/components/Messages/selector/messageSelector.tsx +37 -0
  268. package/src/views/ResearchView/assistant/components/Messages/selector/types.ts +6 -0
  269. package/src/views/ResearchView/assistant/components/Messages/stories/args.ts +115 -0
  270. package/src/views/ResearchView/assistant/components/Messages/stories/messages.stories.tsx +24 -0
  271. package/src/views/ResearchView/assistant/components/Messages/types.ts +5 -0
  272. package/src/views/ResearchView/assistant/components/ToggleButtonGroup/stories/toggleButtonGroup.stories.tsx +22 -0
  273. package/src/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.styles.ts +22 -0
  274. package/src/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.tsx +34 -0
  275. package/src/views/ResearchView/assistant/stories/args.ts +36 -0
  276. package/src/views/ResearchView/assistant/stories/assistant.stories.tsx +39 -0
  277. package/src/views/ResearchView/query/constants.ts +5 -0
  278. package/src/views/ResearchView/query/fetch.ts +58 -0
  279. package/src/views/ResearchView/researchView.tsx +19 -0
  280. package/src/views/ResearchView/state/actions/setError/action.ts +22 -0
  281. package/src/views/ResearchView/state/actions/setError/dispatch.ts +14 -0
  282. package/src/views/ResearchView/state/actions/setError/types.ts +16 -0
  283. package/src/views/ResearchView/state/actions/setMessage/action.ts +26 -0
  284. package/src/views/ResearchView/state/actions/setMessage/dispatch.ts +14 -0
  285. package/src/views/ResearchView/state/actions/setMessage/types.ts +19 -0
  286. package/src/views/ResearchView/state/actions/setQuery/action.ts +22 -0
  287. package/src/views/ResearchView/state/actions/setQuery/dispatch.ts +14 -0
  288. package/src/views/ResearchView/state/actions/setQuery/types.ts +16 -0
  289. package/src/views/ResearchView/state/actions/setStatus/action.ts +19 -0
  290. package/src/views/ResearchView/state/actions/setStatus/dispatch.ts +14 -0
  291. package/src/views/ResearchView/state/actions/setStatus/types.ts +16 -0
  292. package/src/views/ResearchView/state/actions/types.ts +23 -0
  293. package/src/views/ResearchView/state/constants.ts +9 -0
  294. package/src/views/ResearchView/state/context.ts +11 -0
  295. package/src/views/ResearchView/state/guards/guards.ts +58 -0
  296. package/src/views/ResearchView/state/hooks/UseChatDispatch/hook.ts +46 -0
  297. package/src/views/ResearchView/state/hooks/UseChatDispatch/types.ts +11 -0
  298. package/src/views/ResearchView/state/hooks/UseChatReducer/hook.ts +15 -0
  299. package/src/views/ResearchView/state/hooks/UseChatState/hook.ts +14 -0
  300. package/src/views/ResearchView/state/initializer/initializer.ts +23 -0
  301. package/src/views/ResearchView/state/initializer/types.ts +3 -0
  302. package/src/views/ResearchView/state/provider.tsx +34 -0
  303. package/src/views/ResearchView/state/query/context.ts +9 -0
  304. package/src/views/ResearchView/state/query/hooks/UseQuery/hook.ts +11 -0
  305. package/src/views/ResearchView/state/query/hooks/UseSubmit/hook.ts +66 -0
  306. package/src/views/ResearchView/state/query/provider.tsx +27 -0
  307. package/src/views/ResearchView/state/query/types.ts +31 -0
  308. package/src/views/ResearchView/state/reducer.ts +34 -0
  309. package/src/views/ResearchView/state/types.ts +149 -0
  310. package/tests/research.assistantMessageUtils.test.ts +149 -0
  311. package/tests/research.chatState.test.ts +463 -0
  312. package/tests/research.fetchResponse.test.ts +164 -0
  313. package/tests/research.queryProvider.test.ts +321 -0
  314. package/tests/research.useKeyShortCuts.test.ts +254 -0
  315. package/tests/toggleButtonGroupProvider.test.tsx +125 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Formats mention mappings from an assistant message as a readable string.
3
+ * @param message - Assistant message containing response mentions.
4
+ * @returns Formatted facet-value mappings separated by slashes, or empty string if no mentions.
5
+ */
6
+ export function getMappings(message) {
7
+ const mappings = message.response.query.mentions.reduce((acc, m) => {
8
+ const key = m.exclude ? `${m.facet} (exclude)` : m.facet;
9
+ acc[key] = [...(acc[key] || []), ...m.values];
10
+ return acc;
11
+ }, {});
12
+ return Object.entries(mappings)
13
+ .map(([facet, values]) => `${facet}: ${values.join(", ")}`)
14
+ .join(" / ");
15
+ }
16
+ /**
17
+ * Extracts original mention text from an assistant message.
18
+ * @param message - Assistant message containing response mentions.
19
+ * @returns Comma-separated original mention text, or empty string if no mentions.
20
+ */
21
+ export function getMentions(message) {
22
+ return message.response.query.mentions
23
+ .map((mention) => mention.originalText)
24
+ .join(", ");
25
+ }
@@ -0,0 +1,9 @@
1
+ import { JSX } from "react";
2
+ import { ErrorMessageProps } from "./types";
3
+ /**
4
+ * Renders an error message.
5
+ * @param props - Component props.
6
+ * @param props.message - Error message.
7
+ * @returns The error message element.
8
+ */
9
+ export declare const ErrorMessage: ({ message }: ErrorMessageProps) => JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Typography } from "@mui/material";
3
+ import { TYPOGRAPHY_PROPS } from "../../../../../../../styles/common/mui/typography";
4
+ /**
5
+ * Renders an error message.
6
+ * @param props - Component props.
7
+ * @param props.message - Error message.
8
+ * @returns The error message element.
9
+ */
10
+ export const ErrorMessage = ({ message }) => {
11
+ return (_jsx(Typography, { color: TYPOGRAPHY_PROPS.COLOR.ERROR, variant: TYPOGRAPHY_PROPS.VARIANT.BODY_400, children: message.error }));
12
+ };
@@ -0,0 +1,4 @@
1
+ import { ErrorMessage } from "../../../../../state/types";
2
+ export interface ErrorMessageProps {
3
+ message: ErrorMessage;
4
+ }
@@ -0,0 +1,3 @@
1
+ import { JSX } from "react";
2
+ import { ChipsProps } from "./types";
3
+ export declare const Chips: ({ className, message, }: ChipsProps) => JSX.Element | null;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Chip } from "@mui/material";
3
+ import { CHIP_PROPS } from "../../../../../../../../../styles/common/mui/chip";
4
+ import { StyledStack } from "./chips.styles";
5
+ export const Chips = ({ className, message, }) => {
6
+ const suggestions = message.suggestions;
7
+ if (!suggestions || suggestions.length === 0)
8
+ return null;
9
+ return (_jsx(StyledStack, { className: className, gap: 2, useFlexGap: true, children: suggestions.map((suggestion) => (_jsx(Chip, { clickable: true, color: CHIP_PROPS.COLOR.SECONDARY, component: "button", "data-query": suggestion.query, label: suggestion.label, type: "submit", variant: CHIP_PROPS.VARIANT.OUTLINED }, `${suggestion.label}-${suggestion.query}`))) }));
10
+ };
@@ -0,0 +1,3 @@
1
+ export declare const StyledStack: import("@emotion/styled").StyledComponent<import("@mui/material").StackOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import("@mui/material/OverridableComponent").CommonProps | keyof import("@mui/material").StackOwnProps> & {
2
+ theme?: import("@emotion/react").Theme;
3
+ }, {}, {}>;
@@ -0,0 +1,26 @@
1
+ import { Stack } from "@mui/material";
2
+ import styled from "@emotion/styled";
3
+ import { PALETTE } from "../../../../../../../../../styles/common/constants/palette";
4
+ export const StyledStack = styled(Stack) `
5
+ align-items: flex-start;
6
+
7
+ .MuiChip-root {
8
+ background-color: ${PALETTE.COMMON_WHITE};
9
+ border-color: ${PALETTE.SMOKE_MAIN};
10
+ color: ${PALETTE.INK_MAIN};
11
+ height: unset;
12
+ padding: 8px 12px;
13
+
14
+ &.MuiChip-clickable:hover {
15
+ background-color: transparent;
16
+ }
17
+
18
+ &:active {
19
+ box-shadow: none;
20
+ }
21
+
22
+ .MuiChip-label {
23
+ padding: 0;
24
+ }
25
+ }
26
+ `;
@@ -0,0 +1,5 @@
1
+ import { BaseComponentProps } from "../../../../../../../../../components/types";
2
+ import { PromptMessage } from "../../../../../../../state/types";
3
+ export interface ChipsProps extends BaseComponentProps {
4
+ message: PromptMessage;
5
+ }
@@ -0,0 +1,10 @@
1
+ import { JSX } from "react";
2
+ import { PromptMessageProps } from "./types";
3
+ /**
4
+ * Renders a prompt message, and chip suggestions if present (and if it's the last message).
5
+ * @param props - Component props.
6
+ * @param props.isLast - Whether message is the last.
7
+ * @param props.message - Prompt message.
8
+ * @returns The prompt message element.
9
+ */
10
+ export declare const PromptMessage: ({ isLast, message, }: PromptMessageProps) => JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Stack, Typography } from "@mui/material";
3
+ import { TYPOGRAPHY_PROPS } from "../../../../../../../styles/common/mui/typography";
4
+ import { Chips } from "./components/Chips/chips";
5
+ /**
6
+ * Renders a prompt message, and chip suggestions if present (and if it's the last message).
7
+ * @param props - Component props.
8
+ * @param props.isLast - Whether message is the last.
9
+ * @param props.message - Prompt message.
10
+ * @returns The prompt message element.
11
+ */
12
+ export const PromptMessage = ({ isLast, message, }) => {
13
+ return (_jsxs(Stack, { gap: 4, useFlexGap: true, children: [_jsx(Typography, { variant: TYPOGRAPHY_PROPS.VARIANT.BODY_400, children: message.text }), isLast && _jsx(Chips, { message: message })] }));
14
+ };
@@ -0,0 +1,5 @@
1
+ import { PromptMessage } from "../../../../../state/types";
2
+ export interface PromptMessageProps {
3
+ isLast: boolean;
4
+ message: PromptMessage;
5
+ }
@@ -0,0 +1,4 @@
1
+ import { UserMessage } from "../../../../../state/types";
2
+ export interface UserMessageProps {
3
+ message: UserMessage;
4
+ }
@@ -0,0 +1,5 @@
1
+ export declare const StyledRoundedPaper: import("@emotion/styled").StyledComponent<import("../../../../../../../components/types").BaseComponentProps & import("@mui/material").PaperOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "style" | "className" | "classes" | "children" | "sx" | "square" | "elevation" | "variant"> & {
2
+ component?: React.ElementType;
3
+ } & {
4
+ theme?: import("@emotion/react").Theme;
5
+ }, {}, {}>;
@@ -0,0 +1,10 @@
1
+ import styled from "@emotion/styled";
2
+ import { RoundedPaper } from "../../../../../../../components/common/Paper/components/RoundedPaper/roundedPaper";
3
+ import { PALETTE } from "../../../../../../../styles/common/constants/palette";
4
+ export const StyledRoundedPaper = styled(RoundedPaper) `
5
+ align-self: flex-end;
6
+ background-color: ${PALETTE.SMOKE_MAIN};
7
+ max-width: 332px;
8
+ min-height: fit-content;
9
+ padding: 8px 12px;
10
+ `;
@@ -0,0 +1,9 @@
1
+ import { JSX } from "react";
2
+ import { UserMessageProps } from "./types";
3
+ /**
4
+ * Renders a user message.
5
+ * @param props - Component props.
6
+ * @param props.message - User message.
7
+ * @returns The user message element.
8
+ */
9
+ export declare const UserMessage: ({ message }: UserMessageProps) => JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Typography } from "@mui/material";
3
+ import { TYPOGRAPHY_PROPS } from "../../../../../../../styles/common/mui/typography";
4
+ import { StyledRoundedPaper } from "./useMessage.styles";
5
+ /**
6
+ * Renders a user message.
7
+ * @param props - Component props.
8
+ * @param props.message - User message.
9
+ * @returns The user message element.
10
+ */
11
+ export const UserMessage = ({ message }) => {
12
+ return (_jsx(StyledRoundedPaper, { elevation: 0, children: _jsx(Typography, { variant: TYPOGRAPHY_PROPS.VARIANT.BODY_400, children: message.text }) }));
13
+ };
@@ -0,0 +1,8 @@
1
+ import { DependencyList, RefObject } from "react";
2
+ /**
3
+ * Provides a ref that scrolls to the bottom when dependencies change.
4
+ * Uses instant scroll on mount and smooth scroll on subsequent updates.
5
+ * @param deps - Dependency list that triggers scroll on change.
6
+ * @returns A ref to attach to the scrollable container.
7
+ */
8
+ export declare function useScroll(deps: DependencyList): RefObject<HTMLDivElement | null>;
@@ -0,0 +1,20 @@
1
+ import { useEffect, useRef } from "react";
2
+ /**
3
+ * Provides a ref that scrolls to the bottom when dependencies change.
4
+ * Uses instant scroll on mount and smooth scroll on subsequent updates.
5
+ * @param deps - Dependency list that triggers scroll on change.
6
+ * @returns A ref to attach to the scrollable container.
7
+ */
8
+ export function useScroll(deps) {
9
+ const behaviorRef = useRef("instant");
10
+ const ref = useRef(null);
11
+ useEffect(() => {
12
+ ref.current?.scrollTo({
13
+ behavior: behaviorRef.current,
14
+ top: ref.current.scrollHeight,
15
+ });
16
+ behaviorRef.current = "smooth";
17
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- deps are passed in as an argument
18
+ }, deps);
19
+ return ref;
20
+ }
@@ -0,0 +1,9 @@
1
+ import { JSX } from "react";
2
+ import { MessagesProps } from "./types";
3
+ /**
4
+ * Renders chat messages, delegating each to the message selector.
5
+ * @param props - Component props.
6
+ * @param props.state - Chat state.
7
+ * @returns The messages list element.
8
+ */
9
+ export declare const Messages: ({ state }: MessagesProps) => JSX.Element | null;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { StyledStack } from "./messages.styles";
3
+ import { MessageSelector } from "./selector/messageSelector";
4
+ import { useScroll } from "./hooks/UseScroll/hook";
5
+ /**
6
+ * Renders chat messages, delegating each to the message selector.
7
+ * @param props - Component props.
8
+ * @param props.state - Chat state.
9
+ * @returns The messages list element.
10
+ */
11
+ export const Messages = ({ state }) => {
12
+ const ref = useScroll([state.messages]);
13
+ if (state.messages.length === 0)
14
+ return null;
15
+ return (_jsx(StyledStack, { ref: ref, useFlexGap: true, children: state.messages.map((message, index) => (_jsx(MessageSelector, { isLast: index === state.messages.length - 1, message: message }, message.createdAt))) }));
16
+ };
@@ -0,0 +1,3 @@
1
+ export declare const StyledStack: import("@emotion/styled").StyledComponent<import("@mui/material").StackOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import("@mui/material/OverridableComponent").CommonProps | keyof import("@mui/material").StackOwnProps> & {
2
+ theme?: import("@emotion/react").Theme;
3
+ }, {}, {}>;
@@ -0,0 +1,9 @@
1
+ import { Stack } from "@mui/material";
2
+ import styled from "@emotion/styled";
3
+ export const StyledStack = styled(Stack) `
4
+ flex: 1;
5
+ gap: 24px;
6
+ overflow-y: auto;
7
+ overscroll-behavior-y: contain;
8
+ padding: 16px;
9
+ `;
@@ -0,0 +1,17 @@
1
+ import { JSX } from "react";
2
+ import { MessageSelectorProps } from "./types";
3
+ /**
4
+ * Selects and renders the appropriate message component based on message type.
5
+ *
6
+ * Available types:
7
+ * - `ASSISTANT`: Displays assistant messages.
8
+ * - `ERROR`: Displays error messages.
9
+ * - `PROMPT`: Displays prompt messages.
10
+ * - `USER`: Displays user messages.
11
+ *
12
+ * @param props - Component props.
13
+ * @param props.isLast - Indicates if the message is the last one in the chat.
14
+ * @param props.message - Chat message.
15
+ * @returns The selected message component.
16
+ */
17
+ export declare const MessageSelector: ({ isLast, message, }: MessageSelectorProps) => JSX.Element;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { MESSAGE_TYPE } from "../../../../state/types";
3
+ import { AssistantMessage } from "../components/AssistantMessage/assistantMessage";
4
+ import { ErrorMessage } from "../components/ErrorMessage/errorMessage";
5
+ import { PromptMessage } from "../components/PromptMessage/promptMessage";
6
+ import { UserMessage } from "../components/UserMessage/userMessage";
7
+ /**
8
+ * Selects and renders the appropriate message component based on message type.
9
+ *
10
+ * Available types:
11
+ * - `ASSISTANT`: Displays assistant messages.
12
+ * - `ERROR`: Displays error messages.
13
+ * - `PROMPT`: Displays prompt messages.
14
+ * - `USER`: Displays user messages.
15
+ *
16
+ * @param props - Component props.
17
+ * @param props.isLast - Indicates if the message is the last one in the chat.
18
+ * @param props.message - Chat message.
19
+ * @returns The selected message component.
20
+ */
21
+ export const MessageSelector = ({ isLast, message, }) => {
22
+ switch (message.type) {
23
+ case MESSAGE_TYPE.ASSISTANT:
24
+ return _jsx(AssistantMessage, { message: message });
25
+ case MESSAGE_TYPE.ERROR:
26
+ return _jsx(ErrorMessage, { message: message });
27
+ case MESSAGE_TYPE.PROMPT:
28
+ return _jsx(PromptMessage, { isLast: isLast, message: message });
29
+ case MESSAGE_TYPE.USER:
30
+ return _jsx(UserMessage, { message: message });
31
+ }
32
+ };
@@ -0,0 +1,5 @@
1
+ import { Message } from "../../../../state/types";
2
+ export interface MessageSelectorProps {
3
+ isLast: boolean;
4
+ message: Message;
5
+ }
@@ -0,0 +1,3 @@
1
+ import { ComponentProps } from "react";
2
+ import { Messages } from "../messages";
3
+ export declare const ARGS: ComponentProps<typeof Messages>;
@@ -0,0 +1,109 @@
1
+ import { MESSAGE_TYPE } from "../../../../state/types";
2
+ import { ERROR_MESSAGE } from "../../../../query/constants";
3
+ export const ARGS = {
4
+ state: {
5
+ messages: [
6
+ {
7
+ createdAt: 1771998382830,
8
+ inputPlaceholder: "Ask about datasets or variables",
9
+ suggestions: [
10
+ {
11
+ label: "GLP-1 effect + smoking in T2D",
12
+ query: "I'm studying whether smoking modifies the effect of GLP-1 agonists on glycemic control in T2D patients",
13
+ variant: "CHIP",
14
+ },
15
+ {
16
+ label: "WGS for cardiovascular outcomes",
17
+ query: "I'm interested in whole genome sequencing data for cardiovascular outcomes",
18
+ variant: "CHIP",
19
+ },
20
+ {
21
+ label: "RNA-Seq in pancreatic cancer",
22
+ query: "I'm interested in RNA-Seq data for pancreatic cancer",
23
+ variant: "CHIP",
24
+ },
25
+ ],
26
+ text: "Hello! I can help you find datasets across 2,944 studies from AnVIL, BDC, CRDC, and KFDRC. Describe your research question and I'll build a structured plan and find matching data.",
27
+ type: MESSAGE_TYPE.PROMPT,
28
+ },
29
+ {
30
+ createdAt: 1771998382831,
31
+ text: "I'm studying whether smoking modifies the effect of GLP-1 agonists on glycemic control in T2D patients.",
32
+ type: MESSAGE_TYPE.USER,
33
+ },
34
+ {
35
+ createdAt: 1771998382832,
36
+ response: {
37
+ message: 'The exact term "glycemic control" has very low study counts (1 study each). I\'ve mapped it to the most relevant clinical measurements: "Glycated Hemoglobin" (HbA1c, 9 studies) and "Fasting Glucose" (44 studies), which are the standard markers used to assess glycemic control in diabetes management.',
38
+ query: {
39
+ mentions: [
40
+ {
41
+ exclude: false,
42
+ facet: "focus",
43
+ originalText: "type 2 diabetes",
44
+ values: ["Diabetes Mellitus, Type 2"],
45
+ },
46
+ {
47
+ exclude: false,
48
+ facet: "measurement",
49
+ originalText: "smoking",
50
+ values: [
51
+ "Current Smoking Status",
52
+ "Smoking History",
53
+ "Smoking Status",
54
+ ],
55
+ },
56
+ {
57
+ exclude: false,
58
+ facet: "measurement",
59
+ originalText: "glycemic control",
60
+ values: ["Glycated Hemoglobin", "Fasting Glucose"],
61
+ },
62
+ ],
63
+ },
64
+ },
65
+ type: MESSAGE_TYPE.ASSISTANT,
66
+ },
67
+ {
68
+ createdAt: 1771998382833,
69
+ text: "What about datasets related to GLP-1 agonists and glycemic control in T2D patients?",
70
+ type: MESSAGE_TYPE.USER,
71
+ },
72
+ {
73
+ createdAt: 1771998382834,
74
+ error: ERROR_MESSAGE.RATE_LIMITED,
75
+ type: MESSAGE_TYPE.ERROR,
76
+ },
77
+ {
78
+ createdAt: 1771998382835,
79
+ text: "I'm studying whether smoking modifies the effect of GLP-1 agonists on glycemic control in T2D patients.",
80
+ type: MESSAGE_TYPE.USER,
81
+ },
82
+ {
83
+ createdAt: 1771998382836,
84
+ response: {
85
+ message: "How do you want to split the smoking groups?",
86
+ query: {
87
+ mentions: [
88
+ {
89
+ exclude: false,
90
+ facet: "focus",
91
+ originalText: "lung cancer",
92
+ values: [
93
+ "Lung Neoplasms",
94
+ "Carcinoma, Non-Small-Cell Lung",
95
+ "Adenocarcinoma of Lung",
96
+ "Small Cell Lung Carcinoma",
97
+ ],
98
+ },
99
+ ],
100
+ },
101
+ },
102
+ type: MESSAGE_TYPE.ASSISTANT,
103
+ },
104
+ ],
105
+ status: {
106
+ loading: false,
107
+ },
108
+ },
109
+ };
@@ -0,0 +1,6 @@
1
+ import { type Meta, type StoryObj } from "@storybook/nextjs-vite";
2
+ import { Messages } from "../messages";
3
+ declare const meta: Meta<typeof Messages>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Messages } from "../messages";
3
+ import { Box } from "@mui/material";
4
+ import { ARGS } from "./args";
5
+ const meta = {
6
+ component: Messages,
7
+ decorators: [
8
+ (Story) => (_jsx(Box, { sx: { width: "412px" }, children: _jsx(Story, {}) })),
9
+ ],
10
+ };
11
+ export default meta;
12
+ export const Default = {
13
+ args: ARGS,
14
+ };
@@ -0,0 +1,4 @@
1
+ import { ChatState } from "../../../state/types";
2
+ export interface MessagesProps {
3
+ state: ChatState;
4
+ }
@@ -0,0 +1,6 @@
1
+ import type { Meta, StoryObj } from "@storybook/nextjs-vite";
2
+ import { ToggleButtonGroup } from "../toggleButtonGroup";
3
+ declare const meta: Meta<typeof ToggleButtonGroup>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const DEFAULT: Story;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ToggleButtonGroup } from "../toggleButtonGroup";
3
+ import { ConfigProvider } from "../../../../../../providers/config";
4
+ import { INITIAL_CONFIG } from "../../../stories/args";
5
+ const meta = {
6
+ component: ToggleButtonGroup,
7
+ decorators: [
8
+ (Story) => (_jsx(ConfigProvider, { config: INITIAL_CONFIG, children: _jsx(Story, {}) })),
9
+ ],
10
+ };
11
+ export default meta;
12
+ export const DEFAULT = {};
@@ -0,0 +1,6 @@
1
+ import { JSX } from "react";
2
+ /**
3
+ * ToggleButtonGroup component for navigating between ResearchView and ExploreView.
4
+ * @returns ToggleButtonGroup JSX element, or null if routes are not configured.
5
+ */
6
+ export declare const ToggleButtonGroup: () => JSX.Element | null;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ToggleButton } from "@mui/material";
3
+ import { StyledBox, StyledToggleButtonGroup } from "./toggleButtonGroup.styles";
4
+ import Link from "next/link";
5
+ import { useAiRoutes } from "../../../../../hooks/ai/useAiRoutes/hook";
6
+ import { Beta } from "../../../../../components/common/Chip/components/Beta/beta";
7
+ /**
8
+ * ToggleButtonGroup component for navigating between ResearchView and ExploreView.
9
+ * @returns ToggleButtonGroup JSX element, or null if routes are not configured.
10
+ */
11
+ export const ToggleButtonGroup = () => {
12
+ const { routes } = useAiRoutes() || {};
13
+ if (!routes)
14
+ return null;
15
+ return (_jsx(StyledBox, { children: _jsxs(StyledToggleButtonGroup, { exclusive: true, children: [_jsxs(ToggleButton, { component: Link, href: routes.research, selected: true, value: "research", children: ["Research ", _jsx(Beta, {})] }), _jsx(ToggleButton, { component: Link, href: routes.search, value: "search", children: "Search" })] }) }));
16
+ };
@@ -0,0 +1,6 @@
1
+ export declare const StyledBox: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import("@mui/system").BoxOwnProps<import("@mui/material").Theme>> & {
2
+ theme?: import("@emotion/react").Theme;
3
+ }, {}, {}>;
4
+ export declare const StyledToggleButtonGroup: import("@emotion/styled").StyledComponent<import("@mui/material").ToggleButtonGroupProps & {
5
+ theme?: import("@emotion/react").Theme;
6
+ }, {}, {}>;
@@ -0,0 +1,20 @@
1
+ import styled from "@emotion/styled";
2
+ import { Box, ToggleButtonGroup } from "@mui/material";
3
+ import { PALETTE } from "../../../../../styles/common/constants/palette";
4
+ export const StyledBox = styled(Box) `
5
+ background-color: ${PALETTE.COMMON_WHITE};
6
+ margin-bottom: -16px;
7
+ padding: 16px;
8
+ z-index: 1;
9
+ `;
10
+ export const StyledToggleButtonGroup = styled(ToggleButtonGroup) `
11
+ .MuiToggleButton-root {
12
+ gap: 4px;
13
+ padding: 6px 16px;
14
+ text-transform: none;
15
+
16
+ &.Mui-disabled {
17
+ color: ${PALETTE.INK_LIGHT};
18
+ }
19
+ }
20
+ `;
@@ -0,0 +1,4 @@
1
+ import { SiteConfig } from "../../../../config/entities";
2
+ import { InitialArgs } from "../../state/initializer/types";
3
+ export declare const INITIAL_CONFIG: SiteConfig;
4
+ export declare const INITIAL_ARGS: NonNullable<InitialArgs>;
@@ -0,0 +1,30 @@
1
+ import { SUGGESTION_VARIANT } from "../../state/types";
2
+ export const INITIAL_CONFIG = {
3
+ ai: {
4
+ enabled: true,
5
+ routes: { research: "/research", search: "/search" },
6
+ url: "https://findable-chat/api/chat",
7
+ },
8
+ redirectRootToPath: "",
9
+ };
10
+ export const INITIAL_ARGS = {
11
+ inputPlaceholder: "Ask about datasets or variables",
12
+ suggestions: [
13
+ {
14
+ label: "GLP-1 effect + smoking in T2D",
15
+ query: "I'm studying whether smoking modifies the effect of GLP-1 agonists on glycemic control in T2D patients",
16
+ variant: SUGGESTION_VARIANT.CHIP,
17
+ },
18
+ {
19
+ label: "WGS for cardiovascular outcomes",
20
+ query: "I'm interested in whole genome sequencing data for cardiovascular outcomes",
21
+ variant: SUGGESTION_VARIANT.CHIP,
22
+ },
23
+ {
24
+ label: "RNA-Seq in pancreatic cancer",
25
+ query: "I'm interested in RNA-Seq data for pancreatic cancer",
26
+ variant: SUGGESTION_VARIANT.CHIP,
27
+ },
28
+ ],
29
+ text: "Hello! I can help you find datasets across 2,944 studies from AnVIL, BDC, CRDC, and KFDRC. Describe your research question and I'll build a structured plan and find matching data.",
30
+ };
@@ -0,0 +1,6 @@
1
+ import { type Meta, type StoryObj } from "@storybook/nextjs-vite";
2
+ import { Assistant } from "../assistant";
3
+ declare const meta: Meta<typeof Assistant>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;