@databiosphere/findable-ui 48.1.0 → 49.1.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 (355) hide show
  1. package/.github/workflows/release-please.yml +0 -22
  2. package/.release-please-manifest.json +1 -1
  3. package/CHANGELOG.md +39 -0
  4. package/backend/main.py +0 -1
  5. package/lib/common/ai/config/types.d.ts +22 -0
  6. package/lib/common/ai/config/types.js +1 -0
  7. package/lib/common/ai/constants.d.ts +3 -0
  8. package/lib/common/ai/constants.js +3 -0
  9. package/lib/common/categories/config/types.d.ts +2 -1
  10. package/lib/common/chart/sort/constants.d.ts +5 -0
  11. package/lib/common/chart/sort/constants.js +9 -0
  12. package/lib/common/chart/sort/types.d.ts +16 -0
  13. package/lib/common/chart/sort/types.js +8 -0
  14. package/lib/common/chart/sort/utils.d.ts +7 -0
  15. package/lib/common/chart/sort/utils.js +19 -0
  16. package/lib/common/chart/types.d.ts +5 -0
  17. package/lib/common/chart/types.js +1 -0
  18. package/lib/common/entities.d.ts +2 -1
  19. package/lib/components/Export/components/DownloadCurlCommand/downloadCurlCommand.d.ts +0 -2
  20. package/lib/components/Export/components/ExportToTerra/exportToTerra.d.ts +0 -2
  21. package/lib/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/manifestDownloadEntity.d.ts +0 -2
  22. package/lib/components/Export/components/ManifestDownload/manifestDownload.d.ts +0 -2
  23. package/lib/components/Filter/components/FilterLabel/filterLabel.js +1 -1
  24. package/lib/components/Filter/components/FilterLabel/filterLabel.stories.d.ts +3 -0
  25. package/lib/components/Filter/components/FilterLabel/filterLabel.stories.js +5 -0
  26. package/lib/components/Filter/components/Filters/stories/constants.js +21 -1
  27. package/lib/components/Filter/components/SearchAllFilters/searchAllFilters.styles.js +2 -0
  28. package/lib/components/Filter/components/adapters/tanstack/ColumnFiltersAdapter/utils.js +1 -1
  29. package/lib/components/Index/components/EntityView/components/views/ChartView/chartView.js +2 -1
  30. package/lib/components/Index/components/EntityView/components/views/ChartView/components/Chart/hooks/UsePlotOptions/hook.js +2 -7
  31. package/lib/components/Index/components/EntityView/components/views/ChartView/components/Chart/stories/args.js +12 -12
  32. package/lib/components/Index/components/EntityView/components/views/ChartView/stories/args.js +3 -3
  33. package/lib/components/Index/components/EntityView/components/views/ChartView/utils.js +1 -1
  34. package/lib/components/Layout/components/Sidebar/components/SidebarTools/sidebarTools.styles.d.ts +4 -0
  35. package/lib/components/Layout/components/Sidebar/components/SidebarTools/sidebarTools.styles.js +4 -0
  36. package/lib/components/common/Chip/components/Beta/beta.d.ts +10 -0
  37. package/lib/components/common/Chip/components/Beta/beta.js +12 -0
  38. package/lib/components/common/Chip/components/Beta/beta.styles.d.ts +3 -0
  39. package/lib/components/common/Chip/components/Beta/beta.styles.js +14 -0
  40. package/lib/components/common/Chip/components/Beta/stories/beta.stories.d.ts +6 -0
  41. package/lib/components/common/Chip/components/Beta/stories/beta.stories.js +6 -0
  42. package/lib/components/common/CustomIcon/components/UpArrowIcon/upArrowIcon.d.ts +6 -0
  43. package/lib/components/common/CustomIcon/components/UpArrowIcon/upArrowIcon.js +8 -0
  44. package/lib/components/common/Tabs/tabs.js +1 -1
  45. package/lib/components/common/ToggleButtonGroup/provider/context.d.ts +2 -0
  46. package/lib/components/common/ToggleButtonGroup/provider/context.js +5 -0
  47. package/lib/components/common/ToggleButtonGroup/provider/hook.d.ts +7 -0
  48. package/lib/components/common/ToggleButtonGroup/provider/hook.js +9 -0
  49. package/lib/components/common/ToggleButtonGroup/provider/provider.d.ts +12 -0
  50. package/lib/components/common/ToggleButtonGroup/provider/provider.js +22 -0
  51. package/lib/components/common/ToggleButtonGroup/provider/types.d.ts +9 -0
  52. package/lib/components/common/ToggleButtonGroup/provider/types.js +1 -0
  53. package/lib/config/entities.d.ts +2 -0
  54. package/lib/hooks/ai/useAiRoutes/hook.d.ts +6 -0
  55. package/lib/hooks/ai/useAiRoutes/hook.js +18 -0
  56. package/lib/hooks/useCategoryFilter.js +1 -1
  57. package/lib/hooks/useFileManifest/common/entities.d.ts +0 -9
  58. package/lib/hooks/useFileManifest/common/entities.js +1 -9
  59. package/lib/styles/common/mui/drawer.d.ts +9 -0
  60. package/lib/styles/common/mui/drawer.js +15 -0
  61. package/lib/styles/common/mui/inputBase.d.ts +13 -0
  62. package/lib/styles/common/mui/inputBase.js +25 -0
  63. package/lib/styles/common/mui/stack.d.ts +11 -0
  64. package/lib/styles/common/mui/stack.js +22 -0
  65. package/lib/tests/testIds.d.ts +3 -0
  66. package/lib/tests/testIds.js +3 -0
  67. package/lib/views/EntityDetailView/entityDetailView.js +2 -2
  68. package/lib/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.d.ts +7 -0
  69. package/lib/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.js +18 -0
  70. package/lib/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.styles.d.ts +6 -0
  71. package/lib/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.styles.js +23 -0
  72. package/lib/views/ExploreView/entityList/filters/filters.styles.d.ts +7 -0
  73. package/lib/views/ExploreView/entityList/filters/filters.styles.js +17 -0
  74. package/lib/views/ExploreView/exploreView.js +3 -2
  75. package/lib/views/ResearchView/adapter/useAdapter.d.ts +6 -0
  76. package/lib/views/ResearchView/adapter/useAdapter.js +15 -0
  77. package/lib/views/ResearchView/assistant/assistant.d.ts +6 -0
  78. package/lib/views/ResearchView/assistant/assistant.js +18 -0
  79. package/lib/views/ResearchView/assistant/components/Drawer/drawer.d.ts +9 -0
  80. package/lib/views/ResearchView/assistant/components/Drawer/drawer.js +15 -0
  81. package/lib/views/ResearchView/assistant/components/Drawer/drawer.styles.d.ts +4 -0
  82. package/lib/views/ResearchView/assistant/components/Drawer/drawer.styles.js +21 -0
  83. package/lib/views/ResearchView/assistant/components/Drawer/types.d.ts +4 -0
  84. package/lib/views/ResearchView/assistant/components/Drawer/types.js +1 -0
  85. package/lib/views/ResearchView/assistant/components/Form/constants.d.ts +3 -0
  86. package/lib/views/ResearchView/assistant/components/Form/constants.js +3 -0
  87. package/lib/views/ResearchView/assistant/components/Form/form.d.ts +12 -0
  88. package/lib/views/ResearchView/assistant/components/Form/form.js +40 -0
  89. package/lib/views/ResearchView/assistant/components/Form/form.styles.d.ts +4 -0
  90. package/lib/views/ResearchView/assistant/components/Form/form.styles.js +7 -0
  91. package/lib/views/ResearchView/assistant/components/Form/types.d.ts +4 -0
  92. package/lib/views/ResearchView/assistant/components/Form/types.js +1 -0
  93. package/lib/views/ResearchView/assistant/components/Form/utils.d.ts +16 -0
  94. package/lib/views/ResearchView/assistant/components/Form/utils.js +41 -0
  95. package/lib/views/ResearchView/assistant/components/Input/constants.d.ts +2 -0
  96. package/lib/views/ResearchView/assistant/components/Input/constants.js +14 -0
  97. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/constants.d.ts +7 -0
  98. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/constants.js +7 -0
  99. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/hook.d.ts +6 -0
  100. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/hook.js +32 -0
  101. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/types.d.ts +8 -0
  102. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/types.js +1 -0
  103. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/utils.d.ts +32 -0
  104. package/lib/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/utils.js +74 -0
  105. package/lib/views/ResearchView/assistant/components/Input/input.d.ts +9 -0
  106. package/lib/views/ResearchView/assistant/components/Input/input.js +19 -0
  107. package/lib/views/ResearchView/assistant/components/Input/input.styles.d.ts +8 -0
  108. package/lib/views/ResearchView/assistant/components/Input/input.styles.js +19 -0
  109. package/lib/views/ResearchView/assistant/components/Input/stories/input.stories.d.ts +6 -0
  110. package/lib/views/ResearchView/assistant/components/Input/stories/input.stories.js +11 -0
  111. package/lib/views/ResearchView/assistant/components/Input/types.d.ts +2 -0
  112. package/lib/views/ResearchView/assistant/components/Input/types.js +1 -0
  113. package/lib/views/ResearchView/assistant/components/Input/utils.d.ts +9 -0
  114. package/lib/views/ResearchView/assistant/components/Input/utils.js +25 -0
  115. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/assistantMessage.d.ts +9 -0
  116. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/assistantMessage.js +15 -0
  117. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/types.d.ts +4 -0
  118. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/types.js +1 -0
  119. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/utils.d.ts +13 -0
  120. package/lib/views/ResearchView/assistant/components/Messages/components/AssistantMessage/utils.js +25 -0
  121. package/lib/views/ResearchView/assistant/components/Messages/components/ErrorMessage/errorMessage.d.ts +9 -0
  122. package/lib/views/ResearchView/assistant/components/Messages/components/ErrorMessage/errorMessage.js +12 -0
  123. package/lib/views/ResearchView/assistant/components/Messages/components/ErrorMessage/types.d.ts +4 -0
  124. package/lib/views/ResearchView/assistant/components/Messages/components/ErrorMessage/types.js +1 -0
  125. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.d.ts +3 -0
  126. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.js +10 -0
  127. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.styles.d.ts +3 -0
  128. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.styles.js +26 -0
  129. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/types.d.ts +5 -0
  130. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/types.js +1 -0
  131. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/promptMessage.d.ts +10 -0
  132. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/promptMessage.js +14 -0
  133. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/types.d.ts +5 -0
  134. package/lib/views/ResearchView/assistant/components/Messages/components/PromptMessage/types.js +1 -0
  135. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/types.d.ts +4 -0
  136. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/types.js +1 -0
  137. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/useMessage.styles.d.ts +5 -0
  138. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/useMessage.styles.js +10 -0
  139. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/userMessage.d.ts +9 -0
  140. package/lib/views/ResearchView/assistant/components/Messages/components/UserMessage/userMessage.js +13 -0
  141. package/lib/views/ResearchView/assistant/components/Messages/hooks/UseScroll/hook.d.ts +7 -0
  142. package/lib/views/ResearchView/assistant/components/Messages/hooks/UseScroll/hook.js +17 -0
  143. package/lib/views/ResearchView/assistant/components/Messages/messages.d.ts +9 -0
  144. package/lib/views/ResearchView/assistant/components/Messages/messages.js +16 -0
  145. package/lib/views/ResearchView/assistant/components/Messages/messages.styles.d.ts +3 -0
  146. package/lib/views/ResearchView/assistant/components/Messages/messages.styles.js +9 -0
  147. package/lib/views/ResearchView/assistant/components/Messages/selector/messageSelector.d.ts +17 -0
  148. package/lib/views/ResearchView/assistant/components/Messages/selector/messageSelector.js +32 -0
  149. package/lib/views/ResearchView/assistant/components/Messages/selector/types.d.ts +5 -0
  150. package/lib/views/ResearchView/assistant/components/Messages/selector/types.js +1 -0
  151. package/lib/views/ResearchView/assistant/components/Messages/stories/args.d.ts +3 -0
  152. package/lib/views/ResearchView/assistant/components/Messages/stories/args.js +109 -0
  153. package/lib/views/ResearchView/assistant/components/Messages/stories/messages.stories.d.ts +6 -0
  154. package/lib/views/ResearchView/assistant/components/Messages/stories/messages.stories.js +14 -0
  155. package/lib/views/ResearchView/assistant/components/Messages/types.d.ts +4 -0
  156. package/lib/views/ResearchView/assistant/components/Messages/types.js +1 -0
  157. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/stories/toggleButtonGroup.stories.d.ts +6 -0
  158. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/stories/toggleButtonGroup.stories.js +12 -0
  159. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.d.ts +7 -0
  160. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.js +17 -0
  161. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.styles.d.ts +6 -0
  162. package/lib/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.styles.js +20 -0
  163. package/lib/views/ResearchView/assistant/stories/args.d.ts +4 -0
  164. package/lib/views/ResearchView/assistant/stories/args.js +30 -0
  165. package/lib/views/ResearchView/assistant/stories/assistant.stories.d.ts +6 -0
  166. package/lib/views/ResearchView/assistant/stories/assistant.stories.js +23 -0
  167. package/lib/views/ResearchView/query/constants.d.ts +5 -0
  168. package/lib/views/ResearchView/query/constants.js +5 -0
  169. package/lib/views/ResearchView/query/fetch.d.ts +17 -0
  170. package/lib/views/ResearchView/query/fetch.js +44 -0
  171. package/lib/views/ResearchView/query/types.d.ts +31 -0
  172. package/lib/views/ResearchView/query/types.js +1 -0
  173. package/lib/views/ResearchView/query/useQuery.d.ts +7 -0
  174. package/lib/views/ResearchView/query/useQuery.js +44 -0
  175. package/lib/views/ResearchView/researchView.d.ts +10 -0
  176. package/lib/views/ResearchView/researchView.js +13 -0
  177. package/lib/views/ResearchView/state/actions/setError/action.d.ts +10 -0
  178. package/lib/views/ResearchView/state/actions/setError/action.js +17 -0
  179. package/lib/views/ResearchView/state/actions/setError/dispatch.d.ts +7 -0
  180. package/lib/views/ResearchView/state/actions/setError/dispatch.js +12 -0
  181. package/lib/views/ResearchView/state/actions/setError/types.d.ts +14 -0
  182. package/lib/views/ResearchView/state/actions/setError/types.js +1 -0
  183. package/lib/views/ResearchView/state/actions/setMessage/action.d.ts +10 -0
  184. package/lib/views/ResearchView/state/actions/setMessage/action.js +21 -0
  185. package/lib/views/ResearchView/state/actions/setMessage/dispatch.d.ts +7 -0
  186. package/lib/views/ResearchView/state/actions/setMessage/dispatch.js +12 -0
  187. package/lib/views/ResearchView/state/actions/setMessage/types.d.ts +15 -0
  188. package/lib/views/ResearchView/state/actions/setMessage/types.js +1 -0
  189. package/lib/views/ResearchView/state/actions/setQuery/action.d.ts +10 -0
  190. package/lib/views/ResearchView/state/actions/setQuery/action.js +17 -0
  191. package/lib/views/ResearchView/state/actions/setQuery/dispatch.d.ts +7 -0
  192. package/lib/views/ResearchView/state/actions/setQuery/dispatch.js +12 -0
  193. package/lib/views/ResearchView/state/actions/setQuery/types.d.ts +14 -0
  194. package/lib/views/ResearchView/state/actions/setQuery/types.js +1 -0
  195. package/lib/views/ResearchView/state/actions/setStatus/action.d.ts +10 -0
  196. package/lib/views/ResearchView/state/actions/setStatus/action.js +13 -0
  197. package/lib/views/ResearchView/state/actions/setStatus/dispatch.d.ts +7 -0
  198. package/lib/views/ResearchView/state/actions/setStatus/dispatch.js +12 -0
  199. package/lib/views/ResearchView/state/actions/setStatus/types.d.ts +14 -0
  200. package/lib/views/ResearchView/state/actions/setStatus/types.js +1 -0
  201. package/lib/views/ResearchView/state/actions/types.d.ts +17 -0
  202. package/lib/views/ResearchView/state/actions/types.js +10 -0
  203. package/lib/views/ResearchView/state/constants.d.ts +5 -0
  204. package/lib/views/ResearchView/state/constants.js +7 -0
  205. package/lib/views/ResearchView/state/context.d.ts +5 -0
  206. package/lib/views/ResearchView/state/context.js +9 -0
  207. package/lib/views/ResearchView/state/guards/guards.d.ts +33 -0
  208. package/lib/views/ResearchView/state/guards/guards.js +41 -0
  209. package/lib/views/ResearchView/state/hooks/UseChatDispatch/hook.d.ts +6 -0
  210. package/lib/views/ResearchView/state/hooks/UseChatDispatch/hook.js +26 -0
  211. package/lib/views/ResearchView/state/hooks/UseChatDispatch/types.d.ts +10 -0
  212. package/lib/views/ResearchView/state/hooks/UseChatDispatch/types.js +1 -0
  213. package/lib/views/ResearchView/state/hooks/UseChatReducer/hook.d.ts +8 -0
  214. package/lib/views/ResearchView/state/hooks/UseChatReducer/hook.js +12 -0
  215. package/lib/views/ResearchView/state/hooks/UseChatState/hook.d.ts +7 -0
  216. package/lib/views/ResearchView/state/hooks/UseChatState/hook.js +11 -0
  217. package/lib/views/ResearchView/state/initializer/initializer.d.ts +8 -0
  218. package/lib/views/ResearchView/state/initializer/initializer.js +22 -0
  219. package/lib/views/ResearchView/state/initializer/types.d.ts +2 -0
  220. package/lib/views/ResearchView/state/initializer/types.js +1 -0
  221. package/lib/views/ResearchView/state/provider.d.ts +16 -0
  222. package/lib/views/ResearchView/state/provider.js +17 -0
  223. package/lib/views/ResearchView/state/reducer.d.ts +10 -0
  224. package/lib/views/ResearchView/state/reducer.js +32 -0
  225. package/lib/views/ResearchView/state/types.d.ts +125 -0
  226. package/lib/views/ResearchView/state/types.js +22 -0
  227. package/package.json +1 -1
  228. package/src/common/ai/config/types.ts +25 -0
  229. package/src/common/ai/constants.ts +3 -0
  230. package/src/common/categories/config/types.ts +2 -1
  231. package/src/common/chart/sort/constants.ts +13 -0
  232. package/src/common/chart/sort/types.ts +22 -0
  233. package/src/common/chart/sort/utils.ts +22 -0
  234. package/src/common/chart/types.ts +6 -0
  235. package/src/common/entities.ts +2 -1
  236. package/src/components/Export/components/DownloadCurlCommand/downloadCurlCommand.tsx +0 -2
  237. package/src/components/Export/components/ExportToTerra/exportToTerra.tsx +0 -2
  238. package/src/components/Export/components/ManifestDownload/components/ManifestDownloadEntity/manifestDownloadEntity.tsx +0 -2
  239. package/src/components/Export/components/ManifestDownload/manifestDownload.tsx +0 -2
  240. package/src/components/Filter/components/FilterLabel/filterLabel.stories.tsx +6 -0
  241. package/src/components/Filter/components/FilterLabel/filterLabel.tsx +6 -1
  242. package/src/components/Filter/components/Filters/stories/constants.ts +25 -1
  243. package/src/components/Filter/components/SearchAllFilters/searchAllFilters.styles.ts +2 -0
  244. package/src/components/Filter/components/adapters/tanstack/ColumnFiltersAdapter/utils.ts +1 -1
  245. package/src/components/Index/components/EntityView/components/views/ChartView/chartView.tsx +8 -2
  246. package/src/components/Index/components/EntityView/components/views/ChartView/components/Chart/hooks/UsePlotOptions/hook.ts +2 -7
  247. package/src/components/Index/components/EntityView/components/views/ChartView/components/Chart/stories/args.ts +12 -12
  248. package/src/components/Index/components/EntityView/components/views/ChartView/stories/args.ts +3 -3
  249. package/src/components/Index/components/EntityView/components/views/ChartView/utils.ts +1 -1
  250. package/src/components/Layout/components/Sidebar/components/SidebarTools/sidebarTools.styles.ts +4 -0
  251. package/src/components/common/Chip/components/Beta/beta.styles.ts +15 -0
  252. package/src/components/common/Chip/components/Beta/beta.tsx +25 -0
  253. package/src/components/common/Chip/components/Beta/stories/beta.stories.tsx +12 -0
  254. package/src/components/common/CustomIcon/components/UpArrowIcon/upArrowIcon.tsx +21 -0
  255. package/src/components/common/Tabs/tabs.tsx +5 -1
  256. package/src/components/common/ToggleButtonGroup/provider/context.ts +9 -0
  257. package/src/components/common/ToggleButtonGroup/provider/hook.ts +16 -0
  258. package/src/components/common/ToggleButtonGroup/provider/provider.tsx +37 -0
  259. package/src/components/common/ToggleButtonGroup/provider/types.ts +17 -0
  260. package/src/config/entities.ts +2 -0
  261. package/src/hooks/ai/useAiRoutes/hook.ts +22 -0
  262. package/src/hooks/useCategoryFilter.ts +1 -1
  263. package/src/hooks/useFileManifest/common/entities.ts +0 -11
  264. package/src/styles/common/mui/drawer.ts +24 -0
  265. package/src/styles/common/mui/inputBase.ts +38 -0
  266. package/src/styles/common/mui/stack.ts +33 -0
  267. package/src/tests/testIds.ts +3 -0
  268. package/src/views/EntityDetailView/entityDetailView.tsx +1 -3
  269. package/src/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.styles.ts +25 -0
  270. package/src/views/ExploreView/entityList/filters/components/ToggleButtonGroup/toggleButtonGroup.tsx +31 -0
  271. package/src/views/ExploreView/entityList/filters/filters.styles.ts +19 -0
  272. package/src/views/ExploreView/exploreView.tsx +16 -12
  273. package/src/views/ResearchView/adapter/useAdapter.ts +19 -0
  274. package/src/views/ResearchView/assistant/assistant.tsx +30 -0
  275. package/src/views/ResearchView/assistant/components/Drawer/drawer.styles.ts +24 -0
  276. package/src/views/ResearchView/assistant/components/Drawer/drawer.tsx +26 -0
  277. package/src/views/ResearchView/assistant/components/Drawer/types.ts +5 -0
  278. package/src/views/ResearchView/assistant/components/Form/constants.ts +3 -0
  279. package/src/views/ResearchView/assistant/components/Form/form.styles.ts +8 -0
  280. package/src/views/ResearchView/assistant/components/Form/form.tsx +55 -0
  281. package/src/views/ResearchView/assistant/components/Form/types.ts +11 -0
  282. package/src/views/ResearchView/assistant/components/Form/utils.ts +51 -0
  283. package/src/views/ResearchView/assistant/components/Input/constants.ts +16 -0
  284. package/src/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/constants.ts +7 -0
  285. package/src/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/hook.ts +45 -0
  286. package/src/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/types.ts +10 -0
  287. package/src/views/ResearchView/assistant/components/Input/hooks/UseKeyShortCuts/utils.ts +93 -0
  288. package/src/views/ResearchView/assistant/components/Input/input.styles.ts +21 -0
  289. package/src/views/ResearchView/assistant/components/Input/input.tsx +37 -0
  290. package/src/views/ResearchView/assistant/components/Input/stories/input.stories.tsx +21 -0
  291. package/src/views/ResearchView/assistant/components/Input/types.ts +3 -0
  292. package/src/views/ResearchView/assistant/components/Input/utils.ts +34 -0
  293. package/src/views/ResearchView/assistant/components/Messages/components/AssistantMessage/assistantMessage.tsx +49 -0
  294. package/src/views/ResearchView/assistant/components/Messages/components/AssistantMessage/types.ts +5 -0
  295. package/src/views/ResearchView/assistant/components/Messages/components/AssistantMessage/utils.ts +31 -0
  296. package/src/views/ResearchView/assistant/components/Messages/components/ErrorMessage/errorMessage.tsx +21 -0
  297. package/src/views/ResearchView/assistant/components/Messages/components/ErrorMessage/types.ts +5 -0
  298. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.styles.ts +27 -0
  299. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/chips.tsx +31 -0
  300. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/components/Chips/types.ts +6 -0
  301. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/promptMessage.tsx +26 -0
  302. package/src/views/ResearchView/assistant/components/Messages/components/PromptMessage/types.ts +6 -0
  303. package/src/views/ResearchView/assistant/components/Messages/components/UserMessage/types.ts +5 -0
  304. package/src/views/ResearchView/assistant/components/Messages/components/UserMessage/useMessage.styles.ts +11 -0
  305. package/src/views/ResearchView/assistant/components/Messages/components/UserMessage/userMessage.tsx +21 -0
  306. package/src/views/ResearchView/assistant/components/Messages/hooks/UseScroll/hook.ts +22 -0
  307. package/src/views/ResearchView/assistant/components/Messages/messages.styles.ts +10 -0
  308. package/src/views/ResearchView/assistant/components/Messages/messages.tsx +29 -0
  309. package/src/views/ResearchView/assistant/components/Messages/selector/messageSelector.tsx +37 -0
  310. package/src/views/ResearchView/assistant/components/Messages/selector/types.ts +6 -0
  311. package/src/views/ResearchView/assistant/components/Messages/stories/args.ts +115 -0
  312. package/src/views/ResearchView/assistant/components/Messages/stories/messages.stories.tsx +24 -0
  313. package/src/views/ResearchView/assistant/components/Messages/types.ts +5 -0
  314. package/src/views/ResearchView/assistant/components/ToggleButtonGroup/stories/toggleButtonGroup.stories.tsx +22 -0
  315. package/src/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.styles.ts +22 -0
  316. package/src/views/ResearchView/assistant/components/ToggleButtonGroup/toggleButtonGroup.tsx +30 -0
  317. package/src/views/ResearchView/assistant/stories/args.ts +36 -0
  318. package/src/views/ResearchView/assistant/stories/assistant.stories.tsx +39 -0
  319. package/src/views/ResearchView/query/constants.ts +5 -0
  320. package/src/views/ResearchView/query/fetch.ts +58 -0
  321. package/src/views/ResearchView/query/types.ts +37 -0
  322. package/src/views/ResearchView/query/useQuery.ts +60 -0
  323. package/src/views/ResearchView/researchView.tsx +19 -0
  324. package/src/views/ResearchView/state/actions/setError/action.ts +22 -0
  325. package/src/views/ResearchView/state/actions/setError/dispatch.ts +14 -0
  326. package/src/views/ResearchView/state/actions/setError/types.ts +16 -0
  327. package/src/views/ResearchView/state/actions/setMessage/action.ts +26 -0
  328. package/src/views/ResearchView/state/actions/setMessage/dispatch.ts +14 -0
  329. package/src/views/ResearchView/state/actions/setMessage/types.ts +19 -0
  330. package/src/views/ResearchView/state/actions/setQuery/action.ts +22 -0
  331. package/src/views/ResearchView/state/actions/setQuery/dispatch.ts +14 -0
  332. package/src/views/ResearchView/state/actions/setQuery/types.ts +16 -0
  333. package/src/views/ResearchView/state/actions/setStatus/action.ts +19 -0
  334. package/src/views/ResearchView/state/actions/setStatus/dispatch.ts +14 -0
  335. package/src/views/ResearchView/state/actions/setStatus/types.ts +16 -0
  336. package/src/views/ResearchView/state/actions/types.ts +23 -0
  337. package/src/views/ResearchView/state/constants.ts +9 -0
  338. package/src/views/ResearchView/state/context.ts +11 -0
  339. package/src/views/ResearchView/state/guards/guards.ts +58 -0
  340. package/src/views/ResearchView/state/hooks/UseChatDispatch/hook.ts +46 -0
  341. package/src/views/ResearchView/state/hooks/UseChatDispatch/types.ts +11 -0
  342. package/src/views/ResearchView/state/hooks/UseChatReducer/hook.ts +15 -0
  343. package/src/views/ResearchView/state/hooks/UseChatState/hook.ts +14 -0
  344. package/src/views/ResearchView/state/initializer/initializer.ts +23 -0
  345. package/src/views/ResearchView/state/initializer/types.ts +3 -0
  346. package/src/views/ResearchView/state/provider.tsx +27 -0
  347. package/src/views/ResearchView/state/reducer.ts +34 -0
  348. package/src/views/ResearchView/state/types.ts +149 -0
  349. package/tests/chartSortUtils.test.ts +119 -0
  350. package/tests/research.assistantMessageUtils.test.ts +149 -0
  351. package/tests/research.chatState.test.ts +463 -0
  352. package/tests/research.fetchResponse.test.ts +164 -0
  353. package/tests/research.useKeyShortCuts.test.ts +254 -0
  354. package/tests/research.useQuery.test.ts +165 -0
  355. package/tests/toggleButtonGroupProvider.test.tsx +125 -0
