@stack-spot/ai-chat-widget 1.36.1-betacitric.1 → 1.36.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 (353) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/StackspotAIWidget.d.ts.map +1 -1
  3. package/dist/StackspotAIWidget.js +7 -6
  4. package/dist/StackspotAIWidget.js.map +1 -1
  5. package/dist/app-metadata.json +17 -13
  6. package/dist/chat-interceptors/quick-commands.d.ts.map +1 -1
  7. package/dist/chat-interceptors/quick-commands.js +9 -3
  8. package/dist/chat-interceptors/quick-commands.js.map +1 -1
  9. package/dist/components/Accordion.d.ts +20 -0
  10. package/dist/components/Accordion.d.ts.map +1 -0
  11. package/dist/components/Accordion.js +51 -0
  12. package/dist/components/Accordion.js.map +1 -0
  13. package/dist/components/AdaptiveTextArea.d.ts +1 -1
  14. package/dist/components/AdaptiveTextArea.d.ts.map +1 -1
  15. package/dist/components/AdaptiveTextArea.js +1 -1
  16. package/dist/components/AdaptiveTextArea.js.map +1 -1
  17. package/dist/components/AgentCard/AgentCardCreate.d.ts.map +1 -1
  18. package/dist/components/AgentCard/AgentCardCreate.js +3 -3
  19. package/dist/components/AgentCard/AgentCardCreate.js.map +1 -1
  20. package/dist/components/AgentCard/index.d.ts.map +1 -1
  21. package/dist/components/AgentCard/index.js +6 -5
  22. package/dist/components/AgentCard/index.js.map +1 -1
  23. package/dist/components/ButtonFavorite.d.ts +7 -8
  24. package/dist/components/ButtonFavorite.d.ts.map +1 -1
  25. package/dist/components/ButtonFavorite.js +14 -5
  26. package/dist/components/ButtonFavorite.js.map +1 -1
  27. package/dist/components/Code.d.ts.map +1 -1
  28. package/dist/components/Code.js +9 -11
  29. package/dist/components/Code.js.map +1 -1
  30. package/dist/components/ComponentNavigator.d.ts.map +1 -1
  31. package/dist/components/ComponentNavigator.js +4 -2
  32. package/dist/components/ComponentNavigator.js.map +1 -1
  33. package/dist/components/FadingOverflow.d.ts.map +1 -1
  34. package/dist/components/FadingOverflow.js +4 -3
  35. package/dist/components/FadingOverflow.js.map +1 -1
  36. package/dist/components/FallbackBoundary/ErrorBoundary.d.ts +33 -0
  37. package/dist/components/FallbackBoundary/ErrorBoundary.d.ts.map +1 -0
  38. package/dist/components/FallbackBoundary/ErrorBoundary.js +52 -0
  39. package/dist/components/FallbackBoundary/ErrorBoundary.js.map +1 -0
  40. package/dist/components/FallbackBoundary/Loading.d.ts +2 -0
  41. package/dist/components/FallbackBoundary/Loading.d.ts.map +1 -0
  42. package/dist/components/FallbackBoundary/Loading.js +12 -0
  43. package/dist/components/FallbackBoundary/Loading.js.map +1 -0
  44. package/dist/components/FallbackBoundary/index.d.ts +17 -0
  45. package/dist/components/FallbackBoundary/index.d.ts.map +1 -0
  46. package/dist/components/FallbackBoundary/index.js +9 -0
  47. package/dist/components/FallbackBoundary/index.js.map +1 -0
  48. package/dist/components/FileDescription.d.ts.map +1 -1
  49. package/dist/components/FileDescription.js +4 -3
  50. package/dist/components/FileDescription.js.map +1 -1
  51. package/dist/components/HistoryList.js +1 -1
  52. package/dist/components/HistoryList.js.map +1 -1
  53. package/dist/components/IconInput.d.ts +10 -0
  54. package/dist/components/IconInput.d.ts.map +1 -0
  55. package/dist/components/IconInput.js +61 -0
  56. package/dist/components/IconInput.js.map +1 -0
  57. package/dist/components/ListResource.js +3 -3
  58. package/dist/components/ListResource.js.map +1 -1
  59. package/dist/components/Markdown.js +1 -1
  60. package/dist/components/Markdown.js.map +1 -1
  61. package/dist/components/Modal.d.ts.map +1 -1
  62. package/dist/components/Modal.js +4 -2
  63. package/dist/components/Modal.js.map +1 -1
  64. package/dist/components/OverlayMenu.d.ts +21 -0
  65. package/dist/components/OverlayMenu.d.ts.map +1 -0
  66. package/dist/components/OverlayMenu.js +79 -0
  67. package/dist/components/OverlayMenu.js.map +1 -0
  68. package/dist/components/ProgressBar.d.ts +37 -0
  69. package/dist/components/ProgressBar.d.ts.map +1 -0
  70. package/dist/components/ProgressBar.js +131 -0
  71. package/dist/components/ProgressBar.js.map +1 -0
  72. package/dist/components/QuickStartButton.d.ts +3 -2
  73. package/dist/components/QuickStartButton.d.ts.map +1 -1
  74. package/dist/components/QuickStartButton.js +3 -4
  75. package/dist/components/QuickStartButton.js.map +1 -1
  76. package/dist/components/RightPanelForm.d.ts.map +1 -1
  77. package/dist/components/RightPanelForm.js +13 -20
  78. package/dist/components/RightPanelForm.js.map +1 -1
  79. package/dist/components/RightPanelTabs.d.ts +4 -1
  80. package/dist/components/RightPanelTabs.d.ts.map +1 -1
  81. package/dist/components/RightPanelTabs.js +16 -4
  82. package/dist/components/RightPanelTabs.js.map +1 -1
  83. package/dist/components/Selector/index.d.ts.map +1 -1
  84. package/dist/components/Selector/index.js +8 -5
  85. package/dist/components/Selector/index.js.map +1 -1
  86. package/dist/components/Selector/styled.d.ts.map +1 -1
  87. package/dist/components/Selector/styled.js +5 -8
  88. package/dist/components/Selector/styled.js.map +1 -1
  89. package/dist/components/StackedBadge.js +5 -5
  90. package/dist/components/StackedBadge.js.map +1 -1
  91. package/dist/components/TabManager.d.ts.map +1 -1
  92. package/dist/components/TabManager.js +30 -5
  93. package/dist/components/TabManager.js.map +1 -1
  94. package/dist/components/ToolBadge.d.ts +8 -3
  95. package/dist/components/ToolBadge.d.ts.map +1 -1
  96. package/dist/components/ToolBadge.js +99 -21
  97. package/dist/components/ToolBadge.js.map +1 -1
  98. package/dist/components/Tooltip/Tooltip.d.ts +37 -0
  99. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  100. package/dist/components/Tooltip/Tooltip.js +30 -0
  101. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  102. package/dist/components/Tooltip/TooltipAPI.d.ts +29 -0
  103. package/dist/components/Tooltip/TooltipAPI.d.ts.map +1 -0
  104. package/dist/components/Tooltip/TooltipAPI.js +107 -0
  105. package/dist/components/Tooltip/TooltipAPI.js.map +1 -0
  106. package/dist/components/Tooltip/context.d.ts +5 -0
  107. package/dist/components/Tooltip/context.d.ts.map +1 -0
  108. package/dist/components/Tooltip/context.js +18 -0
  109. package/dist/components/Tooltip/context.js.map +1 -0
  110. package/dist/components/Tooltip/index.d.ts +3 -0
  111. package/dist/components/Tooltip/index.d.ts.map +1 -0
  112. package/dist/components/Tooltip/index.js +3 -0
  113. package/dist/components/Tooltip/index.js.map +1 -0
  114. package/dist/components/Tooltip/style.d.ts +4 -0
  115. package/dist/components/Tooltip/style.d.ts.map +1 -0
  116. package/dist/components/Tooltip/style.js +22 -0
  117. package/dist/components/Tooltip/style.js.map +1 -0
  118. package/dist/components/Tooltip/types.d.ts +27 -0
  119. package/dist/components/Tooltip/types.d.ts.map +1 -0
  120. package/dist/components/Tooltip/types.js +2 -0
  121. package/dist/components/Tooltip/types.js.map +1 -0
  122. package/dist/components/WorkspaceTabNavigator.d.ts.map +1 -1
  123. package/dist/components/WorkspaceTabNavigator.js +9 -7
  124. package/dist/components/WorkspaceTabNavigator.js.map +1 -1
  125. package/dist/components/form/DescribedCheckboxGroup.d.ts +2 -24
  126. package/dist/components/form/DescribedCheckboxGroup.d.ts.map +1 -1
  127. package/dist/components/form/DescribedCheckboxGroup.js +29 -46
  128. package/dist/components/form/DescribedCheckboxGroup.js.map +1 -1
  129. package/dist/components/form/DescribedRadioGroup.d.ts +4 -24
  130. package/dist/components/form/DescribedRadioGroup.d.ts.map +1 -1
  131. package/dist/components/form/DescribedRadioGroup.js +18 -39
  132. package/dist/components/form/DescribedRadioGroup.js.map +1 -1
  133. package/dist/index.d.ts +2 -1
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +2 -1
  136. package/dist/index.js.map +1 -1
  137. package/dist/layout.css +26 -0
  138. package/dist/right-panel/DefaultPanel.d.ts.map +1 -1
  139. package/dist/right-panel/DefaultPanel.js +4 -2
  140. package/dist/right-panel/DefaultPanel.js.map +1 -1
  141. package/dist/state/ChatEntry.d.ts +4 -3
  142. package/dist/state/ChatEntry.d.ts.map +1 -1
  143. package/dist/state/ChatEntry.js.map +1 -1
  144. package/dist/state/constants.js +2 -2
  145. package/dist/state/constants.js.map +1 -1
  146. package/dist/types.d.ts +3 -3
  147. package/dist/types.d.ts.map +1 -1
  148. package/dist/utils/tools.d.ts +2 -1
  149. package/dist/utils/tools.d.ts.map +1 -1
  150. package/dist/utils/tools.js +12 -1
  151. package/dist/utils/tools.js.map +1 -1
  152. package/dist/utils/upload/FileUpload.d.ts.map +1 -1
  153. package/dist/utils/upload/FileUpload.js +1 -2
  154. package/dist/utils/upload/FileUpload.js.map +1 -1
  155. package/dist/views/Agents/AgentDescription.d.ts.map +1 -1
  156. package/dist/views/Agents/AgentDescription.js +6 -5
  157. package/dist/views/Agents/AgentDescription.js.map +1 -1
  158. package/dist/views/Agents/AgentsPanel.d.ts.map +1 -1
  159. package/dist/views/Agents/AgentsPanel.js +7 -7
  160. package/dist/views/Agents/AgentsPanel.js.map +1 -1
  161. package/dist/views/Agents/AgentsTab.d.ts.map +1 -1
  162. package/dist/views/Agents/AgentsTab.js +28 -29
  163. package/dist/views/Agents/AgentsTab.js.map +1 -1
  164. package/dist/views/Agents/dictionary.d.ts +1 -1
  165. package/dist/views/Chat/AgentInfo.d.ts.map +1 -1
  166. package/dist/views/Chat/AgentInfo.js +5 -3
  167. package/dist/views/Chat/AgentInfo.js.map +1 -1
  168. package/dist/views/Chat/ChatMessage.d.ts.map +1 -1
  169. package/dist/views/Chat/ChatMessage.js +36 -28
  170. package/dist/views/Chat/ChatMessage.js.map +1 -1
  171. package/dist/views/Chat/StepsList.d.ts.map +1 -1
  172. package/dist/views/Chat/StepsList.js +10 -10
  173. package/dist/views/Chat/StepsList.js.map +1 -1
  174. package/dist/views/Chat/styled.d.ts.map +1 -1
  175. package/dist/views/Chat/styled.js +2 -8
  176. package/dist/views/Chat/styled.js.map +1 -1
  177. package/dist/views/ChatHistory/HistoryItem.d.ts.map +1 -1
  178. package/dist/views/ChatHistory/HistoryItem.js +14 -7
  179. package/dist/views/ChatHistory/HistoryItem.js.map +1 -1
  180. package/dist/views/ChatHistory/index.js +1 -1
  181. package/dist/views/ChatHistory/index.js.map +1 -1
  182. package/dist/views/ChatHistory/styled.d.ts.map +1 -1
  183. package/dist/views/ChatHistory/styled.js +5 -3
  184. package/dist/views/ChatHistory/styled.js.map +1 -1
  185. package/dist/views/ChatTabSelection.d.ts.map +1 -1
  186. package/dist/views/ChatTabSelection.js +3 -2
  187. package/dist/views/ChatTabSelection.js.map +1 -1
  188. package/dist/views/Editor.d.ts.map +1 -1
  189. package/dist/views/Editor.js +12 -6
  190. package/dist/views/Editor.js.map +1 -1
  191. package/dist/views/Home/BuiltInAgent.d.ts.map +1 -1
  192. package/dist/views/Home/BuiltInAgent.js +3 -2
  193. package/dist/views/Home/BuiltInAgent.js.map +1 -1
  194. package/dist/views/Home/CustomAgent.js +3 -3
  195. package/dist/views/Home/CustomAgent.js.map +1 -1
  196. package/dist/views/Home/index.js +1 -1
  197. package/dist/views/Home/index.js.map +1 -1
  198. package/dist/views/Home/styled.d.ts.map +1 -1
  199. package/dist/views/Home/styled.js +22 -21
  200. package/dist/views/Home/styled.js.map +1 -1
  201. package/dist/views/KSDocument.d.ts.map +1 -1
  202. package/dist/views/KSDocument.js +4 -3
  203. package/dist/views/KSDocument.js.map +1 -1
  204. package/dist/views/KnowledgeSources.d.ts.map +1 -1
  205. package/dist/views/KnowledgeSources.js +36 -14
  206. package/dist/views/KnowledgeSources.js.map +1 -1
  207. package/dist/views/MessageInput/AgentSelector.d.ts.map +1 -1
  208. package/dist/views/MessageInput/AgentSelector.js +5 -7
  209. package/dist/views/MessageInput/AgentSelector.js.map +1 -1
  210. package/dist/views/MessageInput/ButtonAgent.d.ts.map +1 -1
  211. package/dist/views/MessageInput/ButtonAgent.js +5 -4
  212. package/dist/views/MessageInput/ButtonAgent.js.map +1 -1
  213. package/dist/views/MessageInput/ButtonBar.d.ts.map +1 -1
  214. package/dist/views/MessageInput/ButtonBar.js +4 -2
  215. package/dist/views/MessageInput/ButtonBar.js.map +1 -1
  216. package/dist/views/MessageInput/ContextBar.d.ts.map +1 -1
  217. package/dist/views/MessageInput/ContextBar.js +6 -4
  218. package/dist/views/MessageInput/ContextBar.js.map +1 -1
  219. package/dist/views/MessageInput/QuickCommandSelector.js +2 -2
  220. package/dist/views/MessageInput/QuickCommandSelector.js.map +1 -1
  221. package/dist/views/MessageInput/SelectContent.d.ts.map +1 -1
  222. package/dist/views/MessageInput/SelectContent.js +35 -30
  223. package/dist/views/MessageInput/SelectContent.js.map +1 -1
  224. package/dist/views/MessageInput/UploadBar.d.ts.map +1 -1
  225. package/dist/views/MessageInput/UploadBar.js +24 -2
  226. package/dist/views/MessageInput/UploadBar.js.map +1 -1
  227. package/dist/views/MessageInput/UploadDragNDrop.d.ts.map +1 -1
  228. package/dist/views/MessageInput/UploadDragNDrop.js +3 -2
  229. package/dist/views/MessageInput/UploadDragNDrop.js.map +1 -1
  230. package/dist/views/MessageInput/dictionary.d.ts +1 -1
  231. package/dist/views/MessageInput/dictionary.d.ts.map +1 -1
  232. package/dist/views/MessageInput/dictionary.js +4 -0
  233. package/dist/views/MessageInput/dictionary.js.map +1 -1
  234. package/dist/views/MessageInput/index.d.ts.map +1 -1
  235. package/dist/views/MessageInput/index.js +4 -3
  236. package/dist/views/MessageInput/index.js.map +1 -1
  237. package/dist/views/MessageInput/styled.d.ts +3 -1
  238. package/dist/views/MessageInput/styled.d.ts.map +1 -1
  239. package/dist/views/MessageInput/styled.js +27 -11
  240. package/dist/views/MessageInput/styled.js.map +1 -1
  241. package/dist/views/MinimizedHeader.d.ts.map +1 -1
  242. package/dist/views/MinimizedHeader.js +4 -2
  243. package/dist/views/MinimizedHeader.js.map +1 -1
  244. package/dist/views/Stacks.d.ts.map +1 -1
  245. package/dist/views/Stacks.js +28 -23
  246. package/dist/views/Stacks.js.map +1 -1
  247. package/dist/views/Steps/FlowChart/NodeStep.d.ts.map +1 -1
  248. package/dist/views/Steps/FlowChart/NodeStep.js +3 -3
  249. package/dist/views/Steps/FlowChart/NodeStep.js.map +1 -1
  250. package/dist/views/Steps/StepModal.d.ts.map +1 -1
  251. package/dist/views/Steps/StepModal.js +6 -4
  252. package/dist/views/Steps/StepModal.js.map +1 -1
  253. package/dist/views/Steps/dictionary.d.ts +1 -1
  254. package/dist/views/Steps/index.d.ts.map +1 -1
  255. package/dist/views/Steps/index.js +4 -3
  256. package/dist/views/Steps/index.js.map +1 -1
  257. package/dist/views/Steps/utils.d.ts +1 -2
  258. package/dist/views/Steps/utils.d.ts.map +1 -1
  259. package/dist/views/Steps/utils.js +8 -8
  260. package/dist/views/Steps/utils.js.map +1 -1
  261. package/dist/views/Tools.js +4 -2
  262. package/dist/views/Tools.js.map +1 -1
  263. package/dist/views/Workspaces/WorkspacesTab.d.ts.map +1 -1
  264. package/dist/views/Workspaces/WorkspacesTab.js +10 -7
  265. package/dist/views/Workspaces/WorkspacesTab.js.map +1 -1
  266. package/dist/views/Workspaces/index.js +2 -4
  267. package/dist/views/Workspaces/index.js.map +1 -1
  268. package/package.json +13 -12
  269. package/src/StackspotAIWidget.tsx +33 -30
  270. package/src/app-metadata.json +17 -13
  271. package/src/chat-interceptors/quick-commands.ts +11 -5
  272. package/src/components/Accordion.tsx +75 -0
  273. package/src/components/AdaptiveTextArea.tsx +1 -1
  274. package/src/components/AgentCard/AgentCardCreate.tsx +5 -3
  275. package/src/components/AgentCard/index.tsx +7 -7
  276. package/src/components/ButtonFavorite.tsx +47 -20
  277. package/src/components/Code.tsx +36 -31
  278. package/src/components/ComponentNavigator.tsx +8 -4
  279. package/src/components/FadingOverflow.tsx +7 -6
  280. package/src/components/FallbackBoundary/ErrorBoundary.tsx +71 -0
  281. package/src/components/FallbackBoundary/Loading.tsx +14 -0
  282. package/src/components/FallbackBoundary/index.tsx +26 -0
  283. package/src/components/FileDescription.tsx +10 -14
  284. package/src/components/HistoryList.tsx +1 -1
  285. package/src/components/IconInput.tsx +73 -0
  286. package/src/components/ListResource.tsx +5 -5
  287. package/src/components/Markdown.tsx +1 -1
  288. package/src/components/Modal.tsx +4 -2
  289. package/src/components/OverlayMenu.tsx +133 -0
  290. package/src/components/ProgressBar.tsx +183 -0
  291. package/src/components/QuickStartButton.tsx +4 -5
  292. package/src/components/RightPanelForm.tsx +13 -20
  293. package/src/components/RightPanelTabs.tsx +32 -4
  294. package/src/components/Selector/index.tsx +13 -17
  295. package/src/components/Selector/styled.ts +5 -8
  296. package/src/components/StackedBadge.tsx +5 -5
  297. package/src/components/TabManager.tsx +36 -8
  298. package/src/components/ToolBadge.tsx +129 -39
  299. package/src/components/Tooltip/Tooltip.tsx +78 -0
  300. package/src/components/Tooltip/TooltipAPI.ts +101 -0
  301. package/src/components/Tooltip/context.tsx +24 -0
  302. package/src/components/Tooltip/index.ts +2 -0
  303. package/src/components/Tooltip/style.tsx +24 -0
  304. package/src/components/Tooltip/types.ts +28 -0
  305. package/src/components/WorkspaceTabNavigator.tsx +25 -22
  306. package/src/components/form/DescribedCheckboxGroup.tsx +65 -90
  307. package/src/components/form/DescribedRadioGroup.tsx +46 -79
  308. package/src/index.ts +2 -1
  309. package/src/layout.css +26 -0
  310. package/src/right-panel/DefaultPanel.tsx +7 -3
  311. package/src/state/ChatEntry.ts +4 -3
  312. package/src/state/constants.ts +2 -2
  313. package/src/types.ts +3 -4
  314. package/src/utils/tools.ts +23 -2
  315. package/src/utils/upload/FileUpload.ts +1 -2
  316. package/src/views/Agents/AgentDescription.tsx +7 -6
  317. package/src/views/Agents/AgentsPanel.tsx +12 -11
  318. package/src/views/Agents/AgentsTab.tsx +56 -37
  319. package/src/views/Chat/AgentInfo.tsx +6 -7
  320. package/src/views/Chat/ChatMessage.tsx +118 -109
  321. package/src/views/Chat/StepsList.tsx +11 -10
  322. package/src/views/Chat/styled.ts +2 -8
  323. package/src/views/ChatHistory/HistoryItem.tsx +19 -12
  324. package/src/views/ChatHistory/index.tsx +1 -1
  325. package/src/views/ChatHistory/styled.ts +5 -3
  326. package/src/views/ChatTabSelection.tsx +3 -2
  327. package/src/views/Editor.tsx +14 -9
  328. package/src/views/Home/BuiltInAgent.tsx +8 -7
  329. package/src/views/Home/CustomAgent.tsx +3 -3
  330. package/src/views/Home/index.tsx +1 -1
  331. package/src/views/Home/styled.ts +22 -21
  332. package/src/views/KSDocument.tsx +8 -7
  333. package/src/views/KnowledgeSources.tsx +66 -24
  334. package/src/views/MessageInput/AgentSelector.tsx +8 -10
  335. package/src/views/MessageInput/ButtonAgent.tsx +12 -24
  336. package/src/views/MessageInput/ButtonBar.tsx +21 -25
  337. package/src/views/MessageInput/ContextBar.tsx +14 -12
  338. package/src/views/MessageInput/QuickCommandSelector.tsx +2 -2
  339. package/src/views/MessageInput/SelectContent.tsx +68 -39
  340. package/src/views/MessageInput/UploadBar.tsx +34 -2
  341. package/src/views/MessageInput/UploadDragNDrop.tsx +5 -2
  342. package/src/views/MessageInput/dictionary.ts +4 -0
  343. package/src/views/MessageInput/index.tsx +7 -5
  344. package/src/views/MessageInput/styled.ts +28 -12
  345. package/src/views/MinimizedHeader.tsx +7 -4
  346. package/src/views/Stacks.tsx +54 -31
  347. package/src/views/Steps/FlowChart/NodeStep.tsx +4 -6
  348. package/src/views/Steps/StepModal.tsx +18 -14
  349. package/src/views/Steps/index.tsx +5 -4
  350. package/src/views/Steps/utils.tsx +9 -9
  351. package/src/views/Tools.tsx +19 -12
  352. package/src/views/Workspaces/WorkspacesTab.tsx +21 -17
  353. package/src/views/Workspaces/index.tsx +2 -4
