@stack-spot/ai-chat-widget 1.18.0-beta.0 → 1.18.0-beta.10
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.
- package/CHANGELOG.md +7 -0
- package/dist/app-metadata.json +6 -6
- package/dist/components/ComponentNavigator.d.ts +22 -5
- package/dist/components/ComponentNavigator.d.ts.map +1 -1
- package/dist/components/ComponentNavigator.js.map +1 -1
- package/dist/components/ListResource.d.ts +29 -0
- package/dist/components/ListResource.d.ts.map +1 -0
- package/dist/components/{ListGroup.js → ListResource.js} +6 -5
- package/dist/components/ListResource.js.map +1 -0
- package/dist/components/Selector/index.js +2 -2
- package/dist/components/Selector/index.js.map +1 -1
- package/dist/components/WorkspaceTabNavigator.d.ts +6 -4
- package/dist/components/WorkspaceTabNavigator.d.ts.map +1 -1
- package/dist/components/WorkspaceTabNavigator.js +9 -9
- package/dist/components/WorkspaceTabNavigator.js.map +1 -1
- package/dist/components/form/DescribedCheckboxGroup.js +1 -1
- package/dist/components/form/DescribedCheckboxGroup.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/state/ChatEntry.d.ts +4 -0
- package/dist/state/ChatEntry.d.ts.map +1 -1
- package/dist/state/ChatEntry.js.map +1 -1
- package/dist/views/Agents/AgentsPanel.js +1 -1
- package/dist/views/Agents/AgentsPanel.js.map +1 -1
- package/dist/views/Agents/AgentsTab.js.map +1 -1
- package/dist/views/Agents/dictionary.d.ts +1 -1
- package/dist/views/Agents/dictionary.d.ts.map +1 -1
- package/dist/views/Agents/dictionary.js +2 -2
- package/dist/views/Agents/dictionary.js.map +1 -1
- package/dist/views/Chat/ChatMessage.d.ts.map +1 -1
- package/dist/views/Chat/ChatMessage.js +5 -5
- package/dist/views/Chat/ChatMessage.js.map +1 -1
- package/dist/views/Chat/StepsList.js +2 -2
- package/dist/views/Chat/StepsList.js.map +1 -1
- package/dist/views/ChatHistory/utils.d.ts.map +1 -1
- package/dist/views/ChatHistory/utils.js +7 -3
- package/dist/views/ChatHistory/utils.js.map +1 -1
- package/dist/views/KnowledgeSources.js +3 -3
- package/dist/views/KnowledgeSources.js.map +1 -1
- package/dist/views/MessageInput/AgentSelector.d.ts.map +1 -1
- package/dist/views/MessageInput/AgentSelector.js +8 -5
- package/dist/views/MessageInput/AgentSelector.js.map +1 -1
- package/dist/views/MessageInput/ButtonGroup.js +2 -2
- package/dist/views/MessageInput/ButtonGroup.js.map +1 -1
- package/dist/views/MessageInput/QuickCommandSelector.d.ts.map +1 -1
- package/dist/views/MessageInput/QuickCommandSelector.js +5 -3
- package/dist/views/MessageInput/QuickCommandSelector.js.map +1 -1
- package/dist/views/MessageInput/dictionary.d.ts +1 -1
- package/dist/views/MessageInput/dictionary.d.ts.map +1 -1
- package/dist/views/MessageInput/dictionary.js +6 -6
- package/dist/views/MessageInput/dictionary.js.map +1 -1
- package/dist/views/Stacks.js +3 -3
- package/dist/views/Stacks.js.map +1 -1
- package/dist/views/Workspaces/WorkspacesTab.d.ts.map +1 -1
- package/dist/views/Workspaces/WorkspacesTab.js +6 -6
- package/dist/views/Workspaces/WorkspacesTab.js.map +1 -1
- package/dist/views/Workspaces/index.js +4 -13
- package/dist/views/Workspaces/index.js.map +1 -1
- package/package.json +3 -3
- package/src/app-metadata.json +6 -6
- package/src/components/ComponentNavigator.tsx +32 -7
- package/src/components/ListResource.tsx +60 -0
- package/src/components/Selector/index.tsx +2 -2
- package/src/components/WorkspaceTabNavigator.tsx +28 -23
- package/src/components/form/DescribedCheckboxGroup.tsx +12 -12
- package/src/index.ts +2 -0
- package/src/state/ChatEntry.ts +4 -0
- package/src/views/Agents/AgentsPanel.tsx +1 -1
- package/src/views/Agents/AgentsTab.tsx +2 -2
- package/src/views/Agents/dictionary.ts +2 -2
- package/src/views/Chat/ChatMessage.tsx +6 -5
- package/src/views/Chat/StepsList.tsx +2 -2
- package/src/views/ChatHistory/utils.ts +9 -4
- package/src/views/KnowledgeSources.tsx +5 -5
- package/src/views/MessageInput/AgentSelector.tsx +17 -6
- package/src/views/MessageInput/ButtonGroup.tsx +3 -3
- package/src/views/MessageInput/QuickCommandSelector.tsx +11 -5
- package/src/views/MessageInput/dictionary.ts +6 -6
- package/src/views/Stacks.tsx +5 -5
- package/src/views/Workspaces/WorkspacesTab.tsx +19 -16
- package/src/views/Workspaces/index.tsx +4 -13
- package/dist/components/ListGroup.d.ts +0 -46
- package/dist/components/ListGroup.d.ts.map +0 -1
- package/dist/components/ListGroup.js.map +0 -1
- package/src/components/ListGroup.tsx +0 -76
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Button, Flex, IconBox, Image, Text } from '@citric/core';
|
|
3
|
-
import { Agent,
|
|
3
|
+
import { Agent, KnowledgeSource, Spaces, Stack } from '@citric/icons';
|
|
4
4
|
import { Avatar } from '@citric/ui';
|
|
5
5
|
import { workspaceAiClient } from '@stack-spot/portal-network';
|
|
6
6
|
import { useTranslate } from '@stack-spot/portal-translate';
|
|
7
7
|
import { useTransition } from 'react';
|
|
8
8
|
import { useComponentNavigation } from '../../components/ComponentNavigator.js';
|
|
9
|
-
import {
|
|
9
|
+
import { Loading } from '../../components/FallbackBoundary/Loading.js';
|
|
10
|
+
import { ListResource } from '../../components/ListResource.js';
|
|
10
11
|
import { CardSpace, WorkspaceTabNavigator } from '../../components/WorkspaceTabNavigator.js';
|
|
11
12
|
import { AgentsTab } from '../Agents/AgentsTab.js';
|
|
12
13
|
import { KnowledgeSourcesTab } from '../KnowledgeSources.js';
|
|
13
14
|
import { StacksTab } from '../Stacks.js';
|
|
14
15
|
const SpaceCard = ({ workspaceId }) => {
|
|
15
16
|
const workspace = workspaceAiClient.workspaceAi.useQuery({ id: workspaceId });
|
|
16
|
-
return
|
|
17
|
-
? _jsx(Image, { src: workspace.logo })
|
|
18
|
-
: _jsx(Avatar, { size: "xxs", appearance: "square", sx: { bg: 'light.500' }, children: _jsx(IconBox, { children: _jsx(Circle, {}) }) }), _jsxs(Text, { appearance: "body2", weight: "medium", children: [workspace.name, " "] })] }), _jsx(Text, { colorScheme: "light.700", children: workspace.description })] });
|
|
17
|
+
return _jsx(Flex, { flexDirection: "column", sx: { gap: '8px' }, children: _jsxs(Flex, { flexDirection: "column", sx: { gap: '4px' }, children: [_jsxs(Flex, { alignContent: "center", alignItems: "center", sx: { gap: '8px', m: 1 }, children: [_jsx(Avatar, { size: "xxs", appearance: "square", sx: { bg: 'light.600', r: 'xxs' }, children: workspace.logo ? _jsx(Image, { src: workspace.logo }) : _jsxs(IconBox, { children: [" ", _jsx(Spaces, {}), " "] }) }), _jsxs(Text, { appearance: "body2", weight: "medium", children: [workspace.name, " "] })] }), _jsx(Text, { colorScheme: "light.700", children: workspace.description })] }) });
|
|
19
18
|
};
|
|
20
19
|
const showSubmitButton = false;
|
|
21
20
|
export const WorkspaceResources = ({ workspaceId, allKS, agent, stack }) => {
|
|
@@ -36,7 +35,8 @@ export const WorkspaceResources = ({ workspaceId, allKS, agent, stack }) => {
|
|
|
36
35
|
navigate({ component: 'stack', props: { visibility: 'workspace', stack, workspaceId, showSubmitButton }, fullScreen: true });
|
|
37
36
|
});
|
|
38
37
|
};
|
|
39
|
-
return (_jsxs(_Fragment, { children: [workspaceId && _jsx(SpaceCard, { workspaceId: workspaceId }),
|
|
38
|
+
return (_jsxs(_Fragment, { children: [workspaceId && _jsx(SpaceCard, { workspaceId: workspaceId }), isPending ? _jsx(Loading, {}) :
|
|
39
|
+
_jsx(ListResource, { list: resourceTypes, keygen: w => w.id, renderLabel: r => _jsx(CardSpace, { name: r.displayName, icon: r.icon, onClick: () => handleNavigate(r) }), style: { gap: '6px', display: 'flex', flexDirection: 'column' } })] }));
|
|
40
40
|
};
|
|
41
41
|
const workspaceTabComponents = {
|
|
42
42
|
workspaceResource: WorkspaceResources,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspacesTab.js","sourceRoot":"","sources":["../../../src/views/Workspaces/WorkspacesTab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"WorkspacesTab.js","sourceRoot":"","sources":["../../../src/views/Workspaces/WorkspacesTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -51,24 +51,15 @@ const WorkspacesPanel = () => {
|
|
|
51
51
|
};
|
|
52
52
|
const dictionary = {
|
|
53
53
|
en: {
|
|
54
|
-
title: '
|
|
55
|
-
description: 'By selecting a
|
|
56
|
-
apply: 'Apply',
|
|
54
|
+
title: 'Spot',
|
|
55
|
+
description: 'By selecting a spot, its Knowledge Sources (KSs), Agents, Quick Commands and Stacks Ai will be consulted to generate the answers.',
|
|
57
56
|
noSearchResults: "Your search didn't yield results.",
|
|
58
|
-
noSearchResultsDescription: 'Please, try another search term.',
|
|
59
|
-
noData: 'There are no spaces yet.',
|
|
60
|
-
noDataDescription: 'Use the AI portal to create new spaces.',
|
|
61
57
|
all: 'All',
|
|
62
58
|
favorites: 'Favorites',
|
|
63
59
|
},
|
|
64
60
|
pt: {
|
|
65
|
-
title: '
|
|
66
|
-
description: 'Ao selecionar um
|
|
67
|
-
apply: 'Aplicar',
|
|
68
|
-
noSearchResults: 'Sua busca não produziu resultados',
|
|
69
|
-
noSearchResultsDescription: 'Por favor, tente outra busca.',
|
|
70
|
-
noData: 'Ainda não há spaces.',
|
|
71
|
-
noDataDescription: 'Use o Portal AI para criar novos spaces.',
|
|
61
|
+
title: 'Spot',
|
|
62
|
+
description: 'Ao selecionar um spot, seus Knowledge Sources (KSs), Agentes, Quick Commands e Stacks Ai serão consultados para gerar as respostas.',
|
|
72
63
|
all: 'Todos',
|
|
73
64
|
favorites: 'Favoritos',
|
|
74
65
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/Workspaces/index.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/Workspaces/index.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stack-spot/ai-chat-widget",
|
|
3
|
-
"version": "1.18.0-beta.
|
|
3
|
+
"version": "1.18.0-beta.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"peerDependencies": {
|
|
13
13
|
"@citric/core": "^6.4.0",
|
|
14
14
|
"@stack-spot/portal-components": "^2.22.1",
|
|
15
|
-
"@citric/icons": "^5.
|
|
16
|
-
"@stack-spot/portal-network": "^0.119.
|
|
15
|
+
"@citric/icons": "^5.11.0",
|
|
16
|
+
"@stack-spot/portal-network": "^0.119.1",
|
|
17
17
|
"@citric/ui": "^6.7.0",
|
|
18
18
|
"@stack-spot/portal-theme": "^1.0.0",
|
|
19
19
|
"@stack-spot/portal-translate": "^1.1.0",
|
package/src/app-metadata.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stack-spot/ai-chat-widget",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"date": "
|
|
3
|
+
"version": "1.18.0-beta.10",
|
|
4
|
+
"date": "Fri May 02 2025 11:09:02 GMT-0300 (Brasilia Standard Time)",
|
|
5
5
|
"dependencies": [
|
|
6
6
|
{
|
|
7
7
|
"name": "@stack-spot/app-metadata",
|
|
@@ -93,11 +93,11 @@
|
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
95
|
"name": "@citric/icons",
|
|
96
|
-
"version": "5.
|
|
96
|
+
"version": "5.11.0(react@18.2.0)"
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
"name": "@citric/ui",
|
|
100
|
-
"version": "6.7.0(@citric/core@6.4.0(lodash@4.17.21)(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)))(@citric/icons@5.
|
|
100
|
+
"version": "6.7.0(@citric/core@6.4.0(lodash@4.17.21)(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)))(@citric/icons@5.11.0(react@18.2.0))(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0))"
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
"name": "@dagrejs/dagre",
|
|
@@ -109,11 +109,11 @@
|
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
"name": "@stack-spot/portal-components",
|
|
112
|
-
"version": "2.22.1(@citric/core@6.4.0(lodash@4.17.21)(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)))(@citric/icons@5.
|
|
112
|
+
"version": "2.22.1(@citric/core@6.4.0(lodash@4.17.21)(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)))(@citric/icons@5.11.0(react@18.2.0))(@citric/ui@6.7.0(@citric/core@6.4.0(lodash@4.17.21)(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)))(@citric/icons@5.11.0(react@18.2.0))(lodash@4.17.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)))(@stack-spot/portal-theme@1.1.0(@citric/core@6.4.0(lodash@4.17.21)(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@6.1.10(react-dom@18.2.0(react@18.2.0))(react@18.2.0)))(@stack-spot/portal-translate@1.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.3.11)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)"
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"name": "@stack-spot/portal-network",
|
|
116
|
-
"version": "0.119.
|
|
116
|
+
"version": "0.119.1(@stack-spot/auth@5.3.2)(@stack-spot/opa@2.5.0(@stack-spot/auth@5.3.2)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@stack-spot/portal-translate@1.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@tanstack/react-query@5.59.16(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"name": "@stack-spot/portal-theme",
|
|
@@ -3,25 +3,50 @@ import { ArrowLeft } from '@citric/icons'
|
|
|
3
3
|
import { IconButton } from '@citric/ui'
|
|
4
4
|
import { createContext, useCallback, useContext, useMemo, useState } from 'react'
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Map of string keys to React components.
|
|
8
|
+
*/
|
|
6
9
|
export type NavigationMap = Record<string, React.ComponentType<any>>
|
|
7
10
|
|
|
8
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Navigation component describing which component to render and its props.
|
|
13
|
+
*/
|
|
14
|
+
export type NavigationComponent<T extends NavigationMap, K extends keyof T = keyof T> = {
|
|
15
|
+
/** Component key to render. */
|
|
9
16
|
component: K,
|
|
17
|
+
|
|
18
|
+
/** Props for the component. */
|
|
10
19
|
props?: T[K] extends React.ComponentType<infer P> ? P : never,
|
|
20
|
+
|
|
21
|
+
/** Render in fullscreen mode. */
|
|
11
22
|
fullScreen?: boolean,
|
|
12
23
|
}
|
|
13
24
|
|
|
14
25
|
export interface NavigationContextType<T extends NavigationMap> {
|
|
15
|
-
|
|
26
|
+
/** Navigate to a new component. */
|
|
27
|
+
navigate: <K extends keyof T>(item: NavigationComponent<T, K>) => Promise<void>,
|
|
28
|
+
|
|
29
|
+
/** Go back to previous component. */
|
|
16
30
|
goBack: () => void,
|
|
31
|
+
|
|
32
|
+
/** True if can go back. */
|
|
17
33
|
canGoBack: boolean,
|
|
18
|
-
|
|
34
|
+
|
|
35
|
+
/** Current component. */
|
|
36
|
+
currentItem: NavigationComponent<T>,
|
|
19
37
|
}
|
|
20
38
|
|
|
21
39
|
export interface ComponentNavigatorProps<T extends NavigationMap, K extends keyof T> {
|
|
22
|
-
|
|
40
|
+
/** Initial component to render. */
|
|
41
|
+
initialItem: NavigationComponent<T, K>,
|
|
42
|
+
|
|
43
|
+
/** Map of available components. */
|
|
23
44
|
components: T,
|
|
24
|
-
|
|
45
|
+
|
|
46
|
+
/** Optional title renderer. */
|
|
47
|
+
renderTitle?: (item: NavigationComponent<T, keyof T>) => React.ReactNode,
|
|
48
|
+
|
|
49
|
+
/** Optional CSS class. */
|
|
25
50
|
className?: string,
|
|
26
51
|
}
|
|
27
52
|
|
|
@@ -33,10 +58,10 @@ export function ComponentNavigator<T extends NavigationMap, K extends keyof T>({
|
|
|
33
58
|
renderTitle,
|
|
34
59
|
className,
|
|
35
60
|
}: ComponentNavigatorProps<T, K>) {
|
|
36
|
-
const [navigationStack, setNavigationStack] = useState<
|
|
61
|
+
const [navigationStack, setNavigationStack] = useState<NavigationComponent<T>[]>([initialItem])
|
|
37
62
|
const currentItem = navigationStack[navigationStack.length - 1]
|
|
38
63
|
|
|
39
|
-
const navigate = useCallback((item:
|
|
64
|
+
const navigate = useCallback((item: NavigationComponent<T>) => { setNavigationStack((prev) => [...prev, item]) }, [])
|
|
40
65
|
const canGoBack = navigationStack.length > 1
|
|
41
66
|
const goBack = useCallback(() => {
|
|
42
67
|
if (canGoBack) {
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Box, Flex, Text } from '@citric/core'
|
|
2
|
+
import { WithStyle } from '@stack-spot/portal-theme'
|
|
3
|
+
import { useMemo } from 'react'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @template T Type of list item.
|
|
8
|
+
*/
|
|
9
|
+
interface ListGroupProps<T> extends WithStyle {
|
|
10
|
+
|
|
11
|
+
/** Items to show. */
|
|
12
|
+
list: T[],
|
|
13
|
+
|
|
14
|
+
/** Render the label for an item. */
|
|
15
|
+
renderLabel: (item: T) => React.ReactNode,
|
|
16
|
+
|
|
17
|
+
/** Optional: element before label. */
|
|
18
|
+
renderBeforeElement?: (item: T) => React.ReactNode,
|
|
19
|
+
|
|
20
|
+
/** Optional: element after label. */
|
|
21
|
+
renderAfterElement?: (item: T) => React.ReactNode,
|
|
22
|
+
|
|
23
|
+
/** Optional: custom class name per item. */
|
|
24
|
+
optionClassName?: (item: T) => string | undefined,
|
|
25
|
+
|
|
26
|
+
/** Optional: custom style per item. */
|
|
27
|
+
optionStyle?: (item: T) => React.CSSProperties | undefined,
|
|
28
|
+
|
|
29
|
+
/** Unique key for each item. */
|
|
30
|
+
keygen: (item: T) => React.Key,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Renders a customizable list of items.
|
|
35
|
+
*
|
|
36
|
+
* @template T Type of list item.
|
|
37
|
+
*/
|
|
38
|
+
export function ListResource<T>({ list, renderLabel, renderBeforeElement, renderAfterElement, className, keygen, style }
|
|
39
|
+
: ListGroupProps<T>) {
|
|
40
|
+
const items = useMemo(() =>
|
|
41
|
+
list.map((listItem) => {
|
|
42
|
+
const label = renderLabel(listItem)
|
|
43
|
+
const content = typeof label === 'string' ? <Text>{label}</Text> : label
|
|
44
|
+
return (
|
|
45
|
+
<li key={keygen(listItem)}>
|
|
46
|
+
<Flex alignItems="center">
|
|
47
|
+
{renderBeforeElement?.(listItem)}
|
|
48
|
+
{content}
|
|
49
|
+
{renderAfterElement?.(listItem)}
|
|
50
|
+
</Flex>
|
|
51
|
+
</li>
|
|
52
|
+
)
|
|
53
|
+
}), [list])
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<Box as="ul" m={0} p={0} w={12} style={style} className={className}>
|
|
57
|
+
{items}
|
|
58
|
+
</Box>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
@@ -269,7 +269,7 @@ const dictionary = {
|
|
|
269
269
|
account: 'Account',
|
|
270
270
|
shared: 'Shared',
|
|
271
271
|
builtIn: 'Built-in',
|
|
272
|
-
workspace: '
|
|
272
|
+
workspace: 'Spot',
|
|
273
273
|
error: 'Could not load the $0s.',
|
|
274
274
|
noData: 'You don\'t have any $0 yet.',
|
|
275
275
|
noResults: 'There are no $0s to show here.',
|
|
@@ -281,7 +281,7 @@ const dictionary = {
|
|
|
281
281
|
personal: 'Pessoal',
|
|
282
282
|
account: 'Conta',
|
|
283
283
|
shared: 'Compartilhado',
|
|
284
|
-
workspace: '
|
|
284
|
+
workspace: 'Spot',
|
|
285
285
|
builtIn: 'Embutido',
|
|
286
286
|
error: 'Não foi possível carregar os $0s.',
|
|
287
287
|
noData: 'Você ainda não possui $0s.',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Box, Flex, IconBox, Text } from '@citric/core'
|
|
2
|
-
import { ArrowRight,
|
|
1
|
+
import { Box, Flex, IconBox, Image, Text } from '@citric/core'
|
|
2
|
+
import { ArrowRight, Search, Spaces, Times } from '@citric/icons'
|
|
3
3
|
import { Avatar, IconButton } from '@citric/ui'
|
|
4
4
|
import { Placeholder } from '@stack-spot/portal-components/Placeholder'
|
|
5
5
|
import { workspaceAiClient } from '@stack-spot/portal-network'
|
|
@@ -8,11 +8,18 @@ import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
|
|
|
8
8
|
import { memo, useMemo, useState } from 'react'
|
|
9
9
|
import { useRightPanel } from '../right-panel/hooks'
|
|
10
10
|
import { ButtonFavorite } from './ButtonFavorite'
|
|
11
|
-
import { ComponentNavigator, ComponentNavigatorProps,
|
|
11
|
+
import { ComponentNavigator, ComponentNavigatorProps, NavigationComponent, NavigationMap, useComponentNavigation } from './ComponentNavigator'
|
|
12
12
|
import { IconInput } from './IconInput'
|
|
13
|
-
import {
|
|
13
|
+
import { ListResource } from './ListResource'
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
interface CardSpaceProps {
|
|
16
|
+
onClick: VoidFunction,
|
|
17
|
+
name: string,
|
|
18
|
+
icon: React.ReactElement,
|
|
19
|
+
logoUrl?: string | null,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const CardSpace = ({ onClick, name, icon, logoUrl }: CardSpaceProps) =>
|
|
16
23
|
<Flex
|
|
17
24
|
onClick={onClick}
|
|
18
25
|
flex={1}
|
|
@@ -24,13 +31,11 @@ export const CardSpace = ({ onClick, name, icon }: { onClick: VoidFunction, name
|
|
|
24
31
|
p={3}
|
|
25
32
|
sx={{ cursor: 'pointer' }}
|
|
26
33
|
>
|
|
27
|
-
<Flex alignContent="center" alignItems="center" sx={{ gap: '8px' }} >
|
|
28
|
-
<Avatar size="xxs" appearance="square" sx={{ bg: 'light.600', r: 'xxs'
|
|
29
|
-
<IconBox>
|
|
30
|
-
{icon}
|
|
31
|
-
</IconBox>
|
|
34
|
+
<Flex alignContent="center" alignItems="center" sx={{ gap: '8px', m: 1 }} >
|
|
35
|
+
<Avatar size="xxs" appearance="square" sx={{ bg: 'light.600', r: 'xxs' }}>
|
|
36
|
+
{logoUrl ? <Image src={logoUrl} /> : <IconBox> {icon} </IconBox>}
|
|
32
37
|
</Avatar>
|
|
33
|
-
<Text>{name}</Text>
|
|
38
|
+
<Text appearance="body2">{name}</Text>
|
|
34
39
|
</Flex>
|
|
35
40
|
<IconButton><ArrowRight /></IconButton>
|
|
36
41
|
</Flex>
|
|
@@ -89,14 +94,13 @@ const WorkspaceSourcesTab = ({ visibility, onClick }: WorkspaceSourcesTabProps)
|
|
|
89
94
|
<Box w={12}>
|
|
90
95
|
<IconInput icon={<Search />} value={filter} onChange={setFilter} className="search" />
|
|
91
96
|
</Box>
|
|
97
|
+
|
|
92
98
|
{!!filtered.length &&
|
|
93
|
-
<
|
|
99
|
+
<ListResource
|
|
94
100
|
list={filtered}
|
|
95
101
|
keygen={w => w.id}
|
|
96
|
-
onClick={onClick}
|
|
97
102
|
style={{ gap: '6px', display: 'flex', flexDirection: 'column' }}
|
|
98
|
-
renderLabel={w => <CardSpace name={w.name} icon={<
|
|
99
|
-
renderDescription={w => w.description}
|
|
103
|
+
renderLabel={w => <CardSpace name={w.name} logoUrl={w.logo} icon={<Spaces />} onClick={() => onClick(w)} />}
|
|
100
104
|
renderAfterElement={(w) =>
|
|
101
105
|
<ButtonFavorite favorite={{ idOrSlug: w?.id, listFavorites, onAddFavorite, onRemoveFavorite }} />}
|
|
102
106
|
optionClassName={w => (filter && !w.name.toLocaleLowerCase().includes(filter.toLocaleLowerCase()))
|
|
@@ -106,29 +110,30 @@ const WorkspaceSourcesTab = ({ visibility, onClick }: WorkspaceSourcesTabProps)
|
|
|
106
110
|
className="option-list"
|
|
107
111
|
/>
|
|
108
112
|
}
|
|
109
|
-
{
|
|
110
|
-
|
|
111
|
-
|
|
113
|
+
<Box w={12}>
|
|
114
|
+
{!!workspaces.length && !filtered.length &&
|
|
115
|
+
<Placeholder title={t.noSearchResults} description={t.noSearchResultsDescription} className="no-data-placeholder" />}
|
|
116
|
+
{!workspaces.length && <Placeholder title={t.noData} description={t.noDataDescription} />}
|
|
117
|
+
</Box>
|
|
112
118
|
</>
|
|
113
119
|
)
|
|
114
120
|
}
|
|
115
121
|
|
|
116
122
|
|
|
117
|
-
const WorkspaceHeader = <T extends NavigationMap, K extends keyof T>({ data }: { data:
|
|
123
|
+
const WorkspaceHeader = <T extends NavigationMap, K extends keyof T>({ data }: { data: NavigationComponent<T, K> }) => {
|
|
118
124
|
const { close: closeRightPanel } = useRightPanel()
|
|
119
125
|
const workspaceId = (data.props as any)['workspaceId']
|
|
120
126
|
if (!workspaceId) return
|
|
121
127
|
|
|
122
128
|
const workspace = workspaceAiClient.workspaceAi.useQuery({ id: workspaceId })
|
|
123
129
|
return <Flex justifyContent="space-between" alignItems="center" flex={1}>
|
|
124
|
-
{data.component === 'workspaceResource' ? '
|
|
130
|
+
{data.component === 'workspaceResource' ? 'Spots' : workspace.name}
|
|
125
131
|
{data.fullScreen && <IconButton title={'t.close'} aria-label={'t.close'} onClick={closeRightPanel}> <Times /> </IconButton>}
|
|
126
132
|
</Flex>
|
|
127
133
|
}
|
|
128
134
|
|
|
129
|
-
|
|
130
135
|
interface WorkspaceTabNavigatorProps {
|
|
131
|
-
getNavigateParam: (workspace: WorkspaceResponse) =>
|
|
136
|
+
getNavigateParam: (workspace: WorkspaceResponse) => NavigationComponent<NavigationMap, string>,
|
|
132
137
|
visibility?: WorkspaceVisibilityLevelEnum,
|
|
133
138
|
className?: string,
|
|
134
139
|
}
|
|
@@ -164,7 +169,7 @@ const dictionary = {
|
|
|
164
169
|
noSearchResultsDescription: 'Por favor, tente outra busca.',
|
|
165
170
|
noData: 'Ainda não há spaces.',
|
|
166
171
|
noDataDescription: 'Use o Portal AI para criar novos spaces.',
|
|
167
|
-
apply: '
|
|
172
|
+
apply: 'Aplicar',
|
|
168
173
|
},
|
|
169
174
|
} satisfies Dictionary
|
|
170
175
|
|
|
@@ -11,17 +11,17 @@ import { CheckProps } from './types'
|
|
|
11
11
|
* The description in placed under the label and checkbox as an accordion.
|
|
12
12
|
*/
|
|
13
13
|
export function DescribedCheckboxGroup<T>({
|
|
14
|
-
keygen,
|
|
15
|
-
onChange,
|
|
16
|
-
options,
|
|
17
|
-
renderDescription,
|
|
18
|
-
renderLabel,
|
|
19
|
-
renderBeforeElement,
|
|
20
|
-
renderAfterElement,
|
|
21
|
-
optionClassName,
|
|
22
|
-
optionStyle,
|
|
23
|
-
value,
|
|
24
|
-
className,
|
|
14
|
+
keygen,
|
|
15
|
+
onChange,
|
|
16
|
+
options,
|
|
17
|
+
renderDescription,
|
|
18
|
+
renderLabel,
|
|
19
|
+
renderBeforeElement,
|
|
20
|
+
renderAfterElement,
|
|
21
|
+
optionClassName,
|
|
22
|
+
optionStyle,
|
|
23
|
+
value,
|
|
24
|
+
className,
|
|
25
25
|
style }: CheckProps<T>) {
|
|
26
26
|
const t = useTranslate(dictionary)
|
|
27
27
|
const allSelected = options.length > 0 && options.every(option => value.includes(option))
|
|
@@ -67,7 +67,7 @@ export function DescribedCheckboxGroup<T>({
|
|
|
67
67
|
}), [options, value])
|
|
68
68
|
|
|
69
69
|
return <RadioCheckBox style={style} className={className}>
|
|
70
|
-
<Flex as="li" alignItems="center"
|
|
70
|
+
<Flex as="li" alignItems="center" ml={3} pl={1}>
|
|
71
71
|
<Checkbox
|
|
72
72
|
checked={allSelected}
|
|
73
73
|
onChange={handleSelectAll}
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* Attention: in order for the package "page" to work without linking the lib, we must export types separately, using the "type" keyword */
|
|
2
2
|
|
|
3
|
+
export { ProgressBar } from './components/ProgressBar'
|
|
3
4
|
export { QuickStartButton } from './components/QuickStartButton'
|
|
4
5
|
export { AIWidgetProvider } from './context/AIWidgetProvider'
|
|
5
6
|
export * from './context/hooks'
|
|
@@ -7,6 +8,7 @@ export { getFeaturesWithDefaults } from './features'
|
|
|
7
8
|
export type { AIWidgetFeatures, ChatFeatures } from './features'
|
|
8
9
|
export { StackspotAIWidget } from './StackspotAIWidget'
|
|
9
10
|
export { ChatEntry } from './state/ChatEntry'
|
|
11
|
+
export type { ChatAction } from './state/ChatEntry'
|
|
10
12
|
export { ChatState } from './state/ChatState'
|
|
11
13
|
export type { MessageInterceptor } from './state/ChatState'
|
|
12
14
|
export { ChatTabsController } from './state/ChatTabsController'
|
package/src/state/ChatEntry.ts
CHANGED
|
@@ -30,7 +30,7 @@ export const AgentsPanel = () => {
|
|
|
30
30
|
{ title: t.builtin, content: <AgentsTab key="builtin" visibility="BUILT-IN" agent={agent} /> },
|
|
31
31
|
{ title: t.personal, content: <AgentsTab key="personal" visibility="PERSONAL" agent={agent} /> },
|
|
32
32
|
{ title: t.shared, content: <AgentsTab key="shared" visibility="SHARED" agent={agent} /> },
|
|
33
|
-
{ title: t.
|
|
33
|
+
{ title: t.spots, content: <AgentsTabWorkspace key="workspace" visibility="WORKSPACE" agent={agent} /> },
|
|
34
34
|
{ title: t.account, content: <AgentsTab key="account" visibility="ACCOUNT" agent={agent} /> },
|
|
35
35
|
|
|
36
36
|
], [t, isTrial, agent])
|
|
@@ -7,7 +7,7 @@ import { AgentResponse, VisibilityLevel } from '@stack-spot/portal-network/api/a
|
|
|
7
7
|
import { WorkspaceResponse } from '@stack-spot/portal-network/api/workspace-ai'
|
|
8
8
|
import { useCallback, useMemo, useState } from 'react'
|
|
9
9
|
import { ButtonFavorite } from '../../components/ButtonFavorite'
|
|
10
|
-
import {
|
|
10
|
+
import { NavigationComponent } from '../../components/ComponentNavigator'
|
|
11
11
|
import { DescribedRadioGroup } from '../../components/form/DescribedRadioGroup'
|
|
12
12
|
import { IconInput } from '../../components/IconInput'
|
|
13
13
|
import { WorkspaceTabNavigator } from '../../components/WorkspaceTabNavigator'
|
|
@@ -119,7 +119,7 @@ export const AgentsTab = ({ visibility, workspaceId, agent, showSubmitButton = t
|
|
|
119
119
|
export function AgentsTabWorkspace({ agent, visibility, showSubmitButton }: AgentTabProps) {
|
|
120
120
|
const workspaceTabComponents = useMemo(() => ({ agent: AgentsTab }), [agent])
|
|
121
121
|
|
|
122
|
-
const buildNavigateParams = (workspace: WorkspaceResponse):
|
|
122
|
+
const buildNavigateParams = (workspace: WorkspaceResponse): NavigationComponent<typeof workspaceTabComponents> => ({
|
|
123
123
|
component: 'agent',
|
|
124
124
|
props: { visibility, workspaceId: workspace.id, agent, showSubmitButton },
|
|
125
125
|
})
|
|
@@ -17,7 +17,7 @@ const dictionary = {
|
|
|
17
17
|
description: 'Description',
|
|
18
18
|
favorites: 'Favorites',
|
|
19
19
|
tools: 'Tools',
|
|
20
|
-
|
|
20
|
+
spots: 'Spots',
|
|
21
21
|
},
|
|
22
22
|
pt: {
|
|
23
23
|
title: 'Agentes',
|
|
@@ -35,7 +35,7 @@ const dictionary = {
|
|
|
35
35
|
description: 'Descrição',
|
|
36
36
|
favorites: 'Favoritos',
|
|
37
37
|
tools: 'Ferramentas',
|
|
38
|
-
|
|
38
|
+
spots: 'Spots',
|
|
39
39
|
|
|
40
40
|
},
|
|
41
41
|
} satisfies Dictionary
|
|
@@ -61,7 +61,8 @@ const RenderInputsEntry = ({ isLast, entry, value, setValue, labels, setLabels }
|
|
|
61
61
|
|
|
62
62
|
const renderInputs = () => {
|
|
63
63
|
if (entry.type === 'input-text') {
|
|
64
|
-
return <Input name={entry.name}
|
|
64
|
+
return <Input name={entry.name}
|
|
65
|
+
value={value[0] ?? ''}
|
|
65
66
|
sx={{ maxWidth: '500px' }}
|
|
66
67
|
autoFocus
|
|
67
68
|
{...entry.validations} onChange={(data) => setValue([data.target.value])} required={entry.required} />
|
|
@@ -113,7 +114,7 @@ const RenderInputsEntry = ({ isLast, entry, value, setValue, labels, setLabels }
|
|
|
113
114
|
|
|
114
115
|
if (entry.type === 'input-checkbox') {
|
|
115
116
|
return <Flex className="checkbox-group">
|
|
116
|
-
{entry.options?.map((option) => (<Flex w={6} key={option.label} alignItems="center" className="checkbox-item">
|
|
117
|
+
{entry.options?.map((option) => (<Flex as="label" w={6} key={option.label} alignItems="center" className="checkbox-item">
|
|
117
118
|
<Checkbox name={entry.name} key={option.label} onChange={(data) => {
|
|
118
119
|
if (data.target.checked) {
|
|
119
120
|
setValue([...value, option.label])
|
|
@@ -159,8 +160,8 @@ const RenderInputsEntry = ({ isLast, entry, value, setValue, labels, setLabels }
|
|
|
159
160
|
export const ChatMessage = ({ message, username, isLast }: Props) => {
|
|
160
161
|
const t = useTranslate(dictionary)
|
|
161
162
|
const [liked, setLiked] = useState<boolean | undefined>()
|
|
162
|
-
const [value, setValue] = useState<string[]>([])
|
|
163
|
-
const [labels, setLabels] = useState<string[]>([])
|
|
163
|
+
const [value, setValue] = useState<string[]>(message.getValue()?.initialValue ?? [])
|
|
164
|
+
const [labels, setLabels] = useState<string[]>(message.getValue()?.initialValue ?? [])
|
|
164
165
|
const entry = useChatEntry(message)
|
|
165
166
|
const dateFormatter = useDateFormatter()
|
|
166
167
|
const userInfo = entry.agentType === 'user' ? <Avatar size="xs">{username}</Avatar> : <AgentInfo agent={entry.agent} />
|
|
@@ -267,7 +268,7 @@ export const ChatMessage = ({ message, username, isLast }: Props) => {
|
|
|
267
268
|
}
|
|
268
269
|
|
|
269
270
|
return (entry.content || entry.error || !!entry.steps?.length) && (
|
|
270
|
-
<li className={entry.agentType} ref={ref}>
|
|
271
|
+
<li key={entry.messageId} className={entry.agentType} ref={ref}>
|
|
271
272
|
<div className="chat-message" ref={chatRef} onKeyDown={handleKeyDown} tabIndex={0}>
|
|
272
273
|
<div className={`user-info ${entry.agentType}`}>{userInfo}</div>
|
|
273
274
|
{(entry.content || entry.steps) && <div className={listToClass(['message-content', entry.card && 'card', entry.type])}>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Button, IconBox, Text } from '@citric/core'
|
|
2
|
-
import { CheckCircleFill,
|
|
2
|
+
import { CheckCircleFill, PlayFill, Spaces, TimesCircleFill } from '@citric/icons'
|
|
3
3
|
import { LoadingCircular } from '@citric/ui'
|
|
4
4
|
import { AnimatedHeight } from '@stack-spot/portal-components/AnimatedHeight'
|
|
5
5
|
import { ChatStep, StepChatStep } from '@stack-spot/portal-network'
|
|
@@ -27,7 +27,7 @@ function getStatusIcon(status: ChatStep['status']) {
|
|
|
27
27
|
switch (status) {
|
|
28
28
|
case 'error': return <IconBox {...iconBoxProps}><TimesCircleFill /></IconBox>
|
|
29
29
|
case 'success': return <IconBox {...iconBoxProps}><CheckCircleFill /></IconBox>
|
|
30
|
-
case 'pending': return <IconBox {...iconBoxProps}><
|
|
30
|
+
case 'pending': return <IconBox {...iconBoxProps}><Spaces /></IconBox>
|
|
31
31
|
case 'running': return <LoadingCircular className="loading" colorScheme="inverse" size="xs" />
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -44,14 +44,19 @@ export async function findWorkspace(id: string | null): Promise<ChatProperties['
|
|
|
44
44
|
*/
|
|
45
45
|
export async function getAllAgents(): Promise<LabeledWithImage[]> {
|
|
46
46
|
try {
|
|
47
|
-
const [
|
|
48
|
-
agentClient.agents.query({}),
|
|
47
|
+
const [agentsAccount, agentsPersonal, agentsShared, publicAgents, workspaceAgents] = await Promise.all([
|
|
48
|
+
agentClient.agents.query({ visibility: 'ACCOUNT' }),
|
|
49
|
+
agentClient.agents.query({ visibility: 'PERSONAL' }),
|
|
50
|
+
agentClient.agents.query({ visibility: 'SHARED' }),
|
|
49
51
|
agentClient.publicAgents.query({}),
|
|
52
|
+
|
|
50
53
|
workspaceAiClient.workspacesContentsByType.query({ contentType: 'agent' }),
|
|
51
54
|
])
|
|
52
|
-
|
|
55
|
+
|
|
56
|
+
const workspaceAgentsAsArray = workspaceAgents.flatMap(({ agents }) => agents)
|
|
53
57
|
const builtInAgents = publicAgents.map((a) => ({ id: a.id, label: a.name, image: a.avatar, slug: a.slug, builtIn: true }))
|
|
54
|
-
return [...
|
|
58
|
+
return [...agentsAccount, ...agentsPersonal, ...agentsShared, ...workspaceAgentsAsArray]
|
|
59
|
+
.map(a => ({ id: a?.id, label: a?.name, image: a?.avatar, slug: a?.slug, builtIn: false }))
|
|
55
60
|
.concat(builtInAgents)
|
|
56
61
|
} catch (error) {
|
|
57
62
|
// eslint-disable-next-line no-console
|