@@ -0,0 +1,25 @@
1
+ import { ChipProps } from "@mui/material";
2
+ import { JSX } from "react";
3
+ import { CHIP_PROPS } from "../../../../../styles/common/mui/chip";
4
+ import { BaseComponentProps } from "../../../../types";
5
+ import { StyledChip } from "./beta.styles";
6
+
7
+ /**
8
+ * Beta chip component to indicate features that are in beta.
9
+ * @param props - Component props.
10
+ * @param props.className - Classname.
11
+ * @returns Beta chip JSX element.
12
+ */
13
+ export const Beta = ({
14
+ className,
15
+ ...props
16
+ }: BaseComponentProps & ChipProps): JSX.Element => {
17
+ return (
18
+ <StyledChip
19
+ className={className}
20
+ label="Beta"
21
+ size={CHIP_PROPS.SIZE.SMALL}
22
+ {...props}
23
+ />
24
+ );
25
+ };
@@ -0,0 +1,12 @@
1
+ import type { Meta, StoryObj } from "@storybook/nextjs-vite";
2
+ import { Beta } from "../beta";
3
+
4
+ const meta: Meta<typeof Beta> = {
5
+ component: Beta,
6
+ };
7
+
8
+ export default meta;
9
+
10
+ type Story = StoryObj<typeof meta>;
11
+
12
+ export const DEFAULT: Story = {};
@@ -0,0 +1,21 @@
1
+ import { SvgIcon, SvgIconProps } from "@mui/material";
2
+ import { JSX } from "react";
3
+
4
+ /**
5
+ * Custom up arrow icon.
6
+ */
7
+
8
+ export const UpArrowIcon = ({
9
+ fontSize = "xsmall",
10
+ viewBox = "0 0 18 18",
11
+ ...props /* SvgIconProps */
12
+ }: SvgIconProps): JSX.Element => {
13
+ return (
14
+ <SvgIcon fontSize={fontSize} viewBox={viewBox} {...props}>
15
+ <path
16
+ d="M8.24985 6.60005L6.07485 8.77505C5.93735 8.91255 5.76235 8.9813 5.54985 8.9813C5.33735 8.9813 5.16235 8.91255 5.02485 8.77505C4.88735 8.63755 4.8186 8.46255 4.8186 8.25005C4.8186 8.03755 4.88735 7.86255 5.02485 7.72505L8.47485 4.27505C8.62485 4.12505 8.79985 4.05005 8.99985 4.05005C9.19985 4.05005 9.37485 4.12505 9.52485 4.27505L12.9749 7.72505C13.1124 7.86255 13.1811 8.03755 13.1811 8.25005C13.1811 8.46255 13.1124 8.63755 12.9749 8.77505C12.8374 8.91255 12.6624 8.9813 12.4499 8.9813C12.2374 8.9813 12.0624 8.91255 11.9249 8.77505L9.74985 6.60005V12.75C9.74985 12.9625 9.67798 13.1407 9.53423 13.2844C9.39048 13.4282 9.21235 13.5 8.99985 13.5C8.78735 13.5 8.60923 13.4282 8.46548 13.2844C8.32173 13.1407 8.24985 12.9625 8.24985 12.75V6.60005Z"
17
+ fill="currentColor"
18
+ />
19
+ </SvgIcon>
20
+ );
21
+ };
@@ -81,7 +81,11 @@ function buildTabLabel(
81
81
  annotation?: DataDictionaryAnnotation,
82
82
  ): ReactElement {
83
83
  return (
84
- <Tooltip description={annotation?.description} title={annotation?.label}>
84
+ <Tooltip
85
+ description={annotation?.description}
86
+ enterDelay={300}
87
+ title={annotation?.label}
88
+ >
85
89
  <span>{count ? `${label} (${count})` : label}</span>
86
90
  </Tooltip>
87
91
  );
@@ -0,0 +1,9 @@
1
+ import { createContext } from "react";
2
+ import { ToggleButtonGroupContextProps } from "./types";
3
+
4
+ export const ToggleButtonGroupContext = createContext<
5
+ ToggleButtonGroupContextProps<unknown>
6
+ >({
7
+ onChange: undefined,
8
+ value: null,
9
+ });
@@ -0,0 +1,16 @@
1
+ import { ToggleButtonGroupProps } from "@mui/material";
2
+ import { useContext } from "react";
3
+ import { ToggleButtonGroupContext } from "./context";
4
+ import { ToggleButtonGroupContextProps } from "./types";
5
+
6
+ /**
7
+ * Returns the toggle button group context.
8
+ * @returns toggle button group context.
9
+ */
10
+ export const useToggleButtonGroup = <
11
+ T extends ToggleButtonGroupProps["value"],
12
+ >(): ToggleButtonGroupContextProps<T> => {
13
+ return useContext(
14
+ ToggleButtonGroupContext,
15
+ ) as ToggleButtonGroupContextProps<T>;
16
+ };
@@ -0,0 +1,37 @@
1
+ import { ToggleButtonGroupProps } from "@mui/material";
2
+ import { JSX, MouseEvent, useCallback, useState } from "react";
3
+ import { ToggleButtonGroupContext } from "./context";
4
+ import { ToggleButtonGroupProviderProps } from "./types";
5
+
6
+ /**
7
+ * ToggleButtonGroup provider component.
8
+ * Manages toggle button group state for child components.
9
+ * @param props - Component props.
10
+ * @param props.children - Child elements to render.
11
+ * @param props.initialValue - Initial value for the toggle button group.
12
+ * @returns ToggleButtonGroup provider component.
13
+ */
14
+ export function ToggleButtonGroupProvider<
15
+ T extends ToggleButtonGroupProps["value"],
16
+ >({
17
+ children,
18
+ initialValue = null,
19
+ }: ToggleButtonGroupProviderProps<T>): JSX.Element {
20
+ const [value, setValue] = useState<T | null>(initialValue);
21
+
22
+ const onChange = useCallback(
23
+ (_: MouseEvent<HTMLElement>, value: T | null) => {
24
+ if (value === null) return;
25
+ setValue(value);
26
+ },
27
+ [],
28
+ );
29
+
30
+ return (
31
+ <ToggleButtonGroupContext.Provider value={{ onChange, value }}>
32
+ {typeof children === "function"
33
+ ? children({ onChange, value })
34
+ : children}
35
+ </ToggleButtonGroupContext.Provider>
36
+ );
37
+ }
@@ -0,0 +1,17 @@
1
+ import { ToggleButtonGroupProps } from "@mui/material";
2
+ import { ReactNode } from "react";
3
+
4
+ export type ToggleButtonGroupContextProps<
5
+ T extends ToggleButtonGroupProps["value"],
6
+ > = Pick<ToggleButtonGroupProps, "onChange"> & {
7
+ value: T | null;
8
+ };
9
+
10
+ export type ToggleButtonGroupProviderProps<
11
+ T extends ToggleButtonGroupProps["value"],
12
+ > = {
13
+ children:
14
+ | ReactNode
15
+ | ((props: ToggleButtonGroupContextProps<T>) => ReactNode);
16
+ initialValue?: T | null;
17
+ };
@@ -27,6 +27,7 @@ import { ProviderId } from "../providers/authentication/common/types";
27
27
  import { ExploreState } from "../providers/exploreState";
28
28
  import { FileManifestState } from "../providers/fileManifestState";
29
29
  import { SystemStatus, SystemStatusResponse } from "../providers/systemStatus";
30
+ import { AiConfig } from "../common/ai/config/types";
30
31
 
31
32
  /**
32
33
  * Interface to define the analytics configuration for a given site.
@@ -364,6 +365,7 @@ interface TrackingConfig {
364
365
  * Interface that will hold the whole configuration for a given site.
365
366
  */
366
367
  export interface SiteConfig {
368
+ ai?: AiConfig;
367
369
  analytics?: AnalyticsConfig;
368
370
  appTitle: string;
369
371
  authentication?: AuthenticationConfig;
@@ -0,0 +1,22 @@
1
+ import { FEATURE_FLAG } from "../../../common/ai/constants";
2
+ import { AiConfig } from "../../../common/ai/config/types";
3
+ import { useConfig } from "../../useConfig";
4
+ import { useFeatureFlag } from "../../useFeatureFlag/useFeatureFlag";
5
+
6
+ /**
7
+ * Returns AI route configuration when the AI feature is enabled.
8
+ * @returns AI routes, or undefined if AI is not configured or enabled.
9
+ */
10
+ export const useAiRoutes = (): Pick<AiConfig, "routes"> | undefined => {
11
+ const flagEnabled = useFeatureFlag(FEATURE_FLAG.CHAT);
12
+ const { config } = useConfig();
13
+ const { ai } = config;
14
+
15
+ if (!ai) return;
16
+
17
+ const { enabled, routes } = ai;
18
+
19
+ if (enabled || flagEnabled) {
20
+ return { routes };
21
+ }
22
+ };
@@ -83,7 +83,7 @@ function buildCategoryView(
83
83
  selectCategoryConfig?.mapSelectCategoryValue || getSelectCategoryValue;
84
84
  return {
85
85
  annotation: selectCategoryConfig?.annotation,
86
- enableChartView: selectCategoryConfig?.enableChartView,
86
+ chart: selectCategoryConfig?.chart,
87
87
  isDisabled: false,
88
88
  key: selectCategory.key,
89
89
  label: getCategoryLabel(selectCategory.key, selectCategoryConfig),
@@ -34,17 +34,6 @@ export interface FileFacet {
34
34
  total: number;
35
35
  }
36
36
 
37
- export enum FILE_MANIFEST_TYPE {
38
- BULK_DOWNLOAD = "BULK_DOWNLOAD",
39
- DOWNLOAD_MANIFEST = "DOWNLOAD_MANIFEST",
40
- ENTITY_BULK_DOWNLOAD = "ENTITY_BULK_DOWNLOAD",
41
- ENTITY_DOWNLOAD_MANIFEST = "ENTITY_DOWNLOAD_MANIFEST",
42
- ENTITY_EXPORT_TO_TERRA = "ENTITY_EXPORT_TO_TERRA",
43
- EXPORT_TO_TERRA = "EXPORT_TO_TERRA",
44
- }
45
-
46
- export type FileManifestType = FILE_MANIFEST_TYPE;
47
-
48
37
  export type SelectedSearchTermsBySearchKey = Map<
49
38
  CategoryKey,
50
39
  Set<CategoryValueKey>
@@ -0,0 +1,24 @@
1
+ import { DrawerProps } from "@mui/material";
2
+
3
+ type DrawerPropsOptions = {
4
+ ANCHOR: typeof ANCHOR;
5
+ VARIANT: typeof VARIANT;
6
+ };
7
+
8
+ const ANCHOR: Record<string, DrawerProps["anchor"]> = {
9
+ BOTTOM: "bottom",
10
+ LEFT: "left",
11
+ RIGHT: "right",
12
+ TOP: "top",
13
+ };
14
+
15
+ const VARIANT: Record<string, DrawerProps["variant"]> = {
16
+ PERMANENT: "permanent",
17
+ PERSISTENT: "persistent",
18
+ TEMPORARY: "temporary",
19
+ };
20
+
21
+ export const DRAWER_PROPS: DrawerPropsOptions = {
22
+ ANCHOR,
23
+ VARIANT,
24
+ };
@@ -0,0 +1,38 @@
1
+ import { InputBaseProps } from "@mui/material";
2
+
3
+ type InputBasePropsOptions = {
4
+ COLOR: typeof COLOR;
5
+ MARGIN: typeof MARGIN;
6
+ SIZE: typeof SIZE;
7
+ TYPE: typeof TYPE;
8
+ };
9
+
10
+ const COLOR: Record<string, InputBaseProps["color"]> = {
11
+ ERROR: "error",
12
+ INFO: "info",
13
+ PRIMARY: "primary",
14
+ SECONDARY: "secondary",
15
+ SUCCESS: "success",
16
+ WARNING: "warning",
17
+ };
18
+
19
+ const MARGIN: Record<string, InputBaseProps["margin"]> = {
20
+ DENSE: "dense",
21
+ NONE: "none",
22
+ };
23
+
24
+ const SIZE: Record<string, InputBaseProps["size"]> = {
25
+ MEDIUM: "medium",
26
+ SMALL: "small",
27
+ };
28
+
29
+ const TYPE: Record<string, InputBaseProps["type"]> = {
30
+ TEXT: "text",
31
+ };
32
+
33
+ export const INPUT_BASE_PROPS: InputBasePropsOptions = {
34
+ COLOR,
35
+ MARGIN,
36
+ SIZE,
37
+ TYPE,
38
+ };
@@ -0,0 +1,33 @@
1
+ import { StackProps } from "@mui/material";
2
+
3
+ type StackPropsOptions = {
4
+ ALIGN_ITEMS: typeof ALIGN_ITEMS;
5
+ DIRECTION: typeof DIRECTION;
6
+ FLEX_WRAP: typeof FLEX_WRAP;
7
+ };
8
+
9
+ const ALIGN_ITEMS: Record<string, StackProps["alignItems"]> = {
10
+ BASELINE: "baseline",
11
+ CENTER: "center",
12
+ FLEX_END: "flex-end",
13
+ FLEX_START: "flex-start",
14
+ STRETCH: "stretch",
15
+ } as const;
16
+
17
+ const DIRECTION: Record<string, StackProps["direction"]> = {
18
+ COLUMN: "column",
19
+ COLUMN_REVERSE: "column-reverse",
20
+ ROW: "row",
21
+ ROW_REVERSE: "row-reverse",
22
+ } as const;
23
+
24
+ const FLEX_WRAP: Record<string, StackProps["flexWrap"]> = {
25
+ WRAP: "wrap",
26
+ WRAP_REVERSE: "wrap-reverse",
27
+ } as const;
28
+
29
+ export const STACK_PROPS: StackPropsOptions = {
30
+ ALIGN_ITEMS,
31
+ DIRECTION,
32
+ FLEX_WRAP,
33
+ };
@@ -12,7 +12,10 @@ export const TEST_IDS = {
12
12
  FILTER_SORT_BUTTON: "filter-sort-button",
13
13
  FILTER_SORT_MENU: "filter-sort-menu",
14
14
  FILTER_TERM: "filter-term",
15
+ RESEARCH_FORM: "research-form",
16
+ RESEARCH_PANEL: "research-panel",
15
17
  SEARCH_ALL_FILTERS: "search-all-filters",
18
+ SEARCH_PANEL: "search-panel",
16
19
  SIDEBAR: "sidebar",
17
20
  SIDEBAR_DRAWER: "sidebar-drawer",
18
21
  TABLE_FIRST_CELL: "table-first-cell",
@@ -79,9 +79,7 @@ export const EntityDetailView = (props: EntityDetailViewProps): JSX.Element => {
79
79
  ) : undefined
80
80
  }
81
81
  Tabs={
82
- hideTabs ? (
83
- <></>
84
- ) : (
82
+ hideTabs ? null : (
85
83
  <Tabs onTabChange={onTabChange} tabs={tabs} value={tabRoute} />
86
84
  )
87
85
  }
@@ -0,0 +1,25 @@
1
+ import styled from "@emotion/styled";
2
+ import { Box, ToggleButtonGroup } from "@mui/material";
3
+ import { bpDownMd } from "../../../../../../styles/common/mixins/breakpoints";
4
+ import { PALETTE } from "../../../../../../styles/common/constants/palette";
5
+
6
+ export const StyledBox = styled(Box)`
7
+ margin-bottom: -16px;
8
+ padding: 16px;
9
+
10
+ ${bpDownMd} {
11
+ margin-bottom: 0;
12
+ }
13
+ `;
14
+
15
+ export const StyledToggleButtonGroup = styled(ToggleButtonGroup)`
16
+ .MuiToggleButton-root {
17
+ gap: 4px;
18
+ padding: 6px 16px;
19
+ text-transform: none;
20
+
21
+ &.Mui-disabled {
22
+ color: ${PALETTE.INK_LIGHT};
23
+ }
24
+ }
25
+ `;
@@ -0,0 +1,31 @@
1
+ import { ToggleButton } from "@mui/material";
2
+ import { JSX } from "react";
3
+ import { StyledBox } from "./toggleButtonGroup.styles";
4
+ import Link from "next/link";
5
+ import { useAiRoutes } from "../../../../../../hooks/ai/useAiRoutes/hook";
6
+ import { StyledToggleButtonGroup } from "./toggleButtonGroup.styles";
7
+ import { Beta } from "../../../../../../components/common/Chip/components/Beta/beta";
8
+
9
+ /**
10
+ * ToggleButtonGroup component for navigating to ResearchView.
11
+ * Only navigates to ResearchView when the "Research" button is clicked, otherwise remains on ExploreView.
12
+ * @returns ToggleButtonGroup JSX element.
13
+ */
14
+ export const ToggleButtonGroup = (): JSX.Element | null => {
15
+ const { routes } = useAiRoutes() || {};
16
+
17
+ if (!routes) return null;
18
+
19
+ return (
20
+ <StyledBox>
21
+ <StyledToggleButtonGroup exclusive>
22
+ <ToggleButton component={Link} href={routes.research} value="research">
23
+ Research <Beta />
24
+ </ToggleButton>
25
+ <ToggleButton selected value="search">
26
+ Search
27
+ </ToggleButton>
28
+ </StyledToggleButtonGroup>
29
+ </StyledBox>
30
+ );
31
+ };
@@ -0,0 +1,19 @@
1
+ import styled from "@emotion/styled";
2
+ import { Stack } from "@mui/material";
3
+ import { bpDownMd } from "../../../../styles/common/mixins/breakpoints";
4
+
5
+ export const StyledStack = styled(Stack)`
6
+ gap: 8px;
7
+ margin: 16px 0;
8
+ padding: 0 16px;
9
+
10
+ ${bpDownMd} {
11
+ margin: 8px 0;
12
+ }
13
+ `;
14
+
15
+ export const StyledGrid = styled.div`
16
+ display: grid;
17
+ gap: 16px;
18
+ grid-template-columns: 1fr auto;
19
+ `;
@@ -16,7 +16,6 @@ import { SearchAllFilters } from "../../components/Filter/components/SearchAllFi
16
16
  import { SURFACE_TYPE } from "../../components/Filter/components/surfaces/types";
17
17
  import { Index as IndexView } from "../../components/Index/index";
18
18
  import { SidebarLabel } from "../../components/Layout/components/Sidebar/components/SidebarLabel/sidebarLabel";
19
- import { SidebarTools } from "../../components/Layout/components/Sidebar/components/SidebarTools/sidebarTools.styles";
20
19
  import { Sidebar } from "../../components/Layout/components/Sidebar/sidebar";
21
20
  import { CategoryGroup } from "../../config/entities";
22
21
  import { useStateSyncManager } from "../../hooks/stateSyncManager/hook";
@@ -32,6 +31,8 @@ import { SELECT_CATEGORY_KEY } from "../../providers/exploreState/constants";
32
31
  import { TEST_IDS } from "../../tests/testIds";
33
32
  import { useUpdateFilterSort } from "./hooks/UseUpdateFilterSort/hook";
34
33
  import { buildStateSyncManagerContext } from "./utils";
34
+ import { StyledGrid, StyledStack } from "./entityList/filters/filters.styles";
35
+ import { ToggleButtonGroup } from "./entityList/filters/components/ToggleButtonGroup/toggleButtonGroup";
35
36
 
36
37
  export interface ExploreViewProps extends AzulEntitiesStaticResponse {
37
38
  className?: string;
@@ -137,16 +138,19 @@ export const ExploreView = (props: ExploreViewProps): JSX.Element => {
137
138
  <DrawerProvider>
138
139
  {categoryViews && !!categoryViews.length && (
139
140
  <Sidebar>
140
- <SidebarTools data-testid={TEST_IDS.FILTER_CONTROLS}>
141
- <SidebarLabel label={"Filters"} />
142
- <Stack direction="row" gap={4}>
143
- <ClearAllFilters />
144
- <FilterSort
145
- enabled={filterSortEnabled}
146
- filterSort={filterSort}
147
- onFilterSortChange={onFilterSortChange}
148
- />
149
- </Stack>
141
+ <ToggleButtonGroup />
142
+ <StyledStack>
143
+ <StyledGrid data-testid={TEST_IDS.FILTER_CONTROLS}>
144
+ <SidebarLabel label={"Filters"} />
145
+ <Stack direction="row" gap={4}>
146
+ <ClearAllFilters />
147
+ <FilterSort
148
+ enabled={filterSortEnabled}
149
+ filterSort={filterSort}
150
+ onFilterSortChange={onFilterSortChange}
151
+ />
152
+ </Stack>
153
+ </StyledGrid>
150
154
  <SearchAllFilters
151
155
  categoryViews={categoryViews}
152
156
  onFilter={onFilterChange.bind(null, true)}
@@ -154,7 +158,7 @@ export const ExploreView = (props: ExploreViewProps): JSX.Element => {
154
158
  mdDown ? SURFACE_TYPE.POPPER_DRAWER : SURFACE_TYPE.POPPER_MENU
155
159
  }
156
160
  />
157
- </SidebarTools>
161
+ </StyledStack>
158
162
  <Filters
159
163
  categoryFilters={categoryFilters}
160
164
  onFilter={onFilterChange.bind(null, false)}
@@ -0,0 +1,19 @@
1
+ import { useConfig } from "../../../hooks/useConfig";
2
+ import { UseQuery } from "../query/types";
3
+ import { useQuery } from "../query/useQuery";
4
+
5
+ /**
6
+ * Adapter hook that wires AI query to app config.
7
+ * @returns AI query interface with actions.
8
+ */
9
+ export function useAdapter(): UseQuery {
10
+ const { config } = useConfig();
11
+ const { ai } = config;
12
+ const { url } = ai || {};
13
+
14
+ if (!url) {
15
+ throw new Error("Chat URL is not configured");
16
+ }
17
+
18
+ return useQuery(url);
19
+ }
@@ -0,0 +1,30 @@
1
+ import { JSX } from "react";
2
+ import { useAdapter } from "../adapter/useAdapter";
3
+ import { Form } from "./components/Form/form";
4
+ import { Input } from "./components/Input/input";
5
+ import { Messages } from "./components/Messages/messages";
6
+ import { getPlaceholder } from "./components/Input/utils";
7
+ import { Drawer } from "./components/Drawer/drawer";
8
+ import { useChatState } from "../state/hooks/UseChatState/hook";
9
+ import { ToggleButtonGroup } from "./components/ToggleButtonGroup/toggleButtonGroup";
10
+
11
+ /**
12
+ * Renders the research assistant drawer.
13
+ * @returns The assistant drawer.
14
+ */
15
+ export const Assistant = (): JSX.Element => {
16
+ const { actions } = useAdapter();
17
+ const { state } = useChatState();
18
+ return (
19
+ <Drawer>
20
+ <ToggleButtonGroup />
21
+ <Form actions={actions} status={state.status}>
22
+ <Messages state={state} />
23
+ <Input
24
+ disabled={state.status.loading}
25
+ placeholder={getPlaceholder(state)}
26
+ />
27
+ </Form>
28
+ </Drawer>
29
+ );
30
+ };
@@ -0,0 +1,24 @@
1
+ import styled from "@emotion/styled";
2
+ import { Drawer } from "@mui/material";
3
+ import { PALETTE } from "../../../../../styles/common/constants/palette";
4
+ import { ComponentProps } from "react";
5
+ import { LayoutSpacing } from "../../../../../hooks/UseLayoutSpacing/types";
6
+
7
+ export const StyledDrawer = styled(Drawer, {
8
+ shouldForwardProp(prop) {
9
+ return prop !== "bottom" && prop !== "top";
10
+ },
11
+ })<ComponentProps<typeof Drawer> & LayoutSpacing>`
12
+ height: 100%;
13
+ max-height: 100dvh;
14
+ width: 412px;
15
+ z-index: 0;
16
+
17
+ > .MuiPaper-root {
18
+ background-color: ${PALETTE.COMMON_WHITE};
19
+ border-right: 1px solid ${PALETTE.SMOKE_MAIN};
20
+ padding-top: ${({ top }) => top}px;
21
+ position: relative;
22
+ width: inherit;
23
+ }
24
+ `;
@@ -0,0 +1,26 @@
1
+ import { JSX } from "react";
2
+ import { TEST_IDS } from "../../../../../tests/testIds";
3
+ import { StyledDrawer } from "./drawer.styles";
4
+ import { DrawerProps } from "./types";
5
+ import { useLayoutSpacing } from "../../../../../hooks/UseLayoutSpacing/hook";
6
+ import { DRAWER_PROPS } from "../../../../../styles/common/mui/drawer";
7
+
8
+ /**
9
+ * Renders the drawer component for the research assistant.
10
+ * @param props - Component props.
11
+ * @param props.children - Children.
12
+ * @returns The drawer component.
13
+ */
14
+ export const Drawer = ({ children }: DrawerProps): JSX.Element => {
15
+ const { spacing } = useLayoutSpacing();
16
+ return (
17
+ <StyledDrawer
18
+ data-testid={TEST_IDS.RESEARCH_PANEL}
19
+ open
20
+ variant={DRAWER_PROPS.VARIANT.PERSISTENT}
21
+ {...spacing}
22
+ >
23
+ {children}
24
+ </StyledDrawer>
25
+ );
26
+ };
@@ -0,0 +1,5 @@
1
+ import { ReactNode } from "react";
2
+
3
+ export interface DrawerProps {
4
+ children: ReactNode;
5
+ }
@@ -0,0 +1,3 @@
1
+ export const FIELD_NAME = {
2
+ AI_PROMPT: "ai-prompt",
3
+ };
@@ -0,0 +1,8 @@
1
+ import styled from "@emotion/styled";
2
+
3
+ export const StyledForm = styled.form`
4
+ display: flex;
5
+ flex-direction: column;
6
+ height: 100%;
7
+ min-height: 0;
8
+ `;