@stack-spot/ai-chat-widget 1.36.0 → 1.36.1-betacitric.1

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 (341) hide show
  1. package/CHANGELOG.md +0 -28
  2. package/dist/StackspotAIWidget.d.ts.map +1 -1
  3. package/dist/StackspotAIWidget.js +6 -7
  4. package/dist/StackspotAIWidget.js.map +1 -1
  5. package/dist/app-metadata.json +13 -17
  6. package/dist/chat-interceptors/quick-commands.d.ts.map +1 -1
  7. package/dist/chat-interceptors/quick-commands.js +3 -9
  8. package/dist/chat-interceptors/quick-commands.js.map +1 -1
  9. package/dist/components/AdaptiveTextArea.d.ts +1 -1
  10. package/dist/components/AdaptiveTextArea.d.ts.map +1 -1
  11. package/dist/components/AdaptiveTextArea.js +1 -1
  12. package/dist/components/AdaptiveTextArea.js.map +1 -1
  13. package/dist/components/AgentCard/AgentCardCreate.d.ts.map +1 -1
  14. package/dist/components/AgentCard/AgentCardCreate.js +3 -3
  15. package/dist/components/AgentCard/AgentCardCreate.js.map +1 -1
  16. package/dist/components/AgentCard/index.d.ts.map +1 -1
  17. package/dist/components/AgentCard/index.js +5 -6
  18. package/dist/components/AgentCard/index.js.map +1 -1
  19. package/dist/components/ButtonFavorite.d.ts +8 -7
  20. package/dist/components/ButtonFavorite.d.ts.map +1 -1
  21. package/dist/components/ButtonFavorite.js +5 -14
  22. package/dist/components/ButtonFavorite.js.map +1 -1
  23. package/dist/components/Code.d.ts.map +1 -1
  24. package/dist/components/Code.js +11 -9
  25. package/dist/components/Code.js.map +1 -1
  26. package/dist/components/ComponentNavigator.d.ts.map +1 -1
  27. package/dist/components/ComponentNavigator.js +2 -4
  28. package/dist/components/ComponentNavigator.js.map +1 -1
  29. package/dist/components/FadingOverflow.d.ts.map +1 -1
  30. package/dist/components/FadingOverflow.js +3 -4
  31. package/dist/components/FadingOverflow.js.map +1 -1
  32. package/dist/components/FileDescription.d.ts.map +1 -1
  33. package/dist/components/FileDescription.js +3 -4
  34. package/dist/components/FileDescription.js.map +1 -1
  35. package/dist/components/HistoryList.js +1 -1
  36. package/dist/components/HistoryList.js.map +1 -1
  37. package/dist/components/ListResource.js +3 -3
  38. package/dist/components/ListResource.js.map +1 -1
  39. package/dist/components/Markdown.js +1 -1
  40. package/dist/components/Markdown.js.map +1 -1
  41. package/dist/components/Modal.d.ts.map +1 -1
  42. package/dist/components/Modal.js +2 -4
  43. package/dist/components/Modal.js.map +1 -1
  44. package/dist/components/QuickStartButton.d.ts +2 -3
  45. package/dist/components/QuickStartButton.d.ts.map +1 -1
  46. package/dist/components/QuickStartButton.js +4 -3
  47. package/dist/components/QuickStartButton.js.map +1 -1
  48. package/dist/components/RightPanelForm.d.ts.map +1 -1
  49. package/dist/components/RightPanelForm.js +20 -13
  50. package/dist/components/RightPanelForm.js.map +1 -1
  51. package/dist/components/RightPanelTabs.d.ts +1 -4
  52. package/dist/components/RightPanelTabs.d.ts.map +1 -1
  53. package/dist/components/RightPanelTabs.js +4 -16
  54. package/dist/components/RightPanelTabs.js.map +1 -1
  55. package/dist/components/Selector/index.d.ts.map +1 -1
  56. package/dist/components/Selector/index.js +5 -8
  57. package/dist/components/Selector/index.js.map +1 -1
  58. package/dist/components/Selector/styled.d.ts.map +1 -1
  59. package/dist/components/Selector/styled.js +8 -5
  60. package/dist/components/Selector/styled.js.map +1 -1
  61. package/dist/components/StackedBadge.js +5 -5
  62. package/dist/components/StackedBadge.js.map +1 -1
  63. package/dist/components/TabManager.d.ts.map +1 -1
  64. package/dist/components/TabManager.js +5 -30
  65. package/dist/components/TabManager.js.map +1 -1
  66. package/dist/components/ToolBadge.d.ts +3 -8
  67. package/dist/components/ToolBadge.d.ts.map +1 -1
  68. package/dist/components/ToolBadge.js +21 -99
  69. package/dist/components/ToolBadge.js.map +1 -1
  70. package/dist/components/WorkspaceTabNavigator.d.ts.map +1 -1
  71. package/dist/components/WorkspaceTabNavigator.js +7 -9
  72. package/dist/components/WorkspaceTabNavigator.js.map +1 -1
  73. package/dist/components/form/DescribedCheckboxGroup.d.ts +24 -2
  74. package/dist/components/form/DescribedCheckboxGroup.d.ts.map +1 -1
  75. package/dist/components/form/DescribedCheckboxGroup.js +46 -29
  76. package/dist/components/form/DescribedCheckboxGroup.js.map +1 -1
  77. package/dist/components/form/DescribedRadioGroup.d.ts +24 -4
  78. package/dist/components/form/DescribedRadioGroup.d.ts.map +1 -1
  79. package/dist/components/form/DescribedRadioGroup.js +39 -18
  80. package/dist/components/form/DescribedRadioGroup.js.map +1 -1
  81. package/dist/index.d.ts +1 -2
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1 -2
  84. package/dist/index.js.map +1 -1
  85. package/dist/layout.css +0 -26
  86. package/dist/right-panel/DefaultPanel.d.ts.map +1 -1
  87. package/dist/right-panel/DefaultPanel.js +2 -4
  88. package/dist/right-panel/DefaultPanel.js.map +1 -1
  89. package/dist/state/ChatEntry.d.ts +3 -4
  90. package/dist/state/ChatEntry.d.ts.map +1 -1
  91. package/dist/state/ChatEntry.js.map +1 -1
  92. package/dist/state/constants.js +2 -2
  93. package/dist/state/constants.js.map +1 -1
  94. package/dist/types.d.ts +3 -3
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/utils/tools.d.ts +1 -2
  97. package/dist/utils/tools.d.ts.map +1 -1
  98. package/dist/utils/tools.js +1 -12
  99. package/dist/utils/tools.js.map +1 -1
  100. package/dist/views/Agents/AgentDescription.d.ts.map +1 -1
  101. package/dist/views/Agents/AgentDescription.js +5 -6
  102. package/dist/views/Agents/AgentDescription.js.map +1 -1
  103. package/dist/views/Agents/AgentsPanel.d.ts.map +1 -1
  104. package/dist/views/Agents/AgentsPanel.js +7 -7
  105. package/dist/views/Agents/AgentsPanel.js.map +1 -1
  106. package/dist/views/Agents/AgentsTab.d.ts.map +1 -1
  107. package/dist/views/Agents/AgentsTab.js +29 -28
  108. package/dist/views/Agents/AgentsTab.js.map +1 -1
  109. package/dist/views/Agents/dictionary.d.ts +1 -1
  110. package/dist/views/Chat/AgentInfo.d.ts.map +1 -1
  111. package/dist/views/Chat/AgentInfo.js +3 -5
  112. package/dist/views/Chat/AgentInfo.js.map +1 -1
  113. package/dist/views/Chat/ChatMessage.d.ts.map +1 -1
  114. package/dist/views/Chat/ChatMessage.js +28 -36
  115. package/dist/views/Chat/ChatMessage.js.map +1 -1
  116. package/dist/views/Chat/StepsList.d.ts.map +1 -1
  117. package/dist/views/Chat/StepsList.js +10 -10
  118. package/dist/views/Chat/StepsList.js.map +1 -1
  119. package/dist/views/Chat/styled.d.ts.map +1 -1
  120. package/dist/views/Chat/styled.js +8 -2
  121. package/dist/views/Chat/styled.js.map +1 -1
  122. package/dist/views/ChatHistory/HistoryItem.d.ts.map +1 -1
  123. package/dist/views/ChatHistory/HistoryItem.js +7 -14
  124. package/dist/views/ChatHistory/HistoryItem.js.map +1 -1
  125. package/dist/views/ChatHistory/index.js +1 -1
  126. package/dist/views/ChatHistory/index.js.map +1 -1
  127. package/dist/views/ChatHistory/styled.d.ts.map +1 -1
  128. package/dist/views/ChatHistory/styled.js +3 -5
  129. package/dist/views/ChatHistory/styled.js.map +1 -1
  130. package/dist/views/ChatTabSelection.d.ts.map +1 -1
  131. package/dist/views/ChatTabSelection.js +2 -3
  132. package/dist/views/ChatTabSelection.js.map +1 -1
  133. package/dist/views/Editor.d.ts.map +1 -1
  134. package/dist/views/Editor.js +6 -12
  135. package/dist/views/Editor.js.map +1 -1
  136. package/dist/views/Home/BuiltInAgent.d.ts.map +1 -1
  137. package/dist/views/Home/BuiltInAgent.js +2 -3
  138. package/dist/views/Home/BuiltInAgent.js.map +1 -1
  139. package/dist/views/Home/CustomAgent.js +3 -3
  140. package/dist/views/Home/CustomAgent.js.map +1 -1
  141. package/dist/views/Home/index.js +1 -1
  142. package/dist/views/Home/index.js.map +1 -1
  143. package/dist/views/Home/styled.d.ts.map +1 -1
  144. package/dist/views/Home/styled.js +21 -22
  145. package/dist/views/Home/styled.js.map +1 -1
  146. package/dist/views/KSDocument.d.ts.map +1 -1
  147. package/dist/views/KSDocument.js +3 -4
  148. package/dist/views/KSDocument.js.map +1 -1
  149. package/dist/views/KnowledgeSources.d.ts.map +1 -1
  150. package/dist/views/KnowledgeSources.js +14 -36
  151. package/dist/views/KnowledgeSources.js.map +1 -1
  152. package/dist/views/MessageInput/AgentSelector.d.ts.map +1 -1
  153. package/dist/views/MessageInput/AgentSelector.js +7 -5
  154. package/dist/views/MessageInput/AgentSelector.js.map +1 -1
  155. package/dist/views/MessageInput/ButtonAgent.d.ts.map +1 -1
  156. package/dist/views/MessageInput/ButtonAgent.js +4 -5
  157. package/dist/views/MessageInput/ButtonAgent.js.map +1 -1
  158. package/dist/views/MessageInput/ButtonBar.d.ts.map +1 -1
  159. package/dist/views/MessageInput/ButtonBar.js +2 -4
  160. package/dist/views/MessageInput/ButtonBar.js.map +1 -1
  161. package/dist/views/MessageInput/ContextBar.d.ts.map +1 -1
  162. package/dist/views/MessageInput/ContextBar.js +4 -6
  163. package/dist/views/MessageInput/ContextBar.js.map +1 -1
  164. package/dist/views/MessageInput/QuickCommandSelector.js +2 -2
  165. package/dist/views/MessageInput/QuickCommandSelector.js.map +1 -1
  166. package/dist/views/MessageInput/SelectContent.d.ts.map +1 -1
  167. package/dist/views/MessageInput/SelectContent.js +30 -28
  168. package/dist/views/MessageInput/SelectContent.js.map +1 -1
  169. package/dist/views/MessageInput/UploadDragNDrop.d.ts.map +1 -1
  170. package/dist/views/MessageInput/UploadDragNDrop.js +2 -3
  171. package/dist/views/MessageInput/UploadDragNDrop.js.map +1 -1
  172. package/dist/views/MessageInput/dictionary.d.ts +1 -1
  173. package/dist/views/MessageInput/index.d.ts.map +1 -1
  174. package/dist/views/MessageInput/index.js +3 -4
  175. package/dist/views/MessageInput/index.js.map +1 -1
  176. package/dist/views/MessageInput/styled.d.ts +1 -3
  177. package/dist/views/MessageInput/styled.d.ts.map +1 -1
  178. package/dist/views/MessageInput/styled.js +11 -15
  179. package/dist/views/MessageInput/styled.js.map +1 -1
  180. package/dist/views/MinimizedHeader.d.ts.map +1 -1
  181. package/dist/views/MinimizedHeader.js +2 -4
  182. package/dist/views/MinimizedHeader.js.map +1 -1
  183. package/dist/views/Stacks.d.ts.map +1 -1
  184. package/dist/views/Stacks.js +23 -28
  185. package/dist/views/Stacks.js.map +1 -1
  186. package/dist/views/Steps/FlowChart/NodeStep.d.ts.map +1 -1
  187. package/dist/views/Steps/FlowChart/NodeStep.js +3 -3
  188. package/dist/views/Steps/FlowChart/NodeStep.js.map +1 -1
  189. package/dist/views/Steps/StepModal.d.ts.map +1 -1
  190. package/dist/views/Steps/StepModal.js +4 -6
  191. package/dist/views/Steps/StepModal.js.map +1 -1
  192. package/dist/views/Steps/dictionary.d.ts +1 -1
  193. package/dist/views/Steps/index.d.ts.map +1 -1
  194. package/dist/views/Steps/index.js +3 -4
  195. package/dist/views/Steps/index.js.map +1 -1
  196. package/dist/views/Steps/utils.d.ts +2 -1
  197. package/dist/views/Steps/utils.d.ts.map +1 -1
  198. package/dist/views/Steps/utils.js +8 -8
  199. package/dist/views/Steps/utils.js.map +1 -1
  200. package/dist/views/Tools.js +2 -4
  201. package/dist/views/Tools.js.map +1 -1
  202. package/dist/views/Workspaces/WorkspacesTab.d.ts.map +1 -1
  203. package/dist/views/Workspaces/WorkspacesTab.js +7 -10
  204. package/dist/views/Workspaces/WorkspacesTab.js.map +1 -1
  205. package/dist/views/Workspaces/index.js +4 -2
  206. package/dist/views/Workspaces/index.js.map +1 -1
  207. package/package.json +12 -13
  208. package/src/StackspotAIWidget.tsx +30 -33
  209. package/src/app-metadata.json +13 -17
  210. package/src/chat-interceptors/quick-commands.ts +5 -11
  211. package/src/components/AdaptiveTextArea.tsx +1 -1
  212. package/src/components/AgentCard/AgentCardCreate.tsx +3 -5
  213. package/src/components/AgentCard/index.tsx +7 -7
  214. package/src/components/ButtonFavorite.tsx +20 -47
  215. package/src/components/Code.tsx +31 -36
  216. package/src/components/ComponentNavigator.tsx +4 -8
  217. package/src/components/FadingOverflow.tsx +6 -7
  218. package/src/components/FileDescription.tsx +14 -10
  219. package/src/components/HistoryList.tsx +1 -1
  220. package/src/components/ListResource.tsx +5 -5
  221. package/src/components/Markdown.tsx +1 -1
  222. package/src/components/Modal.tsx +2 -4
  223. package/src/components/QuickStartButton.tsx +5 -4
  224. package/src/components/RightPanelForm.tsx +20 -13
  225. package/src/components/RightPanelTabs.tsx +4 -32
  226. package/src/components/Selector/index.tsx +17 -13
  227. package/src/components/Selector/styled.ts +8 -5
  228. package/src/components/StackedBadge.tsx +5 -5
  229. package/src/components/TabManager.tsx +8 -36
  230. package/src/components/ToolBadge.tsx +39 -129
  231. package/src/components/WorkspaceTabNavigator.tsx +22 -25
  232. package/src/components/form/DescribedCheckboxGroup.tsx +90 -65
  233. package/src/components/form/DescribedRadioGroup.tsx +79 -46
  234. package/src/index.ts +1 -2
  235. package/src/layout.css +0 -26
  236. package/src/right-panel/DefaultPanel.tsx +3 -7
  237. package/src/state/ChatEntry.ts +3 -4
  238. package/src/state/constants.ts +2 -2
  239. package/src/types.ts +4 -3
  240. package/src/utils/tools.ts +2 -23
  241. package/src/views/Agents/AgentDescription.tsx +6 -7
  242. package/src/views/Agents/AgentsPanel.tsx +11 -12
  243. package/src/views/Agents/AgentsTab.tsx +37 -56
  244. package/src/views/Chat/AgentInfo.tsx +7 -6
  245. package/src/views/Chat/ChatMessage.tsx +109 -118
  246. package/src/views/Chat/StepsList.tsx +10 -11
  247. package/src/views/Chat/styled.ts +8 -2
  248. package/src/views/ChatHistory/HistoryItem.tsx +12 -19
  249. package/src/views/ChatHistory/index.tsx +1 -1
  250. package/src/views/ChatHistory/styled.ts +3 -5
  251. package/src/views/ChatTabSelection.tsx +2 -3
  252. package/src/views/Editor.tsx +9 -14
  253. package/src/views/Home/BuiltInAgent.tsx +7 -8
  254. package/src/views/Home/CustomAgent.tsx +3 -3
  255. package/src/views/Home/index.tsx +1 -1
  256. package/src/views/Home/styled.ts +21 -22
  257. package/src/views/KSDocument.tsx +7 -8
  258. package/src/views/KnowledgeSources.tsx +24 -66
  259. package/src/views/MessageInput/AgentSelector.tsx +10 -8
  260. package/src/views/MessageInput/ButtonAgent.tsx +24 -12
  261. package/src/views/MessageInput/ButtonBar.tsx +25 -21
  262. package/src/views/MessageInput/ContextBar.tsx +12 -14
  263. package/src/views/MessageInput/QuickCommandSelector.tsx +2 -2
  264. package/src/views/MessageInput/SelectContent.tsx +39 -60
  265. package/src/views/MessageInput/UploadDragNDrop.tsx +2 -5
  266. package/src/views/MessageInput/index.tsx +5 -7
  267. package/src/views/MessageInput/styled.ts +12 -16
  268. package/src/views/MinimizedHeader.tsx +4 -7
  269. package/src/views/Stacks.tsx +31 -54
  270. package/src/views/Steps/FlowChart/NodeStep.tsx +6 -4
  271. package/src/views/Steps/StepModal.tsx +14 -18
  272. package/src/views/Steps/index.tsx +4 -5
  273. package/src/views/Steps/utils.tsx +9 -9
  274. package/src/views/Tools.tsx +12 -19
  275. package/src/views/Workspaces/WorkspacesTab.tsx +17 -21
  276. package/src/views/Workspaces/index.tsx +4 -2
  277. package/dist/components/Accordion.d.ts +0 -20
  278. package/dist/components/Accordion.d.ts.map +0 -1
  279. package/dist/components/Accordion.js +0 -51
  280. package/dist/components/Accordion.js.map +0 -1
  281. package/dist/components/FallbackBoundary/ErrorBoundary.d.ts +0 -33
  282. package/dist/components/FallbackBoundary/ErrorBoundary.d.ts.map +0 -1
  283. package/dist/components/FallbackBoundary/ErrorBoundary.js +0 -52
  284. package/dist/components/FallbackBoundary/ErrorBoundary.js.map +0 -1
  285. package/dist/components/FallbackBoundary/Loading.d.ts +0 -2
  286. package/dist/components/FallbackBoundary/Loading.d.ts.map +0 -1
  287. package/dist/components/FallbackBoundary/Loading.js +0 -12
  288. package/dist/components/FallbackBoundary/Loading.js.map +0 -1
  289. package/dist/components/FallbackBoundary/index.d.ts +0 -17
  290. package/dist/components/FallbackBoundary/index.d.ts.map +0 -1
  291. package/dist/components/FallbackBoundary/index.js +0 -9
  292. package/dist/components/FallbackBoundary/index.js.map +0 -1
  293. package/dist/components/IconInput.d.ts +0 -10
  294. package/dist/components/IconInput.d.ts.map +0 -1
  295. package/dist/components/IconInput.js +0 -61
  296. package/dist/components/IconInput.js.map +0 -1
  297. package/dist/components/OverlayMenu.d.ts +0 -21
  298. package/dist/components/OverlayMenu.d.ts.map +0 -1
  299. package/dist/components/OverlayMenu.js +0 -79
  300. package/dist/components/OverlayMenu.js.map +0 -1
  301. package/dist/components/ProgressBar.d.ts +0 -37
  302. package/dist/components/ProgressBar.d.ts.map +0 -1
  303. package/dist/components/ProgressBar.js +0 -131
  304. package/dist/components/ProgressBar.js.map +0 -1
  305. package/dist/components/Tooltip/Tooltip.d.ts +0 -37
  306. package/dist/components/Tooltip/Tooltip.d.ts.map +0 -1
  307. package/dist/components/Tooltip/Tooltip.js +0 -30
  308. package/dist/components/Tooltip/Tooltip.js.map +0 -1
  309. package/dist/components/Tooltip/TooltipAPI.d.ts +0 -29
  310. package/dist/components/Tooltip/TooltipAPI.d.ts.map +0 -1
  311. package/dist/components/Tooltip/TooltipAPI.js +0 -107
  312. package/dist/components/Tooltip/TooltipAPI.js.map +0 -1
  313. package/dist/components/Tooltip/context.d.ts +0 -5
  314. package/dist/components/Tooltip/context.d.ts.map +0 -1
  315. package/dist/components/Tooltip/context.js +0 -18
  316. package/dist/components/Tooltip/context.js.map +0 -1
  317. package/dist/components/Tooltip/index.d.ts +0 -3
  318. package/dist/components/Tooltip/index.d.ts.map +0 -1
  319. package/dist/components/Tooltip/index.js +0 -3
  320. package/dist/components/Tooltip/index.js.map +0 -1
  321. package/dist/components/Tooltip/style.d.ts +0 -4
  322. package/dist/components/Tooltip/style.d.ts.map +0 -1
  323. package/dist/components/Tooltip/style.js +0 -22
  324. package/dist/components/Tooltip/style.js.map +0 -1
  325. package/dist/components/Tooltip/types.d.ts +0 -27
  326. package/dist/components/Tooltip/types.d.ts.map +0 -1
  327. package/dist/components/Tooltip/types.js +0 -2
  328. package/dist/components/Tooltip/types.js.map +0 -1
  329. package/src/components/Accordion.tsx +0 -75
  330. package/src/components/FallbackBoundary/ErrorBoundary.tsx +0 -71
  331. package/src/components/FallbackBoundary/Loading.tsx +0 -14
  332. package/src/components/FallbackBoundary/index.tsx +0 -26
  333. package/src/components/IconInput.tsx +0 -73
  334. package/src/components/OverlayMenu.tsx +0 -133
  335. package/src/components/ProgressBar.tsx +0 -183
  336. package/src/components/Tooltip/Tooltip.tsx +0 -78
  337. package/src/components/Tooltip/TooltipAPI.ts +0 -101
  338. package/src/components/Tooltip/context.tsx +0 -24
  339. package/src/components/Tooltip/index.ts +0 -2
  340. package/src/components/Tooltip/style.tsx +0 -24
  341. package/src/components/Tooltip/types.ts +0 -28
