@pega/cosmos-react-work 8.9.5 → 8.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/CaseView/CaseView.styles.d.ts.map +1 -1
- package/lib/components/CaseView/CaseView.styles.js +4 -1
- package/lib/components/CaseView/CaseView.styles.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.js +109 -39
- package/lib/components/GenAICoach/GenAICoach.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.styles.d.ts +9 -1
- package/lib/components/GenAICoach/GenAICoach.styles.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.styles.js +70 -16
- package/lib/components/GenAICoach/GenAICoach.styles.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.types.d.ts +11 -0
- package/lib/components/GenAICoach/GenAICoach.types.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.types.js.map +1 -1
- package/lib/components/GenAICoach/GenAIMessage.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAIMessage.js +13 -5
- package/lib/components/GenAICoach/GenAIMessage.js.map +1 -1
- package/lib/components/GenAICoach/InitialSuggestedMessage.d.ts.map +1 -1
- package/lib/components/GenAICoach/InitialSuggestedMessage.js +5 -6
- package/lib/components/GenAICoach/InitialSuggestedMessage.js.map +1 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.d.ts.map +1 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.js +3 -2
- package/lib/components/UtilitiesLayout/UtilitiesLayout.js.map +1 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.styles.d.ts.map +1 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.styles.js +2 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.styles.js.map +1 -1
- package/package.json +3 -3
|
@@ -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 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 useUID,\n FormField\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 chatTypingIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/chat-typing.icon';\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 StyledGenAIFormControl,\n StyledGenAITextArea,\n StyledSendButton,\n StyledGenAIFooter,\n StyledActionsContainer,\n StyledAgentIcon\n} from './GenAICoach.styles';\nimport ConversationHistory from './ConversationHistory';\n\nimport { GenAIMessage, InitialSuggestedMessage, type GenAICoachProps } from '.';\n\nregisterIcon(\n caretUpIcon,\n timesIcon,\n caretDownIcon,\n minusIcon,\n polarisSolidIcon,\n paperClipIcon,\n warnSolidIcon,\n chatTypingIcon\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 showSalutation = true,\n salutation,\n ...restProps\n}) => {\n const theme = useTheme();\n const t = useI18n();\n\n const elementRef = useRef<HTMLElement | null>(null);\n const conversationRef = useRef<HTMLUListElement>(null);\n const genAICoachRef = useRef<HTMLElement>(null);\n const [messageEls, getMessageCbRef] = useRefMap<HTMLLIElement>();\n const isSmallOrAbove = useBreakpoint('sm', {\n breakpointRef: genAICoachRef\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\n const [message, setMessage] = useState('');\n const [coachOptions, setCoachOptions] = useState<MenuProps['items']>(coachOptionsProps);\n const [arrowKey, setArrowKey] = useState<\n 'ArrowRight' | 'ArrowLeft' | 'ArrowUp' | 'ArrowDown' | null\n >(null);\n const [isComposerFocused, setIsComposerFocused] = useState(false);\n\n const previousMessages = usePrevious(messages);\n const testIds = useTestIds(testId, getGenAICoachTestIds);\n const { announcePolite } = useLiveLog();\n\n const composerId = useUID();\n\n const latestMessage = messages.at(-1);\n const condition =\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 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 (isMessageAndAttachmentsEmpty || hasAttachmentsError || isCoachMessageLoading) return;\n onSend({\n id: createUID(),\n message,\n fromComposer: true,\n attachmentIds: attachments?.map(({ id }) => id)\n });\n setMessage('');\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 (\n <Flex container={{ gap: 1 }}>\n <Icon name='polaris-solid' color={theme.base.palette.ai} />\n <Text variant='h3'>{selectedCoach}</Text>\n </Flex>\n );\n }\n return (\n <MenuButton\n text={selectedCoach}\n aria-label={t('agent_switcher', [selectedCoach])}\n variant='text'\n as={StyledGenAIOptionsMenu}\n icon='polaris-solid'\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 <Flex container={{ gap: 1 }}>\n <Icon name='polaris-solid' color={theme.base.palette.ai} />\n <Text variant='h3'>{selectedCoach}</Text>\n </Flex>\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) && (\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 {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]);\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 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 genAIFooter = (\n <Flex container={{ direction: 'column' }} as={StyledGenAIFooter}>\n <FormField label={t('message_pega_gen_ai_coach')} labelHidden labelFor={composerId}>\n <StyledGenAIFormControl focused={isComposerFocused}>\n <Flex container={{ direction: 'column', gap: 0.25 }}>\n <StyledGenAITextArea\n id={composerId}\n ref={textAreaRef}\n value={message}\n placeholder={t('write_message')}\n onKeyDown={handleEnterKeyDown}\n onChange={handleTextAreaChange}\n onFocus={() => {\n setIsComposerFocused(true);\n }}\n onBlur={() => {\n setIsComposerFocused(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 onSend({\n id: selected.id,\n message: selected.primary\n });\n }\n }\n }}\n showArrow={false}\n />\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 <Flex\n container={{\n gap: 1,\n justify: 'end',\n alignItems: 'center',\n pad: 1\n }}\n >\n {t('generating_response')}\n <Progress placement='inline' />\n </Flex>\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 </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 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 gap: 8\n }}\n item={{ grow: 1 }}\n >\n {((isInUtilities(variant) && variant.state === 'maximized') ||\n !isInUtilities(variant)) &&\n showSalutation && (\n <Flex\n container={{\n direction: 'column',\n alignItems: 'center',\n justify: 'center',\n gap: 1\n }}\n >\n <AgentIcon />\n <Text variant='h3'>{salutation ?? t('welcome_text')}</Text>\n </Flex>\n )}\n\n <Flex container={{ direction: 'column', gap: 1.5, alignItems: 'center' }}>\n {initialSuggestedMessages?.map(initialSuggestedMessage => (\n <InitialSuggestedMessage\n {...initialSuggestedMessage}\n onSend={initialMessage => {\n onSend(initialMessage);\n isUserTriggered.current = true;\n }}\n testId={initialSuggestedMessage.id}\n />\n ))}\n </Flex>\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 }\n : item;\n\n return (\n <GenAIMessage\n {...messageProps}\n ref={getMessageCbRef(item.id)}\n testId={item.id}\n announceInteraction={!focusInMessageListRef.current}\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 </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 genAIFooter\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\n return (\n <Flex\n container={{ direction: 'column' }}\n as={StyledGenAICoachContainer}\n data-testid={testIds.root}\n variant={variant}\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 );\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 Fullscreen,\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 chatTypingIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/chat-typing.icon';\nimport * as sendSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/send-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 StyledActionsContainer,\n StyledGenAIFooter,\n StyledAgentIcon\n} from './GenAICoach.styles';\nimport ConversationHistory from './ConversationHistory';\n\nimport { GenAIMessage, InitialSuggestedMessage, type GenAICoachProps } from '.';\n\nregisterIcon(\n caretUpIcon,\n timesIcon,\n caretDownIcon,\n minusIcon,\n polarisSolidIcon,\n paperClipIcon,\n warnSolidIcon,\n chatTypingIcon,\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 VOICE_ERROR_DISMISS_DURATION = 3000;\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 showSalutation = true,\n salutation,\n allowFullScreen = true,\n isInLandingPageUtilities,\n voiceToTextProps,\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 const [isComposerFocused, setIsComposerFocused] = useState(false);\n\n const [animationInitialCursorPos, setAnimationInitialCursorPos] = useState(0);\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 (isMessageAndAttachmentsEmpty || hasAttachmentsError || isCoachMessageLoading) 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) && (\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]);\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={isComposerFocused}>\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 setIsComposerFocused(true);\n if (active) stop();\n }}\n onBlur={() => {\n setIsComposerFocused(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 <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 </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: isCompact ? 'start' : '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\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 }\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 dismissAfter={VOICE_ERROR_DISMISS_DURATION}>\n <Fullscreen>\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 </Fullscreen>\n </Toaster>\n );\n};\n\nexport default withTestIds(GenAICoach, getGenAICoachTestIds);\n"]}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { GenAICoachProps } from './GenAICoach.types';
|
|
2
2
|
export declare const StyledMessageWrapper: import("styled-components").StyledComponent<"li", import("styled-components").DefaultTheme, {}, never>;
|
|
3
3
|
export declare const StyledComposerSection: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
4
|
+
export declare const StyledMessagesContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
4
5
|
export declare const StyledGenAICoachContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
|
|
5
6
|
variant: GenAICoachProps["variant"];
|
|
7
|
+
fullScreen: GenAICoachProps["allowFullScreen"];
|
|
8
|
+
isCompact: boolean;
|
|
6
9
|
}, never>;
|
|
7
10
|
export declare const StyledGenAIOptionsMenu: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").MenuButtonProps> & {
|
|
8
11
|
getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly []>;
|
|
@@ -13,7 +16,6 @@ export declare const StyledMenuSuggestions: import("styled-components").StyledCo
|
|
|
13
16
|
export declare const StyledDisclaimerText: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").TextProps>, import("styled-components").DefaultTheme, {
|
|
14
17
|
inFullPage: boolean;
|
|
15
18
|
}, never>;
|
|
16
|
-
export declare const StyledMessagesContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
17
19
|
export declare const StyledFlexWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
18
20
|
export declare const StyledGridContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
|
|
19
21
|
conversationHistory: boolean;
|
|
@@ -51,6 +53,12 @@ export declare const StyledGenAITextArea: import("styled-components").StyledComp
|
|
|
51
53
|
getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly ["control", "label", "info", "additional-info", "suggestion-accept", "suggestion-reject"]>;
|
|
52
54
|
}, import("styled-components").DefaultTheme, {}, never>;
|
|
53
55
|
export declare const StyledSendButton: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").ButtonProps>, import("styled-components").DefaultTheme, {}, never>;
|
|
56
|
+
export declare const StyledInitialMessageGrid: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
57
|
+
export declare const StyledInitialMessageButton: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").ButtonProps>, import("styled-components").DefaultTheme, {}, never>;
|
|
58
|
+
export declare const StyledInitialMessageText: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>;
|
|
59
|
+
export declare const StyledGenAIAvatar: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").AvatarProps> & {
|
|
60
|
+
getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly []>;
|
|
61
|
+
}, import("styled-components").DefaultTheme, {}, never>;
|
|
54
62
|
export declare const StyledGenAIFooter: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
|
|
55
63
|
export declare const StyledAgentIcon: import("styled-components").StyledComponent<"svg", import("styled-components").DefaultTheme, {}, never>;
|
|
56
64
|
//# 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":"AAgCA,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,yBAAyB;aAC3B,eAAe,CAAC,SAAS,CAAC;gBACvB,eAAe,CAAC,iBAAiB,CAAC;eACnC,OAAO;SA8EnB,CAAC;AAIF,eAAO,MAAM,sBAAsB;2BA3E3B,CAAA;uDAgGN,CAAC;AAIH,eAAO,MAAM,qBAAqB;2BApG1B,CAAA;uDAgHN,CAAC;AAIH,eAAO,MAAM,oBAAoB;gBAA8B,OAAO;SAgBpE,CAAC;AAIH,eAAO,MAAM,iBAAiB,yGAY7B,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,uGAQxB,CAAC;AAIH,eAAO,MAAM,iBAAiB,wGAgC7B,CAAC;AAIF,eAAO,MAAM,sBAAsB,yGAoBjC,CAAC;AAIH,eAAO,MAAM,kBAAkB,wGA4B9B,CAAC;AAIF,eAAO,MAAM,sBAAsB;gBAA8B,OAAO;SAcvE,CAAC;AAIF,eAAO,MAAM,UAAU,kNAMtB,CAAC;AAIF,eAAO,MAAM,4BAA4B;2BA1WT,CAAC;uDA8X/B,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;2BArb5B,CAAA;uDA2bP,CAAC;AAEF,eAAO,MAAM,sBAAsB,yGAQlC,CAAC;AAIF,eAAO,MAAM,qBAAqB,yGAEjC,CAAC;AAIF,eAAO,MAAM,sBAAsB;cAAmC,OAAO;SAmB3E,CAAC;AAIH,eAAO,MAAM,mBAAmB;2BArgBX,CAAC;uDAmhBpB,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;2BA3hBnB,CAAC;uDAyiBV,CAAC;AAIH,eAAO,MAAM,iBAAiB,yGAG7B,CAAC;AAEF,eAAO,MAAM,eAAe,yGAG3B,CAAC"}
|
|
@@ -1,23 +1,37 @@
|
|
|
1
1
|
import styled, { css } from 'styled-components';
|
|
2
2
|
import { useContext } from 'react';
|
|
3
3
|
import { mix } from 'polished';
|
|
4
|
-
import { AppShellContext, Button, FileList, Flex, FormControl, MenuButton, StyledButton, StyledEmptyState, StyledErrorState, StyledIcon, StyledText, SummaryItem, Text, TextArea, calculateFontSize, defaultThemeProp, tryCatch } from '@pega/cosmos-react-core';
|
|
4
|
+
import { AppShellContext, Button, FileList, Flex, FormControl, MenuButton, StyledButton, StyledEmptyState, StyledErrorState, StyledIcon, StyledText, SummaryItem, Text, TextArea, calculateFontSize, defaultThemeProp, tryCatch, Avatar, calculateForegroundColor } 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';
|
|
8
8
|
import { StyledProgress } from '@pega/cosmos-react-core/lib/components/Progress/Progress.styles';
|
|
9
9
|
import { resizeDrawerMaxWidth } from '@pega/cosmos-react-core/lib/styles/constants';
|
|
10
|
+
import { lineClamp } from '@pega/cosmos-react-core/lib/styles/mixins';
|
|
10
11
|
import { isInUtilities } from './GenAICoach.utils';
|
|
11
12
|
export const StyledMessageWrapper = styled.li ``;
|
|
12
13
|
const maxWidthMessage = '46rem';
|
|
13
14
|
export const StyledComposerSection = styled.div ``;
|
|
14
|
-
export const
|
|
15
|
+
export const StyledMessagesContainer = styled.div(({ theme: { base: { spacing } } }) => {
|
|
16
|
+
return css `
|
|
17
|
+
margin-block-end: calc(2 * ${spacing});
|
|
18
|
+
height: 100%;
|
|
19
|
+
overflow-y: auto;
|
|
20
|
+
`;
|
|
21
|
+
});
|
|
22
|
+
StyledMessagesContainer.defaultProps = defaultThemeProp;
|
|
23
|
+
export const StyledGenAICoachContainer = styled.div(({ theme: { base: { palette, 'z-index': zIndex, spacing, breakpoints, animation }, components: { card: { 'border-radius': borderRadius }, agent: { background: agentBackground, 'foreground-color': agentForegroundColor } } }, variant, fullScreen, isCompact }) => {
|
|
15
24
|
const { previewActive } = useContext(AppShellContext);
|
|
25
|
+
const foregroundColorForAgent = calculateForegroundColor(agentBackground, agentForegroundColor);
|
|
16
26
|
return css `
|
|
17
|
-
background: ${
|
|
27
|
+
background: ${agentBackground};
|
|
28
|
+
color: ${foregroundColorForAgent};
|
|
18
29
|
min-width: var(--utilities-drawer-min-width);
|
|
19
30
|
border-radius: ${borderRadius};
|
|
31
|
+
transition: height ${animation.speed} ${animation.timing.ease};
|
|
32
|
+
|
|
20
33
|
${isInUtilities(variant) &&
|
|
34
|
+
!fullScreen &&
|
|
21
35
|
css `
|
|
22
36
|
min-height: 3rem;
|
|
23
37
|
max-width: 31.25rem;
|
|
@@ -47,12 +61,27 @@ export const StyledGenAICoachContainer = styled.div(({ theme: { base: { palette,
|
|
|
47
61
|
FIXME: This is a stopgap to address issue in Android web views via React Native where VH units do not work
|
|
48
62
|
*/
|
|
49
63
|
${((isInUtilities(variant) && variant.state === 'maximized') || !isInUtilities(variant)) &&
|
|
64
|
+
!fullScreen &&
|
|
50
65
|
css `
|
|
51
66
|
height: calc(0.85 * var(--case-view-height, 95vh));
|
|
52
67
|
@media (pointer: coarse) and (max-width: ${breakpoints.md}) {
|
|
53
68
|
height: 40rem;
|
|
54
69
|
}
|
|
55
70
|
`}
|
|
71
|
+
|
|
72
|
+
${isCompact &&
|
|
73
|
+
css `
|
|
74
|
+
height: 26rem;
|
|
75
|
+
${StyledMessagesContainer} {
|
|
76
|
+
margin-block-end: 0;
|
|
77
|
+
}
|
|
78
|
+
`}
|
|
79
|
+
|
|
80
|
+
${fullScreen &&
|
|
81
|
+
css `
|
|
82
|
+
height: 100vh;
|
|
83
|
+
border-radius: 0;
|
|
84
|
+
`}
|
|
56
85
|
`;
|
|
57
86
|
});
|
|
58
87
|
StyledGenAICoachContainer.defaultProps = defaultThemeProp;
|
|
@@ -90,14 +119,6 @@ export const StyledDisclaimerText = styled(Text)(({ inFullPage, theme: { base: {
|
|
|
90
119
|
`;
|
|
91
120
|
});
|
|
92
121
|
StyledDisclaimerText.defaultProps = defaultThemeProp;
|
|
93
|
-
export const StyledMessagesContainer = styled.div(({ theme: { base: { spacing } } }) => {
|
|
94
|
-
return css `
|
|
95
|
-
margin-block-end: calc(2 * ${spacing});
|
|
96
|
-
height: 100%;
|
|
97
|
-
overflow-y: auto;
|
|
98
|
-
`;
|
|
99
|
-
});
|
|
100
|
-
StyledMessagesContainer.defaultProps = defaultThemeProp;
|
|
101
122
|
export const StyledFlexWrapper = styled.div(({ theme: { base: { spacing } } }) => {
|
|
102
123
|
return css `
|
|
103
124
|
margin-block-start: ${spacing};
|
|
@@ -119,10 +140,13 @@ export const StyledGridContainer = styled.div(({ theme: { base }, conversationHi
|
|
|
119
140
|
`;
|
|
120
141
|
});
|
|
121
142
|
StyledGridContainer.defaultProps = defaultThemeProp;
|
|
122
|
-
export const StyledInitialMessageContainer = styled.div((
|
|
143
|
+
export const StyledInitialMessageContainer = styled.div(() => {
|
|
123
144
|
return css `
|
|
124
|
-
|
|
125
|
-
|
|
145
|
+
${StyledFormField} {
|
|
146
|
+
width: 100%;
|
|
147
|
+
max-width: ${maxWidthMessage};
|
|
148
|
+
}
|
|
149
|
+
`;
|
|
126
150
|
});
|
|
127
151
|
StyledInitialMessageContainer.defaultProps = defaultThemeProp;
|
|
128
152
|
export const StyledInputContainer = styled(Flex)(({ theme: { base: { spacing } } }) => {
|
|
@@ -174,10 +198,12 @@ export const StyledMessage = styled.p(({ theme }) => {
|
|
|
174
198
|
`;
|
|
175
199
|
});
|
|
176
200
|
StyledMessage.defaultProps = defaultThemeProp;
|
|
177
|
-
export const StyledUserMessage = styled.li(({ theme: { base: { 'border-radius': borderRadius, spacing,
|
|
201
|
+
export const StyledUserMessage = styled.li(({ theme: { base: { 'border-radius': borderRadius, spacing }, components: { agent: { 'user-message': { background: userMessageBackground, 'foreground-color': userMessageForegroundColor } } } } }) => {
|
|
202
|
+
const foregroundColorForUserMessage = calculateForegroundColor(userMessageBackground, userMessageForegroundColor);
|
|
178
203
|
return css `
|
|
179
204
|
overflow-wrap: break-word;
|
|
180
|
-
background: ${
|
|
205
|
+
background: ${userMessageBackground};
|
|
206
|
+
color: ${foregroundColorForUserMessage};
|
|
181
207
|
margin-inline-start: calc(4 * ${spacing});
|
|
182
208
|
margin-block-end: calc(0.5 * ${spacing});
|
|
183
209
|
padding: calc(0.5 * ${spacing});
|
|
@@ -370,6 +396,34 @@ export const StyledSendButton = styled(Button)(({ theme: { base: { palette, 'bor
|
|
|
370
396
|
`;
|
|
371
397
|
});
|
|
372
398
|
StyledSendButton.defaultProps = defaultThemeProp;
|
|
399
|
+
export const StyledInitialMessageGrid = styled.div `
|
|
400
|
+
max-width: ${maxWidthMessage};
|
|
401
|
+
width: 100%;
|
|
402
|
+
`;
|
|
403
|
+
export const StyledInitialMessageButton = styled(Button)(({ theme: { base: { spacing } } }) => {
|
|
404
|
+
return css `
|
|
405
|
+
white-space: normal;
|
|
406
|
+
text-align: left;
|
|
407
|
+
min-width: unset;
|
|
408
|
+
padding-block: ${spacing};
|
|
409
|
+
padding-inline: calc(2 * ${spacing});
|
|
410
|
+
align-items: start;
|
|
411
|
+
|
|
412
|
+
& + & {
|
|
413
|
+
margin-inline-start: 0;
|
|
414
|
+
}
|
|
415
|
+
`;
|
|
416
|
+
});
|
|
417
|
+
StyledInitialMessageButton.defaultProps = defaultThemeProp;
|
|
418
|
+
export const StyledInitialMessageText = styled.span `
|
|
419
|
+
${lineClamp(3)};
|
|
420
|
+
`;
|
|
421
|
+
export const StyledGenAIAvatar = styled(Avatar)(({ theme: { components: { agent: { 'coach-message': { avatar: { background: avatarBackground } } } } } }) => {
|
|
422
|
+
return css `
|
|
423
|
+
background: ${avatarBackground};
|
|
424
|
+
`;
|
|
425
|
+
});
|
|
426
|
+
StyledGenAIAvatar.defaultProps = defaultThemeProp;
|
|
373
427
|
export const StyledGenAIFooter = styled.div `
|
|
374
428
|
width: 100%;
|
|
375
429
|
max-width: ${maxWidthMessage};
|