@pega/cosmos-react-work 9.0.0-build.12.0 → 9.0.0-build.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/lib/components/GenAICoach/GenAICoach.d.ts +1 -1
  2. package/lib/components/GenAICoach/GenAICoach.d.ts.map +1 -1
  3. package/lib/components/GenAICoach/GenAICoach.js +24 -6
  4. package/lib/components/GenAICoach/GenAICoach.js.map +1 -1
  5. package/lib/components/GenAICoach/GenAICoach.styles.d.ts +7 -0
  6. package/lib/components/GenAICoach/GenAICoach.styles.d.ts.map +1 -1
  7. package/lib/components/GenAICoach/GenAICoach.styles.js +38 -1
  8. package/lib/components/GenAICoach/GenAICoach.styles.js.map +1 -1
  9. package/lib/components/GenAICoach/GenAICoach.test-ids.d.ts +1 -1
  10. package/lib/components/GenAICoach/GenAICoach.test-ids.d.ts.map +1 -1
  11. package/lib/components/GenAICoach/GenAICoach.test-ids.js +1 -0
  12. package/lib/components/GenAICoach/GenAICoach.test-ids.js.map +1 -1
  13. package/lib/components/GenAICoach/GenAICoach.types.d.ts +34 -2
  14. package/lib/components/GenAICoach/GenAICoach.types.d.ts.map +1 -1
  15. package/lib/components/GenAICoach/GenAICoach.types.js.map +1 -1
  16. package/lib/components/GenAICoach/GenAIMessage.d.ts.map +1 -1
  17. package/lib/components/GenAICoach/GenAIMessage.js +30 -26
  18. package/lib/components/GenAICoach/GenAIMessage.js.map +1 -1
  19. package/lib/components/GenAICoach/ToolConfirmationMessage.d.ts +4 -0
  20. package/lib/components/GenAICoach/ToolConfirmationMessage.d.ts.map +1 -0
  21. package/lib/components/GenAICoach/ToolConfirmationMessage.js +19 -0
  22. package/lib/components/GenAICoach/ToolConfirmationMessage.js.map +1 -0
  23. package/lib/components/GenAICoach/ToolDetails.d.ts +5 -0
  24. package/lib/components/GenAICoach/ToolDetails.d.ts.map +1 -0
  25. package/lib/components/GenAICoach/ToolDetails.js +91 -0
  26. package/lib/components/GenAICoach/ToolDetails.js.map +1 -0
  27. package/package.json +3 -3
@@ -2,7 +2,7 @@ import type { FunctionComponent } from 'react';
2
2
  import { type GenAICoachProps } from '.';
3
3
  export declare const AgentIcon: () => import("react/jsx-runtime").JSX.Element;
4
4
  declare const _default: FunctionComponent<GenAICoachProps> & {
5
- getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly ["user-message", "coach-message", "actions", "attachments"]>;
5
+ getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly ["user-message", "coach-message", "system-message", "actions", "attachments"]>;
6
6
  };
7
7
  export default _default;
8
8
  //# sourceMappingURL=GenAICoach.d.ts.map
@@ -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;AA4E5D,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,GAAG,CAAC;AAahF,eAAO,MAAM,SAAS,+CAqCrB,CAAC;;;;AAk2BF,wBAA6D"}
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;AA+E5D,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,GAAG,CAAC;AAchF,eAAO,MAAM,SAAS,+CAqCrB,CAAC;;;;AAm4BF,wBAA6D"}
@@ -9,14 +9,15 @@ import * as polarisSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/i
9
9
  import * as paperClipIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/paper-clip.icon';
10
10
  import * as warnSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/warn-solid.icon';
11
11
  import * as sendSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/send-solid.icon';
12
+ import * as squareSolidIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/square-solid.icon';
12
13
  import { getGenAICoachTestIds } from './GenAICoach.test-ids';
13
14
  import { isCoachMessage, isInUtilities, isUserMessage } from './GenAICoach.utils';
14
- import { StyledMessagesContainer, StyledDisclaimerText, StyledGenAICoachContainer, StyledGenAIOptionsMenu, StyledInitialMessageContainer, StyledInputContainer, StyledMenuSuggestions, StyledMessagesList, StyledGridContainer, StyledFlexWrapper, StyledErrorContainer, StyledInput, StyledGuidedSuggestions, StyledComposerSection, StyledSendButton, StyledGenAIFormControl, StyledGenAITextArea, StyledInitialMessageGrid, StyledGenAIFooter, StyledAgentIcon } 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 } from './GenAICoach.styles';
15
16
  import ConversationHistory from './ConversationHistory';
16
17
  import { GenAIMessage, InitialSuggestedMessage } from '.';