@@ -1,6 +1,4 @@
1
- import { Flex } from '@citric/core'
2
- import { ArrowUp, Code, Stop } from '@citric/icons'
3
- import { IconButton } from '@citric/ui'
1
+ import { IconButton, Row } from '@stack-spot/citric-react'
4
2
  import { useCurrentChat, useCurrentChatState, useWidget } from '../../context/hooks'
5
3
  import { useMessageInputDictionary } from './dictionary'
6
4
  import { SelectContent } from './SelectContent'
@@ -25,27 +23,33 @@ export const ButtonBar = ({ onSend, isLoading }: SelectionBarProps) => {
25
23
 
26
24
  return (
27
25
  <SelectionBarWrapper className="button-group">
28
- <Flex sx={{ gap: '4px' }}>
26
+ <Row center={false} gap="4px">
29
27
  <SelectContent />
30
28
  {features.editor && (
31
- <IconButton color="light" appearance="square" aria-label={t.code} title={t.code} onClick={() => widget.set('panel', 'editor')}>
32
- <Code />
33
- </IconButton>
29
+ <IconButton icon="Code" appearance="square" aria-label={t.code} title={t.code} onClick={() => widget.set('panel', 'editor')} />
34
30
  )}
35
- </Flex>
36
- <Flex>
37
- {isLoading ? (
38
- <IconButton appearance="square" color="inverse" aria-label={t.cancel}
39
- onClick={() => chat.abort()} className="send" title={t.cancel}>
40
- <Stop />
41
- </IconButton>
42
- ) : (
43
- <IconButton appearance="square" color="inverse" aria-label={t.send}
44
- onClick={onSend} className="send" title={t.send}>
45
- <ArrowUp />
46
- </IconButton>
47
- )}
48
- </Flex>
31
+ </Row>
32
+ {isLoading ? (
33
+ <IconButton
34
+ icon="Stop"
35
+ appearance="square"
36
+ colorScheme="inverse"
37
+ aria-label={t.cancel}
38
+ onClick={() => chat.abort()}
39
+ className="send"
40
+ title={t.cancel}
41
+ />
42
+ ) : (
43
+ <IconButton
44
+ icon="ArrowUp"
45
+ appearance="square"
46
+ colorScheme="inverse"
47
+ aria-label={t.send}
48
+ onClick={onSend}
49
+ className="send"
50
+ title={t.send}
51
+ />
52
+ )}
49
53
  </SelectionBarWrapper>
50
54
  )
51
55
  }