@@ -1,12 +1,15 @@
1
- import { Button, Tab } from '@stack-spot/citric-react'
1
+ import { Button } from '@citric/core'
2
+ import { Search } from '@citric/icons'
2
3
  import { Placeholder } from '@stack-spot/portal-components/Placeholder'
3
4
  import { aiClient, workspaceAiClient } from '@stack-spot/portal-network'
4
- import { VisibilityLevelEnum } from '@stack-spot/portal-network/api/ai'
5
+ import { GetAiStackResponse, VisibilityLevelEnum } from '@stack-spot/portal-network/api/ai'
5
6
  import { WorkspaceResponse } from '@stack-spot/portal-network/api/workspace-ai'
6
7
  import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
7
- import { useEffect, useMemo, useRef, useState } from 'react'
8
+ import { ReactElement, useCallback, useEffect, useMemo, useRef, useState } from 'react'
9
+ import { ButtonFavorite } from '../components/ButtonFavorite'
8
10
  import { NavigationComponent } from '../components/ComponentNavigator'
9
11
  import { DescribedRadioGroup } from '../components/form/DescribedRadioGroup'
12
+ import { IconInput } from '../components/IconInput'
10
13
  import { RightPanelContentList } from '../components/RightPanelContentList'
11
14
  import { RightPanelTabs } from '../components/RightPanelTabs'