17
- registerIcon(caretUpIcon, timesIcon, caretDownIcon, minusIcon, polarisSolidIcon, paperClipIcon, warnSolidIcon, sendSolidIcon);
18
+ registerIcon(caretUpIcon, timesIcon, caretDownIcon, minusIcon, polarisSolidIcon, paperClipIcon, warnSolidIcon, squareSolidIcon, sendSolidIcon);
18
19
  export const AgentIcon = () => (_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: 'a', 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: 'b', 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: 'c', children: _jsx("path", { d: 'M0 0h60v60H0z' }) }), _jsxs("g", { fillRule: 'evenodd', clipPath: 'url(#c)', clipRule: 'evenodd', children: [_jsx("path", { fill: 'url(#a)', 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(#b)', 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' })] })] }));
19
- 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, ...restProps }) => {
20
+ 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, ...restProps }) => {
20
21
  const theme = useTheme();
21
22
  const t = useI18n();
22
23
  const testIds = useTestIds(testId, getGenAICoachTestIds);
@@ -83,7 +84,10 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
83
84
  attachments.length > 0 &&
84
85
  (attachmentsError || attachments.some(attachment => attachment.error));
85
86
  const isCoachMessageLoading = latestMessage && isCoachMessage(latestMessage) && latestMessage.loading;
86
- if (isMessageAndAttachmentsEmpty || hasAttachmentsError || isCoachMessageLoading)
87
+ if (isMessageAndAttachmentsEmpty ||
88
+ hasAttachmentsError ||
89
+ isCoachMessageLoading ||
90
+ (latestMessage && isCoachMessage(latestMessage) && latestMessage.isToolConfirmation))
87
91
  return;
88
92
  onSend({
89
93
  id: createUID(),
@@ -281,7 +285,12 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
281
285
  justify: 'end',
282
286
  alignItems: 'center',
283
287
  pad: 1
284
- }, children: [t('generating_response'), _jsx(Progress, { placement: 'inline' })] })) : (_jsx(StyledSendButton, { variant: 'primary', onClick: handleSendMessage, icon: true, label: t('send'), "aria-label": t('send_message'), children: _jsx(Icon, { name: 'send-solid' }) }))] })] }) }) }), attachments && attachments.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Flex, { as: FileList, type: 'item', "aria-label": `${t('attachments')}`, items: attachments, container: { pad: [1, 0] } }), attachmentsError && (_jsxs(Flex, { container: { gap: 1, alignItems: 'center' }, as: StyledErrorContainer, children: [_jsx(Icon, { name: 'warn-solid' }), _jsx(VisuallyHiddenText, { children: `${t('error')} ` }), attachmentsError] }))] })), _jsx(Flex, { container: { justify: 'center' }, children: _jsx(StyledDisclaimerText, { inFullPage: !condition, children: t('ai_disclaimer') }) })] }));
288
+ }, children: [t('generating_response'), _jsx(Progress, { placement: 'inline' })] })) : (_jsx(_Fragment, { children: latestMessage &&
289
+ isCoachMessage(latestMessage) &&
290
+ latestMessage.isToolConfirmation ? (_jsx(StyledStopButton, { iconOnly: true, icon: 'square-solid', variant: 'primary', label: t('stop_processing'), onClick: () => {
291
+ textAreaRef.current?.focus();
292
+ stopProcess?.();
293
+ } })) : (_jsx(StyledSendButton, { variant: 'primary', onClick: handleSendMessage, icon: true, label: t('send'), "aria-label": t('send_message'), children: _jsx(Icon, { name: 'send-solid' }) })) }))] })] }) }) }), attachments && attachments.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Flex, { as: FileList, type: 'item', "aria-label": `${t('attachments')}`, items: attachments, container: { pad: [1, 0] } }), attachmentsError && (_jsxs(Flex, { container: { gap: 1, alignItems: 'center' }, as: StyledErrorContainer, children: [_jsx(Icon, { name: 'warn-solid' }), _jsx(VisuallyHiddenText, { children: `${t('error')} ` }), attachmentsError] }))] })), _jsx(Flex, { container: { justify: 'center' }, children: _jsx(StyledDisclaimerText, { inFullPage: !condition, children: t('ai_disclaimer') }) })] }));
285
294
  const isCompact = variant.placement === 'fullpage' &&
286
295
  !fullScreen &&
287
296
  !isInLandingPageUtilities &&