@@ -1,7 +1,6 @@
1
- import { Text } from '@citric/core'
2
- import { TimesMini } from '@citric/icons'
3
- import { Badge, IconButton } from '@citric/ui'
4
1
  import { loader } from '@monaco-editor/react'
2
+ import { Icon } from '@stack-spot/citric-icons'
3
+ import { Badge, Button, IconButton, Text } from '@stack-spot/citric-react'
5
4
  import { ColorPaletteName, listToClass } from '@stack-spot/portal-theme'
6
5
  import { useCallback, useMemo } from 'react'
7
6
  import { FadingOverflow } from '../../components/FadingOverflow'
@@ -16,14 +15,11 @@ interface ContextBadgeProps {
16
15
  }
17
16
 
18
17
  const ContextBadge = ({ label, color, dismiss, onDismiss }: ContextBadgeProps) => (
19
- <Badge appearance="square" palette={color} className="context-badge"
20
- afterElement={
21
- onDismiss &&
22
- <IconButton appearance="square" colorIcon={`${color}.800`} onClick={onDismiss} title={dismiss} arial-label={dismiss}>
23
- <TimesMini />
24
- </IconButton>
25
- }>
18
+ <Badge appearance="square" colorPalette={color} className="context-badge">
26
19
  <Text nowrapEllipsis>{label}</Text>
20
+ {onDismiss && <Button appearance="none" onClick={onDismiss} title={dismiss} arial-label={dismiss} style={{ padding: '2px 0 2px 2px' }}>
21
+ <Icon icon="TimesMini" size="sm" />
22
+ </Button>}
27
23
  </Badge>
28
24
  )