12
15
  import { WorkspaceTabNavigator } from '../components/WorkspaceTabNavigator'
@@ -16,6 +19,8 @@ import { useRightPanel } from '../right-panel/hooks'
16
19
  import { ChatProperties } from '../state/ChatState'
17
20
  import { checkIsTrial } from '../utils/check-is-trial'
18
21
 
22
+ type TabElement = { title: string, content: ReactElement }
23
+
19
24
  /**
20
25
  * Renders the Stack selection form in the Right Panel if this is the panel that is currently opened.
21
26
  */
@@ -49,12 +54,12 @@ const StacksPanel = () => {
49
54
  stack.current = chat.get('stack')
50
55
  }, [chat])
51
56
 
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} /> },
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} /> },
58
63
  }
59
64
  const defaultScopes: Scope[] = ['favorite', 'personal', 'shared', 'workspace', 'account']
60
65
 
@@ -65,8 +70,8 @@ const StacksPanel = () => {
65
70
  : rawScopes
66
71
 
67
72
  const tabs = scopesToRender
68
- .map(scope => scope in allTabsMap ? { key: scope, ...allTabsMap[scope] } : undefined)
69
- .filter(Boolean) as Tab[]
73
+ .map(scope => allTabsMap[scope])
74
+ .filter(Boolean) as TabElement[]
70
75
 
71
76
  return (isGroupResourcesByScope ? (
72
77
  <RightPanelTabs key={chat.id} tabs={tabs} />
@@ -86,10 +91,11 @@ export const StacksTab = ({ visibility, workspaceId, stack, showSubmitButton = t
86
91
  const t = useTranslate(dictionary)
87
92
  const { close } = useRightPanel()
88
93
  const chat = useCurrentChat()
94
+ const [filter, setFilter] = useState('')
95
+
89
96
  const listFavorites = aiClient.aiStacks.useQuery({ visibility: 'favorite' })
90
97
  const [addFavorite, pendingAddFav] = aiClient.addFavoriteStackAi.useMutation()
91
98
  const [removeFavorite, pendingRemoveFav] = aiClient.removeFavoriteStackAi.useMutation()
92
- const [submitEnabled, setSubmitEnabled] = useState(false)
93
99
 
94
100
  const removeFavoriteStack = async (idOrSlug: string) => {
95
101
  try {
@@ -140,40 +146,57 @@ export const StacksTab = ({ visibility, workspaceId, stack, showSubmitButton = t
140
146
  reject(error)
141
147
  }
142
148
  })
149
+
150
+
143
151
 
144
152
  const stacks = workspaceId
145
153
  ? workspaceAiClient.getStackFromWorkspaceAi.useQuery({ workspaceId })
146
154
  //@ts-ignore
147
155
  : aiClient.aiStacks.useQuery({ visibility, order: 'a-to-z' })
148
156
 
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])
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
+ )
155
164
 
156
165
  function submit() {
157
- if (stack.current) chat.set('stack', stack.current)
166
+ if (value) chat.set('stack', { id: value.id, label: value.name })
158
167
  close()
159
168
  }
160
169
 
170
+ const onChange = useCallback((newValue: GetAiStackResponse) => {
171
+ setValue(newValue)
172
+ stack.current = { ...newValue, label: newValue.name }
173
+ }, [])
174
+
161
175
  return (
162
176
  <>
163
177
  <div className="content">
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
- />
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} />}
175
198
  </div>
176
- {!!stacks.length && showSubmitButton && <Button onClick={submit} disabled={!submitEnabled}>{t.apply}</Button>}
199
+ {!!filtered.length && showSubmitButton && <Button onClick={submit} disabled={!value}>{t.apply}</Button>}
177
200
  </>
178
201
  )
179
202
  }