@@ -386,7 +395,16 @@ const GenAICoach = ({ testId, coachOptions: coachOptionsProps, onCoachChange: on
386
395
  item.id
387
396
  ? item.suggestions
388
397
  : undefined,
389
- onSend
398
+ onSend,
399
+ onSubmit: item.isToolConfirmation
400
+ ? (tools) => {
401
+ onSend({
402
+ ...item,
403
+ message: item.message ?? '',
404
+ tools
405
+ });
406
+ }
407
+ : undefined
390
408
  }
391
409
  : item;
392
410
  return (_jsx(GenAIMessage, { ...messageProps, ref: getMessageCbRef(item.id), testId: item.id, announceInteraction: !focusInMessageListRef.current, onAnimationCursorUpdate: animatedTillCursor => {
@@ -1 +1 @@
1
- {"version":3,"file":"GenAICoach.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG1E,OAAO,EACL,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,OAAO,EACP,aAAa,EACb,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,MAAM,EACP,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,WAAW,MAAM,iEAAiE,CAAC;AAC/F,OAAO,KAAK,SAAS,MAAM,8DAA8D,CAAC;AAC1F,OAAO,KAAK,aAAa,MAAM,mEAAmE,CAAC;AACnG,OAAO,KAAK,SAAS,MAAM,8DAA8D,CAAC;AAC1F,OAAO,KAAK,gBAAgB,MAAM,sEAAsE,CAAC;AACzG,OAAO,KAAK,aAAa,MAAM,mEAAmE,CAAC;AACnG,OAAO,KAAK,aAAa,MAAM,mEAAmE,CAAC;AACnG,OAAO,KAAK,aAAa,MAAM,mEAAmE,CAAC;AAEnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAwB,MAAM,GAAG,CAAC;AAEhF,YAAY,CACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,CACd,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAC7B,MAAC,eAAe,IACd,KAAK,EAAC,4BAA4B,EAClC,MAAM,EAAC,gJAAgJ,EACvJ,OAAO,EAAC,WAAW,aAEnB,0BACE,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,QAAQ,EACX,EAAE,EAAC,OAAO,EACV,EAAE,EAAC,QAAQ,EACX,EAAE,EAAC,QAAQ,EACX,aAAa,EAAC,gBAAgB,aAE9B,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,GAAG,EAC1C,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,GAAG,EAC1C,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,GAAG,EAC1C,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,GAAG,IAC3B,EACjB,0BAAgB,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,QAAQ,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,QAAQ,EAAC,aAAa,EAAC,gBAAgB,aAC7F,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,GAAG,EAC1D,eAAM,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,SAAS,EAAC,WAAW,EAAC,IAAI,GAAG,IAC5C,EACjB,mBAAU,EAAE,EAAC,GAAG,YACd,eAAM,CAAC,EAAC,eAAe,GAAG,GACjB,EACX,aAAG,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,aACzD,eACE,IAAI,EAAC,SAAS,EACd,CAAC,EAAC,q2BAAq2B,GACv2B,EACF,eACE,IAAI,EAAC,SAAS,EACd,CAAC,EAAC,q2BAAq2B,GACv2B,IACA,IACY,CACnB,CAAC;AAEF,MAAM,UAAU,GAAuC,CAAC,EACtD,MAAM,EACN,YAAY,EAAE,iBAAiB,EAC/B,aAAa,EAAE,iBAAiB,EAChC,QAAQ,GAAG,EAAE,EACb,MAAM,EACN,wBAAwB,EACxB,WAAW,EACX,OAAO,EACP,KAAK,EACL,OAAO,EACP,MAAM,EACN,UAAU,GAAG,KAAK,EAClB,OAAO,EACP,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,GAAG,IAAI,EACtB,wBAAwB,EACxB,GAAG,SAAS,EACb,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACzD,MAAM,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,CAAC;IAExC,MAAM,UAAU,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,GAAG,SAAS,EAAiB,CAAC;IAEjE,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,qBAAqB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAC/D,MAAM,wBAAwB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAClE,MAAM,mBAAmB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,UAAU,CAAoB,IAAI,CAAC,CAAC;IAC5F,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,cAAc,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IACtD,MAAM,kBAAkB,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,EAAE;QACzC,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAqB,iBAAiB,CAAC,CAAC;IACxF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAEtC,IAAI,CAAC,CAAC;IAER,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC;IAE5B,MAAM,aAAa,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,SAAS,GACb,CAAC,CAAC,UAAU,IAAI,mBAAmB,CAAC;QACpC,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ;YAC7B,OAAO,CAAC,SAAS,KAAK,WAAW;YACjC,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC;YACrD,CAAC,mBAAmB,CAAC,CAAC;IAE1B,MAAM,aAAa,GAAG,CAAC,EAAuB,EAAE,EAAE;QAChD,eAAe,CAAC,GAAG,CAAC,EAAE;YACpB,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACrB,OAAO;oBACL,GAAG,KAAK;oBACR,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE;iBAC1B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,OAAO,CAAC;QAEtC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1C,CAAC;YACD,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACjC,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,MAAM,4BAA4B,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAC5F,MAAM,mBAAmB,GACvB,WAAW;YACX,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,gBAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,MAAM,qBAAqB,GACzB,aAAa,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC;QAC1E,IAAI,4BAA4B,IAAI,mBAAmB,IAAI,qBAAqB;YAAE,OAAO;QACzF,MAAM,CAAC;YACL,EAAE,EAAE,SAAS,EAAE;YACf,OAAO;YACP,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAE9D,MAAM,kBAAkB,GAAG,CAAC,CAAgB,EAAE,EAAE;QAC9C,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACrC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,iBAAiB,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,CAAmC,EAAE,EAAE;QACtC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAC;IAEF,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAC,IAAI,IAAC,OAAO,EAAC,IAAI,YAAE,aAAa,GAAQ,CAAC;QACnD,CAAC;QACD,OAAO,CACL,KAAC,UAAU,IACT,IAAI,EAAE,aAAa,gBACP,CAAC,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,CAAC,EAChD,OAAO,EAAC,MAAM,EACd,EAAE,EAAE,sBAAsB,EAC1B,IAAI,EAAE;gBACJ,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,YAAY;gBACnB,WAAW,EAAE,aAAa;aAC3B,GACD,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAC/D,8BACE,KAAC,IAAI,IAAC,OAAO,EAAC,IAAI,YAAE,aAAa,GAAQ,EACzC,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,YACvC,KAAC,MAAM,IACL,IAAI,QACJ,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,gBACR,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAC5C,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAE,GAAG,EAAE;4BACZ,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;4BACnC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;wBACjC,CAAC,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,UAAU,GAAG,GACjB,GACJ,IACN,CACJ,CAAC,CAAC,CAAC,CACF,8BACG,kBAAkB,EAEnB,MAAC,IAAI,IAAC,SAAS,mBACZ,aAAa,CAAC,OAAO,CAAC,IAAI,CACzB,KAAC,MAAM,IACL,IAAI,QACJ,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,gBACR,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAC5C,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAE,GAAG,EAAE;gCACZ,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gCACnC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;4BACjC,CAAC,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACd,CACV,EAEA,eAAe,IAAI,KAAC,gBAAgB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAI,EAEpF,OAAO,IAAI,CACV,KAAC,OAAO,mBAAc,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,KAAM,OAAO,GAAI,CACvF,EACA,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,CACjC,KAAC,MAAM,IACL,IAAI,QACJ,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,gBACL,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACzC,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAE,OAAO,CAAC,OAAO,YAExB,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACd,CACV,IACI,IACN,CACJ,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,MAAM,2BAA2B,GAAG,CAAC,OAAuB,EAAE,EAAE;QAC9D,IAAI,OAAO;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACnC,qBAAqB,CAAC,OAAO,GAAG,KAAK,CAAC;QACtC,qBAAqB,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC;QAC3D,IACE,qBAAqB,CAAC,OAAO;YAC7B,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAC7D,CAAC;YACD,qBAAqB,CAAC,OAAO;gBAC3B,2BAA2B,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,IAAI,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC;YAClD,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,OAAO,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;YAC5B,IACE,aAAa,CAAC,OAAO,CAAC;gBACtB,CAAC,OAAO,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;gBAChF,aAAa,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EACvC,CAAC;gBACD,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;YAClC,CAAC;iBAAM,IAAI,OAAO,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;gBAC5C,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBAC7B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC1B,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,EAAE,CAAC;QACX,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE5C,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,gBAAgB,GAAG,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3F,MAAM,mBAAmB,GAAG,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtF,IACE,gBAAgB,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM;YACpD,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,EACpD,CAAC;YACD,UAAU,CAAC,GAAG,EAAE;gBACd,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC;oBACxD,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;YACL,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,IAAI,aAAa,IAAI,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClD,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBAC7B,uBAAuB,EAAE,CAAC;gBAC1B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC1B,WAAW,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,aAAa,EAAE,OAAO,EAAE,CAAC;gBAClC,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,oBAAoB,IAAI,oBAAoB,CAAC,OAAO,EAAE,CAAC;YACzD,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACrD,oBAAoB,CAAC,OAAO,GAAG,KAAK,CAAC;YAErC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;YACzC,IAAI,aAAa,IAAI,aAAa,KAAK,QAAQ,CAAC,IAAI;gBAAE,oBAAoB,CAAC,KAAK,EAAE,CAAC;QACrF,CAAC;IACH,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE3B,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC9B,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzB,CAAC;aAAM,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnC,SAAS,CACP,eAAe,EACf;QACE,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,aAAa;QACvB,GAAG,EAAE,SAAS;QACd,aAAa,EAAE,IAAI;QACnB,mBAAmB,EAAE,wBAAwB,CAAC,OAAO;KACtD,EACD,CAAC,QAAQ,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAC7C,CAAC;IAEF,SAAS,CACP,UAAU,EACV;QACE,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,MAAM,iBAAiB,EAAE;QACnC,GAAG,EAAE,YAAY;QACjB,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,KAAK;KACtB,EACD,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CACzC,CAAC;IAEF,aAAa,CAAC,WAAW,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;QACzD,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,qBAAqB,CAAC,OAAO,GAAG,KAAK,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,CAAC,CAAgC,EAAE,EAAE;QACxD,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,MAAM,QAAQ,GAAG,sDAAsD,CAAC;QACxE,MAAM,SAAS,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,cAAc,IAAI,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAErD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAClB,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,iBAAiB,aAC7D,KAAC,SAAS,IAAC,KAAK,EAAE,CAAC,CAAC,2BAA2B,CAAC,EAAE,WAAW,QAAC,QAAQ,EAAE,UAAU,YAChF,KAAC,sBAAsB,IAAC,OAAO,EAAE,OAAO,YACtC,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,aACjD,KAAC,mBAAmB,IAClB,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,CAAC,CAAC,eAAe,CAAC,EAC/B,SAAS,EAAE,kBAAkB,EAC7B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,GAAG,EAAE;oCACZ,UAAU,CAAC,IAAI,CAAC,CAAC;gCACnB,CAAC,EACD,MAAM,EAAE,GAAG,EAAE;oCACX,UAAU,CAAC,KAAK,CAAC,CAAC;gCACpB,CAAC,EACD,UAAU,SACV,EAEF,MAAC,IAAI,IACH,SAAS,EAAE;oCACT,SAAS,EAAE,KAAK;oCAChB,OAAO,EAAE,SAAS;oCAClB,GAAG,EAAE,CAAC;oCACN,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;iCAC1B,aAED,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,aACtC,WAAW,IAAI,CACd,KAAC,UAAU,IACT,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,EACtB,OAAO,EAAC,QAAQ,EAChB,IAAI,EAAC,aAAa,EAClB,QAAQ,QACR,EAAE,EAAE,qBAAqB,EACzB,IAAI,EAAE;oDACJ,KAAK,EAAE,WAAW;oDAClB,WAAW,EAAE,EAAE,CAAC,EAAE;wDAChB,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;wDACtD,IAAI,QAAQ,EAAE,CAAC;4DACb,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;4DAC7B,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wDAC/B,CAAC;oDACH,CAAC;iDACF,EACD,SAAS,EAAE,KAAK,GAChB,CACH,EAEA,eAAe,IAAI,CAClB,8BACE,KAAC,MAAM,IACL,IAAI,QACJ,OAAO,EAAE,GAAG,EAAE;4DACZ,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;gEAC/B,kBAAkB,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;4DACxC,CAAC;4DACD,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wDACtC,CAAC,EACD,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,YAE1B,KAAC,IAAI,IAAC,IAAI,EAAC,YAAY,GAAG,GACnB,EACT,KAAC,WAAW,IACV,IAAI,EAAC,MAAM,EACX,GAAG,EAAE,kBAAkB,EACvB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,KAAK,iBACF,OAAO,CAAC,WAAW,GAChC,IACD,CACJ,IACI,EAEN,aAAa,IAAI,cAAc,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CACzE,MAAC,IAAI,IACH,SAAS,EAAE;4CACT,GAAG,EAAE,CAAC;4CACN,OAAO,EAAE,KAAK;4CACd,UAAU,EAAE,QAAQ;4CACpB,GAAG,EAAE,CAAC;yCACP,aAEA,CAAC,CAAC,qBAAqB,CAAC,EACzB,KAAC,QAAQ,IAAC,SAAS,EAAC,QAAQ,GAAG,IAC1B,CACR,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IACf,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,iBAAiB,EAC1B,IAAI,QACJ,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,gBACJ,CAAC,CAAC,cAAc,CAAC,YAE7B,KAAC,IAAI,IAAC,IAAI,EAAC,YAAY,GAAG,GACT,CACpB,IACI,IACF,GACgB,GACf,EAEX,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACxC,8BACE,KAAC,IAAI,IACH,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAC,MAAM,gBACC,GAAG,CAAC,CAAC,aAAa,CAAC,EAAE,EACjC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAC1B,EAED,gBAAgB,IAAI,CACnB,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,oBAAoB,aACzE,KAAC,IAAI,IAAC,IAAI,EAAC,YAAY,GAAG,EAC1B,KAAC,kBAAkB,cAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,GAAsB,EAE1D,gBAAgB,IACZ,CACR,IACA,CACJ,EAED,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YACpC,KAAC,oBAAoB,IAAC,UAAU,EAAE,CAAC,SAAS,YAAG,CAAC,CAAC,eAAe,CAAC,GAAwB,GACpF,IACF,CACR,CAAC;IAEF,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,KAAK,UAAU;QAChC,CAAC,UAAU;QACX,CAAC,wBAAwB;QACzB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAExB,MAAM,wBAAwB,GAC5B,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC/E,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAExB,MAAM,cAAc,GAAG,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;IAErE,MAAM,iBAAiB,GAAG,CACxB,4BACG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CACzF,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,iBAAiB,aAC7D,KAAC,IAAI,IACH,EAAE,EAAE,uBAAuB,EAC3B,GAAG,EAAE,mBAAmB,EACxB,SAAS,EACP,OAAO,IAAI,KAAK;wBACd,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE;wBACzD,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAE1C,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,YAEhB,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAClB,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,YACzD,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,QAAQ,IACP,OAAO,EAAC,MAAM,EACd,SAAS,EAAC,OAAO,EACjB,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAC7D,CACH,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,IAAC,OAAO,EAAE,KAAK,GAAI,CAC/B,GACI,CACR,CAAC,CAAC,CAAC,CACF,4BACG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,MAAC,IAAI,IACH,EAAE,EAAE,6BAA6B,EACjC,SAAS,EAAE;gCACT,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;gCACvC,SAAS,EAAE,QAAQ;gCACnB,UAAU,EAAE,QAAQ;gCACpB,GAAG,EAAE,CAAC;6BACP,EACD,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,aAEhB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC;oCACzD,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5B,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aACpE,KAAC,SAAS,KAAG,EAEb,KAAC,IAAI,IAAC,OAAO,EAAC,IAAI,YAAE,CAAC,CAAC,cAAc,CAAC,GAAQ,IACxC,CACR,EAED,KAAC,IAAI,IACH,EAAE,EAAE,wBAAwB,EAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,YAE9C,wBAAwB,EAAE,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,CACxD,KAAC,uBAAuB,OAClB,uBAAuB,EAC3B,MAAM,EAAE,cAAc,CAAC,EAAE;4CACvB,IAAI,UAAU,EAAE,CAAC;gDACf,MAAM,CAAC;oDACL,EAAE,EAAE,cAAc,CAAC,EAAE;oDACrB,OAAO,EAAE,cAAc,CAAC,OAAO;iDAChC,CAAC,CAAC;4CACL,CAAC;iDAAM,CAAC;gDACN,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;4CACrC,CAAC;4CACD,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;4CAC/B,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wCAC/B,CAAC,EACD,MAAM,EAAE,uBAAuB,CAAC,EAAE,GAClC,CACH,CAAC,GACG,EAEN,wBAAwB,IAAI,CAAC,UAAU,IAAI,WAAW,IAClD,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IACH,EAAE,EAAE,kBAAkB,EACtB,GAAG,EAAE,eAAe,gBACR,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAC/C,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAClC,OAAO,EAAE,GAAG,EAAE;gCACZ,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;oCACnC,IAAI,qBAAqB,CAAC,OAAO,EAAE,CAAC;wCAClC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oCACxC,CAAC;yCAAM,CAAC;wCACN,6EAA6E;wCAC7E,MAAM,SAAS,GACb,eAAe,CAAC,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC;wCACtE,IAAI,SAAS,YAAY,WAAW,EAAE,CAAC;4CACrC,SAAS,CAAC,KAAK,EAAE,CAAC;wCACpB,CAAC;oCACH,CAAC;gCACH,CAAC;gCACD,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;gCACrC,WAAW,CAAC,IAAI,CAAC,CAAC;4BACpB,CAAC,EACD,SAAS,EAAE,CAAC,CAAgB,EAAE,EAAE;gCAC9B,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;oCACjD,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oCACnB,UAAU,CAAC,OAAO;wCAChB,2BAA2B,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;oCAC9D,qBAAqB,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;gCACrD,CAAC;qCAAM,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;oCAC3D,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC/D,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,aAAa,CACpC,CAAC;oCACF,UAAU,CAAC,OAAO;wCAChB,2BAA2B,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;oCAC9D,wBAAwB,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;oCAEtD,IACE,oBAAoB;wCACpB,aAAa,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CAAC,EAC9C,CAAC;wCACD,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oCACrB,CAAC;gCACH,CAAC;qCAAM,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;oCAC3B,CAAC,CAAC,cAAc,EAAE,CAAC;oCACnB,uBAAuB,EAAE,CAAC;oCAC1B,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;wCACf,IACE,CAAC,SAAS;4CACV,mBAAmB;4CACnB,mBAAmB,CAAC,cAAc,EAClC,CAAC;4CACD,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,EAAE,aAAa,CACtD,UAAU,mBAAmB,CAAC,cAAc,IAAI,CACjD,CAAC;4CAEF,IAAI,UAAU,EAAE,CAAC;gDACf,UAAU,CAAC,KAAK,EAAE,CAAC;gDACnB,CAAC,CAAC,cAAc,EAAE,CAAC;4CACrB,CAAC;wCACH,CAAC;6CAAM,CAAC;4CACN,MAAM,WAAW,GACf,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa;gDACnD,EAAE,sBAAsB,CAAC;4CAC7B,IAAI,WAAW,EAAE,CAAC;gDAChB,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;gDAC9C,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oDACtB,CAAC,CAAC,cAAc,EAAE,CAAC;oDACnB,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gDAC5C,CAAC;4CACH,CAAC;wCACH,CAAC;oCACH,CAAC;yCAAM,CAAC;wCACN,MAAM,WAAW,GACf,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAkB,CAAC;wCAC7D,IAAI,WAAW,EAAE,CAAC;4CAChB,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;4CAC9C,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gDACtB,CAAC,CAAC,cAAc,EAAE,CAAC;gDACnB,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;4CACxB,CAAC;wCACH,CAAC;wCAED,WAAW,CAAC,IAAI,CAAC,CAAC;oCACpB,CAAC;gCACH,CAAC;4BACH,CAAC,YAEA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gCACnB,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC;oCACvC,CAAC,CAAC;wCACE,GAAG,IAAI;wCACP,WAAW,EACT,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE;4CACjE,IAAI,CAAC,EAAE;4CACL,CAAC,CAAC,IAAI,CAAC,WAAW;4CAClB,CAAC,CAAC,SAAS;wCACf,MAAM;qCACP;oCACH,CAAC,CAAC,IAAI,CAAC;gCAET,OAAO,CACL,KAAC,YAAY,OACP,YAAY,EAChB,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAC7B,MAAM,EAAE,IAAI,CAAC,EAAE,EACf,mBAAmB,EAAE,CAAC,qBAAqB,CAAC,OAAO,EACnD,uBAAuB,EAAE,kBAAkB,CAAC,EAAE;wCAC5C,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;4CACzB,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;wCACnD,CAAC;oCACH,CAAC,KACG,CAAC,cAAc,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACxE,CACH,CAAC;4BACJ,CAAC,CAAC,GACG,CACR,GACA,CACJ,GACI,EAEN,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBACrF,CAAC,OAAO,IAAI,CACV,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,oBAAoB,YAChE,KAAC,qBAAqB,cACnB,UAAU,CAAC,CAAC,CAAC,CACZ,4BACG,WAAW,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACrC,8BACG,aAAa;wCACd,cAAc,CAAC,aAAa,CAAC;wCAC7B,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CACtB,MAAC,IAAI,IACH,SAAS,EAAE;4CACT,GAAG,EAAE,CAAC;4CACN,OAAO,EAAE,QAAQ;4CACjB,UAAU,EAAE,QAAQ;4CACpB,GAAG,EAAE,CAAC;yCACP,aAEA,CAAC,CAAC,qBAAqB,CAAC,EACzB,KAAC,QAAQ,IACP,SAAS,EAAC,QAAQ,EAClB,cAAc,QACd,OAAO,EAAE,CAAC,CAAC,qBAAqB,CAAC,GACjC,IACG,CACR,CAAC,CAAC,CAAC,CACF,KAAC,aAAa,IACZ,KAAK,EAAE;4CACL,UAAU,EAAE;gDACV,MAAM,EAAE;oDACN,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oDAC5B,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oDACxC,sBAAsB,EAAE,SAAS;iDAClC;6CACF;yCACF,YAED,KAAC,UAAU,IACT,EAAE,EAAE,uBAAuB,EAC3B,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,EAC3C,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,eAAe,EACpB,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE;gDACJ,KAAK,EAAE,WAAW;gDAClB,WAAW,EAAE,EAAE,CAAC,EAAE;oDAChB,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oDACtD,IAAI,QAAQ,EAAE,CAAC;wDACb,MAAM,CAAC;4DACL,EAAE,EAAE,QAAQ,CAAC,EAAE;4DACf,OAAO,EAAE,QAAQ,CAAC,OAAO;yDAC1B,CAAC,CAAC;oDACL,CAAC;gDACH,CAAC;6CACF,GACD,GACY,CACjB,EAED,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YACpC,KAAC,oBAAoB,IAAC,UAAU,EAAE,CAAC,SAAS,YACzC,CAAC,CAAC,eAAe,CAAC,GACE,GAClB,IACN,CACJ,GACA,CACJ,CAAC,CAAC,CAAC,CACF,cAAc,CACf,GACqB,GACnB,CACR,IACE,CACR,GACA,CACJ,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,CAAC,OAAO,IAAI,CAAC,mBAAmB,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACzE,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC5B,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC,EAAE,CAAC,mBAAmB,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,gBAAgB,EAAE,CAAC;YACrB,cAAc,CAAC;gBACb,OAAO,EAAE,gBAAgB;aAC1B,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,cAAc,CAAC;gBACb,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC;aAC/B,CAAC,CAAC;YACH,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;QAClC,CAAC;aAAM,IAAI,gBAAgB,CAAC,OAAO,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/E,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC7B,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEpC,MAAM,WAAW,GAAG,mBAAmB,IAAI,CACzC,KAAC,mBAAmB,IAClB,MAAM,EAAE,OAAO,CAAC,IAAI,KAChB,mBAAmB,EACvB,WAAW,EAAE,cAAc,CAAC,EAAE;YAC5B,IAAI,SAAS,EAAE,CAAC;gBACd,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC/B,CAAC;YAED,mBAAmB,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC,EACD,SAAS,EAAE,GAAG,EAAE;YACd,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;YAC7B,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAClC,CAAC,EACD,UAAU,EAAE,CAAC,SAAS,EACtB,GAAG,EAAE,cAAc,GACnB,CACH,CAAC;IAEF,OAAO,CACL,KAAC,UAAU,cACT,MAAC,IAAI,IACH,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAClC,EAAE,EAAE,yBAAyB,iBAChB,OAAO,CAAC,IAAI,EACzB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,aAAa,KACd,SAAS,aAEb,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,YAC9E,aAAa,GACT,EACN,SAAS,CAAC,CAAC,CAAC,CACX,4BAAG,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,GAAI,CAC7D,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IACH,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EACxC,EAAE,EAAE,mBAAmB,EACvB,mBAAmB,EAAE,CAAC,CAAC,mBAAmB,aAEzC,WAAW,EACX,iBAAiB,IACb,CACR,EACA,oBAAoB,IAAI,KAAC,QAAQ,OAAK,oBAAoB,GAAI,IAC1D,GACI,CACd,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC","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 FullscreenButton,\n FormField,\n Fullscreen,\n useUID\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';\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} 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 sendSolidIcon\n);\n\nexport const AgentIcon = () => (\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='a'\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 id='b' x1='7.137' x2='29.565' y1='0' y2='60.151' gradientUnits='userSpaceOnUse'>\n <stop offset='.457' stopColor='#8165d2' stopOpacity='0' />\n <stop offset='.524' stopColor='#280096' stopOpacity='.4' />\n </linearGradient>\n <clipPath id='c'>\n <path d='M0 0h60v60H0z' />\n </clipPath>\n <g fillRule='evenodd' clipPath='url(#c)' clipRule='evenodd'>\n <path\n fill='url(#a)'\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(#b)'\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\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 ...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\n const isSmallOrAbove = useBreakpoint('sm', {\n breakpointRef: genAICoachRef\n });\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\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 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 <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>\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 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 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={message}\n placeholder={t('write_message')}\n onKeyDown={handleEnterKeyDown}\n onChange={handleTextAreaChange}\n onFocus={() => {\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\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 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 <Flex container={{ direction: 'column', alignItems: 'center', gap: 1 }}>\n <AgentIcon />\n\n <Text variant='h2'>{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\n return (\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 );\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 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} 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';\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} 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 <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='a'\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 id='b' x1='7.137' x2='29.565' y1='0' y2='60.151' gradientUnits='userSpaceOnUse'>\n <stop offset='.457' stopColor='#8165d2' stopOpacity='0' />\n <stop offset='.524' stopColor='#280096' stopOpacity='.4' />\n </linearGradient>\n <clipPath id='c'>\n <path d='M0 0h60v60H0z' />\n </clipPath>\n <g fillRule='evenodd' clipPath='url(#c)' clipRule='evenodd'>\n <path\n fill='url(#a)'\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(#b)'\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\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 ...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\n const isSmallOrAbove = useBreakpoint('sm', {\n breakpointRef: genAICoachRef\n });\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\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 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 }, [[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>\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 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 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={message}\n placeholder={t('write_message')}\n onKeyDown={handleEnterKeyDown}\n onChange={handleTextAreaChange}\n onFocus={() => {\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\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 <>\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: 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 <Flex container={{ direction: 'column', alignItems: 'center', gap: 1 }}>\n <AgentIcon />\n\n <Text variant='h2'>{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\n return (\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 );\n};\n\nexport default withTestIds(GenAICoach, getGenAICoachTestIds);\n"]}
@@ -27,6 +27,7 @@ export declare const StyledSuggestionsContainer: import("styled-components").Sty
27
27
  export declare const StyledTimeStamp: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").TextProps>, import("styled-components").DefaultTheme, {}, never>;
28
28
  export declare const StyledMessage: import("styled-components").StyledComponent<"p", import("styled-components").DefaultTheme, {}, never>;
29
29
  export declare const StyledUserMessage: import("styled-components").StyledComponent<"li", import("styled-components").DefaultTheme, {}, never>;
30
+ export declare const StyledSystemMessage: import("styled-components").StyledComponent<"li", import("styled-components").DefaultTheme, {}, never>;
30
31
  export declare const StyledSuggestedMessage: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
31
32
  export declare const StyledMessagesList: import("styled-components").StyledComponent<"ul", import("styled-components").DefaultTheme, {}, never>;
32
33
  export declare const StyledHistoryContainer: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-core").FlexProps>, import("styled-components").DefaultTheme, {
@@ -59,4 +60,10 @@ export declare const StyledGenAIAvatar: import("styled-components").StyledCompon
59
60
  getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly []>;
60
61
  }, import("styled-components").DefaultTheme, {}, never>;
61
62
  export declare const StyledGenAIFooter: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
63
+ export declare const StyledStopButton: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("react").PropsWithoutRef<import("@pega/cosmos-react-core").AIButtonProps> & import("react").RefAttributes<HTMLButtonElement>>, import("styled-components").DefaultTheme, {}, never>;
64
+ export declare const StyledToolMessage: import("styled-components").StyledComponent<"p", import("styled-components").DefaultTheme, {}, never>;
65
+ export declare const StyledToolMessageContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
66
+ export declare const StyledConfirmationMsg: import("styled-components").StyledComponent<import("@pega/cosmos-react-core").ForwardRefForwardPropsComponent<import("@pega/cosmos-react-rte").RichTextViewerProps> & {
67
+ getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly []>;
68
+ }, import("styled-components").DefaultTheme, {}, never>;
62
69
  //# 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":"AA+BA,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;2BA3EZ,CAAC;uDAgGtB,CAAC;AAIH,eAAO,MAAM,qBAAqB;2BApGX,CAAC;uDAgHtB,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,uGASxB,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;2BA1W/B,CAAC;uDA8XT,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;2BAtbb,CAAC;uDA4bvB,CAAC;AAEF,eAAO,MAAM,eAAe,yGAG3B,CAAC;AAIF,eAAO,MAAM,sBAAsB;cAAmC,OAAO;SAmB3E,CAAC;AAIH,eAAO,MAAM,mBAAmB;2BA3fK,CAAC;uDAygBpC,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;2BAjhBH,CAAC;uDA+hB1B,CAAC;AAIH,eAAO,MAAM,iBAAiB,yGAG7B,CAAC"}
1
+ {"version":3,"file":"GenAICoach.styles.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.styles.ts"],"names":[],"mappings":"AAiCA,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;2BA5E3B,CAAJ;uDAiGF,CAAC;AAIH,eAAO,MAAM,qBAAqB;2BArG1B,CAAJ;uDAiHF,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,uGASxB,CAAC;AAIH,eAAO,MAAM,iBAAiB,wGAgC7B,CAAC;AAIF,eAAO,MAAM,mBAAmB,wGAgB/B,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;2BAlYwD,CAAC;uDAsZhG,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;2BA3c5B,CAAJ;uDAidH,CAAC;AAEF,eAAO,MAAM,eAAe,yGAG3B,CAAC;AAIF,eAAO,MAAM,sBAAsB;cAAmC,OAAO;SAmB3E,CAAC;AAIH,eAAO,MAAM,mBAAmB;2BAjhBX,CAAC;uDA+hBpB,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;2BAviBkB,CAAC;uDAqjB/C,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;2BAvqBxB,CAAC;uDAsrBV,CAAC"}
@@ -1,13 +1,14 @@
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, StyledEmptyState, StyledErrorState, StyledIcon, StyledText, SummaryItem, Text, TextArea, calculateFontSize, defaultThemeProp, tryCatch, Avatar, calculateForegroundColor } 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 } 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
10
  import { lineClamp } from '@pega/cosmos-react-core/lib/styles/mixins';
