@projectcor/maia-components 2.29.0 → 2.30.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +656 -0
- package/lib/App.js +55 -0
- package/lib/components/atoms/ActionableButton.js +60 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +89 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +21 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.js +9 -0
- package/lib/components/atoms/AgentActivityIndicator/index.js +2 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +209 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +93 -0
- package/lib/components/atoms/ApprovalBox/index.js +2 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.js +218 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.styles.js +52 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +448 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.styles.js +58 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +55 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.styles.js +14 -0
- package/lib/components/atoms/AttachmentCard/index.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +442 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.styles.js +119 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +222 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +313 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +128 -0
- package/lib/components/atoms/AttachmentPreviewModal/index.js +2 -0
- package/lib/components/atoms/Backdrop/Backdrop.js +17 -0
- package/lib/components/atoms/Backdrop/Backdrop.styles.js +9 -0
- package/lib/components/atoms/Backdrop/index.js +2 -0
- package/lib/components/atoms/CardItem.js +7 -0
- package/lib/components/atoms/CardMenu/CardMenu.js +131 -0
- package/lib/components/atoms/CardMenu/index.js +2 -0
- package/lib/components/atoms/CardMenu/styles.js +21 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +77 -0
- package/lib/components/atoms/ChatClientSelector/index.js +2 -0
- package/lib/components/atoms/ChatDisclaimerMessage/ChatDisclaimerMessage.js +9 -0
- package/lib/components/atoms/ChatDisclaimerMessage/index.js +2 -0
- package/lib/components/atoms/ChatDisclaimerMessage/styles.js +6 -0
- package/lib/components/atoms/Checkbox/Checkbox.js +34 -0
- package/lib/components/atoms/Checkbox/index.js +2 -0
- package/lib/components/atoms/Checkbox/styles.js +39 -0
- package/lib/components/atoms/Chip/Chip.js +150 -0
- package/lib/components/atoms/Chip/index.js +2 -0
- package/lib/components/atoms/Chip/styles.js +43 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.js +45 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.style.js +21 -0
- package/lib/components/atoms/ChipLlm/index.js +2 -0
- package/lib/components/atoms/ChipStatus/ChipStatus.interface.js +2 -0
- package/lib/components/atoms/ChipStatus/ChipStatus.js +14 -0
- package/lib/components/atoms/ChipStatus/ChipStatus.styles.js +27 -0
- package/lib/components/atoms/ChipStatus/index.js +2 -0
- package/lib/components/atoms/ClearButton.js +6 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +146 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.styles.js +15 -0
- package/lib/components/atoms/ClientSelector/index.js +2 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +38 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +188 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +445 -0
- package/lib/components/atoms/ContextMentionChip/index.js +4 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +533 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +10 -0
- package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +282 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +148 -0
- package/lib/components/atoms/ContextMentionItem/index.js +2 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +290 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +108 -0
- package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
- package/lib/components/atoms/CopyToClipboard.js +70 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.js +110 -0
- package/lib/components/atoms/EditableLabel/index.js +2 -0
- package/lib/components/atoms/EditableLabel/styles.js +7 -0
- package/lib/components/atoms/EmptySearchClients/EmptySearchClients.js +22 -0
- package/lib/components/atoms/EmptySearchClients/EmptySearchClients.styles.js +18 -0
- package/lib/components/atoms/EmptySearchClients/index.js +2 -0
- package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.js +19 -0
- package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.styles.js +15 -0
- package/lib/components/atoms/EmptySearchProjects/index.js +2 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.js +247 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.skeleton.js +38 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +67 -0
- package/lib/components/atoms/EntitySelector/index.js +2 -0
- package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.js +14 -0
- package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.styles.js +15 -0
- package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.js +14 -0
- package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.style.js +15 -0
- package/lib/components/atoms/ErrorSearchFaqs/index.js +2 -0
- package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.js +18 -0
- package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.style.js +15 -0
- package/lib/components/atoms/ErrorSearchProjects/index.js +2 -0
- package/lib/components/atoms/Expand/Expand.js +32 -0
- package/lib/components/atoms/Expand/index.js +2 -0
- package/lib/components/atoms/Fade/Fade.js +56 -0
- package/lib/components/atoms/Fade/index.js +2 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.js +59 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +14 -0
- package/lib/components/atoms/FeedbackButton/index.js +2 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +138 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.skeleton.js +44 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +43 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/index.js +2 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +122 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.skeleton.js +43 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +62 -0
- package/lib/components/atoms/FrequentlyUsedActions/index.js +2 -0
- package/lib/components/atoms/GoBackButton.js +24 -0
- package/lib/components/atoms/HelpButton.js +44 -0
- package/lib/components/atoms/IconButton.js +56 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.js +96 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.styles.js +70 -0
- package/lib/components/atoms/Input/CustomInput.interface.js +2 -0
- package/lib/components/atoms/Input/CustomInput.js +91 -0
- package/lib/components/atoms/Input/CustomInput.styles.js +39 -0
- package/lib/components/atoms/Input/index.js +2 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.js +41 -0
- package/lib/components/atoms/ListMenuOption/index.js +2 -0
- package/lib/components/atoms/ListMenuOption/styles.js +9 -0
- package/lib/components/atoms/Loader.js +41 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.js +11 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.style.js +6 -0
- package/lib/components/atoms/LoadingFaqs/index.js +2 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.js +11 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.styles.js +6 -0
- package/lib/components/atoms/LoadingSearchClients/index.js +2 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.js +14 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.style.js +10 -0
- package/lib/components/atoms/LoadingSearchProjects/index.js +2 -0
- package/lib/components/atoms/LoadingText/LoadingText.js +18 -0
- package/lib/components/atoms/LoadingText/index.js +2 -0
- package/lib/components/atoms/LoadingText/styles.js +7 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.js +33 -0
- package/lib/components/atoms/MAIAButton/index.js +2 -0
- package/lib/components/atoms/MAIAError/MAIAError.js +15 -0
- package/lib/components/atoms/MAIAError/index.js +2 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +1233 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +266 -0
- package/lib/components/atoms/MAIAInput/index.js +2 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.js +25 -0
- package/lib/components/atoms/MAIAInput/styles.js +186 -0
- package/lib/components/atoms/MAIAMessage/MAIAMessage.interfaces.js +2 -0
- package/lib/components/atoms/MAIAMessage/MAIAMessage.js +22 -0
- package/lib/components/atoms/MAIAMessage/index.js +2 -0
- package/lib/components/atoms/MAIAMessage/styles.js +7 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.config.js +23 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.interfaces.js +2 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.js +51 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.styles.js +26 -0
- package/lib/components/atoms/MaiaStreamdown/index.js +2 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.js +18 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +84 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.js +15 -0
- package/lib/components/atoms/MaiaWrapper/index.js +3 -0
- package/lib/components/atoms/MaiaWrapper/styles.js +21 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.interface.js +2 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.js +84 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.styles.js +53 -0
- package/lib/components/atoms/ModalClientAccess/index.js +2 -0
- package/lib/components/atoms/ModalInfo/ModalInfo.js +52 -0
- package/lib/components/atoms/ModalInfo/ModalInfoContent.js +7 -0
- package/lib/components/atoms/ModalInfo/index.js +3 -0
- package/lib/components/atoms/ModalInfo/styles.js +7 -0
- package/lib/components/atoms/ModalProject/ModalProject.interface.js +2 -0
- package/lib/components/atoms/ModalProject/ModalProject.js +112 -0
- package/lib/components/atoms/ModalProject/ModalProject.style.js +59 -0
- package/lib/components/atoms/ModalProject/index.js +2 -0
- package/lib/components/atoms/NextPageLoader.js +33 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.js +28 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +180 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.styles.js +34 -0
- package/lib/components/atoms/OnboardingModalButton/index.js +3 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +131 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.styles.js +59 -0
- package/lib/components/atoms/OptionAccessibility/index.js +2 -0
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +27 -0
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +18 -0
- package/lib/components/atoms/OptionCorPermission/index.js +2 -0
- package/lib/components/atoms/PrimaryButton.js +31 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.js +77 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.styles.js +61 -0
- package/lib/components/atoms/ProjectSelector/index.js +2 -0
- package/lib/components/atoms/SecondaryButton.js +20 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +20 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +20 -0
- package/lib/components/atoms/SessionGeneratingDot/index.js +2 -0
- package/lib/components/atoms/Skeleton/Skeleton.js +36 -0
- package/lib/components/atoms/Skeleton/index.js +2 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -0
- package/lib/components/atoms/SkillsDropdown/index.js +2 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.js +16 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.styles.js +24 -0
- package/lib/components/atoms/SlashCommandChip/buildSlashChipElement.js +18 -0
- package/lib/components/atoms/SlashCommandChip/index.js +4 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +210 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +53 -0
- package/lib/components/atoms/SlashCommandDropdown/index.js +2 -0
- package/lib/components/atoms/Switch/Switch.js +27 -0
- package/lib/components/atoms/Switch/Switch.styles.js +22 -0
- package/lib/components/atoms/Switch/index.js +2 -0
- package/lib/components/atoms/TextArea/CustomTextArea.interface.js +2 -0
- package/lib/components/atoms/TextArea/CustomTextArea.js +93 -0
- package/lib/components/atoms/TextArea/CustomTextArea.styles.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.interfaces.js +2 -0
- package/lib/components/atoms/TextArea/TextArea.js +172 -0
- package/lib/components/atoms/TextArea/TextArea.styles.js +16 -0
- package/lib/components/atoms/TextArea/index.js +2 -0
- package/lib/components/atoms/ThirdButton.js +19 -0
- package/lib/components/atoms/VideoModal/VideoModal.js +76 -0
- package/lib/components/atoms/VideoModal/index.js +2 -0
- package/lib/components/atoms/WithAppCfg.js +26 -0
- package/lib/components/atoms/WithFeatureValidation.js +23 -0
- package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.js +9 -0
- package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.styles.js +6 -0
- package/lib/components/atoms/WrapperCenterIcon/index.js +2 -0
- package/lib/components/atoms/icons/AIIcon.js +23 -0
- package/lib/components/atoms/icons/AacFile.js +39 -0
- package/lib/components/atoms/icons/AccessibilityIcon.js +42 -0
- package/lib/components/atoms/icons/ActionAssignIcon.js +111 -0
- package/lib/components/atoms/icons/ActionCalendarIcon.js +112 -0
- package/lib/components/atoms/icons/ActionChargeHoursIcon.js +111 -0
- package/lib/components/atoms/icons/ActionChatIcon.js +71 -0
- package/lib/components/atoms/icons/ActionCreateIcon.js +91 -0
- package/lib/components/atoms/icons/ActionCreateReworkIcon.js +39 -0
- package/lib/components/atoms/icons/ActionCreateSubtaskIcon.js +37 -0
- package/lib/components/atoms/icons/ActionEditIcon.js +39 -0
- package/lib/components/atoms/icons/ActionSummaryMessagesIcon.js +88 -0
- package/lib/components/atoms/icons/ActionSummaryTaskIcon.js +37 -0
- package/lib/components/atoms/icons/ActionTimeBackIcon.js +112 -0
- package/lib/components/atoms/icons/AgentMaiaIcon.js +31 -0
- package/lib/components/atoms/icons/Brain.js +77 -0
- package/lib/components/atoms/icons/CorAccessIcon.js +41 -0
- package/lib/components/atoms/icons/CorLogo.js +76 -0
- package/lib/components/atoms/icons/CsvFile.js +41 -0
- package/lib/components/atoms/icons/DocFile.js +41 -0
- package/lib/components/atoms/icons/DocxFile.js +41 -0
- package/lib/components/atoms/icons/EmptyClientIllustration.js +67 -0
- package/lib/components/atoms/icons/EmptyHistory.js +46 -0
- package/lib/components/atoms/icons/EmptySearchIllustration.js +37 -0
- package/lib/components/atoms/icons/EmptyState.js +84 -0
- package/lib/components/atoms/icons/EmptyStateAgents.js +58 -0
- package/lib/components/atoms/icons/ErrorIcon.js +14 -0
- package/lib/components/atoms/icons/ErrorSearchIllustration.js +52 -0
- package/lib/components/atoms/icons/ErrorState.js +51 -0
- package/lib/components/atoms/icons/FaqChevronIcon.js +39 -0
- package/lib/components/atoms/icons/FaqsIcon.js +51 -0
- package/lib/components/atoms/icons/FlacIcon.js +39 -0
- package/lib/components/atoms/icons/FolderIcon.js +29 -0
- package/lib/components/atoms/icons/HomeIcon.js +30 -0
- package/lib/components/atoms/icons/ImageFile.js +46 -0
- package/lib/components/atoms/icons/M4aFile.js +39 -0
- package/lib/components/atoms/icons/MAIAIcon.js +20 -0
- package/lib/components/atoms/icons/MAIAIsologo.js +65 -0
- package/lib/components/atoms/icons/MDFile.js +41 -0
- package/lib/components/atoms/icons/MaiaChatLayoutFloatingIcon.js +41 -0
- package/lib/components/atoms/icons/MaiaChatLayoutFullscreenIcon.js +41 -0
- package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
- package/lib/components/atoms/icons/MaiaChatLayoutSidebarIcon.js +41 -0
- package/lib/components/atoms/icons/MaiaInputAddIcon.js +42 -0
- package/lib/components/atoms/icons/MaiaInputAttachIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +33 -0
- package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +35 -0
- package/lib/components/atoms/icons/MaiaInputMentionIcon.js +44 -0
- package/lib/components/atoms/icons/MaiaInputRobotIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputSendIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputSlashIcon.js +29 -0
- package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +35 -0
- package/lib/components/atoms/icons/MaiaSettingsProject.js +111 -0
- package/lib/components/atoms/icons/MaiaSettingsProjectV2.js +193 -0
- package/lib/components/atoms/icons/MaiaSparkleIcon.js +75 -0
- package/lib/components/atoms/icons/MaiaStoreIcon.js +31 -0
- package/lib/components/atoms/icons/Mp3File.js +39 -0
- package/lib/components/atoms/icons/Mp4File.js +39 -0
- package/lib/components/atoms/icons/MyAgentsNavIcon.js +51 -0
- package/lib/components/atoms/icons/NewChat.js +29 -0
- package/lib/components/atoms/icons/NotionIcon.js +36 -0
- package/lib/components/atoms/icons/OgaFile.js +39 -0
- package/lib/components/atoms/icons/OggFile.js +39 -0
- package/lib/components/atoms/icons/PdfFile.js +39 -0
- package/lib/components/atoms/icons/PlusIcon.js +29 -0
- package/lib/components/atoms/icons/PptFile.js +47 -0
- package/lib/components/atoms/icons/PptxFile.js +49 -0
- package/lib/components/atoms/icons/RetryIcon.js +34 -0
- package/lib/components/atoms/icons/SkillCreatedByIcon.js +20 -0
- package/lib/components/atoms/icons/SkillIcon.js +30 -0
- package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
- package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
- package/lib/components/atoms/icons/SkillsNavIcon.js +24 -0
- package/lib/components/atoms/icons/SubtaskIcon.js +36 -0
- package/lib/components/atoms/icons/TaskLinkIcon.js +27 -0
- package/lib/components/atoms/icons/TelescopeIcon.js +60 -0
- package/lib/components/atoms/icons/TemplateGradientIcon.js +42 -0
- package/lib/components/atoms/icons/TextFile.js +41 -0
- package/lib/components/atoms/icons/WavFile.js +39 -0
- package/lib/components/atoms/icons/WebmFile.js +50 -0
- package/lib/components/atoms/icons/XlsFile.js +42 -0
- package/lib/components/atoms/icons/XlsxFile.js +42 -0
- package/lib/components/atoms/icons/index.js +54 -0
- package/lib/components/atoms/index.js +42 -0
- package/lib/components/index.js +11 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.interface.js +2 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +236 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +53 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +415 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +152 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +374 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +106 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +92 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.styles.js +57 -0
- package/lib/components/molecules/AbmSection/index.js +4 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +52 -0
- package/lib/components/molecules/ChatAIClientSelector/index.js +2 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +119 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.skeleton.js +187 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.styles.js +6 -0
- package/lib/components/molecules/ChatAIContent/index.js +2 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +241 -0
- package/lib/components/molecules/ChatAIHistory/index.js +2 -0
- package/lib/components/molecules/ChatAIHistory/styles.js +22 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +649 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +115 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +95 -0
- package/lib/components/molecules/ChatAIHome/index.js +2 -0
- package/lib/components/molecules/ChatAIHome/styles.js +335 -0
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +137 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +853 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +47 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +37 -0
- package/lib/components/molecules/ChatAIMessages/README.md +101 -0
- package/lib/components/molecules/ChatAIMessages/index.js +2 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +131 -0
- package/lib/components/molecules/ChatAIMessages/styles.js +94 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +1254 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +58 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +127 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +34 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +189 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +453 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +108 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +48 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +38 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/constants.js +40 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +12 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
- package/lib/components/molecules/ChatAIModal/index.js +2 -0
- package/lib/components/molecules/ChatAIModal/layout.js +74 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +457 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +218 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +430 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +169 -0
- package/lib/components/molecules/ChatAIMySkills/index.js +2 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +48 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.styles.js +49 -0
- package/lib/components/molecules/ChatAIProjectSelector/index.js +2 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +337 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.js +32 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.styles.js +14 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +201 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.styles.js +51 -0
- package/lib/components/molecules/ChatFooter/index.js +2 -0
- package/lib/components/molecules/ChatFooter/styles.js +23 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +60 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
- package/lib/components/molecules/ContextMentionInput/index.js +2 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.js +118 -0
- package/lib/components/molecules/MessageFeedback/index.js +2 -0
- package/lib/components/molecules/MessageFeedback/styles.js +14 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.js +127 -0
- package/lib/components/molecules/ProjectSummaryChat/index.js +2 -0
- package/lib/components/molecules/ProjectSummaryChat/styles.js +8 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.js +152 -0
- package/lib/components/molecules/ProjectSummaryConfig/index.js +2 -0
- package/lib/components/molecules/ProjectSummaryConfig/styles.js +86 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.js +49 -0
- package/lib/components/molecules/ProjectSummaryContent/index.js +2 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.js +19 -0
- package/lib/components/molecules/ProjectSummaryModal/index.js +2 -0
- package/lib/components/molecules/ProjectSummaryModal/styles.js +2 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +716 -0
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +157 -0
- package/lib/components/molecules/Sidebar/Sidebar.skeleton.js +48 -0
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +75 -0
- package/lib/components/molecules/Sidebar/index.js +2 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +1449 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +93 -0
- package/lib/components/organisms/AbmAgentModal/index.js +2 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +182 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +34 -0
- package/lib/components/organisms/AbmSkillGenerateModal/index.js +2 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +585 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +154 -0
- package/lib/components/organisms/AbmSkillModal/index.js +2 -0
- package/lib/components/organisms/ChatAI/ChatAI.js +167 -0
- package/lib/components/organisms/ChatAI/index.js +2 -0
- package/lib/components/organisms/ChatAI/styles.js +7 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.js +23 -0
- package/lib/components/organisms/ClientAIButton/index.js +2 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.js +86 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.styles.js +39 -0
- package/lib/components/organisms/DeleteAgentModal/index.js +2 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +122 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.styles.js +47 -0
- package/lib/components/organisms/DeleteQuestionModal/index.js +2 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +138 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.styles.js +69 -0
- package/lib/components/organisms/EditQuestionModal/index.js +2 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.js +113 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.styles.js +54 -0
- package/lib/components/organisms/ModalFileExceeds/index.js +2 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.js +26 -0
- package/lib/components/organisms/ProjectAIButton/index.js +2 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +60 -0
- package/lib/components/organisms/ProjectSummary/index.js +2 -0
- package/lib/components/organisms/ProjectSummary/styles.js +7 -0
- package/lib/components/organisms/SnackBar/Snackbar.interface.js +2 -0
- package/lib/components/organisms/SnackBar/Snackbar.js +73 -0
- package/lib/components/organisms/SnackBar/Snackbar.styles.js +9 -0
- package/lib/components/organisms/SnackBar/index.js +2 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.js +18 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.styles.js +14 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.styles.js +27 -0
- package/lib/components/organisms/SourcesInformation/index.js +2 -0
- package/lib/constants/config.js +10 -0
- package/lib/constants/formatExtensions.js +55 -0
- package/lib/constants/gqlClient.js +4 -0
- package/lib/constants/maiaHourAgentAccess.js +15 -0
- package/lib/constants/maiaTaskPanelAccess.js +24 -0
- package/lib/constants/maiaTaskPanelOutsideClick.js +9 -0
- package/lib/constants/maiaTaskPanelZIndex.js +19 -0
- package/lib/constants/permissions/config.js +72 -0
- package/lib/constants/permissions/index.js +3 -0
- package/lib/constants/permissions/types.js +2 -0
- package/lib/constants/permissions/utils.js +18 -0
- package/lib/constants/plannerSyncEvents.js +15 -0
- package/lib/constants/taskLinkIcon.js +15 -0
- package/lib/constants/taskUrls.js +11 -0
- package/lib/context/cor-user.js +31 -0
- package/lib/context/global-context.js +39 -0
- package/lib/dev/DevChatAI.js +101 -0
- package/lib/dev/DevContextMentionInput.js +67 -0
- package/lib/dev/ProjectSummary.js +9 -0
- package/lib/dev/Providers.js +27 -0
- package/lib/exports.js +2 -0
- package/lib/hooks/README.md +192 -0
- package/lib/hooks/index.js +30 -0
- package/lib/hooks/useAccessClient/index.js +2 -0
- package/lib/hooks/useAccessClient/useAccessClient.js +81 -0
- package/lib/hooks/useAgentModel/index.js +2 -0
- package/lib/hooks/useAgentModel/useAgentModel.js +62 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +175 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.js +88 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.js +176 -0
- package/lib/hooks/useAgentSuggestions.js +60 -0
- package/lib/hooks/useCaretPosition.js +65 -0
- package/lib/hooks/useChatManager/index.js +2 -0
- package/lib/hooks/useChatManager/useChatManager.interface.js +2 -0
- package/lib/hooks/useChatManager/useChatManager.js +1782 -0
- package/lib/hooks/useChatMessages/index.js +2 -0
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +2 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +722 -0
- package/lib/hooks/useChats/index.js +2 -0
- package/lib/hooks/useChats/useChats.interfaces.js +2 -0
- package/lib/hooks/useChats/useChats.js +187 -0
- package/lib/hooks/useClientSearch.js +163 -0
- package/lib/hooks/useContextMentions.js +500 -0
- package/lib/hooks/useContextPinPopover.js +228 -0
- package/lib/hooks/useDebounce.js +18 -0
- package/lib/hooks/useEntitySearch.js +1053 -0
- package/lib/hooks/useEvent.js +94 -0
- package/lib/hooks/useFrequentlyAskedQuestions.js +150 -0
- package/lib/hooks/useFrequentlyUsedActions.js +94 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.js +69 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.js +81 -0
- package/lib/hooks/useKnowledge/index.js +4 -0
- package/lib/hooks/useKnowledge/saveKnowledge.js +107 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +156 -0
- package/lib/hooks/useMaiaTaskPanelZIndex.js +17 -0
- package/lib/hooks/useMentionAllowedTypes.js +120 -0
- package/lib/hooks/useMentionPopover.js +342 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +110 -0
- package/lib/hooks/useModal/index.js +2 -0
- package/lib/hooks/useModal/useModal.interfaces.js +2 -0
- package/lib/hooks/useModal/useModal.js +47 -0
- package/lib/hooks/useOnboardingNavigation.js +20 -0
- package/lib/hooks/useOrchestratorStream/index.js +2 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +2 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +269 -0
- package/lib/hooks/useProjectSearch.js +183 -0
- package/lib/hooks/useProjectSummary.js +101 -0
- package/lib/hooks/useProjectSummaryConfig.js +211 -0
- package/lib/hooks/useProjects.js +46 -0
- package/lib/hooks/useRecentClientsSearch.js +150 -0
- package/lib/hooks/useRecentContexts.js +86 -0
- package/lib/hooks/useResize.js +29 -0
- package/lib/hooks/useSkillsCatalog.js +66 -0
- package/lib/hooks/useSlashCommands.js +84 -0
- package/lib/hooks/useSmoothStreamText/index.js +2 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +197 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.js +41 -0
- package/lib/hooks/useStreamResponse.js +112 -0
- package/lib/hooks/useStreamdownStyles.js +13 -0
- package/lib/hooks/useStreamingMessage/index.js +2 -0
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +18 -0
- package/lib/hooks/useT.js +17 -0
- package/lib/hooks/useTabTaskDefault.js +33 -0
- package/lib/hooks/useTaskPanel.js +22 -0
- package/lib/hooks/useTextOverflowEllipsisTooltip.js +34 -0
- package/lib/hooks/useToggle.js +19 -0
- package/lib/hooks/useToggleFavorite/index.js +2 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.js +83 -0
- package/lib/index.css +76 -0
- package/lib/index.js +30 -0
- package/lib/lang/br/index.js +793 -0
- package/lib/lang/en/index.js +793 -0
- package/lib/lang/es/index.js +794 -0
- package/lib/lang/fr/index.js +614 -0
- package/lib/lang/index.js +24 -0
- package/lib/lang/utils.js +33 -0
- package/lib/mocks/mockChats.js +395 -0
- package/lib/mocks/mockOrchestrator.js +5 -0
- package/lib/mocks/mockProject.js +11 -0
- package/lib/mocks/mockProjectSummary.js +6 -0
- package/lib/mocks/mockedUser.js +169 -0
- package/lib/services/apolloClient.js +3 -0
- package/lib/services/appcues.js +19 -0
- package/lib/services/corpilot/ProjectSummary/getProjectSummary.js +31 -0
- package/lib/services/corpilot/ProjectSummary/index.js +5 -0
- package/lib/services/corpilot/client.js +27 -0
- package/lib/services/corpilot/index.js +5 -0
- package/lib/services/maia/Access/updateAccess.js +59 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +46 -0
- package/lib/services/maia/Actions/getSlashCommands.js +39 -0
- package/lib/services/maia/Actions/index.js +7 -0
- package/lib/services/maia/Agents/connectors.js +250 -0
- package/lib/services/maia/Agents/createAgent.js +39 -0
- package/lib/services/maia/Agents/deleteAgent.js +38 -0
- package/lib/services/maia/Agents/fetchAgentDetail.js +122 -0
- package/lib/services/maia/Agents/getAgentById.js +162 -0
- package/lib/services/maia/Agents/getAgentModels.js +112 -0
- package/lib/services/maia/Agents/getAgentSuggestions.js +44 -0
- package/lib/services/maia/Agents/getAgents.js +718 -0
- package/lib/services/maia/Agents/setAgentToolGroups.js +42 -0
- package/lib/services/maia/Agents/toggleFavorite.js +34 -0
- package/lib/services/maia/Agents/updateAgent.js +39 -0
- package/lib/services/maia/Chats/deleteChat.js +32 -0
- package/lib/services/maia/Chats/getChatMessages.js +144 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +82 -0
- package/lib/services/maia/Chats/index.js +15 -0
- package/lib/services/maia/Chats/markSessionAsRead.js +32 -0
- package/lib/services/maia/Chats/patchChat.js +43 -0
- package/lib/services/maia/Chats/wasHelpfulChat.js +31 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +55 -0
- package/lib/services/maia/Faqs/index.js +5 -0
- package/lib/services/maia/Knowledge/delete.js +41 -0
- package/lib/services/maia/Knowledge/download.js +48 -0
- package/lib/services/maia/Knowledge/index.js +3 -0
- package/lib/services/maia/Knowledge/save.js +43 -0
- package/lib/services/maia/Orchestrator/index.js +7 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +246 -0
- package/lib/services/maia/RecentClients/getRecentClients.js +43 -0
- package/lib/services/maia/RecentClients/index.js +6 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.js +54 -0
- package/lib/services/maia/RecentContexts/index.js +6 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.js +55 -0
- package/lib/services/maia/RecentProjects/index.js +6 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.js +54 -0
- package/lib/services/maia/RecentTasks/index.js +6 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
- package/lib/services/maia/RecentUsers/index.js +6 -0
- package/lib/services/maia/Skills/createSkill.js +39 -0
- package/lib/services/maia/Skills/deleteSkill.js +38 -0
- package/lib/services/maia/Skills/generateSkill.js +41 -0
- package/lib/services/maia/Skills/getSkills.js +120 -0
- package/lib/services/maia/Skills/updateSkill.js +39 -0
- package/lib/services/maia/client.js +27 -0
- package/lib/services/maia/index.js +17 -0
- package/lib/services/query/ClientSearchQuery.js +5 -0
- package/lib/services/query/entitySearchQuery.js +18 -0
- package/lib/services/query/index.js +2 -0
- package/lib/services/query/projectSearchByValueQuery.js +5 -0
- package/lib/services/query/taskUserTabQuery.js +8 -0
- package/lib/services/query/usersDirectoryQuery.js +19 -0
- package/lib/services/types.js +6 -0
- package/lib/services/utils/fetchCOR.js +117 -0
- package/lib/services/utils/getCookie.js +10 -0
- package/lib/services/utils/index.js +3 -0
- package/lib/services/utils/mapChatMessages.js +287 -0
- package/lib/services/utils/validateIsMaia.js +4 -0
- package/lib/store/chatsSidebarOptimistic.js +92 -0
- package/lib/store/chatsStore.types.js +2 -0
- package/lib/store/chatsStoreLifecycle.js +8 -0
- package/lib/store/faqsStore.types.js +2 -0
- package/lib/store/index.js +4 -0
- package/lib/store/maiaLastChatPersistence.js +35 -0
- package/lib/store/sessions/activeView.js +22 -0
- package/lib/store/sessions/index.js +9 -0
- package/lib/store/sessions/sessionHitlContext.js +15 -0
- package/lib/store/sessions/sessionNotificationSound.js +57 -0
- package/lib/store/sessions/sessionNotifications.js +110 -0
- package/lib/store/sessions/sessionNotifications.types.js +2 -0
- package/lib/store/sessions/sessionStreamManager.js +715 -0
- package/lib/store/sessions/sessionStreamingText.js +80 -0
- package/lib/store/sessions/sessions.types.js +35 -0
- package/lib/store/sessions/useSessionMeta.js +39 -0
- package/lib/store/sessions/useSessionStreamingText.js +18 -0
- package/lib/store/sessions/useSessionsStore.js +197 -0
- package/lib/store/useChatsStore.js +387 -0
- package/lib/store/useFaqsStore.js +27 -0
- package/lib/streamdownStyles.js +9 -0
- package/lib/styles/StyledCleanContainer.js +7 -0
- package/lib/styles/cascade.js +14 -0
- package/lib/styles/config.js +47 -0
- package/lib/styles/shared/scrollable.js +3 -0
- package/lib/styles/transitions.js +21 -0
- package/lib/types/Action.js +2 -0
- package/lib/types/AgentSuggestion.js +2 -0
- package/lib/types/Chat.js +10 -0
- package/lib/types/Client.js +2 -0
- package/lib/types/FrequentlyAskedQuestion.js +2 -0
- package/lib/types/Project.js +2 -0
- package/lib/types/ProjectSummaryConfigKeys.js +9 -0
- package/lib/types/Task.js +2 -0
- package/lib/types/agent.js +2 -0
- package/lib/types/agentModal.js +2 -0
- package/lib/types/contextMention.js +37 -0
- package/lib/types/global.d.js +2 -0
- package/lib/types/skill.js +2 -0
- package/lib/types/streamActivity.js +2 -0
- package/lib/types/userType.d.js +2 -0
- package/lib/utils/actionCategoryMap.js +37 -0
- package/lib/utils/actionIconMap.js +61 -0
- package/lib/utils/agentDisplayName.js +42 -0
- package/lib/utils/chatInputFiles.js +52 -0
- package/lib/utils/contextMentionIcons.js +134 -0
- package/lib/utils/contextMentionLabel.js +4 -0
- package/lib/utils/contextMentionTriggers.js +51 -0
- package/lib/utils/contextMentionTypeLabel.js +17 -0
- package/lib/utils/corConnectorMentionTypes.js +41 -0
- package/lib/utils/ensureStreamdownStyles.js +21 -0
- package/lib/utils/entityLinkRender.js +135 -0
- package/lib/utils/fileDownloadHelper.js +40 -0
- package/lib/utils/formatQuickActionMessage.js +16 -0
- package/lib/utils/formatUnreadCount.js +6 -0
- package/lib/utils/getUnitFileSize.js +13 -0
- package/lib/utils/hitlAnalytics.js +65 -0
- package/lib/utils/hoursPlannerQuickActionType.js +64 -0
- package/lib/utils/imagePreprocessor.js +108 -0
- package/lib/utils/index.js +3 -0
- package/lib/utils/maiaHostOpen.js +19 -0
- package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
- package/lib/utils/mapBackendLang.js +8 -0
- package/lib/utils/normalizeAgentConnectors.js +95 -0
- package/lib/utils/openTaskInCorPanel.js +22 -0
- package/lib/utils/orchestratorSubagents.js +11 -0
- package/lib/utils/renderContextMentions.js +420 -0
- package/lib/utils/retryCompletion.js +85 -0
- package/lib/utils/slashCommandMarker.js +30 -0
- package/lib/utils/sortManagerHoursHomeFuas.js +14 -0
- package/lib/utils/sseStreamContent.js +17 -0
- package/lib/utils/streamActivityMessages.js +359 -0
- package/lib/utils/validateTrimmedFields.js +8 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
5
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
9
|
+
import { createPortal } from 'react-dom';
|
|
10
|
+
import { Cross } from '@projectcor/icons/lib/components/Cross';
|
|
11
|
+
import { FileUpload } from '@projectcor/icons/lib/components/FileUpload';
|
|
12
|
+
import { useTranslation } from 'react-i18next';
|
|
13
|
+
import { Backdrop } from '../../atoms/Backdrop';
|
|
14
|
+
import { Loader } from '../../atoms/Loader';
|
|
15
|
+
import { Switch } from '../../atoms/Switch';
|
|
16
|
+
import { SECTIONS } from '../../../constants/config';
|
|
17
|
+
import { useUser, isCollaboratorRole } from '../../../context/cor-user';
|
|
18
|
+
import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
|
|
19
|
+
import { formatDate } from '../../../lang/utils';
|
|
20
|
+
import { createSkill } from '../../../services/maia/Skills/createSkill';
|
|
21
|
+
import { updateSkill } from '../../../services/maia/Skills/updateSkill';
|
|
22
|
+
import { deleteSkill } from '../../../services/maia/Skills/deleteSkill';
|
|
23
|
+
import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal';
|
|
24
|
+
import { SCASMCancelButton, SCASMCloseButton, SCASMBody, SCASMDeleteSlot, SCASMFieldBox, SCASMFieldInput, SCASMFieldLabel, SCASMFieldTextarea, SCASMFooter, SCASMHeader, SCASMHeaderTitle, SCASMHiddenFileInput, SCASMInstructionsField, SCASMInstructionsHeader, SCASMInstructionsPanel, SCASMInstructionsTextarea, SCASMInstructionsTitle, SCASMMetadataItem, SCASMPreviewBody, SCASMPreviewContentBox, SCASMPreviewContentPanel, SCASMPreviewDescription, SCASMPreviewHeadingBlock, SCASMPreviewMetadataLabel, SCASMPreviewMetadataRow, SCASMPreviewMetadataValue, SCASMPreviewName, SCASMSaveOutlinedButton, SCASMSavePrimaryButton, SCASMSwitchLabel, SCASMSwitchRow, SCASMUploadButton, SCASMUseSkillButton, SCASMWrapper } from './AbmSkillModal.styles';
|
|
25
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
26
|
+
export var SKILL_USE_AFTER_SAVE_EVENT = 'maia-use-skill-after-save';
|
|
27
|
+
var initialValues = {
|
|
28
|
+
isEditing: false,
|
|
29
|
+
general: {
|
|
30
|
+
id: undefined,
|
|
31
|
+
name: '',
|
|
32
|
+
description: '',
|
|
33
|
+
content: '',
|
|
34
|
+
access_type: 'only_me'
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var emptyBaseline = {
|
|
38
|
+
name: '',
|
|
39
|
+
description: '',
|
|
40
|
+
content: '',
|
|
41
|
+
access_type: 'only_me'
|
|
42
|
+
};
|
|
43
|
+
var parseDescriptionFromContent = function parseDescriptionFromContent(content) {
|
|
44
|
+
var frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
45
|
+
if (!frontmatterMatch) return '';
|
|
46
|
+
var descriptionMatch = frontmatterMatch[1].match(/^description:\s*(.+)$/m);
|
|
47
|
+
return descriptionMatch ? descriptionMatch[1].trim() : '';
|
|
48
|
+
};
|
|
49
|
+
export var AbmSkillModal = function AbmSkillModal(_ref) {
|
|
50
|
+
var _values$general, _values$general2, _values$general3, _values$general4, _values$general5, _values$general7, _values$general9;
|
|
51
|
+
var addSkill = _ref.addSkill,
|
|
52
|
+
updateSkillInList = _ref.updateSkillInList,
|
|
53
|
+
removeSkill = _ref.removeSkill;
|
|
54
|
+
var _useTranslation = useTranslation([SECTIONS.chatAI]),
|
|
55
|
+
t = _useTranslation.t;
|
|
56
|
+
var user = useUser();
|
|
57
|
+
var _useSnackBarManager = useSnackBarManager(),
|
|
58
|
+
handleSnackbarSuccess = _useSnackBarManager.handleSnackbarSuccess,
|
|
59
|
+
handleSnackbarError = _useSnackBarManager.handleSnackbarError;
|
|
60
|
+
var _useState = useState(false),
|
|
61
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
62
|
+
isOpen = _useState2[0],
|
|
63
|
+
setIsOpen = _useState2[1];
|
|
64
|
+
var _useState3 = useState(false),
|
|
65
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
66
|
+
isSubmitting = _useState4[0],
|
|
67
|
+
setIsSubmitting = _useState4[1];
|
|
68
|
+
var _useState5 = useState(false),
|
|
69
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
70
|
+
showDelete = _useState6[0],
|
|
71
|
+
setShowDelete = _useState6[1];
|
|
72
|
+
var _useState7 = useState(false),
|
|
73
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
74
|
+
pendingUpload = _useState8[0],
|
|
75
|
+
setPendingUpload = _useState8[1];
|
|
76
|
+
var _useState9 = useState(initialValues),
|
|
77
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
78
|
+
values = _useState0[0],
|
|
79
|
+
setValues = _useState0[1];
|
|
80
|
+
var fileInputRef = useRef(null);
|
|
81
|
+
var initialRef = useRef(emptyBaseline);
|
|
82
|
+
var isReadOnly = !!values.isReadOnly;
|
|
83
|
+
var canShareWithCompany = !isCollaboratorRole(user.role_id) && !isReadOnly;
|
|
84
|
+
var name = ((_values$general = values.general) === null || _values$general === void 0 ? void 0 : _values$general.name) || '';
|
|
85
|
+
var description = ((_values$general2 = values.general) === null || _values$general2 === void 0 ? void 0 : _values$general2.description) || '';
|
|
86
|
+
var content = ((_values$general3 = values.general) === null || _values$general3 === void 0 ? void 0 : _values$general3.content) || '';
|
|
87
|
+
var accessType = ((_values$general4 = values.general) === null || _values$general4 === void 0 ? void 0 : _values$general4.access_type) || 'only_me';
|
|
88
|
+
var effectiveAccessType = canShareWithCompany ? accessType : 'only_me';
|
|
89
|
+
var skillId = (_values$general5 = values.general) === null || _values$general5 === void 0 ? void 0 : _values$general5.id;
|
|
90
|
+
var isValid = !!name.trim() && !!description.trim() && !!content.trim();
|
|
91
|
+
var hasChanges = name.trim() !== initialRef.current.name || description.trim() !== initialRef.current.description || content.trim() !== initialRef.current.content || canShareWithCompany && effectiveAccessType !== initialRef.current.access_type;
|
|
92
|
+
var createdByLabel = useMemo(function () {
|
|
93
|
+
var _values$general6;
|
|
94
|
+
return ((_values$general6 = values.general) === null || _values$general6 === void 0 || (_values$general6 = _values$general6.created_by_name) === null || _values$general6 === void 0 ? void 0 : _values$general6.trim()) || "".concat(user.firstName, " ").concat(user.lastName).trim();
|
|
95
|
+
}, [(_values$general7 = values.general) === null || _values$general7 === void 0 ? void 0 : _values$general7.created_by_name, user.firstName, user.lastName]);
|
|
96
|
+
var lastUpdatedLabel = useMemo(function () {
|
|
97
|
+
var _values$general8;
|
|
98
|
+
var updatedAt = (_values$general8 = values.general) === null || _values$general8 === void 0 ? void 0 : _values$general8.updated_at;
|
|
99
|
+
if (!updatedAt) return '';
|
|
100
|
+
var parsed = new Date(updatedAt);
|
|
101
|
+
if (Number.isNaN(parsed.getTime())) return '';
|
|
102
|
+
return formatDate(parsed);
|
|
103
|
+
}, [(_values$general9 = values.general) === null || _values$general9 === void 0 ? void 0 : _values$general9.updated_at]);
|
|
104
|
+
var handleClose = useCallback(function () {
|
|
105
|
+
setIsOpen(false);
|
|
106
|
+
setShowDelete(false);
|
|
107
|
+
setPendingUpload(false);
|
|
108
|
+
setValues(initialValues);
|
|
109
|
+
initialRef.current = emptyBaseline;
|
|
110
|
+
}, []);
|
|
111
|
+
var handleBackdropClick = useCallback(function (event) {
|
|
112
|
+
if (event.target === event.currentTarget) {
|
|
113
|
+
handleClose();
|
|
114
|
+
}
|
|
115
|
+
}, [handleClose]);
|
|
116
|
+
useEffect(function () {
|
|
117
|
+
var handleSetSkillValues = function handleSetSkillValues(event) {
|
|
118
|
+
var _skillValues$values, _skillValues$values2, _skillValues$values3;
|
|
119
|
+
var _ref2 = event.detail || {},
|
|
120
|
+
skillValues = _ref2.skillValues;
|
|
121
|
+
if (!skillValues) return;
|
|
122
|
+
var incomingGeneral = _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values = skillValues.values) === null || _skillValues$values === void 0 ? void 0 : _skillValues$values.general);
|
|
123
|
+
var incomingName = (incomingGeneral.name || '').trim();
|
|
124
|
+
var incomingDescription = (incomingGeneral.description || '').trim();
|
|
125
|
+
var incomingContent = (incomingGeneral.content || '').trim();
|
|
126
|
+
var incomingAccessType = isCollaboratorRole(user.role_id) ? 'only_me' : incomingGeneral.access_type || 'only_me';
|
|
127
|
+
var parsedDescription = incomingDescription || (incomingContent ? parseDescriptionFromContent(incomingContent) : '');
|
|
128
|
+
initialRef.current = (_skillValues$values2 = skillValues.values) !== null && _skillValues$values2 !== void 0 && _skillValues$values2.isEditing ? {
|
|
129
|
+
name: incomingName,
|
|
130
|
+
description: parsedDescription,
|
|
131
|
+
content: incomingContent,
|
|
132
|
+
access_type: incomingAccessType
|
|
133
|
+
} : emptyBaseline;
|
|
134
|
+
setValues(_objectSpread(_objectSpread(_objectSpread({}, initialValues), skillValues.values), {}, {
|
|
135
|
+
general: _objectSpread(_objectSpread({}, incomingGeneral), {}, {
|
|
136
|
+
description: parsedDescription,
|
|
137
|
+
access_type: incomingAccessType
|
|
138
|
+
})
|
|
139
|
+
}));
|
|
140
|
+
setPendingUpload(((_skillValues$values3 = skillValues.values) === null || _skillValues$values3 === void 0 ? void 0 : _skillValues$values3.intent) === 'upload');
|
|
141
|
+
setIsOpen(!!skillValues.isOpen);
|
|
142
|
+
};
|
|
143
|
+
document.addEventListener('abm-skill-modal-set-values', handleSetSkillValues);
|
|
144
|
+
return function () {
|
|
145
|
+
document.removeEventListener('abm-skill-modal-set-values', handleSetSkillValues);
|
|
146
|
+
};
|
|
147
|
+
}, [user.role_id]);
|
|
148
|
+
useEffect(function () {
|
|
149
|
+
if (isOpen && pendingUpload) {
|
|
150
|
+
var _fileInputRef$current;
|
|
151
|
+
setPendingUpload(false);
|
|
152
|
+
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
|
|
153
|
+
}
|
|
154
|
+
}, [isOpen, pendingUpload]);
|
|
155
|
+
var handleChangeField = function handleChangeField(field, value) {
|
|
156
|
+
setValues(function (prev) {
|
|
157
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
158
|
+
general: _objectSpread(_objectSpread({}, prev.general), {}, _defineProperty({}, field, value))
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
};
|
|
162
|
+
var handleAccessTypeChange = function handleAccessTypeChange(checked) {
|
|
163
|
+
if (!canShareWithCompany) return;
|
|
164
|
+
setValues(function (prev) {
|
|
165
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
166
|
+
general: _objectSpread(_objectSpread({}, prev.general), {}, {
|
|
167
|
+
access_type: checked ? 'company' : 'only_me'
|
|
168
|
+
})
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
};
|
|
172
|
+
var handleUploadClick = function handleUploadClick() {
|
|
173
|
+
var _fileInputRef$current2;
|
|
174
|
+
(_fileInputRef$current2 = fileInputRef.current) === null || _fileInputRef$current2 === void 0 || _fileInputRef$current2.click();
|
|
175
|
+
};
|
|
176
|
+
var handleFileChange = /*#__PURE__*/function () {
|
|
177
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(event) {
|
|
178
|
+
var _event$target$files;
|
|
179
|
+
var file, isMarkdown, text, baseName, parsedDescription, _t;
|
|
180
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
181
|
+
while (1) switch (_context.prev = _context.next) {
|
|
182
|
+
case 0:
|
|
183
|
+
file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0];
|
|
184
|
+
if (fileInputRef.current) {
|
|
185
|
+
fileInputRef.current.value = '';
|
|
186
|
+
}
|
|
187
|
+
if (file) {
|
|
188
|
+
_context.next = 1;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
return _context.abrupt("return");
|
|
192
|
+
case 1:
|
|
193
|
+
isMarkdown = /\.(md|markdown)$/i.test(file.name);
|
|
194
|
+
if (isMarkdown) {
|
|
195
|
+
_context.next = 2;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
handleSnackbarError(t('mySkills.uploadError'));
|
|
199
|
+
return _context.abrupt("return");
|
|
200
|
+
case 2:
|
|
201
|
+
_context.prev = 2;
|
|
202
|
+
_context.next = 3;
|
|
203
|
+
return file.text();
|
|
204
|
+
case 3:
|
|
205
|
+
text = _context.sent;
|
|
206
|
+
baseName = file.name.replace(/\.(md|markdown)$/i, '');
|
|
207
|
+
parsedDescription = parseDescriptionFromContent(text);
|
|
208
|
+
setValues(function (prev) {
|
|
209
|
+
var _prev$general, _prev$general2, _prev$general3;
|
|
210
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
211
|
+
general: _objectSpread(_objectSpread({}, prev.general), {}, {
|
|
212
|
+
content: text,
|
|
213
|
+
description: (_prev$general = prev.general) !== null && _prev$general !== void 0 && (_prev$general = _prev$general.description) !== null && _prev$general !== void 0 && _prev$general.trim() ? prev.general.description : parsedDescription || ((_prev$general2 = prev.general) === null || _prev$general2 === void 0 ? void 0 : _prev$general2.description) || '',
|
|
214
|
+
name: (_prev$general3 = prev.general) !== null && _prev$general3 !== void 0 && (_prev$general3 = _prev$general3.name) !== null && _prev$general3 !== void 0 && _prev$general3.trim() ? prev.general.name : baseName
|
|
215
|
+
})
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
_context.next = 5;
|
|
219
|
+
break;
|
|
220
|
+
case 4:
|
|
221
|
+
_context.prev = 4;
|
|
222
|
+
_t = _context["catch"](2);
|
|
223
|
+
handleSnackbarError(t('mySkills.uploadError'));
|
|
224
|
+
case 5:
|
|
225
|
+
case "end":
|
|
226
|
+
return _context.stop();
|
|
227
|
+
}
|
|
228
|
+
}, _callee, null, [[2, 4]]);
|
|
229
|
+
}));
|
|
230
|
+
return function handleFileChange(_x) {
|
|
231
|
+
return _ref3.apply(this, arguments);
|
|
232
|
+
};
|
|
233
|
+
}();
|
|
234
|
+
var persistSkill = /*#__PURE__*/function () {
|
|
235
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
236
|
+
var payload, updated, created;
|
|
237
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
238
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
239
|
+
case 0:
|
|
240
|
+
payload = {
|
|
241
|
+
name: name.trim(),
|
|
242
|
+
description: description.trim(),
|
|
243
|
+
content: content.trim(),
|
|
244
|
+
access_type: effectiveAccessType
|
|
245
|
+
};
|
|
246
|
+
if (!(values.isEditing && skillId)) {
|
|
247
|
+
_context2.next = 2;
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
_context2.next = 1;
|
|
251
|
+
return updateSkill(skillId, payload);
|
|
252
|
+
case 1:
|
|
253
|
+
updated = _context2.sent;
|
|
254
|
+
updateSkillInList === null || updateSkillInList === void 0 || updateSkillInList(updated);
|
|
255
|
+
handleSnackbarSuccess(t('mySkills.updateSuccess'));
|
|
256
|
+
return _context2.abrupt("return", updated);
|
|
257
|
+
case 2:
|
|
258
|
+
_context2.next = 3;
|
|
259
|
+
return createSkill(payload);
|
|
260
|
+
case 3:
|
|
261
|
+
created = _context2.sent;
|
|
262
|
+
addSkill === null || addSkill === void 0 || addSkill(created);
|
|
263
|
+
handleSnackbarSuccess(t('mySkills.createSuccess'));
|
|
264
|
+
return _context2.abrupt("return", created);
|
|
265
|
+
case 4:
|
|
266
|
+
case "end":
|
|
267
|
+
return _context2.stop();
|
|
268
|
+
}
|
|
269
|
+
}, _callee2);
|
|
270
|
+
}));
|
|
271
|
+
return function persistSkill() {
|
|
272
|
+
return _ref4.apply(this, arguments);
|
|
273
|
+
};
|
|
274
|
+
}();
|
|
275
|
+
var handleSave = /*#__PURE__*/function () {
|
|
276
|
+
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
277
|
+
var _t2;
|
|
278
|
+
return _regeneratorRuntime.wrap(function (_context3) {
|
|
279
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
280
|
+
case 0:
|
|
281
|
+
if (!(!isValid || isSubmitting || !hasChanges)) {
|
|
282
|
+
_context3.next = 1;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
return _context3.abrupt("return");
|
|
286
|
+
case 1:
|
|
287
|
+
setIsSubmitting(true);
|
|
288
|
+
_context3.prev = 2;
|
|
289
|
+
_context3.next = 3;
|
|
290
|
+
return persistSkill();
|
|
291
|
+
case 3:
|
|
292
|
+
handleClose();
|
|
293
|
+
_context3.next = 5;
|
|
294
|
+
break;
|
|
295
|
+
case 4:
|
|
296
|
+
_context3.prev = 4;
|
|
297
|
+
_t2 = _context3["catch"](2);
|
|
298
|
+
handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
|
|
299
|
+
case 5:
|
|
300
|
+
_context3.prev = 5;
|
|
301
|
+
setIsSubmitting(false);
|
|
302
|
+
return _context3.finish(5);
|
|
303
|
+
case 6:
|
|
304
|
+
case "end":
|
|
305
|
+
return _context3.stop();
|
|
306
|
+
}
|
|
307
|
+
}, _callee3, null, [[2, 4, 5, 6]]);
|
|
308
|
+
}));
|
|
309
|
+
return function handleSave() {
|
|
310
|
+
return _ref5.apply(this, arguments);
|
|
311
|
+
};
|
|
312
|
+
}();
|
|
313
|
+
var handleSaveAndUse = /*#__PURE__*/function () {
|
|
314
|
+
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
315
|
+
var savedSkill, _t3;
|
|
316
|
+
return _regeneratorRuntime.wrap(function (_context4) {
|
|
317
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
318
|
+
case 0:
|
|
319
|
+
if (!(!isValid || isSubmitting)) {
|
|
320
|
+
_context4.next = 1;
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
return _context4.abrupt("return");
|
|
324
|
+
case 1:
|
|
325
|
+
setIsSubmitting(true);
|
|
326
|
+
_context4.prev = 2;
|
|
327
|
+
_context4.next = 3;
|
|
328
|
+
return persistSkill();
|
|
329
|
+
case 3:
|
|
330
|
+
savedSkill = _context4.sent;
|
|
331
|
+
if (savedSkill) {
|
|
332
|
+
document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
|
|
333
|
+
detail: {
|
|
334
|
+
skill: savedSkill
|
|
335
|
+
}
|
|
336
|
+
}));
|
|
337
|
+
}
|
|
338
|
+
handleClose();
|
|
339
|
+
_context4.next = 5;
|
|
340
|
+
break;
|
|
341
|
+
case 4:
|
|
342
|
+
_context4.prev = 4;
|
|
343
|
+
_t3 = _context4["catch"](2);
|
|
344
|
+
handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
|
|
345
|
+
case 5:
|
|
346
|
+
_context4.prev = 5;
|
|
347
|
+
setIsSubmitting(false);
|
|
348
|
+
return _context4.finish(5);
|
|
349
|
+
case 6:
|
|
350
|
+
case "end":
|
|
351
|
+
return _context4.stop();
|
|
352
|
+
}
|
|
353
|
+
}, _callee4, null, [[2, 4, 5, 6]]);
|
|
354
|
+
}));
|
|
355
|
+
return function handleSaveAndUse() {
|
|
356
|
+
return _ref6.apply(this, arguments);
|
|
357
|
+
};
|
|
358
|
+
}();
|
|
359
|
+
var handleConfirmDelete = /*#__PURE__*/function () {
|
|
360
|
+
var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
361
|
+
var _t4;
|
|
362
|
+
return _regeneratorRuntime.wrap(function (_context5) {
|
|
363
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
364
|
+
case 0:
|
|
365
|
+
if (skillId) {
|
|
366
|
+
_context5.next = 1;
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
return _context5.abrupt("return");
|
|
370
|
+
case 1:
|
|
371
|
+
_context5.prev = 1;
|
|
372
|
+
_context5.next = 2;
|
|
373
|
+
return deleteSkill(skillId);
|
|
374
|
+
case 2:
|
|
375
|
+
removeSkill === null || removeSkill === void 0 || removeSkill(skillId);
|
|
376
|
+
handleSnackbarSuccess(t('mySkills.deleteSuccess'));
|
|
377
|
+
handleClose();
|
|
378
|
+
_context5.next = 4;
|
|
379
|
+
break;
|
|
380
|
+
case 3:
|
|
381
|
+
_context5.prev = 3;
|
|
382
|
+
_t4 = _context5["catch"](1);
|
|
383
|
+
handleSnackbarError(t('mySkills.deleteError'));
|
|
384
|
+
case 4:
|
|
385
|
+
case "end":
|
|
386
|
+
return _context5.stop();
|
|
387
|
+
}
|
|
388
|
+
}, _callee5, null, [[1, 3]]);
|
|
389
|
+
}));
|
|
390
|
+
return function handleConfirmDelete() {
|
|
391
|
+
return _ref7.apply(this, arguments);
|
|
392
|
+
};
|
|
393
|
+
}();
|
|
394
|
+
|
|
395
|
+
/** Skill ajena en modo lectura: abre un chat nuevo con el primer agente y la mención ya puesta. */
|
|
396
|
+
var handleUseSkill = function handleUseSkill() {
|
|
397
|
+
if (!skillId) return;
|
|
398
|
+
document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
|
|
399
|
+
detail: {
|
|
400
|
+
skill: {
|
|
401
|
+
id: skillId,
|
|
402
|
+
name: name,
|
|
403
|
+
description: description,
|
|
404
|
+
content: content,
|
|
405
|
+
access_type: accessType
|
|
406
|
+
},
|
|
407
|
+
useFirstAgent: true
|
|
408
|
+
}
|
|
409
|
+
}));
|
|
410
|
+
handleClose();
|
|
411
|
+
};
|
|
412
|
+
if (!isOpen) return null;
|
|
413
|
+
var container = document.getElementById('modal-root-actions');
|
|
414
|
+
if (!container) return null;
|
|
415
|
+
var editOrCreateTitle = values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle');
|
|
416
|
+
var modalTitle = isReadOnly ? t('mySkills.viewTitle') : editOrCreateTitle;
|
|
417
|
+
var previewBody = /*#__PURE__*/_jsxs(SCASMPreviewBody, {
|
|
418
|
+
children: [/*#__PURE__*/_jsxs(SCASMPreviewHeadingBlock, {
|
|
419
|
+
children: [/*#__PURE__*/_jsx(SCASMPreviewName, {
|
|
420
|
+
children: name
|
|
421
|
+
}), description ? /*#__PURE__*/_jsx(SCASMPreviewDescription, {
|
|
422
|
+
children: description
|
|
423
|
+
}) : null]
|
|
424
|
+
}), /*#__PURE__*/_jsxs(SCASMPreviewMetadataRow, {
|
|
425
|
+
children: [/*#__PURE__*/_jsxs(SCASMMetadataItem, {
|
|
426
|
+
children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
|
|
427
|
+
children: t('mySkills.createdBy')
|
|
428
|
+
}), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
|
|
429
|
+
children: createdByLabel
|
|
430
|
+
})]
|
|
431
|
+
}), lastUpdatedLabel ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
|
|
432
|
+
children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
|
|
433
|
+
children: t('mySkills.lastUpdated')
|
|
434
|
+
}), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
|
|
435
|
+
children: lastUpdatedLabel
|
|
436
|
+
})]
|
|
437
|
+
}) : null]
|
|
438
|
+
}), /*#__PURE__*/_jsx(SCASMPreviewContentPanel, {
|
|
439
|
+
children: /*#__PURE__*/_jsx(SCASMPreviewContentBox, {
|
|
440
|
+
children: content
|
|
441
|
+
})
|
|
442
|
+
})]
|
|
443
|
+
});
|
|
444
|
+
return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(Backdrop, {
|
|
445
|
+
zIndex: 1112,
|
|
446
|
+
onClick: handleBackdropClick,
|
|
447
|
+
children: [/*#__PURE__*/_jsxs(SCASMWrapper, {
|
|
448
|
+
onClick: function onClick(event) {
|
|
449
|
+
return event.stopPropagation();
|
|
450
|
+
},
|
|
451
|
+
children: [/*#__PURE__*/_jsxs(SCASMHeader, {
|
|
452
|
+
children: [/*#__PURE__*/_jsx(SCASMHeaderTitle, {
|
|
453
|
+
children: modalTitle
|
|
454
|
+
}), /*#__PURE__*/_jsx(SCASMCloseButton, {
|
|
455
|
+
type: "button",
|
|
456
|
+
onClick: handleClose,
|
|
457
|
+
"aria-label": t('mySkills.close'),
|
|
458
|
+
children: /*#__PURE__*/_jsx(Cross, {
|
|
459
|
+
color: "#a6a6a6",
|
|
460
|
+
width: 18,
|
|
461
|
+
height: 18
|
|
462
|
+
})
|
|
463
|
+
})]
|
|
464
|
+
}), isReadOnly ? previewBody : /*#__PURE__*/_jsxs(SCASMBody, {
|
|
465
|
+
children: [/*#__PURE__*/_jsxs(SCASMFieldBox, {
|
|
466
|
+
$height: 50,
|
|
467
|
+
children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
|
|
468
|
+
htmlFor: "skill-name-input",
|
|
469
|
+
children: t('mySkills.nameLabel')
|
|
470
|
+
}), /*#__PURE__*/_jsx(SCASMFieldInput, {
|
|
471
|
+
id: "skill-name-input",
|
|
472
|
+
type: "text",
|
|
473
|
+
maxLength: 150,
|
|
474
|
+
placeholder: t('mySkills.namePlaceholder'),
|
|
475
|
+
value: name,
|
|
476
|
+
disabled: isSubmitting,
|
|
477
|
+
onChange: function onChange(event) {
|
|
478
|
+
return handleChangeField('name', event.target.value);
|
|
479
|
+
}
|
|
480
|
+
})]
|
|
481
|
+
}), /*#__PURE__*/_jsxs(SCASMFieldBox, {
|
|
482
|
+
$height: 120,
|
|
483
|
+
$clipOverflow: true,
|
|
484
|
+
children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
|
|
485
|
+
htmlFor: "skill-description-input",
|
|
486
|
+
children: t('mySkills.descriptionLabel')
|
|
487
|
+
}), /*#__PURE__*/_jsx(SCASMFieldTextarea, {
|
|
488
|
+
id: "skill-description-input",
|
|
489
|
+
maxLength: 500,
|
|
490
|
+
placeholder: t('mySkills.descriptionPlaceholder'),
|
|
491
|
+
value: description,
|
|
492
|
+
disabled: isSubmitting,
|
|
493
|
+
onChange: function onChange(event) {
|
|
494
|
+
return handleChangeField('description', event.target.value);
|
|
495
|
+
}
|
|
496
|
+
})]
|
|
497
|
+
}), canShareWithCompany ? /*#__PURE__*/_jsxs(SCASMSwitchRow, {
|
|
498
|
+
children: [/*#__PURE__*/_jsx(Switch, {
|
|
499
|
+
checked: accessType === 'company',
|
|
500
|
+
onChange: handleAccessTypeChange,
|
|
501
|
+
disabled: isSubmitting,
|
|
502
|
+
"aria-label": t('mySkills.shareWithCompany')
|
|
503
|
+
}), /*#__PURE__*/_jsx(SCASMSwitchLabel, {
|
|
504
|
+
children: t('mySkills.shareWithCompany')
|
|
505
|
+
})]
|
|
506
|
+
}) : null, /*#__PURE__*/_jsxs(SCASMInstructionsPanel, {
|
|
507
|
+
children: [/*#__PURE__*/_jsxs(SCASMInstructionsHeader, {
|
|
508
|
+
children: [/*#__PURE__*/_jsx(SCASMInstructionsTitle, {
|
|
509
|
+
children: t('mySkills.instructionsLabel')
|
|
510
|
+
}), /*#__PURE__*/_jsxs(SCASMUploadButton, {
|
|
511
|
+
type: "button",
|
|
512
|
+
onClick: handleUploadClick,
|
|
513
|
+
disabled: isSubmitting,
|
|
514
|
+
children: [/*#__PURE__*/_jsx(FileUpload, {
|
|
515
|
+
width: 18,
|
|
516
|
+
height: 18,
|
|
517
|
+
color: "#08C"
|
|
518
|
+
}), t('mySkills.uploadMd')]
|
|
519
|
+
}), /*#__PURE__*/_jsx(SCASMHiddenFileInput, {
|
|
520
|
+
ref: fileInputRef,
|
|
521
|
+
type: "file",
|
|
522
|
+
accept: ".md,.markdown,text/markdown",
|
|
523
|
+
onChange: handleFileChange
|
|
524
|
+
})]
|
|
525
|
+
}), /*#__PURE__*/_jsx(SCASMInstructionsField, {
|
|
526
|
+
children: /*#__PURE__*/_jsx(SCASMInstructionsTextarea, {
|
|
527
|
+
id: "skill-content-input",
|
|
528
|
+
maxLength: 100000,
|
|
529
|
+
placeholder: t('mySkills.contentPlaceholder'),
|
|
530
|
+
value: content,
|
|
531
|
+
disabled: isSubmitting,
|
|
532
|
+
onChange: function onChange(event) {
|
|
533
|
+
return handleChangeField('content', event.target.value);
|
|
534
|
+
}
|
|
535
|
+
})
|
|
536
|
+
})]
|
|
537
|
+
})]
|
|
538
|
+
}), /*#__PURE__*/_jsx(SCASMFooter, {
|
|
539
|
+
children: isReadOnly ? /*#__PURE__*/_jsx(SCASMUseSkillButton, {
|
|
540
|
+
type: "button",
|
|
541
|
+
onClick: handleUseSkill,
|
|
542
|
+
children: t('mySkills.useSkill')
|
|
543
|
+
}) : /*#__PURE__*/_jsxs(_Fragment, {
|
|
544
|
+
children: [values.isEditing ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
|
|
545
|
+
children: /*#__PURE__*/_jsx(SCASMCancelButton, {
|
|
546
|
+
type: "button",
|
|
547
|
+
onClick: function onClick() {
|
|
548
|
+
return setShowDelete(true);
|
|
549
|
+
},
|
|
550
|
+
disabled: isSubmitting,
|
|
551
|
+
children: t('mySkills.delete')
|
|
552
|
+
})
|
|
553
|
+
}) : null, /*#__PURE__*/_jsx(SCASMSaveOutlinedButton, {
|
|
554
|
+
type: "button",
|
|
555
|
+
onClick: handleSave,
|
|
556
|
+
disabled: !isValid || isSubmitting || !hasChanges,
|
|
557
|
+
children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
|
|
558
|
+
size: "small"
|
|
559
|
+
}) : t('mySkills.save')
|
|
560
|
+
}), /*#__PURE__*/_jsx(SCASMSavePrimaryButton, {
|
|
561
|
+
type: "button",
|
|
562
|
+
onClick: handleSaveAndUse,
|
|
563
|
+
disabled: !isValid || isSubmitting,
|
|
564
|
+
children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
|
|
565
|
+
size: "small"
|
|
566
|
+
}) : t('mySkills.saveAndUse')
|
|
567
|
+
})]
|
|
568
|
+
})
|
|
569
|
+
})]
|
|
570
|
+
}), showDelete && skillId ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
|
|
571
|
+
onClose: function onClose() {
|
|
572
|
+
return setShowDelete(false);
|
|
573
|
+
},
|
|
574
|
+
handlers: {
|
|
575
|
+
handleConfirmAction: handleConfirmDelete
|
|
576
|
+
},
|
|
577
|
+
chat: {
|
|
578
|
+
title: name,
|
|
579
|
+
id: skillId
|
|
580
|
+
},
|
|
581
|
+
action: "skill"
|
|
582
|
+
}) : null]
|
|
583
|
+
}), container);
|
|
584
|
+
};
|
|
585
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIkNyb3NzIiwiRmlsZVVwbG9hZCIsInVzZVRyYW5zbGF0aW9uIiwiQmFja2Ryb3AiLCJMb2FkZXIiLCJTd2l0Y2giLCJTRUNUSU9OUyIsInVzZVVzZXIiLCJpc0NvbGxhYm9yYXRvclJvbGUiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmb3JtYXREYXRlIiwiY3JlYXRlU2tpbGwiLCJ1cGRhdGVTa2lsbCIsImRlbGV0ZVNraWxsIiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsIlNDQVNNQ2FuY2VsQnV0dG9uIiwiU0NBU01DbG9zZUJ1dHRvbiIsIlNDQVNNQm9keSIsIlNDQVNNRGVsZXRlU2xvdCIsIlNDQVNNRmllbGRCb3giLCJTQ0FTTUZpZWxkSW5wdXQiLCJTQ0FTTUZpZWxkTGFiZWwiLCJTQ0FTTUZpZWxkVGV4dGFyZWEiLCJTQ0FTTUZvb3RlciIsIlNDQVNNSGVhZGVyIiwiU0NBU01IZWFkZXJUaXRsZSIsIlNDQVNNSGlkZGVuRmlsZUlucHV0IiwiU0NBU01JbnN0cnVjdGlvbnNGaWVsZCIsIlNDQVNNSW5zdHJ1Y3Rpb25zSGVhZGVyIiwiU0NBU01JbnN0cnVjdGlvbnNQYW5lbCIsIlNDQVNNSW5zdHJ1Y3Rpb25zVGV4dGFyZWEiLCJTQ0FTTUluc3RydWN0aW9uc1RpdGxlIiwiU0NBU01NZXRhZGF0YUl0ZW0iLCJTQ0FTTVByZXZpZXdCb2R5IiwiU0NBU01QcmV2aWV3Q29udGVudEJveCIsIlNDQVNNUHJldmlld0NvbnRlbnRQYW5lbCIsIlNDQVNNUHJldmlld0Rlc2NyaXB0aW9uIiwiU0NBU01QcmV2aWV3SGVhZGluZ0Jsb2NrIiwiU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbCIsIlNDQVNNUHJldmlld01ldGFkYXRhUm93IiwiU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZSIsIlNDQVNNUHJldmlld05hbWUiLCJTQ0FTTVNhdmVPdXRsaW5lZEJ1dHRvbiIsIlNDQVNNU2F2ZVByaW1hcnlCdXR0b24iLCJTQ0FTTVN3aXRjaExhYmVsIiwiU0NBU01Td2l0Y2hSb3ciLCJTQ0FTTVVwbG9hZEJ1dHRvbiIsIlNDQVNNVXNlU2tpbGxCdXR0b24iLCJTQ0FTTVdyYXBwZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsImluaXRpYWxWYWx1ZXMiLCJpc0VkaXRpbmciLCJnZW5lcmFsIiwiaWQiLCJ1bmRlZmluZWQiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb250ZW50IiwiYWNjZXNzX3R5cGUiLCJlbXB0eUJhc2VsaW5lIiwicGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50IiwiZnJvbnRtYXR0ZXJNYXRjaCIsIm1hdGNoIiwiZGVzY3JpcHRpb25NYXRjaCIsInRyaW0iLCJBYm1Ta2lsbE1vZGFsIiwiX3JlZiIsIl92YWx1ZXMkZ2VuZXJhbCIsIl92YWx1ZXMkZ2VuZXJhbDIiLCJfdmFsdWVzJGdlbmVyYWwzIiwiX3ZhbHVlcyRnZW5lcmFsNCIsIl92YWx1ZXMkZ2VuZXJhbDUiLCJfdmFsdWVzJGdlbmVyYWw3IiwiX3ZhbHVlcyRnZW5lcmFsOSIsImFkZFNraWxsIiwidXBkYXRlU2tpbGxJbkxpc3QiLCJyZW1vdmVTa2lsbCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJ1c2VyIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzU3VibWl0dGluZyIsInNldElzU3VibWl0dGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd0RlbGV0ZSIsInNldFNob3dEZWxldGUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInBlbmRpbmdVcGxvYWQiLCJzZXRQZW5kaW5nVXBsb2FkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJ2YWx1ZXMiLCJzZXRWYWx1ZXMiLCJmaWxlSW5wdXRSZWYiLCJpbml0aWFsUmVmIiwiaXNSZWFkT25seSIsImNhblNoYXJlV2l0aENvbXBhbnkiLCJyb2xlX2lkIiwiYWNjZXNzVHlwZSIsImVmZmVjdGl2ZUFjY2Vzc1R5cGUiLCJza2lsbElkIiwiaXNWYWxpZCIsImhhc0NoYW5nZXMiLCJjdXJyZW50IiwiY3JlYXRlZEJ5TGFiZWwiLCJfdmFsdWVzJGdlbmVyYWw2IiwiY3JlYXRlZF9ieV9uYW1lIiwiY29uY2F0IiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJsYXN0VXBkYXRlZExhYmVsIiwiX3ZhbHVlcyRnZW5lcmFsOCIsInVwZGF0ZWRBdCIsInVwZGF0ZWRfYXQiLCJwYXJzZWQiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVCYWNrZHJvcENsaWNrIiwiZXZlbnQiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiaGFuZGxlU2V0U2tpbGxWYWx1ZXMiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzIiwiX3NraWxsVmFsdWVzJHZhbHVlczIiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzMyIsIl9yZWYyIiwiZGV0YWlsIiwic2tpbGxWYWx1ZXMiLCJpbmNvbWluZ0dlbmVyYWwiLCJfb2JqZWN0U3ByZWFkIiwiaW5jb21pbmdOYW1lIiwiaW5jb21pbmdEZXNjcmlwdGlvbiIsImluY29taW5nQ29udGVudCIsImluY29taW5nQWNjZXNzVHlwZSIsInBhcnNlZERlc2NyaXB0aW9uIiwiaW50ZW50IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImNsaWNrIiwiaGFuZGxlQ2hhbmdlRmllbGQiLCJmaWVsZCIsInZhbHVlIiwicHJldiIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUFjY2Vzc1R5cGVDaGFuZ2UiLCJjaGVja2VkIiwiaGFuZGxlVXBsb2FkQ2xpY2siLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQyIiwiaGFuZGxlRmlsZUNoYW5nZSIsIl9yZWYzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJfZXZlbnQkdGFyZ2V0JGZpbGVzIiwiZmlsZSIsImlzTWFya2Rvd24iLCJ0ZXh0IiwiYmFzZU5hbWUiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJmaWxlcyIsImFicnVwdCIsInRlc3QiLCJzZW50IiwicmVwbGFjZSIsIl9wcmV2JGdlbmVyYWwiLCJfcHJldiRnZW5lcmFsMiIsIl9wcmV2JGdlbmVyYWwzIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJwZXJzaXN0U2tpbGwiLCJfcmVmNCIsIl9jYWxsZWUyIiwicGF5bG9hZCIsInVwZGF0ZWQiLCJjcmVhdGVkIiwiX2NvbnRleHQyIiwiaGFuZGxlU2F2ZSIsIl9yZWY1IiwiX2NhbGxlZTMiLCJfdDIiLCJfY29udGV4dDMiLCJmaW5pc2giLCJoYW5kbGVTYXZlQW5kVXNlIiwiX3JlZjYiLCJfY2FsbGVlNCIsInNhdmVkU2tpbGwiLCJfdDMiLCJfY29udGV4dDQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJza2lsbCIsImhhbmRsZUNvbmZpcm1EZWxldGUiLCJfcmVmNyIsIl9jYWxsZWU1IiwiX3Q0IiwiX2NvbnRleHQ1IiwiaGFuZGxlVXNlU2tpbGwiLCJ1c2VGaXJzdEFnZW50IiwiY29udGFpbmVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJlZGl0T3JDcmVhdGVUaXRsZSIsIm1vZGFsVGl0bGUiLCJwcmV2aWV3Qm9keSIsImNoaWxkcmVuIiwiekluZGV4Iiwib25DbGljayIsInN0b3BQcm9wYWdhdGlvbiIsInR5cGUiLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwiJGhlaWdodCIsImh0bWxGb3IiLCJtYXhMZW5ndGgiLCJwbGFjZWhvbGRlciIsImRpc2FibGVkIiwib25DaGFuZ2UiLCIkY2xpcE92ZXJmbG93IiwicmVmIiwiYWNjZXB0Iiwic2l6ZSIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJjaGF0IiwidGl0bGUiLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgTW91c2VFdmVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9GaWxlVXBsb2FkJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgQmFja2Ryb3AgfSBmcm9tICcuLi8uLi9hdG9tcy9CYWNrZHJvcCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IFN3aXRjaCB9IGZyb20gJy4uLy4uL2F0b21zL1N3aXRjaCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZVVzZXIsIGlzQ29sbGFib3JhdG9yUm9sZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4uLy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2NyZWF0ZVNraWxsJ1xuaW1wb3J0IHsgdXBkYXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy91cGRhdGVTa2lsbCdcbmltcG9ydCB7IGRlbGV0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZGVsZXRlU2tpbGwnXG5pbXBvcnQgeyBTa2lsbCwgU2tpbGxBY2Nlc3NUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHtcbiAgU0NBU01DYW5jZWxCdXR0b24sXG4gIFNDQVNNQ2xvc2VCdXR0b24sXG4gIFNDQVNNQm9keSxcbiAgU0NBU01EZWxldGVTbG90LFxuICBTQ0FTTUZpZWxkQm94LFxuICBTQ0FTTUZpZWxkSW5wdXQsXG4gIFNDQVNNRmllbGRMYWJlbCxcbiAgU0NBU01GaWVsZFRleHRhcmVhLFxuICBTQ0FTTUZvb3RlcixcbiAgU0NBU01IZWFkZXIsXG4gIFNDQVNNSGVhZGVyVGl0bGUsXG4gIFNDQVNNSGlkZGVuRmlsZUlucHV0LFxuICBTQ0FTTUluc3RydWN0aW9uc0ZpZWxkLFxuICBTQ0FTTUluc3RydWN0aW9uc0hlYWRlcixcbiAgU0NBU01JbnN0cnVjdGlvbnNQYW5lbCxcbiAgU0NBU01JbnN0cnVjdGlvbnNUZXh0YXJlYSxcbiAgU0NBU01JbnN0cnVjdGlvbnNUaXRsZSxcbiAgU0NBU01NZXRhZGF0YUl0ZW0sXG4gIFNDQVNNUHJldmlld0JvZHksXG4gIFNDQVNNUHJldmlld0NvbnRlbnRCb3gsXG4gIFNDQVNNUHJldmlld0NvbnRlbnRQYW5lbCxcbiAgU0NBU01QcmV2aWV3RGVzY3JpcHRpb24sXG4gIFNDQVNNUHJldmlld0hlYWRpbmdCbG9jayxcbiAgU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbCxcbiAgU0NBU01QcmV2aWV3TWV0YWRhdGFSb3csXG4gIFNDQVNNUHJldmlld01ldGFkYXRhVmFsdWUsXG4gIFNDQVNNUHJldmlld05hbWUsXG4gIFNDQVNNU2F2ZU91dGxpbmVkQnV0dG9uLFxuICBTQ0FTTVNhdmVQcmltYXJ5QnV0dG9uLFxuICBTQ0FTTVN3aXRjaExhYmVsLFxuICBTQ0FTTVN3aXRjaFJvdyxcbiAgU0NBU01VcGxvYWRCdXR0b24sXG4gIFNDQVNNVXNlU2tpbGxCdXR0b24sXG4gIFNDQVNNV3JhcHBlcixcbn0gZnJvbSAnLi9BYm1Ta2lsbE1vZGFsLnN0eWxlcydcblxuZXhwb3J0IGNvbnN0IFNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5UID0gJ21haWEtdXNlLXNraWxsLWFmdGVyLXNhdmUnXG5cbnR5cGUgU2tpbGxNb2RhbEdlbmVyYWwgPSB7XG4gIGlkPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgY29udGVudD86IHN0cmluZ1xuICBhY2Nlc3NfdHlwZT86IFNraWxsQWNjZXNzVHlwZVxuICBjcmVhdGVkX2J5X25hbWU/OiBzdHJpbmdcbiAgdXBkYXRlZF9hdD86IHN0cmluZ1xufVxuXG50eXBlIFNraWxsTW9kYWxWYWx1ZXMgPSB7XG4gIGlzRWRpdGluZzogYm9vbGVhblxuICBpc1JlYWRPbmx5PzogYm9vbGVhblxuICBpbnRlbnQ/OiAnZ2VuZXJhdGUnIHwgJ3dyaXRlJyB8ICd1cGxvYWQnXG4gIGdlbmVyYWw/OiBTa2lsbE1vZGFsR2VuZXJhbFxufVxuXG50eXBlIEFibVNraWxsTW9kYWxQcm9wcyA9IHtcbiAgYWRkU2tpbGw/OiAoc2tpbGw6IFNraWxsKSA9PiB2b2lkXG4gIHVwZGF0ZVNraWxsSW5MaXN0PzogKHNraWxsOiBTa2lsbCkgPT4gdm9pZFxuICByZW1vdmVTa2lsbD86IChza2lsbElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxuY29uc3QgaW5pdGlhbFZhbHVlczogU2tpbGxNb2RhbFZhbHVlcyA9IHtcbiAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgZ2VuZXJhbDoge1xuICAgIGlkOiB1bmRlZmluZWQsXG4gICAgbmFtZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGNvbnRlbnQ6ICcnLFxuICAgIGFjY2Vzc190eXBlOiAnb25seV9tZScsXG4gIH0sXG59XG5cbnR5cGUgU2tpbGxGb3JtQmFzZWxpbmUgPSB7XG4gIG5hbWU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGNvbnRlbnQ6IHN0cmluZ1xuICBhY2Nlc3NfdHlwZTogU2tpbGxBY2Nlc3NUeXBlXG59XG5cbmNvbnN0IGVtcHR5QmFzZWxpbmU6IFNraWxsRm9ybUJhc2VsaW5lID0ge1xuICBuYW1lOiAnJyxcbiAgZGVzY3JpcHRpb246ICcnLFxuICBjb250ZW50OiAnJyxcbiAgYWNjZXNzX3R5cGU6ICdvbmx5X21lJyxcbn1cblxuY29uc3QgcGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50ID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxzKlxcbihbXFxzXFxTXSo/KVxcbi0tLS8pXG4gIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkgcmV0dXJuICcnXG4gIGNvbnN0IGRlc2NyaXB0aW9uTWF0Y2ggPSBmcm9udG1hdHRlck1hdGNoWzFdLm1hdGNoKC9eZGVzY3JpcHRpb246XFxzKiguKykkL20pXG4gIHJldHVybiBkZXNjcmlwdGlvbk1hdGNoID8gZGVzY3JpcHRpb25NYXRjaFsxXS50cmltKCkgOiAnJ1xufVxuXG5leHBvcnQgY29uc3QgQWJtU2tpbGxNb2RhbCA9ICh7IGFkZFNraWxsLCB1cGRhdGVTa2lsbEluTGlzdCwgcmVtb3ZlU2tpbGwgfTogQWJtU2tpbGxNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsIGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzU3VibWl0dGluZywgc2V0SXNTdWJtaXR0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd0RlbGV0ZSwgc2V0U2hvd0RlbGV0ZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3BlbmRpbmdVcGxvYWQsIHNldFBlbmRpbmdVcGxvYWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt2YWx1ZXMsIHNldFZhbHVlc10gPSB1c2VTdGF0ZTxTa2lsbE1vZGFsVmFsdWVzPihpbml0aWFsVmFsdWVzKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgaW5pdGlhbFJlZiA9IHVzZVJlZjxTa2lsbEZvcm1CYXNlbGluZT4oZW1wdHlCYXNlbGluZSlcblxuICBjb25zdCBpc1JlYWRPbmx5ID0gISF2YWx1ZXMuaXNSZWFkT25seVxuICBjb25zdCBjYW5TaGFyZVdpdGhDb21wYW55ID0gIWlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpICYmICFpc1JlYWRPbmx5XG5cbiAgY29uc3QgbmFtZSA9IHZhbHVlcy5nZW5lcmFsPy5uYW1lIHx8ICcnXG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gdmFsdWVzLmdlbmVyYWw/LmRlc2NyaXB0aW9uIHx8ICcnXG4gIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZXMuZ2VuZXJhbD8uY29udGVudCB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUeXBlOiBTa2lsbEFjY2Vzc1R5cGUgPSB2YWx1ZXMuZ2VuZXJhbD8uYWNjZXNzX3R5cGUgfHwgJ29ubHlfbWUnXG4gIGNvbnN0IGVmZmVjdGl2ZUFjY2Vzc1R5cGU6IFNraWxsQWNjZXNzVHlwZSA9IGNhblNoYXJlV2l0aENvbXBhbnkgPyBhY2Nlc3NUeXBlIDogJ29ubHlfbWUnXG4gIGNvbnN0IHNraWxsSWQgPSB2YWx1ZXMuZ2VuZXJhbD8uaWRcbiAgY29uc3QgaXNWYWxpZCA9ICEhbmFtZS50cmltKCkgJiYgISFkZXNjcmlwdGlvbi50cmltKCkgJiYgISFjb250ZW50LnRyaW0oKVxuICBjb25zdCBoYXNDaGFuZ2VzID1cbiAgICBuYW1lLnRyaW0oKSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50Lm5hbWUgfHxcbiAgICBkZXNjcmlwdGlvbi50cmltKCkgIT09IGluaXRpYWxSZWYuY3VycmVudC5kZXNjcmlwdGlvbiB8fFxuICAgIGNvbnRlbnQudHJpbSgpICE9PSBpbml0aWFsUmVmLmN1cnJlbnQuY29udGVudCB8fFxuICAgIChjYW5TaGFyZVdpdGhDb21wYW55ICYmIGVmZmVjdGl2ZUFjY2Vzc1R5cGUgIT09IGluaXRpYWxSZWYuY3VycmVudC5hY2Nlc3NfdHlwZSlcblxuICBjb25zdCBjcmVhdGVkQnlMYWJlbCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gdmFsdWVzLmdlbmVyYWw/LmNyZWF0ZWRfYnlfbmFtZT8udHJpbSgpIHx8IGAke3VzZXIuZmlyc3ROYW1lfSAke3VzZXIubGFzdE5hbWV9YC50cmltKCksXG4gICAgW3ZhbHVlcy5nZW5lcmFsPy5jcmVhdGVkX2J5X25hbWUsIHVzZXIuZmlyc3ROYW1lLCB1c2VyLmxhc3ROYW1lXVxuICApXG5cbiAgY29uc3QgbGFzdFVwZGF0ZWRMYWJlbCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZWRBdCA9IHZhbHVlcy5nZW5lcmFsPy51cGRhdGVkX2F0XG4gICAgaWYgKCF1cGRhdGVkQXQpIHJldHVybiAnJ1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHVwZGF0ZWRBdClcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSByZXR1cm4gJydcbiAgICByZXR1cm4gZm9ybWF0RGF0ZShwYXJzZWQpXG4gIH0sIFt2YWx1ZXMuZ2VuZXJhbD8udXBkYXRlZF9hdF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIHNldFNob3dEZWxldGUoZmFsc2UpXG4gICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICBzZXRWYWx1ZXMoaW5pdGlhbFZhbHVlcylcbiAgICBpbml0aWFsUmVmLmN1cnJlbnQgPSBlbXB0eUJhc2VsaW5lXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUNsb3NlXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXRTa2lsbFZhbHVlcyA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsVmFsdWVzIH0gPSBldmVudC5kZXRhaWwgfHwge31cbiAgICAgIGlmICghc2tpbGxWYWx1ZXMpIHJldHVyblxuXG4gICAgICBjb25zdCBpbmNvbWluZ0dlbmVyYWwgPSB7XG4gICAgICAgIC4uLmluaXRpYWxWYWx1ZXMuZ2VuZXJhbCxcbiAgICAgICAgLi4uc2tpbGxWYWx1ZXMudmFsdWVzPy5nZW5lcmFsLFxuICAgICAgfVxuICAgICAgY29uc3QgaW5jb21pbmdOYW1lID0gKGluY29taW5nR2VuZXJhbC5uYW1lIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nRGVzY3JpcHRpb24gPSAoaW5jb21pbmdHZW5lcmFsLmRlc2NyaXB0aW9uIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nQ29udGVudCA9IChpbmNvbWluZ0dlbmVyYWwuY29udGVudCB8fCAnJykudHJpbSgpXG4gICAgICBjb25zdCBpbmNvbWluZ0FjY2Vzc1R5cGU6IFNraWxsQWNjZXNzVHlwZSA9IGlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpXG4gICAgICAgID8gJ29ubHlfbWUnXG4gICAgICAgIDogaW5jb21pbmdHZW5lcmFsLmFjY2Vzc190eXBlIHx8ICdvbmx5X21lJ1xuICAgICAgY29uc3QgcGFyc2VkRGVzY3JpcHRpb24gPVxuICAgICAgICBpbmNvbWluZ0Rlc2NyaXB0aW9uIHx8IChpbmNvbWluZ0NvbnRlbnQgPyBwYXJzZURlc2NyaXB0aW9uRnJvbUNvbnRlbnQoaW5jb21pbmdDb250ZW50KSA6ICcnKVxuXG4gICAgICBpbml0aWFsUmVmLmN1cnJlbnQgPSBza2lsbFZhbHVlcy52YWx1ZXM/LmlzRWRpdGluZ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIG5hbWU6IGluY29taW5nTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwYXJzZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQ6IGluY29taW5nQ29udGVudCxcbiAgICAgICAgICAgIGFjY2Vzc190eXBlOiBpbmNvbWluZ0FjY2Vzc1R5cGUsXG4gICAgICAgICAgfVxuICAgICAgICA6IGVtcHR5QmFzZWxpbmVcblxuICAgICAgc2V0VmFsdWVzKHtcbiAgICAgICAgLi4uaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgLi4uc2tpbGxWYWx1ZXMudmFsdWVzLFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4uaW5jb21pbmdHZW5lcmFsLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwYXJzZWREZXNjcmlwdGlvbixcbiAgICAgICAgICBhY2Nlc3NfdHlwZTogaW5jb21pbmdBY2Nlc3NUeXBlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHNldFBlbmRpbmdVcGxvYWQoc2tpbGxWYWx1ZXMudmFsdWVzPy5pbnRlbnQgPT09ICd1cGxvYWQnKVxuICAgICAgc2V0SXNPcGVuKCEhc2tpbGxWYWx1ZXMuaXNPcGVuKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FibS1za2lsbC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0U2tpbGxWYWx1ZXMpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1za2lsbC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0U2tpbGxWYWx1ZXMpXG4gICAgfVxuICB9LCBbdXNlci5yb2xlX2lkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4gJiYgcGVuZGluZ1VwbG9hZCkge1xuICAgICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gICAgfVxuICB9LCBbaXNPcGVuLCBwZW5kaW5nVXBsb2FkXSlcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VGaWVsZCA9IChmaWVsZDogJ25hbWUnIHwgJ2Rlc2NyaXB0aW9uJyB8ICdjb250ZW50JywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHNldFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgZ2VuZXJhbDogeyAuLi5wcmV2LmdlbmVyYWwsIFtmaWVsZF06IHZhbHVlIH0sXG4gICAgfSkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBY2Nlc3NUeXBlQ2hhbmdlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoIWNhblNoYXJlV2l0aENvbXBhbnkpIHJldHVyblxuICAgIHNldFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgIGFjY2Vzc190eXBlOiBjaGVja2VkID8gJ2NvbXBhbnknIDogJ29ubHlfbWUnLFxuICAgICAgfSxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVVwbG9hZENsaWNrID0gKCkgPT4ge1xuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXM/LlswXVxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJ1xuICAgIH1cbiAgICBpZiAoIWZpbGUpIHJldHVyblxuXG4gICAgY29uc3QgaXNNYXJrZG93biA9IC9cXC4obWR8bWFya2Rvd24pJC9pLnRlc3QoZmlsZS5uYW1lKVxuICAgIGlmICghaXNNYXJrZG93bikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRFcnJvcicpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBmaWxlLnRleHQoKVxuICAgICAgY29uc3QgYmFzZU5hbWUgPSBmaWxlLm5hbWUucmVwbGFjZSgvXFwuKG1kfG1hcmtkb3duKSQvaSwgJycpXG4gICAgICBjb25zdCBwYXJzZWREZXNjcmlwdGlvbiA9IHBhcnNlRGVzY3JpcHRpb25Gcm9tQ29udGVudCh0ZXh0KVxuICAgICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICBjb250ZW50OiB0ZXh0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcmV2LmdlbmVyYWw/LmRlc2NyaXB0aW9uPy50cmltKClcbiAgICAgICAgICAgID8gcHJldi5nZW5lcmFsLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICA6IHBhcnNlZERlc2NyaXB0aW9uIHx8IHByZXYuZ2VuZXJhbD8uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgbmFtZTogcHJldi5nZW5lcmFsPy5uYW1lPy50cmltKCkgPyBwcmV2LmdlbmVyYWwubmFtZSA6IGJhc2VOYW1lLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMudXBsb2FkRXJyb3InKSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBwZXJzaXN0U2tpbGwgPSBhc3luYyAoKTogUHJvbWlzZTxTa2lsbCB8IG51bGw+ID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgbmFtZTogbmFtZS50cmltKCksXG4gICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24udHJpbSgpLFxuICAgICAgY29udGVudDogY29udGVudC50cmltKCksXG4gICAgICBhY2Nlc3NfdHlwZTogZWZmZWN0aXZlQWNjZXNzVHlwZSxcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLmlzRWRpdGluZyAmJiBza2lsbElkKSB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdXBkYXRlU2tpbGwoc2tpbGxJZCwgcGF5bG9hZClcbiAgICAgIHVwZGF0ZVNraWxsSW5MaXN0Py4odXBkYXRlZClcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy51cGRhdGVTdWNjZXNzJykpXG4gICAgICByZXR1cm4gdXBkYXRlZFxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBjcmVhdGVTa2lsbChwYXlsb2FkKVxuICAgIGFkZFNraWxsPy4oY3JlYXRlZClcbiAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnbXlTa2lsbHMuY3JlYXRlU3VjY2VzcycpKVxuICAgIHJldHVybiBjcmVhdGVkXG4gIH1cblxuICBjb25zdCBoYW5kbGVTYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaXNWYWxpZCB8fCBpc1N1Ym1pdHRpbmcgfHwgIWhhc0NoYW5nZXMpIHJldHVyblxuICAgIHNldElzU3VibWl0dGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwZXJzaXN0U2tpbGwoKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHZhbHVlcy5pc0VkaXRpbmcgPyB0KCdteVNraWxscy51cGRhdGVFcnJvcicpIDogdCgnbXlTa2lsbHMuY3JlYXRlRXJyb3InKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNTdWJtaXR0aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNhdmVBbmRVc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZykgcmV0dXJuXG4gICAgc2V0SXNTdWJtaXR0aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhdmVkU2tpbGwgPSBhd2FpdCBwZXJzaXN0U2tpbGwoKVxuICAgICAgaWYgKHNhdmVkU2tpbGwpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBza2lsbDogc2F2ZWRTa2lsbCB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih2YWx1ZXMuaXNFZGl0aW5nID8gdCgnbXlTa2lsbHMudXBkYXRlRXJyb3InKSA6IHQoJ215U2tpbGxzLmNyZWF0ZUVycm9yJykpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzU3VibWl0dGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtRGVsZXRlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2tpbGxJZCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNraWxsKHNraWxsSWQpXG4gICAgICByZW1vdmVTa2lsbD8uKHNraWxsSWQpXG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnbXlTa2lsbHMuZGVsZXRlU3VjY2VzcycpKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLmRlbGV0ZUVycm9yJykpXG4gICAgfVxuICB9XG5cbiAgLyoqIFNraWxsIGFqZW5hIGVuIG1vZG8gbGVjdHVyYTogYWJyZSB1biBjaGF0IG51ZXZvIGNvbiBlbCBwcmltZXIgYWdlbnRlIHkgbGEgbWVuY2nDs24geWEgcHVlc3RhLiAqL1xuICBjb25zdCBoYW5kbGVVc2VTa2lsbCA9ICgpID0+IHtcbiAgICBpZiAoIXNraWxsSWQpIHJldHVyblxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgc2tpbGw6IHsgaWQ6IHNraWxsSWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBjb250ZW50LCBhY2Nlc3NfdHlwZTogYWNjZXNzVHlwZSB9LFxuICAgICAgICAgIHVzZUZpcnN0QWdlbnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgICBoYW5kbGVDbG9zZSgpXG4gIH1cblxuICBpZiAoIWlzT3BlbikgcmV0dXJuIG51bGxcblxuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtcm9vdC1hY3Rpb25zJylcbiAgaWYgKCFjb250YWluZXIpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZWRpdE9yQ3JlYXRlVGl0bGUgPSB2YWx1ZXMuaXNFZGl0aW5nID8gdCgnbXlTa2lsbHMuZWRpdFRpdGxlJykgOiB0KCdteVNraWxscy5jcmVhdGVUaXRsZScpXG4gIGNvbnN0IG1vZGFsVGl0bGUgPSBpc1JlYWRPbmx5ID8gdCgnbXlTa2lsbHMudmlld1RpdGxlJykgOiBlZGl0T3JDcmVhdGVUaXRsZVxuXG4gIGNvbnN0IHByZXZpZXdCb2R5ID0gKFxuICAgIDxTQ0FTTVByZXZpZXdCb2R5PlxuICAgICAgPFNDQVNNUHJldmlld0hlYWRpbmdCbG9jaz5cbiAgICAgICAgPFNDQVNNUHJldmlld05hbWU+e25hbWV9PC9TQ0FTTVByZXZpZXdOYW1lPlxuICAgICAgICB7ZGVzY3JpcHRpb24gPyA8U0NBU01QcmV2aWV3RGVzY3JpcHRpb24+e2Rlc2NyaXB0aW9ufTwvU0NBU01QcmV2aWV3RGVzY3JpcHRpb24+IDogbnVsbH1cbiAgICAgIDwvU0NBU01QcmV2aWV3SGVhZGluZ0Jsb2NrPlxuXG4gICAgICA8U0NBU01QcmV2aWV3TWV0YWRhdGFSb3c+XG4gICAgICAgIDxTQ0FTTU1ldGFkYXRhSXRlbT5cbiAgICAgICAgICA8U0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbD57dCgnbXlTa2lsbHMuY3JlYXRlZEJ5Jyl9PC9TQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsPlxuICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPntjcmVhdGVkQnlMYWJlbH08L1NDQVNNUHJldmlld01ldGFkYXRhVmFsdWU+XG4gICAgICAgIDwvU0NBU01NZXRhZGF0YUl0ZW0+XG4gICAgICAgIHtsYXN0VXBkYXRlZExhYmVsID8gKFxuICAgICAgICAgIDxTQ0FTTU1ldGFkYXRhSXRlbT5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsPnt0KCdteVNraWxscy5sYXN0VXBkYXRlZCcpfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbD5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPntsYXN0VXBkYXRlZExhYmVsfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZT5cbiAgICAgICAgICA8L1NDQVNNTWV0YWRhdGFJdGVtPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NBU01QcmV2aWV3TWV0YWRhdGFSb3c+XG5cbiAgICAgIDxTQ0FTTVByZXZpZXdDb250ZW50UGFuZWw+XG4gICAgICAgIDxTQ0FTTVByZXZpZXdDb250ZW50Qm94Pntjb250ZW50fTwvU0NBU01QcmV2aWV3Q29udGVudEJveD5cbiAgICAgIDwvU0NBU01QcmV2aWV3Q29udGVudFBhbmVsPlxuICAgIDwvU0NBU01QcmV2aWV3Qm9keT5cbiAgKVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPEJhY2tkcm9wIHpJbmRleD17MTExMn0gb25DbGljaz17aGFuZGxlQmFja2Ryb3BDbGlja30+XG4gICAgICA8U0NBU01XcmFwcGVyIG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfT5cbiAgICAgICAgPFNDQVNNSGVhZGVyPlxuICAgICAgICAgIDxTQ0FTTUhlYWRlclRpdGxlPnttb2RhbFRpdGxlfTwvU0NBU01IZWFkZXJUaXRsZT5cbiAgICAgICAgICA8U0NBU01DbG9zZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9IGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLmNsb3NlJyl9PlxuICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiI2E2YTZhNlwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICA8L1NDQVNNQ2xvc2VCdXR0b24+XG4gICAgICAgIDwvU0NBU01IZWFkZXI+XG5cbiAgICAgICAge2lzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgcHJldmlld0JvZHlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U0NBU01Cb2R5PlxuICAgICAgICAgICAgPFNDQVNNRmllbGRCb3ggJGhlaWdodD17NTB9PlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZExhYmVsIGh0bWxGb3I9XCJza2lsbC1uYW1lLWlucHV0XCI+e3QoJ215U2tpbGxzLm5hbWVMYWJlbCcpfTwvU0NBU01GaWVsZExhYmVsPlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZElucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJza2lsbC1uYW1lLWlucHV0XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoPXsxNTB9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ215U2tpbGxzLm5hbWVQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IGhhbmRsZUNoYW5nZUZpZWxkKCduYW1lJywgZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU0NBU01GaWVsZEJveD5cblxuICAgICAgICAgICAgPFNDQVNNRmllbGRCb3ggJGhlaWdodD17MTIwfSAkY2xpcE92ZXJmbG93PlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZExhYmVsIGh0bWxGb3I9XCJza2lsbC1kZXNjcmlwdGlvbi1pbnB1dFwiPnt0KCdteVNraWxscy5kZXNjcmlwdGlvbkxhYmVsJyl9PC9TQ0FTTUZpZWxkTGFiZWw+XG4gICAgICAgICAgICAgIDxTQ0FTTUZpZWxkVGV4dGFyZWFcbiAgICAgICAgICAgICAgICBpZD1cInNraWxsLWRlc2NyaXB0aW9uLWlucHV0XCJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezUwMH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtkZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBoYW5kbGVDaGFuZ2VGaWVsZCgnZGVzY3JpcHRpb24nLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9TQ0FTTUZpZWxkQm94PlxuXG4gICAgICAgICAgICB7Y2FuU2hhcmVXaXRoQ29tcGFueSA/IChcbiAgICAgICAgICAgICAgPFNDQVNNU3dpdGNoUm93PlxuICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FjY2Vzc1R5cGUgPT09ICdjb21wYW55J31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVBY2Nlc3NUeXBlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLnNoYXJlV2l0aENvbXBhbnknKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxTQ0FTTVN3aXRjaExhYmVsPnt0KCdteVNraWxscy5zaGFyZVdpdGhDb21wYW55Jyl9PC9TQ0FTTVN3aXRjaExhYmVsPlxuICAgICAgICAgICAgICA8L1NDQVNNU3dpdGNoUm93PlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIDxTQ0FTTUluc3RydWN0aW9uc1BhbmVsPlxuICAgICAgICAgICAgICA8U0NBU01JbnN0cnVjdGlvbnNIZWFkZXI+XG4gICAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zVGl0bGU+e3QoJ215U2tpbGxzLmluc3RydWN0aW9uc0xhYmVsJyl9PC9TQ0FTTUluc3RydWN0aW9uc1RpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ0FTTVVwbG9hZEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlVXBsb2FkQ2xpY2t9IGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgICAgICAgPEZpbGVVcGxvYWQgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSBjb2xvcj1cIiMwOENcIiAvPlxuICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnVwbG9hZE1kJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0FTTVVwbG9hZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8U0NBU01IaWRkZW5GaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLm1kLC5tYXJrZG93bix0ZXh0L21hcmtkb3duXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU0NBU01JbnN0cnVjdGlvbnNIZWFkZXI+XG5cbiAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zRmllbGQ+XG4gICAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zVGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgIGlkPVwic2tpbGwtY29udGVudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezEwMDAwMH1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdteVNraWxscy5jb250ZW50UGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBoYW5kbGVDaGFuZ2VGaWVsZCgnY29udGVudCcsIGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc0ZpZWxkPlxuICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc1BhbmVsPlxuICAgICAgICAgIDwvU0NBU01Cb2R5PlxuICAgICAgICApfVxuXG4gICAgICAgIDxTQ0FTTUZvb3Rlcj5cbiAgICAgICAgICB7aXNSZWFkT25seSA/IChcbiAgICAgICAgICAgIDxTQ0FTTVVzZVNraWxsQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVVc2VTa2lsbH0+XG4gICAgICAgICAgICAgIHt0KCdteVNraWxscy51c2VTa2lsbCcpfVxuICAgICAgICAgICAgPC9TQ0FTTVVzZVNraWxsQnV0dG9uPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7dmFsdWVzLmlzRWRpdGluZyA/IChcbiAgICAgICAgICAgICAgICA8U0NBU01EZWxldGVTbG90PlxuICAgICAgICAgICAgICAgICAgPFNDQVNNQ2FuY2VsQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRTaG93RGVsZXRlKHRydWUpfSBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FTTUNhbmNlbEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1NDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxTQ0FTTVNhdmVPdXRsaW5lZEJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNhdmV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZyB8fCAhaGFzQ2hhbmdlc31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+IDogdCgnbXlTa2lsbHMuc2F2ZScpfVxuICAgICAgICAgICAgICA8L1NDQVNNU2F2ZU91dGxpbmVkQnV0dG9uPlxuICAgICAgICAgICAgICA8U0NBU01TYXZlUHJpbWFyeUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlU2F2ZUFuZFVzZX0gZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZ30+XG4gICAgICAgICAgICAgICAge2lzU3VibWl0dGluZyA/IDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz4gOiB0KCdteVNraWxscy5zYXZlQW5kVXNlJyl9XG4gICAgICAgICAgICAgIDwvU0NBU01TYXZlUHJpbWFyeUJ1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NBU01Gb290ZXI+XG4gICAgICA8L1NDQVNNV3JhcHBlcj5cblxuICAgICAge3Nob3dEZWxldGUgJiYgc2tpbGxJZCA/IChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RGVsZXRlKGZhbHNlKX1cbiAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbjogaGFuZGxlQ29uZmlybURlbGV0ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNoYXQ9e3sgdGl0bGU6IG5hbWUsIGlkOiBza2lsbElkIH19XG4gICAgICAgICAgYWN0aW9uPVwic2tpbGxcIlxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9CYWNrZHJvcD4sXG4gICAgY29udGFpbmVyXG4gIClcbn1cbiJd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
|