@pega/cosmos-react-work 9.0.0-build.9.9 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/AppAnnouncement/AppAnnouncement.d.ts +2 -1
- package/lib/components/AppAnnouncement/AppAnnouncement.d.ts.map +1 -1
- package/lib/components/AppAnnouncement/AppAnnouncement.js +36 -21
- package/lib/components/AppAnnouncement/AppAnnouncement.js.map +1 -1
- package/lib/components/Article/ArticleRating.d.ts +1 -1
- package/lib/components/Article/ArticleRating.d.ts.map +1 -1
- package/lib/components/ArticleList/AIArticleSummary.d.ts +3 -1
- package/lib/components/ArticleList/AIArticleSummary.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleBuddy.d.ts +1 -1
- package/lib/components/ArticleList/ArticleBuddy.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleBuddy.js +5 -1
- package/lib/components/ArticleList/ArticleBuddy.js.map +1 -1
- package/lib/components/ArticleList/ArticleBuddyList.d.ts +1 -1
- package/lib/components/ArticleList/ArticleBuddyList.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleBuddyResponse.d.ts +189 -3
- package/lib/components/ArticleList/ArticleBuddyResponse.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleBuddyResponse.js +1 -1
- package/lib/components/ArticleList/ArticleBuddyResponse.js.map +1 -1
- package/lib/components/ArticleList/ArticleFeedback.d.ts +3 -1
- package/lib/components/ArticleList/ArticleFeedback.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleList.d.ts +2 -2
- package/lib/components/ArticleList/ArticleList.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleList.js +6 -0
- package/lib/components/ArticleList/ArticleList.js.map +1 -1
- package/lib/components/ArticleList/ArticleList.types.d.ts +17 -2
- package/lib/components/ArticleList/ArticleList.types.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleList.types.js.map +1 -1
- package/lib/components/ArticleList/ArticleListHeader.d.ts +183 -1
- package/lib/components/ArticleList/ArticleListHeader.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleSummary.styles.d.ts +2 -2
- package/lib/components/ArticleList/ArticleSummary.styles.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleSummaryHeader.d.ts.map +1 -1
- package/lib/components/ArticleList/ArticleSummaryHeader.js +3 -1
- package/lib/components/ArticleList/ArticleSummaryHeader.js.map +1 -1
- package/lib/components/ArticleList/QuestionList.d.ts +5 -3
- package/lib/components/ArticleList/QuestionList.d.ts.map +1 -1
- package/lib/components/ArticleList/RelatedQuestions.d.ts +4 -2
- package/lib/components/ArticleList/RelatedQuestions.d.ts.map +1 -1
- package/lib/components/Assignments/Assignments.d.ts +2 -2
- package/lib/components/Assignments/Assignments.d.ts.map +1 -1
- package/lib/components/Assignments/Assignments.js +1 -1
- package/lib/components/Assignments/Assignments.js.map +1 -1
- package/lib/components/Assignments/Assignments.styles.d.ts +7 -3
- package/lib/components/Assignments/Assignments.styles.d.ts.map +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.d.ts +2 -2
- package/lib/components/CaseHierarchy/CaseHierarchy.d.ts.map +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.js +4 -3
- package/lib/components/CaseHierarchy/CaseHierarchy.js.map +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.styles.d.ts +7 -3
- package/lib/components/CaseHierarchy/CaseHierarchy.styles.d.ts.map +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.styles.js +9 -7
- package/lib/components/CaseHierarchy/CaseHierarchy.styles.js.map +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.test-ids.d.ts +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.test-ids.d.ts.map +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.test-ids.js +2 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.test-ids.js.map +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.types.d.ts +7 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.types.d.ts.map +1 -1
- package/lib/components/CaseHierarchy/CaseHierarchy.types.js.map +1 -1
- package/lib/components/CasePreview/CasePreview.d.ts +1 -1
- package/lib/components/CasePreview/CasePreview.d.ts.map +1 -1
- package/lib/components/CasePreview/CasePreview.js +83 -115
- package/lib/components/CasePreview/CasePreview.js.map +1 -1
- package/lib/components/CaseView/CaseHeader/CaseHeader.d.ts.map +1 -1
- package/lib/components/CaseView/CaseHeader/CaseHeader.js +97 -27
- package/lib/components/CaseView/CaseHeader/CaseHeader.js.map +1 -1
- package/lib/components/CaseView/CaseHeader/Summary.d.ts.map +1 -1
- package/lib/components/CaseView/CaseHeader/Summary.js +8 -1
- package/lib/components/CaseView/CaseHeader/Summary.js.map +1 -1
- package/lib/components/CaseView/CaseSummaryFields.js +1 -1
- package/lib/components/CaseView/CaseSummaryFields.js.map +1 -1
- package/lib/components/CaseView/CaseView.d.ts.map +1 -1
- package/lib/components/CaseView/CaseView.js +49 -20
- package/lib/components/CaseView/CaseView.js.map +1 -1
- package/lib/components/CaseView/CaseView.styles.d.ts +83 -47
- package/lib/components/CaseView/CaseView.styles.d.ts.map +1 -1
- package/lib/components/CaseView/CaseView.styles.js +329 -122
- package/lib/components/CaseView/CaseView.styles.js.map +1 -1
- package/lib/components/CaseView/CaseView.types.d.ts +24 -8
- package/lib/components/CaseView/CaseView.types.d.ts.map +1 -1
- package/lib/components/CaseView/CaseView.types.js.map +1 -1
- package/lib/components/CaseView/UtilitiesSummary.d.ts +1 -1
- package/lib/components/CaseView/UtilitiesSummary.d.ts.map +1 -1
- package/lib/components/CaseView/UtilitiesSummary.js +14 -4
- package/lib/components/CaseView/UtilitiesSummary.js.map +1 -1
- package/lib/components/CaseView/UtilitySummaryItemDialog.d.ts.map +1 -1
- package/lib/components/CaseView/UtilitySummaryItemDialog.js +10 -4
- package/lib/components/CaseView/UtilitySummaryItemDialog.js.map +1 -1
- package/lib/components/ConfigurableLayout/LayoutCell.d.ts.map +1 -1
- package/lib/components/ConfigurableLayout/LayoutCell.js +25 -25
- package/lib/components/ConfigurableLayout/LayoutCell.js.map +1 -1
- package/lib/components/Confirmation/Confirmation.d.ts +10 -0
- package/lib/components/Confirmation/Confirmation.d.ts.map +1 -1
- package/lib/components/Confirmation/Confirmation.js +2 -2
- package/lib/components/Confirmation/Confirmation.js.map +1 -1
- package/lib/components/Confirmation/index.d.ts +1 -1
- package/lib/components/Confirmation/index.d.ts.map +1 -1
- package/lib/components/Confirmation/index.js.map +1 -1
- package/lib/components/Details/Details.d.ts +3 -2
- package/lib/components/Details/Details.d.ts.map +1 -1
- package/lib/components/Details/Details.js +6 -5
- package/lib/components/Details/Details.js.map +1 -1
- package/lib/components/Details/Details.styles.d.ts +17 -15
- package/lib/components/Details/Details.styles.d.ts.map +1 -1
- package/lib/components/Details/Details.styles.js +28 -15
- package/lib/components/Details/Details.styles.js.map +1 -1
- package/lib/components/Details/Details.test-ids.d.ts +1 -1
- package/lib/components/Details/Details.test-ids.d.ts.map +1 -1
- package/lib/components/Details/Details.test-ids.js +2 -1
- package/lib/components/Details/Details.test-ids.js.map +1 -1
- package/lib/components/Details/DetailsList.d.ts.map +1 -1
- package/lib/components/Details/DetailsList.js +1 -5
- package/lib/components/Details/DetailsList.js.map +1 -1
- package/lib/components/GenAICoach/ActiveCases.d.ts +5 -0
- package/lib/components/GenAICoach/ActiveCases.d.ts.map +1 -0
- package/lib/components/GenAICoach/ActiveCases.js +50 -0
- package/lib/components/GenAICoach/ActiveCases.js.map +1 -0
- package/lib/components/GenAICoach/CaseWorkflow.d.ts +5 -0
- package/lib/components/GenAICoach/CaseWorkflow.d.ts.map +1 -0
- package/lib/components/GenAICoach/CaseWorkflow.js +111 -0
- package/lib/components/GenAICoach/CaseWorkflow.js.map +1 -0
- package/lib/components/GenAICoach/ConversationHistory.d.ts.map +1 -1
- package/lib/components/GenAICoach/ConversationHistory.js +11 -13
- package/lib/components/GenAICoach/ConversationHistory.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.d.ts +4 -3
- package/lib/components/GenAICoach/GenAICoach.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.js +721 -141
- package/lib/components/GenAICoach/GenAICoach.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.styles.d.ts +1639 -35
- package/lib/components/GenAICoach/GenAICoach.styles.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.styles.js +867 -82
- package/lib/components/GenAICoach/GenAICoach.styles.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.test-ids.d.ts +3 -2
- package/lib/components/GenAICoach/GenAICoach.test-ids.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.test-ids.js +6 -1
- package/lib/components/GenAICoach/GenAICoach.test-ids.js.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.types.d.ts +215 -9
- package/lib/components/GenAICoach/GenAICoach.types.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAICoach.types.js.map +1 -1
- package/lib/components/GenAICoach/GenAIMessage.d.ts +6 -0
- package/lib/components/GenAICoach/GenAIMessage.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAIMessage.js +101 -52
- package/lib/components/GenAICoach/GenAIMessage.js.map +1 -1
- package/lib/components/GenAICoach/GenAIMessageFeedback.d.ts +4 -0
- package/lib/components/GenAICoach/GenAIMessageFeedback.d.ts.map +1 -0
- package/lib/components/GenAICoach/GenAIMessageFeedback.js +95 -0
- package/lib/components/GenAICoach/GenAIMessageFeedback.js.map +1 -0
- package/lib/components/GenAICoach/GenAIMessageProgress.d.ts +4 -1
- package/lib/components/GenAICoach/GenAIMessageProgress.d.ts.map +1 -1
- package/lib/components/GenAICoach/GenAIMessageProgress.js +11 -35
- package/lib/components/GenAICoach/GenAIMessageProgress.js.map +1 -1
- package/lib/components/GenAICoach/InitialSuggestedMessage.d.ts.map +1 -1
- package/lib/components/GenAICoach/InitialSuggestedMessage.js +5 -6
- package/lib/components/GenAICoach/InitialSuggestedMessage.js.map +1 -1
- package/lib/components/GenAICoach/PortalAgentSplitView.d.ts +6 -0
- package/lib/components/GenAICoach/PortalAgentSplitView.d.ts.map +1 -0
- package/lib/components/GenAICoach/PortalAgentSplitView.js +75 -0
- package/lib/components/GenAICoach/PortalAgentSplitView.js.map +1 -0
- package/lib/components/GenAICoach/Questionnaire.d.ts +4 -0
- package/lib/components/GenAICoach/Questionnaire.d.ts.map +1 -0
- package/lib/components/GenAICoach/Questionnaire.js +155 -0
- package/lib/components/GenAICoach/Questionnaire.js.map +1 -0
- package/lib/components/GenAICoach/ToolCandidates.d.ts +4 -0
- package/lib/components/GenAICoach/ToolCandidates.d.ts.map +1 -0
- package/lib/components/GenAICoach/ToolCandidates.js +19 -0
- package/lib/components/GenAICoach/ToolCandidates.js.map +1 -0
- package/lib/components/GenAICoach/ToolConfirmationMessage.d.ts +4 -0
- package/lib/components/GenAICoach/ToolConfirmationMessage.d.ts.map +1 -0
- package/lib/components/GenAICoach/ToolConfirmationMessage.js +20 -0
- package/lib/components/GenAICoach/ToolConfirmationMessage.js.map +1 -0
- package/lib/components/GenAICoach/ToolDetails.d.ts +5 -0
- package/lib/components/GenAICoach/ToolDetails.d.ts.map +1 -0
- package/lib/components/GenAICoach/ToolDetails.js +99 -0
- package/lib/components/GenAICoach/ToolDetails.js.map +1 -0
- package/lib/components/GenAICoach/index.d.ts +5 -3
- package/lib/components/GenAICoach/index.d.ts.map +1 -1
- package/lib/components/GenAICoach/index.js +4 -2
- package/lib/components/GenAICoach/index.js.map +1 -1
- package/lib/components/HierarchicalAssignments/Assignments.styles.d.ts +55 -34
- package/lib/components/HierarchicalAssignments/Assignments.styles.d.ts.map +1 -1
- package/lib/components/HierarchicalAssignments/Assignments.styles.js +41 -11
- package/lib/components/HierarchicalAssignments/Assignments.styles.js.map +1 -1
- package/lib/components/HierarchicalAssignments/HierarchicalAssignments.types.d.ts +2 -0
- package/lib/components/HierarchicalAssignments/HierarchicalAssignments.types.d.ts.map +1 -1
- package/lib/components/HierarchicalAssignments/HierarchicalAssignments.types.js.map +1 -1
- package/lib/components/HierarchicalAssignments/nodeItems/AssignmentItem.d.ts +1 -1
- package/lib/components/HierarchicalAssignments/nodeItems/AssignmentItem.d.ts.map +1 -1
- package/lib/components/HierarchicalAssignments/nodeItems/AssignmentItem.js +7 -4
- package/lib/components/HierarchicalAssignments/nodeItems/AssignmentItem.js.map +1 -1
- package/lib/components/HierarchicalAssignments/nodeItems/CaseDetail.d.ts.map +1 -1
- package/lib/components/HierarchicalAssignments/nodeItems/CaseDetail.js +2 -2
- package/lib/components/HierarchicalAssignments/nodeItems/CaseDetail.js.map +1 -1
- package/lib/components/IntelligentGuidance/IntelligentGuidance.d.ts.map +1 -1
- package/lib/components/IntelligentGuidance/IntelligentGuidance.js +1 -1
- package/lib/components/IntelligentGuidance/IntelligentGuidance.js.map +1 -1
- package/lib/components/IntelligentGuidance/IntelligentGuidance.styles.d.ts +9 -5
- package/lib/components/IntelligentGuidance/IntelligentGuidance.styles.d.ts.map +1 -1
- package/lib/components/IntelligentGuidance/IntelligentGuidance.styles.js +17 -3
- package/lib/components/IntelligentGuidance/IntelligentGuidance.styles.js.map +1 -1
- package/lib/components/InteractionNotification/InteractionNotification.d.ts +31 -8
- package/lib/components/InteractionNotification/InteractionNotification.d.ts.map +1 -1
- package/lib/components/InteractionNotification/InteractionNotification.js +17 -10
- package/lib/components/InteractionNotification/InteractionNotification.js.map +1 -1
- package/lib/components/Predictions/Predictions.d.ts.map +1 -1
- package/lib/components/Predictions/Predictions.js +11 -2
- package/lib/components/Predictions/Predictions.js.map +1 -1
- package/lib/components/SearchResults/ActiveFilter.d.ts +1 -1
- package/lib/components/SearchResults/ActiveFilter.d.ts.map +1 -1
- package/lib/components/SearchResults/Filter.d.ts.map +1 -1
- package/lib/components/SearchResults/Filter.js +1 -1
- package/lib/components/SearchResults/Filter.js.map +1 -1
- package/lib/components/SearchResults/SearchResult.d.ts.map +1 -1
- package/lib/components/SearchResults/SearchResult.js +14 -6
- package/lib/components/SearchResults/SearchResult.js.map +1 -1
- package/lib/components/SearchResults/SearchResults.d.ts.map +1 -1
- package/lib/components/SearchResults/SearchResults.js +18 -3
- package/lib/components/SearchResults/SearchResults.js.map +1 -1
- package/lib/components/SearchResults/SearchResults.styles.d.ts +12 -10
- package/lib/components/SearchResults/SearchResults.styles.d.ts.map +1 -1
- package/lib/components/Shortcuts/Shortcuts.d.ts +7 -0
- package/lib/components/Shortcuts/Shortcuts.d.ts.map +1 -0
- package/lib/components/Shortcuts/Shortcuts.js +47 -0
- package/lib/components/Shortcuts/Shortcuts.js.map +1 -0
- package/lib/components/Shortcuts/Shortcuts.styles.d.ts +22 -0
- package/lib/components/Shortcuts/Shortcuts.styles.d.ts.map +1 -0
- package/lib/components/Shortcuts/Shortcuts.styles.js +114 -0
- package/lib/components/Shortcuts/Shortcuts.styles.js.map +1 -0
- package/lib/components/Shortcuts/Shortcuts.test-ids.d.ts +2 -0
- package/lib/components/Shortcuts/Shortcuts.test-ids.d.ts.map +1 -0
- package/lib/components/Shortcuts/Shortcuts.test-ids.js +8 -0
- package/lib/components/Shortcuts/Shortcuts.test-ids.js.map +1 -0
- package/lib/components/Shortcuts/Shortcuts.types.d.ts +64 -0
- package/lib/components/Shortcuts/Shortcuts.types.d.ts.map +1 -0
- package/lib/components/Shortcuts/Shortcuts.types.js +2 -0
- package/lib/components/Shortcuts/Shortcuts.types.js.map +1 -0
- package/lib/components/Shortcuts/index.d.ts +3 -0
- package/lib/components/Shortcuts/index.d.ts.map +1 -0
- package/lib/components/Shortcuts/index.js +2 -0
- package/lib/components/Shortcuts/index.js.map +1 -0
- package/lib/components/Stages/Stages.d.ts.map +1 -1
- package/lib/components/Stages/Stages.js +37 -12
- package/lib/components/Stages/Stages.js.map +1 -1
- package/lib/components/Stages/Stages.styles.d.ts +22 -15
- package/lib/components/Stages/Stages.styles.d.ts.map +1 -1
- package/lib/components/Stages/Stages.styles.js +285 -119
- package/lib/components/Stages/Stages.styles.js.map +1 -1
- package/lib/components/Stages/Stages.types.d.ts +5 -0
- package/lib/components/Stages/Stages.types.d.ts.map +1 -1
- package/lib/components/Stages/Stages.types.js.map +1 -1
- package/lib/components/Stakeholders/Stakeholders.d.ts.map +1 -1
- package/lib/components/Stakeholders/Stakeholders.js +109 -145
- package/lib/components/Stakeholders/Stakeholders.js.map +1 -1
- package/lib/components/Tags/Tags.d.ts +2 -2
- package/lib/components/Tags/Tags.d.ts.map +1 -1
- package/lib/components/Tags/Tags.js +12 -2
- package/lib/components/Tags/Tags.js.map +1 -1
- package/lib/components/Tasks/TaskList.d.ts +10 -3
- package/lib/components/Tasks/TaskList.d.ts.map +1 -1
- package/lib/components/Tasks/TaskList.js +59 -5
- package/lib/components/Tasks/TaskList.js.map +1 -1
- package/lib/components/Tasks/Tasks.d.ts +10 -3
- package/lib/components/Tasks/Tasks.d.ts.map +1 -1
- package/lib/components/Tasks/Tasks.js +29 -5
- package/lib/components/Tasks/Tasks.js.map +1 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.d.ts.map +1 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.js +3 -2
- package/lib/components/UtilitiesLayout/UtilitiesLayout.js.map +1 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.styles.d.ts +2 -2
- package/lib/components/UtilitiesLayout/UtilitiesLayout.styles.d.ts.map +1 -1
- package/lib/components/UtilitiesLayout/UtilitiesLayout.styles.js +3 -2
- package/lib/components/UtilitiesLayout/UtilitiesLayout.styles.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/package.json +6 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InitialSuggestedMessage.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/InitialSuggestedMessage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"InitialSuggestedMessage.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/InitialSuggestedMessage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE3F,MAAM,uBAAuB,GAC3B,SAAS,cAAc,CAAC,EACtB,EAAE,EACF,OAAO,EACP,MAAM,EACN,MAAM,EACwC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAEzD,OAAO,CACL,KAAC,0BAA0B,IACzB,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1B,CAAC,EACD,SAAS,EAAE,CAAC,CAAgB,EAAE,EAAE;YAC9B,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBACtB,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,iBACY,OAAO,CAAC,IAAI,YAEzB,KAAC,wBAAwB,cAAE,OAAO,GAA4B,GACnC,CAC9B,CAAC;AACJ,CAAC,CAAC;AAEJ,eAAe,uBAAuB,CAAC","sourcesContent":["import type { FunctionComponent, PropsWithoutRef } from 'react';\n\nimport { useTestIds } from '@pega/cosmos-react-core';\n\nimport type { InitialSuggestedMessageProps } from './GenAICoach.types';\nimport { getGenAICoachTestIds } from './GenAICoach.test-ids';\nimport { StyledInitialMessageButton, StyledInitialMessageText } from './GenAICoach.styles';\n\nconst InitialSuggestedMessage: FunctionComponent<InitialSuggestedMessageProps> =\n function SuggestionCard({\n id,\n message,\n testId,\n onSend\n }: PropsWithoutRef<InitialSuggestedMessageProps>) {\n const testIds = useTestIds(testId, getGenAICoachTestIds);\n\n return (\n <StyledInitialMessageButton\n onClick={() => {\n onSend({ id, message });\n }}\n onKeyDown={(e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onSend({ id, message });\n }\n }}\n data-testid={testIds.root}\n >\n <StyledInitialMessageText>{message}</StyledInitialMessageText>\n </StyledInitialMessageButton>\n );\n };\n\nexport default InitialSuggestedMessage;\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PortalAgentSplitViewProps } from './GenAICoach.types';
|
|
2
|
+
declare const _default: (({ testId, children, pagePanel, showAgentPanel, initialWidth, onResizeEnd }: PortalAgentSplitViewProps) => import("react/jsx-runtime").JSX.Element) & {
|
|
3
|
+
getTestIds: (testIdProp?: import("@pega/cosmos-react-core").TestIdProp["testId"]) => import("@pega/cosmos-react-core").TestIdsRecord<readonly ["split-container", "main-region"]>;
|
|
4
|
+
};
|
|
5
|
+
export default _default;
|
|
6
|
+
//# sourceMappingURL=PortalAgentSplitView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalAgentSplitView.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/PortalAgentSplitView.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;sGASjE,yBAAyB;;;AA4I5B,wBAAiF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
3
|
+
import { remToPx, stripUnit } from 'polished';
|
|
4
|
+
import { useDirection, useTestIds, ResizeHandle, withTestIds, useI18n } from '@pega/cosmos-react-core';
|
|
5
|
+
import { portalAgentMinWidth, resizeDrawerKeyboardStep } from '@pega/cosmos-react-core/lib/styles/constants';
|
|
6
|
+
import { StyledPortalAgentRegion, StyledPortalMainRegion, StyledPortalSeparator, StyledPortalSplitContainer } from './GenAICoach.styles';
|
|
7
|
+
import { getPortalAgentSplitViewTestIds } from './GenAICoach.test-ids';
|
|
8
|
+
const PortalAgentSplitView = ({ testId, children, pagePanel, showAgentPanel, initialWidth, onResizeEnd }) => {
|
|
9
|
+
const t = useI18n();
|
|
10
|
+
const { ltr } = useDirection();
|
|
11
|
+
const testIds = useTestIds(testId, getPortalAgentSplitViewTestIds);
|
|
12
|
+
const regionMinWidthPx = Number(stripUnit(remToPx(portalAgentMinWidth)));
|
|
13
|
+
const splitContainerRef = useRef(null);
|
|
14
|
+
const agentPanelRef = useRef(null);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const container = splitContainerRef.current;
|
|
17
|
+
if (!container || !initialWidth)
|
|
18
|
+
return;
|
|
19
|
+
container.style.setProperty('--region-a-width', initialWidth);
|
|
20
|
+
}, [initialWidth]);
|
|
21
|
+
const handleRegionResize = useCallback((e) => {
|
|
22
|
+
const container = splitContainerRef.current;
|
|
23
|
+
const regionAEl = agentPanelRef.current;
|
|
24
|
+
if (!container || !regionAEl)
|
|
25
|
+
return;
|
|
26
|
+
const ownerWindow = container.ownerDocument.defaultView;
|
|
27
|
+
if (!ownerWindow)
|
|
28
|
+
return;
|
|
29
|
+
const startX = e.clientX;
|
|
30
|
+
const startWidth = regionAEl.getBoundingClientRect().width;
|
|
31
|
+
const ac = new AbortController();
|
|
32
|
+
ownerWindow.addEventListener('mousemove', moveEvent => {
|
|
33
|
+
const containerWidth = container.getBoundingClientRect().width;
|
|
34
|
+
const maxPx = containerWidth - regionMinWidthPx;
|
|
35
|
+
const delta = ltr ? moveEvent.clientX - startX : startX - moveEvent.clientX;
|
|
36
|
+
const newWidth = Math.max(regionMinWidthPx, Math.min(maxPx, startWidth + delta));
|
|
37
|
+
container.style.setProperty('--region-a-width', `${((newWidth / containerWidth) * 100).toFixed(4)}%`);
|
|
38
|
+
}, { passive: true, signal: ac.signal });
|
|
39
|
+
ownerWindow.addEventListener('mouseup', () => {
|
|
40
|
+
const finalWidth = container.style.getPropertyValue('--region-a-width');
|
|
41
|
+
if (finalWidth) {
|
|
42
|
+
onResizeEnd?.(finalWidth);
|
|
43
|
+
}
|
|
44
|
+
ac.abort();
|
|
45
|
+
}, { once: true });
|
|
46
|
+
}, [ltr, onResizeEnd, regionMinWidthPx]);
|
|
47
|
+
const handleRegionKeyboardResize = useCallback((e, grabbed) => {
|
|
48
|
+
const container = splitContainerRef.current;
|
|
49
|
+
if (!container)
|
|
50
|
+
return;
|
|
51
|
+
if (e.code === 'Space' && grabbed) {
|
|
52
|
+
const finalWidth = container.style.getPropertyValue('--region-a-width');
|
|
53
|
+
if (finalWidth) {
|
|
54
|
+
onResizeEnd?.(finalWidth);
|
|
55
|
+
}
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (!grabbed || !agentPanelRef.current)
|
|
59
|
+
return;
|
|
60
|
+
if (e.code !== 'ArrowLeft' && e.code !== 'ArrowRight')
|
|
61
|
+
return;
|
|
62
|
+
e.preventDefault();
|
|
63
|
+
const containerWidth = container.getBoundingClientRect().width;
|
|
64
|
+
const maxPx = containerWidth - regionMinWidthPx;
|
|
65
|
+
const resizeStep = containerWidth * resizeDrawerKeyboardStep;
|
|
66
|
+
const currentWidth = agentPanelRef.current.getBoundingClientRect().width;
|
|
67
|
+
const direction = (e.code === 'ArrowRight' ? 1 : -1) * (ltr ? 1 : -1);
|
|
68
|
+
const newWidth = Math.max(regionMinWidthPx, Math.min(maxPx, currentWidth + direction * resizeStep));
|
|
69
|
+
const nextWidth = `${((newWidth / containerWidth) * 100).toFixed(4)}%`;
|
|
70
|
+
container.style.setProperty('--region-a-width', nextWidth);
|
|
71
|
+
}, [ltr, onResizeEnd, regionMinWidthPx, resizeDrawerKeyboardStep]);
|
|
72
|
+
return (_jsxs(StyledPortalSplitContainer, { ref: splitContainerRef, "data-testid": testIds.splitContainer, children: [_jsx(StyledPortalAgentRegion, { ref: agentPanelRef, agentVisible: showAgentPanel, mainVisible: pagePanel.visible, "aria-hidden": !showAgentPanel, inert: !showAgentPanel ? '' : undefined, children: children }), showAgentPanel && pagePanel.visible && (_jsx(StyledPortalSeparator, { children: _jsx(ResizeHandle, { onMouseDown: handleRegionResize, onKeyDown: handleRegionKeyboardResize, contextualLabel: t('resize_noun', [t('panel')]) }) })), _jsx(StyledPortalMainRegion, { "data-testid": testIds.mainRegion, "aria-hidden": !pagePanel.visible, inert: !pagePanel.visible ? '' : undefined, children: pagePanel.content })] }));
|
|
73
|
+
};
|
|
74
|
+
export default withTestIds(PortalAgentSplitView, getPortalAgentSplitViewTestIds);
|
|
75
|
+
//# sourceMappingURL=PortalAgentSplitView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalAgentSplitView.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/PortalAgentSplitView.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport type { KeyboardEvent, MouseEvent } from 'react';\nimport { remToPx, stripUnit } from 'polished';\n\nimport {\n useDirection,\n useTestIds,\n ResizeHandle,\n withTestIds,\n useI18n\n} from '@pega/cosmos-react-core';\nimport {\n portalAgentMinWidth,\n resizeDrawerKeyboardStep\n} from '@pega/cosmos-react-core/lib/styles/constants';\n\nimport {\n StyledPortalAgentRegion,\n StyledPortalMainRegion,\n StyledPortalSeparator,\n StyledPortalSplitContainer\n} from './GenAICoach.styles';\nimport { getPortalAgentSplitViewTestIds } from './GenAICoach.test-ids';\nimport type { PortalAgentSplitViewProps } from './GenAICoach.types';\n\nconst PortalAgentSplitView = ({\n testId,\n children,\n pagePanel,\n showAgentPanel,\n initialWidth,\n onResizeEnd\n}: PortalAgentSplitViewProps) => {\n const t = useI18n();\n const { ltr } = useDirection();\n const testIds = useTestIds(testId, getPortalAgentSplitViewTestIds);\n\n const regionMinWidthPx = Number(stripUnit(remToPx(portalAgentMinWidth)));\n\n const splitContainerRef = useRef<HTMLDivElement>(null);\n const agentPanelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const container = splitContainerRef.current;\n\n if (!container || !initialWidth) return;\n\n container.style.setProperty('--region-a-width', initialWidth);\n }, [initialWidth]);\n\n const handleRegionResize = useCallback(\n (e: MouseEvent) => {\n const container = splitContainerRef.current;\n const regionAEl = agentPanelRef.current;\n\n if (!container || !regionAEl) return;\n\n const ownerWindow = container.ownerDocument.defaultView;\n\n if (!ownerWindow) return;\n\n const startX = e.clientX;\n const startWidth = regionAEl.getBoundingClientRect().width;\n const ac = new AbortController();\n\n ownerWindow.addEventListener(\n 'mousemove',\n moveEvent => {\n const containerWidth = container.getBoundingClientRect().width;\n const maxPx = containerWidth - regionMinWidthPx;\n\n const delta = ltr ? moveEvent.clientX - startX : startX - moveEvent.clientX;\n const newWidth = Math.max(regionMinWidthPx, Math.min(maxPx, startWidth + delta));\n\n container.style.setProperty(\n '--region-a-width',\n `${((newWidth / containerWidth) * 100).toFixed(4)}%`\n );\n },\n { passive: true, signal: ac.signal }\n );\n\n ownerWindow.addEventListener(\n 'mouseup',\n () => {\n const finalWidth = container.style.getPropertyValue('--region-a-width');\n\n if (finalWidth) {\n onResizeEnd?.(finalWidth);\n }\n\n ac.abort();\n },\n { once: true }\n );\n },\n [ltr, onResizeEnd, regionMinWidthPx]\n );\n\n const handleRegionKeyboardResize = useCallback(\n (e: KeyboardEvent, grabbed: boolean) => {\n const container = splitContainerRef.current;\n if (!container) return;\n\n if (e.code === 'Space' && grabbed) {\n const finalWidth = container.style.getPropertyValue('--region-a-width');\n\n if (finalWidth) {\n onResizeEnd?.(finalWidth);\n }\n\n return;\n }\n\n if (!grabbed || !agentPanelRef.current) return;\n\n if (e.code !== 'ArrowLeft' && e.code !== 'ArrowRight') return;\n\n e.preventDefault();\n\n const containerWidth = container.getBoundingClientRect().width;\n const maxPx = containerWidth - regionMinWidthPx;\n\n const resizeStep = containerWidth * resizeDrawerKeyboardStep;\n const currentWidth = agentPanelRef.current.getBoundingClientRect().width;\n const direction = (e.code === 'ArrowRight' ? 1 : -1) * (ltr ? 1 : -1);\n\n const newWidth = Math.max(\n regionMinWidthPx,\n Math.min(maxPx, currentWidth + direction * resizeStep)\n );\n\n const nextWidth = `${((newWidth / containerWidth) * 100).toFixed(4)}%`;\n\n container.style.setProperty('--region-a-width', nextWidth);\n },\n [ltr, onResizeEnd, regionMinWidthPx, resizeDrawerKeyboardStep]\n );\n\n return (\n <StyledPortalSplitContainer ref={splitContainerRef} data-testid={testIds.splitContainer}>\n <StyledPortalAgentRegion\n ref={agentPanelRef}\n agentVisible={showAgentPanel}\n mainVisible={pagePanel.visible}\n aria-hidden={!showAgentPanel}\n inert={!showAgentPanel ? '' : undefined}\n >\n {children}\n </StyledPortalAgentRegion>\n\n {showAgentPanel && pagePanel.visible && (\n <StyledPortalSeparator>\n <ResizeHandle\n onMouseDown={handleRegionResize}\n onKeyDown={handleRegionKeyboardResize}\n contextualLabel={t('resize_noun', [t('panel')])}\n />\n </StyledPortalSeparator>\n )}\n\n <StyledPortalMainRegion\n data-testid={testIds.mainRegion}\n aria-hidden={!pagePanel.visible}\n inert={!pagePanel.visible ? '' : undefined}\n >\n {pagePanel.content}\n </StyledPortalMainRegion>\n </StyledPortalSplitContainer>\n );\n};\n\nexport default withTestIds(PortalAgentSplitView, getPortalAgentSplitViewTestIds);\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Questionnaire.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/Questionnaire.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAKV,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAiN5B,QAAA,MAAM,aAAa,GAAI,8BAA8B,kBAAkB,mDA4FtE,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
3
|
+
import { Button, Card, CardContent, CardFooter, CardHeader, Checkbox, CheckboxGroup, ComboBox, Flex, Icon, RadioButton, RadioButtonGroup, Text, useI18n, registerIcon } from '@pega/cosmos-react-core';
|
|
4
|
+
import * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';
|
|
5
|
+
import { StyledComboBoxWrapper, StyledQuestionBlock, StyledQuestionnaireCard } from './GenAICoach.styles';
|
|
6
|
+
registerIcon(timesIcon);
|
|
7
|
+
const getLabel = (option) => option.displayLabel ?? option.label;
|
|
8
|
+
const createEmptyAnswer = (question) => ({
|
|
9
|
+
value: [],
|
|
10
|
+
questionText: question.questionText
|
|
11
|
+
});
|
|
12
|
+
const buildInitialAnswers = (questions) => Object.fromEntries(questions.map(q => [q.field, createEmptyAnswer(q)]));
|
|
13
|
+
const splitOptions = (optionItems, maxInlineOptions) => {
|
|
14
|
+
if (optionItems.length <= maxInlineOptions) {
|
|
15
|
+
return { inlineOptions: optionItems, overflowOptions: [] };
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
inlineOptions: optionItems.slice(0, maxInlineOptions - 1),
|
|
19
|
+
overflowOptions: optionItems.slice(maxInlineOptions - 1)
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
const QuestionItem = ({ question, answer, onChange }) => {
|
|
23
|
+
const t = useI18n();
|
|
24
|
+
const isSingleSelect = question.type === 'single';
|
|
25
|
+
const maxInlineOptions = 5;
|
|
26
|
+
const { inlineOptions, overflowOptions } = splitOptions(question.optionItems, maxInlineOptions);
|
|
27
|
+
const hasOverflow = overflowOptions.length > 0;
|
|
28
|
+
const [selectedOverflowKey, setSelectedOverflowKey] = useState('');
|
|
29
|
+
const [isOverflowActive, setIsOverflowActive] = useState(false);
|
|
30
|
+
const [searchTerm, setSearchTerm] = useState('');
|
|
31
|
+
const overflowKeySet = useMemo(() => new Set(overflowOptions.map(o => o.key)), []);
|
|
32
|
+
const overflowOptionsByKey = useMemo(() => new Map(overflowOptions.map(o => [o.key, o])), []);
|
|
33
|
+
const isSelected = (key) => answer.value.includes(key);
|
|
34
|
+
const clearOverflowState = () => {
|
|
35
|
+
setSelectedOverflowKey('');
|
|
36
|
+
setSearchTerm('');
|
|
37
|
+
setIsOverflowActive(false);
|
|
38
|
+
};
|
|
39
|
+
const handleInlineSelect = (key) => {
|
|
40
|
+
clearOverflowState();
|
|
41
|
+
onChange(question.field, key, true);
|
|
42
|
+
};
|
|
43
|
+
const overflowMenuItems = useMemo(() => {
|
|
44
|
+
const search = searchTerm.toLowerCase();
|
|
45
|
+
return overflowOptions
|
|
46
|
+
.map(opt => ({
|
|
47
|
+
id: opt.key,
|
|
48
|
+
primary: getLabel(opt),
|
|
49
|
+
selected: isSelected(opt.key)
|
|
50
|
+
}))
|
|
51
|
+
.filter(item => !search || item.primary.toLowerCase().includes(search));
|
|
52
|
+
}, [searchTerm, answer]);
|
|
53
|
+
const overflowSelection = useMemo(() => {
|
|
54
|
+
if (isSingleSelect) {
|
|
55
|
+
if (!isOverflowActive || !selectedOverflowKey)
|
|
56
|
+
return undefined;
|
|
57
|
+
const option = overflowOptionsByKey.get(selectedOverflowKey);
|
|
58
|
+
const displayText = option ? getLabel(option) : selectedOverflowKey;
|
|
59
|
+
return { items: { id: selectedOverflowKey, text: displayText } };
|
|
60
|
+
}
|
|
61
|
+
const selectedOverflowValues = answer.value.filter(v => overflowKeySet.has(v));
|
|
62
|
+
if (selectedOverflowValues.length === 0)
|
|
63
|
+
return undefined;
|
|
64
|
+
return {
|
|
65
|
+
items: selectedOverflowValues.map(key => {
|
|
66
|
+
const option = overflowOptionsByKey.get(key);
|
|
67
|
+
return { id: key, text: option ? getLabel(option) : key };
|
|
68
|
+
}),
|
|
69
|
+
onRemove: (id) => onChange(question.field, id, false)
|
|
70
|
+
};
|
|
71
|
+
}, [
|
|
72
|
+
isSingleSelect,
|
|
73
|
+
isOverflowActive,
|
|
74
|
+
selectedOverflowKey,
|
|
75
|
+
answer,
|
|
76
|
+
overflowKeySet,
|
|
77
|
+
overflowOptionsByKey,
|
|
78
|
+
question.field,
|
|
79
|
+
onChange
|
|
80
|
+
]);
|
|
81
|
+
const handleOverflowSelect = useCallback((id) => {
|
|
82
|
+
if (isSingleSelect) {
|
|
83
|
+
const option = overflowOptionsByKey.get(id);
|
|
84
|
+
if (option) {
|
|
85
|
+
setSelectedOverflowKey(option.key);
|
|
86
|
+
setIsOverflowActive(true);
|
|
87
|
+
setSearchTerm('');
|
|
88
|
+
onChange(question.field, option.key, true);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
onChange(question.field, id, !isSelected(id));
|
|
93
|
+
}
|
|
94
|
+
}, [isSingleSelect, answer, question.field, onChange, overflowOptionsByKey]);
|
|
95
|
+
const activateOverflow = () => {
|
|
96
|
+
setIsOverflowActive(true);
|
|
97
|
+
};
|
|
98
|
+
const deselectAllOverflow = () => {
|
|
99
|
+
answer.value
|
|
100
|
+
.filter(v => overflowKeySet.has(v))
|
|
101
|
+
.forEach(key => onChange(question.field, key, false));
|
|
102
|
+
};
|
|
103
|
+
const otherLabel = t('other');
|
|
104
|
+
const overflowComboBox = hasOverflow ? (_jsx(StyledComboBoxWrapper, { children: _jsx(ComboBox, { labelHidden: true, label: otherLabel, placeholder: otherLabel, value: searchTerm, selected: overflowSelection, onChange: (e) => setSearchTerm(e.target.value), onBlur: () => setSearchTerm(''), mode: isSingleSelect ? undefined : 'multi-select', menu: { items: overflowMenuItems, onItemClick: handleOverflowSelect } }) })) : null;
|
|
105
|
+
const inlineRadioButtons = inlineOptions.map(option => (_jsx(RadioButton, { label: getLabel(option), name: question.field, checked: isSelected(option.key), onChange: () => handleInlineSelect(option.key) }, option.key)));
|
|
106
|
+
const inlineCheckboxes = inlineOptions.map(option => (_jsx(Checkbox, { label: getLabel(option), checked: isSelected(option.key), onChange: e => onChange(question.field, option.key, e.target.checked) }, option.key)));
|
|
107
|
+
return (_jsx(StyledQuestionBlock, { children: isSingleSelect ? (_jsx(RadioButtonGroup, { name: question.field, labelHidden: true, children: overflowComboBox
|
|
108
|
+
? [
|
|
109
|
+
...inlineRadioButtons,
|
|
110
|
+
_jsx(RadioButton, { label: overflowComboBox, name: question.field, checked: isOverflowActive, onChange: activateOverflow }, 'overflow')
|
|
111
|
+
]
|
|
112
|
+
: inlineRadioButtons })) : (_jsx(CheckboxGroup, { labelHidden: true, children: overflowComboBox
|
|
113
|
+
? [
|
|
114
|
+
...inlineCheckboxes,
|
|
115
|
+
_jsx(Checkbox, { label: overflowComboBox, checked: answer.value.some(v => overflowKeySet.has(v)), onChange: e => {
|
|
116
|
+
if (!e.target.checked)
|
|
117
|
+
deselectAllOverflow();
|
|
118
|
+
} }, 'overflow')
|
|
119
|
+
]
|
|
120
|
+
: inlineCheckboxes })) }));
|
|
121
|
+
};
|
|
122
|
+
const Questionnaire = ({ data, onChange, onCancel }) => {
|
|
123
|
+
const t = useI18n();
|
|
124
|
+
const questions = data.questions ?? [];
|
|
125
|
+
const totalSteps = questions.length;
|
|
126
|
+
const [currentStep, setCurrentStep] = useState(0);
|
|
127
|
+
const [answers, setAnswers] = useState(() => buildInitialAnswers(questions));
|
|
128
|
+
const handleChange = useCallback((field, key, selected) => {
|
|
129
|
+
setAnswers(prev => {
|
|
130
|
+
const question = questions.find(q => q.field === field);
|
|
131
|
+
const currentValues = prev[field]?.value ?? [];
|
|
132
|
+
let updatedValues;
|
|
133
|
+
if (question?.type === 'single') {
|
|
134
|
+
updatedValues = selected ? [key] : [];
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
updatedValues = selected ? [...currentValues, key] : currentValues.filter(v => v !== key);
|
|
138
|
+
}
|
|
139
|
+
const nextAnswers = {
|
|
140
|
+
...prev,
|
|
141
|
+
[field]: { ...prev[field], value: updatedValues }
|
|
142
|
+
};
|
|
143
|
+
onChange(nextAnswers);
|
|
144
|
+
return nextAnswers;
|
|
145
|
+
});
|
|
146
|
+
}, [onChange, questions]);
|
|
147
|
+
if (totalSteps === 0)
|
|
148
|
+
return null;
|
|
149
|
+
const activeQuestion = questions[currentStep];
|
|
150
|
+
const activeAnswer = answers[activeQuestion.field] ?? createEmptyAnswer(activeQuestion);
|
|
151
|
+
const isMultiStep = totalSteps > 1;
|
|
152
|
+
return (_jsxs(Card, { as: StyledQuestionnaireCard, children: [_jsx(CardHeader, { actions: _jsx(Button, { variant: 'simple', icon: true, onClick: onCancel, "aria-label": t('dismiss'), children: _jsx(Icon, { name: 'times' }) }), children: _jsx(Text, { variant: 'h4', children: activeQuestion.questionText }) }), _jsx(CardContent, { children: _jsx(QuestionItem, { question: activeQuestion, answer: activeAnswer, onChange: handleChange }, activeQuestion.field) }), isMultiStep && (_jsx(CardFooter, { justify: 'center', children: _jsxs(Flex, { container: { direction: 'row', alignItems: 'center', gap: 0.5 }, children: [_jsx(Button, { variant: 'simple', icon: true, onClick: () => setCurrentStep(s => s - 1), disabled: currentStep === 0, "aria-label": t('pagination_prev'), children: _jsx(Icon, { name: 'caret-left' }) }), _jsx(Text, { variant: 'secondary', children: t('x_of_y', [currentStep + 1, totalSteps]) }), _jsx(Button, { variant: 'simple', icon: true, onClick: () => setCurrentStep(s => s + 1), disabled: currentStep === totalSteps - 1, "aria-label": t('pagination_next'), children: _jsx(Icon, { name: 'caret-right' }) })] }) }))] }));
|
|
153
|
+
};
|
|
154
|
+
export default Questionnaire;
|
|
155
|
+
//# sourceMappingURL=Questionnaire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Questionnaire.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/Questionnaire.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { ChangeEvent } from 'react';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n Button,\n Card,\n CardContent,\n CardFooter,\n CardHeader,\n Checkbox,\n CheckboxGroup,\n ComboBox,\n Flex,\n Icon,\n RadioButton,\n RadioButtonGroup,\n Text,\n useI18n,\n registerIcon\n} from '@pega/cosmos-react-core';\nimport type { MenuItemProps } from '@pega/cosmos-react-core';\nimport * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';\n\nimport type {\n FormAnswer,\n OptionItem,\n Question,\n QuestionItemProps,\n QuestionnaireProps\n} from './GenAICoach.types';\nimport {\n StyledComboBoxWrapper,\n StyledQuestionBlock,\n StyledQuestionnaireCard\n} from './GenAICoach.styles';\n\nregisterIcon(timesIcon);\n\nconst getLabel = (option: OptionItem): string => option.displayLabel ?? option.label;\n\nconst createEmptyAnswer = (question: Question): FormAnswer => ({\n value: [],\n questionText: question.questionText\n});\n\nconst buildInitialAnswers = (questions: Question[]): Record<string, FormAnswer> =>\n Object.fromEntries(questions.map(q => [q.field, createEmptyAnswer(q)]));\n\nconst splitOptions = (\n optionItems: OptionItem[],\n maxInlineOptions: number\n): { inlineOptions: OptionItem[]; overflowOptions: OptionItem[] } => {\n if (optionItems.length <= maxInlineOptions) {\n return { inlineOptions: optionItems, overflowOptions: [] };\n }\n\n return {\n inlineOptions: optionItems.slice(0, maxInlineOptions - 1),\n overflowOptions: optionItems.slice(maxInlineOptions - 1)\n };\n};\n\nconst QuestionItem = ({ question, answer, onChange }: QuestionItemProps) => {\n const t = useI18n();\n\n const isSingleSelect = question.type === 'single';\n const maxInlineOptions = 5;\n\n const { inlineOptions, overflowOptions } = splitOptions(question.optionItems, maxInlineOptions);\n const hasOverflow = overflowOptions.length > 0;\n\n const [selectedOverflowKey, setSelectedOverflowKey] = useState('');\n const [isOverflowActive, setIsOverflowActive] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n\n const overflowKeySet = useMemo(() => new Set(overflowOptions.map(o => o.key)), []);\n const overflowOptionsByKey = useMemo(() => new Map(overflowOptions.map(o => [o.key, o])), []);\n\n const isSelected = (key: string) => answer.value.includes(key);\n\n const clearOverflowState = () => {\n setSelectedOverflowKey('');\n setSearchTerm('');\n setIsOverflowActive(false);\n };\n\n const handleInlineSelect = (key: string) => {\n clearOverflowState();\n onChange(question.field, key, true);\n };\n\n const overflowMenuItems: MenuItemProps[] = useMemo(() => {\n const search = searchTerm.toLowerCase();\n\n return overflowOptions\n .map(opt => ({\n id: opt.key,\n primary: getLabel(opt),\n selected: isSelected(opt.key)\n }))\n .filter(item => !search || item.primary.toLowerCase().includes(search));\n }, [searchTerm, answer]);\n\n const overflowSelection = useMemo(() => {\n if (isSingleSelect) {\n if (!isOverflowActive || !selectedOverflowKey) return undefined;\n\n const option = overflowOptionsByKey.get(selectedOverflowKey);\n const displayText = option ? getLabel(option) : selectedOverflowKey;\n\n return { items: { id: selectedOverflowKey, text: displayText } };\n }\n\n const selectedOverflowValues = answer.value.filter(v => overflowKeySet.has(v));\n\n if (selectedOverflowValues.length === 0) return undefined;\n\n return {\n items: selectedOverflowValues.map(key => {\n const option = overflowOptionsByKey.get(key);\n return { id: key, text: option ? getLabel(option) : key };\n }),\n onRemove: (id: MenuItemProps['id']) => onChange(question.field, id, false)\n };\n }, [\n isSingleSelect,\n isOverflowActive,\n selectedOverflowKey,\n answer,\n overflowKeySet,\n overflowOptionsByKey,\n question.field,\n onChange\n ]);\n\n const handleOverflowSelect = useCallback(\n (id: MenuItemProps['id']) => {\n if (isSingleSelect) {\n const option = overflowOptionsByKey.get(id);\n\n if (option) {\n setSelectedOverflowKey(option.key);\n setIsOverflowActive(true);\n setSearchTerm('');\n onChange(question.field, option.key, true);\n }\n } else {\n onChange(question.field, id, !isSelected(id));\n }\n },\n [isSingleSelect, answer, question.field, onChange, overflowOptionsByKey]\n );\n\n const activateOverflow = () => {\n setIsOverflowActive(true);\n };\n\n const deselectAllOverflow = () => {\n answer.value\n .filter(v => overflowKeySet.has(v))\n .forEach(key => onChange(question.field, key, false));\n };\n\n const otherLabel = t('other');\n\n const overflowComboBox = hasOverflow ? (\n <StyledComboBoxWrapper>\n <ComboBox\n labelHidden\n label={otherLabel}\n placeholder={otherLabel}\n value={searchTerm}\n selected={overflowSelection}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n onBlur={() => setSearchTerm('')}\n mode={isSingleSelect ? undefined : 'multi-select'}\n menu={{ items: overflowMenuItems, onItemClick: handleOverflowSelect }}\n />\n </StyledComboBoxWrapper>\n ) : null;\n\n const inlineRadioButtons = inlineOptions.map(option => (\n <RadioButton\n key={option.key}\n label={getLabel(option)}\n name={question.field}\n checked={isSelected(option.key)}\n onChange={() => handleInlineSelect(option.key)}\n />\n ));\n\n const inlineCheckboxes = inlineOptions.map(option => (\n <Checkbox\n key={option.key}\n label={getLabel(option)}\n checked={isSelected(option.key)}\n onChange={e => onChange(question.field, option.key, e.target.checked)}\n />\n ));\n\n return (\n <StyledQuestionBlock>\n {isSingleSelect ? (\n <RadioButtonGroup name={question.field} labelHidden>\n {overflowComboBox\n ? [\n ...inlineRadioButtons,\n <RadioButton\n key='overflow'\n label={overflowComboBox}\n name={question.field}\n checked={isOverflowActive}\n onChange={activateOverflow}\n />\n ]\n : inlineRadioButtons}\n </RadioButtonGroup>\n ) : (\n <CheckboxGroup labelHidden>\n {overflowComboBox\n ? [\n ...inlineCheckboxes,\n <Checkbox\n key='overflow'\n label={overflowComboBox}\n checked={answer.value.some(v => overflowKeySet.has(v))}\n onChange={e => {\n if (!e.target.checked) deselectAllOverflow();\n }}\n />\n ]\n : inlineCheckboxes}\n </CheckboxGroup>\n )}\n </StyledQuestionBlock>\n );\n};\n\nconst Questionnaire = ({ data, onChange, onCancel }: QuestionnaireProps) => {\n const t = useI18n();\n const questions = data.questions ?? [];\n const totalSteps = questions.length;\n\n const [currentStep, setCurrentStep] = useState(0);\n const [answers, setAnswers] = useState<Record<string, FormAnswer>>(() =>\n buildInitialAnswers(questions)\n );\n\n const handleChange = useCallback(\n (field: string, key: string, selected: boolean) => {\n setAnswers(prev => {\n const question = questions.find(q => q.field === field);\n const currentValues = prev[field]?.value ?? [];\n let updatedValues: string[];\n\n if (question?.type === 'single') {\n updatedValues = selected ? [key] : [];\n } else {\n updatedValues = selected ? [...currentValues, key] : currentValues.filter(v => v !== key);\n }\n\n const nextAnswers = {\n ...prev,\n [field]: { ...prev[field], value: updatedValues }\n };\n\n onChange(nextAnswers);\n\n return nextAnswers;\n });\n },\n [onChange, questions]\n );\n\n if (totalSteps === 0) return null;\n\n const activeQuestion = questions[currentStep];\n const activeAnswer = answers[activeQuestion.field] ?? createEmptyAnswer(activeQuestion);\n const isMultiStep = totalSteps > 1;\n\n return (\n <Card as={StyledQuestionnaireCard}>\n <CardHeader\n actions={\n <Button variant='simple' icon onClick={onCancel} aria-label={t('dismiss')}>\n <Icon name='times' />\n </Button>\n }\n >\n <Text variant='h4'>{activeQuestion.questionText}</Text>\n </CardHeader>\n\n <CardContent>\n <QuestionItem\n key={activeQuestion.field}\n question={activeQuestion}\n answer={activeAnswer}\n onChange={handleChange}\n />\n </CardContent>\n\n {isMultiStep && (\n <CardFooter justify='center'>\n <Flex container={{ direction: 'row', alignItems: 'center', gap: 0.5 }}>\n <Button\n variant='simple'\n icon\n onClick={() => setCurrentStep(s => s - 1)}\n disabled={currentStep === 0}\n aria-label={t('pagination_prev')}\n >\n <Icon name='caret-left' />\n </Button>\n\n <Text variant='secondary'>{t('x_of_y', [currentStep + 1, totalSteps])}</Text>\n\n <Button\n variant='simple'\n icon\n onClick={() => setCurrentStep(s => s + 1)}\n disabled={currentStep === totalSteps - 1}\n aria-label={t('pagination_next')}\n >\n <Icon name='caret-right' />\n </Button>\n </Flex>\n </CardFooter>\n )}\n </Card>\n );\n};\n\nexport default Questionnaire;\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ToolCandidateDetailsProps } from './GenAICoach.types';
|
|
2
|
+
declare const ToolCandidates: ({ loading, error, renderCandidatesTable }: ToolCandidateDetailsProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export default ToolCandidates;
|
|
4
|
+
//# sourceMappingURL=ToolCandidates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolCandidates.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/ToolCandidates.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGpE,QAAA,MAAM,cAAc,GAAI,2CAIrB,yBAAyB,4CAuB3B,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ErrorState, Flex, Progress, useI18n } from '@pega/cosmos-react-core';
|
|
3
|
+
import { StyledToolCandidatesModal } from './GenAICoach.styles';
|
|
4
|
+
const ToolCandidates = ({ loading = true, error, renderCandidatesTable }) => {
|
|
5
|
+
const t = useI18n();
|
|
6
|
+
let content = null;
|
|
7
|
+
if (loading) {
|
|
8
|
+
content = _jsx(Progress, { placement: 'block', variant: 'ring' });
|
|
9
|
+
}
|
|
10
|
+
else if (error) {
|
|
11
|
+
content = _jsx(ErrorState, { message: error });
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
content = (_jsxs(Flex, { container: { direction: 'column', gap: 1 }, children: [t('reasoning_disclaimer'), renderCandidatesTable?.()] }));
|
|
15
|
+
}
|
|
16
|
+
return (_jsx(StyledToolCandidatesModal, { heading: t('semantic_discovery_results'), children: content }));
|
|
17
|
+
};
|
|
18
|
+
export default ToolCandidates;
|
|
19
|
+
//# sourceMappingURL=ToolCandidates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolCandidates.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/ToolCandidates.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,cAAc,GAAG,CAAC,EACtB,OAAO,GAAG,IAAI,EACd,KAAK,EACL,qBAAqB,EACK,EAAE,EAAE;IAC9B,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IAEpB,IAAI,OAAO,GAAc,IAAI,CAAC;IAE9B,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,GAAG,KAAC,QAAQ,IAAC,SAAS,EAAC,OAAO,EAAC,OAAO,EAAC,MAAM,GAAG,CAAC;IAC1D,CAAC;SAAM,IAAI,KAAK,EAAE,CAAC;QACjB,OAAO,GAAG,KAAC,UAAU,IAAC,OAAO,EAAE,KAAK,GAAI,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CACR,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aAC7C,CAAC,CAAC,sBAAsB,CAAC,EACzB,qBAAqB,EAAE,EAAE,IACrB,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,yBAAyB,IAAC,OAAO,EAAE,CAAC,CAAC,4BAA4B,CAAC,YAChE,OAAO,GACkB,CAC7B,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ErrorState, Flex, Progress, useI18n } from '@pega/cosmos-react-core';\n\nimport type { ToolCandidateDetailsProps } from './GenAICoach.types';\nimport { StyledToolCandidatesModal } from './GenAICoach.styles';\n\nconst ToolCandidates = ({\n loading = true,\n error,\n renderCandidatesTable\n}: ToolCandidateDetailsProps) => {\n const t = useI18n();\n\n let content: ReactNode = null;\n\n if (loading) {\n content = <Progress placement='block' variant='ring' />;\n } else if (error) {\n content = <ErrorState message={error} />;\n } else {\n content = (\n <Flex container={{ direction: 'column', gap: 1 }}>\n {t('reasoning_disclaimer')}\n {renderCandidatesTable?.()}\n </Flex>\n );\n }\n\n return (\n <StyledToolCandidatesModal heading={t('semantic_discovery_results')}>\n {content}\n </StyledToolCandidatesModal>\n );\n};\n\nexport default ToolCandidates;\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CoachMessageProps } from './GenAICoach.types';
|
|
2
|
+
declare const ToolConfirmationMessage: ({ tools, toolMessage, onSubmit, onCancel, toolsConfirmed }: CoachMessageProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export default ToolConfirmationMessage;
|
|
4
|
+
//# sourceMappingURL=ToolConfirmationMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolConfirmationMessage.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/ToolConfirmationMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,QAAA,MAAM,uBAAuB,GAAI,4DAM9B,iBAAiB,4CAyBnB,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Flex, useI18n, useModalManager } from '@pega/cosmos-react-core';
|
|
3
|
+
import { StyledToolMessageContainer, StyledToolMessage } from './GenAICoach.styles';
|
|
4
|
+
import ToolDetails from './ToolDetails';
|
|
5
|
+
const ToolConfirmationMessage = ({ tools, toolMessage, onSubmit, onCancel, toolsConfirmed = false }) => {
|
|
6
|
+
const { create } = useModalManager();
|
|
7
|
+
const t = useI18n();
|
|
8
|
+
return (_jsxs(Flex, { as: StyledToolMessageContainer, container: { direction: 'column' }, children: [_jsx(StyledToolMessage, { children: toolMessage }), _jsx(Flex, { container: { justify: 'center', pad: 1 }, children: _jsx(Button, { variant: 'link', onClick: () => {
|
|
9
|
+
if (tools && toolMessage)
|
|
10
|
+
create(ToolDetails, {
|
|
11
|
+
tools,
|
|
12
|
+
onSubmit,
|
|
13
|
+
onCancel,
|
|
14
|
+
toolsConfirmed,
|
|
15
|
+
toolMessage
|
|
16
|
+
});
|
|
17
|
+
}, children: t('review_label') }) })] }));
|
|
18
|
+
};
|
|
19
|
+
export default ToolConfirmationMessage;
|
|
20
|
+
//# sourceMappingURL=ToolConfirmationMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolConfirmationMessage.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/ToolConfirmationMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGjF,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,MAAM,uBAAuB,GAAG,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,cAAc,GAAG,KAAK,EACJ,EAAE,EAAE;IACtB,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,OAAO,CACL,MAAC,IAAI,IAAC,EAAE,EAAE,0BAA0B,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,aACtE,KAAC,iBAAiB,cAAE,WAAW,GAAqB,EACpD,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,YAC5C,KAAC,MAAM,IACL,OAAO,EAAC,MAAM,EACd,OAAO,EAAE,GAAG,EAAE;wBACZ,IAAI,KAAK,IAAI,WAAW;4BACtB,MAAM,CAAC,WAAW,EAAE;gCAClB,KAAK;gCACL,QAAQ;gCACR,QAAQ;gCACR,cAAc;gCACd,WAAW;6BACZ,CAAC,CAAC;oBACP,CAAC,YAEA,CAAC,CAAC,cAAc,CAAC,GACX,GACJ,IACF,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,uBAAuB,CAAC","sourcesContent":["import { Button, Flex, useI18n, useModalManager } from '@pega/cosmos-react-core';\n\nimport type { CoachMessageProps } from './GenAICoach.types';\nimport { StyledToolMessageContainer, StyledToolMessage } from './GenAICoach.styles';\nimport ToolDetails from './ToolDetails';\n\nconst ToolConfirmationMessage = ({\n tools,\n toolMessage,\n onSubmit,\n onCancel,\n toolsConfirmed = false\n}: CoachMessageProps) => {\n const { create } = useModalManager();\n const t = useI18n();\n return (\n <Flex as={StyledToolMessageContainer} container={{ direction: 'column' }}>\n <StyledToolMessage>{toolMessage}</StyledToolMessage>\n <Flex container={{ justify: 'center', pad: 1 }}>\n <Button\n variant='link'\n onClick={() => {\n if (tools && toolMessage)\n create(ToolDetails, {\n tools,\n onSubmit,\n onCancel,\n toolsConfirmed,\n toolMessage\n });\n }}\n >\n {t('review_label')}\n </Button>\n </Flex>\n </Flex>\n );\n};\n\nexport default ToolConfirmationMessage;\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { OmitStrict } from '@pega/cosmos-react-core';
|
|
2
|
+
import type { ToolDetailsProps } from './GenAICoach.types';
|
|
3
|
+
declare const ToolDetails: ({ tools: toolProps, onSubmit, onCancel, toolsConfirmed }: OmitStrict<ToolDetailsProps, "isToolConfirmation">) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export default ToolDetails;
|
|
5
|
+
//# sourceMappingURL=ToolDetails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolDetails.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/ToolDetails.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EAAQ,gBAAgB,EAAkB,MAAM,oBAAoB,CAAC;AAuJjF,QAAA,MAAM,WAAW,GAAI,0DAKlB,UAAU,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,4CAgHpD,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { Button, Flex, FormField, Grid, Input, Modal, MultiStepForm, RadioButton, RadioButtonGroup, Text, useI18n, useModalContext, useUID } from '@pega/cosmos-react-core';
|
|
4
|
+
import { StyledActionContainer, StyledConfirmationMsg } from './GenAICoach.styles';
|
|
5
|
+
const CurrentToolContent = ({ tool, baseToolDetails, onDecisionChange, onParameterChange, setHasError, toolsConfirmed }) => {
|
|
6
|
+
const t = useI18n();
|
|
7
|
+
const { decision = 'approve' } = tool;
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (tool.decision === 'modify' && tool.parameters) {
|
|
10
|
+
const hasEmptyParam = tool.parameters.some(param => param.required && !param.value);
|
|
11
|
+
setHasError?.(hasEmptyParam);
|
|
12
|
+
}
|
|
13
|
+
}, [tool.parameters, tool.decision]);
|
|
14
|
+
const id = useUID();
|
|
15
|
+
const accept = 'accept';
|
|
16
|
+
const modify = 'modify';
|
|
17
|
+
const reject = 'reject';
|
|
18
|
+
return (_jsxs(Flex, { container: { direction: 'column', gap: 1 }, children: [_jsx(FormField, { label: t('current_action'), readOnly: true, children: _jsx(StyledConfirmationMsg, { content: tool.message, type: 'markdown' }) }), _jsx(RadioButtonGroup, { name: 'decision', label: t('tool_decision'), required: true, inline: true, onChange: (e) => {
|
|
19
|
+
if (e.target.checked) {
|
|
20
|
+
const value = e.target.value;
|
|
21
|
+
if (value === accept || value === modify || value === reject) {
|
|
22
|
+
onDecisionChange?.(tool.id, value);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}, readOnly: toolsConfirmed, children: [
|
|
26
|
+
_jsx(RadioButton, { label: t('accept'), checked: decision === 'accept', id: `${id}-${accept}-${tool.id}`, value: accept }, accept),
|
|
27
|
+
...((tool.parameters && tool.parameters.length > 0) || toolsConfirmed
|
|
28
|
+
? [
|
|
29
|
+
_jsx(RadioButton, { label: t('modify'), checked: decision === 'modify', id: `${id}-${modify}-${tool.id}`, value: modify }, modify)
|
|
30
|
+
]
|
|
31
|
+
: []),
|
|
32
|
+
_jsx(RadioButton, { label: t('reject'), checked: decision === 'reject', id: `${id}-${reject}-${tool.id}`, value: reject }, reject)
|
|
33
|
+
] }), tool.decision === modify && tool.parameters && (_jsxs(Flex, { container: { direction: 'column' }, children: [_jsx(Text, { variant: 'h3', children: t('modify_details') }), _jsx(Grid, { container: { gap: 1, cols: 'repeat(2, minmax(0, 1fr))' }, children: tool.parameters.map(param => {
|
|
34
|
+
const baseParamInfo = baseToolDetails?.parameters?.find(currentParam => currentParam.id === param.id);
|
|
35
|
+
const info = baseParamInfo ? t('current_details', [baseParamInfo.value]) : undefined;
|
|
36
|
+
if (param.type === 'text' || param.type === 'number') {
|
|
37
|
+
return (_jsx(Input, { required: param.required, label: param.label, defaultValue: param.value, readOnly: toolsConfirmed || param.readOnly, type: param.type, status: param.required && !param.value ? 'error' : undefined, info: param.required && !param.value ? t('value_cannot_be_blank') : info, onChange: e => {
|
|
38
|
+
onParameterChange?.(tool.id, param.id, e.target.value);
|
|
39
|
+
} }, param.id));
|
|
40
|
+
}
|
|
41
|
+
if (param.type === 'boolean') {
|
|
42
|
+
return (_jsxs(RadioButtonGroup, { name: param.label, label: param.label, required: param.required, inline: true, onChange: (e) => {
|
|
43
|
+
if (e.target.checked) {
|
|
44
|
+
onParameterChange?.(tool.id, param.id, e.target.value);
|
|
45
|
+
}
|
|
46
|
+
}, readOnly: toolsConfirmed || param.readOnly, info: !toolsConfirmed && !param.readOnly ? info : undefined, children: [_jsx(RadioButton, { label: t('true'), checked: param.value === 'true', id: `${id}-true`, value: 'true' }), _jsx(RadioButton, { label: t('false'), checked: param.value === 'false', id: `${id}-false`, value: 'false' })] }));
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}) })] }))] }));
|
|
50
|
+
};
|
|
51
|
+
const ToolDetails = ({ tools: toolProps, onSubmit, onCancel, toolsConfirmed }) => {
|
|
52
|
+
const t = useI18n();
|
|
53
|
+
const { dismiss } = useModalContext();
|
|
54
|
+
const [currentStepIndex, setCurrentStepIndex] = useState(0);
|
|
55
|
+
const finalStep = currentStepIndex === (toolProps ? toolProps.length - 1 : 0);
|
|
56
|
+
const [tools, setTools] = useState(toolProps || []);
|
|
57
|
+
const [hasError, setHasError] = useState(false);
|
|
58
|
+
const handleDecisionChange = (toolId, currentDecision) => {
|
|
59
|
+
setTools(prevTools => prevTools.map(tool => (tool.id === toolId ? { ...tool, decision: currentDecision } : tool)));
|
|
60
|
+
};
|
|
61
|
+
const handleParameterChange = (toolId, parameterId, currentVal) => {
|
|
62
|
+
setTools(prevTools => prevTools.map(tool => {
|
|
63
|
+
if (tool.id === toolId && tool.parameters) {
|
|
64
|
+
const updatedParameters = tool.parameters.map(param => param.id === parameterId ? { ...param, value: currentVal } : param);
|
|
65
|
+
return { ...tool, parameters: updatedParameters };
|
|
66
|
+
}
|
|
67
|
+
return tool;
|
|
68
|
+
}));
|
|
69
|
+
};
|
|
70
|
+
const stepActions = useMemo(() => {
|
|
71
|
+
return (_jsxs(_Fragment, { children: [_jsxs(StyledActionContainer, { container: { gap: 1 }, children: [_jsx(Button, { onClick: () => {
|
|
72
|
+
if (!toolsConfirmed)
|
|
73
|
+
onCancel?.();
|
|
74
|
+
dismiss();
|
|
75
|
+
}, children: toolsConfirmed ? t('close') : t('cancel') }), currentStepIndex > 0 && (_jsx(Button, { onClick: () => {
|
|
76
|
+
if (!hasError)
|
|
77
|
+
setCurrentStepIndex(currentStepIndex - 1);
|
|
78
|
+
}, children: t('previous') }))] }), _jsxs(_Fragment, { children: [!finalStep && (_jsx(Button, { variant: 'primary', onClick: () => {
|
|
79
|
+
if (!hasError)
|
|
80
|
+
setCurrentStepIndex(currentStepIndex + 1);
|
|
81
|
+
}, children: t('pagination_next') })), finalStep && !toolsConfirmed && (_jsx(Button, { type: 'submit', variant: 'primary', onClick: () => {
|
|
82
|
+
if (!hasError) {
|
|
83
|
+
if (tools)
|
|
84
|
+
onSubmit?.(tools);
|
|
85
|
+
dismiss();
|
|
86
|
+
}
|
|
87
|
+
}, children: t('submit') }))] })] }));
|
|
88
|
+
}, [currentStepIndex, hasError, tools]);
|
|
89
|
+
const stepData = useMemo(() => {
|
|
90
|
+
return tools.map(tool => ({
|
|
91
|
+
id: tool.id,
|
|
92
|
+
name: tool.name,
|
|
93
|
+
content: (_jsx(CurrentToolContent, { tool: tool, baseToolDetails: toolProps?.find(toolVal => toolVal.id === tool.id), setHasError: setHasError, toolsConfirmed: toolsConfirmed, onDecisionChange: handleDecisionChange, onParameterChange: handleParameterChange }))
|
|
94
|
+
}));
|
|
95
|
+
}, [tools]);
|
|
96
|
+
return (_jsx(Modal, { heading: t('confirm_details'), actions: stepActions, children: _jsx(MultiStepForm, { steps: stepData, currentStepId: stepData[currentStepIndex].id, stepIndicator: 'horizontal' }) }));
|
|
97
|
+
};
|
|
98
|
+
export default ToolDetails;
|
|
99
|
+
//# sourceMappingURL=ToolDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolDetails.js","sourceRoot":"","sources":["../../../src/components/GenAICoach/ToolDetails.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport type { ChangeEvent, Dispatch, SetStateAction } from 'react';\n\nimport {\n Button,\n Flex,\n FormField,\n Grid,\n Input,\n Modal,\n MultiStepForm,\n RadioButton,\n RadioButtonGroup,\n Text,\n useI18n,\n useModalContext,\n useUID\n} from '@pega/cosmos-react-core';\nimport type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport type { Tool, ToolDetailsProps, ToolParameters } from './GenAICoach.types';\nimport { StyledActionContainer, StyledConfirmationMsg } from './GenAICoach.styles';\n\nconst CurrentToolContent = ({\n tool,\n baseToolDetails,\n onDecisionChange,\n onParameterChange,\n setHasError,\n toolsConfirmed\n}: {\n tool: Tool;\n baseToolDetails?: Tool;\n toolsConfirmed?: boolean;\n setHasError?: Dispatch<SetStateAction<boolean>>;\n onDecisionChange: (toolId: Tool['id'], currentDecision: Tool['decision']) => void;\n onParameterChange?: (\n toolId: Tool['id'],\n parameterId: ToolParameters['id'],\n currentVal: ToolParameters['value']\n ) => void;\n}) => {\n const t = useI18n();\n const { decision = 'approve' } = tool;\n\n useEffect(() => {\n if (tool.decision === 'modify' && tool.parameters) {\n const hasEmptyParam = tool.parameters.some(param => param.required && !param.value);\n setHasError?.(hasEmptyParam);\n }\n }, [tool.parameters, tool.decision]);\n\n const id = useUID();\n const accept = 'accept';\n const modify = 'modify';\n const reject = 'reject';\n return (\n <Flex container={{ direction: 'column', gap: 1 }}>\n <FormField label={t('current_action')} readOnly>\n <StyledConfirmationMsg content={tool.message} type='markdown' />\n </FormField>\n\n <RadioButtonGroup\n name='decision'\n label={t('tool_decision')}\n required\n inline\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.checked) {\n const value = e.target.value;\n if (value === accept || value === modify || value === reject) {\n onDecisionChange?.(tool.id, value);\n }\n }\n }}\n readOnly={toolsConfirmed}\n >\n {[\n <RadioButton\n key={accept}\n label={t('accept')}\n checked={decision === 'accept'}\n id={`${id}-${accept}-${tool.id}`}\n value={accept}\n />,\n ...((tool.parameters && tool.parameters.length > 0) || toolsConfirmed\n ? [\n <RadioButton\n key={modify}\n label={t('modify')}\n checked={decision === 'modify'}\n id={`${id}-${modify}-${tool.id}`}\n value={modify}\n />\n ]\n : []),\n <RadioButton\n key={reject}\n label={t('reject')}\n checked={decision === 'reject'}\n id={`${id}-${reject}-${tool.id}`}\n value={reject}\n />\n ]}\n </RadioButtonGroup>\n\n {tool.decision === modify && tool.parameters && (\n <Flex container={{ direction: 'column' }}>\n <Text variant='h3'>{t('modify_details')}</Text>\n <Grid container={{ gap: 1, cols: 'repeat(2, minmax(0, 1fr))' }}>\n {tool.parameters.map(param => {\n const baseParamInfo = baseToolDetails?.parameters?.find(\n currentParam => currentParam.id === param.id\n );\n const info = baseParamInfo ? t('current_details', [baseParamInfo.value]) : undefined;\n if (param.type === 'text' || param.type === 'number') {\n return (\n <Input\n key={param.id}\n required={param.required}\n label={param.label}\n defaultValue={param.value}\n readOnly={toolsConfirmed || param.readOnly}\n type={param.type}\n status={param.required && !param.value ? 'error' : undefined}\n info={param.required && !param.value ? t('value_cannot_be_blank') : info}\n onChange={e => {\n onParameterChange?.(tool.id, param.id, e.target.value);\n }}\n />\n );\n }\n if (param.type === 'boolean') {\n return (\n <RadioButtonGroup\n name={param.label}\n label={param.label}\n required={param.required}\n inline\n onChange={(e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.checked) {\n onParameterChange?.(tool.id, param.id, e.target.value);\n }\n }}\n readOnly={toolsConfirmed || param.readOnly}\n info={!toolsConfirmed && !param.readOnly ? info : undefined}\n >\n <RadioButton\n label={t('true')}\n checked={param.value === 'true'}\n id={`${id}-true`}\n value='true'\n />\n <RadioButton\n label={t('false')}\n checked={param.value === 'false'}\n id={`${id}-false`}\n value='false'\n />\n </RadioButtonGroup>\n );\n }\n return null;\n })}\n </Grid>\n </Flex>\n )}\n </Flex>\n );\n};\n\nconst ToolDetails = ({\n tools: toolProps,\n onSubmit,\n onCancel,\n toolsConfirmed\n}: OmitStrict<ToolDetailsProps, 'isToolConfirmation'>) => {\n const t = useI18n();\n const { dismiss } = useModalContext();\n const [currentStepIndex, setCurrentStepIndex] = useState(0);\n const finalStep = currentStepIndex === (toolProps ? toolProps.length - 1 : 0);\n\n const [tools, setTools] = useState<Tool[]>(toolProps || []);\n const [hasError, setHasError] = useState(false);\n\n const handleDecisionChange = (toolId: Tool['id'], currentDecision: Tool['decision']) => {\n setTools(prevTools =>\n prevTools.map(tool => (tool.id === toolId ? { ...tool, decision: currentDecision } : tool))\n );\n };\n\n const handleParameterChange = (\n toolId: Tool['id'],\n parameterId: ToolParameters['id'],\n currentVal: ToolParameters['value']\n ) => {\n setTools(prevTools =>\n prevTools.map(tool => {\n if (tool.id === toolId && tool.parameters) {\n const updatedParameters = tool.parameters.map(param =>\n param.id === parameterId ? { ...param, value: currentVal } : param\n );\n return { ...tool, parameters: updatedParameters };\n }\n return tool;\n })\n );\n };\n\n const stepActions = useMemo(() => {\n return (\n <>\n <StyledActionContainer container={{ gap: 1 }}>\n <Button\n onClick={() => {\n if (!toolsConfirmed) onCancel?.();\n dismiss();\n }}\n >\n {toolsConfirmed ? t('close') : t('cancel')}\n </Button>\n {currentStepIndex > 0 && (\n <Button\n onClick={() => {\n if (!hasError) setCurrentStepIndex(currentStepIndex - 1);\n }}\n >\n {t('previous')}\n </Button>\n )}\n </StyledActionContainer>\n\n <>\n {!finalStep && (\n <Button\n variant='primary'\n onClick={() => {\n if (!hasError) setCurrentStepIndex(currentStepIndex + 1);\n }}\n >\n {t('pagination_next')}\n </Button>\n )}\n {finalStep && !toolsConfirmed && (\n <Button\n type='submit'\n variant='primary'\n onClick={() => {\n if (!hasError) {\n if (tools) onSubmit?.(tools);\n dismiss();\n }\n }}\n >\n {t('submit')}\n </Button>\n )}\n </>\n </>\n );\n }, [currentStepIndex, hasError, tools]);\n\n const stepData = useMemo(() => {\n return tools.map(tool => ({\n id: tool.id,\n name: tool.name,\n content: (\n <CurrentToolContent\n tool={tool}\n baseToolDetails={toolProps?.find(toolVal => toolVal.id === tool.id)}\n setHasError={setHasError}\n toolsConfirmed={toolsConfirmed}\n onDecisionChange={handleDecisionChange}\n onParameterChange={handleParameterChange}\n />\n )\n }));\n }, [tools]);\n\n return (\n <Modal heading={t('confirm_details')} actions={stepActions}>\n <MultiStepForm\n steps={stepData}\n currentStepId={stepData[currentStepIndex].id}\n stepIndicator='horizontal'\n />\n </Modal>\n );\n};\n\nexport default ToolDetails;\n"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
export { default } from './GenAICoach';
|
|
2
|
-
export
|
|
3
|
-
export {
|
|
1
|
+
export { default, AgentIcon } from './GenAICoach';
|
|
2
|
+
export { default as PortalAgentSplitView } from './PortalAgentSplitView';
|
|
3
|
+
export type { GenAICoachProps, GenAIMessageProps, UserMessageProps, CoachMessageProps, MessageProps, UtilitiesGenAICoachProps, SendMessageProps, State, ActiveCaseItem, CaseWorkflowProps, CaseWorkflowStageProps, CaseDetails, QuestionnaireConfig } from './GenAICoach.types';
|
|
4
|
+
export { default as GenAIMessage, StreamingContext } from './GenAIMessage';
|
|
4
5
|
export { default as InitialSuggestedMessage } from './InitialSuggestedMessage';
|
|
5
6
|
export { isUserMessage, isCoachMessage } from './GenAICoach.utils';
|
|
7
|
+
export { AISuggestedBadge } from './GenAICoach';
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/GenAICoach/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,gBAAgB,EAChB,KAAK,EACL,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,EACX,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export { default } from './GenAICoach';
|
|
2
|
-
export { default as
|
|
1
|
+
export { default, AgentIcon } from './GenAICoach';
|
|
2
|
+
export { default as PortalAgentSplitView } from './PortalAgentSplitView';
|
|
3
|
+
export { default as GenAIMessage, StreamingContext } from './GenAIMessage';
|
|
3
4
|
export { default as InitialSuggestedMessage } from './InitialSuggestedMessage';
|
|
4
5
|
export { isUserMessage, isCoachMessage } from './GenAICoach.utils';
|
|
6
|
+
export { AISuggestedBadge } from './GenAICoach';
|
|
5
7
|
//# sourceMappingURL=index.js.map
|