29
25
 
@@ -74,10 +70,12 @@ export const ContextBar = () => {
74
70
  <div className="content">
75
71
  {shouldRenderRemoveAllButton && (
76
72
  <IconButton
77
- appearance="square" color="light"
78
- aria-label={t.removeConfig} title={t.removeConfig} onClick={removeAll}>
79
- <TimesMini />
80
- </IconButton>
73
+ icon="TimesMini"
74
+ aria-label={t.removeConfig}
75
+ title={t.removeConfig}
76
+ onClick={removeAll}
77
+ style={{ marginLeft: '8px' }}
78
+ />
81
79
  )}
82
80
  <FadingOverflow className="list-overflow" scroll="arrows" enableHorizontalScrollWithVerticalWheel>
83
81
  <ul>
@@ -1,4 +1,4 @@
1
- import { QuickCommand } from '@citric/icons'
1
+ import { Icon } from '@stack-spot/citric-icons'
2
2
  import { aiClient, workspaceAiClient } from '@stack-spot/portal-network'
3
3
  import { QuickCommandResponse } from '@stack-spot/portal-network/api/ai'
4
4
  import { useCallback } from 'react'
@@ -113,7 +113,7 @@ export const QuickCommandSelector = ({ inputRef, isTrial }:
113
113
  selectorConfig={{
114
114
  resourceName: 'Quick Command',
115
115
  shortcut: '/',
116
- icon: <QuickCommand />,
116
+ icon: <Icon icon="QuickCommand" />,
117
117
  searchProp: 'slug',
118
118
  urlBuilder: (qc) => `/quick-command/${qc?.slug}`,
119
119
  regex: quickCommandRegex,
@@ -1,28 +1,24 @@
1
- import { Agent, DocumentUpload, KnowledgeSource, Plus, QuickCommand, Spaces, Stack } from '@citric/icons'
2
- import { IconButton } from '@citric/ui'
3
- import { SelectionList } from '@stack-spot/portal-components/SelectionList'
4
- import { useMemo, useState } from 'react'
1
+ import { Icon } from '@stack-spot/citric-icons'
2
+ import { IconButton, ImageButton, MenuAction, MenuOverlay, MenuSection } from '@stack-spot/citric-react'
3
+ import { useMemo } from 'react'
5
4
  import { useCurrentChat, useCurrentChatState, useWidget } from '../../context/hooks'
6
5
  import { useUploadManager } from '../../utils/upload/context'
7
6
  import { useMessageInputDictionary } from './dictionary'
8
7
 
9
- type ChatFeatures = 'workspace' | 'knowledgeSource' | 'stack'
10
- type ChatPanel = 'ks' | 'workspace' | 'stack'
11
-
12
8
  export const SelectContent = () => {
13
9
  const widget = useWidget()
14
- const [visibleMenu, setVisibleMenu] = useState(false)
15
10
  const features = useCurrentChatState('features')
16
11
  const t = useMessageInputDictionary()
17
12
  const uploadManager = useUploadManager()
18
13
  const hasFeatureButtons = features.workspace || features.knowledgeSource || features.stack || features.upload
19
14
  const chat = useCurrentChat()
20
15
 
21
- const itemConfigs = [
16
+ const itemConfigs = useMemo<(MenuAction & { key: keyof typeof features, section: 0 | 1 })[]>(() => ([
22
17
  {
23
18
  key: 'agent',
19
+ section: 0,
24
20
  label: t.chatAgent,
25
- icon: <Agent />,
21
+ icon: <Icon icon="Agent" />,
26
22
  onClick: (event?: React.MouseEvent) => {
27
23
  event?.stopPropagation()
28
24
  chat.set('nextMessage', '@')
@@ -30,8 +26,9 @@ export const SelectContent = () => {
30
26
  },
31
27
  {
32
28
  key: 'quickCommands',
29
+ section: 0,
33
30
  label: 'Quick Commands',
34
- icon: <QuickCommand />,
31
+ icon: <Icon icon="QuickCommand" />,
35
32
  onClick: (event?: React.MouseEvent) => {
36
33
  event?.stopPropagation()
37
34
  chat.set('nextMessage', '/')
@@ -39,76 +36,58 @@ export const SelectContent = () => {
39
36
  },
40
37
  {
41
38
  key: 'knowledgeSource',
39
+ section: 0,
42
40
  label: 'Knowledge Sources',
43
- icon: <KnowledgeSource />,
44
- panel: 'ks',
41
+ icon: <Icon icon="KnowledgeSource" />,
42
+ onClick: () => widget.set('panel', 'ks'),
45
43
  },
46
44
  {
47
45
  key: 'stack',
46
+ section: 0,
48
47
  label: 'Stacks AI',
49
- icon: <Stack />,
50
- panel: 'stack',
48
+ icon: <Icon icon="Stack" />,
49
+ onClick: () => widget.set('panel', 'stack'),
51
50
  },
52
51
  {
53
52
  key: 'workspace',
53
+ section: 0,
54
54
  label: 'Spots',
55
- icon: <Spaces />,
56
- panel: 'workspace',
55
+ icon: <Icon icon="Spaces" />,
56
+ onClick: () => widget.set('panel', 'workspace'),
57
57
  },
58
58
  {
59
59
  key: 'upload',
60
+ section: 1,
60
61
  label: t.upload,
61
62
  onClick: () => uploadManager.open(),
62
63
  className: 'upload-item',
63
- icon: <DocumentUpload />,
64
+ icon: <Icon icon="DocumentUpload" />,
64
65
  },
65
- ]
66
+ ] as const).filter(({ key }) => features[key]), [features, widget])
66
67
 
67
- const listItems = useMemo(() =>
68
- itemConfigs.filter(chatFeatures => features[chatFeatures.key as ChatFeatures])
69
- .map(chatFeatures => ({
70
- label: chatFeatures.label,
71
- icon: chatFeatures.icon,
72
- className: chatFeatures.className,
73
- onClick: chatFeatures.panel ? (() => {
74
- widget.set('panel', chatFeatures.panel as ChatPanel)
75
- setVisibleMenu(false)
76
- }) : chatFeatures.onClick,
77
- })), [features, widget])
68
+ const listItems = useMemo(() => {
69
+ const sections: [MenuSection, MenuSection] = [
70
+ { type: 'section', children: [] },
71
+ { type: 'section', children: [] },
72
+ ]
73
+ itemConfigs.forEach(item => sections[item.section].children.push(item))
74
+ return sections.filter(s => !!s.children.length)
75
+ }, [itemConfigs])
78
76
 
79
77
  if (!hasFeatureButtons) return null
80
78
 
81
- return listItems.length > 1 ? (
82
- <>
83
- <IconButton
84
- id="button-content-select"
85
- color="light"
86
- appearance="square"
87
- role="button"
88
- title={visibleMenu ? t.collapse : t.expand}
89
- data-test-hint="button-options"
90
- aria-label={visibleMenu ? t.collapse : t.expand}
91
- aria-controls="chatMessageMenu"
92
- onClick={() => setVisibleMenu(state => !state)}>
93
- <Plus />
94
- </IconButton>
95
- <SelectionList
96
- className="message-menu"
97
- id="chatMessageMenu"
98
- visible={visibleMenu}
99
- onHide={() => setVisibleMenu(false)}
100
- items={listItems}
101
- />
102
- </>
79
+ return itemConfigs.length > 1 ? (
80
+ <MenuOverlay items={listItems} position="top" bgLevel={500} spaced roundedItems>
81
+ <IconButton icon="Plus" />
82
+ </MenuOverlay>
103
83
  ) : (
104
- <IconButton
105
- color="light"
84
+ <ImageButton
106
85
  appearance="square"
107
- role="button"
108
- title={listItems[0].label}
109
- aria-label={listItems[0].label}
110
- onClick={listItems[0].onClick}>
111
- {listItems[0].icon}
112
- </IconButton>
86
+ title={`${itemConfigs[0].label}`}
87
+ aria-label={`${itemConfigs[0].label}`}
88
+ onClick={itemConfigs[0].onClick}
89
+ >
90
+ {itemConfigs[0].icon}
91
+ </ImageButton>
113
92
  )
114
93
  }
@@ -1,5 +1,4 @@
1
- import { IconBox } from '@citric/core'
2
- import { Document } from '@citric/icons'
1
+ import { Icon } from '@stack-spot/citric-icons'
3
2
  import { DragEvent, useCallback, useEffect, useState } from 'react'
4
3
  import { useCurrentChat } from '../../context/hooks'
5
4
  import { useMessageInputDictionary } from './dictionary'
@@ -72,9 +71,7 @@ export const UploadDragNDrop = ({ isDragging, onDrop, onDragLeave }: UploadDragN
72
71
  e.stopPropagation()
73
72
  }}
74
73
  >
75
- <IconBox size="lg" aria-hidden={true}>
76
- <Document />
77
- </IconBox>
74
+ <Icon icon="Document" size="lg" aria-hidden={true} />
78
75
  <h2 id="upload-drag-drop-title">{t.uploadDragDropTitle}</h2>
79
76
  <p id="upload-drag-drop-description">{t.uploadDragDropDescription}</p>
80
77
  </div>
@@ -1,8 +1,7 @@
1
- import { listToClass, theme } from '@stack-spot/portal-theme'
1
+ import { ProgressBar } from '@stack-spot/citric-react'
2
2
  import { interpolate } from '@stack-spot/portal-translate'
3
3
  import { useCallback, useEffect, useRef, useState } from 'react'
4
4
  import { AdaptiveTextArea } from '../../components/AdaptiveTextArea'
5
- import { ProgressBar } from '../../components/ProgressBar'
6
5
  import { useCurrentChat, useCurrentChatState, useWidgetState } from '../../context/hooks'
7
6
  import { quickCommandRegex } from '../../regex'
8
7
  import { ChatEntry } from '../../state/ChatEntry'
@@ -137,11 +136,11 @@ export const MessageInput = ({ chatWindowRef }: { chatWindowRef?: React.RefObjec
137
136
 
138
137
  return (
139
138
  <UploadProvider value={chat.uploadManager}>
140
- <MessageInputBox aria-busy={isLoading} className="message-input" $inputFocused={focused}>
139
+ <MessageInputBox aria-busy={isLoading} className="message-input">
141
140
  <div className="wrapper-action">
142
141
  <QuickCommandSelector inputRef={textAreaRef} isTrial={isTrial} />
143
142
  <AgentSelector inputRef={textAreaRef} isTrial={isTrial} />
144
- <div className={listToClass(['action-box', focused && 'focused', isLoading && 'disabled'])}>
143
+ <div className="action-box">
145
144
  <ButtonAgent />
146
145
  <AdaptiveTextArea
147
146
  maxHeight={() => isMinimized
@@ -154,7 +153,7 @@ export const MessageInput = ({ chatWindowRef }: { chatWindowRef?: React.RefObjec
154
153
  ? interpolate(t.placeholder, agentLabel)
155
154
  : t.typing
156
155
  }
157
- onChange={e => chat.set('nextMessage', e.target.value)}
156
+ onChange={v => chat.set('nextMessage', v)}
158
157
  value={value}
159
158
  onFocus={() => setFocused(true)}
160
159
  onBlur={() => setFocused(false)}
@@ -165,8 +164,7 @@ export const MessageInput = ({ chatWindowRef }: { chatWindowRef?: React.RefObjec
165
164
  />
166
165
  </div>
167
166
  </div>
168
- <ProgressBar visible={true} animate={isLoading}
169
- backgroundColor={isLoading || !focused ? theme.color.light[500] : theme.color.primary[500]} />
167
+ <ProgressBar progress={isLoading ? undefined : (focused ? 100 : 0)} />
170
168
  <ContextBar />
171
169
  {chat.get('features').upload && <UploadBar />}
172
170
  <ButtonBar onSend={onSend} isLoading={isLoading} />
@@ -1,4 +1,3 @@
1
- import { IconButton } from '@citric/ui'
2
1
  import { theme } from '@stack-spot/portal-theme'
3
2
  import { styled } from 'styled-components'
4
3
 
@@ -51,7 +50,7 @@ export const SelectionBarWrapper = styled.div`
51
50
  }
52
51
  `
53
52
 
54
- export const MessageInputBox = styled.div<{$inputFocused?: boolean}>`
53
+ export const MessageInputBox = styled.div`
55
54
  display: flex;
56
55
  flex-direction: column;
57
56
 
@@ -115,7 +114,7 @@ export const MessageInputBox = styled.div<{$inputFocused?: boolean}>`
115
114
  line-height: 0.75rem;
116
115
  white-space: nowrap;
117
116
 
118
- ${IconButton} {
117
+ /* $ {IconButton} {
119
118
  padding: 4px 0;
120
119
  background: none;
121
120
  border: none;
@@ -126,7 +125,7 @@ export const MessageInputBox = styled.div<{$inputFocused?: boolean}>`
126
125
  width: auto;
127
126
  height: 12px;
128
127
  }
129
- }
128
+ } */
130
129
  }
131
130
  }
132
131
 
@@ -163,18 +162,15 @@ export const MessageInputBox = styled.div<{$inputFocused?: boolean}>`
163
162
  background-color: ${theme.color.light[300]};
164
163
  padding: 10px 8px;
165
164
  transition: border-color 0.3s, background-color 0.3s;
166
-
167
- &.focused {
168
- border: 2px solid ${theme.color.light[300]};
169
- }
170
-
171
-
172
- &.disabled {
173
- background-color: ${theme.color.light[300]};
174
- }
175
165
  }
176
166
  }
177
167
 
168
+ [data-citric="progress-bar"] {
169
+ background-color: ${theme.color.light[500]};
170
+ border: 0;
171
+ padding: 0;
172
+ }
173
+
178
174
  .button-group {
179
175
  display: flex;
180
176
  flex-direction: row;
@@ -227,10 +223,10 @@ export const MessageInputBox = styled.div<{$inputFocused?: boolean}>`
227
223
  }
228
224
  }
229
225
 
230
- ${IconButton} {
226
+ /* $ {IconButton} {
231
227
  width: 24px;
232
228
  height: 24px;
233
- }
229
+ } */
234
230
 
235
231
  .group-agent {
236
232
  display: flex;
@@ -290,7 +286,7 @@ export const MessageInputBox = styled.div<{$inputFocused?: boolean}>`
290
286
  transition: height 0.3s;
291
287
  background-color: transparent;
292
288
  &:focus {
293
- box-shadow: none;
289
+ box-shadow: none !important;
294
290
  }
295
291
  }
296
292
  `
@@ -1,6 +1,4 @@
1
- import { Text } from '@citric/core'
2
- import { ChevronDown, Times } from '@citric/icons'
3
- import { IconButton } from '@citric/ui'
1
+ import { IconButton, Text } from '@stack-spot/citric-react'
4
2
  import { listToClass } from '@stack-spot/portal-theme'
5
3
  import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
6
4
  import { useCallback, useRef, useState } from 'react'
@@ -69,14 +67,13 @@ export const MinimizedHeader = ({ onClose, onCollapse, onExpand }: MinimizedActi
69
67
  <FadingOverflow className="title"><Text title={label}>{label}</Text></FadingOverflow>
70
68
  {showButtons && <div className="button-group">
71
69
  {(onExpand || onCollapse) && <IconButton
70
+ icon="ChevronDown"
72
71
  title={collapsed ? t.expand : t.collapse}
73
72
  aria-label={collapsed ? t.expand : t.collapse}
74
73
  className={listToClass(['collapse', collapsed && 'collapsed'])}
75
74
  onClick={toggleCollapsed}
76
- >
77
- <ChevronDown />
78
- </IconButton>}
79
- {onClose && <IconButton title={t.close} aria-label={t.close} onClick={onClose}><Times /></IconButton>}
75
+ />}
76
+ {onClose && <IconButton icon="Times" title={t.close} aria-label={t.close} onClick={onClose} />}
80
77
  </div>}
81
78
  </Header>
82
79
  )
@@ -1,15 +1,12 @@
1
- import { Button } from '@citric/core'
2
- import { Search } from '@citric/icons'
1
+ import { Button, Tab } from '@stack-spot/citric-react'
3
2
  import { Placeholder } from '@stack-spot/portal-components/Placeholder'
4
3
  import { aiClient, workspaceAiClient } from '@stack-spot/portal-network'
5
- import { GetAiStackResponse, VisibilityLevelEnum } from '@stack-spot/portal-network/api/ai'
4
+ import { VisibilityLevelEnum } from '@stack-spot/portal-network/api/ai'
6
5
  import { WorkspaceResponse } from '@stack-spot/portal-network/api/workspace-ai'
7
6
  import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
8
- import { ReactElement, useCallback, useEffect, useMemo, useRef, useState } from 'react'
9
- import { ButtonFavorite } from '../components/ButtonFavorite'
7
+ import { useEffect, useMemo, useRef, useState } from 'react'
10
8
  import { NavigationComponent } from '../components/ComponentNavigator'
11
9
  import { DescribedRadioGroup } from '../components/form/DescribedRadioGroup'
12
- import { IconInput } from '../components/IconInput'
13
10
  import { RightPanelContentList } from '../components/RightPanelContentList'
14
11
  import { RightPanelTabs } from '../components/RightPanelTabs'
15
12
  import { WorkspaceTabNavigator } from '../components/WorkspaceTabNavigator'
@@ -19,8 +16,6 @@ import { useRightPanel } from '../right-panel/hooks'
19
16
  import { ChatProperties } from '../state/ChatState'
20
17
  import { checkIsTrial } from '../utils/check-is-trial'
21
18
 
22
- type TabElement = { title: string, content: ReactElement }
23
-
24
19
  /**
25
20
  * Renders the Stack selection form in the Right Panel if this is the panel that is currently opened.
26
21
  */
@@ -54,12 +49,12 @@ const StacksPanel = () => {
54
49
  stack.current = chat.get('stack')
55
50
  }, [chat])
56
51
 
57
- const allTabsMap: Partial<Record<Scope, TabElement>> = {
58
- favorite: { title: t.favorites, content: <StacksTab key="favorites" visibility="favorite" stack={stack} /> },
59
- personal: { title: t.personal, content: <StacksTab key="personal" visibility="personal" stack={stack} /> },
60
- shared: { title: t.shared, content: <StacksTab key="shared" visibility="shared" stack={stack} /> },
61
- workspace: { title: t.spots, content: <StacksTabWorkspace key="workspace" visibility="workspace" stack={stack} /> },
62
- account: { title: t.account, content: <StacksTab key="account" visibility="account" stack={stack} /> },
52
+ const allTabsMap: Partial<Record<Scope, Omit<Tab, 'key'>>> = {
53
+ favorite: { label: t.favorites, content: <StacksTab key="favorites" visibility="favorite" stack={stack} /> },
54
+ personal: { label: t.personal, content: <StacksTab key="personal" visibility="personal" stack={stack} /> },
55
+ shared: { label: t.shared, content: <StacksTab key="shared" visibility="shared" stack={stack} /> },
56
+ workspace: { label: t.spots, content: <StacksTabWorkspace key="workspace" visibility="workspace" stack={stack} /> },
57
+ account: { label: t.account, content: <StacksTab key="account" visibility="account" stack={stack} /> },
63
58
  }
64
59
  const defaultScopes: Scope[] = ['favorite', 'personal', 'shared', 'workspace', 'account']
65
60
 
@@ -70,8 +65,8 @@ const StacksPanel = () => {
70
65
  : rawScopes
71
66
 
72
67
  const tabs = scopesToRender
73
- .map(scope => allTabsMap[scope])
74
- .filter(Boolean) as TabElement[]
68
+ .map(scope => scope in allTabsMap ? { key: scope, ...allTabsMap[scope] } : undefined)
69
+ .filter(Boolean) as Tab[]
75
70
 
76
71
  return (isGroupResourcesByScope ? (
77
72
  <RightPanelTabs key={chat.id} tabs={tabs} />
@@ -91,11 +86,10 @@ export const StacksTab = ({ visibility, workspaceId, stack, showSubmitButton = t
91
86
  const t = useTranslate(dictionary)
92
87
  const { close } = useRightPanel()
93
88
  const chat = useCurrentChat()
94
- const [filter, setFilter] = useState('')
95
-
96
89
  const listFavorites = aiClient.aiStacks.useQuery({ visibility: 'favorite' })
97
90
  const [addFavorite, pendingAddFav] = aiClient.addFavoriteStackAi.useMutation()
98
91
  const [removeFavorite, pendingRemoveFav] = aiClient.removeFavoriteStackAi.useMutation()
92
+ const [submitEnabled, setSubmitEnabled] = useState(false)
99
93
 
100
94
  const removeFavoriteStack = async (idOrSlug: string) => {
101
95
  try {
@@ -146,57 +140,40 @@ export const StacksTab = ({ visibility, workspaceId, stack, showSubmitButton = t
146
140
  reject(error)
147
141
  }
148
142
  })
149
-
150
-
151
143
 
152
144
  const stacks = workspaceId
153
145
  ? workspaceAiClient.getStackFromWorkspaceAi.useQuery({ workspaceId })
154
146
  //@ts-ignore
155
147
  : aiClient.aiStacks.useQuery({ visibility, order: 'a-to-z' })
156
148
 
157
- const currentStackId = stack.current ? stack.current.id : chat.get('stack')?.id
158
- const [value, setValue] = useState<GetAiStackResponse | undefined>(stacks.find(s => s.id === currentStackId))
159
- const filtered = useMemo(() => filter ?
160
- // Recreate the list so that the favorites list is taken into account
161
- stacks.filter(s => s === value || s.name.toLocaleLowerCase().includes(filter.toLocaleLowerCase())) : [...stacks],
162
- [stacks, listFavorites, filter, value],
163
- )
149
+ const initialValue = useMemo(() => {
150
+ const currentStackId = stack.current ? stack.current.id : chat.get('stack')?.id
151
+ const initial = stacks.find(s => s.id === currentStackId)
152
+ if (initial) setSubmitEnabled(true)
153
+ return initial
154
+ }, [stacks])
164
155
 
165
156
  function submit() {
166
- if (value) chat.set('stack', { id: value.id, label: value.name })
157
+ if (stack.current) chat.set('stack', stack.current)
167
158
  close()
168
159
  }
169
160
 
170
- const onChange = useCallback((newValue: GetAiStackResponse) => {
171
- setValue(newValue)
172
- stack.current = { ...newValue, label: newValue.name }
173
- }, [])
174
-
175
161
  return (
176
162
  <>
177
163
  <div className="content">
178
- <IconInput icon={<Search />} value={filter} onChange={setFilter} className="search" />
179
- {!!filtered.length && <DescribedRadioGroup
180
- options={filtered}
181
- renderAfterElement={({ id }) =>
182
- <ButtonFavorite favorite={{ idOrSlug:id, listFavorites, onAddFavorite, onRemoveFavorite }} />
183
- }
184
- keygen={s => s.id}
185
- value={value}
186
- onChange={onChange}
187
- renderLabel={s => s.name}
188
- renderDescription={s => s.use_case}
189
- optionClassName={s => (s === value && filter && !s.name.toLocaleLowerCase().includes(filter.toLocaleLowerCase()))
190
- ? 'filtered-out'
191
- : ''
192
- }
193
- className="option-list"
194
- />}
195
- {!!stacks.length && !filtered.length &&
196
- <Placeholder title={t.noSearchResults} description={t.noSearchResultsDescription} className="no-data-placeholder"/>}
197
- {!stacks.length && <Placeholder title={t.noData} description={t.noDataDescription} />}
164
+ <DescribedRadioGroup
165
+ options={stacks}
166
+ initialValue={initialValue}
167
+ data={s => ({ idOrSlug: s.id, description: s.use_case, name: s.name, listFavorites, onAddFavorite, onRemoveFavorite })}
168
+ emptyResults={<Placeholder title={t.noSearchResults} description={t.noSearchResultsDescription} className="no-data-placeholder"/>}
169
+ emptyDataset={<Placeholder title={t.noData} description={t.noDataDescription} />}
170
+ onChange={(s) => {
171
+ stack.current = s ? { ...s, label: s.name } : undefined
172
+ setSubmitEnabled(true)
173
+ }}
174
+ />
198
175
  </div>
199
- {!!filtered.length && showSubmitButton && <Button onClick={submit} disabled={!value}>{t.apply}</Button>}
176
+ {!!stacks.length && showSubmitButton && <Button onClick={submit} disabled={!submitEnabled}>{t.apply}</Button>}
200
177
  </>
201
178
  )
202
179
  }
@@ -1,5 +1,5 @@
1
- import { IconBox, Text } from '@citric/core'
2
- import { Cog } from '@citric/icons'
1
+ import { Icon } from '@stack-spot/citric-icons'
2
+ import { Text } from '@stack-spot/citric-react'
3
3
  import { listToClass } from '@stack-spot/portal-theme'
4
4
  import { StackedBadge } from '../../../components/StackedBadge'
5
5
  import { useStepsDictionary } from '../dictionary'
@@ -24,7 +24,7 @@ export const NodeStep = ({ data: { step, index, nextStatus, onClick } }: Props)
24
24
  aria-label={getTitle(t, step, index)}
25
25
  >
26
26
  <header>
27
- <IconBox>{getTypeIcon(step.type)}</IconBox>
27
+ <Icon {...getTypeIcon(step.type)} />
28
28
  <Text className="step-index">{getTitle(t, step, index)}</Text>
29
29
  {getStatusIcon(step.status)}
30
30
  </header>
@@ -36,7 +36,9 @@ export const NodeStep = ({ data: { step, index, nextStatus, onClick } }: Props)
36
36
  </Text>
37
37
  {!!step.attempts[0].tools?.length && <StackedBadge
38
38
  label={t.tools}
39
- images={step.attempts[0].tools?.slice(0, 3).map(tool => ({ key: tool.id, name: tool.name, url: tool.image, icon: <Cog /> }))}
39
+ images={step.attempts[0].tools?.slice(0, 3).map(
40
+ tool => ({ key: tool.id, name: tool.name, url: tool.image, icon: <Icon icon="Cog" /> }),
41
+ )}
40
42
  />}
41
43
  </div>}
42
44
  <HandleGroup renderSource={step.type !== 'answer'} renderTarget={step.type !== 'planning'} />