@@ -1,5 +1,5 @@
1
- import { Icon } from '@stack-spot/citric-icons'
2
- import { Text } from '@stack-spot/citric-react'
1
+ import { IconBox, Text } from '@citric/core'
2
+ import { Cog } from '@citric/icons'
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
- <Icon {...getTypeIcon(step.type)} />
27
+ <IconBox>{getTypeIcon(step.type)}</IconBox>
28
28
  <Text className="step-index">{getTitle(t, step, index)}</Text>
29
29
  {getStatusIcon(step.status)}
30
30
  </header>
@@ -36,9 +36,7 @@ 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(
40
- tool => ({ key: tool.id, name: tool.name, url: tool.image, icon: <Icon icon="Cog" /> }),
41
- )}
39
+ images={step.attempts[0].tools?.slice(0, 3).map(tool => ({ key: tool.id, name: tool.name, url: tool.image, icon: <Cog /> }))}
42
40
  />}
43
41
  </div>}
44
42
  <HandleGroup renderSource={step.type !== 'answer'} renderTarget={step.type !== 'planning'} />
@@ -1,4 +1,6 @@
1
- import { Badge, IconButton, Row, Text } from '@stack-spot/citric-react'
1
+ import { Flex, Text } from '@citric/core'
2
+ import { ChevronLeft, ChevronRight } from '@citric/icons'
3
+ import { Badge, IconButton } from '@citric/ui'
2
4
  import { theme } from '@stack-spot/portal-theme'
