@pega/cosmos-react-work 9.0.0-build.27.4 → 9.0.0-build.27.6

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 (36) hide show
  1. package/lib/components/AppAnnouncement/AppAnnouncement.d.ts +1 -0
  2. package/lib/components/AppAnnouncement/AppAnnouncement.d.ts.map +1 -1
  3. package/lib/components/AppAnnouncement/AppAnnouncement.js +35 -21
  4. package/lib/components/AppAnnouncement/AppAnnouncement.js.map +1 -1
  5. package/lib/components/Assignments/Assignments.d.ts +2 -2
  6. package/lib/components/Assignments/Assignments.d.ts.map +1 -1
  7. package/lib/components/Assignments/Assignments.js +1 -1
  8. package/lib/components/Assignments/Assignments.js.map +1 -1
  9. package/lib/components/CaseView/CaseHeader/Summary.d.ts.map +1 -1
  10. package/lib/components/CaseView/CaseHeader/Summary.js +8 -1
  11. package/lib/components/CaseView/CaseHeader/Summary.js.map +1 -1
  12. package/lib/components/GenAICoach/CaseWorkflow.d.ts.map +1 -1
  13. package/lib/components/GenAICoach/CaseWorkflow.js +14 -4
  14. package/lib/components/GenAICoach/CaseWorkflow.js.map +1 -1
  15. package/lib/components/GenAICoach/ConversationHistory.d.ts.map +1 -1
  16. package/lib/components/GenAICoach/ConversationHistory.js +11 -13
  17. package/lib/components/GenAICoach/ConversationHistory.js.map +1 -1
  18. package/lib/components/GenAICoach/GenAICoach.d.ts.map +1 -1
  19. package/lib/components/GenAICoach/GenAICoach.js +3 -5
  20. package/lib/components/GenAICoach/GenAICoach.js.map +1 -1
  21. package/lib/components/GenAICoach/GenAICoach.styles.d.ts +3 -368
  22. package/lib/components/GenAICoach/GenAICoach.styles.d.ts.map +1 -1
  23. package/lib/components/GenAICoach/GenAICoach.styles.js +83 -34
  24. package/lib/components/GenAICoach/GenAICoach.styles.js.map +1 -1
  25. package/lib/components/GenAICoach/GenAICoach.test-ids.d.ts +1 -1
  26. package/lib/components/GenAICoach/GenAICoach.test-ids.d.ts.map +1 -1
  27. package/lib/components/GenAICoach/GenAICoach.test-ids.js +1 -1
  28. package/lib/components/GenAICoach/GenAICoach.test-ids.js.map +1 -1
  29. package/lib/components/GenAICoach/GenAICoach.types.d.ts +6 -0
  30. package/lib/components/GenAICoach/GenAICoach.types.d.ts.map +1 -1
  31. package/lib/components/GenAICoach/GenAICoach.types.js.map +1 -1
  32. package/lib/components/GenAICoach/PortalAgentSplitView.d.ts +1 -1
  33. package/lib/components/GenAICoach/PortalAgentSplitView.d.ts.map +1 -1
  34. package/lib/components/GenAICoach/PortalAgentSplitView.js +33 -10
  35. package/lib/components/GenAICoach/PortalAgentSplitView.js.map +1 -1
  36. package/package.json +3 -3
@@ -21,6 +21,7 @@ export interface AppAnnouncementProps extends BaseProps, NoChildrenProp {
21
21
  onDismiss?: () => void;
22
22
  ref?: Ref<HTMLElement>;
23
23
  }
24
+ export declare const StyledAppAnnouncementContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
24
25
  export declare const StyledAppAnnouncement: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, Pick<AppAnnouncementProps, "image" | "fitToParent">>> & string;
25
26
  declare const AppAnnouncement: ForwardRefForwardPropsComponent<AppAnnouncementProps>;
26
27
  export default AppAnnouncement;