11
+ import { RichTextViewer } from '@pega/cosmos-react-rte';
11
12
  import { isInUtilities } from './GenAICoach.utils';
12
13
  export const StyledMessageWrapper = styled.li ``;
13
14
  const maxWidthMessage = '46rem';
@@ -215,6 +216,18 @@ export const StyledUserMessage = styled.li(({ theme: { base: { 'border-radius':
215
216
  `;
216
217
  });
217
218
  StyledUserMessage.defaultProps = defaultThemeProp;
219
+ export const StyledSystemMessage = styled.li(({ theme: { base: { spacing, 'font-size': fontSize, 'font-scale': fontScale } } }) => {
220
+ const systemFontSize = calculateFontSize(fontSize, fontScale).xs;
221
+ return css `
222
+ overflow-wrap: break-word;
223
+ font-size: ${systemFontSize};
224
+ opacity: 0.7;
225
+ text-align: center;
226
+ padding-inline: calc(2 * ${spacing});
227
+ margin-block: calc(2 * ${spacing});
228
+ `;
229
+ });
230
+ StyledSystemMessage.defaultProps = defaultThemeProp;
218
231
  export const StyledSuggestedMessage = styled.div(({ theme }) => {
219
232
  return css `
220
233
  column-gap: calc(2 * ${theme.base.spacing});
@@ -422,4 +435,28 @@ export const StyledGenAIFooter = styled.div `
422
435
  width: 100%;
423
436
  max-width: ${maxWidthMessage};
424
437
  `;
438
+ export const StyledStopButton = styled(AIButton) `
439
+ border-radius: 50%;
440
+ `;
441
+ export const StyledToolMessage = styled.p(({ theme: { base: { spacing, palette: { 'border-line': borderLine } } } }) => {
442
+ return css `
443
+ border-block-end: 0.125rem solid ${borderLine};
444
+ padding: calc(2 * ${spacing});
445
+ `;
446
+ });
447
+ StyledToolMessage.defaultProps = defaultThemeProp;
448
+ export const StyledToolMessageContainer = styled.div(({ theme: { base: { spacing, 'border-radius': borderRadius, palette: { 'border-line': borderLine } } } }) => {
449
+ return css `
450
+ border: 0.125rem solid ${borderLine};
451
+ border-radius: calc(3 * ${borderRadius});
452
+ margin-block: ${spacing};
453
+ `;
454
+ });
455
+ StyledToolMessageContainer.defaultProps = defaultThemeProp;
456
+ export const StyledConfirmationMsg = styled(RichTextViewer)(({ theme: { base, components: { 'form-control': { ':read-only': { 'background-color': readOnlyBackgroundColor } } } } }) => `
457
+ padding: 0;
458
+ background-color: ${readOnlyBackgroundColor};
459
+ border-radius: calc(0.5 * ${base['border-radius']});
460
+ `);
461
+ StyledConfirmationMsg.defaultProps = defaultThemeProp;
425
462
  //# sourceMappingURL=GenAICoach.styles.js.map