3
5
  import { useMemo, useState } from 'react'
4
6
  import { styled } from 'styled-components'
@@ -129,18 +131,18 @@ export const StepModal = ({ message, stepId, onClose }: Props) => {
129
131
  <div className="tool" key={tool.id}>
130
132
  <ToolBadge name={tool.name} duration={tool.duration} image={tool.image} description={tool.description} />
131
133
  {tool.input && <>
132
- <Text appearance="microtext1" color="light.700">{t.input}:</Text>
134
+ <Text appearance="microtext1" colorScheme="light.700">{t.input}:</Text>
133
135
  <Code language="json" className="tool-input" showLineNumbers={false} showActionBar>{tool.input}</Code>
134
136
  </>}
135
137
  {tool.output && <>
136
- <Text appearance="microtext1" color="light.700">{t.response}:</Text>
138
+ <Text appearance="microtext1" colorScheme="light.700">{t.response}:</Text>
137
139
  <Code language="json" className="tool-input" showLineNumbers={false} showActionBar>{tool.output}</Code>
138
140
  </>}
139
141
  </div>
140
142
  )) : undefined
141
143
 
142
144
  const title = (
143
- <Row flex={1} justifyContent="space-between">
145
+ <Flex flex={1} justifyContent="space-between" alignItems="center">
144
146
  <Text appearance="h6">{getTitle(t, step, stepIndex)}</Text>
145
147
  <ExecutionBox>
146
148
  <Text className="time" appearance="microtext1">
@@ -151,26 +153,28 @@ export const StepModal = ({ message, stepId, onClose }: Props) => {
151
153
  {step?.type === 'step' && step.attempts.length > 1 && <div className="navigator">
152
154
  {attempt > 0 && (
153
155
  <IconButton
154
- icon="ChevronLeft"
155
156
  size="xs"
156
157
  title={t.previousAttempt}
157
158
  aria-label={t.previousAttempt}
158
159
  onClick={() => setAttempt(attempt - 1)}
159
- />
160
+ >
161
+ <ChevronLeft />
162
+ </IconButton>
160
163
  )}
161
164
  <Text appearance="microtext1">{attempt + 1}/{step.attempts.length}</Text>
162
165
  {attempt < step.attempts.length - 1 && (
163
166
  <IconButton
164
- icon="ChevronRight"
165
167
  size="xs"
166
168
  title={t.nextAttempt}
167
169
  aria-label={t.nextAttempt}
168
170
  onClick={() => setAttempt(attempt + 1)}
169
- />
171
+ >
172
+ <ChevronRight />
173
+ </IconButton>
170
174
  )}
171
175
  </div>}
172
176
  </ExecutionBox>
173
- </Row>
177
+ </Flex>
174
178
  )
175
179
 
176
180
  return (
@@ -180,18 +184,18 @@ export const StepModal = ({ message, stepId, onClose }: Props) => {
180
184
  </StyledSection>}
181
185
 
182
186
  {step?.type === 'planning' && <StyledSection style={{ alignItems: 'stretch' }}>
183
- <Badge appearance="square" colorPalette="blue" style={{ alignSelf: 'start' }}>Prompt</Badge>
187
+ <Badge appearance="square" palette="blue" style={{ alignSelf: 'start' }}>Prompt</Badge>
184
188
  <Text>{step.goal}</Text>
185
189
  <ul className="steps">
186
190
  {entry.steps?.filter(s => s.type === 'step').map((s, index) => (
187
191
  <li key={index}>
188
- <Row mb={2}>
192
+ <Flex mb={2}>
189
193
  <Text>{t.step} {index + 1}: <span className="step-description">{s.input}</span></Text>
190
- </Row>
194
+ </Flex>
191
195
  {!!s.attempts[0].tools?.length && <ul className="side-by-side-tools">
192
196
  {s.attempts[0].tools.map((tool) => (
193
197
  <li key={tool.id}>
194
- <ToolBadge name={tool.name} image={tool.image} />
198
+ <ToolBadge name={tool.name} image={tool.image} appearance="round" />
195
199
  </li>
196
200
  ))}
197
201
  </ul>}
@@ -201,7 +205,7 @@ export const StepModal = ({ message, stepId, onClose }: Props) => {
201
205
  </StyledSection>}
202
206
 
203
207
  {step?.type === 'step' && step?.input && <StyledSection>
204
- <Badge appearance="square" colorPalette="blue">Prompt</Badge>
208
+ <Badge appearance="square" palette="blue">Prompt</Badge>
205
209
  <Text>{step.input}</Text>
206
210
  </StyledSection>}
207
211
  {!!tools?.length && <StyledSection>{tools}</StyledSection>}
@@ -1,5 +1,6 @@
1
- import { FallbackBoundary } from '@stack-spot/citric-react'
2
- import { lazy, useEffect } from 'react'
1
+ import { Flex } from '@citric/core'
2
+ import { LoadingCircular } from '@citric/ui'
3
+ import { lazy, Suspense, useEffect } from 'react'
3
4
  import { useWidget, useWidgetState } from '../../context/hooks'
4
5
  import { useRightPanel } from '../../right-panel/hooks'
5
6
  import { useStepsDictionary } from './dictionary'
@@ -18,9 +19,9 @@ export const Steps = () => {
18
19
 
19
20
  useEffect(() => {
20
21
  if (panel === 'steps' && message) open(
21
- <FallbackBoundary>
22
+ <Suspense fallback={<Flex alignItems="center" justifyContent="center" flex={1}><LoadingCircular /></Flex>}>
22
23
  <LazyStepsPanel key={message.messageId} chatId={message.chatId} messageId={message.messageId} />
23
- </FallbackBoundary>,
24
+ </Suspense>,
24
25
  {
25
26
  title: t.steps,
26
27
  description: t.stepsPanelDescription,
@@ -1,21 +1,21 @@
1
- import { Icon, WithIcon } from '@stack-spot/citric-icons'
2
- import { ProgressCircular } from '@stack-spot/citric-react'
1
+ import { IconBox } from '@citric/core'
2
+ import { CheckCircleFill, ListUnordered, PlayFill, TimesCircleFill } from '@citric/icons'
3
+ import { LoadingCircular } from '@citric/ui'
3
4
  import { ChatStep } from '@stack-spot/portal-network'
4
- import { theme } from '@stack-spot/portal-theme'
5
5
 
6
6
  export function getStatusIcon(status: ChatStep['status']) {
7
7
  switch (status) {
8
- case 'success': return <Icon group="fill" icon="CheckCircle" style={{ color: theme.color.success[500] }} />
9
- case 'error': return <Icon group="fill" icon="TimesCircle" style={{ color: theme.color.danger[500] }} />
10
- case 'running': return <ProgressCircular colorScheme="inverse" size="xs" />
8
+ case 'success': return <IconBox colorIcon="success.500"><CheckCircleFill /></IconBox>
9
+ case 'error': return <IconBox colorIcon="danger.500"><TimesCircleFill /></IconBox>
10
+ case 'running': return <LoadingCircular colorScheme="inverse" size="xs" />
11
11
  default: return null
12
12
  }
13
13
  }
14
14
 
15
- export function getTypeIcon(type: ChatStep['type']): WithIcon {
15
+ export function getTypeIcon(type: ChatStep['type']) {
16
16
  switch (type) {
17
- case 'planning': return { group: 'outline', icon: 'ListUnordered' }
18
- default: return { group: 'fill', icon: 'Play' }
17
+ case 'planning': return <ListUnordered />
18
+ default: return <PlayFill />
19
19
  }
20
20
  }
21
21
 
@@ -42,19 +42,26 @@ const ToolsPanel = () => {
42
42
  }, [messageId])
43
43
 
44
44
  const [toolKits] = agentToolsClient.tools.useStatefulQuery({}, { enabled: !!message?.agent?.id })
45
- const tools = useMemo(() => message?.tools?.map(id => toolById(id, toolKits) ?? { id }), [messageId, toolKits])
46
-
47
- return !!tools?.length && (
45
+ const [agent] = agentToolsClient.agent.useStatefulQuery({ agentId: message?.agent?.id || '' },
46
+ { enabled: !!message?.agent?.id })
47
+ const tools = useMemo(() => message?.tools?.map(id => toolById(id, toolKits)), [messageId, toolKits])
48
+ const customTools = useMemo(() => message?.tools?.map(id => toolById(id, agent?.toolkits?.custom_toolkits)),
49
+ [messageId, agent?.toolkits?.custom_toolkits])
50
+ return !!(tools?.length || customTools?.length) && (
48
51
  <ToolList>
49
- {tools.map((tool) => (
50
- <li key={tool.id}>
51
- <ToolBadge
52
- name={tool.name || tool.id}
53
- image={tool.image}
54
- description={tool.description}
55
- />
56
- </li>
57
- ))}
52
+ {[...(tools || []), ...(customTools || [])].map(
53
+ (tool) =>
54
+ tool && (
55
+ <li key={tool.id}>
56
+ <ToolBadge
57
+ name={tool.name || tool.id}
58
+ image={tool.image ?? ''}
59
+ description={tool.description ?? ''}
60
+ backgroundColor="light.500"
61
+ />
62
+ </li>
63
+ ),
64
+ )}
58
65
  </ToolList>
59
66
  )
60
67
  }
@@ -1,10 +1,12 @@
1
- import { Icon } from '@stack-spot/citric-icons'
2
- import { AsyncContent, Button, Center, Column, ImageBox, ImageWithFallback, Text } from '@stack-spot/citric-react'
1
+ import { Button, Flex, IconBox, Image, Text } from '@citric/core'
2
+ import { Agent, KnowledgeSource, Spaces, Stack } from '@citric/icons'
3
+ import { Avatar } from '@citric/ui'
3
4
  import { workspaceAiClient } from '@stack-spot/portal-network'
4
5
  import { WorkspaceResponse, WorkspaceVisibilityLevelEnum } from '@stack-spot/portal-network/api/workspace-ai'
5
6
  import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
6
7
  import { useTransition } from 'react'
7
8
  import { useComponentNavigation } from '../../components/ComponentNavigator'
9
+ import { Loading } from '../../components/FallbackBoundary/Loading'
8
10
  import { ListResource } from '../../components/ListResource'
9
11
  import { CardSpace, WorkspaceTabNavigator } from '../../components/WorkspaceTabNavigator'
10
12
  import { ChatProperties } from '../../state/ChatState'
@@ -14,15 +16,17 @@ import { StacksTab } from '../Stacks'
14
16
 
15
17
  const SpaceCard = ({ workspaceId }: { workspaceId: string }) => {
16
18
  const workspace = workspaceAiClient.workspaceAi.useQuery({ id: workspaceId })
17
- return <Column gap="4px">
18
- <Center gap="8px">
19
- <ImageBox size="sm" appearance="square">
20
- <ImageWithFallback src={workspace.logo ?? ''} fallback={<Icon icon="Spaces" />} />
21
- </ImageBox>
22
- <Text appearance="body2" weight="medium">{workspace.name}</Text>
23
- </Center>
24
- <Text color="light.700">{workspace.description}</Text>
25
- </Column>
19
+ return <Flex flexDirection="column" sx={{ gap: '8px' }}>
20
+ <Flex flexDirection="column" sx={{ gap: '4px' }}>
21
+ <Flex alignContent="center" alignItems="center" sx={{ gap: '8px', m: 1 }} >
22
+ <Avatar size="xxs" appearance="square" sx={{ bg: 'light.600', r: 'xxs' }}>
23
+ {workspace.logo ? <Image src={workspace.logo} /> : <IconBox> <Spaces /> </IconBox>}
24
+ </Avatar>
25
+ <Text appearance="body2" weight="medium">{workspace.name} </Text>
26
+ </Flex>
27
+ <Text colorScheme="light.700">{workspace.description}</Text>
28
+ </Flex>
29
+ </Flex>
26
30
  }
27
31
 
28
32
  export interface TabProps {
@@ -48,9 +52,9 @@ export const WorkspaceResources = ({ workspaceId, allKS, agent, stack }: Omit<Ta
48
52
  const { navigate } = useComponentNavigation<typeof workspaceTabComponents>()
49
53
  const [isPending, startTransition] = useTransition()
50
54
  const resourceTypes: WorkspaceResource[] = [
51
- { id: 'agents', resourceType: 'agent', displayName: 'Agents', workspaceId, icon: <Icon icon="Agent" /> },
52
- { id: 'ks', resourceType: 'ks', displayName: 'Knowledge Sources', workspaceId, icon: <Icon icon="KnowledgeSource" /> },
53
- { id: 'stack', resourceType: 'stack', displayName: 'Stacks', workspaceId, icon: <Icon icon="Stack" /> },
55
+ { id: 'agents', resourceType: 'agent', displayName: 'Agents', workspaceId, icon: <Agent /> },
56
+ { id: 'ks', resourceType: 'ks', displayName: 'Knowledge Sources', workspaceId, icon: <KnowledgeSource /> },
57
+ { id: 'stack', resourceType: 'stack', displayName: 'Stacks', workspaceId, icon: <Stack /> },
54
58
  ]
55
59
 
56
60
  const handleNavigate = (resource: WorkspaceResource) => {
@@ -68,14 +72,14 @@ export const WorkspaceResources = ({ workspaceId, allKS, agent, stack }: Omit<Ta
68
72
 
69
73
  return (<>
70
74
  {workspaceId && <SpaceCard workspaceId={workspaceId} />}
71
- {<AsyncContent loading={isPending}>
75
+ {isPending ? <Loading /> :
72
76
  <ListResource
73
77
  list={resourceTypes}
74
78
  keygen={w => w.id}
75
79
  renderLabel={r => <CardSpace name={r.displayName} icon={r.icon} onClick={() => handleNavigate(r)} />}
76
80
  style={{ gap: '6px', display: 'flex', flexDirection: 'column' }}
77
81
  />
78
- </AsyncContent>}
82
+ }
79
83
  </>
80
84
  )
81
85
  }
@@ -101,7 +105,7 @@ export function WorkspacesTab({ visibility, allKS, agent, stack, onSubmit }: Tab
101
105
  getNavigateParam={buildNavigateParams}
102
106
  visibility={visibility}
103
107
  />
104
- <Button className="workspace-submit" onClick={onSubmit}>{t.apply}</Button>
108
+ <Button className="workspace-submit" onClick={onSubmit} >{t.apply}</Button>
105
109
  </>
106
110
  )
107
111
  }
@@ -48,13 +48,11 @@ const WorkspacesPanel = () => {
48
48
 
49
49
  return <RightPanelTabs key={chat.id} tabs={[
50
50
  {
51
- key: 'favorites',
52
- label: t.favorites,
51
+ title: t.favorites,
53
52
  content: <WorkspacesTab key="favorite" visibility="favorite" allKS={allKS} agent={agent} stack={stack} onSubmit={onSubmit} />,
54
53
  },
55
54
  {
56
- key: 'all',
57
- label: t.all,
55
+ title: t.all,
58
56
  content: <WorkspacesTab key="all" visibility="all" allKS={allKS} agent={agent} stack={stack} onSubmit={onSubmit} />,
59
57
  },
60
58
  ]}