@@ -1 +1 @@
1
- {"version":3,"file":"AppAnnouncement.d.ts","sourceRoot":"","sources":["../../../src/components/AppAnnouncement/AppAnnouncement.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,GAAG,EAAE,MAAM,OAAO,CAAC;AAelD,OAAO,KAAK,EACV,SAAS,EACT,+BAA+B,EAC/B,cAAc,EACf,MAAM,yBAAyB,CAAC;AAKjC,MAAM,WAAW,oBAAqB,SAAQ,SAAS,EAAE,cAAc;IACrE,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAOD,eAAO,MAAM,qBAAqB,kRA4FhC,CAAC;AAIH,QAAA,MAAM,eAAe,EAAE,+BAA+B,CAAC,oBAAoB,CAsD1E,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"AppAnnouncement.d.ts","sourceRoot":"","sources":["../../../src/components/AppAnnouncement/AppAnnouncement.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,GAAG,EAAE,MAAM,OAAO,CAAC;AAelD,OAAO,KAAK,EACV,SAAS,EACT,+BAA+B,EAC/B,cAAc,EACf,MAAM,yBAAyB,CAAC;AAKjC,MAAM,WAAW,oBAAqB,SAAQ,SAAS,EAAE,cAAc;IACrE,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;CACxB;AAOD,eAAO,MAAM,4BAA4B,6NAiCvC,CAAC;AAIH,eAAO,MAAM,qBAAqB,kRA4EhC,CAAC;AAIH,QAAA,MAAM,eAAe,EAAE,+BAA+B,CAAC,oBAAoB,CAwD1E,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -8,6 +8,36 @@ const StyledDismissButton = styled.button `
8
8
  font-size: 1.25rem;
9
9
  border: none;
10
10
  `;
11
+ export const StyledAppAnnouncementContent = styled.div(props => {
12
+ const { theme: { base: { spacing } } } = props;
13
+ return css `
14
+ max-height: 12rem;
15
+ overflow-y: auto;
16
+ margin-block-start: calc(1.5 * ${spacing});
17
+ margin-inline: calc(-2 * ${spacing});
18
+ padding-inline: calc(2 * ${spacing});
19
+
20
+ p,
21
+ ul {
22
+ line-height: 1.4;
23
+ }
24
+
25
+ ul {
26
+ padding-inline-start: calc(2 * ${spacing});
27
+ }
28
+
29
+ p + ul {
30
+ margin-block-start: calc(1.5 * ${spacing});
31
+ }
32
+
33
+ li {
34
+ &:not(:last-child) {
35
+ margin-block-end: ${spacing};
36
+ }
37
+ }
38
+ `;
39
+ });
40
+ StyledAppAnnouncementContent.defaultProps = defaultThemeProp;
11
41
  export const StyledAppAnnouncement = styled.article(props => {
12
42
  const { theme: { base: { shadow, spacing }, components: { card: { 'border-radius': borderRadius }, announcement: { background, 'foreground-color': foregroundColor } } }, image } = props;
13
43
  const { end } = useDirection();
@@ -60,22 +90,6 @@ export const StyledAppAnnouncement = styled.article(props => {
60
90
  position: relative;
61
91
  z-index: 2;
62
92
 
63
- p,
64
- ul {
65
- padding-block-start: calc(1.5 * ${spacing});
66
- line-height: 1.4;
67
- }
68
-
69
- ul {
70
- padding-inline-start: calc(2 * ${spacing});
71
- }
72
-
73
- li {
74
- &:not(:last-child) {
75
- margin-block-end: ${spacing};
76
- }
77
- }
78
-
79
93
  ${StyledButton} {
80
94
  margin-top: calc(2 * ${spacing});
81
95
  white-space: normal;
@@ -92,11 +106,11 @@ StyledAppAnnouncement.defaultProps = defaultThemeProp;
92
106
  const AppAnnouncement = forwardRef(function AppAnnouncement(props, ref) {
93
107
  const t = useI18n();
94
108
  const { heading, description, details, whatsNewLink, whatsNewText = t('app_announcement_whats_new_button_label'), image, onDismiss, ...restProps } = props;
95
- return (_jsxs(StyledAppAnnouncement, { ...restProps, ref: ref, image: image, children: [onDismiss && (_jsx(Button, { as: StyledDismissButton, variant: 'simple', icon: true, onClick: onDismiss, "aria-label": t('app_announcement_dismiss_button_label_a11y'), children: _jsx(Icon, { name: 'times' }) })), _jsx(Text, { variant: 'h2', children: heading || t('app_announcement_details_list_header') }), _jsxs("div", { children: [description && _jsx(HTML, { as: 'p', content: description }), !!details?.length && (_jsx("ul", { children: details.map((item, index) => {
96
- return (
97
- // eslint-disable-next-line react/no-array-index-key
98
- _jsx("li", { children: _jsx(HTML, { content: item }) }, index));
99
- }) })), whatsNewLink && (_jsx(Button, { variant: 'secondary', href: whatsNewLink, target: '_blank', children: whatsNewText }))] })] }));
109
+ return (_jsxs(StyledAppAnnouncement, { ...restProps, ref: ref, image: image, children: [onDismiss && (_jsx(Button, { as: StyledDismissButton, variant: 'simple', icon: true, onClick: onDismiss, "aria-label": t('app_announcement_dismiss_button_label_a11y'), children: _jsx(Icon, { name: 'times' }) })), _jsx(Text, { variant: 'h2', children: heading || t('app_announcement_details_list_header') }), _jsxs("div", { children: [_jsxs(StyledAppAnnouncementContent, { children: [description && _jsx(HTML, { as: 'p', content: description }), !!details?.length && (_jsx("ul", { children: details.map((item, index) => {
110
+ return (
111
+ // eslint-disable-next-line react/no-array-index-key
112
+ _jsx("li", { children: _jsx(HTML, { content: item }) }, index));
113
+ }) }))] }), whatsNewLink && (_jsx(Button, { variant: 'secondary', href: whatsNewLink, target: '_blank', children: whatsNewText }))] })] }));
100
114
  });
101
115
  export default AppAnnouncement;
102
116
  //# sourceMappingURL=AppAnnouncement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppAnnouncement.js","sourceRoot":"","sources":["../../../src/components/AppAnnouncement/AppAnnouncement.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef } from 'react';\nimport type { PropsWithoutRef, Ref } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n Button,\n StyledButton,\n Text,\n Icon,\n registerIcon,\n useI18n,\n defaultThemeProp,\n useDirection,\n calculateForegroundColor,\n HTML\n} from '@pega/cosmos-react-core';\nimport type {\n BaseProps,\n ForwardRefForwardPropsComponent,\n NoChildrenProp\n} from '@pega/cosmos-react-core';\nimport * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';\n\nregisterIcon(timesIcon);\n\nexport interface AppAnnouncementProps extends BaseProps, NoChildrenProp {\n /** Heading text for the announcement. */\n heading?: string;\n /** Description text for the announcement. */\n description?: string;\n /** Announcement details to be displayed in form of bulleted list. */\n details?: string[];\n /** Url to open with What's new link. */\n whatsNewLink?: string;\n /** Content to populate the announcement button. */\n whatsNewText?: string;\n /** An image source for the decorative background. */\n image?: string;\n /**\n * Whether to fit AppAnnouncement widget in the parent element.\n */\n fitToParent?: boolean;\n /** Callback when user dismisses the announcements. */\n onDismiss?: () => void;\n ref?: Ref<HTMLElement>;\n}\n\nconst StyledDismissButton = styled.button`\n font-size: 1.25rem;\n border: none;\n`;\n\nexport const StyledAppAnnouncement = styled.article<\n Pick<AppAnnouncementProps, 'image' | 'fitToParent'>\n>(props => {\n const {\n theme: {\n base: { shadow, spacing },\n components: {\n card: { 'border-radius': borderRadius },\n announcement: { background, 'foreground-color': foregroundColor }\n }\n },\n image\n } = props;\n\n const { end } = useDirection();\n const color = calculateForegroundColor(background, foregroundColor);\n\n return css`\n padding: calc(2 * ${spacing});\n background: ${background};\n border-radius: ${borderRadius};\n color: ${color};\n position: relative;\n\n ${props.fitToParent && 'block-size: 100%;'};\n\n &::after {\n background: url('${image}') no-repeat;\n background-position: ${end} bottom;\n background-size: contain;\n background-origin: content-box;\n opacity: 0.2;\n content: '';\n display: block;\n position: absolute;\n width: 50%;\n height: 100%;\n inset-inline-end: 0;\n bottom: 0;\n padding: calc(2 * ${spacing});\n }\n\n h2 {\n position: relative;\n z-index: 2;\n }\n\n ${StyledDismissButton} {\n position: absolute;\n top: 0.75rem;\n inset-inline-end: 0.75rem;\n color: inherit;\n z-index: 3;\n &:enabled:hover {\n background: #ffffff19;\n }\n &:enabled:focus {\n box-shadow: ${shadow.focus};\n }\n }\n\n > div {\n position: relative;\n z-index: 2;\n\n p,\n ul {\n padding-block-start: calc(1.5 * ${spacing});\n line-height: 1.4;\n }\n\n ul {\n padding-inline-start: calc(2 * ${spacing});\n }\n\n li {\n &:not(:last-child) {\n margin-block-end: ${spacing};\n }\n }\n\n ${StyledButton} {\n margin-top: calc(2 * ${spacing});\n white-space: normal;\n\n &:enabled:focus,\n &:not([disabled]):focus {\n box-shadow: ${shadow.focus};\n }\n }\n }\n `;\n});\n\nStyledAppAnnouncement.defaultProps = defaultThemeProp;\n\nconst AppAnnouncement: ForwardRefForwardPropsComponent<AppAnnouncementProps> = forwardRef(\n function AppAnnouncement(\n props: PropsWithoutRef<AppAnnouncementProps>,\n ref: AppAnnouncementProps['ref']\n ) {\n const t = useI18n();\n const {\n heading,\n description,\n details,\n whatsNewLink,\n whatsNewText = t('app_announcement_whats_new_button_label'),\n image,\n onDismiss,\n ...restProps\n } = props;\n\n return (\n <StyledAppAnnouncement {...restProps} ref={ref} image={image}>\n {onDismiss && (\n <Button\n as={StyledDismissButton}\n variant='simple'\n icon\n onClick={onDismiss}\n aria-label={t('app_announcement_dismiss_button_label_a11y')}\n >\n <Icon name='times' />\n </Button>\n )}\n <Text variant='h2'>{heading || t('app_announcement_details_list_header')}</Text>\n <div>\n {description && <HTML as='p' content={description} />}\n {!!details?.length && (\n <ul>\n {details.map((item, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <li key={index}>\n <HTML content={item} />\n </li>\n );\n })}\n </ul>\n )}\n {whatsNewLink && (\n <Button variant='secondary' href={whatsNewLink} target='_blank'>\n {whatsNewText}\n </Button>\n )}\n </div>\n </StyledAppAnnouncement>\n );\n }\n);\n\nexport default AppAnnouncement;\n"]}
1
+ {"version":3,"file":"AppAnnouncement.js","sourceRoot":"","sources":["../../../src/components/AppAnnouncement/AppAnnouncement.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef } from 'react';\nimport type { PropsWithoutRef, Ref } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n Button,\n StyledButton,\n Text,\n Icon,\n registerIcon,\n useI18n,\n defaultThemeProp,\n useDirection,\n calculateForegroundColor,\n HTML\n} from '@pega/cosmos-react-core';\nimport type {\n BaseProps,\n ForwardRefForwardPropsComponent,\n NoChildrenProp\n} from '@pega/cosmos-react-core';\nimport * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';\n\nregisterIcon(timesIcon);\n\nexport interface AppAnnouncementProps extends BaseProps, NoChildrenProp {\n /** Heading text for the announcement. */\n heading?: string;\n /** Description text for the announcement. */\n description?: string;\n /** Announcement details to be displayed in form of bulleted list. */\n details?: string[];\n /** Url to open with What's new link. */\n whatsNewLink?: string;\n /** Content to populate the announcement button. */\n whatsNewText?: string;\n /** An image source for the decorative background. */\n image?: string;\n /**\n * Whether to fit AppAnnouncement widget in the parent element.\n */\n fitToParent?: boolean;\n /** Callback when user dismisses the announcements. */\n onDismiss?: () => void;\n ref?: Ref<HTMLElement>;\n}\n\nconst StyledDismissButton = styled.button`\n font-size: 1.25rem;\n border: none;\n`;\n\nexport const StyledAppAnnouncementContent = styled.div(props => {\n const {\n theme: {\n base: { spacing }\n }\n } = props;\n\n return css`\n max-height: 12rem;\n overflow-y: auto;\n margin-block-start: calc(1.5 * ${spacing});\n margin-inline: calc(-2 * ${spacing});\n padding-inline: calc(2 * ${spacing});\n\n p,\n ul {\n line-height: 1.4;\n }\n\n ul {\n padding-inline-start: calc(2 * ${spacing});\n }\n\n p + ul {\n margin-block-start: calc(1.5 * ${spacing});\n }\n\n li {\n &:not(:last-child) {\n margin-block-end: ${spacing};\n }\n }\n `;\n});\n\nStyledAppAnnouncementContent.defaultProps = defaultThemeProp;\n\nexport const StyledAppAnnouncement = styled.article<\n Pick<AppAnnouncementProps, 'image' | 'fitToParent'>\n>(props => {\n const {\n theme: {\n base: { shadow, spacing },\n components: {\n card: { 'border-radius': borderRadius },\n announcement: { background, 'foreground-color': foregroundColor }\n }\n },\n image\n } = props;\n\n const { end } = useDirection();\n const color = calculateForegroundColor(background, foregroundColor);\n\n return css`\n padding: calc(2 * ${spacing});\n background: ${background};\n border-radius: ${borderRadius};\n color: ${color};\n position: relative;\n\n ${props.fitToParent && 'block-size: 100%;'};\n\n &::after {\n background: url('${image}') no-repeat;\n background-position: ${end} bottom;\n background-size: contain;\n background-origin: content-box;\n opacity: 0.2;\n content: '';\n display: block;\n position: absolute;\n width: 50%;\n height: 100%;\n inset-inline-end: 0;\n bottom: 0;\n padding: calc(2 * ${spacing});\n }\n\n h2 {\n position: relative;\n z-index: 2;\n }\n\n ${StyledDismissButton} {\n position: absolute;\n top: 0.75rem;\n inset-inline-end: 0.75rem;\n color: inherit;\n z-index: 3;\n &:enabled:hover {\n background: #ffffff19;\n }\n &:enabled:focus {\n box-shadow: ${shadow.focus};\n }\n }\n\n > div {\n position: relative;\n z-index: 2;\n\n ${StyledButton} {\n margin-top: calc(2 * ${spacing});\n white-space: normal;\n\n &:enabled:focus,\n &:not([disabled]):focus {\n box-shadow: ${shadow.focus};\n }\n }\n }\n `;\n});\n\nStyledAppAnnouncement.defaultProps = defaultThemeProp;\n\nconst AppAnnouncement: ForwardRefForwardPropsComponent<AppAnnouncementProps> = forwardRef(\n function AppAnnouncement(\n props: PropsWithoutRef<AppAnnouncementProps>,\n ref: AppAnnouncementProps['ref']\n ) {\n const t = useI18n();\n const {\n heading,\n description,\n details,\n whatsNewLink,\n whatsNewText = t('app_announcement_whats_new_button_label'),\n image,\n onDismiss,\n ...restProps\n } = props;\n\n return (\n <StyledAppAnnouncement {...restProps} ref={ref} image={image}>\n {onDismiss && (\n <Button\n as={StyledDismissButton}\n variant='simple'\n icon\n onClick={onDismiss}\n aria-label={t('app_announcement_dismiss_button_label_a11y')}\n >\n <Icon name='times' />\n </Button>\n )}\n <Text variant='h2'>{heading || t('app_announcement_details_list_header')}</Text>\n <div>\n <StyledAppAnnouncementContent>\n {description && <HTML as='p' content={description} />}\n {!!details?.length && (\n <ul>\n {details.map((item, index) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <li key={index}>\n <HTML content={item} />\n </li>\n );\n })}\n </ul>\n )}\n </StyledAppAnnouncementContent>\n {whatsNewLink && (\n <Button variant='secondary' href={whatsNewLink} target='_blank'>\n {whatsNewText}\n </Button>\n )}\n </div>\n </StyledAppAnnouncement>\n );\n }\n);\n\nexport default AppAnnouncement;\n"]}
@@ -4,8 +4,8 @@ import type { TaskItemProps } from '../Tasks/TaskList';
4
4
  export interface AssignmentsProps extends NoChildrenProp {
5
5
  /** An array of TaskItemProps to generate the list. */
6
6
  items: TaskItemProps[];
7
- /** Integer representing the total count of tasks. */
8
- count: number;
7
+ /** Optional total count of tasks. When omitted, the count badge is hidden. */
8
+ count?: number;
9
9
  /**
10
10
  * Controls the collapsed state of the assignments list.
11
11
  * @default false
@@ -1 +1 @@
1
- {"version":3,"file":"Assignments.d.ts","sourceRoot":"","sources":["../../../src/components/Assignments/Assignments.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAchC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,sDAAsD;IACtD,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,YAAY,GAAG,gBAAgB,CA2DpD,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"Assignments.d.ts","sourceRoot":"","sources":["../../../src/components/Assignments/Assignments.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAchC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,sDAAsD;IACtD,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,YAAY,GAAG,gBAAgB,CA2DpD,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -11,7 +11,7 @@ const Assignments = ({ items, count, collapsed, onToggleCollapsed, ...restProps
11
11
  return openItem ? _jsx(TaskItem, { ...openItem, headingTag: 'h2' }) : _jsx(TaskList, { items: items });
12
12
  }, [items, openItem]);
13
13
  const tasks = _jsx(CardContent, { children: items.length > 0 ? TaskItems : _jsx(EmptyState, {}) });
14
- const header = (_jsxs(Flex, { container: { alignItems: 'center', gap: 1 }, children: [typeof collapsed === 'boolean' && _jsx(Icon, { name: 'caret-right' }), _jsx(Text, { variant: 'h2', children: t('assignments') }), _jsx(Count, { children: count })] }));
14
+ const header = (_jsxs(Flex, { container: { alignItems: 'center', gap: 1 }, children: [typeof collapsed === 'boolean' && _jsx(Icon, { name: 'caret-right' }), _jsx(Text, { variant: 'h2', children: t('assignments') }), count !== undefined && _jsx(Count, { children: count })] }));
15
15
  return (_jsxs(StyledAssignments, { ...restProps, openItem: !!openItem, "data-app-region": true, "data-focusable-form-container": '', children: [!openItem && (_jsxs(CardHeader, { container: { justify: 'start', alignItems: 'center', gap: 1 }, children: [typeof collapsed === 'boolean' && onToggleCollapsed && (_jsx(StyledExpandButton, { type: 'button', variant: 'text', onClick: () => {
16
16
  onToggleCollapsed();
17
17
  }, "aria-controls": assignmentsId, "aria-expanded": !collapsed, "aria-label": t('assignments'), children: header })), collapsed === undefined && header] })), typeof collapsed === 'boolean' && onToggleCollapsed && !openItem ? (_jsx(ExpandCollapse, { collapsed: collapsed, children: tasks })) : (tasks)] }));
@@ -1 +1 @@
1
- {"version":3,"file":"Assignments.js","sourceRoot":"","sources":["../../../src/components/Assignments/Assignments.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EACL,UAAU,EACV,OAAO,EACP,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,MAAM,EACN,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAGjC,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAkB7E,MAAM,WAAW,GAAwC,CAAC,EACxD,KAAK,EACL,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,GAAG,SAAS,EACb,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;IAE/B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAC,QAAQ,OAAK,QAAQ,EAAE,UAAU,EAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IAC5F,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtB,MAAM,KAAK,GAAG,KAAC,WAAW,cAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAC,UAAU,KAAG,GAAe,CAAC;IAEzF,MAAM,MAAM,GAAG,CACb,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aAC9C,OAAO,SAAS,KAAK,SAAS,IAAI,KAAC,IAAI,IAAC,IAAI,EAAC,aAAa,GAAG,EAC9D,KAAC,IAAI,IAAC,OAAO,EAAC,IAAI,YAAE,CAAC,CAAC,aAAa,CAAC,GAAQ,EAC5C,KAAC,KAAK,cAAE,KAAK,GAAS,IACjB,CACR,CAAC;IAEF,OAAO,CACL,MAAC,iBAAiB,OACZ,SAAS,EACb,QAAQ,EAAE,CAAC,CAAC,QAAQ,4DAEU,EAAE,aAE/B,CAAC,QAAQ,IAAI,CACZ,MAAC,UAAU,IAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aACtE,OAAO,SAAS,KAAK,SAAS,IAAI,iBAAiB,IAAI,CACtD,KAAC,kBAAkB,IACjB,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,MAAM,EACd,OAAO,EAAE,GAAG,EAAE;4BACZ,iBAAiB,EAAE,CAAC;wBACtB,CAAC,mBACc,aAAa,mBACb,CAAC,SAAS,gBACb,CAAC,CAAC,aAAa,CAAC,YAE3B,MAAM,GACY,CACtB,EACA,SAAS,KAAK,SAAS,IAAI,MAAM,IACvB,CACd,EAEA,OAAO,SAAS,KAAK,SAAS,IAAI,iBAAiB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAClE,KAAC,cAAc,IAAC,SAAS,EAAE,SAAS,YAAG,KAAK,GAAkB,CAC/D,CAAC,CAAC,CAAC,CACF,KAAK,CACN,IACiB,CACrB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { useMemo } from 'react';\nimport type { FC } from 'react';\n\nimport {\n CardHeader,\n useI18n,\n EmptyState,\n ExpandCollapse,\n Icon,\n Text,\n Count,\n Flex,\n useUID,\n CardContent\n} from '@pega/cosmos-react-core';\nimport type { ForwardProps, NoChildrenProp } from '@pega/cosmos-react-core';\n\nimport TaskList, { TaskItem } from '../Tasks/TaskList';\nimport type { TaskItemProps } from '../Tasks/TaskList';\n\nimport { StyledAssignments, StyledExpandButton } from './Assignments.styles';\n\nexport interface AssignmentsProps extends NoChildrenProp {\n /** An array of TaskItemProps to generate the list. */\n items: TaskItemProps[];\n /** Integer representing the total count of tasks. */\n count: number;\n /**\n * Controls the collapsed state of the assignments list.\n * @default false\n */\n collapsed?: boolean;\n /**\n * Call when the user clicks the collapsed element.\n */\n onToggleCollapsed?: () => void;\n}\n\nconst Assignments: FC<ForwardProps & AssignmentsProps> = ({\n items,\n count,\n collapsed,\n onToggleCollapsed,\n ...restProps\n}) => {\n const openItem = items.find(item => item.content);\n const t = useI18n();\n const assignmentsId = useUID();\n\n const TaskItems = useMemo(() => {\n return openItem ? <TaskItem {...openItem} headingTag='h2' /> : <TaskList items={items} />;\n }, [items, openItem]);\n\n const tasks = <CardContent>{items.length > 0 ? TaskItems : <EmptyState />}</CardContent>;\n\n const header = (\n <Flex container={{ alignItems: 'center', gap: 1 }}>\n {typeof collapsed === 'boolean' && <Icon name='caret-right' />}\n <Text variant='h2'>{t('assignments')}</Text>\n <Count>{count}</Count>\n </Flex>\n );\n\n return (\n <StyledAssignments\n {...restProps}\n openItem={!!openItem}\n data-app-region\n data-focusable-form-container=''\n >\n {!openItem && (\n <CardHeader container={{ justify: 'start', alignItems: 'center', gap: 1 }}>\n {typeof collapsed === 'boolean' && onToggleCollapsed && (\n <StyledExpandButton\n type='button'\n variant='text'\n onClick={() => {\n onToggleCollapsed();\n }}\n aria-controls={assignmentsId}\n aria-expanded={!collapsed}\n aria-label={t('assignments')}\n >\n {header}\n </StyledExpandButton>\n )}\n {collapsed === undefined && header}\n </CardHeader>\n )}\n\n {typeof collapsed === 'boolean' && onToggleCollapsed && !openItem ? (\n <ExpandCollapse collapsed={collapsed}>{tasks}</ExpandCollapse>\n ) : (\n tasks\n )}\n </StyledAssignments>\n );\n};\n\nexport default Assignments;\n"]}
1
+ {"version":3,"file":"Assignments.js","sourceRoot":"","sources":["../../../src/components/Assignments/Assignments.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EACL,UAAU,EACV,OAAO,EACP,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,MAAM,EACN,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAGjC,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAkB7E,MAAM,WAAW,GAAwC,CAAC,EACxD,KAAK,EACL,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,GAAG,SAAS,EACb,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;IAE/B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAC,QAAQ,OAAK,QAAQ,EAAE,UAAU,EAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IAC5F,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtB,MAAM,KAAK,GAAG,KAAC,WAAW,cAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAC,UAAU,KAAG,GAAe,CAAC;IAEzF,MAAM,MAAM,GAAG,CACb,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aAC9C,OAAO,SAAS,KAAK,SAAS,IAAI,KAAC,IAAI,IAAC,IAAI,EAAC,aAAa,GAAG,EAC9D,KAAC,IAAI,IAAC,OAAO,EAAC,IAAI,YAAE,CAAC,CAAC,aAAa,CAAC,GAAQ,EAC3C,KAAK,KAAK,SAAS,IAAI,KAAC,KAAK,cAAE,KAAK,GAAS,IACzC,CACR,CAAC;IAEF,OAAO,CACL,MAAC,iBAAiB,OACZ,SAAS,EACb,QAAQ,EAAE,CAAC,CAAC,QAAQ,4DAEU,EAAE,aAE/B,CAAC,QAAQ,IAAI,CACZ,MAAC,UAAU,IAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aACtE,OAAO,SAAS,KAAK,SAAS,IAAI,iBAAiB,IAAI,CACtD,KAAC,kBAAkB,IACjB,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,MAAM,EACd,OAAO,EAAE,GAAG,EAAE;4BACZ,iBAAiB,EAAE,CAAC;wBACtB,CAAC,mBACc,aAAa,mBACb,CAAC,SAAS,gBACb,CAAC,CAAC,aAAa,CAAC,YAE3B,MAAM,GACY,CACtB,EACA,SAAS,KAAK,SAAS,IAAI,MAAM,IACvB,CACd,EAEA,OAAO,SAAS,KAAK,SAAS,IAAI,iBAAiB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAClE,KAAC,cAAc,IAAC,SAAS,EAAE,SAAS,YAAG,KAAK,GAAkB,CAC/D,CAAC,CAAC,CAAC,CACF,KAAK,CACN,IACiB,CACrB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import { useMemo } from 'react';\nimport type { FC } from 'react';\n\nimport {\n CardHeader,\n useI18n,\n EmptyState,\n ExpandCollapse,\n Icon,\n Text,\n Count,\n Flex,\n useUID,\n CardContent\n} from '@pega/cosmos-react-core';\nimport type { ForwardProps, NoChildrenProp } from '@pega/cosmos-react-core';\n\nimport TaskList, { TaskItem } from '../Tasks/TaskList';\nimport type { TaskItemProps } from '../Tasks/TaskList';\n\nimport { StyledAssignments, StyledExpandButton } from './Assignments.styles';\n\nexport interface AssignmentsProps extends NoChildrenProp {\n /** An array of TaskItemProps to generate the list. */\n items: TaskItemProps[];\n /** Optional total count of tasks. When omitted, the count badge is hidden. */\n count?: number;\n /**\n * Controls the collapsed state of the assignments list.\n * @default false\n */\n collapsed?: boolean;\n /**\n * Call when the user clicks the collapsed element.\n */\n onToggleCollapsed?: () => void;\n}\n\nconst Assignments: FC<ForwardProps & AssignmentsProps> = ({\n items,\n count,\n collapsed,\n onToggleCollapsed,\n ...restProps\n}) => {\n const openItem = items.find(item => item.content);\n const t = useI18n();\n const assignmentsId = useUID();\n\n const TaskItems = useMemo(() => {\n return openItem ? <TaskItem {...openItem} headingTag='h2' /> : <TaskList items={items} />;\n }, [items, openItem]);\n\n const tasks = <CardContent>{items.length > 0 ? TaskItems : <EmptyState />}</CardContent>;\n\n const header = (\n <Flex container={{ alignItems: 'center', gap: 1 }}>\n {typeof collapsed === 'boolean' && <Icon name='caret-right' />}\n <Text variant='h2'>{t('assignments')}</Text>\n {count !== undefined && <Count>{count}</Count>}\n </Flex>\n );\n\n return (\n <StyledAssignments\n {...restProps}\n openItem={!!openItem}\n data-app-region\n data-focusable-form-container=''\n >\n {!openItem && (\n <CardHeader container={{ justify: 'start', alignItems: 'center', gap: 1 }}>\n {typeof collapsed === 'boolean' && onToggleCollapsed && (\n <StyledExpandButton\n type='button'\n variant='text'\n onClick={() => {\n onToggleCollapsed();\n }}\n aria-controls={assignmentsId}\n aria-expanded={!collapsed}\n aria-label={t('assignments')}\n >\n {header}\n </StyledExpandButton>\n )}\n {collapsed === undefined && header}\n </CardHeader>\n )}\n\n {typeof collapsed === 'boolean' && onToggleCollapsed && !openItem ? (\n <ExpandCollapse collapsed={collapsed}>{tasks}</ExpandCollapse>\n ) : (\n tasks\n )}\n </StyledAssignments>\n );\n};\n\nexport default Assignments;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Summary.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseView/CaseHeader/Summary.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AA2DvC,QAAA,MAAM,OAAO,GAAI,gBAAgB;IAAE,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAA;CAAE,4CAmQzE,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Summary.d.ts","sourceRoot":"","sources":["../../../../src/components/CaseView/CaseHeader/Summary.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AA2DvC,QAAA,MAAM,OAAO,GAAI,gBAAgB;IAAE,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAA;CAAE,4CA0QzE,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useRef, useState } from 'react';
2
+ import { useEffect, useLayoutEffect, useRef, useState } from 'react';
3
3
  import { Flex, getEdge, registerIcon, StyledStackedFieldValue, StyledLabel, StyledFieldName, useDirection, useChToPxConversionFactor, useTestIds, withTestIds, NoValue } from '@pega/cosmos-react-core';
4
4
  import { getFieldValueItemTestIds } from '@pega/cosmos-react-core/lib/components/FieldValueList/FieldValueList.test-ids';
5
5
  import * as pencilIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/pencil.icon';
@@ -166,6 +166,13 @@ const Summary = ({ siblingRef }) => {
166
166
  useEffect(() => {
167
167
  evaluateSummaryDisplay();
168
168
  }, [items]);
169
+ // If primary or secondary fields change, reset state
170
+ useLayoutEffect(() => {
171
+ setTruncatedIndices([]);
172
+ setDisplayCount(items.length);
173
+ priorTrailingEdgeStack.current = [];
174
+ priorAvailableSpace.current = null;
175
+ }, [summaryFields.primary, summaryFields.secondary]);
169
176
  // Overflow resize observer
170
177
  useEffect(() => {
171
178
  const resizeObserver = new ResizeObserver(evaluateSummaryDisplay);
@@ -1 +1 @@
1
- {"version":3,"file":"Summary.js","sourceRoot":"","sources":["../../../../src/components/CaseView/CaseHeader/Summary.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { RefObject } from 'react';\n\nimport {\n Flex,\n getEdge,\n registerIcon,\n StyledStackedFieldValue,\n StyledLabel,\n StyledFieldName,\n useDirection,\n useChToPxConversionFactor,\n useTestIds,\n withTestIds,\n NoValue,\n type TestIdProp\n} from '@pega/cosmos-react-core';\nimport { getFieldValueItemTestIds } from '@pega/cosmos-react-core/lib/components/FieldValueList/FieldValueList.test-ids';\nimport * as pencilIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/pencil.icon';\nimport * as moreIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/more.icon';\n\nimport {\n StyledHeaderSummary,\n StyledHeaderSummaryValue,\n StyledHeaderSummaryBlock\n} from '../CaseView.styles';\nimport { useCaseViewContext } from '../CaseView.context';\nimport type { SummaryField } from '../CaseView.types';\n\nregisterIcon(pencilIcon, moreIcon);\n\nconst Field = withTestIds(\n ({\n testId,\n item,\n primary,\n truncate\n }: {\n item: SummaryField;\n primary: boolean;\n truncate: boolean;\n } & TestIdProp) => {\n const { name, value, simpleValue } = item;\n const displayValue = simpleValue ?? value ?? <NoValue />;\n const testIds = useTestIds(testId, getFieldValueItemTestIds);\n\n return (\n <StyledStackedFieldValue data-testid={testIds.root} data-editable-anchor>\n <StyledLabel as={StyledFieldName} data-testid={testIds.name}>\n {name}\n </StyledLabel>\n <StyledHeaderSummaryValue bold={primary} truncate={truncate} data-testid={testIds.value}>\n {displayValue}\n </StyledHeaderSummaryValue>\n </StyledStackedFieldValue>\n );\n },\n getFieldValueItemTestIds\n);\n\nconst Summary = ({ siblingRef }: { siblingRef: RefObject<HTMLDivElement> }) => {\n const { ltr } = useDirection();\n const { summaryFields } = useCaseViewContext();\n const chToPxConversionFactor = useChToPxConversionFactor();\n\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDListElement>(null);\n\n const primaryItems = summaryFields?.primary ?? [];\n const secondaryItems = summaryFields?.secondary ?? [];\n const items = [...primaryItems, ...secondaryItems];\n\n const [displayCount, setDisplayCount] = useState(items.length);\n const [truncatedIndices, setTruncatedIndices] = useState<number[] | undefined>(\n items.map((_, i) => i)\n );\n\n const priorTrailingEdgeStack = useRef<number[]>([]);\n const priorAvailableSpace = useRef<number | null>(null);\n\n const evalItemAddition = ({\n nextSiblingLeadingEdge\n }: {\n nextSiblingLeadingEdge: number;\n }): {\n indicesToTruncate: number[];\n nextDisplayCount: number;\n } => {\n const indicesToTruncate: number[] = truncatedIndices ? [...truncatedIndices] : [];\n let nextDisplayCount = displayCount;\n\n const reversedTrailingEdgeStack = [...priorTrailingEdgeStack.current].reverse();\n for (let i = 0; i < reversedTrailingEdgeStack.length; i += 1) {\n const priorEdge = reversedTrailingEdgeStack[i];\n\n const shouldRender = ltr\n ? priorEdge < nextSiblingLeadingEdge\n : priorEdge > nextSiblingLeadingEdge;\n\n if (shouldRender) {\n priorTrailingEdgeStack.current.pop();\n\n if (!indicesToTruncate.includes(nextDisplayCount)) {\n indicesToTruncate.push(nextDisplayCount);\n }\n\n nextDisplayCount += 1;\n } else {\n break;\n }\n }\n\n return { indicesToTruncate, nextDisplayCount };\n };\n\n const evalTruncationReduction = ({\n listChildren,\n availableSpace\n }: {\n listChildren: Element[];\n availableSpace: number;\n }): {\n indicesToTruncate: number[];\n } => {\n const indicesToTruncate: number[] = [];\n let hasAvailableSpace = availableSpace;\n\n listChildren.forEach((item, index) => {\n const valueEl = item.lastChild as HTMLElement;\n const truncatedSpace = Math.floor(valueEl.scrollWidth - valueEl.offsetWidth);\n const shouldTruncate = truncatedSpace === 0 ? false : hasAvailableSpace - truncatedSpace <= 0;\n\n if (shouldTruncate) {\n if (!truncatedIndices?.includes(index)) {\n hasAvailableSpace += truncatedSpace;\n }\n\n indicesToTruncate.push(index);\n } else if (truncatedIndices?.includes(index)) {\n hasAvailableSpace -= truncatedSpace;\n }\n });\n\n return { indicesToTruncate };\n };\n\n const evalTruncationIncrease = ({\n listChildren,\n availableSpace\n }: {\n listChildren: Element[];\n availableSpace: number;\n }): {\n indicesToTruncate: number[];\n availableSpace: number;\n } => {\n const indicesToTruncate: number[] = [];\n const lastIndex = listChildren.length - 1;\n let hasAvailableSpace = availableSpace;\n\n [...listChildren].reverse().forEach((item, index) => {\n if (truncatedIndices?.includes(lastIndex - index)) {\n indicesToTruncate.push(lastIndex - index);\n } else if (hasAvailableSpace < 0) {\n const truncatedElMaxWidth = 20 * chToPxConversionFactor;\n const valueEl = item.lastChild as HTMLElement;\n const spaceToTruncate = Math.max(Math.floor(valueEl.offsetWidth - truncatedElMaxWidth), 0);\n\n if (spaceToTruncate) {\n indicesToTruncate.push(lastIndex - index);\n hasAvailableSpace += spaceToTruncate;\n }\n }\n });\n\n return { indicesToTruncate, availableSpace: hasAvailableSpace };\n };\n\n const evalItemRemoval = ({\n listChildren,\n availableSpace,\n nextSiblingLeadingEdge\n }: {\n listChildren: Element[];\n availableSpace: number;\n nextSiblingLeadingEdge: number;\n }): { displayCount: number } => {\n let nextDisplayCount = displayCount;\n let hasAvailableSpace = availableSpace;\n let lastChildIndex = listChildren.length - 1;\n\n do {\n const itemTrailingEdge = getEdge({\n el: listChildren[lastChildIndex],\n side: 'trailing',\n ltr\n });\n hasAvailableSpace = Math.floor(\n ltr ? nextSiblingLeadingEdge - itemTrailingEdge : itemTrailingEdge - nextSiblingLeadingEdge\n );\n\n if (hasAvailableSpace < 0) {\n priorTrailingEdgeStack.current = [...priorTrailingEdgeStack.current, itemTrailingEdge];\n\n nextDisplayCount -= 1;\n lastChildIndex -= 1;\n }\n } while (hasAvailableSpace < 0 && lastChildIndex > -1);\n\n return { displayCount: nextDisplayCount };\n };\n\n const evaluateSummaryDisplay = () => {\n const containerEl = containerRef.current;\n if (!containerEl) return;\n\n const listChildren = Array.from(listRef.current?.children ?? []);\n const lastSummaryItem = listChildren.length ? listChildren[listChildren.length - 1] : undefined;\n const nextSibling = siblingRef?.current ?? document.body;\n const nextSiblingLeadingEdge = getEdge({\n el: nextSibling,\n side: 'leading',\n ltr\n });\n const testEdge = lastSummaryItem\n ? getEdge({ el: lastSummaryItem, side: 'trailing', ltr })\n : getEdge({ el: containerEl, side: 'leading', ltr });\n let availableSpace = Math.floor(\n ltr ? nextSiblingLeadingEdge - testEdge : testEdge - nextSiblingLeadingEdge\n );\n if (availableSpace === priorAvailableSpace.current) return;\n\n priorAvailableSpace.current = availableSpace;\n\n let indicesToTruncate: number[] | undefined;\n let nextDisplayCount = displayCount;\n\n if (availableSpace >= 0) {\n if (displayCount !== items.length) {\n const additionsConfig = evalItemAddition({ nextSiblingLeadingEdge });\n\n indicesToTruncate = additionsConfig.indicesToTruncate;\n nextDisplayCount = additionsConfig.nextDisplayCount;\n } else if (truncatedIndices?.length) {\n const truncationConfig = evalTruncationReduction({\n listChildren,\n availableSpace\n });\n\n indicesToTruncate = truncationConfig.indicesToTruncate;\n }\n } else if (listChildren) {\n const truncationConfig = evalTruncationIncrease({\n listChildren,\n availableSpace\n });\n\n indicesToTruncate = truncationConfig.indicesToTruncate;\n availableSpace = truncationConfig.availableSpace;\n\n if (availableSpace < 0) {\n const removalConfig = evalItemRemoval({\n listChildren,\n availableSpace,\n nextSiblingLeadingEdge\n });\n\n nextDisplayCount = removalConfig.displayCount;\n }\n }\n\n setDisplayCount(nextDisplayCount);\n\n if (indicesToTruncate) {\n setTruncatedIndices(indicesToTruncate);\n }\n };\n\n // Initial display evaluation\n useEffect(() => {\n evaluateSummaryDisplay();\n }, [items]);\n\n // Overflow resize observer\n useEffect(() => {\n const resizeObserver = new ResizeObserver(evaluateSummaryDisplay);\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current, { box: 'border-box' });\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [evaluateSummaryDisplay]);\n\n return (\n <Flex\n as={StyledHeaderSummaryBlock}\n item={{ grow: 1, shrink: 1 }}\n container={{ pad: [0.5, 0], alignItems: 'center' }}\n ref={containerRef}\n hasItems={displayCount > 0}\n >\n <Flex as={StyledHeaderSummary} container={{ gap: 4 }} ref={listRef}>\n {items.slice(0, displayCount).map((item, index) => {\n return (\n <Field\n testId={item.testId}\n item={item}\n primary={!!primaryItems?.length && index < primaryItems.length}\n truncate={!!truncatedIndices?.includes(index)}\n key={item.name}\n />\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport default Summary;\n"]}
1
+ {"version":3,"file":"Summary.js","sourceRoot":"","sources":["../../../../src/components/CaseView/CaseHeader/Summary.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport type { RefObject } from 'react';\n\nimport {\n Flex,\n getEdge,\n registerIcon,\n StyledStackedFieldValue,\n StyledLabel,\n StyledFieldName,\n useDirection,\n useChToPxConversionFactor,\n useTestIds,\n withTestIds,\n NoValue,\n type TestIdProp\n} from '@pega/cosmos-react-core';\nimport { getFieldValueItemTestIds } from '@pega/cosmos-react-core/lib/components/FieldValueList/FieldValueList.test-ids';\nimport * as pencilIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/pencil.icon';\nimport * as moreIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/more.icon';\n\nimport {\n StyledHeaderSummary,\n StyledHeaderSummaryValue,\n StyledHeaderSummaryBlock\n} from '../CaseView.styles';\nimport { useCaseViewContext } from '../CaseView.context';\nimport type { SummaryField } from '../CaseView.types';\n\nregisterIcon(pencilIcon, moreIcon);\n\nconst Field = withTestIds(\n ({\n testId,\n item,\n primary,\n truncate\n }: {\n item: SummaryField;\n primary: boolean;\n truncate: boolean;\n } & TestIdProp) => {\n const { name, value, simpleValue } = item;\n const displayValue = simpleValue ?? value ?? <NoValue />;\n const testIds = useTestIds(testId, getFieldValueItemTestIds);\n\n return (\n <StyledStackedFieldValue data-testid={testIds.root} data-editable-anchor>\n <StyledLabel as={StyledFieldName} data-testid={testIds.name}>\n {name}\n </StyledLabel>\n <StyledHeaderSummaryValue bold={primary} truncate={truncate} data-testid={testIds.value}>\n {displayValue}\n </StyledHeaderSummaryValue>\n </StyledStackedFieldValue>\n );\n },\n getFieldValueItemTestIds\n);\n\nconst Summary = ({ siblingRef }: { siblingRef: RefObject<HTMLDivElement> }) => {\n const { ltr } = useDirection();\n const { summaryFields } = useCaseViewContext();\n const chToPxConversionFactor = useChToPxConversionFactor();\n\n const containerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDListElement>(null);\n\n const primaryItems = summaryFields?.primary ?? [];\n const secondaryItems = summaryFields?.secondary ?? [];\n const items = [...primaryItems, ...secondaryItems];\n\n const [displayCount, setDisplayCount] = useState(items.length);\n const [truncatedIndices, setTruncatedIndices] = useState<number[] | undefined>(\n items.map((_, i) => i)\n );\n\n const priorTrailingEdgeStack = useRef<number[]>([]);\n const priorAvailableSpace = useRef<number | null>(null);\n\n const evalItemAddition = ({\n nextSiblingLeadingEdge\n }: {\n nextSiblingLeadingEdge: number;\n }): {\n indicesToTruncate: number[];\n nextDisplayCount: number;\n } => {\n const indicesToTruncate: number[] = truncatedIndices ? [...truncatedIndices] : [];\n let nextDisplayCount = displayCount;\n\n const reversedTrailingEdgeStack = [...priorTrailingEdgeStack.current].reverse();\n for (let i = 0; i < reversedTrailingEdgeStack.length; i += 1) {\n const priorEdge = reversedTrailingEdgeStack[i];\n\n const shouldRender = ltr\n ? priorEdge < nextSiblingLeadingEdge\n : priorEdge > nextSiblingLeadingEdge;\n\n if (shouldRender) {\n priorTrailingEdgeStack.current.pop();\n\n if (!indicesToTruncate.includes(nextDisplayCount)) {\n indicesToTruncate.push(nextDisplayCount);\n }\n\n nextDisplayCount += 1;\n } else {\n break;\n }\n }\n return { indicesToTruncate, nextDisplayCount };\n };\n\n const evalTruncationReduction = ({\n listChildren,\n availableSpace\n }: {\n listChildren: Element[];\n availableSpace: number;\n }): {\n indicesToTruncate: number[];\n } => {\n const indicesToTruncate: number[] = [];\n let hasAvailableSpace = availableSpace;\n\n listChildren.forEach((item, index) => {\n const valueEl = item.lastChild as HTMLElement;\n const truncatedSpace = Math.floor(valueEl.scrollWidth - valueEl.offsetWidth);\n const shouldTruncate = truncatedSpace === 0 ? false : hasAvailableSpace - truncatedSpace <= 0;\n\n if (shouldTruncate) {\n if (!truncatedIndices?.includes(index)) {\n hasAvailableSpace += truncatedSpace;\n }\n\n indicesToTruncate.push(index);\n } else if (truncatedIndices?.includes(index)) {\n hasAvailableSpace -= truncatedSpace;\n }\n });\n\n return { indicesToTruncate };\n };\n\n const evalTruncationIncrease = ({\n listChildren,\n availableSpace\n }: {\n listChildren: Element[];\n availableSpace: number;\n }): {\n indicesToTruncate: number[];\n availableSpace: number;\n } => {\n const indicesToTruncate: number[] = [];\n const lastIndex = listChildren.length - 1;\n let hasAvailableSpace = availableSpace;\n\n [...listChildren].reverse().forEach((item, index) => {\n if (truncatedIndices?.includes(lastIndex - index)) {\n indicesToTruncate.push(lastIndex - index);\n } else if (hasAvailableSpace < 0) {\n const truncatedElMaxWidth = 20 * chToPxConversionFactor;\n const valueEl = item.lastChild as HTMLElement;\n const spaceToTruncate = Math.max(Math.floor(valueEl.offsetWidth - truncatedElMaxWidth), 0);\n\n if (spaceToTruncate) {\n indicesToTruncate.push(lastIndex - index);\n hasAvailableSpace += spaceToTruncate;\n }\n }\n });\n\n return { indicesToTruncate, availableSpace: hasAvailableSpace };\n };\n\n const evalItemRemoval = ({\n listChildren,\n availableSpace,\n nextSiblingLeadingEdge\n }: {\n listChildren: Element[];\n availableSpace: number;\n nextSiblingLeadingEdge: number;\n }): { displayCount: number } => {\n let nextDisplayCount = displayCount;\n let hasAvailableSpace = availableSpace;\n let lastChildIndex = listChildren.length - 1;\n\n do {\n const itemTrailingEdge = getEdge({\n el: listChildren[lastChildIndex],\n side: 'trailing',\n ltr\n });\n hasAvailableSpace = Math.floor(\n ltr ? nextSiblingLeadingEdge - itemTrailingEdge : itemTrailingEdge - nextSiblingLeadingEdge\n );\n\n if (hasAvailableSpace < 0) {\n priorTrailingEdgeStack.current = [...priorTrailingEdgeStack.current, itemTrailingEdge];\n\n nextDisplayCount -= 1;\n lastChildIndex -= 1;\n }\n } while (hasAvailableSpace < 0 && lastChildIndex > -1);\n\n return { displayCount: nextDisplayCount };\n };\n\n const evaluateSummaryDisplay = () => {\n const containerEl = containerRef.current;\n if (!containerEl) return;\n\n const listChildren = Array.from(listRef.current?.children ?? []);\n const lastSummaryItem = listChildren.length ? listChildren[listChildren.length - 1] : undefined;\n const nextSibling = siblingRef?.current ?? document.body;\n const nextSiblingLeadingEdge = getEdge({\n el: nextSibling,\n side: 'leading',\n ltr\n });\n const testEdge = lastSummaryItem\n ? getEdge({ el: lastSummaryItem, side: 'trailing', ltr })\n : getEdge({ el: containerEl, side: 'leading', ltr });\n let availableSpace = Math.floor(\n ltr ? nextSiblingLeadingEdge - testEdge : testEdge - nextSiblingLeadingEdge\n );\n if (availableSpace === priorAvailableSpace.current) return;\n\n priorAvailableSpace.current = availableSpace;\n\n let indicesToTruncate: number[] | undefined;\n let nextDisplayCount = displayCount;\n\n if (availableSpace >= 0) {\n if (displayCount !== items.length) {\n const additionsConfig = evalItemAddition({ nextSiblingLeadingEdge });\n\n indicesToTruncate = additionsConfig.indicesToTruncate;\n nextDisplayCount = additionsConfig.nextDisplayCount;\n } else if (truncatedIndices?.length) {\n const truncationConfig = evalTruncationReduction({\n listChildren,\n availableSpace\n });\n\n indicesToTruncate = truncationConfig.indicesToTruncate;\n }\n } else if (listChildren) {\n const truncationConfig = evalTruncationIncrease({\n listChildren,\n availableSpace\n });\n\n indicesToTruncate = truncationConfig.indicesToTruncate;\n availableSpace = truncationConfig.availableSpace;\n\n if (availableSpace < 0) {\n const removalConfig = evalItemRemoval({\n listChildren,\n availableSpace,\n nextSiblingLeadingEdge\n });\n\n nextDisplayCount = removalConfig.displayCount;\n }\n }\n\n setDisplayCount(nextDisplayCount);\n\n if (indicesToTruncate) {\n setTruncatedIndices(indicesToTruncate);\n }\n };\n\n // Initial display evaluation\n useEffect(() => {\n evaluateSummaryDisplay();\n }, [items]);\n\n // If primary or secondary fields change, reset state\n useLayoutEffect(() => {\n setTruncatedIndices([]);\n setDisplayCount(items.length);\n priorTrailingEdgeStack.current = [];\n priorAvailableSpace.current = null;\n }, [summaryFields.primary, summaryFields.secondary]);\n\n // Overflow resize observer\n useEffect(() => {\n const resizeObserver = new ResizeObserver(evaluateSummaryDisplay);\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current, { box: 'border-box' });\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [evaluateSummaryDisplay]);\n\n return (\n <Flex\n as={StyledHeaderSummaryBlock}\n item={{ grow: 1, shrink: 1 }}\n container={{ pad: [0.5, 0], alignItems: 'center' }}\n ref={containerRef}\n hasItems={displayCount > 0}\n >\n <Flex as={StyledHeaderSummary} container={{ gap: 4 }} ref={listRef}>\n {items.slice(0, displayCount).map((item, index) => {\n return (\n <Field\n testId={item.testId}\n item={item}\n primary={!!primaryItems?.length && index < primaryItems.length}\n truncate={!!truncatedIndices?.includes(index)}\n key={item.name}\n />\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nexport default Summary;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CaseWorkflow.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/CaseWorkflow.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAM/E,OAAO,KAAK,EAAE,iBAAiB,EAA0B,MAAM,oBAAoB,CAAC;AA2CpF,QAAA,MAAM,YAAY,EAAE,+BAA+B,CAAC,iBAAiB,CA4LpE,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"CaseWorkflow.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/CaseWorkflow.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAM/E,OAAO,KAAK,EAAE,iBAAiB,EAA0B,MAAM,oBAAoB,CAAC;AAyCpF,QAAA,MAAM,YAAY,EAAE,+BAA+B,CAAC,iBAAiB,CAqMpE,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useState, useCallback, forwardRef, useMemo, useEffect } from 'react';
2
+ import { useState, useCallback, forwardRef, useMemo, useEffect, useRef } from 'react';
3
3
  import { parseToHsl } from 'polished';
4
4
  import { Icon, Button, Tooltip, ExpandCollapse, useConsolidatedRef, useElement, useI18n, useTheme, tryCatch, StyledIconShape, registerIcon } from '@pega/cosmos-react-core';
5
5
  import * as chevronIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/chevron.icon';
6
6
  import * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';
7
7
  import * as caretDownIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/caret-down.icon';
8
8
  import VerticalFormProgress from '@pega/cosmos-react-core/lib/components/MultiStepForm/VerticalFormProgress';
9
- import { StyledCaseWorkflowBanner, StyledCaseIdentity, StyledCaseIconWrapper, StyledCaseTitle, StyledCaseTitleText, StyledWorkflowControls, StyledProgressLabel, StyledWorkflowInfoDialog, StyledStageList, StyledStageButton, StyledStepsContainer, StyledCaseViewIcon, StyledCaseViewImage } from './GenAICoach.styles';
9
+ import { StyledCaseWorkflowBanner, StyledCaseLaunchButton, StyledCaseIconWrapper, StyledCaseTitleText, StyledProgressLabel, StyledWorkflowInfoDialog, StyledStageList, StyledStageButton, StyledStepsContainer, StyledCaseViewIcon, StyledCaseViewImage } from './GenAICoach.styles';
10
10
  registerIcon(chevronIcon, timesIcon, caretDownIcon);
11
11
  const getEffectiveCurrentStepId = (stage) => {
12
12
  const { steps } = stage;
@@ -36,6 +36,8 @@ const CaseWorkflow = forwardRef(function CaseWorkflow({ heading, icon, stages, o
36
36
  const [isOpen, setIsOpen] = useState(false);
37
37
  const [hasBrokenImage, setHasBrokenImage] = useState();
38
38
  const currentStageId = stages.find(s => s.current)?.id;
39
+ const currentStageIdRef = useRef(currentStageId);
40
+ currentStageIdRef.current = currentStageId;
39
41
  const [expandedStages, setExpandedStages] = useState(() => {
40
42
  const initial = new Set();
41
43
  if (currentStageId)
@@ -80,11 +82,19 @@ const CaseWorkflow = forwardRef(function CaseWorkflow({ heading, icon, stages, o
80
82
  useEffect(() => {
81
83
  setHasBrokenImage(undefined);
82
84
  }, [typeof icon === 'string' ? icon : icon?.href]);
83
- return (_jsxs(_Fragment, { children: [_jsxs(StyledCaseWorkflowBanner, { container: { alignItems: 'center', justify: 'between', gap: 0.75 }, ...restProps, ref: rootRef, children: [_jsxs(StyledCaseIdentity, { container: { alignItems: 'center', gap: 1 }, children: [showIcon && (_jsx(StyledCaseIconWrapper, { children: typeof icon === 'string' ? (_jsx(StyledCaseViewIcon, { name: icon, foreground: iconForeground, background: iconBackground, size: 's' })) : (_jsx(StyledIconShape, { background: iconBackground, children: _jsx(StyledCaseViewImage, { src: icon?.href, alt: t('case_image'), onLoad: () => {
85
+ useEffect(() => {
86
+ if (isOpen) {
87
+ const initial = new Set();
88
+ if (currentStageIdRef.current)
89
+ initial.add(currentStageIdRef.current);
90
+ setExpandedStages(initial);
91
+ }
92
+ }, [isOpen]);
93
+ return (_jsxs(_Fragment, { children: [_jsxs(StyledCaseWorkflowBanner, { container: { alignItems: 'center', justify: 'between', gap: 0 }, ...restProps, ref: rootRef, children: [_jsxs(StyledCaseLaunchButton, { ref: setTitleEl, variant: 'simple', onClick: onHeadingClick, "aria-label": t('open_noun', [heading]), children: [showIcon && (_jsx(StyledCaseIconWrapper, { children: typeof icon === 'string' ? (_jsx(StyledCaseViewIcon, { name: icon, foreground: iconForeground, background: iconBackground, size: 's' })) : (_jsx(StyledIconShape, { background: iconBackground, children: _jsx(StyledCaseViewImage, { src: icon?.href, alt: t('case_image'), onLoad: () => {
84
94
  setHasBrokenImage(false);
85
95
  }, onError: () => {
86
96
  setHasBrokenImage(true);
87
- } }) })) })), _jsx(StyledCaseTitle, { ref: setTitleEl, variant: 'link', onClick: onHeadingClick, children: _jsx(StyledCaseTitleText, { children: heading }) })] }), _jsxs(StyledWorkflowControls, { container: { alignItems: 'center', gap: 0.5 }, item: { shrink: 0 }, children: [stageStepLabel && _jsx(StyledProgressLabel, { children: stageStepLabel }), _jsx(Button, { ref: setWorkflowBtnEl, icon: true, variant: 'simple', onClick: toggleDialog, "aria-expanded": isOpen, label: t('workflow'), "aria-label": t('open_noun', [t('workflow')]), children: _jsx(Icon, { name: 'chevron' }) })] }), isOpen && workflowBtnEl && (_jsx(StyledWorkflowInfoDialog, { heading: heading, target: workflowBtnEl, onDismiss: closeDialog, children: _jsx(StyledStageList, { children: stages.map(stage => {
97
+ } }) })) })), _jsx(StyledCaseTitleText, { children: heading }), stageStepLabel && _jsx(StyledProgressLabel, { children: stageStepLabel })] }), _jsx(Button, { ref: setWorkflowBtnEl, icon: true, variant: 'simple', onClick: toggleDialog, "aria-expanded": isOpen, label: t('workflow'), "aria-label": t('open_noun', [t('workflow')]), children: _jsx(Icon, { name: 'chevron' }) }), isOpen && workflowBtnEl && (_jsx(StyledWorkflowInfoDialog, { heading: heading, target: workflowBtnEl, onDismiss: closeDialog, children: _jsx(StyledStageList, { children: stages.map(stage => {
88
98
  const isExpanded = expandedStages.has(stage.id);
89
99
  const hasSteps = Array.isArray(stage.steps) && stage.steps.length > 0;
90
100
  const effectiveStepId = getEffectiveCurrentStepId(stage);
@@ -1 +1 @@
1
- {"version":3,"file":"CaseWorkflow.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/CaseWorkflow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EACL,IAAI,EACJ,MAAM,EACN,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,WAAW,MAAM,gEAAgE,CAAC;AAC9F,OAAO,KAAK,SAAS,MAAM,8DAA8D,CAAC;AAC1F,OAAO,KAAK,aAAa,MAAM,mEAAmE,CAAC;AACnG,OAAO,oBAAoB,MAAM,2EAA2E,CAAC;AAG7G,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,yBAAyB,GAAG,CAAC,KAA6B,EAAsB,EAAE;IACtF,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAExB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEnD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,aAAa,CAAC;IAErE,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAgC,EAAE,EAAE;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE1C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa;QAC9B,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,aAAa,CAAC;QACtD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,YAAY,GAAuD,UAAU,CACjF,SAAS,YAAY,CACnB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,EAAsC,EAC3F,GAA6B;IAE7B,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAExC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,UAAU,EAAqB,CAAC;IAC1E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,UAAU,EAAyC,CAAC;IAElF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,EAAuB,CAAC;IAE5E,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;IACvD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,IAAI,cAAc;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,EAAE;QAClD,iBAAiB,CAAC,IAAI,CAAC,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAClB,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM;QACjD,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK;QAC1C,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE/D,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QACvD,CAAC;QACD,OAAO,QAAQ,CACb,GAAG,EAAE;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAC9B,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CACzD,CAAC;YACF,OAAO,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAC9E,CAAC,EACD,GAAG,EAAE,CAAC,aAAa,CACpB,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC;IAE3C,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAG,WAAW;QAChC,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACtF,CAAC,CAAC,SAAS,CAAC;IAEd,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEnD,OAAO,CACL,8BACE,MAAC,wBAAwB,IACvB,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,KAC9D,SAAS,EACb,GAAG,EAAE,OAAO,aAEZ,MAAC,kBAAkB,IAAC,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aAC5D,QAAQ,IAAI,CACX,KAAC,qBAAqB,cACnB,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC1B,KAAC,kBAAkB,IACjB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAC,GAAG,GACR,CACH,CAAC,CAAC,CAAC,CACF,KAAC,eAAe,IAAC,UAAU,EAAE,cAAc,YACzC,KAAC,mBAAmB,IAClB,GAAG,EAAE,IAAI,EAAE,IAAI,EACf,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,EACpB,MAAM,EAAE,GAAG,EAAE;4CACX,iBAAiB,CAAC,KAAK,CAAC,CAAC;wCAC3B,CAAC,EACD,OAAO,EAAE,GAAG,EAAE;4CACZ,iBAAiB,CAAC,IAAI,CAAC,CAAC;wCAC1B,CAAC,GACD,GACc,CACnB,GACqB,CACzB,EAED,KAAC,eAAe,IAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAC,MAAM,EAAC,OAAO,EAAE,cAAc,YACtE,KAAC,mBAAmB,cAAE,OAAO,GAAuB,GACpC,IACC,EAErB,MAAC,sBAAsB,IACrB,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,EAC7C,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,aAElB,cAAc,IAAI,KAAC,mBAAmB,cAAE,cAAc,GAAuB,EAE9E,KAAC,MAAM,IACL,GAAG,EAAE,gBAAgB,EACrB,IAAI,QACJ,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAE,YAAY,mBACN,MAAM,EACrB,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,gBACR,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAE3C,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,GAAG,GAChB,IACc,EAExB,MAAM,IAAI,aAAa,IAAI,CAC1B,KAAC,wBAAwB,IACvB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,WAAW,YAEtB,KAAC,eAAe,cACb,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gCAClB,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gCACtE,MAAM,eAAe,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;gCAEzD,IAAI,WAAW,GAA2C,aAAa,CAAC;gCACxE,IAAI,KAAK,CAAC,SAAS;oCAAE,WAAW,GAAG,WAAW,CAAC;qCAC1C,IAAI,KAAK,CAAC,OAAO;oCAAE,WAAW,GAAG,QAAQ,CAAC;gCAE/C,OAAO,CACL,yBACE,MAAC,iBAAiB,IAChB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,mBACrB,UAAU,EACzB,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAC,QAAQ,aAEhB,KAAC,IAAI,IAAC,IAAI,EAAC,YAAY,GAAG,EAEzB,KAAK,CAAC,IAAI,IACO,EAEnB,QAAQ,IAAI,eAAe,IAAI,CAC9B,KAAC,cAAc,IAAC,SAAS,EAAE,CAAC,UAAU,EAAE,iBAAiB,kBACvD,KAAC,oBAAoB,IAAC,WAAW,EAAE,WAAW,YAC5C,KAAC,oBAAoB,IACnB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EACxB,aAAa,EAAE,eAAe,GAC9B,GACmB,GACR,CAClB,KArBM,KAAK,CAAC,EAAE,CAsBZ,CACN,CAAC;4BACJ,CAAC,CAAC,GACc,GACO,CAC5B,IACwB,EAE1B,OAAO,IAAI,CACV,KAAC,OAAO,IAAC,MAAM,EAAE,OAAO,EAAE,KAAK,QAAC,SAAS,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,YAC9D,OAAO,GACA,CACX,IACA,CACJ,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import { useState, useCallback, forwardRef, useMemo, useEffect } from 'react';\nimport type { PropsWithoutRef } from 'react';\nimport { parseToHsl } from 'polished';\n\nimport {\n Icon,\n Button,\n Tooltip,\n ExpandCollapse,\n useConsolidatedRef,\n useElement,\n useI18n,\n useTheme,\n tryCatch,\n StyledIconShape,\n registerIcon\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent } from '@pega/cosmos-react-core';\nimport * as chevronIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/chevron.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 VerticalFormProgress from '@pega/cosmos-react-core/lib/components/MultiStepForm/VerticalFormProgress';\n\nimport type { CaseWorkflowProps, CaseWorkflowStageProps } from './GenAICoach.types';\nimport {\n StyledCaseWorkflowBanner,\n StyledCaseIdentity,\n StyledCaseIconWrapper,\n StyledCaseTitle,\n StyledCaseTitleText,\n StyledWorkflowControls,\n StyledProgressLabel,\n StyledWorkflowInfoDialog,\n StyledStageList,\n StyledStageButton,\n StyledStepsContainer,\n StyledCaseViewIcon,\n StyledCaseViewImage\n} from './GenAICoach.styles';\n\nregisterIcon(chevronIcon, timesIcon, caretDownIcon);\n\nconst getEffectiveCurrentStepId = (stage: CaseWorkflowStageProps): string | undefined => {\n const { steps } = stage;\n\n if (!steps || steps.length === 0) return undefined;\n\n if (stage.current && stage.currentStepId) return stage.currentStepId;\n\n if (stage.completed) return steps[steps.length - 1].id;\n\n return steps[0].id;\n};\n\nconst getCurrentStageAndStep = (stages: CaseWorkflowStageProps[]) => {\n const stage = stages.find(s => s.current);\n\n if (!stage) return undefined;\n\n const step = stage.currentStepId\n ? stage.steps?.find(s => s.id === stage.currentStepId)\n : undefined;\n\n return { stageName: stage.name, stepName: step?.name };\n};\n\nconst CaseWorkflow: ForwardRefForwardPropsComponent<CaseWorkflowProps> = forwardRef(\n function CaseWorkflow(\n { heading, icon, stages, onHeadingClick, ...restProps }: PropsWithoutRef<CaseWorkflowProps>,\n ref: CaseWorkflowProps['ref']\n ) {\n const t = useI18n();\n const theme = useTheme();\n\n const rootRef = useConsolidatedRef(ref);\n\n const [workflowBtnEl, setWorkflowBtnEl] = useElement<HTMLButtonElement>();\n const [titleEl, setTitleEl] = useElement<HTMLButtonElement | HTMLAnchorElement>();\n\n const [isOpen, setIsOpen] = useState(false);\n const [hasBrokenImage, setHasBrokenImage] = useState<boolean | undefined>();\n\n const currentStageId = stages.find(s => s.current)?.id;\n const [expandedStages, setExpandedStages] = useState<Set<string>>(() => {\n const initial = new Set<string>();\n if (currentStageId) initial.add(currentStageId);\n return initial;\n });\n\n const toggleStage = useCallback((stageId: string) => {\n setExpandedStages(prev => {\n const next = new Set(prev);\n if (next.has(stageId)) {\n next.delete(stageId);\n } else {\n next.add(stageId);\n }\n return next;\n });\n }, []);\n\n const toggleDialog = useCallback(() => {\n setIsOpen(prev => !prev);\n }, []);\n\n const closeDialog = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const iconForeground =\n theme.components['case-view'].icon.color !== 'auto'\n ? theme.components['case-view'].icon.color\n : theme.components['case-view'].header['foreground-color'];\n\n const iconBackground = useMemo(() => {\n if (theme.components['case-view'].icon.background !== 'auto') {\n return theme.components['case-view'].icon.background;\n }\n return tryCatch(\n () => {\n const { lightness } = parseToHsl(\n theme.components['case-view'].header['background-color']\n );\n return lightness > 0.35 ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)';\n },\n () => 'transparent'\n );\n }, [theme]);\n\n const showIcon = !!icon && !hasBrokenImage;\n\n const currentInfo = getCurrentStageAndStep(stages);\n\n const stageStepLabel = currentInfo\n ? `${currentInfo.stageName}${currentInfo.stepName ? `: ${currentInfo.stepName}` : ''}`\n : undefined;\n\n useEffect(() => {\n setHasBrokenImage(undefined);\n }, [typeof icon === 'string' ? icon : icon?.href]);\n\n return (\n <>\n <StyledCaseWorkflowBanner\n container={{ alignItems: 'center', justify: 'between', gap: 0.75 }}\n {...restProps}\n ref={rootRef}\n >\n <StyledCaseIdentity container={{ alignItems: 'center', gap: 1 }}>\n {showIcon && (\n <StyledCaseIconWrapper>\n {typeof icon === 'string' ? (\n <StyledCaseViewIcon\n name={icon}\n foreground={iconForeground}\n background={iconBackground}\n size='s'\n />\n ) : (\n <StyledIconShape background={iconBackground}>\n <StyledCaseViewImage\n src={icon?.href}\n alt={t('case_image')}\n onLoad={() => {\n setHasBrokenImage(false);\n }}\n onError={() => {\n setHasBrokenImage(true);\n }}\n />\n </StyledIconShape>\n )}\n </StyledCaseIconWrapper>\n )}\n\n <StyledCaseTitle ref={setTitleEl} variant='link' onClick={onHeadingClick}>\n <StyledCaseTitleText>{heading}</StyledCaseTitleText>\n </StyledCaseTitle>\n </StyledCaseIdentity>\n\n <StyledWorkflowControls\n container={{ alignItems: 'center', gap: 0.5 }}\n item={{ shrink: 0 }}\n >\n {stageStepLabel && <StyledProgressLabel>{stageStepLabel}</StyledProgressLabel>}\n\n <Button\n ref={setWorkflowBtnEl}\n icon\n variant='simple'\n onClick={toggleDialog}\n aria-expanded={isOpen}\n label={t('workflow')}\n aria-label={t('open_noun', [t('workflow')])}\n >\n <Icon name='chevron' />\n </Button>\n </StyledWorkflowControls>\n\n {isOpen && workflowBtnEl && (\n <StyledWorkflowInfoDialog\n heading={heading}\n target={workflowBtnEl}\n onDismiss={closeDialog}\n >\n <StyledStageList>\n {stages.map(stage => {\n const isExpanded = expandedStages.has(stage.id);\n const hasSteps = Array.isArray(stage.steps) && stage.steps.length > 0;\n const effectiveStepId = getEffectiveCurrentStepId(stage);\n\n let stageStatus: 'active' | 'completed' | 'not-started' = 'not-started';\n if (stage.completed) stageStatus = 'completed';\n else if (stage.current) stageStatus = 'active';\n\n return (\n <li key={stage.id}>\n <StyledStageButton\n onClick={() => toggleStage(stage.id)}\n aria-expanded={isExpanded}\n expanded={isExpanded}\n variant='simple'\n >\n <Icon name='caret-down' />\n\n {stage.name}\n </StyledStageButton>\n\n {hasSteps && effectiveStepId && (\n <ExpandCollapse collapsed={!isExpanded} nullWhenCollapsed>\n <StyledStepsContainer stageStatus={stageStatus}>\n <VerticalFormProgress\n steps={stage.steps ?? []}\n currentStepId={effectiveStepId}\n />\n </StyledStepsContainer>\n </ExpandCollapse>\n )}\n </li>\n );\n })}\n </StyledStageList>\n </StyledWorkflowInfoDialog>\n )}\n </StyledCaseWorkflowBanner>\n\n {titleEl && (\n <Tooltip target={titleEl} smart showDelay='none' hideDelay='none'>\n {heading}\n </Tooltip>\n )}\n </>\n );\n }\n);\n\nexport default CaseWorkflow;\n"]}
1
+ {"version":3,"file":"CaseWorkflow.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/CaseWorkflow.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, useCallback, forwardRef, useMemo, useEffect, useRef } from 'react';\nimport type { PropsWithoutRef } from 'react';\nimport { parseToHsl } from 'polished';\n\nimport {\n Icon,\n Button,\n Tooltip,\n ExpandCollapse,\n useConsolidatedRef,\n useElement,\n useI18n,\n useTheme,\n tryCatch,\n StyledIconShape,\n registerIcon\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent } from '@pega/cosmos-react-core';\nimport * as chevronIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/chevron.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 VerticalFormProgress from '@pega/cosmos-react-core/lib/components/MultiStepForm/VerticalFormProgress';\n\nimport type { CaseWorkflowProps, CaseWorkflowStageProps } from './GenAICoach.types';\nimport {\n StyledCaseWorkflowBanner,\n StyledCaseLaunchButton,\n StyledCaseIconWrapper,\n StyledCaseTitleText,\n StyledProgressLabel,\n StyledWorkflowInfoDialog,\n StyledStageList,\n StyledStageButton,\n StyledStepsContainer,\n StyledCaseViewIcon,\n StyledCaseViewImage\n} from './GenAICoach.styles';\n\nregisterIcon(chevronIcon, timesIcon, caretDownIcon);\n\nconst getEffectiveCurrentStepId = (stage: CaseWorkflowStageProps): string | undefined => {\n const { steps } = stage;\n\n if (!steps || steps.length === 0) return undefined;\n\n if (stage.current && stage.currentStepId) return stage.currentStepId;\n\n if (stage.completed) return steps[steps.length - 1].id;\n\n return steps[0].id;\n};\n\nconst getCurrentStageAndStep = (stages: CaseWorkflowStageProps[]) => {\n const stage = stages.find(s => s.current);\n\n if (!stage) return undefined;\n\n const step = stage.currentStepId\n ? stage.steps?.find(s => s.id === stage.currentStepId)\n : undefined;\n\n return { stageName: stage.name, stepName: step?.name };\n};\n\nconst CaseWorkflow: ForwardRefForwardPropsComponent<CaseWorkflowProps> = forwardRef(\n function CaseWorkflow(\n { heading, icon, stages, onHeadingClick, ...restProps }: PropsWithoutRef<CaseWorkflowProps>,\n ref: CaseWorkflowProps['ref']\n ) {\n const t = useI18n();\n const theme = useTheme();\n\n const rootRef = useConsolidatedRef(ref);\n\n const [workflowBtnEl, setWorkflowBtnEl] = useElement<HTMLButtonElement>();\n const [titleEl, setTitleEl] = useElement<HTMLButtonElement>();\n\n const [isOpen, setIsOpen] = useState(false);\n const [hasBrokenImage, setHasBrokenImage] = useState<boolean | undefined>();\n\n const currentStageId = stages.find(s => s.current)?.id;\n const currentStageIdRef = useRef(currentStageId);\n currentStageIdRef.current = currentStageId;\n\n const [expandedStages, setExpandedStages] = useState<Set<string>>(() => {\n const initial = new Set<string>();\n if (currentStageId) initial.add(currentStageId);\n return initial;\n });\n\n const toggleStage = useCallback((stageId: string) => {\n setExpandedStages(prev => {\n const next = new Set(prev);\n if (next.has(stageId)) {\n next.delete(stageId);\n } else {\n next.add(stageId);\n }\n return next;\n });\n }, []);\n\n const toggleDialog = useCallback(() => {\n setIsOpen(prev => !prev);\n }, []);\n\n const closeDialog = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const iconForeground =\n theme.components['case-view'].icon.color !== 'auto'\n ? theme.components['case-view'].icon.color\n : theme.components['case-view'].header['foreground-color'];\n\n const iconBackground = useMemo(() => {\n if (theme.components['case-view'].icon.background !== 'auto') {\n return theme.components['case-view'].icon.background;\n }\n return tryCatch(\n () => {\n const { lightness } = parseToHsl(\n theme.components['case-view'].header['background-color']\n );\n return lightness > 0.35 ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.2)';\n },\n () => 'transparent'\n );\n }, [theme]);\n\n const showIcon = !!icon && !hasBrokenImage;\n\n const currentInfo = getCurrentStageAndStep(stages);\n\n const stageStepLabel = currentInfo\n ? `${currentInfo.stageName}${currentInfo.stepName ? `: ${currentInfo.stepName}` : ''}`\n : undefined;\n\n useEffect(() => {\n setHasBrokenImage(undefined);\n }, [typeof icon === 'string' ? icon : icon?.href]);\n\n useEffect(() => {\n if (isOpen) {\n const initial = new Set<string>();\n if (currentStageIdRef.current) initial.add(currentStageIdRef.current);\n setExpandedStages(initial);\n }\n }, [isOpen]);\n\n return (\n <>\n <StyledCaseWorkflowBanner\n container={{ alignItems: 'center', justify: 'between', gap: 0 }}\n {...restProps}\n ref={rootRef}\n >\n <StyledCaseLaunchButton\n ref={setTitleEl}\n variant='simple'\n onClick={onHeadingClick}\n aria-label={t('open_noun', [heading])}\n >\n {showIcon && (\n <StyledCaseIconWrapper>\n {typeof icon === 'string' ? (\n <StyledCaseViewIcon\n name={icon}\n foreground={iconForeground}\n background={iconBackground}\n size='s'\n />\n ) : (\n <StyledIconShape background={iconBackground}>\n <StyledCaseViewImage\n src={icon?.href}\n alt={t('case_image')}\n onLoad={() => {\n setHasBrokenImage(false);\n }}\n onError={() => {\n setHasBrokenImage(true);\n }}\n />\n </StyledIconShape>\n )}\n </StyledCaseIconWrapper>\n )}\n\n <StyledCaseTitleText>{heading}</StyledCaseTitleText>\n\n {stageStepLabel && <StyledProgressLabel>{stageStepLabel}</StyledProgressLabel>}\n </StyledCaseLaunchButton>\n\n <Button\n ref={setWorkflowBtnEl}\n icon\n variant='simple'\n onClick={toggleDialog}\n aria-expanded={isOpen}\n label={t('workflow')}\n aria-label={t('open_noun', [t('workflow')])}\n >\n <Icon name='chevron' />\n </Button>\n\n {isOpen && workflowBtnEl && (\n <StyledWorkflowInfoDialog\n heading={heading}\n target={workflowBtnEl}\n onDismiss={closeDialog}\n >\n <StyledStageList>\n {stages.map(stage => {\n const isExpanded = expandedStages.has(stage.id);\n const hasSteps = Array.isArray(stage.steps) && stage.steps.length > 0;\n const effectiveStepId = getEffectiveCurrentStepId(stage);\n\n let stageStatus: 'active' | 'completed' | 'not-started' = 'not-started';\n if (stage.completed) stageStatus = 'completed';\n else if (stage.current) stageStatus = 'active';\n\n return (\n <li key={stage.id}>\n <StyledStageButton\n onClick={() => toggleStage(stage.id)}\n aria-expanded={isExpanded}\n expanded={isExpanded}\n variant='simple'\n >\n <Icon name='caret-down' />\n\n {stage.name}\n </StyledStageButton>\n\n {hasSteps && effectiveStepId && (\n <ExpandCollapse collapsed={!isExpanded} nullWhenCollapsed>\n <StyledStepsContainer stageStatus={stageStatus}>\n <VerticalFormProgress\n steps={stage.steps ?? []}\n currentStepId={effectiveStepId}\n />\n </StyledStepsContainer>\n </ExpandCollapse>\n )}\n </li>\n );\n })}\n </StyledStageList>\n </StyledWorkflowInfoDialog>\n )}\n </StyledCaseWorkflowBanner>\n\n {titleEl && (\n <Tooltip target={titleEl} smart showDelay='none' hideDelay='none'>\n {heading}\n </Tooltip>\n )}\n </>\n );\n }\n);\n\nexport default CaseWorkflow;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationHistory.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/ConversationHistory.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAW/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAKnE,QAAA,MAAM,mBAAmB,EAAE,+BAA+B,CAAC,wBAAwB,CA2KlF,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"ConversationHistory.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/ConversationHistory.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAW/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAKnE,QAAA,MAAM,mBAAmB,EAAE,+BAA+B,CAAC,wBAAwB,CA0KlF,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1,18 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { forwardRef, useEffect, useRef } from 'react';
3
- import { Button, EmptyState, ErrorState, Flex, getFocusables, Icon, Progress, registerIcon, Text, useArrows, useDirection, useI18n, useItemIntersection, useOuterEvent, useTestIds } from '@pega/cosmos-react-core';
4
- import * as ArrowLeftIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/arrow-left.icon';
5
- import * as ArrowRightIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/arrow-right.icon';
6
- import { StyledHistoryContainer, StyledList, StyledLoadingItem, StyledHistorySummaryListItem, StyledGroupHeader } from './GenAICoach.styles';
3
+ import { Button, EmptyState, ErrorState, Flex, getFocusables, Icon, Progress, registerIcon, Text, useArrows, useI18n, useItemIntersection, useOuterEvent, useTestIds } from '@pega/cosmos-react-core';
4
+ import * as TimesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';
5
+ import { StyledHistoryContainer, StyledList, StyledInnerList, StyledLoadingItem, StyledHistorySummaryListItem, StyledGroupHeader } from './GenAICoach.styles';
7
6
  import { getConversationHistoryTestIds } from './GenAICoach.test-ids';
8
- registerIcon(ArrowLeftIcon, ArrowRightIcon);
7
+ registerIcon(TimesIcon);
9
8
  const ConversationHistory = forwardRef(function ConversationHistory({ testId, data = [], onDismiss, loading = false, loadMore, inFullPage = false, onItemClick, selectedItemId, error, ...restProps }, ref) {
10
9
  const testIds = useTestIds(testId, getConversationHistoryTestIds);
11
10
  const t = useI18n();
12
- const { rtl } = useDirection();
13
11
  const focusInMessageListRef = useRef(false);
14
12
  const ulRef = useRef(null);
15
- const backButtonRef = useRef(null);
13
+ const closeButtonRef = useRef(null);
16
14
  const selector = ':scope > li > ul > li';
17
15
  const totalConversations = data.reduce((sum, section) => sum + section.conversations.length, 0);
18
16
  useArrows(ulRef, {
@@ -26,8 +24,8 @@ const ConversationHistory = forwardRef(function ConversationHistory({ testId, da
26
24
  focusInMessageListRef.current = false;
27
25
  });
28
26
  useEffect(() => {
29
- if (backButtonRef.current)
30
- backButtonRef.current.focus();
27
+ if (closeButtonRef.current)
28
+ closeButtonRef.current.focus();
31
29
  }, []);
32
30
  const loadingOrEmptyElement = loading ? (_jsx(Progress, { placement: 'block', liveConfig: { contextualLabel: t('conversation') } })) : (_jsx(EmptyState, { message: t('no_conversations_found') }));
33
31
  const renderComponent = data.length > 0 ? (_jsxs(StyledList, { container: { direction: 'column', pad: [undefined, undefined, 1], gap: 1 }, forwardedAs: 'ul', "aria-label": `${t('history')} ${t('view')}`, onFocus: () => {
@@ -50,7 +48,7 @@ const ConversationHistory = forwardRef(function ConversationHistory({ testId, da
50
48
  }
51
49
  }
52
50
  }, item: { grow: 1 }, ref: ulRef, children: [data.map(item => {
53
- return (_jsxs(Flex, { "data-testid": testIds.historyGroup, container: { direction: 'column' }, as: 'li', role: 'presentation', children: [_jsx(Flex, { container: { alignItems: 'center', pad: [0.5, 1] }, as: StyledGroupHeader, id: item.id, children: item.section }), _jsx("ul", { "aria-labelledby": item.id, children: item.conversations.map(conversation => {
51
+ return (_jsxs(Flex, { "data-testid": testIds.historyGroup, container: { direction: 'column' }, as: 'li', role: 'presentation', children: [_jsx(Flex, { container: { alignItems: 'center', pad: [0.5, 1] }, as: StyledGroupHeader, id: item.id, children: item.section }), _jsx(StyledInnerList, { "aria-labelledby": item.id, children: item.conversations.map(conversation => {
54
52
  const activeElement = selectedItemId === conversation.id;
55
53
  return (_jsx(StyledHistorySummaryListItem, { id: conversation.id, forwardedAs: 'li', "aria-selected": activeElement, primary: _jsx(Text, { children: conversation.title }), onClick: () => {
56
54
  onItemClick?.(conversation.id);
@@ -63,11 +61,11 @@ const ConversationHistory = forwardRef(function ConversationHistory({ testId, da
63
61
  }) })] }, item.id));
64
62
  }), loading && _jsx(StyledLoadingItem, { children: loadingOrEmptyElement })] })) : (loadingOrEmptyElement);
65
63
  return (_jsxs(StyledHistoryContainer, { ...restProps, "data-testid": testIds.root, container: { direction: 'column' }, inFullPage: inFullPage, item: { grow: 1 }, ref: ref, children: [_jsxs(Flex, { container: {
66
- pad: 1,
64
+ pad: [1, 2],
67
65
  gap: 2,
68
- justify: 'start',
66
+ justify: 'between',
69
67
  alignItems: 'center'
70
- }, children: [_jsx(Button, { "data-testid": testIds.back, label: t('back'), icon: true, variant: 'simple', onClick: onDismiss, ref: backButtonRef, children: _jsx(Icon, { name: rtl ? 'arrow-right' : 'arrow-left' }) }), _jsx(Text, { variant: 'h2', children: t('your_chats') })] }), error ? _jsx(ErrorState, { message: error }) : renderComponent] }));
68
+ }, children: [_jsx(Text, { variant: 'h2', children: t('your_chats') }), _jsx(Button, { "data-testid": testIds.close, label: t('close'), icon: true, variant: 'simple', onClick: onDismiss, ref: closeButtonRef, children: _jsx(Icon, { name: 'times' }) })] }), error ? _jsx(ErrorState, { message: error }) : renderComponent] }));
71
69
  });
72
70
  export default ConversationHistory;
73
71
  //# sourceMappingURL=ConversationHistory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationHistory.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/ConversationHistory.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useEffect, useRef } from 'react';\nimport type { PropsWithoutRef } from 'react';\n\nimport {\n Button,\n EmptyState,\n ErrorState,\n Flex,\n getFocusables,\n Icon,\n Progress,\n registerIcon,\n Text,\n useArrows,\n useDirection,\n useI18n,\n useItemIntersection,\n useOuterEvent,\n useTestIds\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent } from '@pega/cosmos-react-core';\nimport * as ArrowLeftIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/arrow-left.icon';\nimport * as ArrowRightIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/arrow-right.icon';\n\nimport {\n StyledHistoryContainer,\n StyledList,\n StyledLoadingItem,\n StyledHistorySummaryListItem,\n StyledGroupHeader\n} from './GenAICoach.styles';\nimport type { ConversationHistoryProps } from './GenAICoach.types';\nimport { getConversationHistoryTestIds } from './GenAICoach.test-ids';\n\nregisterIcon(ArrowLeftIcon, ArrowRightIcon);\n\nconst ConversationHistory: ForwardRefForwardPropsComponent<ConversationHistoryProps> = forwardRef(\n function ConversationHistory(\n {\n testId,\n data = [],\n onDismiss,\n loading = false,\n loadMore,\n inFullPage = false,\n onItemClick,\n selectedItemId,\n error,\n ...restProps\n }: PropsWithoutRef<ConversationHistoryProps>,\n ref: ConversationHistoryProps['ref']\n ) {\n const testIds = useTestIds(testId, getConversationHistoryTestIds);\n const t = useI18n();\n const { rtl } = useDirection();\n const focusInMessageListRef = useRef(false);\n const ulRef = useRef<HTMLUListElement>(null);\n const backButtonRef = useRef<HTMLButtonElement>(null);\n const selector = ':scope > li > ul > li';\n const totalConversations = data.reduce((sum, section) => sum + section.conversations.length, 0);\n\n useArrows(\n ulRef,\n {\n selector\n },\n [totalConversations, data[0]?.conversations.length]\n );\n\n useItemIntersection(\n ulRef,\n totalConversations - 1,\n () => {\n if (!loading) loadMore?.();\n },\n selector\n );\n\n useOuterEvent('mousedown', [ulRef.current], () => {\n focusInMessageListRef.current = false;\n });\n\n useEffect(() => {\n if (backButtonRef.current) backButtonRef.current.focus();\n }, []);\n\n const loadingOrEmptyElement = loading ? (\n <Progress placement='block' liveConfig={{ contextualLabel: t('conversation') }} />\n ) : (\n <EmptyState message={t('no_conversations_found')} />\n );\n\n const renderComponent =\n data.length > 0 ? (\n <StyledList\n container={{ direction: 'column', pad: [undefined, undefined, 1], gap: 1 }}\n forwardedAs='ul'\n aria-label={`${t('history')} ${t('view')}`}\n onFocus={() => {\n if (selectedItemId && !focusInMessageListRef.current) {\n focusInMessageListRef.current = true;\n ulRef.current?.querySelector<HTMLLIElement>(`li[id=\"${selectedItemId}\"]`)?.focus();\n }\n }}\n onKeyDown={(e: KeyboardEvent) => {\n if (e.key === 'Tab') {\n focusInMessageListRef.current = false;\n if (e.shiftKey) {\n const prevElement = ulRef.current?.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 }\n }}\n item={{ grow: 1 }}\n ref={ulRef}\n >\n {data.map(item => {\n return (\n <Flex\n data-testid={testIds.historyGroup}\n container={{ direction: 'column' }}\n as='li'\n role='presentation'\n key={item.id}\n >\n <Flex\n container={{ alignItems: 'center', pad: [0.5, 1] }}\n as={StyledGroupHeader}\n id={item.id}\n >\n {item.section}\n </Flex>\n\n <ul aria-labelledby={item.id}>\n {item.conversations.map(conversation => {\n const activeElement = selectedItemId === conversation.id;\n return (\n <StyledHistorySummaryListItem\n key={conversation.id}\n id={conversation.id}\n forwardedAs='li'\n aria-selected={activeElement}\n primary={<Text>{conversation.title}</Text>}\n onClick={() => {\n onItemClick?.(conversation.id);\n }}\n aria-label={conversation.title}\n onKeyDown={(e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onItemClick?.(conversation.id);\n e.preventDefault();\n }\n }}\n />\n );\n })}\n </ul>\n </Flex>\n );\n })}\n {loading && <StyledLoadingItem>{loadingOrEmptyElement}</StyledLoadingItem>}\n </StyledList>\n ) : (\n loadingOrEmptyElement\n );\n\n return (\n <StyledHistoryContainer\n {...restProps}\n data-testid={testIds.root}\n container={{ direction: 'column' }}\n inFullPage={inFullPage}\n item={{ grow: 1 }}\n ref={ref}\n >\n <Flex\n container={{\n pad: 1,\n gap: 2,\n justify: 'start',\n alignItems: 'center'\n }}\n >\n <Button\n data-testid={testIds.back}\n label={t('back')}\n icon\n variant='simple'\n onClick={onDismiss}\n ref={backButtonRef}\n >\n <Icon name={rtl ? 'arrow-right' : 'arrow-left'} />\n </Button>\n\n <Text variant='h2'>{t('your_chats')}</Text>\n </Flex>\n\n {error ? <ErrorState message={error} /> : renderComponent}\n </StyledHistoryContainer>\n );\n }\n);\n\nexport default ConversationHistory;\n"]}
1
+ {"version":3,"file":"ConversationHistory.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/ConversationHistory.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useEffect, useRef } from 'react';\nimport type { PropsWithoutRef } from 'react';\n\nimport {\n Button,\n EmptyState,\n ErrorState,\n Flex,\n getFocusables,\n Icon,\n Progress,\n registerIcon,\n Text,\n useArrows,\n useI18n,\n useItemIntersection,\n useOuterEvent,\n useTestIds\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent } from '@pega/cosmos-react-core';\nimport * as TimesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';\n\nimport {\n StyledHistoryContainer,\n StyledList,\n StyledInnerList,\n StyledLoadingItem,\n StyledHistorySummaryListItem,\n StyledGroupHeader\n} from './GenAICoach.styles';\nimport type { ConversationHistoryProps } from './GenAICoach.types';\nimport { getConversationHistoryTestIds } from './GenAICoach.test-ids';\n\nregisterIcon(TimesIcon);\n\nconst ConversationHistory: ForwardRefForwardPropsComponent<ConversationHistoryProps> = forwardRef(\n function ConversationHistory(\n {\n testId,\n data = [],\n onDismiss,\n loading = false,\n loadMore,\n inFullPage = false,\n onItemClick,\n selectedItemId,\n error,\n ...restProps\n }: PropsWithoutRef<ConversationHistoryProps>,\n ref: ConversationHistoryProps['ref']\n ) {\n const testIds = useTestIds(testId, getConversationHistoryTestIds);\n const t = useI18n();\n\n const focusInMessageListRef = useRef(false);\n const ulRef = useRef<HTMLUListElement>(null);\n const closeButtonRef = useRef<HTMLButtonElement>(null);\n const selector = ':scope > li > ul > li';\n const totalConversations = data.reduce((sum, section) => sum + section.conversations.length, 0);\n\n useArrows(\n ulRef,\n {\n selector\n },\n [totalConversations, data[0]?.conversations.length]\n );\n\n useItemIntersection(\n ulRef,\n totalConversations - 1,\n () => {\n if (!loading) loadMore?.();\n },\n selector\n );\n\n useOuterEvent('mousedown', [ulRef.current], () => {\n focusInMessageListRef.current = false;\n });\n\n useEffect(() => {\n if (closeButtonRef.current) closeButtonRef.current.focus();\n }, []);\n\n const loadingOrEmptyElement = loading ? (\n <Progress placement='block' liveConfig={{ contextualLabel: t('conversation') }} />\n ) : (\n <EmptyState message={t('no_conversations_found')} />\n );\n\n const renderComponent =\n data.length > 0 ? (\n <StyledList\n container={{ direction: 'column', pad: [undefined, undefined, 1], gap: 1 }}\n forwardedAs='ul'\n aria-label={`${t('history')} ${t('view')}`}\n onFocus={() => {\n if (selectedItemId && !focusInMessageListRef.current) {\n focusInMessageListRef.current = true;\n ulRef.current?.querySelector<HTMLLIElement>(`li[id=\"${selectedItemId}\"]`)?.focus();\n }\n }}\n onKeyDown={(e: KeyboardEvent) => {\n if (e.key === 'Tab') {\n focusInMessageListRef.current = false;\n if (e.shiftKey) {\n const prevElement = ulRef.current?.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 }\n }}\n item={{ grow: 1 }}\n ref={ulRef}\n >\n {data.map(item => {\n return (\n <Flex\n data-testid={testIds.historyGroup}\n container={{ direction: 'column' }}\n as='li'\n role='presentation'\n key={item.id}\n >\n <Flex\n container={{ alignItems: 'center', pad: [0.5, 1] }}\n as={StyledGroupHeader}\n id={item.id}\n >\n {item.section}\n </Flex>\n\n <StyledInnerList aria-labelledby={item.id}>\n {item.conversations.map(conversation => {\n const activeElement = selectedItemId === conversation.id;\n return (\n <StyledHistorySummaryListItem\n key={conversation.id}\n id={conversation.id}\n forwardedAs='li'\n aria-selected={activeElement}\n primary={<Text>{conversation.title}</Text>}\n onClick={() => {\n onItemClick?.(conversation.id);\n }}\n aria-label={conversation.title}\n onKeyDown={(e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onItemClick?.(conversation.id);\n e.preventDefault();\n }\n }}\n />\n );\n })}\n </StyledInnerList>\n </Flex>\n );\n })}\n {loading && <StyledLoadingItem>{loadingOrEmptyElement}</StyledLoadingItem>}\n </StyledList>\n ) : (\n loadingOrEmptyElement\n );\n\n return (\n <StyledHistoryContainer\n {...restProps}\n data-testid={testIds.root}\n container={{ direction: 'column' }}\n inFullPage={inFullPage}\n item={{ grow: 1 }}\n ref={ref}\n >\n <Flex\n container={{\n pad: [1, 2],\n gap: 2,\n justify: 'between',\n alignItems: 'center'\n }}\n >\n <Text variant='h2'>{t('your_chats')}</Text>\n <Button\n data-testid={testIds.close}\n label={t('close')}\n icon\n variant='simple'\n onClick={onDismiss}\n ref={closeButtonRef}\n >\n <Icon name='times' />\n </Button>\n </Flex>\n\n {error ? <ErrorState message={error} /> : renderComponent}\n </StyledHistoryContainer>\n );\n }\n);\n\nexport default ConversationHistory;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GenAICoach.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.tsx"],"names":[],"mappings":"AAuGA,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,GAAG,CAAC;AAmBhF,eAAO,MAAM,SAAS,+CA2GrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,+CAQ5B,CAAC;iCAqkDyB,eAAe;;;AAQ1C,wBAA6D"}
1
+ {"version":3,"file":"GenAICoach.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/GenAICoach.tsx"],"names":[],"mappings":"AAuGA,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,GAAG,CAAC;AAmBhF,eAAO,MAAM,SAAS,+CA2GrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,+CAQ5B,CAAC;iCAokDyB,eAAe;;;AAQ1C,wBAA6D"}