@pega/cosmos-react-work 9.0.0-build.19.1 → 9.0.0-build.19.2
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/lib/components/GenAICoach/GenAICoach.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.js +259 -12
- package/lib/components/GenAICoach/GenAICoach.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.styles.d.ts +1 -0
- package/lib/components/GenAICoach/GenAICoach.styles.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.styles.js +20 -1
- package/lib/components/GenAICoach/GenAICoach.styles.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.types.d.ts +9 -0
- package/lib/components/GenAICoach/GenAICoach.types.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.types.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAICoach.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,iBAAiB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GenAICoach.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAuF5D,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,GAAG,CAAC;AAchF,eAAO,MAAM,SAAS,+CAmDrB,CAAC;;;;AA0yCF,wBAA6D"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
-
import { Button, Flex, Icon, MenuButton, Progress, Text, createUID, menuHelpers, useI18n, useSpeechRecognition, useTestIds, useTheme, withTestIds, registerIcon, usePrevious, getFocusables, isMenuGroupProps, ErrorState, useArrows, focusableSelector, useLiveLog, useOuterEvent, ThemeOverride, hasProp, getActiveElement, useElement, Actions, useBreakpoint, Grid, useRefMap, VisuallyHiddenText, FileList, Lightbox, FullscreenButton, FormField, useUID, SpeechToTextButton, Toaster, useToaster } from '@pega/cosmos-react-core';
|
|
3
|
+
import { Button, Flex, Icon, MenuButton, Progress, Text, createUID, menuHelpers, useI18n, useSpeechRecognition, useTestIds, useTheme, withTestIds, registerIcon, usePrevious, getFocusables, isMenuGroupProps, ErrorState, useArrows, focusableSelector, useLiveLog, useOuterEvent, ThemeOverride, hasProp, getActiveElement, useElement, Actions, useBreakpoint, Grid, useRefMap, VisuallyHiddenText, FileList, Lightbox, FullscreenButton, FormField, useUID, SpeechToTextButton, Toaster, useToaster, throttle } from '@pega/cosmos-react-core';
|
|
4
4
|
import * as caretUpIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/caret-up.icon';
|
|
5
5
|
import * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';
|
|
6
6
|
import * as caretDownIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/caret-down.icon';
|
|
@@ -12,7 +12,7 @@ import * as sendSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icon
|
|
|
12
12
|
import * as squareSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/square-solid.icon';
|
|
13
13
|
import { getGenAICoachTestIds } from './GenAICoach.test-ids';
|
|
14
14
|
import { isCoachMessage, isInUtilities, isUserMessage } from './GenAICoach.utils';
|
|
15
|
-
import { StyledMessagesContainer, StyledDisclaimerText, StyledGenAICoachContainer, StyledGenAIOptionsMenu, StyledInitialMessageContainer, StyledInputContainer, StyledMenuSuggestions, StyledMessagesList, StyledGridContainer, StyledFlexWrapper, StyledErrorContainer, StyledInput, StyledGuidedSuggestions, StyledComposerSection, StyledSendButton, StyledGenAIFormControl, StyledGenAITextArea, StyledInitialMessageGrid, StyledGenAIFooter, StyledAgentIcon, StyledStopButton, StyledActionsContainer, StyledFullscreenWrapper } from './GenAICoach.styles';
|
|
15
|
+
import { StyledMessagesContainer, StyledDisclaimerText, StyledGenAICoachContainer, StyledGenAIOptionsMenu, StyledInitialMessageContainer, StyledInputContainer, StyledMenuSuggestions, StyledMessagesList, StyledGridContainer, StyledFlexWrapper, StyledErrorContainer, StyledInput, StyledGuidedSuggestions, StyledComposerSection, StyledSendButton, StyledGenAIFormControl, StyledGenAITextArea, StyledInitialMessageGrid, StyledGenAIFooter, StyledAgentIcon, StyledStopButton, StyledActionsContainer, StyledFullscreenWrapper, StyledScrollButton } from './GenAICoach.styles';
|
|
16
16
|
import ConversationHistory from './ConversationHistory';
|
|
17
17
|
import { GenAIMessage, InitialSuggestedMessage } from '.';
|
|
18
18
|
registerIcon(caretUpIcon, timesIcon, caretDownIcon, minusIcon, polarisSolidIcon, paperClipIcon, warnSolidIcon, squareSolidIcon, sendSolidIcon);
|
|
@@ -24,6 +24,12 @@ export const AgentIcon = () => {
|
|
|
24
24
|
return (_jsxs(StyledAgentIcon, { xmlns: 'http://www.w3.org/2000/svg', filter: 'drop-shadow(0 .125rem .125rem rgba(0,0,0,.03)) drop-shadow(.125rem .5rem .5rem rgba(0,0,0,.05)) drop-shadow(.125rem 1rem 1rem rgba(0,0,0,.08))', viewBox: '0 0 60 60', children: [_jsxs("linearGradient", { id: idA, x1: '30.586', x2: '3.059', y1: '58.111', y2: '30.584', gradientUnits: 'userSpaceOnUse', children: [_jsx("stop", { offset: '.115', stopColor: '#681fc3' }), _jsx("stop", { offset: '.418', stopColor: '#9795f3' }), _jsx("stop", { offset: '.591', stopColor: '#b3d2ff' }), _jsx("stop", { offset: '.966', stopColor: '#a467f0' })] }), _jsxs("linearGradient", { id: idB, x1: '7.137', x2: '29.565', y1: '0', y2: '60.151', gradientUnits: 'userSpaceOnUse', children: [_jsx("stop", { offset: '.457', stopColor: '#8165d2', stopOpacity: '0' }), _jsx("stop", { offset: '.524', stopColor: '#280096', stopOpacity: '.4' })] }), _jsx("clipPath", { id: idC, children: _jsx("path", { d: 'M0 0h60v60H0z' }) }), _jsxs("g", { fillRule: 'evenodd', clipPath: `url(#${idC})`, clipRule: 'evenodd', children: [_jsx("path", { fill: `url(#${idA})`, d: 'M60 30.002c-9.023.937-16.054 3.632-20.86 8.203C33.633 43.242 30.586 50.508 30 60c-1.173-9.61-4.453-16.875-9.727-21.914C15.35 33.516 8.555 30.82 0 30c9.023-.703 16.054-3.515 21.093-8.438C26.132 16.523 29.063 9.376 29.999 0c.704 10.43 4.102 18.164 10.313 23.202C45.352 27.186 51.914 29.413 60 30zm-3.75-18.75c-2.228.235-3.984.936-5.391 2.226-1.289 1.289-1.992 3.047-2.109 5.274-.235-2.227-.937-3.983-2.108-5.155-1.289-1.288-3.048-2.109-5.391-2.344 2.227-.116 3.867-.82 5.156-1.991 1.288-1.289 2.108-3.164 2.343-5.508.117 2.46.937 4.336 2.344 5.508 1.288 1.171 2.93 1.875 5.156 1.991zM18.75 48.75c-2.345.236-4.103.937-5.392 2.227-1.288 1.172-1.992 2.93-2.108 5.274-.235-2.46-1.055-4.218-2.46-5.507-1.056-1.055-2.812-1.758-5.04-1.992 1.993-.116 3.633-.703 4.804-1.758 1.524-1.172 2.46-3.047 2.696-5.743.116 1.992.703 3.751 1.875 5.156 1.172 1.288 3.047 2.108 5.626 2.344z' }), _jsx("path", { fill: `url(#${idB})`, d: 'M60 30.002c-9.023.937-16.054 3.632-20.86 8.203C33.633 43.242 30.586 50.508 30 60c-1.173-9.61-4.453-16.875-9.727-21.914C15.35 33.516 8.555 30.82 0 30c9.023-.703 16.054-3.515 21.093-8.438C26.132 16.523 29.063 9.376 29.999 0c.704 10.43 4.102 18.164 10.313 23.202C45.352 27.186 51.914 29.413 60 30zm-3.75-18.75c-2.228.235-3.984.936-5.391 2.226-1.289 1.289-1.992 3.047-2.109 5.274-.235-2.227-.937-3.983-2.108-5.155-1.289-1.288-3.048-2.109-5.391-2.344 2.227-.116 3.867-.82 5.156-1.991 1.288-1.289 2.108-3.164 2.343-5.508.117 2.46.937 4.336 2.344 5.508 1.288 1.171 2.93 1.875 5.156 1.991zM18.75 48.75c-2.345.236-4.103.937-5.392 2.227-1.288 1.172-1.992 2.93-2.108 5.274-.235-2.46-1.055-4.218-2.46-5.507-1.056-1.055-2.812-1.758-5.04-1.992 1.993-.116 3.633-.703 4.804-1.758 1.524-1.172 2.46-3.047 2.696-5.743.116 1.992.703 3.751 1.875 5.156 1.172 1.288 3.047 2.108 5.626 2.344z' })] })] }));
|
|
25
25
|
};
|
|
26
26
|
const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: onCoachChangeProp, messages = [], onSend, initialSuggestedMessages, suggestions, loading, error, variant, onOpen, guidedMode = false, actions, conversationHistory, onLayoutChange, onAddAttachment, attachments, attachmentsError, lightboxPreviewProps, allowFullScreen = true, isInLandingPageUtilities, stopProcess, voiceToTextProps, salutation, showSalutation = true, ...restProps }) => {
|
|
27
|
+
const scrollTolerancePx = 2;
|
|
28
|
+
const scrollThresholdPx = 50;
|
|
29
|
+
const streamBufferLh = 20;
|
|
30
|
+
const bufferExtensionLh = 2;
|
|
31
|
+
const scrollThrottleMs = 50;
|
|
32
|
+
const resizeThrottleMs = 33;
|
|
27
33
|
const theme = useTheme();
|
|
28
34
|
const t = useI18n();
|
|
29
35
|
const testIds = useTestIds(testId, getGenAICoachTestIds);
|
|
@@ -36,6 +42,7 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
36
42
|
const isUserTriggered = useRef(false);
|
|
37
43
|
const lastFocusedMessageRef = useRef(null);
|
|
38
44
|
const initialFocusedElementRef = useRef(null);
|
|
45
|
+
const inputContainerRef = useRef(null);
|
|
39
46
|
const messageContainerRef = useRef(null);
|
|
40
47
|
const textAreaRef = useRef(null);
|
|
41
48
|
const [suggestionMenuButton, setSuggestionMenuButton] = useElement(null);
|
|
@@ -45,6 +52,20 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
45
52
|
const fileUploadInputRef = useRef(null);
|
|
46
53
|
const attachmentsAdded = useRef(false);
|
|
47
54
|
const pendingResult = useRef(false);
|
|
55
|
+
const scrollStateRef = useRef({
|
|
56
|
+
userAtBottom: false,
|
|
57
|
+
isStreamingActive: false,
|
|
58
|
+
initialBufferApplied: false,
|
|
59
|
+
smoothScrollOnEnd: false,
|
|
60
|
+
ignoreNextScrollEvent: false,
|
|
61
|
+
lastScrollTop: null,
|
|
62
|
+
bufferMinHeight: null
|
|
63
|
+
});
|
|
64
|
+
const observersRef = useRef({
|
|
65
|
+
inputContainer: null,
|
|
66
|
+
messageContainer: null,
|
|
67
|
+
streamingMessage: null
|
|
68
|
+
});
|
|
48
69
|
const isSmallOrAbove = useBreakpoint('sm', {
|
|
49
70
|
breakpointRef: genAICoachRef
|
|
50
71
|
});
|
|
@@ -55,15 +76,183 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
55
76
|
const [animationInitialCursorPos, setAnimationInitialCursorPos] = useState(0);
|
|
56
77
|
const [focused, setFocused] = useState(false);
|
|
57
78
|
const [fullScreen, setFullScreen] = useState(false);
|
|
79
|
+
const [showScrollToBottom, setShowScrollToBottom] = useState(false);
|
|
58
80
|
const prevFullScreen = usePrevious(fullScreen);
|
|
59
81
|
const previousMessages = usePrevious(messages);
|
|
60
82
|
const composerId = useUID();
|
|
61
83
|
const latestMessage = messages.at(-1);
|
|
84
|
+
const isLatestAgentMessageStreaming = !!latestMessage && isCoachMessage(latestMessage) && !!latestMessage.loading;
|
|
62
85
|
const condition = !(fullScreen && conversationHistory) &&
|
|
63
86
|
(variant.placement === 'dialog' ||
|
|
64
87
|
variant.placement === 'utilities' ||
|
|
65
88
|
(variant.placement === 'fullpage' && !isSmallOrAbove) ||
|
|
66
89
|
!conversationHistory);
|
|
90
|
+
const applyBuffer = useCallback(() => {
|
|
91
|
+
const container = messageContainerRef.current;
|
|
92
|
+
const conversationEl = conversationRef.current;
|
|
93
|
+
const scrollState = scrollStateRef.current;
|
|
94
|
+
if (!container || !conversationEl)
|
|
95
|
+
return;
|
|
96
|
+
const contentHeight = Array.from(conversationEl.children).reduce((sum, child) => {
|
|
97
|
+
if (child instanceof HTMLElement)
|
|
98
|
+
return sum + child.offsetHeight;
|
|
99
|
+
return sum;
|
|
100
|
+
}, 0);
|
|
101
|
+
const computedStyle = window.getComputedStyle(conversationEl);
|
|
102
|
+
const lineHeightPx = parseFloat(computedStyle.lineHeight) || 20;
|
|
103
|
+
const bufferSizePx = streamBufferLh * lineHeightPx;
|
|
104
|
+
const currentBuffer = scrollState.bufferMinHeight ?? 0;
|
|
105
|
+
const distanceToBufferEnd = currentBuffer - contentHeight;
|
|
106
|
+
const extensionThreshold = bufferExtensionLh * lineHeightPx;
|
|
107
|
+
if (currentBuffer === 0 || distanceToBufferEnd < extensionThreshold) {
|
|
108
|
+
const newBuffer = contentHeight + bufferSizePx;
|
|
109
|
+
scrollState.bufferMinHeight = newBuffer;
|
|
110
|
+
conversationEl.style.setProperty('--stream-buffer', `${newBuffer}px`);
|
|
111
|
+
}
|
|
112
|
+
}, []);
|
|
113
|
+
const manageBuffer = useCallback((action) => {
|
|
114
|
+
const container = messageContainerRef.current;
|
|
115
|
+
const conversationEl = conversationRef.current;
|
|
116
|
+
const scrollState = scrollStateRef.current;
|
|
117
|
+
if (!container || !conversationEl)
|
|
118
|
+
return;
|
|
119
|
+
if (action === 'clear') {
|
|
120
|
+
conversationEl.style.removeProperty('--stream-buffer');
|
|
121
|
+
scrollState.bufferMinHeight = null;
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (action === 'init') {
|
|
125
|
+
applyBuffer();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (!scrollState.isStreamingActive || !scrollState.userAtBottom)
|
|
129
|
+
return;
|
|
130
|
+
applyBuffer();
|
|
131
|
+
}, [applyBuffer]);
|
|
132
|
+
const followStreamingMessage = useCallback(() => {
|
|
133
|
+
const container = messageContainerRef.current;
|
|
134
|
+
const scrollState = scrollStateRef.current;
|
|
135
|
+
if (!container ||
|
|
136
|
+
!scrollState.isStreamingActive ||
|
|
137
|
+
!scrollState.userAtBottom ||
|
|
138
|
+
(scrollState.lastScrollTop !== null &&
|
|
139
|
+
container.scrollTop < scrollState.lastScrollTop - scrollTolerancePx))
|
|
140
|
+
return;
|
|
141
|
+
manageBuffer('extend');
|
|
142
|
+
const targetScroll = container.scrollHeight - container.clientHeight;
|
|
143
|
+
const currentScroll = container.scrollTop;
|
|
144
|
+
if (Math.abs(currentScroll - targetScroll) > scrollTolerancePx) {
|
|
145
|
+
scrollState.ignoreNextScrollEvent = true;
|
|
146
|
+
container.scrollTo({ top: targetScroll, behavior: 'auto' });
|
|
147
|
+
}
|
|
148
|
+
}, [manageBuffer]);
|
|
149
|
+
const scrollToLatest = useCallback((behavior = 'auto', preferLast = true) => {
|
|
150
|
+
const container = messageContainerRef.current;
|
|
151
|
+
const conversationEl = conversationRef.current;
|
|
152
|
+
const lastMessage = conversationEl?.lastElementChild;
|
|
153
|
+
if (!container)
|
|
154
|
+
return;
|
|
155
|
+
const scrollState = scrollStateRef.current;
|
|
156
|
+
if (preferLast && lastMessage && lastMessage instanceof HTMLElement) {
|
|
157
|
+
const scrollHeight = container.scrollHeight;
|
|
158
|
+
const clientHeight = container.clientHeight;
|
|
159
|
+
const targetScrollTop = scrollHeight - clientHeight - scrollThresholdPx / 2;
|
|
160
|
+
if (targetScrollTop > container.scrollTop) {
|
|
161
|
+
scrollState.ignoreNextScrollEvent = true;
|
|
162
|
+
container.scrollTo({ top: targetScrollTop, behavior: 'auto' });
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
scrollState.ignoreNextScrollEvent = true;
|
|
167
|
+
container.scrollTo({ top: container.scrollHeight, behavior });
|
|
168
|
+
}, []);
|
|
169
|
+
const updateScrollState = useCallback((isScrollEvent = false) => {
|
|
170
|
+
const container = messageContainerRef.current;
|
|
171
|
+
const conversationEl = conversationRef.current;
|
|
172
|
+
if (!container || !conversationEl) {
|
|
173
|
+
setShowScrollToBottom(false);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const state = scrollStateRef.current;
|
|
177
|
+
if (state.initialBufferApplied) {
|
|
178
|
+
scrollToLatest('auto', true);
|
|
179
|
+
setShowScrollToBottom(false);
|
|
180
|
+
state.initialBufferApplied = false;
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (state.smoothScrollOnEnd) {
|
|
184
|
+
scrollToLatest('smooth', false);
|
|
185
|
+
setShowScrollToBottom(false);
|
|
186
|
+
state.smoothScrollOnEnd = false;
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (isScrollEvent && state.ignoreNextScrollEvent) {
|
|
190
|
+
state.ignoreNextScrollEvent = false;
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const isUserScroll = isScrollEvent;
|
|
194
|
+
const { clientHeight, scrollHeight, scrollTop } = container;
|
|
195
|
+
const trueContentHeight = Array.from(conversationEl.children).reduce((sum, child) => (child instanceof HTMLElement ? sum + child.offsetHeight : sum), 0);
|
|
196
|
+
const hasOverflow = trueContentHeight > clientHeight + scrollTolerancePx;
|
|
197
|
+
const distanceFromBufferedBottom = scrollHeight - scrollTop - clientHeight;
|
|
198
|
+
const isAtBufferedBottom = distanceFromBufferedBottom <= scrollThresholdPx;
|
|
199
|
+
if (!state.isStreamingActive) {
|
|
200
|
+
const distanceFromBottom = trueContentHeight - scrollTop - clientHeight;
|
|
201
|
+
const isAtBottom = distanceFromBottom <= scrollThresholdPx;
|
|
202
|
+
setShowScrollToBottom(hasOverflow && !isAtBottom);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (isUserScroll) {
|
|
206
|
+
const previousScrollTop = state.lastScrollTop;
|
|
207
|
+
state.lastScrollTop = scrollTop;
|
|
208
|
+
if (previousScrollTop !== null && scrollTop < previousScrollTop - scrollTolerancePx) {
|
|
209
|
+
state.userAtBottom = false;
|
|
210
|
+
}
|
|
211
|
+
else if (isAtBufferedBottom) {
|
|
212
|
+
state.userAtBottom = true;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (state.userAtBottom && isAtBufferedBottom) {
|
|
216
|
+
followStreamingMessage();
|
|
217
|
+
setShowScrollToBottom(false);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
setShowScrollToBottom(hasOverflow && !isAtBufferedBottom);
|
|
221
|
+
}
|
|
222
|
+
}, [followStreamingMessage, scrollToLatest]);
|
|
223
|
+
const updateScrollStateOnResize = useMemo(() => throttle(() => updateScrollState(false), resizeThrottleMs), [updateScrollState]);
|
|
224
|
+
const updateScrollStateOnScrollEvent = useMemo(() => throttle(() => updateScrollState(true), scrollThrottleMs), [updateScrollState]);
|
|
225
|
+
const handleScrollToBottomClick = useCallback(() => {
|
|
226
|
+
const scrollState = scrollStateRef.current;
|
|
227
|
+
const isStreaming = scrollState.isStreamingActive;
|
|
228
|
+
scrollToLatest(isStreaming ? 'auto' : 'smooth', false);
|
|
229
|
+
if (isStreaming) {
|
|
230
|
+
scrollState.userAtBottom = true;
|
|
231
|
+
}
|
|
232
|
+
setShowScrollToBottom(false);
|
|
233
|
+
}, [scrollToLatest]);
|
|
234
|
+
const setInputContainerRef = useCallback((el) => {
|
|
235
|
+
if (inputContainerRef.current === el)
|
|
236
|
+
return;
|
|
237
|
+
observersRef.current.inputContainer?.disconnect();
|
|
238
|
+
observersRef.current.inputContainer = null;
|
|
239
|
+
inputContainerRef.current = el;
|
|
240
|
+
if (!el || !genAICoachRef.current)
|
|
241
|
+
return;
|
|
242
|
+
genAICoachRef.current.style.setProperty('--composer-height', `${Math.round(el.getBoundingClientRect().height)}px`);
|
|
243
|
+
const ro = new ResizeObserver(entries => {
|
|
244
|
+
const entry = entries[0];
|
|
245
|
+
if (entry && genAICoachRef.current) {
|
|
246
|
+
const height = Math.round(entry.contentRect.height);
|
|
247
|
+
genAICoachRef.current.style.setProperty('--composer-height', `${height}px`);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
ro.observe(el);
|
|
251
|
+
observersRef.current.inputContainer = ro;
|
|
252
|
+
}, []);
|
|
253
|
+
const setMessageContainerRef = useCallback((el) => {
|
|
254
|
+
messageContainerRef.current = el;
|
|
255
|
+
}, []);
|
|
67
256
|
const onCoachChange = (id) => {
|
|
68
257
|
setCoachOptions(cur => {
|
|
69
258
|
return cur.map(coach => {
|
|
@@ -209,6 +398,9 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
209
398
|
window.addEventListener('resize', onResize);
|
|
210
399
|
return () => {
|
|
211
400
|
window.removeEventListener('resize', onResize);
|
|
401
|
+
Object.values(observersRef.current).forEach(observer => {
|
|
402
|
+
observer?.disconnect();
|
|
403
|
+
});
|
|
212
404
|
};
|
|
213
405
|
}, []);
|
|
214
406
|
useEffect(() => {
|
|
@@ -216,12 +408,6 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
216
408
|
const currentFilteredMsgs = messages?.filter(item => !hasProp(item, 'loading')) ?? [];
|
|
217
409
|
if (prevFilteredMsgs.length < currentFilteredMsgs.length ||
|
|
218
410
|
(latestMessage && hasProp(latestMessage, 'loading'))) {
|
|
219
|
-
setTimeout(() => {
|
|
220
|
-
conversationRef.current?.lastElementChild?.scrollIntoView({
|
|
221
|
-
behavior: 'smooth',
|
|
222
|
-
block: 'nearest'
|
|
223
|
-
});
|
|
224
|
-
}, 0);
|
|
225
411
|
if (latestMessage && isUserMessage(latestMessage)) {
|
|
226
412
|
textAreaRef.current?.focus();
|
|
227
413
|
setLastFocusableElement();
|
|
@@ -236,6 +422,67 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
236
422
|
}
|
|
237
423
|
}
|
|
238
424
|
}, [messages]);
|
|
425
|
+
useEffect(() => {
|
|
426
|
+
const scrollState = scrollStateRef.current;
|
|
427
|
+
const wasStreaming = scrollState.isStreamingActive;
|
|
428
|
+
if (isLatestAgentMessageStreaming && !wasStreaming) {
|
|
429
|
+
scrollStateRef.current = {
|
|
430
|
+
...scrollStateRef.current,
|
|
431
|
+
isStreamingActive: true,
|
|
432
|
+
initialBufferApplied: true,
|
|
433
|
+
userAtBottom: false,
|
|
434
|
+
smoothScrollOnEnd: false,
|
|
435
|
+
lastScrollTop: null
|
|
436
|
+
};
|
|
437
|
+
requestAnimationFrame(() => {
|
|
438
|
+
manageBuffer('init');
|
|
439
|
+
});
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
if (!isLatestAgentMessageStreaming && wasStreaming) {
|
|
443
|
+
scrollStateRef.current = {
|
|
444
|
+
...scrollStateRef.current,
|
|
445
|
+
isStreamingActive: false,
|
|
446
|
+
initialBufferApplied: false,
|
|
447
|
+
userAtBottom: false,
|
|
448
|
+
smoothScrollOnEnd: true
|
|
449
|
+
};
|
|
450
|
+
manageBuffer('clear');
|
|
451
|
+
}
|
|
452
|
+
}, [isLatestAgentMessageStreaming, manageBuffer]);
|
|
453
|
+
useEffect(() => {
|
|
454
|
+
const container = messageContainerRef.current;
|
|
455
|
+
const content = conversationRef.current;
|
|
456
|
+
if (!container || !content)
|
|
457
|
+
return;
|
|
458
|
+
const containerRO = new ResizeObserver(updateScrollStateOnResize);
|
|
459
|
+
containerRO.observe(container);
|
|
460
|
+
containerRO.observe(content);
|
|
461
|
+
observersRef.current.messageContainer = containerRO;
|
|
462
|
+
let streamingMessageRO = null;
|
|
463
|
+
const lastMessageEl = content.lastElementChild;
|
|
464
|
+
if (isLatestAgentMessageStreaming && lastMessageEl) {
|
|
465
|
+
const handleStreamingUpdate = throttle(() => {
|
|
466
|
+
followStreamingMessage();
|
|
467
|
+
updateScrollState(false);
|
|
468
|
+
}, resizeThrottleMs);
|
|
469
|
+
streamingMessageRO = new ResizeObserver(handleStreamingUpdate);
|
|
470
|
+
streamingMessageRO.observe(lastMessageEl);
|
|
471
|
+
observersRef.current.streamingMessage = streamingMessageRO;
|
|
472
|
+
}
|
|
473
|
+
return () => {
|
|
474
|
+
containerRO.disconnect();
|
|
475
|
+
observersRef.current.messageContainer = null;
|
|
476
|
+
streamingMessageRO?.disconnect();
|
|
477
|
+
observersRef.current.streamingMessage = null;
|
|
478
|
+
};
|
|
479
|
+
}, [
|
|
480
|
+
messages.length,
|
|
481
|
+
isLatestAgentMessageStreaming,
|
|
482
|
+
followStreamingMessage,
|
|
483
|
+
updateScrollState,
|
|
484
|
+
updateScrollStateOnResize
|
|
485
|
+
]);
|
|
239
486
|
useEffect(() => {
|
|
240
487
|
if (suggestionMenuButton && isGeneratingResponse.current) {
|
|
241
488
|
announcePolite({ message: t('response_generated') });
|
|
@@ -346,9 +593,9 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
346
593
|
const fullPageAndInitialScreen = (fullScreen || (variant.placement === 'fullpage' && !isInLandingPageUtilities)) &&
|
|
347
594
|
messages.length === 0;
|
|
348
595
|
const renderTextArea = fullPageAndInitialScreen ? null : genAIFooter;
|
|
349
|
-
const GenAICoachElement = (_jsx(_Fragment, { children: ((isInUtilities(variant) && variant.state !== 'minimized') || !isInUtilities(variant)) && (_jsxs(Flex, { container: { direction: 'column' }, as: StyledFlexWrapper, children: [_jsx(Flex, { as: StyledMessagesContainer, ref:
|
|
596
|
+
const GenAICoachElement = (_jsx(_Fragment, { children: ((isInUtilities(variant) && variant.state !== 'minimized') || !isInUtilities(variant)) && (_jsxs(Flex, { container: { direction: 'column' }, as: StyledFlexWrapper, children: [_jsx(Flex, { as: StyledMessagesContainer, ref: setMessageContainerRef, container: loading || error
|
|
350
597
|
? { direction: 'column', pad: [0, 2], justify: 'center' }
|
|
351
|
-
: { direction: 'column', pad: [0, 2] }, item: { grow: 1 }, children: loading || error ? (_jsx(Flex, { container: { justify: 'center', alignItems: 'center' }, children: loading ? (_jsx(Progress, { variant: 'ring', placement: 'block', message: typeof loading === 'string' ? loading : t('loading') })) : (_jsx(ErrorState, { message: error })) })) : (_jsx(_Fragment, { children: messages.length === 0 ? (_jsxs(Flex, { as: StyledInitialMessageContainer, container: {
|
|
598
|
+
: { direction: 'column', pad: [0, 2] }, item: { grow: 1 }, onScroll: updateScrollStateOnScrollEvent, children: loading || error ? (_jsx(Flex, { container: { justify: 'center', alignItems: 'center' }, children: loading ? (_jsx(Progress, { variant: 'ring', placement: 'block', message: typeof loading === 'string' ? loading : t('loading') })) : (_jsx(ErrorState, { message: error })) })) : (_jsx(_Fragment, { children: messages.length === 0 ? (_jsxs(Flex, { as: StyledInitialMessageContainer, container: {
|
|
352
599
|
justify: 'center',
|
|
353
600
|
direction: 'column',
|
|
354
601
|
alignItems: 'center',
|
|
@@ -462,7 +709,7 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
462
709
|
}
|
|
463
710
|
}, ...(prevFullScreen !== fullScreen ? { animationInitialCursorPos } : {}) }));
|
|
464
711
|
}) })) })) }), ((isInUtilities(variant) && variant.state !== 'minimized') || !isInUtilities(variant)) &&
|
|
465
|
-
!loading && (_jsx(Flex, { container: { direction: 'column' }, as: StyledInputContainer, children: _jsx(StyledComposerSection, { children: guidedMode ? (_jsx(_Fragment, { children: suggestions && messages.length > 0 && (_jsxs(_Fragment, { children: [latestMessage &&
|
|
712
|
+
!loading && (_jsx(Flex, { container: { direction: 'column' }, as: StyledInputContainer, ref: setInputContainerRef, children: _jsx(StyledComposerSection, { children: guidedMode ? (_jsx(_Fragment, { children: suggestions && messages.length > 0 && (_jsxs(_Fragment, { children: [latestMessage &&
|
|
466
713
|
isCoachMessage(latestMessage) &&
|
|
467
714
|
latestMessage.loading ? (_jsxs(Flex, { container: {
|
|
468
715
|
gap: 1,
|
|
@@ -488,7 +735,7 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
|
|
|
488
735
|
});
|
|
489
736
|
}
|
|
490
737
|
}
|
|
491
|
-
} }) })), _jsx(Flex, { container: { justify: 'center' }, children: _jsx(StyledDisclaimerText, { inFullPage: !condition, children: t('ai_disclaimer') }) })] })) })) : (renderTextArea) }) }))] })) }));
|
|
738
|
+
} }) })), _jsx(Flex, { container: { justify: 'center' }, children: _jsx(StyledDisclaimerText, { inFullPage: !condition, children: t('ai_disclaimer') }) })] })) })) : (renderTextArea) }) })), showScrollToBottom && (_jsx(StyledScrollButton, { icon: true, onClick: handleScrollToBottomClick, ariaLabel: t('scroll_to_latest_message'), children: _jsx(Icon, { name: 'caret-down' }) }))] })) }));
|
|
492
739
|
useEffect(() => {
|
|
493
740
|
if (focusTextArea.current && !conversationHistory && textAreaRef.current) {
|
|
494
741
|
textAreaRef.current.focus();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAICoach.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { ChangeEvent, FunctionComponent } from 'react';\n\nimport {\n Button,\n Flex,\n Icon,\n MenuButton,\n Progress,\n Text,\n createUID,\n menuHelpers,\n useI18n,\n useSpeechRecognition,\n useTestIds,\n useTheme,\n withTestIds,\n registerIcon,\n usePrevious,\n getFocusables,\n isMenuGroupProps,\n ErrorState,\n useArrows,\n focusableSelector,\n useLiveLog,\n useOuterEvent,\n ThemeOverride,\n hasProp,\n getActiveElement,\n useElement,\n Actions,\n useBreakpoint,\n Grid,\n useRefMap,\n VisuallyHiddenText,\n FileList,\n Lightbox,\n FullscreenButton,\n FormField,\n useUID,\n SpeechToTextButton,\n Toaster,\n useToaster\n} from '@pega/cosmos-react-core';\nimport type { MenuItemProps, MenuProps } from '@pega/cosmos-react-core';\nimport * as caretUpIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/caret-up.icon';\nimport * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';\nimport * as caretDownIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/caret-down.icon';\nimport * as minusIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/minus.icon';\nimport * as polarisSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/polaris-solid.icon';\nimport * as paperClipIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/paper-clip.icon';\nimport * as warnSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/warn-solid.icon';\nimport * as sendSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/send-solid.icon';\nimport * as squareSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/square-solid.icon';\nimport type { UseSpeechRecognitionProps } from '@pega/cosmos-react-core/lib/hooks/useSpeechRecognition';\n\nimport { getGenAICoachTestIds } from './GenAICoach.test-ids';\nimport { isCoachMessage, isInUtilities, isUserMessage } from './GenAICoach.utils';\nimport {\n StyledMessagesContainer,\n StyledDisclaimerText,\n StyledGenAICoachContainer,\n StyledGenAIOptionsMenu,\n StyledInitialMessageContainer,\n StyledInputContainer,\n StyledMenuSuggestions,\n StyledMessagesList,\n StyledGridContainer,\n StyledFlexWrapper,\n StyledErrorContainer,\n StyledInput,\n StyledGuidedSuggestions,\n StyledComposerSection,\n StyledSendButton,\n StyledGenAIFormControl,\n StyledGenAITextArea,\n StyledInitialMessageGrid,\n StyledGenAIFooter,\n StyledAgentIcon,\n StyledStopButton,\n StyledActionsContainer,\n StyledFullscreenWrapper\n} from './GenAICoach.styles';\nimport ConversationHistory from './ConversationHistory';\nimport type { Tool } from './GenAICoach.types';\n\nimport { GenAIMessage, InitialSuggestedMessage, type GenAICoachProps } from '.';\n\nregisterIcon(\n caretUpIcon,\n timesIcon,\n caretDownIcon,\n minusIcon,\n polarisSolidIcon,\n paperClipIcon,\n warnSolidIcon,\n squareSolidIcon,\n sendSolidIcon\n);\n\nexport const AgentIcon = () => {\n const uid = useUID();\n const idA = `agent-gradient-a-${uid}`;\n const idB = `agent-gradient-b-${uid}`;\n const idC = `agent-clip-${uid}`;\n\n return (\n <StyledAgentIcon\n xmlns='http://www.w3.org/2000/svg'\n filter='drop-shadow(0 .125rem .125rem rgba(0,0,0,.03)) drop-shadow(.125rem .5rem .5rem rgba(0,0,0,.05)) drop-shadow(.125rem 1rem 1rem rgba(0,0,0,.08))'\n viewBox='0 0 60 60'\n >\n <linearGradient\n id={idA}\n x1='30.586'\n x2='3.059'\n y1='58.111'\n y2='30.584'\n gradientUnits='userSpaceOnUse'\n >\n <stop offset='.115' stopColor='#681fc3' />\n <stop offset='.418' stopColor='#9795f3' />\n <stop offset='.591' stopColor='#b3d2ff' />\n <stop offset='.966' stopColor='#a467f0' />\n </linearGradient>\n <linearGradient\n id={idB}\n x1='7.137'\n x2='29.565'\n y1='0'\n y2='60.151'\n gradientUnits='userSpaceOnUse'\n >\n <stop offset='.457' stopColor='#8165d2' stopOpacity='0' />\n <stop offset='.524' stopColor='#280096' stopOpacity='.4' />\n </linearGradient>\n <clipPath id={idC}>\n <path d='M0 0h60v60H0z' />\n </clipPath>\n <g fillRule='evenodd' clipPath={`url(#${idC})`} clipRule='evenodd'>\n <path\n fill={`url(#${idA})`}\n d='M60 30.002c-9.023.937-16.054 3.632-20.86 8.203C33.633 43.242 30.586 50.508 30 60c-1.173-9.61-4.453-16.875-9.727-21.914C15.35 33.516 8.555 30.82 0 30c9.023-.703 16.054-3.515 21.093-8.438C26.132 16.523 29.063 9.376 29.999 0c.704 10.43 4.102 18.164 10.313 23.202C45.352 27.186 51.914 29.413 60 30zm-3.75-18.75c-2.228.235-3.984.936-5.391 2.226-1.289 1.289-1.992 3.047-2.109 5.274-.235-2.227-.937-3.983-2.108-5.155-1.289-1.288-3.048-2.109-5.391-2.344 2.227-.116 3.867-.82 5.156-1.991 1.288-1.289 2.108-3.164 2.343-5.508.117 2.46.937 4.336 2.344 5.508 1.288 1.171 2.93 1.875 5.156 1.991zM18.75 48.75c-2.345.236-4.103.937-5.392 2.227-1.288 1.172-1.992 2.93-2.108 5.274-.235-2.46-1.055-4.218-2.46-5.507-1.056-1.055-2.812-1.758-5.04-1.992 1.993-.116 3.633-.703 4.804-1.758 1.524-1.172 2.46-3.047 2.696-5.743.116 1.992.703 3.751 1.875 5.156 1.172 1.288 3.047 2.108 5.626 2.344z'\n />\n <path\n fill={`url(#${idB})`}\n d='M60 30.002c-9.023.937-16.054 3.632-20.86 8.203C33.633 43.242 30.586 50.508 30 60c-1.173-9.61-4.453-16.875-9.727-21.914C15.35 33.516 8.555 30.82 0 30c9.023-.703 16.054-3.515 21.093-8.438C26.132 16.523 29.063 9.376 29.999 0c.704 10.43 4.102 18.164 10.313 23.202C45.352 27.186 51.914 29.413 60 30zm-3.75-18.75c-2.228.235-3.984.936-5.391 2.226-1.289 1.289-1.992 3.047-2.109 5.274-.235-2.227-.937-3.983-2.108-5.155-1.289-1.288-3.048-2.109-5.391-2.344 2.227-.116 3.867-.82 5.156-1.991 1.288-1.289 2.108-3.164 2.343-5.508.117 2.46.937 4.336 2.344 5.508 1.288 1.171 2.93 1.875 5.156 1.991zM18.75 48.75c-2.345.236-4.103.937-5.392 2.227-1.288 1.172-1.992 2.93-2.108 5.274-.235-2.46-1.055-4.218-2.46-5.507-1.056-1.055-2.812-1.758-5.04-1.992 1.993-.116 3.633-.703 4.804-1.758 1.524-1.172 2.46-3.047 2.696-5.743.116 1.992.703 3.751 1.875 5.156 1.172 1.288 3.047 2.108 5.626 2.344z'\n />\n </g>\n </StyledAgentIcon>\n );\n};\n\nconst GenAICoach: FunctionComponent<GenAICoachProps> = ({\n testId,\n coachOptions: coachOptionsProps,\n onCoachChange: onCoachChangeProp,\n messages = [],\n onSend,\n initialSuggestedMessages,\n suggestions,\n loading,\n error,\n variant,\n onOpen,\n guidedMode = false,\n actions,\n conversationHistory,\n onLayoutChange,\n onAddAttachment,\n attachments,\n attachmentsError,\n lightboxPreviewProps,\n allowFullScreen = true,\n isInLandingPageUtilities,\n stopProcess,\n voiceToTextProps,\n salutation,\n showSalutation = true,\n ...restProps\n}) => {\n const theme = useTheme();\n const t = useI18n();\n const testIds = useTestIds(testId, getGenAICoachTestIds);\n const { announcePolite } = useLiveLog();\n\n const elementRef = useRef<HTMLElement | null>(null);\n const conversationRef = useRef<HTMLUListElement>(null);\n const genAICoachRef = useRef<HTMLDivElement>(null);\n const [messageEls, getMessageCbRef] = useRefMap<HTMLLIElement>();\n\n const focusInMessageListRef = useRef(false);\n const isUserTriggered = useRef(false);\n const lastFocusedMessageRef = useRef<HTMLElement | null>(null);\n const initialFocusedElementRef = useRef<HTMLElement | null>(null);\n const messageContainerRef = useRef<HTMLDivElement>(null);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [suggestionMenuButton, setSuggestionMenuButton] = useElement<HTMLButtonElement>(null);\n const isGeneratingResponse = useRef(false);\n const focusTextArea = useRef(false);\n const historyViewRef = useRef<HTMLUListElement>(null);\n const fileUploadInputRef = useRef<HTMLInputElement>(null);\n const attachmentsAdded = useRef(false);\n const pendingResult = useRef(false);\n\n const isSmallOrAbove = useBreakpoint('sm', {\n breakpointRef: genAICoachRef\n });\n\n const [message, setMessage] = useState('');\n const [interimMessage, setInterimMessage] = useState('');\n const [coachOptions, setCoachOptions] = useState<MenuProps['items']>(coachOptionsProps);\n const [arrowKey, setArrowKey] = useState<\n 'ArrowRight' | 'ArrowLeft' | 'ArrowUp' | 'ArrowDown' | null\n >(null);\n\n const [animationInitialCursorPos, setAnimationInitialCursorPos] = useState(0);\n const [focused, setFocused] = useState(false);\n const [fullScreen, setFullScreen] = useState(false);\n\n const prevFullScreen = usePrevious(fullScreen);\n const previousMessages = usePrevious(messages);\n\n const composerId = useUID();\n\n const latestMessage = messages.at(-1);\n const condition =\n !(fullScreen && conversationHistory) &&\n (variant.placement === 'dialog' ||\n variant.placement === 'utilities' ||\n (variant.placement === 'fullpage' && !isSmallOrAbove) ||\n !conversationHistory);\n\n const onCoachChange = (id: MenuItemProps['id']) => {\n setCoachOptions(cur => {\n return cur.map(coach => {\n return {\n ...coach,\n selected: coach.id === id\n };\n });\n });\n onCoachChangeProp?.(id);\n };\n\n const selectedCoach = useMemo(() => {\n const selected = menuHelpers.getSelected(coachOptions)[0];\n if (selected) return selected.primary;\n\n if (coachOptions[0]) {\n if (isMenuGroupProps(coachOptions[0])) {\n return coachOptions[0].items[0].primary;\n }\n return coachOptions[0].primary;\n }\n }, [coachOptions]);\n\n const onResult: UseSpeechRecognitionProps['onResult'] = useCallback(value => {\n pendingResult.current = false;\n setMessage(prevMessage => {\n return prevMessage ? `${prevMessage} ${value}` : value;\n });\n setInterimMessage('');\n }, []);\n\n const onInterimResult: NonNullable<UseSpeechRecognitionProps['onInterimResult']> = useCallback(\n value => {\n if (value) {\n pendingResult.current = true;\n setInterimMessage(message ? ` ${value}` : value);\n }\n },\n [message]\n );\n\n const {\n supported,\n active,\n start,\n stop,\n error: voiceToTextError\n } = useSpeechRecognition({\n onResult,\n onInterimResult,\n langCode: voiceToTextProps?.langCode\n });\n\n const handleSendMessage = useCallback(() => {\n const isMessageAndAttachmentsEmpty = !message && (!attachments || attachments.length === 0);\n const hasAttachmentsError =\n attachments &&\n attachments.length > 0 &&\n (attachmentsError || attachments.some(attachment => attachment.error));\n const isCoachMessageLoading =\n latestMessage && isCoachMessage(latestMessage) && latestMessage.loading;\n if (\n isMessageAndAttachmentsEmpty ||\n hasAttachmentsError ||\n isCoachMessageLoading ||\n (latestMessage && isCoachMessage(latestMessage) && latestMessage.isToolConfirmation)\n )\n return;\n onSend({\n id: createUID(),\n message,\n fromComposer: true,\n attachmentIds: attachments?.map(({ id }) => id)\n });\n setMessage('');\n if (active) {\n stop();\n }\n }, [[message, latestMessage, attachments, attachmentsError]]);\n\n const handleEnterKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n handleSendMessage();\n }\n };\n\n const handleTextAreaChange = useCallback(\n (e: ChangeEvent<HTMLTextAreaElement>) => {\n setMessage(e.currentTarget.value);\n },\n [setMessage]\n );\n\n const renderCoachOptions = useMemo(() => {\n if (coachOptions.length === 0 || !selectedCoach) {\n return null;\n }\n if (coachOptions.length === 1) {\n return <Text variant='h2'>{selectedCoach}</Text>;\n }\n return (\n <MenuButton\n text={selectedCoach}\n aria-label={t('agent_switcher', [selectedCoach])}\n variant='text'\n as={StyledGenAIOptionsMenu}\n menu={{\n mode: 'single-select',\n items: coachOptions,\n onItemClick: onCoachChange\n }}\n />\n );\n }, [coachOptions, selectedCoach]);\n\n const headerContent = useMemo(() => {\n return isInUtilities(variant) && variant.state === 'minimized' ? (\n <>\n <Text variant='h2'>{selectedCoach}</Text>\n <Flex container={{ alignItems: 'center' }}>\n <Button\n icon\n label={t('maximize')}\n aria-label={t('agent_noun', [t('maximize')])}\n variant='simple'\n onClick={() => {\n variant.onStateChange('maximized');\n isUserTriggered.current = true;\n }}\n >\n <Icon name='caret-up' />\n </Button>\n </Flex>\n </>\n ) : (\n <>\n {renderCoachOptions}\n\n <Flex container as={StyledActionsContainer}>\n {isInUtilities(variant) && !fullScreen && (\n <Button\n icon\n label={t('minimize')}\n aria-label={t('agent_noun', [t('minimize')])}\n variant='simple'\n onClick={() => {\n variant.onStateChange('minimized');\n isUserTriggered.current = true;\n }}\n >\n <Icon name='minus' />\n </Button>\n )}\n\n {allowFullScreen && <FullscreenButton onClick={() => setFullScreen(prev => !prev)} />}\n\n {actions && (\n <Actions data-testid={testIds.actions} contextualLabel={selectedCoach} {...actions} />\n )}\n {variant.placement === 'dialog' && (\n <Button\n icon\n label={t('close')}\n aria-label={t('agent_noun', [t('close')])}\n variant='simple'\n onClick={variant.onClose}\n >\n <Icon name='times' />\n </Button>\n )}\n </Flex>\n </>\n );\n }, [variant, coachOptions, fullScreen]);\n\n const getMessageContainingElement = (element: Element | null) => {\n if (element) return Array.from(messageEls.values()).find(el => el && el.contains(element));\n return null;\n };\n\n const setLastFocusableElement = () => {\n focusInMessageListRef.current = false;\n lastFocusedMessageRef.current = elementRef.current ?? null;\n if (\n lastFocusedMessageRef.current &&\n lastFocusedMessageRef.current?.tagName.toLowerCase() !== 'li'\n ) {\n lastFocusedMessageRef.current =\n getMessageContainingElement(lastFocusedMessageRef.current) ?? null;\n }\n };\n\n const onResize = () => {\n if (genAICoachRef.current && isInUtilities(variant)) {\n const height = genAICoachRef.current.clientHeight;\n variant.setGenAIHeight?.(height);\n }\n };\n\n const variantState = useMemo(() => {\n if (variant.placement === 'utilities') {\n return variant.state;\n }\n }, [variant]);\n\n useEffect(() => {\n if (isInUtilities(variant)) {\n onResize();\n }\n if (isUserTriggered.current) {\n if (\n isInUtilities(variant) &&\n (variant.state === 'minimized' || (guidedMode && variant.state === 'maximized')) &&\n getFocusables(genAICoachRef).length > 0\n ) {\n getFocusables(genAICoachRef)[0].focus();\n isUserTriggered.current = false;\n } else if (variant.placement !== 'fullpage') {\n textAreaRef.current?.focus();\n elementRef.current = null;\n isUserTriggered.current = false;\n }\n }\n }, [variantState, variant.placement]);\n\n useEffect(() => {\n onLayoutChange?.(!condition);\n }, [condition]);\n\n useEffect(() => {\n onOpen?.();\n window.addEventListener('resize', onResize);\n\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, []);\n\n useEffect(() => {\n const prevFilteredMsgs = previousMessages?.filter(item => !hasProp(item, 'loading')) ?? [];\n const currentFilteredMsgs = messages?.filter(item => !hasProp(item, 'loading')) ?? [];\n\n if (\n prevFilteredMsgs.length < currentFilteredMsgs.length ||\n (latestMessage && hasProp(latestMessage, 'loading'))\n ) {\n setTimeout(() => {\n conversationRef.current?.lastElementChild?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest'\n });\n }, 0);\n if (latestMessage && isUserMessage(latestMessage)) {\n textAreaRef.current?.focus();\n setLastFocusableElement();\n elementRef.current = null;\n setArrowKey(null);\n } else if (latestMessage?.loading) {\n isGeneratingResponse.current = true;\n } else {\n announcePolite({ message: t('agent_noun', [`${t('new_message')} ${t('from')}`]) });\n }\n }\n }, [messages]);\n\n useEffect(() => {\n if (suggestionMenuButton && isGeneratingResponse.current) {\n announcePolite({ message: t('response_generated') });\n isGeneratingResponse.current = false;\n\n const activeElement = getActiveElement();\n if (activeElement && activeElement === document.body) suggestionMenuButton.focus();\n }\n }, [suggestionMenuButton]);\n\n /** Supports arrow key behaviors */\n useEffect(() => {\n const focusables = getFocusables(elementRef);\n if (arrowKey === 'ArrowRight') {\n focusables[0]?.focus();\n } else if (arrowKey === 'ArrowLeft') {\n focusables[focusables.length - 1]?.focus();\n }\n }, [arrowKey, elementRef.current]);\n\n useArrows(\n conversationRef,\n {\n cycle: true,\n selector: ':scope > li',\n dir: 'up-down',\n allowTabFocus: true,\n initialFocusElement: initialFocusedElementRef.current\n },\n [messages, initialFocusedElementRef.current]\n );\n\n useArrows(\n elementRef,\n {\n cycle: true,\n selector: `li ${focusableSelector}`,\n dir: 'left-right',\n allowTabFocus: true,\n updateTabIndex: false\n },\n [messages, elementRef.current, arrowKey]\n );\n\n useOuterEvent('mousedown', [conversationRef.current], () => {\n setArrowKey(null);\n focusInMessageListRef.current = false;\n });\n\n const { push } = useToaster();\n\n const onSpeechToTextButtonClick = useCallback(() => {\n if (active) {\n stop();\n } else {\n start();\n }\n }, [active, stop, start]);\n\n const onFileChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n const newFiles = Array.from(e.target.files);\n onAddAttachment?.(newFiles);\n }\n };\n\n const getGridColumns = () => {\n const multiCol = 'repeat(auto-fit, minmax(calc(100% / 4 - 1rem), 1fr))';\n const singleCol = '1fr';\n\n if (!isSmallOrAbove && !fullScreen) return singleCol;\n\n return multiCol;\n };\n\n useEffect(() => {\n if (voiceToTextError) {\n push({ content: voiceToTextError });\n }\n }, [voiceToTextError]);\n\n const genAIFooter = (\n <Flex container={{ direction: 'column' }} as={StyledGenAIFooter}>\n <FormField label={t('message_pega_gen_ai_coach')} labelHidden labelFor={composerId}>\n <StyledGenAIFormControl focused={focused}>\n <Flex container={{ direction: 'column', gap: 0.25 }}>\n <StyledGenAITextArea\n id={composerId}\n ref={textAreaRef}\n value={interimMessage ? `${message}${interimMessage}` : message}\n placeholder={t('write_message')}\n onKeyDown={handleEnterKeyDown}\n onChange={handleTextAreaChange}\n onFocus={() => {\n if (active) stop();\n setFocused(true);\n }}\n onBlur={() => {\n setFocused(false);\n }}\n autoResize\n />\n\n <Flex\n container={{\n direction: 'row',\n justify: 'between',\n gap: 1,\n pad: [undefined, 1, 1, 1]\n }}\n >\n <Flex container={{ alignItems: 'center' }}>\n {suggestions && (\n <MenuButton\n text={t('suggestions')}\n variant='simple'\n icon='chat-typing'\n iconOnly\n as={StyledMenuSuggestions}\n menu={{\n items: suggestions,\n onItemClick: id => {\n const selected = menuHelpers.getItem(suggestions, id);\n if (selected) {\n setMessage(selected.primary);\n textAreaRef.current?.focus();\n }\n }\n }}\n showArrow={false}\n />\n )}\n {voiceToTextProps?.enableDictation && supported && (\n <SpeechToTextButton active={active} onClick={onSpeechToTextButtonClick} />\n )}\n\n {onAddAttachment && (\n <>\n <Button\n icon\n onClick={() => {\n if (fileUploadInputRef.current) {\n fileUploadInputRef.current.value = '';\n }\n fileUploadInputRef.current?.click();\n }}\n variant='simple'\n label={t('add_attachment')}\n >\n <Icon name='paper-clip' />\n </Button>\n <StyledInput\n type='file'\n ref={fileUploadInputRef}\n onChange={onFileChange}\n multiple={false}\n data-testid={testIds.attachments}\n />\n </>\n )}\n </Flex>\n\n {(latestMessage && isCoachMessage(latestMessage) && latestMessage.loading) ||\n (active && pendingResult.current) ? (\n <Flex\n container={{\n gap: 1,\n justify: 'end',\n alignItems: 'center',\n pad: 1\n }}\n >\n {active && pendingResult.current\n ? t('processing_speech')\n : t('generating_response')}\n <Progress placement='inline' />\n </Flex>\n ) : (\n <>\n {latestMessage &&\n isCoachMessage(latestMessage) &&\n latestMessage.isToolConfirmation ? (\n <StyledStopButton\n iconOnly\n icon='square-solid'\n variant='primary'\n label={t('stop_processing')}\n onClick={() => {\n textAreaRef.current?.focus();\n stopProcess?.();\n }}\n />\n ) : (\n <StyledSendButton\n variant='primary'\n onClick={handleSendMessage}\n icon\n label={t('send')}\n aria-label={t('send_message')}\n >\n <Icon name='send-solid' />\n </StyledSendButton>\n )}\n </>\n )}\n </Flex>\n </Flex>\n </StyledGenAIFormControl>\n </FormField>\n\n {attachments && attachments.length > 0 && (\n <>\n <Flex\n as={FileList}\n type='item'\n aria-label={`${t('attachments')}`}\n items={attachments}\n container={{ pad: [1, 0] }}\n />\n\n {attachmentsError && (\n <Flex container={{ gap: 1, alignItems: 'center' }} as={StyledErrorContainer}>\n <Icon name='warn-solid' />\n <VisuallyHiddenText>{`${t('error')} `}</VisuallyHiddenText>\n\n {attachmentsError}\n </Flex>\n )}\n </>\n )}\n\n <Flex container={{ justify: 'center' }}>\n <StyledDisclaimerText inFullPage={!condition}>{t('ai_disclaimer')}</StyledDisclaimerText>\n </Flex>\n </Flex>\n );\n\n const isCompact =\n variant.placement === 'fullpage' &&\n !fullScreen &&\n !isInLandingPageUtilities &&\n messages.length === 0;\n\n const fullPageAndInitialScreen =\n (fullScreen || (variant.placement === 'fullpage' && !isInLandingPageUtilities)) &&\n messages.length === 0;\n\n const renderTextArea = fullPageAndInitialScreen ? null : genAIFooter;\n\n const GenAICoachElement = (\n <>\n {((isInUtilities(variant) && variant.state !== 'minimized') || !isInUtilities(variant)) && (\n <Flex container={{ direction: 'column' }} as={StyledFlexWrapper}>\n <Flex\n as={StyledMessagesContainer}\n ref={messageContainerRef}\n container={\n loading || error\n ? { direction: 'column', pad: [0, 2], justify: 'center' }\n : { direction: 'column', pad: [0, 2] }\n }\n item={{ grow: 1 }}\n >\n {loading || error ? (\n <Flex container={{ justify: 'center', alignItems: 'center' }}>\n {loading ? (\n <Progress\n variant='ring'\n placement='block'\n message={typeof loading === 'string' ? loading : t('loading')}\n />\n ) : (\n <ErrorState message={error} />\n )}\n </Flex>\n ) : (\n <>\n {messages.length === 0 ? (\n <Flex\n as={StyledInitialMessageContainer}\n container={{\n justify: 'center',\n direction: 'column',\n alignItems: 'center',\n gap: 2\n }}\n item={{ grow: 1 }}\n >\n {((isInUtilities(variant) && variant.state === 'maximized') ||\n !isInUtilities(variant)) &&\n showSalutation && (\n <Flex container={{ direction: 'column', alignItems: 'center', gap: 1 }}>\n <AgentIcon />\n <Text variant='h3'>{salutation ?? t('welcome_text')}</Text>\n </Flex>\n )}\n\n <Grid\n as={StyledInitialMessageGrid}\n container={{ cols: getGridColumns(), gap: 1.5 }}\n >\n {initialSuggestedMessages?.map(initialSuggestedMessage => (\n <InitialSuggestedMessage\n {...initialSuggestedMessage}\n onSend={initialMessage => {\n if (guidedMode) {\n onSend({\n id: initialMessage.id,\n message: initialMessage.message\n });\n } else {\n setMessage(initialMessage.message);\n }\n isUserTriggered.current = true;\n textAreaRef.current?.focus();\n }}\n testId={initialSuggestedMessage.id}\n />\n ))}\n </Grid>\n\n {fullPageAndInitialScreen && !guidedMode && genAIFooter}\n </Flex>\n ) : (\n <Flex\n as={StyledMessagesList}\n ref={conversationRef}\n aria-label={`${t('conversation')} ${t('view')}`}\n container={{ direction: 'column' }}\n onFocus={() => {\n if (!focusInMessageListRef.current) {\n if (lastFocusedMessageRef.current) {\n lastFocusedMessageRef.current.focus();\n } else {\n /** Focus on the latest message if the chat message list was never focused */\n const lastChild =\n conversationRef.current && conversationRef.current.lastElementChild;\n if (lastChild instanceof HTMLElement) {\n lastChild.focus();\n }\n }\n }\n focusInMessageListRef.current = true;\n setArrowKey(null);\n }}\n onKeyDown={(e: KeyboardEvent) => {\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n setArrowKey(e.key);\n elementRef.current =\n getMessageContainingElement(document.activeElement) ?? null;\n lastFocusedMessageRef.current = elementRef.current;\n } else if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n const activeMessageElement = Array.from(messageEls.values()).find(\n el => el === document.activeElement\n );\n elementRef.current =\n getMessageContainingElement(document.activeElement) ?? null;\n initialFocusedElementRef.current = elementRef.current;\n\n if (\n activeMessageElement &&\n getFocusables(activeMessageElement).length > 0\n ) {\n setArrowKey(e.key);\n }\n } else if (e.key === 'Tab') {\n e.preventDefault();\n setLastFocusableElement();\n if (e.shiftKey) {\n if (\n !condition &&\n conversationHistory &&\n conversationHistory.selectedItemId\n ) {\n const selectedId = historyViewRef.current?.querySelector<HTMLLIElement>(\n `li[id=\"${conversationHistory.selectedItemId}\"]`\n );\n\n if (selectedId) {\n selectedId.focus();\n e.preventDefault();\n }\n } else {\n const prevElement =\n conversationRef.current?.parentElement?.parentElement\n ?.previousElementSibling;\n if (prevElement) {\n const focusables = getFocusables(prevElement);\n if (focusables.length) {\n e.preventDefault();\n focusables[focusables.length - 1].focus();\n }\n }\n }\n } else {\n const nextElement =\n conversationRef.current?.parentElement?.nextElementSibling;\n if (nextElement) {\n const focusables = getFocusables(nextElement);\n if (focusables.length) {\n e.preventDefault();\n focusables[0].focus();\n }\n }\n\n setArrowKey(null);\n }\n }\n }}\n >\n {messages.map(item => {\n const messageProps = isCoachMessage(item)\n ? {\n ...item,\n suggestions:\n messages.findLast(messageItem => isCoachMessage(messageItem))?.id ===\n item.id\n ? item.suggestions\n : undefined,\n onSend,\n onSubmit: item.isToolConfirmation\n ? (tools: Tool[]) => {\n onSend({\n ...item,\n message: item.message ?? '',\n tools\n });\n }\n : undefined\n }\n : item;\n\n return (\n <GenAIMessage\n {...messageProps}\n ref={getMessageCbRef(item.id)}\n testId={item.id}\n announceInteraction={!focusInMessageListRef.current}\n onAnimationCursorUpdate={animatedTillCursor => {\n if (isCoachMessage(item)) {\n setAnimationInitialCursorPos(animatedTillCursor);\n }\n }}\n {...(prevFullScreen !== fullScreen ? { animationInitialCursorPos } : {})}\n />\n );\n })}\n </Flex>\n )}\n </>\n )}\n </Flex>\n\n {((isInUtilities(variant) && variant.state !== 'minimized') || !isInUtilities(variant)) &&\n !loading && (\n <Flex container={{ direction: 'column' }} as={StyledInputContainer}>\n <StyledComposerSection>\n {guidedMode ? (\n <>\n {suggestions && messages.length > 0 && (\n <>\n {latestMessage &&\n isCoachMessage(latestMessage) &&\n latestMessage.loading ? (\n <Flex\n container={{\n gap: 1,\n justify: 'center',\n alignItems: 'center',\n pad: 1\n }}\n >\n {t('generating_response')}\n <Progress\n placement='inline'\n focusOnVisible\n message={t('generating_response')}\n />\n </Flex>\n ) : (\n <ThemeOverride\n theme={{\n components: {\n button: {\n color: theme.base.palette.ai,\n 'secondary-color': theme.base.palette.ai,\n 'secondary-fill-style': 'outline'\n }\n }\n }}\n >\n <MenuButton\n as={StyledGuidedSuggestions}\n text={t('ask_coach', [selectedCoach ?? ''])}\n variant='primary'\n icon='polaris-solid'\n ref={setSuggestionMenuButton}\n menu={{\n items: suggestions,\n onItemClick: id => {\n const selected = menuHelpers.getItem(suggestions, id);\n if (selected) {\n onSend({\n id: selected.id,\n message: selected.primary\n });\n }\n }\n }}\n />\n </ThemeOverride>\n )}\n\n <Flex container={{ justify: 'center' }}>\n <StyledDisclaimerText inFullPage={!condition}>\n {t('ai_disclaimer')}\n </StyledDisclaimerText>\n </Flex>\n </>\n )}\n </>\n ) : (\n renderTextArea\n )}\n </StyledComposerSection>\n </Flex>\n )}\n </Flex>\n )}\n </>\n );\n\n useEffect(() => {\n if (focusTextArea.current && !conversationHistory && textAreaRef.current) {\n textAreaRef.current.focus();\n focusTextArea.current = false;\n }\n }, [conversationHistory, focusTextArea.current]);\n\n useEffect(() => {\n if (attachmentsError) {\n announcePolite({\n message: attachmentsError\n });\n } else if (attachments && attachments.length > 0) {\n announcePolite({\n message: t('attachment_added')\n });\n attachmentsAdded.current = true;\n } else if (attachmentsAdded.current && attachments && attachments.length === 0) {\n textAreaRef.current?.focus();\n attachmentsAdded.current = false;\n }\n }, [attachments, attachmentsError]);\n\n const historyView = conversationHistory && (\n <ConversationHistory\n testId={testIds.root}\n {...conversationHistory}\n onItemClick={conversationId => {\n if (condition) {\n focusTextArea.current = true;\n } else {\n textAreaRef.current?.focus();\n }\n\n conversationHistory.onItemClick?.(conversationId);\n }}\n onDismiss={() => {\n focusTextArea.current = true;\n conversationHistory.onDismiss();\n }}\n inFullPage={!condition}\n ref={historyViewRef}\n />\n );\n return (\n <Toaster>\n <StyledFullscreenWrapper>\n <Flex\n container={{ direction: 'column' }}\n as={StyledGenAICoachContainer}\n data-testid={testIds.root}\n variant={variant}\n fullScreen={fullScreen}\n isCompact={isCompact}\n ref={genAICoachRef}\n {...restProps}\n >\n <Flex container={{ justify: 'between', alignItems: 'center', pad: [1.5, 2, 0.5] }}>\n {headerContent}\n </Flex>\n {condition ? (\n <>{conversationHistory ? historyView : GenAICoachElement}</>\n ) : (\n <Grid\n container={{ gap: 0.5, cols: '2fr 3fr' }}\n as={StyledGridContainer}\n conversationHistory={!!conversationHistory}\n >\n {historyView}\n {GenAICoachElement}\n </Grid>\n )}\n {lightboxPreviewProps && <Lightbox {...lightboxPreviewProps} />}\n </Flex>\n </StyledFullscreenWrapper>\n </Toaster>\n );\n};\n\nexport default withTestIds(GenAICoach, getGenAICoachTestIds);\n"]}
|
|
1
|
+
{"version":3,"file":"GenAICoach.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { ChangeEvent, FunctionComponent } from 'react';\n\nimport {\n Button,\n Flex,\n Icon,\n MenuButton,\n Progress,\n Text,\n createUID,\n menuHelpers,\n useI18n,\n useSpeechRecognition,\n useTestIds,\n useTheme,\n withTestIds,\n registerIcon,\n usePrevious,\n getFocusables,\n isMenuGroupProps,\n ErrorState,\n useArrows,\n focusableSelector,\n useLiveLog,\n useOuterEvent,\n ThemeOverride,\n hasProp,\n getActiveElement,\n useElement,\n Actions,\n useBreakpoint,\n Grid,\n useRefMap,\n VisuallyHiddenText,\n FileList,\n Lightbox,\n FullscreenButton,\n FormField,\n useUID,\n SpeechToTextButton,\n Toaster,\n useToaster,\n throttle\n} from '@pega/cosmos-react-core';\nimport type { MenuItemProps, MenuProps } from '@pega/cosmos-react-core';\nimport * as caretUpIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/caret-up.icon';\nimport * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';\nimport * as caretDownIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/caret-down.icon';\nimport * as minusIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/minus.icon';\nimport * as polarisSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/polaris-solid.icon';\nimport * as paperClipIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/paper-clip.icon';\nimport * as warnSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/warn-solid.icon';\nimport * as sendSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/send-solid.icon';\nimport * as squareSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/square-solid.icon';\nimport type { UseSpeechRecognitionProps } from '@pega/cosmos-react-core/lib/hooks/useSpeechRecognition';\n\nimport { getGenAICoachTestIds } from './GenAICoach.test-ids';\nimport { isCoachMessage, isInUtilities, isUserMessage } from './GenAICoach.utils';\nimport {\n StyledMessagesContainer,\n StyledDisclaimerText,\n StyledGenAICoachContainer,\n StyledGenAIOptionsMenu,\n StyledInitialMessageContainer,\n StyledInputContainer,\n StyledMenuSuggestions,\n StyledMessagesList,\n StyledGridContainer,\n StyledFlexWrapper,\n StyledErrorContainer,\n StyledInput,\n StyledGuidedSuggestions,\n StyledComposerSection,\n StyledSendButton,\n StyledGenAIFormControl,\n StyledGenAITextArea,\n StyledInitialMessageGrid,\n StyledGenAIFooter,\n StyledAgentIcon,\n StyledStopButton,\n StyledActionsContainer,\n StyledFullscreenWrapper,\n StyledScrollButton\n} from './GenAICoach.styles';\nimport ConversationHistory from './ConversationHistory';\nimport type { GenAICoachScrollState, Tool } from './GenAICoach.types';\n\nimport { GenAIMessage, InitialSuggestedMessage, type GenAICoachProps } from '.';\n\nregisterIcon(\n caretUpIcon,\n timesIcon,\n caretDownIcon,\n minusIcon,\n polarisSolidIcon,\n paperClipIcon,\n warnSolidIcon,\n squareSolidIcon,\n sendSolidIcon\n);\n\nexport const AgentIcon = () => {\n const uid = useUID();\n const idA = `agent-gradient-a-${uid}`;\n const idB = `agent-gradient-b-${uid}`;\n const idC = `agent-clip-${uid}`;\n\n return (\n <StyledAgentIcon\n xmlns='http://www.w3.org/2000/svg'\n filter='drop-shadow(0 .125rem .125rem rgba(0,0,0,.03)) drop-shadow(.125rem .5rem .5rem rgba(0,0,0,.05)) drop-shadow(.125rem 1rem 1rem rgba(0,0,0,.08))'\n viewBox='0 0 60 60'\n >\n <linearGradient\n id={idA}\n x1='30.586'\n x2='3.059'\n y1='58.111'\n y2='30.584'\n gradientUnits='userSpaceOnUse'\n >\n <stop offset='.115' stopColor='#681fc3' />\n <stop offset='.418' stopColor='#9795f3' />\n <stop offset='.591' stopColor='#b3d2ff' />\n <stop offset='.966' stopColor='#a467f0' />\n </linearGradient>\n <linearGradient\n id={idB}\n x1='7.137'\n x2='29.565'\n y1='0'\n y2='60.151'\n gradientUnits='userSpaceOnUse'\n >\n <stop offset='.457' stopColor='#8165d2' stopOpacity='0' />\n <stop offset='.524' stopColor='#280096' stopOpacity='.4' />\n </linearGradient>\n <clipPath id={idC}>\n <path d='M0 0h60v60H0z' />\n </clipPath>\n <g fillRule='evenodd' clipPath={`url(#${idC})`} clipRule='evenodd'>\n <path\n fill={`url(#${idA})`}\n d='M60 30.002c-9.023.937-16.054 3.632-20.86 8.203C33.633 43.242 30.586 50.508 30 60c-1.173-9.61-4.453-16.875-9.727-21.914C15.35 33.516 8.555 30.82 0 30c9.023-.703 16.054-3.515 21.093-8.438C26.132 16.523 29.063 9.376 29.999 0c.704 10.43 4.102 18.164 10.313 23.202C45.352 27.186 51.914 29.413 60 30zm-3.75-18.75c-2.228.235-3.984.936-5.391 2.226-1.289 1.289-1.992 3.047-2.109 5.274-.235-2.227-.937-3.983-2.108-5.155-1.289-1.288-3.048-2.109-5.391-2.344 2.227-.116 3.867-.82 5.156-1.991 1.288-1.289 2.108-3.164 2.343-5.508.117 2.46.937 4.336 2.344 5.508 1.288 1.171 2.93 1.875 5.156 1.991zM18.75 48.75c-2.345.236-4.103.937-5.392 2.227-1.288 1.172-1.992 2.93-2.108 5.274-.235-2.46-1.055-4.218-2.46-5.507-1.056-1.055-2.812-1.758-5.04-1.992 1.993-.116 3.633-.703 4.804-1.758 1.524-1.172 2.46-3.047 2.696-5.743.116 1.992.703 3.751 1.875 5.156 1.172 1.288 3.047 2.108 5.626 2.344z'\n />\n <path\n fill={`url(#${idB})`}\n d='M60 30.002c-9.023.937-16.054 3.632-20.86 8.203C33.633 43.242 30.586 50.508 30 60c-1.173-9.61-4.453-16.875-9.727-21.914C15.35 33.516 8.555 30.82 0 30c9.023-.703 16.054-3.515 21.093-8.438C26.132 16.523 29.063 9.376 29.999 0c.704 10.43 4.102 18.164 10.313 23.202C45.352 27.186 51.914 29.413 60 30zm-3.75-18.75c-2.228.235-3.984.936-5.391 2.226-1.289 1.289-1.992 3.047-2.109 5.274-.235-2.227-.937-3.983-2.108-5.155-1.289-1.288-3.048-2.109-5.391-2.344 2.227-.116 3.867-.82 5.156-1.991 1.288-1.289 2.108-3.164 2.343-5.508.117 2.46.937 4.336 2.344 5.508 1.288 1.171 2.93 1.875 5.156 1.991zM18.75 48.75c-2.345.236-4.103.937-5.392 2.227-1.288 1.172-1.992 2.93-2.108 5.274-.235-2.46-1.055-4.218-2.46-5.507-1.056-1.055-2.812-1.758-5.04-1.992 1.993-.116 3.633-.703 4.804-1.758 1.524-1.172 2.46-3.047 2.696-5.743.116 1.992.703 3.751 1.875 5.156 1.172 1.288 3.047 2.108 5.626 2.344z'\n />\n </g>\n </StyledAgentIcon>\n );\n};\n\nconst GenAICoach: FunctionComponent<GenAICoachProps> = ({\n testId,\n coachOptions: coachOptionsProps,\n onCoachChange: onCoachChangeProp,\n messages = [],\n onSend,\n initialSuggestedMessages,\n suggestions,\n loading,\n error,\n variant,\n onOpen,\n guidedMode = false,\n actions,\n conversationHistory,\n onLayoutChange,\n onAddAttachment,\n attachments,\n attachmentsError,\n lightboxPreviewProps,\n allowFullScreen = true,\n isInLandingPageUtilities,\n stopProcess,\n voiceToTextProps,\n salutation,\n showSalutation = true,\n ...restProps\n}) => {\n const scrollTolerancePx = 2;\n const scrollThresholdPx = 50;\n const streamBufferLh = 20;\n const bufferExtensionLh = 2;\n const scrollThrottleMs = 50;\n const resizeThrottleMs = 33;\n\n const theme = useTheme();\n const t = useI18n();\n const testIds = useTestIds(testId, getGenAICoachTestIds);\n const { announcePolite } = useLiveLog();\n\n const elementRef = useRef<HTMLElement | null>(null);\n const conversationRef = useRef<HTMLUListElement>(null);\n const genAICoachRef = useRef<HTMLDivElement>(null);\n const [messageEls, getMessageCbRef] = useRefMap<HTMLLIElement>();\n\n const focusInMessageListRef = useRef(false);\n const isUserTriggered = useRef(false);\n const lastFocusedMessageRef = useRef<HTMLElement | null>(null);\n const initialFocusedElementRef = useRef<HTMLElement | null>(null);\n const inputContainerRef = useRef<HTMLDivElement | null>(null);\n const messageContainerRef = useRef<HTMLDivElement | null>(null);\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [suggestionMenuButton, setSuggestionMenuButton] = useElement<HTMLButtonElement>(null);\n const isGeneratingResponse = useRef(false);\n const focusTextArea = useRef(false);\n const historyViewRef = useRef<HTMLUListElement>(null);\n const fileUploadInputRef = useRef<HTMLInputElement>(null);\n const attachmentsAdded = useRef(false);\n const pendingResult = useRef(false);\n\n const scrollStateRef = useRef<GenAICoachScrollState>({\n userAtBottom: false,\n isStreamingActive: false,\n initialBufferApplied: false,\n smoothScrollOnEnd: false,\n ignoreNextScrollEvent: false,\n lastScrollTop: null,\n bufferMinHeight: null\n });\n\n const observersRef = useRef<{\n inputContainer: ResizeObserver | null;\n messageContainer: ResizeObserver | null;\n streamingMessage: ResizeObserver | null;\n }>({\n inputContainer: null,\n messageContainer: null,\n streamingMessage: null\n });\n\n const isSmallOrAbove = useBreakpoint('sm', {\n breakpointRef: genAICoachRef\n });\n\n const [message, setMessage] = useState('');\n const [interimMessage, setInterimMessage] = useState('');\n const [coachOptions, setCoachOptions] = useState<MenuProps['items']>(coachOptionsProps);\n const [arrowKey, setArrowKey] = useState<\n 'ArrowRight' | 'ArrowLeft' | 'ArrowUp' | 'ArrowDown' | null\n >(null);\n\n const [animationInitialCursorPos, setAnimationInitialCursorPos] = useState(0);\n const [focused, setFocused] = useState(false);\n const [fullScreen, setFullScreen] = useState(false);\n\n const [showScrollToBottom, setShowScrollToBottom] = useState(false);\n\n const prevFullScreen = usePrevious(fullScreen);\n const previousMessages = usePrevious(messages);\n\n const composerId = useUID();\n\n const latestMessage = messages.at(-1);\n const isLatestAgentMessageStreaming =\n !!latestMessage && isCoachMessage(latestMessage) && !!latestMessage.loading;\n\n const condition =\n !(fullScreen && conversationHistory) &&\n (variant.placement === 'dialog' ||\n variant.placement === 'utilities' ||\n (variant.placement === 'fullpage' && !isSmallOrAbove) ||\n !conversationHistory);\n\n const applyBuffer = useCallback(() => {\n const container = messageContainerRef.current;\n const conversationEl = conversationRef.current;\n\n const scrollState = scrollStateRef.current;\n\n if (!container || !conversationEl) return;\n\n const contentHeight = Array.from(conversationEl.children).reduce((sum, child) => {\n if (child instanceof HTMLElement) return sum + child.offsetHeight;\n return sum;\n }, 0);\n\n const computedStyle = window.getComputedStyle(conversationEl);\n const lineHeightPx = parseFloat(computedStyle.lineHeight) || 20;\n const bufferSizePx = streamBufferLh * lineHeightPx;\n\n const currentBuffer = scrollState.bufferMinHeight ?? 0;\n\n const distanceToBufferEnd = currentBuffer - contentHeight;\n const extensionThreshold = bufferExtensionLh * lineHeightPx;\n\n if (currentBuffer === 0 || distanceToBufferEnd < extensionThreshold) {\n const newBuffer = contentHeight + bufferSizePx;\n scrollState.bufferMinHeight = newBuffer;\n\n conversationEl.style.setProperty('--stream-buffer', `${newBuffer}px`);\n }\n }, []);\n\n const manageBuffer = useCallback(\n (action: 'extend' | 'clear' | 'init') => {\n const container = messageContainerRef.current;\n const conversationEl = conversationRef.current;\n\n const scrollState = scrollStateRef.current;\n\n if (!container || !conversationEl) return;\n\n if (action === 'clear') {\n conversationEl.style.removeProperty('--stream-buffer');\n scrollState.bufferMinHeight = null;\n return;\n }\n\n if (action === 'init') {\n applyBuffer();\n return;\n }\n\n if (!scrollState.isStreamingActive || !scrollState.userAtBottom) return;\n\n applyBuffer();\n },\n [applyBuffer]\n );\n\n const followStreamingMessage = useCallback(() => {\n const container = messageContainerRef.current;\n const scrollState = scrollStateRef.current;\n\n if (\n !container ||\n !scrollState.isStreamingActive ||\n !scrollState.userAtBottom ||\n (scrollState.lastScrollTop !== null &&\n container.scrollTop < scrollState.lastScrollTop - scrollTolerancePx)\n )\n return;\n\n manageBuffer('extend');\n\n const targetScroll = container.scrollHeight - container.clientHeight;\n const currentScroll = container.scrollTop;\n\n if (Math.abs(currentScroll - targetScroll) > scrollTolerancePx) {\n scrollState.ignoreNextScrollEvent = true;\n container.scrollTo({ top: targetScroll, behavior: 'auto' });\n }\n }, [manageBuffer]);\n\n const scrollToLatest = useCallback(\n (behavior: ScrollBehavior = 'auto', preferLast: boolean = true) => {\n const container = messageContainerRef.current;\n const conversationEl = conversationRef.current;\n const lastMessage = conversationEl?.lastElementChild;\n\n if (!container) return;\n\n const scrollState = scrollStateRef.current;\n\n if (preferLast && lastMessage && lastMessage instanceof HTMLElement) {\n const scrollHeight = container.scrollHeight;\n const clientHeight = container.clientHeight;\n\n const targetScrollTop = scrollHeight - clientHeight - scrollThresholdPx / 2;\n\n if (targetScrollTop > container.scrollTop) {\n scrollState.ignoreNextScrollEvent = true;\n container.scrollTo({ top: targetScrollTop, behavior: 'auto' });\n }\n\n return;\n }\n\n scrollState.ignoreNextScrollEvent = true;\n container.scrollTo({ top: container.scrollHeight, behavior });\n },\n []\n );\n\n const updateScrollState = useCallback(\n (isScrollEvent: boolean = false) => {\n const container = messageContainerRef.current;\n const conversationEl = conversationRef.current;\n\n if (!container || !conversationEl) {\n setShowScrollToBottom(false);\n return;\n }\n\n const state = scrollStateRef.current;\n\n if (state.initialBufferApplied) {\n scrollToLatest('auto', true);\n setShowScrollToBottom(false);\n state.initialBufferApplied = false;\n return;\n }\n\n if (state.smoothScrollOnEnd) {\n scrollToLatest('smooth', false);\n setShowScrollToBottom(false);\n state.smoothScrollOnEnd = false;\n return;\n }\n\n if (isScrollEvent && state.ignoreNextScrollEvent) {\n state.ignoreNextScrollEvent = false;\n return;\n }\n\n const isUserScroll = isScrollEvent;\n const { clientHeight, scrollHeight, scrollTop } = container;\n\n const trueContentHeight = Array.from(conversationEl.children).reduce(\n (sum, child) => (child instanceof HTMLElement ? sum + child.offsetHeight : sum),\n 0\n );\n\n const hasOverflow = trueContentHeight > clientHeight + scrollTolerancePx;\n const distanceFromBufferedBottom = scrollHeight - scrollTop - clientHeight;\n const isAtBufferedBottom = distanceFromBufferedBottom <= scrollThresholdPx;\n\n if (!state.isStreamingActive) {\n const distanceFromBottom = trueContentHeight - scrollTop - clientHeight;\n const isAtBottom = distanceFromBottom <= scrollThresholdPx;\n setShowScrollToBottom(hasOverflow && !isAtBottom);\n\n return;\n }\n\n if (isUserScroll) {\n const previousScrollTop = state.lastScrollTop;\n state.lastScrollTop = scrollTop;\n\n if (previousScrollTop !== null && scrollTop < previousScrollTop - scrollTolerancePx) {\n state.userAtBottom = false;\n } else if (isAtBufferedBottom) {\n state.userAtBottom = true;\n }\n }\n\n if (state.userAtBottom && isAtBufferedBottom) {\n followStreamingMessage();\n setShowScrollToBottom(false);\n } else {\n setShowScrollToBottom(hasOverflow && !isAtBufferedBottom);\n }\n },\n [followStreamingMessage, scrollToLatest]\n );\n\n const updateScrollStateOnResize = useMemo(\n () => throttle(() => updateScrollState(false), resizeThrottleMs),\n [updateScrollState]\n );\n\n const updateScrollStateOnScrollEvent = useMemo(\n () => throttle(() => updateScrollState(true), scrollThrottleMs),\n [updateScrollState]\n );\n\n const handleScrollToBottomClick = useCallback(() => {\n const scrollState = scrollStateRef.current;\n const isStreaming = scrollState.isStreamingActive;\n\n scrollToLatest(isStreaming ? 'auto' : 'smooth', false);\n\n if (isStreaming) {\n scrollState.userAtBottom = true;\n }\n\n setShowScrollToBottom(false);\n }, [scrollToLatest]);\n\n const setInputContainerRef = useCallback((el: HTMLDivElement | null) => {\n if (inputContainerRef.current === el) return;\n\n observersRef.current.inputContainer?.disconnect();\n observersRef.current.inputContainer = null;\n\n inputContainerRef.current = el;\n if (!el || !genAICoachRef.current) return;\n\n genAICoachRef.current.style.setProperty(\n '--composer-height',\n `${Math.round(el.getBoundingClientRect().height)}px`\n );\n\n const ro = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry && genAICoachRef.current) {\n const height = Math.round(entry.contentRect.height);\n genAICoachRef.current.style.setProperty('--composer-height', `${height}px`);\n }\n });\n\n ro.observe(el);\n observersRef.current.inputContainer = ro;\n }, []);\n\n const setMessageContainerRef = useCallback((el: HTMLDivElement | null) => {\n messageContainerRef.current = el;\n }, []);\n\n const onCoachChange = (id: MenuItemProps['id']) => {\n setCoachOptions(cur => {\n return cur.map(coach => {\n return {\n ...coach,\n selected: coach.id === id\n };\n });\n });\n onCoachChangeProp?.(id);\n };\n\n const selectedCoach = useMemo(() => {\n const selected = menuHelpers.getSelected(coachOptions)[0];\n if (selected) return selected.primary;\n\n if (coachOptions[0]) {\n if (isMenuGroupProps(coachOptions[0])) {\n return coachOptions[0].items[0].primary;\n }\n return coachOptions[0].primary;\n }\n }, [coachOptions]);\n\n const onResult: UseSpeechRecognitionProps['onResult'] = useCallback(value => {\n pendingResult.current = false;\n setMessage(prevMessage => {\n return prevMessage ? `${prevMessage} ${value}` : value;\n });\n setInterimMessage('');\n }, []);\n\n const onInterimResult: NonNullable<UseSpeechRecognitionProps['onInterimResult']> = useCallback(\n value => {\n if (value) {\n pendingResult.current = true;\n setInterimMessage(message ? ` ${value}` : value);\n }\n },\n [message]\n );\n\n const {\n supported,\n active,\n start,\n stop,\n error: voiceToTextError\n } = useSpeechRecognition({\n onResult,\n onInterimResult,\n langCode: voiceToTextProps?.langCode\n });\n\n const handleSendMessage = useCallback(() => {\n const isMessageAndAttachmentsEmpty = !message && (!attachments || attachments.length === 0);\n const hasAttachmentsError =\n attachments &&\n attachments.length > 0 &&\n (attachmentsError || attachments.some(attachment => attachment.error));\n const isCoachMessageLoading =\n latestMessage && isCoachMessage(latestMessage) && latestMessage.loading;\n if (\n isMessageAndAttachmentsEmpty ||\n hasAttachmentsError ||\n isCoachMessageLoading ||\n (latestMessage && isCoachMessage(latestMessage) && latestMessage.isToolConfirmation)\n )\n return;\n onSend({\n id: createUID(),\n message,\n fromComposer: true,\n attachmentIds: attachments?.map(({ id }) => id)\n });\n setMessage('');\n if (active) {\n stop();\n }\n }, [[message, latestMessage, attachments, attachmentsError]]);\n\n const handleEnterKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n handleSendMessage();\n }\n };\n\n const handleTextAreaChange = useCallback(\n (e: ChangeEvent<HTMLTextAreaElement>) => {\n setMessage(e.currentTarget.value);\n },\n [setMessage]\n );\n\n const renderCoachOptions = useMemo(() => {\n if (coachOptions.length === 0 || !selectedCoach) {\n return null;\n }\n if (coachOptions.length === 1) {\n return <Text variant='h2'>{selectedCoach}</Text>;\n }\n return (\n <MenuButton\n text={selectedCoach}\n aria-label={t('agent_switcher', [selectedCoach])}\n variant='text'\n as={StyledGenAIOptionsMenu}\n menu={{\n mode: 'single-select',\n items: coachOptions,\n onItemClick: onCoachChange\n }}\n />\n );\n }, [coachOptions, selectedCoach]);\n\n const headerContent = useMemo(() => {\n return isInUtilities(variant) && variant.state === 'minimized' ? (\n <>\n <Text variant='h2'>{selectedCoach}</Text>\n <Flex container={{ alignItems: 'center' }}>\n <Button\n icon\n label={t('maximize')}\n aria-label={t('agent_noun', [t('maximize')])}\n variant='simple'\n onClick={() => {\n variant.onStateChange('maximized');\n isUserTriggered.current = true;\n }}\n >\n <Icon name='caret-up' />\n </Button>\n </Flex>\n </>\n ) : (\n <>\n {renderCoachOptions}\n\n <Flex container as={StyledActionsContainer}>\n {isInUtilities(variant) && !fullScreen && (\n <Button\n icon\n label={t('minimize')}\n aria-label={t('agent_noun', [t('minimize')])}\n variant='simple'\n onClick={() => {\n variant.onStateChange('minimized');\n isUserTriggered.current = true;\n }}\n >\n <Icon name='minus' />\n </Button>\n )}\n\n {allowFullScreen && <FullscreenButton onClick={() => setFullScreen(prev => !prev)} />}\n\n {actions && (\n <Actions data-testid={testIds.actions} contextualLabel={selectedCoach} {...actions} />\n )}\n {variant.placement === 'dialog' && (\n <Button\n icon\n label={t('close')}\n aria-label={t('agent_noun', [t('close')])}\n variant='simple'\n onClick={variant.onClose}\n >\n <Icon name='times' />\n </Button>\n )}\n </Flex>\n </>\n );\n }, [variant, coachOptions, fullScreen]);\n\n const getMessageContainingElement = (element: Element | null) => {\n if (element) return Array.from(messageEls.values()).find(el => el && el.contains(element));\n return null;\n };\n\n const setLastFocusableElement = () => {\n focusInMessageListRef.current = false;\n lastFocusedMessageRef.current = elementRef.current ?? null;\n if (\n lastFocusedMessageRef.current &&\n lastFocusedMessageRef.current?.tagName.toLowerCase() !== 'li'\n ) {\n lastFocusedMessageRef.current =\n getMessageContainingElement(lastFocusedMessageRef.current) ?? null;\n }\n };\n\n const onResize = () => {\n if (genAICoachRef.current && isInUtilities(variant)) {\n const height = genAICoachRef.current.clientHeight;\n variant.setGenAIHeight?.(height);\n }\n };\n\n const variantState = useMemo(() => {\n if (variant.placement === 'utilities') {\n return variant.state;\n }\n }, [variant]);\n\n useEffect(() => {\n if (isInUtilities(variant)) {\n onResize();\n }\n if (isUserTriggered.current) {\n if (\n isInUtilities(variant) &&\n (variant.state === 'minimized' || (guidedMode && variant.state === 'maximized')) &&\n getFocusables(genAICoachRef).length > 0\n ) {\n getFocusables(genAICoachRef)[0].focus();\n isUserTriggered.current = false;\n } else if (variant.placement !== 'fullpage') {\n textAreaRef.current?.focus();\n elementRef.current = null;\n isUserTriggered.current = false;\n }\n }\n }, [variantState, variant.placement]);\n\n useEffect(() => {\n onLayoutChange?.(!condition);\n }, [condition]);\n\n useEffect(() => {\n onOpen?.();\n window.addEventListener('resize', onResize);\n\n return () => {\n window.removeEventListener('resize', onResize);\n\n Object.values(observersRef.current).forEach(observer => {\n observer?.disconnect();\n });\n };\n }, []);\n\n useEffect(() => {\n const prevFilteredMsgs = previousMessages?.filter(item => !hasProp(item, 'loading')) ?? [];\n const currentFilteredMsgs = messages?.filter(item => !hasProp(item, 'loading')) ?? [];\n\n if (\n prevFilteredMsgs.length < currentFilteredMsgs.length ||\n (latestMessage && hasProp(latestMessage, 'loading'))\n ) {\n if (latestMessage && isUserMessage(latestMessage)) {\n textAreaRef.current?.focus();\n setLastFocusableElement();\n elementRef.current = null;\n setArrowKey(null);\n } else if (latestMessage?.loading) {\n isGeneratingResponse.current = true;\n } else {\n announcePolite({ message: t('agent_noun', [`${t('new_message')} ${t('from')}`]) });\n }\n }\n }, [messages]);\n\n useEffect(() => {\n const scrollState = scrollStateRef.current;\n const wasStreaming = scrollState.isStreamingActive;\n\n if (isLatestAgentMessageStreaming && !wasStreaming) {\n scrollStateRef.current = {\n ...scrollStateRef.current,\n isStreamingActive: true,\n initialBufferApplied: true,\n userAtBottom: false,\n smoothScrollOnEnd: false,\n lastScrollTop: null\n };\n\n requestAnimationFrame(() => {\n manageBuffer('init');\n });\n\n return;\n }\n\n if (!isLatestAgentMessageStreaming && wasStreaming) {\n scrollStateRef.current = {\n ...scrollStateRef.current,\n isStreamingActive: false,\n initialBufferApplied: false,\n userAtBottom: false,\n smoothScrollOnEnd: true\n };\n\n manageBuffer('clear');\n }\n }, [isLatestAgentMessageStreaming, manageBuffer]);\n\n useEffect(() => {\n const container = messageContainerRef.current;\n const content = conversationRef.current;\n\n if (!container || !content) return;\n\n const containerRO = new ResizeObserver(updateScrollStateOnResize);\n containerRO.observe(container);\n containerRO.observe(content);\n\n observersRef.current.messageContainer = containerRO;\n\n let streamingMessageRO: ResizeObserver | null = null;\n const lastMessageEl = content.lastElementChild;\n\n if (isLatestAgentMessageStreaming && lastMessageEl) {\n const handleStreamingUpdate = throttle(() => {\n followStreamingMessage();\n updateScrollState(false);\n }, resizeThrottleMs);\n\n streamingMessageRO = new ResizeObserver(handleStreamingUpdate);\n streamingMessageRO.observe(lastMessageEl);\n\n observersRef.current.streamingMessage = streamingMessageRO;\n }\n\n return () => {\n containerRO.disconnect();\n observersRef.current.messageContainer = null;\n\n streamingMessageRO?.disconnect();\n observersRef.current.streamingMessage = null;\n };\n }, [\n messages.length,\n isLatestAgentMessageStreaming,\n followStreamingMessage,\n updateScrollState,\n updateScrollStateOnResize\n ]);\n\n useEffect(() => {\n if (suggestionMenuButton && isGeneratingResponse.current) {\n announcePolite({ message: t('response_generated') });\n isGeneratingResponse.current = false;\n\n const activeElement = getActiveElement();\n if (activeElement && activeElement === document.body) suggestionMenuButton.focus();\n }\n }, [suggestionMenuButton]);\n\n /** Supports arrow key behaviors */\n useEffect(() => {\n const focusables = getFocusables(elementRef);\n if (arrowKey === 'ArrowRight') {\n focusables[0]?.focus();\n } else if (arrowKey === 'ArrowLeft') {\n focusables[focusables.length - 1]?.focus();\n }\n }, [arrowKey, elementRef.current]);\n\n useArrows(\n conversationRef,\n {\n cycle: true,\n selector: ':scope > li',\n dir: 'up-down',\n allowTabFocus: true,\n initialFocusElement: initialFocusedElementRef.current\n },\n [messages, initialFocusedElementRef.current]\n );\n\n useArrows(\n elementRef,\n {\n cycle: true,\n selector: `li ${focusableSelector}`,\n dir: 'left-right',\n allowTabFocus: true,\n updateTabIndex: false\n },\n [messages, elementRef.current, arrowKey]\n );\n\n useOuterEvent('mousedown', [conversationRef.current], () => {\n setArrowKey(null);\n focusInMessageListRef.current = false;\n });\n\n const { push } = useToaster();\n\n const onSpeechToTextButtonClick = useCallback(() => {\n if (active) {\n stop();\n } else {\n start();\n }\n }, [active, stop, start]);\n\n const onFileChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n const newFiles = Array.from(e.target.files);\n onAddAttachment?.(newFiles);\n }\n };\n\n const getGridColumns = () => {\n const multiCol = 'repeat(auto-fit, minmax(calc(100% / 4 - 1rem), 1fr))';\n const singleCol = '1fr';\n\n if (!isSmallOrAbove && !fullScreen) return singleCol;\n\n return multiCol;\n };\n\n useEffect(() => {\n if (voiceToTextError) {\n push({ content: voiceToTextError });\n }\n }, [voiceToTextError]);\n\n const genAIFooter = (\n <Flex container={{ direction: 'column' }} as={StyledGenAIFooter}>\n <FormField label={t('message_pega_gen_ai_coach')} labelHidden labelFor={composerId}>\n <StyledGenAIFormControl focused={focused}>\n <Flex container={{ direction: 'column', gap: 0.25 }}>\n <StyledGenAITextArea\n id={composerId}\n ref={textAreaRef}\n value={interimMessage ? `${message}${interimMessage}` : message}\n placeholder={t('write_message')}\n onKeyDown={handleEnterKeyDown}\n onChange={handleTextAreaChange}\n onFocus={() => {\n if (active) stop();\n setFocused(true);\n }}\n onBlur={() => {\n setFocused(false);\n }}\n autoResize\n />\n\n <Flex\n container={{\n direction: 'row',\n justify: 'between',\n gap: 1,\n pad: [undefined, 1, 1, 1]\n }}\n >\n <Flex container={{ alignItems: 'center' }}>\n {suggestions && (\n <MenuButton\n text={t('suggestions')}\n variant='simple'\n icon='chat-typing'\n iconOnly\n as={StyledMenuSuggestions}\n menu={{\n items: suggestions,\n onItemClick: id => {\n const selected = menuHelpers.getItem(suggestions, id);\n if (selected) {\n setMessage(selected.primary);\n textAreaRef.current?.focus();\n }\n }\n }}\n showArrow={false}\n />\n )}\n {voiceToTextProps?.enableDictation && supported && (\n <SpeechToTextButton active={active} onClick={onSpeechToTextButtonClick} />\n )}\n\n {onAddAttachment && (\n <>\n <Button\n icon\n onClick={() => {\n if (fileUploadInputRef.current) {\n fileUploadInputRef.current.value = '';\n }\n fileUploadInputRef.current?.click();\n }}\n variant='simple'\n label={t('add_attachment')}\n >\n <Icon name='paper-clip' />\n </Button>\n <StyledInput\n type='file'\n ref={fileUploadInputRef}\n onChange={onFileChange}\n multiple={false}\n data-testid={testIds.attachments}\n />\n </>\n )}\n </Flex>\n\n {(latestMessage && isCoachMessage(latestMessage) && latestMessage.loading) ||\n (active && pendingResult.current) ? (\n <Flex\n container={{\n gap: 1,\n justify: 'end',\n alignItems: 'center',\n pad: 1\n }}\n >\n {active && pendingResult.current\n ? t('processing_speech')\n : t('generating_response')}\n <Progress placement='inline' />\n </Flex>\n ) : (\n <>\n {latestMessage &&\n isCoachMessage(latestMessage) &&\n latestMessage.isToolConfirmation ? (\n <StyledStopButton\n iconOnly\n icon='square-solid'\n variant='primary'\n label={t('stop_processing')}\n onClick={() => {\n textAreaRef.current?.focus();\n stopProcess?.();\n }}\n />\n ) : (\n <StyledSendButton\n variant='primary'\n onClick={handleSendMessage}\n icon\n label={t('send')}\n aria-label={t('send_message')}\n >\n <Icon name='send-solid' />\n </StyledSendButton>\n )}\n </>\n )}\n </Flex>\n </Flex>\n </StyledGenAIFormControl>\n </FormField>\n\n {attachments && attachments.length > 0 && (\n <>\n <Flex\n as={FileList}\n type='item'\n aria-label={`${t('attachments')}`}\n items={attachments}\n container={{ pad: [1, 0] }}\n />\n\n {attachmentsError && (\n <Flex container={{ gap: 1, alignItems: 'center' }} as={StyledErrorContainer}>\n <Icon name='warn-solid' />\n <VisuallyHiddenText>{`${t('error')} `}</VisuallyHiddenText>\n\n {attachmentsError}\n </Flex>\n )}\n </>\n )}\n\n <Flex container={{ justify: 'center' }}>\n <StyledDisclaimerText inFullPage={!condition}>{t('ai_disclaimer')}</StyledDisclaimerText>\n </Flex>\n </Flex>\n );\n\n const isCompact =\n variant.placement === 'fullpage' &&\n !fullScreen &&\n !isInLandingPageUtilities &&\n messages.length === 0;\n\n const fullPageAndInitialScreen =\n (fullScreen || (variant.placement === 'fullpage' && !isInLandingPageUtilities)) &&\n messages.length === 0;\n\n const renderTextArea = fullPageAndInitialScreen ? null : genAIFooter;\n\n const GenAICoachElement = (\n <>\n {((isInUtilities(variant) && variant.state !== 'minimized') || !isInUtilities(variant)) && (\n <Flex container={{ direction: 'column' }} as={StyledFlexWrapper}>\n <Flex\n as={StyledMessagesContainer}\n ref={setMessageContainerRef}\n container={\n loading || error\n ? { direction: 'column', pad: [0, 2], justify: 'center' }\n : { direction: 'column', pad: [0, 2] }\n }\n item={{ grow: 1 }}\n onScroll={updateScrollStateOnScrollEvent}\n >\n {loading || error ? (\n <Flex container={{ justify: 'center', alignItems: 'center' }}>\n {loading ? (\n <Progress\n variant='ring'\n placement='block'\n message={typeof loading === 'string' ? loading : t('loading')}\n />\n ) : (\n <ErrorState message={error} />\n )}\n </Flex>\n ) : (\n <>\n {messages.length === 0 ? (\n <Flex\n as={StyledInitialMessageContainer}\n container={{\n justify: 'center',\n direction: 'column',\n alignItems: 'center',\n gap: 2\n }}\n item={{ grow: 1 }}\n >\n {((isInUtilities(variant) && variant.state === 'maximized') ||\n !isInUtilities(variant)) &&\n showSalutation && (\n <Flex container={{ direction: 'column', alignItems: 'center', gap: 1 }}>\n <AgentIcon />\n <Text variant='h3'>{salutation ?? t('welcome_text')}</Text>\n </Flex>\n )}\n\n <Grid\n as={StyledInitialMessageGrid}\n container={{ cols: getGridColumns(), gap: 1.5 }}\n >\n {initialSuggestedMessages?.map(initialSuggestedMessage => (\n <InitialSuggestedMessage\n {...initialSuggestedMessage}\n onSend={initialMessage => {\n if (guidedMode) {\n onSend({\n id: initialMessage.id,\n message: initialMessage.message\n });\n } else {\n setMessage(initialMessage.message);\n }\n isUserTriggered.current = true;\n textAreaRef.current?.focus();\n }}\n testId={initialSuggestedMessage.id}\n />\n ))}\n </Grid>\n\n {fullPageAndInitialScreen && !guidedMode && genAIFooter}\n </Flex>\n ) : (\n <Flex\n as={StyledMessagesList}\n ref={conversationRef}\n aria-label={`${t('conversation')} ${t('view')}`}\n container={{ direction: 'column' }}\n onFocus={() => {\n if (!focusInMessageListRef.current) {\n if (lastFocusedMessageRef.current) {\n lastFocusedMessageRef.current.focus();\n } else {\n /** Focus on the latest message if the chat message list was never focused */\n const lastChild =\n conversationRef.current && conversationRef.current.lastElementChild;\n if (lastChild instanceof HTMLElement) {\n lastChild.focus();\n }\n }\n }\n focusInMessageListRef.current = true;\n setArrowKey(null);\n }}\n onKeyDown={(e: KeyboardEvent) => {\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n setArrowKey(e.key);\n elementRef.current =\n getMessageContainingElement(document.activeElement) ?? null;\n lastFocusedMessageRef.current = elementRef.current;\n } else if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n const activeMessageElement = Array.from(messageEls.values()).find(\n el => el === document.activeElement\n );\n elementRef.current =\n getMessageContainingElement(document.activeElement) ?? null;\n initialFocusedElementRef.current = elementRef.current;\n\n if (\n activeMessageElement &&\n getFocusables(activeMessageElement).length > 0\n ) {\n setArrowKey(e.key);\n }\n } else if (e.key === 'Tab') {\n e.preventDefault();\n setLastFocusableElement();\n if (e.shiftKey) {\n if (\n !condition &&\n conversationHistory &&\n conversationHistory.selectedItemId\n ) {\n const selectedId = historyViewRef.current?.querySelector<HTMLLIElement>(\n `li[id=\"${conversationHistory.selectedItemId}\"]`\n );\n\n if (selectedId) {\n selectedId.focus();\n e.preventDefault();\n }\n } else {\n const prevElement =\n conversationRef.current?.parentElement?.parentElement\n ?.previousElementSibling;\n if (prevElement) {\n const focusables = getFocusables(prevElement);\n if (focusables.length) {\n e.preventDefault();\n focusables[focusables.length - 1].focus();\n }\n }\n }\n } else {\n const nextElement =\n conversationRef.current?.parentElement?.nextElementSibling;\n if (nextElement) {\n const focusables = getFocusables(nextElement);\n if (focusables.length) {\n e.preventDefault();\n focusables[0].focus();\n }\n }\n\n setArrowKey(null);\n }\n }\n }}\n >\n {messages.map(item => {\n const messageProps = isCoachMessage(item)\n ? {\n ...item,\n suggestions:\n messages.findLast(messageItem => isCoachMessage(messageItem))?.id ===\n item.id\n ? item.suggestions\n : undefined,\n onSend,\n onSubmit: item.isToolConfirmation\n ? (tools: Tool[]) => {\n onSend({\n ...item,\n message: item.message ?? '',\n tools\n });\n }\n : undefined\n }\n : item;\n\n return (\n <GenAIMessage\n {...messageProps}\n ref={getMessageCbRef(item.id)}\n testId={item.id}\n announceInteraction={!focusInMessageListRef.current}\n onAnimationCursorUpdate={animatedTillCursor => {\n if (isCoachMessage(item)) {\n setAnimationInitialCursorPos(animatedTillCursor);\n }\n }}\n {...(prevFullScreen !== fullScreen ? { animationInitialCursorPos } : {})}\n />\n );\n })}\n </Flex>\n )}\n </>\n )}\n </Flex>\n\n {((isInUtilities(variant) && variant.state !== 'minimized') || !isInUtilities(variant)) &&\n !loading && (\n <Flex\n container={{ direction: 'column' }}\n as={StyledInputContainer}\n ref={setInputContainerRef}\n >\n <StyledComposerSection>\n {guidedMode ? (\n <>\n {suggestions && messages.length > 0 && (\n <>\n {latestMessage &&\n isCoachMessage(latestMessage) &&\n latestMessage.loading ? (\n <Flex\n container={{\n gap: 1,\n justify: 'center',\n alignItems: 'center',\n pad: 1\n }}\n >\n {t('generating_response')}\n <Progress\n placement='inline'\n focusOnVisible\n message={t('generating_response')}\n />\n </Flex>\n ) : (\n <ThemeOverride\n theme={{\n components: {\n button: {\n color: theme.base.palette.ai,\n 'secondary-color': theme.base.palette.ai,\n 'secondary-fill-style': 'outline'\n }\n }\n }}\n >\n <MenuButton\n as={StyledGuidedSuggestions}\n text={t('ask_coach', [selectedCoach ?? ''])}\n variant='primary'\n icon='polaris-solid'\n ref={setSuggestionMenuButton}\n menu={{\n items: suggestions,\n onItemClick: id => {\n const selected = menuHelpers.getItem(suggestions, id);\n if (selected) {\n onSend({\n id: selected.id,\n message: selected.primary\n });\n }\n }\n }}\n />\n </ThemeOverride>\n )}\n\n <Flex container={{ justify: 'center' }}>\n <StyledDisclaimerText inFullPage={!condition}>\n {t('ai_disclaimer')}\n </StyledDisclaimerText>\n </Flex>\n </>\n )}\n </>\n ) : (\n renderTextArea\n )}\n </StyledComposerSection>\n </Flex>\n )}\n\n {showScrollToBottom && (\n <StyledScrollButton\n icon\n onClick={handleScrollToBottomClick}\n ariaLabel={t('scroll_to_latest_message')}\n >\n <Icon name='caret-down' />\n </StyledScrollButton>\n )}\n </Flex>\n )}\n </>\n );\n\n useEffect(() => {\n if (focusTextArea.current && !conversationHistory && textAreaRef.current) {\n textAreaRef.current.focus();\n focusTextArea.current = false;\n }\n }, [conversationHistory, focusTextArea.current]);\n\n useEffect(() => {\n if (attachmentsError) {\n announcePolite({\n message: attachmentsError\n });\n } else if (attachments && attachments.length > 0) {\n announcePolite({\n message: t('attachment_added')\n });\n attachmentsAdded.current = true;\n } else if (attachmentsAdded.current && attachments && attachments.length === 0) {\n textAreaRef.current?.focus();\n attachmentsAdded.current = false;\n }\n }, [attachments, attachmentsError]);\n\n const historyView = conversationHistory && (\n <ConversationHistory\n testId={testIds.root}\n {...conversationHistory}\n onItemClick={conversationId => {\n if (condition) {\n focusTextArea.current = true;\n } else {\n textAreaRef.current?.focus();\n }\n\n conversationHistory.onItemClick?.(conversationId);\n }}\n onDismiss={() => {\n focusTextArea.current = true;\n conversationHistory.onDismiss();\n }}\n inFullPage={!condition}\n ref={historyViewRef}\n />\n );\n\n return (\n <Toaster>\n <StyledFullscreenWrapper>\n <Flex\n container={{ direction: 'column' }}\n as={StyledGenAICoachContainer}\n data-testid={testIds.root}\n variant={variant}\n fullScreen={fullScreen}\n isCompact={isCompact}\n ref={genAICoachRef}\n {...restProps}\n >\n <Flex container={{ justify: 'between', alignItems: 'center', pad: [1.5, 2, 0.5] }}>\n {headerContent}\n </Flex>\n\n {condition ? (\n <>{conversationHistory ? historyView : GenAICoachElement}</>\n ) : (\n <Grid\n container={{ gap: 0.5, cols: '2fr 3fr' }}\n as={StyledGridContainer}\n conversationHistory={!!conversationHistory}\n >\n {historyView}\n {GenAICoachElement}\n </Grid>\n )}\n\n {lightboxPreviewProps && <Lightbox {...lightboxPreviewProps} />}\n </Flex>\n </StyledFullscreenWrapper>\n </Toaster>\n );\n};\n\nexport default withTestIds(GenAICoach, getGenAICoachTestIds);\n"]}
|
|
@@ -70,4 +70,5 @@ export declare const StyledConfirmationMsg: import("styled-components").StyledCo
|
|
|
70
70
|
getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly []>;
|
|
71
71
|
}, import("styled-components").DefaultTheme, {}, never>;
|
|
72
72
|
export declare const StyledActionsContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
73
|
+
export declare const StyledScrollButton: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").ButtonProps>, import("styled-components").DefaultTheme, {}, never>;
|
|
73
74
|
//# sourceMappingURL=GenAICoach.styles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAICoach.styles.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.styles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GenAICoach.styles.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.styles.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,eAAO,MAAM,oBAAoB,wGAAc,CAAC;AAGhD,eAAO,MAAM,qBAAqB,yGAAe,CAAC;AAElD,eAAO,MAAM,uBAAuB,yGAYnC,CAAC;AAIF,eAAO,MAAM,uBAAuB;2BA7Be,CAAC;uDA+BnD,CAAC;AAEF,eAAO,MAAM,yBAAyB;aAC3B,eAAe,CAAC,SAAS,CAAC;gBACvB,eAAe,CAAC,iBAAiB,CAAC;eACnC,OAAO;SAkGnB,CAAC;AAIF,eAAO,MAAM,sBAAsB;2BAxGJ,CAAC;uDA6H9B,CAAC;AAIH,eAAO,MAAM,qBAAqB;2BAjIH,CAAC;uDA6I9B,CAAC;AAIH,eAAO,MAAM,oBAAoB;gBAA8B,OAAO;SAgBpE,CAAC;AAIH,eAAO,MAAM,iBAAiB,yGAa7B,CAAC;AAIF,eAAO,MAAM,mBAAmB;yBAAqC,OAAO;SAa3E,CAAC;AAIF,eAAO,MAAM,6BAA6B,yGAOxC,CAAC;AAIH,eAAO,MAAM,oBAAoB,kNAe/B,CAAC;AAIH,eAAO,MAAM,gBAAgB,oNAe3B,CAAC;AAIH,eAAO,MAAM,0BAA0B,yGAUtC,CAAC;AAIF,eAAO,MAAM,eAAe,kNAK1B,CAAC;AAIH,eAAO,MAAM,aAAa,uGAexB,CAAC;AAIH,eAAO,MAAM,iBAAiB,wGAgC7B,CAAC;AAIF,eAAO,MAAM,mBAAmB,wGAgB/B,CAAC;AAIF,eAAO,MAAM,sBAAsB,yGAoBjC,CAAC;AAIH,eAAO,MAAM,kBAAkB,wGA8B9B,CAAC;AAIF,eAAO,MAAM,sBAAsB;gBAA8B,OAAO;SAcvE,CAAC;AAIF,eAAO,MAAM,UAAU,kNAMtB,CAAC;AAIF,eAAO,MAAM,4BAA4B;2BA/ZjC,CAAA;uDAmbN,CAAC;AAIH,eAAO,MAAM,iBAAiB,wGAI7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,yGAQ5B,CAAC;AAIH,eAAO,MAAM,oBAAoB,yGAI/B,CAAC;AAIH,eAAO,MAAM,WAAW,2GAItB,CAAC;AAEH,eAAO,MAAM,qBAAqB,+QAIhC,CAAC;AAIH,eAAO,MAAM,uBAAuB;2BAhfL,CAAC;uDAsf/B,CAAC;AAEF,eAAO,MAAM,eAAe,yGAG3B,CAAC;AAIF,eAAO,MAAM,sBAAsB;cAAmC,OAAO;SAmB3E,CAAC;AAIH,eAAO,MAAM,mBAAmB;2BAnjBK,CAAA;uDAikBnC,CAAC;AAIH,eAAO,MAAM,gBAAgB,oNAgB3B,CAAC;AAIH,eAAO,MAAM,wBAAwB,yGAGpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,oNAiBrC,CAAC;AAIH,eAAO,MAAM,wBAAwB,0GAEpC,CAAC;AAEF,eAAO,MAAM,iBAAiB;2BAlkBZ,CAAC;uDAglBjB,CAAC;AAIH,eAAO,MAAM,iBAAiB,yGAG7B,CAAC;AACF,eAAO,MAAM,gBAAgB,kRAE5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,uGAc7B,CAAC;AAIF,eAAO,MAAM,0BAA0B,yGAgBtC,CAAC;AAIF,eAAO,MAAM,qBAAqB;2BA3sBxB,CAAC;uDA0tBV,CAAC;AAIF,eAAO,MAAM,sBAAsB,yGAQlC,CAAC;AAIF,eAAO,MAAM,kBAAkB,oNAS7B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import styled, { css } from 'styled-components';
|
|
2
2
|
import { useContext } from 'react';
|
|
3
3
|
import { mix } from 'polished';
|
|
4
|
-
import { AIButton, AppShellContext, Button, FileList, Flex, FormControl, MenuButton, StyledEmptyState, StyledErrorState, StyledIcon, StyledText, SummaryItem, Text, TextArea, calculateFontSize, defaultThemeProp, tryCatch, Avatar, calculateForegroundColor, StyledButton, Fullscreen } from '@pega/cosmos-react-core';
|
|
4
|
+
import { AIButton, AppShellContext, Button, FileList, Flex, FormControl, MenuButton, StyledEmptyState, StyledErrorState, StyledIcon, StyledText, SummaryItem, Text, TextArea, calculateFontSize, defaultThemeProp, tryCatch, Avatar, calculateForegroundColor, StyledButton, Fullscreen, animations } from '@pega/cosmos-react-core';
|
|
5
5
|
import { StyledCardContent } from '@pega/cosmos-react-core/lib/components/Card/CardContent';
|
|
6
6
|
import { StyledFormField } from '@pega/cosmos-react-core/lib/components/FormField/FormField';
|
|
7
7
|
import { StyledEditorContainer } from '@pega/cosmos-react-rte/lib/components/RichTextEditor/RichTextEditor.styles';
|
|
@@ -140,6 +140,7 @@ export const StyledFlexWrapper = styled.div(({ theme: { base: { spacing } } }) =
|
|
|
140
140
|
margin-block-start: ${spacing};
|
|
141
141
|
height: 100%;
|
|
142
142
|
overflow-y: auto;
|
|
143
|
+
position: relative;
|
|
143
144
|
`;
|
|
144
145
|
});
|
|
145
146
|
StyledFlexWrapper.defaultProps = defaultThemeProp;
|
|
@@ -210,8 +211,13 @@ export const StyledMessage = styled.p(({ theme }) => {
|
|
|
210
211
|
width: 100%;
|
|
211
212
|
min-width: 0;
|
|
212
213
|
overflow-wrap: break-word;
|
|
214
|
+
|
|
213
215
|
${StyledEditorContainer} {
|
|
214
216
|
padding: 0;
|
|
217
|
+
|
|
218
|
+
span {
|
|
219
|
+
animation: ${animations.reveal} 1s forwards;
|
|
220
|
+
}
|
|
215
221
|
}
|
|
216
222
|
`;
|
|
217
223
|
});
|
|
@@ -273,6 +279,8 @@ export const StyledMessagesList = styled.ul(({ theme: { base: { shadow, spacing
|
|
|
273
279
|
align-self: center;
|
|
274
280
|
max-width: ${maxWidthMessage};
|
|
275
281
|
width: 100%;
|
|
282
|
+
min-height: var(--stream-buffer, auto);
|
|
283
|
+
|
|
276
284
|
& > li {
|
|
277
285
|
max-width: calc(0.8 * ${maxWidthMessage});
|
|
278
286
|
}
|
|
@@ -483,4 +491,15 @@ export const StyledActionsContainer = styled.div(() => css `
|
|
|
483
491
|
}
|
|
484
492
|
`);
|
|
485
493
|
StyledActionsContainer.defaultProps = defaultThemeProp;
|
|
494
|
+
export const StyledScrollButton = styled(Button)(({ theme }) => {
|
|
495
|
+
return css `
|
|
496
|
+
position: absolute;
|
|
497
|
+
bottom: calc(var(--composer-height, 0rem) + calc(5 * ${theme.base.spacing}));
|
|
498
|
+
width: fit-content;
|
|
499
|
+
align-self: center;
|
|
500
|
+
z-index: 1;
|
|
501
|
+
box-shadow: ${theme.base.shadow.high};
|
|
502
|
+
`;
|
|
503
|
+
});
|
|
504
|
+
StyledScrollButton.defaultProps = defaultThemeProp;
|
|
486
505
|
//# sourceMappingURL=GenAICoach.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAICoach.styles.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.styles.ts"],"names":[],"mappings":"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","sourcesContent":["import styled, { css } from 'styled-components';\nimport { useContext } from 'react';\nimport { mix } from 'polished';\n\nimport {\n AIButton,\n AppShellContext,\n Button,\n FileList,\n Flex,\n FormControl,\n MenuButton,\n StyledEmptyState,\n StyledErrorState,\n StyledIcon,\n StyledText,\n SummaryItem,\n Text,\n TextArea,\n calculateFontSize,\n defaultThemeProp,\n tryCatch,\n Avatar,\n calculateForegroundColor,\n StyledButton,\n Fullscreen\n} from '@pega/cosmos-react-core';\nimport { StyledCardContent } from '@pega/cosmos-react-core/lib/components/Card/CardContent';\nimport { StyledFormField } from '@pega/cosmos-react-core/lib/components/FormField/FormField';\nimport { StyledEditorContainer } from '@pega/cosmos-react-rte/lib/components/RichTextEditor/RichTextEditor.styles';\nimport { StyledProgress } from '@pega/cosmos-react-core/lib/components/Progress/Progress.styles';\nimport { resizeDrawerMaxWidth } from '@pega/cosmos-react-core/lib/styles/constants';\nimport { lineClamp } from '@pega/cosmos-react-core/lib/styles/mixins';\nimport { RichTextViewer } from '@pega/cosmos-react-rte';\n\nimport type { GenAICoachProps } from './GenAICoach.types';\nimport { isInUtilities } from './GenAICoach.utils';\n\nexport const StyledMessageWrapper = styled.li``;\nconst maxWidthMessage = '46rem';\n\nexport const StyledComposerSection = styled.div``;\n\nexport const StyledMessagesContainer = styled.div(\n ({\n theme: {\n base: { spacing }\n }\n }) => {\n return css`\n margin-block-end: calc(2 * ${spacing});\n height: 100%;\n overflow-y: auto;\n `;\n }\n);\n\nStyledMessagesContainer.defaultProps = defaultThemeProp;\n\nexport const StyledFullscreenWrapper = styled(Fullscreen)`\n height: 100%;\n`;\n\nexport const StyledGenAICoachContainer = styled.div<{\n variant: GenAICoachProps['variant'];\n fullScreen: GenAICoachProps['allowFullScreen'];\n isCompact: boolean;\n}>(\n ({\n theme: {\n base: {\n palette,\n 'z-index': zIndex,\n spacing,\n breakpoints,\n animation,\n 'border-radius': baseBorderRadius\n },\n components: {\n card: { 'border-radius': cardBorderRadius },\n agent: { background: agentBackground, 'foreground-color': agentForegroundColor },\n 'form-control': { 'border-radius': formControlBorderRadius }\n }\n },\n variant,\n fullScreen,\n isCompact\n }) => {\n const { previewActive } = useContext(AppShellContext);\n const foregroundColorForAgent = calculateForegroundColor(agentBackground, agentForegroundColor);\n\n return css`\n background: ${agentBackground};\n color: ${foregroundColorForAgent};\n min-width: var(--utilities-drawer-min-width);\n border-radius: ${cardBorderRadius};\n transition: height ${animation.speed} ${animation.timing.ease};\n\n ${variant.placement === 'dialog' &&\n css`\n border-radius: calc(${formControlBorderRadius} * ${baseBorderRadius});\n `}\n\n ${isInUtilities(variant) &&\n !fullScreen &&\n css`\n min-height: 3rem;\n max-width: 31.25rem;\n box-shadow: 0 -1rem 1rem ${palette['app-background']};\n border-radius: ${cardBorderRadius} ${cardBorderRadius} 0 0;\n position: fixed;\n inset-block-end: 0;\n inset-inline-end: calc(2 * ${spacing});\n z-index: calc(${zIndex.drawer} + 1);\n width: 25rem;\n\n ${previewActive &&\n css`\n @media (min-width: ${breakpoints.xl}) {\n margin-inline-end: min(var(--resize-drawer-width), ${resizeDrawerMaxWidth});\n }\n `}\n\n ${variant.state === 'minimized' &&\n css`\n height: 3rem;\n `}\n `}\n\n /*\n ~85% of Utilities height and fixed height if screen size less than md and devices with coarse pointer\n FIXME: This is a stopgap to address issue in Android web views via React Native where VH units do not work\n */\n ${((isInUtilities(variant) && variant.state === 'maximized') || !isInUtilities(variant)) &&\n !fullScreen &&\n css`\n height: calc(0.85 * var(--case-view-height, 95vh));\n @media (pointer: coarse) and (max-width: ${breakpoints.md}) {\n height: 40rem;\n }\n `}\n\n ${variant.placement === 'fullpage' &&\n css`\n height: var(--content-height-in-view, 100vh);\n `}\n\n ${isCompact &&\n css`\n height: 100%;\n max-height: var(--content-height-in-view, 100vh);\n\n ${StyledMessagesContainer} {\n margin-block-end: 0;\n }\n `}\n\n ${fullScreen &&\n css`\n height: 100vh;\n border-radius: 0;\n `}\n `;\n }\n);\n\nStyledGenAICoachContainer.defaultProps = defaultThemeProp;\n\nexport const StyledGenAIOptionsMenu = styled(MenuButton)(({\n theme: {\n base: {\n 'font-size': fontSize,\n 'font-scale': fontScale,\n 'font-weight': fontWeight,\n palette: { ai }\n }\n }\n}) => {\n const { l } = calculateFontSize(fontSize, fontScale);\n return css`\n color: inherit;\n ${StyledIcon}:first-child {\n color: ${ai};\n }\n ${StyledText} {\n font-weight: ${fontWeight['semi-bold']};\n font-size: ${l};\n }\n `;\n});\n\nStyledGenAIOptionsMenu.defaultProps = defaultThemeProp;\n\nexport const StyledMenuSuggestions = styled(MenuButton)(({\n theme: {\n base: { 'border-radius': baseBorderRadius, spacing },\n components: {\n button: { 'border-radius': borderRadius }\n }\n }\n}) => {\n return css`\n padding: calc(0.75 * ${spacing});\n border-radius: calc(${baseBorderRadius} * ${borderRadius});\n `;\n});\n\nStyledMenuSuggestions.defaultProps = defaultThemeProp;\n\nexport const StyledDisclaimerText = styled(Text)<{ inFullPage: boolean }>(({\n inFullPage,\n theme: {\n base: { 'font-size': fontSize, 'font-scale': fontScale, spacing }\n }\n}) => {\n const systemFontSize = calculateFontSize(fontSize, fontScale).xs;\n return css`\n font-size: ${systemFontSize};\n margin-block-start: ${spacing};\n ${inFullPage &&\n css`\n padding-block-end: calc(2 * ${spacing});\n `}\n opacity: 0.7;\n `;\n});\n\nStyledDisclaimerText.defaultProps = defaultThemeProp;\n\nexport const StyledFlexWrapper = styled.div(\n ({\n theme: {\n base: { spacing }\n }\n }) => {\n return css`\n margin-block-start: ${spacing};\n height: 100%;\n overflow-y: auto;\n `;\n }\n);\n\nStyledFlexWrapper.defaultProps = defaultThemeProp;\n\nexport const StyledGridContainer = styled.div<{ conversationHistory: boolean }>(\n ({ theme: { base }, conversationHistory }) => {\n return css`\n height: 100%;\n min-height: 0;\n ${conversationHistory &&\n css`\n border: 0.0625rem solid ${base.palette['border-line']};\n margin: calc(2 * ${base.spacing});\n border-radius: ${base['border-radius']};\n `}\n `;\n }\n);\n\nStyledGridContainer.defaultProps = defaultThemeProp;\n\nexport const StyledInitialMessageContainer = styled.div(() => {\n return css`\n ${StyledFormField} {\n width: 100%;\n max-width: ${maxWidthMessage};\n }\n `;\n});\n\nStyledInitialMessageContainer.defaultProps = defaultThemeProp;\n\nexport const StyledInputContainer = styled(Flex)(({\n theme: {\n base: { spacing }\n }\n}) => {\n return css`\n margin-block-end: calc(2 * ${spacing});\n margin-inline: calc(2 * ${spacing});\n align-items: center;\n\n ${StyledFormField}, ${StyledComposerSection} {\n width: 100%;\n max-width: ${maxWidthMessage};\n }\n `;\n});\n\nStyledInputContainer.defaultProps = defaultThemeProp;\n\nexport const StyledSuggestion = styled(Button)(({\n theme: {\n base: { spacing }\n }\n}) => {\n return css`\n width: fit-content;\n padding: ${spacing};\n white-space: normal;\n word-break: break-word;\n & + & {\n margin-inline-start: 0;\n text-align: left;\n }\n `;\n});\n\nStyledSuggestion.defaultProps = defaultThemeProp;\n\nexport const StyledSuggestionsContainer = styled.div(\n ({\n theme: {\n base: { spacing }\n }\n }) => {\n return css`\n margin-block-start: calc(1.5 * ${spacing});\n `;\n }\n);\n\nStyledSuggestionsContainer.defaultProps = defaultThemeProp;\n\nexport const StyledTimeStamp = styled(Text)(() => {\n return css`\n display: flex;\n align-items: center;\n `;\n});\n\nStyledTimeStamp.defaultProps = defaultThemeProp;\n\nexport const StyledMessage = styled.p(({ theme }) => {\n return css`\n margin-block-start: calc(0.5 * ${theme.base.spacing});\n width: 100%;\n min-width: 0;\n overflow-wrap: break-word;\n ${StyledEditorContainer} {\n padding: 0;\n }\n `;\n});\n\nStyledMessage.defaultProps = defaultThemeProp;\n\nexport const StyledUserMessage = styled.li(\n ({\n theme: {\n base: { 'border-radius': borderRadius, spacing },\n components: {\n agent: {\n 'user-message': {\n background: userMessageBackground,\n 'foreground-color': userMessageForegroundColor\n }\n }\n }\n }\n }) => {\n const foregroundColorForUserMessage = calculateForegroundColor(\n userMessageBackground,\n userMessageForegroundColor\n );\n\n return css`\n overflow-wrap: break-word;\n background: ${userMessageBackground};\n color: ${foregroundColorForUserMessage};\n margin-inline-start: calc(4 * ${spacing});\n margin-block-end: calc(0.5 * ${spacing});\n padding: calc(0.5 * ${spacing});\n border-start-start-radius: min(calc(3 * ${borderRadius}), 1.5rem);\n border-start-end-radius: min(${borderRadius}, 0.5rem);\n border-end-start-radius: min(calc(3 * ${borderRadius}), 1.5rem);\n border-end-end-radius: min(calc(3 * ${borderRadius}), 1.5rem);\n `;\n }\n);\n\nStyledUserMessage.defaultProps = defaultThemeProp;\n\nexport const StyledSystemMessage = styled.li(\n ({\n theme: {\n base: { spacing, 'font-size': fontSize, 'font-scale': fontScale }\n }\n }) => {\n const systemFontSize = calculateFontSize(fontSize, fontScale).xs;\n return css`\n overflow-wrap: break-word;\n font-size: ${systemFontSize};\n opacity: 0.7;\n text-align: center;\n padding-inline: calc(2 * ${spacing});\n margin-block: calc(2 * ${spacing});\n `;\n }\n);\n\nStyledSystemMessage.defaultProps = defaultThemeProp;\n\nexport const StyledSuggestedMessage = styled.div(({ theme }) => {\n return css`\n column-gap: calc(2 * ${theme.base.spacing});\n min-height: 2rem;\n max-width: calc(0.8 * ${maxWidthMessage});\n width: 100%;\n text-align: left;\n border: 0.0625rem solid ${theme.base.palette['border-line']};\n border-radius: calc(0.5 * ${theme.base['border-radius']});\n padding-inline-end: calc(2 * ${theme.base.spacing});\n cursor: pointer;\n &:hover,\n &:focus {\n border: 0.0625rem solid ${theme.base.palette.interactive};\n }\n ${StyledCardContent} {\n padding-inline: calc(2 * ${theme.base.spacing});\n padding-block: calc(1.5 * ${theme.base.spacing});\n }\n `;\n});\n\nStyledSuggestedMessage.defaultProps = defaultThemeProp;\n\nexport const StyledMessagesList = styled.ul(\n ({\n theme: {\n base: { shadow, spacing }\n }\n }) => {\n return css`\n padding-block-start: ${spacing};\n list-style-type: none;\n align-self: center;\n max-width: ${maxWidthMessage};\n width: 100%;\n & > li {\n max-width: calc(0.8 * ${maxWidthMessage});\n }\n & > li[from='user'] {\n margin-inline-start: auto;\n margin-block-end: ${spacing};\n }\n & > li[type='message'] {\n &:focus-visible {\n outline: none;\n box-shadow: ${shadow.focus};\n }\n margin-block-end: ${spacing};\n }\n `;\n }\n);\n\nStyledMessagesList.defaultProps = defaultThemeProp;\n\nexport const StyledHistoryContainer = styled(Flex)<{ inFullPage: boolean }>(\n ({ theme, inFullPage }) => css`\n height: 100%;\n min-height: 0;\n ${inFullPage &&\n css`\n border-inline-end: 0.0625rem solid ${theme.base.palette['border-line']};\n `}\n\n ${StyledEmptyState}, ${StyledErrorState} {\n justify-content: flex-start;\n padding-inline: calc(2 * ${theme.base.spacing});\n }\n `\n);\n\nStyledHistoryContainer.defaultProps = defaultThemeProp;\n\nexport const StyledList = styled(Flex)(\n ({ theme }) => css`\n height: 100%;\n overflow-y: auto;\n margin-block-end: calc(2 * ${theme.base.spacing});\n `\n);\n\nStyledList.defaultProps = defaultThemeProp;\n\nexport const StyledHistorySummaryListItem = styled(SummaryItem)(({ theme }) => {\n const hoverColor = tryCatch(() =>\n mix(0.95, theme.base.palette['primary-background'], theme.base.palette.interactive)\n );\n return css`\n padding-inline: calc(2 * ${theme.base.spacing});\n padding-block: ${theme.base.spacing};\n border-block-end: 0.0625rem solid ${theme.base.palette['border-line']};\n\n &:hover {\n background-color: ${hoverColor};\n cursor: pointer;\n }\n &[aria-selected='true'] {\n background-color: ${hoverColor};\n }\n &:focus {\n border: 0.0625rem solid ${theme.base.palette.interactive};\n }\n `;\n});\n\nStyledHistorySummaryListItem.defaultProps = defaultThemeProp;\n\nexport const StyledLoadingItem = styled.li`\n ${StyledProgress} {\n margin: 0;\n }\n`;\n\nexport const StyledGroupHeader = styled.div(({ theme }) => {\n return css`\n padding-inline: calc(2 * ${theme.base.spacing});\n padding-block-start: calc(2 * ${theme.base.spacing});\n padding-block-end: calc(0.5 * ${theme.base.spacing});\n border-block-end: 0.0625rem solid ${theme.base.palette['border-line']};\n font-weight: ${theme.base['font-weight']['semi-bold']};\n `;\n});\n\nStyledGroupHeader.defaultProps = defaultThemeProp;\n\nexport const StyledErrorContainer = styled.div(({ theme }) => {\n return css`\n color: ${theme.base.palette.urgent};\n `;\n});\n\nStyledErrorContainer.defaultProps = defaultThemeProp;\n\nexport const StyledInput = styled.input(() => {\n return css`\n display: none;\n `;\n});\n\nexport const StyledAttachmentsList = styled(FileList)(({ theme }) => {\n return css`\n padding: ${theme.base.spacing};\n `;\n});\n\nStyledAttachmentsList.defaultProps = defaultThemeProp;\n\nexport const StyledGuidedSuggestions = styled(MenuButton)`\n width: 100%;\n max-width: ${maxWidthMessage};\n > span {\n justify-content: center;\n }\n`;\n\nexport const StyledAgentIcon = styled.svg`\n width: 3rem;\n height: 3rem;\n`;\n\nStyledAgentIcon.defaultProps = defaultThemeProp;\n\nexport const StyledGenAIFormControl = styled(FormControl)<{ focused?: boolean }>(({\n theme,\n focused\n}) => {\n return css`\n overflow: hidden;\n\n ${focused &&\n css`\n &:not([disabled]) {\n border-color: ${theme.components['form-control'][':focus']['border-color']};\n box-shadow: ${theme.components['form-control'][':focus']['box-shadow']};\n }\n\n &:hover:not([readonly]):not([disabled]):not(:focus, :focus-within) {\n border-color: transparent;\n }\n `}\n `;\n});\n\nStyledGenAIFormControl.defaultProps = defaultThemeProp;\n\nexport const StyledGenAITextArea = styled(TextArea)(({ theme: { components } }) => {\n return css`\n border: none;\n box-shadow: none;\n min-height: ${components.input.height};\n max-height: 6rem;\n overflow-y: auto;\n padding-block-end: 0;\n &:focus:not([disabled]) {\n border: none;\n box-shadow: none;\n background-color: transparent;\n }\n `;\n});\n\nStyledGenAITextArea.defaultProps = defaultThemeProp;\n\nexport const StyledSendButton = styled(Button)(({\n theme: {\n base: { palette, 'border-radius': baseBorderRadius },\n components: {\n 'form-control': { 'border-radius': formControlBorderRadius }\n }\n }\n}) => {\n return css`\n border-radius: calc(${baseBorderRadius} * ${formControlBorderRadius});\n margin-inline-start: auto;\n\n ${StyledIcon} {\n color: ${palette.light};\n }\n `;\n});\n\nStyledSendButton.defaultProps = defaultThemeProp;\n\nexport const StyledInitialMessageGrid = styled.div`\n max-width: ${maxWidthMessage};\n width: 100%;\n`;\n\nexport const StyledInitialMessageButton = styled(Button)(({\n theme: {\n base: { spacing }\n }\n}) => {\n return css`\n white-space: normal;\n text-align: left;\n min-width: unset;\n padding-block: ${spacing};\n padding-inline: calc(2 * ${spacing});\n align-items: start;\n\n & + & {\n margin-inline-start: 0;\n }\n `;\n});\n\nStyledInitialMessageButton.defaultProps = defaultThemeProp;\n\nexport const StyledInitialMessageText = styled.span`\n ${lineClamp(3)};\n`;\n\nexport const StyledGenAIAvatar = styled(Avatar)(({\n theme: {\n components: {\n agent: {\n 'coach-message': {\n avatar: { background: avatarBackground }\n }\n }\n }\n }\n}) => {\n return css`\n background: ${avatarBackground};\n `;\n});\n\nStyledGenAIAvatar.defaultProps = defaultThemeProp;\n\nexport const StyledGenAIFooter = styled.div`\n width: 100%;\n max-width: ${maxWidthMessage};\n`;\nexport const StyledStopButton = styled(AIButton)`\n border-radius: 50%;\n`;\n\nexport const StyledToolMessage = styled.p(\n ({\n theme: {\n base: {\n spacing,\n palette: { 'border-line': borderLine }\n }\n }\n }) => {\n return css`\n border-block-end: 0.125rem solid ${borderLine};\n padding: calc(2 * ${spacing});\n `;\n }\n);\n\nStyledToolMessage.defaultProps = defaultThemeProp;\n\nexport const StyledToolMessageContainer = styled.div(\n ({\n theme: {\n base: {\n spacing,\n 'border-radius': borderRadius,\n palette: { 'border-line': borderLine }\n }\n }\n }) => {\n return css`\n border: 0.125rem solid ${borderLine};\n border-radius: calc(3 * ${borderRadius});\n margin-block: ${spacing};\n `;\n }\n);\n\nStyledToolMessageContainer.defaultProps = defaultThemeProp;\n\nexport const StyledConfirmationMsg = styled(RichTextViewer)(\n ({\n theme: {\n base,\n components: {\n 'form-control': {\n ':read-only': { 'background-color': readOnlyBackgroundColor }\n }\n }\n }\n }) => `\n padding: 0;\n background-color: ${readOnlyBackgroundColor};\n border-radius: calc(0.5 * ${base['border-radius']});\n`\n);\n\nStyledConfirmationMsg.defaultProps = defaultThemeProp;\n\nexport const StyledActionsContainer = styled.div(\n () => css`\n margin-inline-start: auto;\n\n ${StyledButton} {\n margin-inline-start: 0;\n }\n `\n);\n\nStyledActionsContainer.defaultProps = defaultThemeProp;\n"]}
|
|
1
|
+
{"version":3,"file":"GenAICoach.styles.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.styles.ts"],"names":[],"mappings":"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","sourcesContent":["import styled, { css } from 'styled-components';\nimport { useContext } from 'react';\nimport { mix } from 'polished';\n\nimport {\n AIButton,\n AppShellContext,\n Button,\n FileList,\n Flex,\n FormControl,\n MenuButton,\n StyledEmptyState,\n StyledErrorState,\n StyledIcon,\n StyledText,\n SummaryItem,\n Text,\n TextArea,\n calculateFontSize,\n defaultThemeProp,\n tryCatch,\n Avatar,\n calculateForegroundColor,\n StyledButton,\n Fullscreen,\n animations\n} from '@pega/cosmos-react-core';\nimport { StyledCardContent } from '@pega/cosmos-react-core/lib/components/Card/CardContent';\nimport { StyledFormField } from '@pega/cosmos-react-core/lib/components/FormField/FormField';\nimport { StyledEditorContainer } from '@pega/cosmos-react-rte/lib/components/RichTextEditor/RichTextEditor.styles';\nimport { StyledProgress } from '@pega/cosmos-react-core/lib/components/Progress/Progress.styles';\nimport { resizeDrawerMaxWidth } from '@pega/cosmos-react-core/lib/styles/constants';\nimport { lineClamp } from '@pega/cosmos-react-core/lib/styles/mixins';\nimport { RichTextViewer } from '@pega/cosmos-react-rte';\n\nimport type { GenAICoachProps } from './GenAICoach.types';\nimport { isInUtilities } from './GenAICoach.utils';\n\nexport const StyledMessageWrapper = styled.li``;\nconst maxWidthMessage = '46rem';\n\nexport const StyledComposerSection = styled.div``;\n\nexport const StyledMessagesContainer = styled.div(\n ({\n theme: {\n base: { spacing }\n }\n }) => {\n return css`\n margin-block-end: calc(2 * ${spacing});\n height: 100%;\n overflow-y: auto;\n `;\n }\n);\n\nStyledMessagesContainer.defaultProps = defaultThemeProp;\n\nexport const StyledFullscreenWrapper = styled(Fullscreen)`\n height: 100%;\n`;\n\nexport const StyledGenAICoachContainer = styled.div<{\n variant: GenAICoachProps['variant'];\n fullScreen: GenAICoachProps['allowFullScreen'];\n isCompact: boolean;\n}>(\n ({\n theme: {\n base: {\n palette,\n 'z-index': zIndex,\n spacing,\n breakpoints,\n animation,\n 'border-radius': baseBorderRadius\n },\n components: {\n card: { 'border-radius': cardBorderRadius },\n agent: { background: agentBackground, 'foreground-color': agentForegroundColor },\n 'form-control': { 'border-radius': formControlBorderRadius }\n }\n },\n variant,\n fullScreen,\n isCompact\n }) => {\n const { previewActive } = useContext(AppShellContext);\n const foregroundColorForAgent = calculateForegroundColor(agentBackground, agentForegroundColor);\n\n return css`\n background: ${agentBackground};\n color: ${foregroundColorForAgent};\n min-width: var(--utilities-drawer-min-width);\n border-radius: ${cardBorderRadius};\n transition: height ${animation.speed} ${animation.timing.ease};\n\n ${variant.placement === 'dialog' &&\n css`\n border-radius: calc(${formControlBorderRadius} * ${baseBorderRadius});\n `}\n\n ${isInUtilities(variant) &&\n !fullScreen &&\n css`\n min-height: 3rem;\n max-width: 31.25rem;\n box-shadow: 0 -1rem 1rem ${palette['app-background']};\n border-radius: ${cardBorderRadius} ${cardBorderRadius} 0 0;\n position: fixed;\n inset-block-end: 0;\n inset-inline-end: calc(2 * ${spacing});\n z-index: calc(${zIndex.drawer} + 1);\n width: 25rem;\n\n ${previewActive &&\n css`\n @media (min-width: ${breakpoints.xl}) {\n margin-inline-end: min(var(--resize-drawer-width), ${resizeDrawerMaxWidth});\n }\n `}\n\n ${variant.state === 'minimized' &&\n css`\n height: 3rem;\n `}\n `}\n\n /*\n ~85% of Utilities height and fixed height if screen size less than md and devices with coarse pointer\n FIXME: This is a stopgap to address issue in Android web views via React Native where VH units do not work\n */\n ${((isInUtilities(variant) && variant.state === 'maximized') || !isInUtilities(variant)) &&\n !fullScreen &&\n css`\n height: calc(0.85 * var(--case-view-height, 95vh));\n @media (pointer: coarse) and (max-width: ${breakpoints.md}) {\n height: 40rem;\n }\n `}\n\n ${variant.placement === 'fullpage' &&\n css`\n height: var(--content-height-in-view, 100vh);\n `}\n\n ${isCompact &&\n css`\n height: 100%;\n max-height: var(--content-height-in-view, 100vh);\n\n ${StyledMessagesContainer} {\n margin-block-end: 0;\n }\n `}\n\n ${fullScreen &&\n css`\n height: 100vh;\n border-radius: 0;\n `}\n `;\n }\n);\n\nStyledGenAICoachContainer.defaultProps = defaultThemeProp;\n\nexport const StyledGenAIOptionsMenu = styled(MenuButton)(({\n theme: {\n base: {\n 'font-size': fontSize,\n 'font-scale': fontScale,\n 'font-weight': fontWeight,\n palette: { ai }\n }\n }\n}) => {\n const { l } = calculateFontSize(fontSize, fontScale);\n return css`\n color: inherit;\n ${StyledIcon}:first-child {\n color: ${ai};\n }\n ${StyledText} {\n font-weight: ${fontWeight['semi-bold']};\n font-size: ${l};\n }\n `;\n});\n\nStyledGenAIOptionsMenu.defaultProps = defaultThemeProp;\n\nexport const StyledMenuSuggestions = styled(MenuButton)(({\n theme: {\n base: { 'border-radius': baseBorderRadius, spacing },\n components: {\n button: { 'border-radius': borderRadius }\n }\n }\n}) => {\n return css`\n padding: calc(0.75 * ${spacing});\n border-radius: calc(${baseBorderRadius} * ${borderRadius});\n `;\n});\n\nStyledMenuSuggestions.defaultProps = defaultThemeProp;\n\nexport const StyledDisclaimerText = styled(Text)<{ inFullPage: boolean }>(({\n inFullPage,\n theme: {\n base: { 'font-size': fontSize, 'font-scale': fontScale, spacing }\n }\n}) => {\n const systemFontSize = calculateFontSize(fontSize, fontScale).xs;\n return css`\n font-size: ${systemFontSize};\n margin-block-start: ${spacing};\n ${inFullPage &&\n css`\n padding-block-end: calc(2 * ${spacing});\n `}\n opacity: 0.7;\n `;\n});\n\nStyledDisclaimerText.defaultProps = defaultThemeProp;\n\nexport const StyledFlexWrapper = styled.div(\n ({\n theme: {\n base: { spacing }\n }\n }) => {\n return css`\n margin-block-start: ${spacing};\n height: 100%;\n overflow-y: auto;\n position: relative;\n `;\n }\n);\n\nStyledFlexWrapper.defaultProps = defaultThemeProp;\n\nexport const StyledGridContainer = styled.div<{ conversationHistory: boolean }>(\n ({ theme: { base }, conversationHistory }) => {\n return css`\n height: 100%;\n min-height: 0;\n ${conversationHistory &&\n css`\n border: 0.0625rem solid ${base.palette['border-line']};\n margin: calc(2 * ${base.spacing});\n border-radius: ${base['border-radius']};\n `}\n `;\n }\n);\n\nStyledGridContainer.defaultProps = defaultThemeProp;\n\nexport const StyledInitialMessageContainer = styled.div(() => {\n return css`\n ${StyledFormField} {\n width: 100%;\n max-width: ${maxWidthMessage};\n }\n `;\n});\n\nStyledInitialMessageContainer.defaultProps = defaultThemeProp;\n\nexport const StyledInputContainer = styled(Flex)(({\n theme: {\n base: { spacing }\n }\n}) => {\n return css`\n margin-block-end: calc(2 * ${spacing});\n margin-inline: calc(2 * ${spacing});\n align-items: center;\n\n ${StyledFormField}, ${StyledComposerSection} {\n width: 100%;\n max-width: ${maxWidthMessage};\n }\n `;\n});\n\nStyledInputContainer.defaultProps = defaultThemeProp;\n\nexport const StyledSuggestion = styled(Button)(({\n theme: {\n base: { spacing }\n }\n}) => {\n return css`\n width: fit-content;\n padding: ${spacing};\n white-space: normal;\n word-break: break-word;\n & + & {\n margin-inline-start: 0;\n text-align: left;\n }\n `;\n});\n\nStyledSuggestion.defaultProps = defaultThemeProp;\n\nexport const StyledSuggestionsContainer = styled.div(\n ({\n theme: {\n base: { spacing }\n }\n }) => {\n return css`\n margin-block-start: calc(1.5 * ${spacing});\n `;\n }\n);\n\nStyledSuggestionsContainer.defaultProps = defaultThemeProp;\n\nexport const StyledTimeStamp = styled(Text)(() => {\n return css`\n display: flex;\n align-items: center;\n `;\n});\n\nStyledTimeStamp.defaultProps = defaultThemeProp;\n\nexport const StyledMessage = styled.p(({ theme }) => {\n return css`\n margin-block-start: calc(0.5 * ${theme.base.spacing});\n width: 100%;\n min-width: 0;\n overflow-wrap: break-word;\n\n ${StyledEditorContainer} {\n padding: 0;\n\n span {\n animation: ${animations.reveal} 1s forwards;\n }\n }\n `;\n});\n\nStyledMessage.defaultProps = defaultThemeProp;\n\nexport const StyledUserMessage = styled.li(\n ({\n theme: {\n base: { 'border-radius': borderRadius, spacing },\n components: {\n agent: {\n 'user-message': {\n background: userMessageBackground,\n 'foreground-color': userMessageForegroundColor\n }\n }\n }\n }\n }) => {\n const foregroundColorForUserMessage = calculateForegroundColor(\n userMessageBackground,\n userMessageForegroundColor\n );\n\n return css`\n overflow-wrap: break-word;\n background: ${userMessageBackground};\n color: ${foregroundColorForUserMessage};\n margin-inline-start: calc(4 * ${spacing});\n margin-block-end: calc(0.5 * ${spacing});\n padding: calc(0.5 * ${spacing});\n border-start-start-radius: min(calc(3 * ${borderRadius}), 1.5rem);\n border-start-end-radius: min(${borderRadius}, 0.5rem);\n border-end-start-radius: min(calc(3 * ${borderRadius}), 1.5rem);\n border-end-end-radius: min(calc(3 * ${borderRadius}), 1.5rem);\n `;\n }\n);\n\nStyledUserMessage.defaultProps = defaultThemeProp;\n\nexport const StyledSystemMessage = styled.li(\n ({\n theme: {\n base: { spacing, 'font-size': fontSize, 'font-scale': fontScale }\n }\n }) => {\n const systemFontSize = calculateFontSize(fontSize, fontScale).xs;\n return css`\n overflow-wrap: break-word;\n font-size: ${systemFontSize};\n opacity: 0.7;\n text-align: center;\n padding-inline: calc(2 * ${spacing});\n margin-block: calc(2 * ${spacing});\n `;\n }\n);\n\nStyledSystemMessage.defaultProps = defaultThemeProp;\n\nexport const StyledSuggestedMessage = styled.div(({ theme }) => {\n return css`\n column-gap: calc(2 * ${theme.base.spacing});\n min-height: 2rem;\n max-width: calc(0.8 * ${maxWidthMessage});\n width: 100%;\n text-align: left;\n border: 0.0625rem solid ${theme.base.palette['border-line']};\n border-radius: calc(0.5 * ${theme.base['border-radius']});\n padding-inline-end: calc(2 * ${theme.base.spacing});\n cursor: pointer;\n &:hover,\n &:focus {\n border: 0.0625rem solid ${theme.base.palette.interactive};\n }\n ${StyledCardContent} {\n padding-inline: calc(2 * ${theme.base.spacing});\n padding-block: calc(1.5 * ${theme.base.spacing});\n }\n `;\n});\n\nStyledSuggestedMessage.defaultProps = defaultThemeProp;\n\nexport const StyledMessagesList = styled.ul(\n ({\n theme: {\n base: { shadow, spacing }\n }\n }) => {\n return css`\n padding-block-start: ${spacing};\n list-style-type: none;\n align-self: center;\n max-width: ${maxWidthMessage};\n width: 100%;\n min-height: var(--stream-buffer, auto);\n\n & > li {\n max-width: calc(0.8 * ${maxWidthMessage});\n }\n & > li[from='user'] {\n margin-inline-start: auto;\n margin-block-end: ${spacing};\n }\n & > li[type='message'] {\n &:focus-visible {\n outline: none;\n box-shadow: ${shadow.focus};\n }\n margin-block-end: ${spacing};\n }\n `;\n }\n);\n\nStyledMessagesList.defaultProps = defaultThemeProp;\n\nexport const StyledHistoryContainer = styled(Flex)<{ inFullPage: boolean }>(\n ({ theme, inFullPage }) => css`\n height: 100%;\n min-height: 0;\n ${inFullPage &&\n css`\n border-inline-end: 0.0625rem solid ${theme.base.palette['border-line']};\n `}\n\n ${StyledEmptyState}, ${StyledErrorState} {\n justify-content: flex-start;\n padding-inline: calc(2 * ${theme.base.spacing});\n }\n `\n);\n\nStyledHistoryContainer.defaultProps = defaultThemeProp;\n\nexport const StyledList = styled(Flex)(\n ({ theme }) => css`\n height: 100%;\n overflow-y: auto;\n margin-block-end: calc(2 * ${theme.base.spacing});\n `\n);\n\nStyledList.defaultProps = defaultThemeProp;\n\nexport const StyledHistorySummaryListItem = styled(SummaryItem)(({ theme }) => {\n const hoverColor = tryCatch(() =>\n mix(0.95, theme.base.palette['primary-background'], theme.base.palette.interactive)\n );\n return css`\n padding-inline: calc(2 * ${theme.base.spacing});\n padding-block: ${theme.base.spacing};\n border-block-end: 0.0625rem solid ${theme.base.palette['border-line']};\n\n &:hover {\n background-color: ${hoverColor};\n cursor: pointer;\n }\n &[aria-selected='true'] {\n background-color: ${hoverColor};\n }\n &:focus {\n border: 0.0625rem solid ${theme.base.palette.interactive};\n }\n `;\n});\n\nStyledHistorySummaryListItem.defaultProps = defaultThemeProp;\n\nexport const StyledLoadingItem = styled.li`\n ${StyledProgress} {\n margin: 0;\n }\n`;\n\nexport const StyledGroupHeader = styled.div(({ theme }) => {\n return css`\n padding-inline: calc(2 * ${theme.base.spacing});\n padding-block-start: calc(2 * ${theme.base.spacing});\n padding-block-end: calc(0.5 * ${theme.base.spacing});\n border-block-end: 0.0625rem solid ${theme.base.palette['border-line']};\n font-weight: ${theme.base['font-weight']['semi-bold']};\n `;\n});\n\nStyledGroupHeader.defaultProps = defaultThemeProp;\n\nexport const StyledErrorContainer = styled.div(({ theme }) => {\n return css`\n color: ${theme.base.palette.urgent};\n `;\n});\n\nStyledErrorContainer.defaultProps = defaultThemeProp;\n\nexport const StyledInput = styled.input(() => {\n return css`\n display: none;\n `;\n});\n\nexport const StyledAttachmentsList = styled(FileList)(({ theme }) => {\n return css`\n padding: ${theme.base.spacing};\n `;\n});\n\nStyledAttachmentsList.defaultProps = defaultThemeProp;\n\nexport const StyledGuidedSuggestions = styled(MenuButton)`\n width: 100%;\n max-width: ${maxWidthMessage};\n > span {\n justify-content: center;\n }\n`;\n\nexport const StyledAgentIcon = styled.svg`\n width: 3rem;\n height: 3rem;\n`;\n\nStyledAgentIcon.defaultProps = defaultThemeProp;\n\nexport const StyledGenAIFormControl = styled(FormControl)<{ focused?: boolean }>(({\n theme,\n focused\n}) => {\n return css`\n overflow: hidden;\n\n ${focused &&\n css`\n &:not([disabled]) {\n border-color: ${theme.components['form-control'][':focus']['border-color']};\n box-shadow: ${theme.components['form-control'][':focus']['box-shadow']};\n }\n\n &:hover:not([readonly]):not([disabled]):not(:focus, :focus-within) {\n border-color: transparent;\n }\n `}\n `;\n});\n\nStyledGenAIFormControl.defaultProps = defaultThemeProp;\n\nexport const StyledGenAITextArea = styled(TextArea)(({ theme: { components } }) => {\n return css`\n border: none;\n box-shadow: none;\n min-height: ${components.input.height};\n max-height: 6rem;\n overflow-y: auto;\n padding-block-end: 0;\n &:focus:not([disabled]) {\n border: none;\n box-shadow: none;\n background-color: transparent;\n }\n `;\n});\n\nStyledGenAITextArea.defaultProps = defaultThemeProp;\n\nexport const StyledSendButton = styled(Button)(({\n theme: {\n base: { palette, 'border-radius': baseBorderRadius },\n components: {\n 'form-control': { 'border-radius': formControlBorderRadius }\n }\n }\n}) => {\n return css`\n border-radius: calc(${baseBorderRadius} * ${formControlBorderRadius});\n margin-inline-start: auto;\n\n ${StyledIcon} {\n color: ${palette.light};\n }\n `;\n});\n\nStyledSendButton.defaultProps = defaultThemeProp;\n\nexport const StyledInitialMessageGrid = styled.div`\n max-width: ${maxWidthMessage};\n width: 100%;\n`;\n\nexport const StyledInitialMessageButton = styled(Button)(({\n theme: {\n base: { spacing }\n }\n}) => {\n return css`\n white-space: normal;\n text-align: left;\n min-width: unset;\n padding-block: ${spacing};\n padding-inline: calc(2 * ${spacing});\n align-items: start;\n\n & + & {\n margin-inline-start: 0;\n }\n `;\n});\n\nStyledInitialMessageButton.defaultProps = defaultThemeProp;\n\nexport const StyledInitialMessageText = styled.span`\n ${lineClamp(3)};\n`;\n\nexport const StyledGenAIAvatar = styled(Avatar)(({\n theme: {\n components: {\n agent: {\n 'coach-message': {\n avatar: { background: avatarBackground }\n }\n }\n }\n }\n}) => {\n return css`\n background: ${avatarBackground};\n `;\n});\n\nStyledGenAIAvatar.defaultProps = defaultThemeProp;\n\nexport const StyledGenAIFooter = styled.div`\n width: 100%;\n max-width: ${maxWidthMessage};\n`;\nexport const StyledStopButton = styled(AIButton)`\n border-radius: 50%;\n`;\n\nexport const StyledToolMessage = styled.p(\n ({\n theme: {\n base: {\n spacing,\n palette: { 'border-line': borderLine }\n }\n }\n }) => {\n return css`\n border-block-end: 0.125rem solid ${borderLine};\n padding: calc(2 * ${spacing});\n `;\n }\n);\n\nStyledToolMessage.defaultProps = defaultThemeProp;\n\nexport const StyledToolMessageContainer = styled.div(\n ({\n theme: {\n base: {\n spacing,\n 'border-radius': borderRadius,\n palette: { 'border-line': borderLine }\n }\n }\n }) => {\n return css`\n border: 0.125rem solid ${borderLine};\n border-radius: calc(3 * ${borderRadius});\n margin-block: ${spacing};\n `;\n }\n);\n\nStyledToolMessageContainer.defaultProps = defaultThemeProp;\n\nexport const StyledConfirmationMsg = styled(RichTextViewer)(\n ({\n theme: {\n base,\n components: {\n 'form-control': {\n ':read-only': { 'background-color': readOnlyBackgroundColor }\n }\n }\n }\n }) => `\n padding: 0;\n background-color: ${readOnlyBackgroundColor};\n border-radius: calc(0.5 * ${base['border-radius']});\n`\n);\n\nStyledConfirmationMsg.defaultProps = defaultThemeProp;\n\nexport const StyledActionsContainer = styled.div(\n () => css`\n margin-inline-start: auto;\n\n ${StyledButton} {\n margin-inline-start: 0;\n }\n `\n);\n\nStyledActionsContainer.defaultProps = defaultThemeProp;\n\nexport const StyledScrollButton = styled(Button)(({ theme }) => {\n return css`\n position: absolute;\n bottom: calc(var(--composer-height, 0rem) + calc(5 * ${theme.base.spacing}));\n width: fit-content;\n align-self: center;\n z-index: 1;\n box-shadow: ${theme.base.shadow.high};\n `;\n});\n\nStyledScrollButton.defaultProps = defaultThemeProp;\n"]}
|
|
@@ -179,4 +179,13 @@ export interface MessageFeedbackProps {
|
|
|
179
179
|
export interface UtilitiesGenAICoachProps extends OmitStrict<GenAICoachProps, 'variant'> {
|
|
180
180
|
onClose?: () => void;
|
|
181
181
|
}
|
|
182
|
+
export interface GenAICoachScrollState {
|
|
183
|
+
userAtBottom: boolean;
|
|
184
|
+
isStreamingActive: boolean;
|
|
185
|
+
smoothScrollOnEnd: boolean;
|
|
186
|
+
initialBufferApplied: boolean;
|
|
187
|
+
ignoreNextScrollEvent: boolean;
|
|
188
|
+
lastScrollTop: number | null;
|
|
189
|
+
bufferMinHeight: number | null;
|
|
190
|
+
}
|
|
182
191
|
//# sourceMappingURL=GenAICoach.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAICoach.types.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GenAICoach.types.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenAICoach.types.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Dispatch, Ref, SetStateAction } from 'react';\n\nimport type {\n BaseProps,\n MenuProps,\n OmitStrict,\n ProgressProps,\n RequireAtLeastOne,\n TestIdProp,\n WithAttributes,\n ActionsProps,\n FileItemProps,\n FileDisplayProps,\n LightboxProps\n} from '@pega/cosmos-react-core';\nimport type { MDMap } from '@pega/cosmos-react-rte';\n\nexport type State = 'minimized' | 'maximized';\nexport type Reaction = 'liked' | 'disliked';\nexport type FeedbackPrompt = 'liked' | 'disliked' | 'both';\n\nexport type Variant =\n | {\n placement: 'utilities';\n state: State;\n onStateChange: (state: State) => void;\n setGenAIHeight?: Dispatch<SetStateAction<number | undefined>>;\n }\n | { placement: 'fullpage' }\n | { placement: 'dialog'; onClose: () => void };\n\nexport interface MessageProps {\n id: string;\n message: string;\n announceInteraction?: boolean;\n attachments?: FileDisplayProps[];\n /**\n * Whether the message is a suggestion from the composer\n * @default false\n */\n fromComposer?: boolean;\n /** Ref forwarded to the wrapping element. */\n ref?: Ref<HTMLLIElement>;\n}\n\nexport type InitialSuggestedMessageProps = Pick<GenAICoachProps, 'onSend'> &\n BaseProps &\n TestIdProp &\n MessageProps;\n\nexport interface UserMessageProps extends BaseProps, TestIdProp, MessageProps {\n from: 'user';\n}\n\nexport type ToolParameters = {\n id: string;\n label: string;\n type: 'text' | 'number' | 'boolean';\n value: string;\n};\n\nexport interface Tool {\n id: string;\n name: string;\n message: string;\n decision: 'accept' | 'modify' | 'reject';\n parameters: ToolParameters[];\n}\n\nexport interface ToolDetailsProps {\n isToolConfirmation: true;\n tools: Tool[];\n onSubmit?: (tools: Tool[]) => void;\n onCancel?: () => void;\n toolsConfirmed: boolean;\n}\n\nexport type CoachMessageProps = RequireAtLeastOne<\n Partial<Pick<GenAICoachProps, 'onSend'>> &\n BaseProps &\n TestIdProp &\n Pick<MessageProps, 'id' | 'announceInteraction' | 'ref'> &\n (\n | ToolDetailsProps\n | {\n isToolConfirmation?: false;\n tools?: never;\n onSubmit?: never;\n onCancel?: never;\n toolsConfirmed?: never;\n }\n ) & {\n from: 'coach';\n coachName: string;\n suggestions?: MessageProps[];\n loading?: boolean;\n enableStreaming?: boolean;\n allChunksReceived?: boolean;\n error?: string;\n message?: MessageProps['message'];\n messageActions?: ActionsProps;\n markdownMap?: MDMap;\n onStreamingUpdate?: (isStreamingDone: boolean) => void;\n feedback?: {\n reaction: Reaction | undefined;\n feedbackText?: string;\n onReaction: (id: MessageProps['id'], reaction: Reaction | undefined) => void;\n onFeedbackComplete: (id: MessageProps['id'], comment?: string) => void;\n promptFeedbackOn?: FeedbackPrompt;\n allowFeedbackResubmission?: boolean;\n };\n onAnimationCursorUpdate?: (animatedTillCursor: number) => void;\n animationInitialCursorPos?: number;\n },\n 'loading' | 'message' | 'error'\n>;\n\nexport interface SystemMessageProps\n extends TestIdProp,\n Pick<MessageProps, 'id' | 'message' | 'ref' | 'announceInteraction'> {\n from: 'system';\n loading?: boolean;\n}\n\nexport type GenAIMessageProps = UserMessageProps | CoachMessageProps | SystemMessageProps;\n\nexport interface ConversationHistoryProps extends TestIdProp {\n /** List of History items. */\n data: {\n id: string;\n section: string;\n conversations: {\n id: string;\n title: string;\n }[];\n }[];\n /** Click event for items within the list. */\n onItemClick?: (conversationId: string) => void;\n /** List loading state. */\n loading?: boolean;\n /** Called at scroll trigger to load more items. */\n loadMore?: () => void;\n /** True if History view is rendered in Full page view. */\n inFullPage?: boolean;\n /** Callback triggered when closing the history view. */\n onDismiss: () => void;\n /** Id of the selected item. */\n selectedItemId?: string;\n /** Set if there is an error in retreiving the data. */\n error?: string;\n /** Ref forwarded to the wrapping element. */\n ref?: Ref<HTMLUListElement>;\n}\n\nexport type SendMessageProps = OmitStrict<MessageProps, 'attachments'> & {\n attachmentIds?: string[];\n tools?: Tool[];\n};\n\nexport type GenAICoachProps = WithAttributes<\n 'div',\n TestIdProp & {\n /** Chat loading indicator */\n loading?: boolean | ProgressProps['message'];\n /** Set if there is an error in retreiving the data */\n error?: string;\n /** Coaches available in the chat header */\n coachOptions: MenuProps['items'];\n /** Handle the coach selections */\n onCoachChange: (id: MenuProps['id']) => void;\n /** Suggested messages to start the conversation */\n initialSuggestedMessages?: MessageProps[];\n /** Additional suggestions presented at the bottom of the chat window */\n suggestions?: MenuProps['items'];\n /** Send prompts */\n onSend: (message: SendMessageProps) => void;\n\n stopProcess?: () => void;\n /** Messages to be shown in the chatting window. */\n messages?: GenAIMessageProps[];\n /** Placement of the component */\n variant: Variant;\n /** From landing page utilities */\n isInLandingPageUtilities?: boolean;\n /** callback when component is mounted */\n onOpen?: () => void;\n /**\n * User would be guided with selective prompts to enable interaction with coach.\n * @default false\n */\n guidedMode?: boolean;\n /** Pass an array of Action objects to show Action button. */\n actions?: ActionsProps;\n /** Pass data to show history view. */\n conversationHistory?: ConversationHistoryProps;\n /** Callback triggered when the layout component changes. */\n onLayoutChange?: (inFullPage: boolean) => void;\n /** Callback when attachment icon is clicked */\n onAddAttachment?: (files: File[]) => void;\n /** Attachments list */\n attachments?: FileItemProps[];\n /** Error in attachments */\n attachmentsError?: string;\n /** Configuration for the Lightbox component that handles preview of media attachments and files */\n lightboxPreviewProps?: LightboxProps;\n /** Enable full screen */\n allowFullScreen?: boolean;\n /** Enable voice to text */\n voiceToTextProps?: {\n enableDictation: boolean;\n langCode: string;\n };\n /** Show welcome state */\n showSalutation?: boolean;\n /** Salutation message */\n salutation?: string;\n }\n>;\n\nexport interface MessageFeedbackProps {\n messageId: MessageProps['id'];\n feedback: CoachMessageProps['feedback'];\n}\n\nexport interface UtilitiesGenAICoachProps extends OmitStrict<GenAICoachProps, 'variant'> {\n onClose?: () => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GenAICoach.types.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Dispatch, Ref, SetStateAction } from 'react';\n\nimport type {\n BaseProps,\n MenuProps,\n OmitStrict,\n ProgressProps,\n RequireAtLeastOne,\n TestIdProp,\n WithAttributes,\n ActionsProps,\n FileItemProps,\n FileDisplayProps,\n LightboxProps\n} from '@pega/cosmos-react-core';\nimport type { MDMap } from '@pega/cosmos-react-rte';\n\nexport type State = 'minimized' | 'maximized';\nexport type Reaction = 'liked' | 'disliked';\nexport type FeedbackPrompt = 'liked' | 'disliked' | 'both';\n\nexport type Variant =\n | {\n placement: 'utilities';\n state: State;\n onStateChange: (state: State) => void;\n setGenAIHeight?: Dispatch<SetStateAction<number | undefined>>;\n }\n | { placement: 'fullpage' }\n | { placement: 'dialog'; onClose: () => void };\n\nexport interface MessageProps {\n id: string;\n message: string;\n announceInteraction?: boolean;\n attachments?: FileDisplayProps[];\n /**\n * Whether the message is a suggestion from the composer\n * @default false\n */\n fromComposer?: boolean;\n /** Ref forwarded to the wrapping element. */\n ref?: Ref<HTMLLIElement>;\n}\n\nexport type InitialSuggestedMessageProps = Pick<GenAICoachProps, 'onSend'> &\n BaseProps &\n TestIdProp &\n MessageProps;\n\nexport interface UserMessageProps extends BaseProps, TestIdProp, MessageProps {\n from: 'user';\n}\n\nexport type ToolParameters = {\n id: string;\n label: string;\n type: 'text' | 'number' | 'boolean';\n value: string;\n};\n\nexport interface Tool {\n id: string;\n name: string;\n message: string;\n decision: 'accept' | 'modify' | 'reject';\n parameters: ToolParameters[];\n}\n\nexport interface ToolDetailsProps {\n isToolConfirmation: true;\n tools: Tool[];\n onSubmit?: (tools: Tool[]) => void;\n onCancel?: () => void;\n toolsConfirmed: boolean;\n}\n\nexport type CoachMessageProps = RequireAtLeastOne<\n Partial<Pick<GenAICoachProps, 'onSend'>> &\n BaseProps &\n TestIdProp &\n Pick<MessageProps, 'id' | 'announceInteraction' | 'ref'> &\n (\n | ToolDetailsProps\n | {\n isToolConfirmation?: false;\n tools?: never;\n onSubmit?: never;\n onCancel?: never;\n toolsConfirmed?: never;\n }\n ) & {\n from: 'coach';\n coachName: string;\n suggestions?: MessageProps[];\n loading?: boolean;\n enableStreaming?: boolean;\n allChunksReceived?: boolean;\n error?: string;\n message?: MessageProps['message'];\n messageActions?: ActionsProps;\n markdownMap?: MDMap;\n onStreamingUpdate?: (isStreamingDone: boolean) => void;\n feedback?: {\n reaction: Reaction | undefined;\n feedbackText?: string;\n onReaction: (id: MessageProps['id'], reaction: Reaction | undefined) => void;\n onFeedbackComplete: (id: MessageProps['id'], comment?: string) => void;\n promptFeedbackOn?: FeedbackPrompt;\n allowFeedbackResubmission?: boolean;\n };\n onAnimationCursorUpdate?: (animatedTillCursor: number) => void;\n animationInitialCursorPos?: number;\n },\n 'loading' | 'message' | 'error'\n>;\n\nexport interface SystemMessageProps\n extends TestIdProp,\n Pick<MessageProps, 'id' | 'message' | 'ref' | 'announceInteraction'> {\n from: 'system';\n loading?: boolean;\n}\n\nexport type GenAIMessageProps = UserMessageProps | CoachMessageProps | SystemMessageProps;\n\nexport interface ConversationHistoryProps extends TestIdProp {\n /** List of History items. */\n data: {\n id: string;\n section: string;\n conversations: {\n id: string;\n title: string;\n }[];\n }[];\n /** Click event for items within the list. */\n onItemClick?: (conversationId: string) => void;\n /** List loading state. */\n loading?: boolean;\n /** Called at scroll trigger to load more items. */\n loadMore?: () => void;\n /** True if History view is rendered in Full page view. */\n inFullPage?: boolean;\n /** Callback triggered when closing the history view. */\n onDismiss: () => void;\n /** Id of the selected item. */\n selectedItemId?: string;\n /** Set if there is an error in retreiving the data. */\n error?: string;\n /** Ref forwarded to the wrapping element. */\n ref?: Ref<HTMLUListElement>;\n}\n\nexport type SendMessageProps = OmitStrict<MessageProps, 'attachments'> & {\n attachmentIds?: string[];\n tools?: Tool[];\n};\n\nexport type GenAICoachProps = WithAttributes<\n 'div',\n TestIdProp & {\n /** Chat loading indicator */\n loading?: boolean | ProgressProps['message'];\n /** Set if there is an error in retreiving the data */\n error?: string;\n /** Coaches available in the chat header */\n coachOptions: MenuProps['items'];\n /** Handle the coach selections */\n onCoachChange: (id: MenuProps['id']) => void;\n /** Suggested messages to start the conversation */\n initialSuggestedMessages?: MessageProps[];\n /** Additional suggestions presented at the bottom of the chat window */\n suggestions?: MenuProps['items'];\n /** Send prompts */\n onSend: (message: SendMessageProps) => void;\n\n stopProcess?: () => void;\n /** Messages to be shown in the chatting window. */\n messages?: GenAIMessageProps[];\n /** Placement of the component */\n variant: Variant;\n /** From landing page utilities */\n isInLandingPageUtilities?: boolean;\n /** callback when component is mounted */\n onOpen?: () => void;\n /**\n * User would be guided with selective prompts to enable interaction with coach.\n * @default false\n */\n guidedMode?: boolean;\n /** Pass an array of Action objects to show Action button. */\n actions?: ActionsProps;\n /** Pass data to show history view. */\n conversationHistory?: ConversationHistoryProps;\n /** Callback triggered when the layout component changes. */\n onLayoutChange?: (inFullPage: boolean) => void;\n /** Callback when attachment icon is clicked */\n onAddAttachment?: (files: File[]) => void;\n /** Attachments list */\n attachments?: FileItemProps[];\n /** Error in attachments */\n attachmentsError?: string;\n /** Configuration for the Lightbox component that handles preview of media attachments and files */\n lightboxPreviewProps?: LightboxProps;\n /** Enable full screen */\n allowFullScreen?: boolean;\n /** Enable voice to text */\n voiceToTextProps?: {\n enableDictation: boolean;\n langCode: string;\n };\n /** Show welcome state */\n showSalutation?: boolean;\n /** Salutation message */\n salutation?: string;\n }\n>;\n\nexport interface MessageFeedbackProps {\n messageId: MessageProps['id'];\n feedback: CoachMessageProps['feedback'];\n}\n\nexport interface UtilitiesGenAICoachProps extends OmitStrict<GenAICoachProps, 'variant'> {\n onClose?: () => void;\n}\n\nexport interface GenAICoachScrollState {\n userAtBottom: boolean;\n isStreamingActive: boolean;\n smoothScrollOnEnd: boolean;\n initialBufferApplied: boolean;\n ignoreNextScrollEvent: boolean;\n lastScrollTop: number | null;\n bufferMinHeight: number | null;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pega/cosmos-react-work",
|
|
3
|
-
"version": "9.0.0-build.19.
|
|
3
|
+
"version": "9.0.0-build.19.2",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"author": "Pegasystems",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"build": "tsc -b tsconfig.build.json"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@pega/cosmos-react-core": "9.0.0-build.19.
|
|
18
|
-
"@pega/cosmos-react-rte": "9.0.0-build.19.
|
|
17
|
+
"@pega/cosmos-react-core": "9.0.0-build.19.2",
|
|
18
|
+
"@pega/cosmos-react-rte": "9.0.0-build.19.2",
|
|
19
19
|
"@types/react": "^17.0.62 || ^18.3.3",
|
|
20
20
|
"@types/react-dom": "^17.0.20 || ^18.3.0",
|
|
21
21
|
"@types/styled-components": "^5.1.26",
|