@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,533 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
import { forwardRef, useCallback, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
|
|
6
|
+
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
7
|
+
import { useContextMentions } from '../../../hooks/useContextMentions';
|
|
8
|
+
import { buildChipElement } from '../ContextMentionChip';
|
|
9
|
+
import { ContextMentionChipGlobalStyles } from '../ContextMentionChip/ContextMentionChip.styles';
|
|
10
|
+
import { buildSlashChipElement } from '../SlashCommandChip';
|
|
11
|
+
import { filesFromDataTransfer } from '../../../utils/chatInputFiles';
|
|
12
|
+
import { SCMEEditable } from './ContextMentionEditor.styles';
|
|
13
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
var isPlaceholderTruncatedInEditor = function isPlaceholderTruncatedInEditor(editor, placeholder) {
|
|
15
|
+
var trimmed = placeholder.trim();
|
|
16
|
+
if (!trimmed) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
var clientWidth = editor.clientWidth;
|
|
20
|
+
if (clientWidth <= 4) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
var styles = window.getComputedStyle(editor);
|
|
24
|
+
var ctx = document.createElement('canvas').getContext('2d');
|
|
25
|
+
if (!ctx) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
ctx.font = "".concat(styles.fontWeight, " ").concat(styles.fontSize, " ").concat(styles.fontFamily);
|
|
29
|
+
var measured = ctx.measureText(trimmed).width;
|
|
30
|
+
var paddingLeft = parseFloat(styles.paddingLeft) || 0;
|
|
31
|
+
var paddingRight = parseFloat(styles.paddingRight) || 0;
|
|
32
|
+
var borderLeft = parseFloat(styles.borderLeftWidth) || 0;
|
|
33
|
+
var borderRight = parseFloat(styles.borderRightWidth) || 0;
|
|
34
|
+
var available = Math.max(0, clientWidth - paddingLeft - paddingRight - borderLeft - borderRight);
|
|
35
|
+
return measured > available + 1;
|
|
36
|
+
};
|
|
37
|
+
export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
38
|
+
var _placeholder$trim2;
|
|
39
|
+
var placeholder = _ref.placeholder,
|
|
40
|
+
disabled = _ref.disabled,
|
|
41
|
+
className = _ref.className,
|
|
42
|
+
maxHeight = _ref.maxHeight,
|
|
43
|
+
onInput = _ref.onInput,
|
|
44
|
+
onKeyDown = _ref.onKeyDown,
|
|
45
|
+
onFocus = _ref.onFocus,
|
|
46
|
+
onBlur = _ref.onBlur,
|
|
47
|
+
onPasteFiles = _ref.onPasteFiles;
|
|
48
|
+
var _useContextMentions = useContextMentions(),
|
|
49
|
+
editorRef = _useContextMentions.editorRef,
|
|
50
|
+
updateTrigger = _useContextMentions.updateTrigger,
|
|
51
|
+
replaceTriggerWithChip = _useContextMentions.replaceTriggerWithChip,
|
|
52
|
+
syncTriggerAtRunLength = _useContextMentions.syncTriggerAtRunLength,
|
|
53
|
+
updateSlashTrigger = _useContextMentions.updateSlashTrigger,
|
|
54
|
+
replaceTriggerWithSlashChip = _useContextMentions.replaceTriggerWithSlashChip,
|
|
55
|
+
updateHashTrigger = _useContextMentions.updateHashTrigger,
|
|
56
|
+
replaceTriggerWithSkillChip = _useContextMentions.replaceTriggerWithSkillChip,
|
|
57
|
+
serialize = _useContextMentions.serialize,
|
|
58
|
+
clearEditorDom = _useContextMentions.clear,
|
|
59
|
+
focus = _useContextMentions.focus;
|
|
60
|
+
var skipNextInput = useRef(false);
|
|
61
|
+
var _useState = useState(false),
|
|
62
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
63
|
+
placeholderTruncated = _useState2[0],
|
|
64
|
+
setPlaceholderTruncated = _useState2[1];
|
|
65
|
+
var _useState3 = useState(true),
|
|
66
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
67
|
+
logicalEmpty = _useState4[0],
|
|
68
|
+
setLogicalEmpty = _useState4[1];
|
|
69
|
+
var syncEditorEmptyAttribute = useCallback(function (isEmpty) {
|
|
70
|
+
if (editorRef.current) {
|
|
71
|
+
editorRef.current.setAttribute('data-empty', String(isEmpty));
|
|
72
|
+
}
|
|
73
|
+
}, []);
|
|
74
|
+
var normalizeEmptyEditorDom = useCallback(function () {
|
|
75
|
+
var _editor$textContent;
|
|
76
|
+
var editor = editorRef.current;
|
|
77
|
+
if (!editor) return;
|
|
78
|
+
|
|
79
|
+
// Limpiar cualquier residuo (br, espacios) que deje el browser al vaciar el contenteditable.
|
|
80
|
+
// Sin esto, un espacio suelto activa data-empty="true" + ::before placeholder en línea 1
|
|
81
|
+
// y desplaza el cursor a la línea 2.
|
|
82
|
+
if (((_editor$textContent = editor.textContent) === null || _editor$textContent === void 0 ? void 0 : _editor$textContent.trim()) === '') {
|
|
83
|
+
editor.innerHTML = '';
|
|
84
|
+
}
|
|
85
|
+
var selection = window.getSelection();
|
|
86
|
+
if (!selection) return;
|
|
87
|
+
var range = document.createRange();
|
|
88
|
+
range.selectNodeContents(editor);
|
|
89
|
+
range.collapse(true);
|
|
90
|
+
selection.removeAllRanges();
|
|
91
|
+
selection.addRange(range);
|
|
92
|
+
}, [editorRef]);
|
|
93
|
+
var recomputePlaceholderTruncation = useCallback(function () {
|
|
94
|
+
var _placeholder$trim;
|
|
95
|
+
var el = editorRef.current;
|
|
96
|
+
var ph = (_placeholder$trim = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim !== void 0 ? _placeholder$trim : '';
|
|
97
|
+
var isEditorLogicallyEmpty = serialize().text.trim() === '';
|
|
98
|
+
if (!el || !ph || !isEditorLogicallyEmpty) {
|
|
99
|
+
setPlaceholderTruncated(false);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
setPlaceholderTruncated(isPlaceholderTruncatedInEditor(el, ph));
|
|
103
|
+
}, [placeholder, serialize]);
|
|
104
|
+
useLayoutEffect(function () {
|
|
105
|
+
recomputePlaceholderTruncation();
|
|
106
|
+
var el = editorRef.current;
|
|
107
|
+
if (!el) {
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
var ro = new ResizeObserver(function () {
|
|
111
|
+
queueMicrotask(recomputePlaceholderTruncation);
|
|
112
|
+
});
|
|
113
|
+
ro.observe(el);
|
|
114
|
+
return function () {
|
|
115
|
+
return ro.disconnect();
|
|
116
|
+
};
|
|
117
|
+
}, [placeholder, disabled, recomputePlaceholderTruncation]);
|
|
118
|
+
var emitInputState = useCallback(function () {
|
|
119
|
+
var trig = updateTrigger();
|
|
120
|
+
var slashTrig = updateSlashTrigger();
|
|
121
|
+
var hashTrig = updateHashTrigger();
|
|
122
|
+
var state = serialize();
|
|
123
|
+
var isEmpty = state.text.trim() === '';
|
|
124
|
+
if (isEmpty) {
|
|
125
|
+
normalizeEmptyEditorDom();
|
|
126
|
+
state = {
|
|
127
|
+
text: '',
|
|
128
|
+
mentions: [],
|
|
129
|
+
slashCommands: []
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
syncEditorEmptyAttribute(isEmpty);
|
|
133
|
+
setLogicalEmpty(isEmpty);
|
|
134
|
+
onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
|
|
135
|
+
trigger: {
|
|
136
|
+
active: trig.active,
|
|
137
|
+
query: trig.query,
|
|
138
|
+
atRunLength: trig.atRunLength
|
|
139
|
+
},
|
|
140
|
+
slashTrigger: {
|
|
141
|
+
active: slashTrig.active,
|
|
142
|
+
query: slashTrig.query
|
|
143
|
+
},
|
|
144
|
+
hashTrigger: {
|
|
145
|
+
active: hashTrig.active,
|
|
146
|
+
query: hashTrig.query
|
|
147
|
+
}
|
|
148
|
+
}));
|
|
149
|
+
queueMicrotask(recomputePlaceholderTruncation);
|
|
150
|
+
}, [updateTrigger, updateSlashTrigger, updateHashTrigger, serialize, normalizeEmptyEditorDom, syncEditorEmptyAttribute, onInput, recomputePlaceholderTruncation]);
|
|
151
|
+
useImperativeHandle(ref, function () {
|
|
152
|
+
return {
|
|
153
|
+
focus: focus,
|
|
154
|
+
clear: function clear() {
|
|
155
|
+
clearEditorDom();
|
|
156
|
+
syncEditorEmptyAttribute(true);
|
|
157
|
+
setLogicalEmpty(true);
|
|
158
|
+
queueMicrotask(recomputePlaceholderTruncation);
|
|
159
|
+
},
|
|
160
|
+
setPlainText: function setPlainText(text) {
|
|
161
|
+
var editor = editorRef.current;
|
|
162
|
+
if (!editor) return;
|
|
163
|
+
var plain = text !== null && text !== void 0 ? text : '';
|
|
164
|
+
editor.textContent = plain;
|
|
165
|
+
skipNextInput.current = true;
|
|
166
|
+
var state = serialize();
|
|
167
|
+
var isEmpty = state.text.trim() === '';
|
|
168
|
+
if (isEmpty) {
|
|
169
|
+
editor.innerHTML = '';
|
|
170
|
+
}
|
|
171
|
+
syncEditorEmptyAttribute(isEmpty);
|
|
172
|
+
setLogicalEmpty(isEmpty);
|
|
173
|
+
onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
|
|
174
|
+
trigger: {
|
|
175
|
+
active: false,
|
|
176
|
+
query: '',
|
|
177
|
+
atRunLength: 0
|
|
178
|
+
},
|
|
179
|
+
slashTrigger: {
|
|
180
|
+
active: false,
|
|
181
|
+
query: ''
|
|
182
|
+
},
|
|
183
|
+
hashTrigger: {
|
|
184
|
+
active: false,
|
|
185
|
+
query: ''
|
|
186
|
+
}
|
|
187
|
+
}));
|
|
188
|
+
var selection = window.getSelection();
|
|
189
|
+
if (selection && editor.childNodes.length > 0) {
|
|
190
|
+
var range = document.createRange();
|
|
191
|
+
range.selectNodeContents(editor);
|
|
192
|
+
range.collapse(false);
|
|
193
|
+
selection.removeAllRanges();
|
|
194
|
+
selection.addRange(range);
|
|
195
|
+
}
|
|
196
|
+
queueMicrotask(function () {
|
|
197
|
+
skipNextInput.current = false;
|
|
198
|
+
recomputePlaceholderTruncation();
|
|
199
|
+
});
|
|
200
|
+
},
|
|
201
|
+
insertMentionTrigger: function insertMentionTrigger() {
|
|
202
|
+
var editor = editorRef.current;
|
|
203
|
+
if (!editor || disabled) return;
|
|
204
|
+
focus();
|
|
205
|
+
var selection = window.getSelection();
|
|
206
|
+
if (!selection) return;
|
|
207
|
+
if (!selection.anchorNode || !editor.contains(selection.anchorNode)) {
|
|
208
|
+
var endRange = document.createRange();
|
|
209
|
+
endRange.selectNodeContents(editor);
|
|
210
|
+
endRange.collapse(false);
|
|
211
|
+
selection.removeAllRanges();
|
|
212
|
+
selection.addRange(endRange);
|
|
213
|
+
}
|
|
214
|
+
var range = selection.getRangeAt(0);
|
|
215
|
+
range.collapse(true);
|
|
216
|
+
var prefix = '';
|
|
217
|
+
var startContainer = range.startContainer,
|
|
218
|
+
startOffset = range.startOffset;
|
|
219
|
+
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
220
|
+
var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
|
|
221
|
+
// Espacio solo si hay texto previo que no sea límite ni `@` (@@ deben quedar seguidos).
|
|
222
|
+
if (prevChar && !/[\s([{@]/.test(prevChar)) {
|
|
223
|
+
prefix = ' ';
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
var inserted = "".concat(prefix, "@");
|
|
227
|
+
var textNode = document.createTextNode(inserted);
|
|
228
|
+
range.insertNode(textNode);
|
|
229
|
+
|
|
230
|
+
// Si el `@` quedó en un nodo nuevo, unir con el text node previo que termina en `@`
|
|
231
|
+
// para que detectMentionTrigger vea el run completo (@@, @@@, …).
|
|
232
|
+
var prevSibling = textNode.previousSibling;
|
|
233
|
+
var caretNode = textNode;
|
|
234
|
+
var caretOffset = inserted.length;
|
|
235
|
+
if (prefix === '' && (prevSibling === null || prevSibling === void 0 ? void 0 : prevSibling.nodeType) === Node.TEXT_NODE && prevSibling.data.endsWith('@')) {
|
|
236
|
+
var prevText = prevSibling;
|
|
237
|
+
caretOffset = prevText.data.length + inserted.length;
|
|
238
|
+
prevText.data += inserted;
|
|
239
|
+
textNode.remove();
|
|
240
|
+
caretNode = prevText;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// El caret debe quedar DENTRO del text node (después de `@`).
|
|
244
|
+
// `setStartAfter` lo deja en el padre y detectMentionTrigger no activa el popover.
|
|
245
|
+
range.setStart(caretNode, caretOffset);
|
|
246
|
+
range.collapse(true);
|
|
247
|
+
selection.removeAllRanges();
|
|
248
|
+
selection.addRange(range);
|
|
249
|
+
emitInputState();
|
|
250
|
+
},
|
|
251
|
+
insertSlashTrigger: function insertSlashTrigger() {
|
|
252
|
+
var editor = editorRef.current;
|
|
253
|
+
if (!editor || disabled) return;
|
|
254
|
+
focus();
|
|
255
|
+
var selection = window.getSelection();
|
|
256
|
+
if (!selection) return;
|
|
257
|
+
if (!selection.anchorNode || !editor.contains(selection.anchorNode)) {
|
|
258
|
+
var endRange = document.createRange();
|
|
259
|
+
endRange.selectNodeContents(editor);
|
|
260
|
+
endRange.collapse(false);
|
|
261
|
+
selection.removeAllRanges();
|
|
262
|
+
selection.addRange(endRange);
|
|
263
|
+
}
|
|
264
|
+
var range = selection.getRangeAt(0);
|
|
265
|
+
range.collapse(true);
|
|
266
|
+
var prefix = '';
|
|
267
|
+
var startContainer = range.startContainer,
|
|
268
|
+
startOffset = range.startOffset;
|
|
269
|
+
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
270
|
+
var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
|
|
271
|
+
if (prevChar && !/[\s([{]/.test(prevChar)) {
|
|
272
|
+
prefix = ' ';
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
var inserted = "".concat(prefix, "/");
|
|
276
|
+
var textNode = document.createTextNode(inserted);
|
|
277
|
+
range.insertNode(textNode);
|
|
278
|
+
|
|
279
|
+
// Caret dentro del text node para que detectSlashTrigger active el dropdown.
|
|
280
|
+
range.setStart(textNode, inserted.length);
|
|
281
|
+
range.collapse(true);
|
|
282
|
+
selection.removeAllRanges();
|
|
283
|
+
selection.addRange(range);
|
|
284
|
+
emitInputState();
|
|
285
|
+
},
|
|
286
|
+
insertSkillTrigger: function insertSkillTrigger() {
|
|
287
|
+
var editor = editorRef.current;
|
|
288
|
+
if (!editor || disabled) return;
|
|
289
|
+
focus();
|
|
290
|
+
var selection = window.getSelection();
|
|
291
|
+
if (!selection) return;
|
|
292
|
+
if (!selection.anchorNode || !editor.contains(selection.anchorNode)) {
|
|
293
|
+
var endRange = document.createRange();
|
|
294
|
+
endRange.selectNodeContents(editor);
|
|
295
|
+
endRange.collapse(false);
|
|
296
|
+
selection.removeAllRanges();
|
|
297
|
+
selection.addRange(endRange);
|
|
298
|
+
}
|
|
299
|
+
var range = selection.getRangeAt(0);
|
|
300
|
+
range.collapse(true);
|
|
301
|
+
var prefix = '';
|
|
302
|
+
var startContainer = range.startContainer,
|
|
303
|
+
startOffset = range.startOffset;
|
|
304
|
+
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
305
|
+
var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
|
|
306
|
+
if (prevChar && !/[\s([{]/.test(prevChar)) {
|
|
307
|
+
prefix = ' ';
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
var inserted = "".concat(prefix, "#");
|
|
311
|
+
var textNode = document.createTextNode(inserted);
|
|
312
|
+
range.insertNode(textNode);
|
|
313
|
+
range.setStart(textNode, inserted.length);
|
|
314
|
+
range.collapse(true);
|
|
315
|
+
selection.removeAllRanges();
|
|
316
|
+
selection.addRange(range);
|
|
317
|
+
emitInputState();
|
|
318
|
+
},
|
|
319
|
+
serialize: serialize,
|
|
320
|
+
syncTriggerAtRunLength: syncTriggerAtRunLength,
|
|
321
|
+
hasVisualMultiline: function hasVisualMultiline() {
|
|
322
|
+
var _editor$textContent$t, _editor$textContent2;
|
|
323
|
+
var editor = editorRef.current;
|
|
324
|
+
if (!editor) {
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
var text = (_editor$textContent$t = (_editor$textContent2 = editor.textContent) === null || _editor$textContent2 === void 0 ? void 0 : _editor$textContent2.trim()) !== null && _editor$textContent$t !== void 0 ? _editor$textContent$t : '';
|
|
328
|
+
if (!text) {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
var styles = window.getComputedStyle(editor);
|
|
332
|
+
var lineHeight = parseFloat(styles.lineHeight) || 22;
|
|
333
|
+
var editorHeight = editor.getBoundingClientRect().height;
|
|
334
|
+
var isMultiline = editorHeight > lineHeight * 1.5;
|
|
335
|
+
return isMultiline;
|
|
336
|
+
},
|
|
337
|
+
getEditorClientRect: function getEditorClientRect() {
|
|
338
|
+
var _editorRef$current$ge, _editorRef$current;
|
|
339
|
+
return (_editorRef$current$ge = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getBoundingClientRect()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : null;
|
|
340
|
+
},
|
|
341
|
+
insertMention: function insertMention(mention) {
|
|
342
|
+
var chip = buildChipElement(mention);
|
|
343
|
+
replaceTriggerWithChip(chip, mention);
|
|
344
|
+
skipNextInput.current = true;
|
|
345
|
+
var state = serialize();
|
|
346
|
+
onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
|
|
347
|
+
trigger: {
|
|
348
|
+
active: false,
|
|
349
|
+
query: '',
|
|
350
|
+
atRunLength: 0
|
|
351
|
+
},
|
|
352
|
+
slashTrigger: {
|
|
353
|
+
active: false,
|
|
354
|
+
query: ''
|
|
355
|
+
},
|
|
356
|
+
hashTrigger: {
|
|
357
|
+
active: false,
|
|
358
|
+
query: ''
|
|
359
|
+
}
|
|
360
|
+
}));
|
|
361
|
+
var isEmpty = state.text.trim() === '';
|
|
362
|
+
syncEditorEmptyAttribute(isEmpty);
|
|
363
|
+
setLogicalEmpty(isEmpty);
|
|
364
|
+
queueMicrotask(function () {
|
|
365
|
+
// Si el navegador no dispara `input` tras el chip, el flag quedaba en true y el próximo @ del usuario se ignoraba.
|
|
366
|
+
skipNextInput.current = false;
|
|
367
|
+
recomputePlaceholderTruncation();
|
|
368
|
+
});
|
|
369
|
+
},
|
|
370
|
+
appendMentionAtEnd: function appendMentionAtEnd(mention) {
|
|
371
|
+
var editor = editorRef.current;
|
|
372
|
+
if (!editor) return;
|
|
373
|
+
var chip = buildChipElement(mention);
|
|
374
|
+
chip.setAttribute('data-mention', 'true');
|
|
375
|
+
chip.setAttribute('data-mention-id', String(mention.id));
|
|
376
|
+
chip.setAttribute('data-mention-type', mention.type);
|
|
377
|
+
chip.setAttribute('data-mention-label', mention.label);
|
|
378
|
+
chip.setAttribute('contenteditable', 'false');
|
|
379
|
+
var trailingSpace = document.createTextNode("\xA0");
|
|
380
|
+
editor.appendChild(chip);
|
|
381
|
+
editor.appendChild(trailingSpace);
|
|
382
|
+
skipNextInput.current = true;
|
|
383
|
+
var state = serialize();
|
|
384
|
+
onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
|
|
385
|
+
trigger: {
|
|
386
|
+
active: false,
|
|
387
|
+
query: '',
|
|
388
|
+
atRunLength: 0
|
|
389
|
+
},
|
|
390
|
+
slashTrigger: {
|
|
391
|
+
active: false,
|
|
392
|
+
query: ''
|
|
393
|
+
},
|
|
394
|
+
hashTrigger: {
|
|
395
|
+
active: false,
|
|
396
|
+
query: ''
|
|
397
|
+
}
|
|
398
|
+
}));
|
|
399
|
+
syncEditorEmptyAttribute(false);
|
|
400
|
+
setLogicalEmpty(false);
|
|
401
|
+
var selection = window.getSelection();
|
|
402
|
+
if (selection) {
|
|
403
|
+
var range = document.createRange();
|
|
404
|
+
range.setStart(trailingSpace, 1);
|
|
405
|
+
range.collapse(true);
|
|
406
|
+
selection.removeAllRanges();
|
|
407
|
+
selection.addRange(range);
|
|
408
|
+
}
|
|
409
|
+
queueMicrotask(function () {
|
|
410
|
+
skipNextInput.current = false;
|
|
411
|
+
recomputePlaceholderTruncation();
|
|
412
|
+
});
|
|
413
|
+
},
|
|
414
|
+
insertSkillMention: function insertSkillMention(mention) {
|
|
415
|
+
var chip = buildChipElement(mention);
|
|
416
|
+
replaceTriggerWithSkillChip(chip, mention);
|
|
417
|
+
skipNextInput.current = true;
|
|
418
|
+
var state = serialize();
|
|
419
|
+
onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
|
|
420
|
+
trigger: {
|
|
421
|
+
active: false,
|
|
422
|
+
query: '',
|
|
423
|
+
atRunLength: 0
|
|
424
|
+
},
|
|
425
|
+
slashTrigger: {
|
|
426
|
+
active: false,
|
|
427
|
+
query: ''
|
|
428
|
+
},
|
|
429
|
+
hashTrigger: {
|
|
430
|
+
active: false,
|
|
431
|
+
query: ''
|
|
432
|
+
}
|
|
433
|
+
}));
|
|
434
|
+
var isEmpty = state.text.trim() === '';
|
|
435
|
+
syncEditorEmptyAttribute(isEmpty);
|
|
436
|
+
setLogicalEmpty(isEmpty);
|
|
437
|
+
queueMicrotask(function () {
|
|
438
|
+
skipNextInput.current = false;
|
|
439
|
+
recomputePlaceholderTruncation();
|
|
440
|
+
});
|
|
441
|
+
},
|
|
442
|
+
insertSlashCommand: function insertSlashCommand(command) {
|
|
443
|
+
var chip = buildSlashChipElement(command);
|
|
444
|
+
replaceTriggerWithSlashChip(chip, command);
|
|
445
|
+
skipNextInput.current = true;
|
|
446
|
+
var state = serialize();
|
|
447
|
+
onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
|
|
448
|
+
trigger: {
|
|
449
|
+
active: false,
|
|
450
|
+
query: '',
|
|
451
|
+
atRunLength: 0
|
|
452
|
+
},
|
|
453
|
+
slashTrigger: {
|
|
454
|
+
active: false,
|
|
455
|
+
query: ''
|
|
456
|
+
},
|
|
457
|
+
hashTrigger: {
|
|
458
|
+
active: false,
|
|
459
|
+
query: ''
|
|
460
|
+
}
|
|
461
|
+
}));
|
|
462
|
+
var isEmpty = state.text.trim() === '';
|
|
463
|
+
syncEditorEmptyAttribute(isEmpty);
|
|
464
|
+
setLogicalEmpty(isEmpty);
|
|
465
|
+
queueMicrotask(function () {
|
|
466
|
+
skipNextInput.current = false;
|
|
467
|
+
recomputePlaceholderTruncation();
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
}, [focus, clearEditorDom, serialize, syncTriggerAtRunLength, replaceTriggerWithChip, replaceTriggerWithSlashChip, replaceTriggerWithSkillChip, onInput, recomputePlaceholderTruncation, syncEditorEmptyAttribute, emitInputState, disabled, editorRef]);
|
|
472
|
+
var handleInput = function handleInput() {
|
|
473
|
+
if (skipNextInput.current) {
|
|
474
|
+
skipNextInput.current = false;
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
emitInputState();
|
|
478
|
+
};
|
|
479
|
+
var handlePaste = function handlePaste(e) {
|
|
480
|
+
var files = filesFromDataTransfer(e.clipboardData);
|
|
481
|
+
if (files.length && onPasteFiles) {
|
|
482
|
+
e.preventDefault();
|
|
483
|
+
onPasteFiles(files);
|
|
484
|
+
}
|
|
485
|
+
var text = e.clipboardData.getData('text/plain');
|
|
486
|
+
if (files.length && onPasteFiles && !text) {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
e.preventDefault();
|
|
490
|
+
var selection = window.getSelection();
|
|
491
|
+
if (!selection || selection.rangeCount === 0) return;
|
|
492
|
+
selection.deleteFromDocument();
|
|
493
|
+
selection.getRangeAt(0).insertNode(document.createTextNode(text));
|
|
494
|
+
selection.collapseToEnd();
|
|
495
|
+
handleInput();
|
|
496
|
+
};
|
|
497
|
+
var trimmedPlaceholder = (_placeholder$trim2 = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim2 !== void 0 ? _placeholder$trim2 : '';
|
|
498
|
+
var placeholderTooltipTitle = logicalEmpty && placeholderTruncated && trimmedPlaceholder ? trimmedPlaceholder : '';
|
|
499
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
500
|
+
children: [/*#__PURE__*/_jsx(ContextMentionChipGlobalStyles, {}), /*#__PURE__*/_jsx(Tooltip, {
|
|
501
|
+
title: placeholderTooltipTitle,
|
|
502
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
503
|
+
style: {
|
|
504
|
+
display: 'block',
|
|
505
|
+
width: '100%',
|
|
506
|
+
minWidth: 0
|
|
507
|
+
},
|
|
508
|
+
children: /*#__PURE__*/_jsx(SCMEEditable, {
|
|
509
|
+
ref: editorRef,
|
|
510
|
+
className: className,
|
|
511
|
+
$maxHeight: maxHeight,
|
|
512
|
+
style: maxHeight != null ? {
|
|
513
|
+
maxHeight: maxHeight
|
|
514
|
+
} : undefined,
|
|
515
|
+
"data-placeholder": placeholder,
|
|
516
|
+
"data-empty": String(logicalEmpty),
|
|
517
|
+
contentEditable: !disabled,
|
|
518
|
+
"data-disabled": String(!!disabled),
|
|
519
|
+
suppressContentEditableWarning: true,
|
|
520
|
+
role: "textbox",
|
|
521
|
+
"aria-multiline": "true",
|
|
522
|
+
onInput: handleInput,
|
|
523
|
+
onKeyDown: onKeyDown,
|
|
524
|
+
onPaste: handlePaste,
|
|
525
|
+
onFocus: onFocus,
|
|
526
|
+
onBlur: onBlur
|
|
527
|
+
})
|
|
528
|
+
})
|
|
529
|
+
})]
|
|
530
|
+
});
|
|
531
|
+
});
|
|
532
|
+
ContextMentionEditor.displayName = 'ContextMentionEditor';
|
|
533
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3J3YXJkUmVmIiwidXNlQ2FsbGJhY2siLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJUb29sdGlwIiwidXNlQ29udGV4dE1lbnRpb25zIiwiYnVpbGRDaGlwRWxlbWVudCIsIkNvbnRleHRNZW50aW9uQ2hpcEdsb2JhbFN0eWxlcyIsImJ1aWxkU2xhc2hDaGlwRWxlbWVudCIsImZpbGVzRnJvbURhdGFUcmFuc2ZlciIsIlNDTUVFZGl0YWJsZSIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsImlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciIsImVkaXRvciIsInBsYWNlaG9sZGVyIiwidHJpbW1lZCIsInRyaW0iLCJjbGllbnRXaWR0aCIsInN0eWxlcyIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJjdHgiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJnZXRDb250ZXh0IiwiZm9udCIsImNvbmNhdCIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJtZWFzdXJlZCIsIm1lYXN1cmVUZXh0Iiwid2lkdGgiLCJwYWRkaW5nTGVmdCIsInBhcnNlRmxvYXQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwiYXZhaWxhYmxlIiwiTWF0aCIsIm1heCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwiX3JlZiIsInJlZiIsIl9wbGFjZWhvbGRlciR0cmltMiIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwibWF4SGVpZ2h0Iiwib25JbnB1dCIsIm9uS2V5RG93biIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvblBhc3RlRmlsZXMiLCJfdXNlQ29udGV4dE1lbnRpb25zIiwiZWRpdG9yUmVmIiwidXBkYXRlVHJpZ2dlciIsInJlcGxhY2VUcmlnZ2VyV2l0aENoaXAiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwidXBkYXRlU2xhc2hUcmlnZ2VyIiwicmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwIiwidXBkYXRlSGFzaFRyaWdnZXIiLCJyZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAiLCJzZXJpYWxpemUiLCJjbGVhckVkaXRvckRvbSIsImNsZWFyIiwiZm9jdXMiLCJza2lwTmV4dElucHV0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwicGxhY2Vob2xkZXJUcnVuY2F0ZWQiLCJzZXRQbGFjZWhvbGRlclRydW5jYXRlZCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9naWNhbEVtcHR5Iiwic2V0TG9naWNhbEVtcHR5Iiwic3luY0VkaXRvckVtcHR5QXR0cmlidXRlIiwiaXNFbXB0eSIsImN1cnJlbnQiLCJzZXRBdHRyaWJ1dGUiLCJTdHJpbmciLCJub3JtYWxpemVFbXB0eUVkaXRvckRvbSIsIl9lZGl0b3IkdGV4dENvbnRlbnQiLCJ0ZXh0Q29udGVudCIsImlubmVySFRNTCIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJjb2xsYXBzZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwicmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uIiwiX3BsYWNlaG9sZGVyJHRyaW0iLCJlbCIsInBoIiwiaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSIsInRleHQiLCJ1bmRlZmluZWQiLCJybyIsIlJlc2l6ZU9ic2VydmVyIiwicXVldWVNaWNyb3Rhc2siLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsImVtaXRJbnB1dFN0YXRlIiwidHJpZyIsInNsYXNoVHJpZyIsImhhc2hUcmlnIiwic3RhdGUiLCJtZW50aW9ucyIsInNsYXNoQ29tbWFuZHMiLCJfb2JqZWN0U3ByZWFkIiwidHJpZ2dlciIsImFjdGl2ZSIsInF1ZXJ5IiwiYXRSdW5MZW5ndGgiLCJzbGFzaFRyaWdnZXIiLCJoYXNoVHJpZ2dlciIsInNldFBsYWluVGV4dCIsInBsYWluIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImluc2VydE1lbnRpb25UcmlnZ2VyIiwiYW5jaG9yTm9kZSIsImNvbnRhaW5zIiwiZW5kUmFuZ2UiLCJnZXRSYW5nZUF0IiwicHJlZml4Iiwic3RhcnRDb250YWluZXIiLCJzdGFydE9mZnNldCIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInByZXZDaGFyIiwiZGF0YSIsImNoYXJBdCIsInRlc3QiLCJpbnNlcnRlZCIsInRleHROb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJpbnNlcnROb2RlIiwicHJldlNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJjYXJldE5vZGUiLCJjYXJldE9mZnNldCIsImVuZHNXaXRoIiwicHJldlRleHQiLCJyZW1vdmUiLCJzZXRTdGFydCIsImluc2VydFNsYXNoVHJpZ2dlciIsImluc2VydFNraWxsVHJpZ2dlciIsImhhc1Zpc3VhbE11bHRpbGluZSIsIl9lZGl0b3IkdGV4dENvbnRlbnQkdCIsIl9lZGl0b3IkdGV4dENvbnRlbnQyIiwibGluZUhlaWdodCIsImVkaXRvckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImlzTXVsdGlsaW5lIiwiZ2V0RWRpdG9yQ2xpZW50UmVjdCIsIl9lZGl0b3JSZWYkY3VycmVudCRnZSIsIl9lZGl0b3JSZWYkY3VycmVudCIsImluc2VydE1lbnRpb24iLCJtZW50aW9uIiwiY2hpcCIsImFwcGVuZE1lbnRpb25BdEVuZCIsImlkIiwidHlwZSIsImxhYmVsIiwidHJhaWxpbmdTcGFjZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0U2tpbGxNZW50aW9uIiwiaW5zZXJ0U2xhc2hDb21tYW5kIiwiY29tbWFuZCIsImhhbmRsZUlucHV0IiwiaGFuZGxlUGFzdGUiLCJlIiwiZmlsZXMiLCJjbGlwYm9hcmREYXRhIiwicHJldmVudERlZmF1bHQiLCJnZXREYXRhIiwicmFuZ2VDb3VudCIsImRlbGV0ZUZyb21Eb2N1bWVudCIsImNvbGxhcHNlVG9FbmQiLCJ0cmltbWVkUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSIsImNoaWxkcmVuIiwidGl0bGUiLCJzdHlsZSIsImRpc3BsYXkiLCJtaW5XaWR0aCIsIiRtYXhIZWlnaHQiLCJjb250ZW50RWRpdGFibGUiLCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciLCJyb2xlIiwib25QYXN0ZSIsImRpc3BsYXlOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3IvQ29udGV4dE1lbnRpb25FZGl0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENsaXBib2FyZEV2ZW50LFxuICBmb3J3YXJkUmVmLFxuICBLZXlib2FyZEV2ZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHVzZUNvbnRleHRNZW50aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNvbnRleHRNZW50aW9ucydcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBidWlsZENoaXBFbGVtZW50IH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25DaGlwR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBidWlsZFNsYXNoQ2hpcEVsZW1lbnQsIFNsYXNoQ29tbWFuZENoaXBEYXRhIH0gZnJvbSAnLi4vU2xhc2hDb21tYW5kQ2hpcCdcbmltcG9ydCB7IGZpbGVzRnJvbURhdGFUcmFuc2ZlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NoYXRJbnB1dEZpbGVzJ1xuaW1wb3J0IHsgU0NNRUVkaXRhYmxlIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkVkaXRvci5zdHlsZXMnXG5cbmNvbnN0IGlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciA9IChlZGl0b3I6IEhUTUxFbGVtZW50LCBwbGFjZWhvbGRlcjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBwbGFjZWhvbGRlci50cmltKClcbiAgaWYgKCF0cmltbWVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgeyBjbGllbnRXaWR0aCB9ID0gZWRpdG9yXG4gIGlmIChjbGllbnRXaWR0aCA8PSA0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlZGl0b3IpXG4gIGNvbnN0IGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJylcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjdHguZm9udCA9IGAke3N0eWxlcy5mb250V2VpZ2h0fSAke3N0eWxlcy5mb250U2l6ZX0gJHtzdHlsZXMuZm9udEZhbWlseX1gXG4gIGNvbnN0IG1lYXN1cmVkID0gY3R4Lm1lYXN1cmVUZXh0KHRyaW1tZWQpLndpZHRoXG5cbiAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nTGVmdCkgfHwgMFxuICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nUmlnaHQpIHx8IDBcbiAgY29uc3QgYm9yZGVyTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCkgfHwgMFxuICBjb25zdCBib3JkZXJSaWdodCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlclJpZ2h0V2lkdGgpIHx8IDBcbiAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoMCwgY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodCAtIGJvcmRlckxlZnQgLSBib3JkZXJSaWdodClcblxuICByZXR1cm4gbWVhc3VyZWQgPiBhdmFpbGFibGUgKyAxXG59XG5cbmV4cG9ydCB0eXBlIENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlID0ge1xuICBmb2N1czogKCkgPT4gdm9pZFxuICBjbGVhcjogKCkgPT4gdm9pZFxuICBzZXRQbGFpblRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWRcbiAgLyoqIEluc2VydGEgYEBgIGVuIGVsIGNhcmV0IChjb24gZXNwYWNpbyBwcmV2aW8gc2kgaGFjZSBmYWx0YSkgeSBhYnJlIGVsIHRyaWdnZXIgZGUgbWVudGlvbnMuICovXG4gIGluc2VydE1lbnRpb25UcmlnZ2VyOiAoKSA9PiB2b2lkXG4gIC8qKiBJbnNlcnRhIGAvYCBlbiBlbCBjYXJldCAoY29uIGVzcGFjaW8gcHJldmlvIHNpIGhhY2UgZmFsdGEpIHkgYWJyZSBlbCB0cmlnZ2VyIGRlIHNsYXNoIGNvbW1hbmRzLiAqL1xuICBpbnNlcnRTbGFzaFRyaWdnZXI6ICgpID0+IHZvaWRcbiAgLyoqIEluc2VydGEgYCNgIGVuIGVsIGNhcmV0IChjb24gZXNwYWNpbyBwcmV2aW8gc2kgaGFjZSBmYWx0YSkgeSBhYnJlIGVsIHRyaWdnZXIgZGUgc2tpbGxzLiAqL1xuICBpbnNlcnRTa2lsbFRyaWdnZXI6ICgpID0+IHZvaWRcbiAgaW5zZXJ0TWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIGFwcGVuZE1lbnRpb25BdEVuZDogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIGluc2VydFNsYXNoQ29tbWFuZDogKGNvbW1hbmQ6IFNsYXNoQ29tbWFuZENoaXBEYXRhKSA9PiB2b2lkXG4gIC8qKiBSZWVtcGxhemEgZWwgYCNxdWVyeWAgcGVuZGllbnRlIHBvciBlbCBjaGlwIGRlIGxhIHNraWxsIGVsZWdpZGEuICovXG4gIGluc2VydFNraWxsTWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGg6IChhdFJ1bkxlbmd0aDogbnVtYmVyKSA9PiB2b2lkXG4gIHNlcmlhbGl6ZTogKCkgPT4ge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICB9XG4gIGhhc1Zpc3VhbE11bHRpbGluZTogKCkgPT4gYm9vbGVhblxuICAvKiogUmVjdCBkZWwgw6FyZWEgZWRpdGFibGUgKHZpZXdwb3J0KTsgbG8gdXNhIGVsIHBvcG92ZXIgZGUgQCBwYXJhIGFsaW5lYXIgYW5jaG8geSBmYWxsYmFjayB2ZXJ0aWNhbC4gKi9cbiAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gRE9NUmVjdCB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnRpb25FZGl0b3JQcm9wcyA9IHtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKiogQWx0byBtw6F4aW1vIGRlbCDDoXJlYSBlZGl0YWJsZSAocHgpLiBTZSBhanVzdGEgY3VhbmRvIGhheSBjaGlwcyBkZSBjb250ZXh0by9hZGp1bnRvcy4gKi9cbiAgbWF4SGVpZ2h0PzogbnVtYmVyXG4gIG9uSW5wdXQ/OiAoc3RhdGU6IHtcbiAgICB0ZXh0OiBzdHJpbmdcbiAgICBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXVxuICAgIHNsYXNoQ29tbWFuZHM6IFNsYXNoQ29tbWFuZENoaXBEYXRhW11cbiAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9XG4gICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZyB9XG4gICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgfSkgPT4gdm9pZFxuICBvbktleURvd24/OiAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25Gb2N1cz86ICgpID0+IHZvaWRcbiAgb25CbHVyPzogKCkgPT4gdm9pZFxuICAvKiogQ2xpcGJvYXJkIGZpbGVzIChzY3JlZW5zaG90cywgY29waWVkIGltYWdlcykuIFRleHQgaXMgc3RpbGwgaW5zZXJ0ZWQgd2hlbiBwcmVzZW50LiAqL1xuICBvblBhc3RlRmlsZXM/OiAoZmlsZXM6IEZpbGVbXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgQ29udGV4dE1lbnRpb25FZGl0b3IgPSBmb3J3YXJkUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlLCBDb250ZXh0TWVudGlvbkVkaXRvclByb3BzPihcbiAgKHsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCBjbGFzc05hbWUsIG1heEhlaWdodCwgb25JbnB1dCwgb25LZXlEb3duLCBvbkZvY3VzLCBvbkJsdXIsIG9uUGFzdGVGaWxlcyB9LCByZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlZGl0b3JSZWYsXG4gICAgICB1cGRhdGVUcmlnZ2VyLFxuICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCxcbiAgICAgIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgsXG4gICAgICB1cGRhdGVTbGFzaFRyaWdnZXIsXG4gICAgICByZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAsXG4gICAgICB1cGRhdGVIYXNoVHJpZ2dlcixcbiAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNraWxsQ2hpcCxcbiAgICAgIHNlcmlhbGl6ZSxcbiAgICAgIGNsZWFyOiBjbGVhckVkaXRvckRvbSxcbiAgICAgIGZvY3VzLFxuICAgIH0gPSB1c2VDb250ZXh0TWVudGlvbnMoKVxuICAgIGNvbnN0IHNraXBOZXh0SW5wdXQgPSB1c2VSZWYoZmFsc2UpXG4gICAgY29uc3QgW3BsYWNlaG9sZGVyVHJ1bmNhdGVkLCBzZXRQbGFjZWhvbGRlclRydW5jYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgICBjb25zdCBbbG9naWNhbEVtcHR5LCBzZXRMb2dpY2FsRW1wdHldID0gdXNlU3RhdGUodHJ1ZSlcblxuICAgIGNvbnN0IHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSA9IHVzZUNhbGxiYWNrKChpc0VtcHR5OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCdkYXRhLWVtcHR5JywgU3RyaW5nKGlzRW1wdHkpKVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgY29uc3Qgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgaWYgKCFlZGl0b3IpIHJldHVyblxuXG4gICAgICAvLyBMaW1waWFyIGN1YWxxdWllciByZXNpZHVvIChiciwgZXNwYWNpb3MpIHF1ZSBkZWplIGVsIGJyb3dzZXIgYWwgdmFjaWFyIGVsIGNvbnRlbnRlZGl0YWJsZS5cbiAgICAgIC8vIFNpbiBlc3RvLCB1biBlc3BhY2lvIHN1ZWx0byBhY3RpdmEgZGF0YS1lbXB0eT1cInRydWVcIiArIDo6YmVmb3JlIHBsYWNlaG9sZGVyIGVuIGzDrW5lYSAxXG4gICAgICAvLyB5IGRlc3BsYXphIGVsIGN1cnNvciBhIGxhIGzDrW5lYSAyLlxuICAgICAgaWYgKGVkaXRvci50ZXh0Q29udGVudD8udHJpbSgpID09PSAnJykge1xuICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJydcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgfSwgW2VkaXRvclJlZl0pXG5cbiAgICBjb25zdCByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgICBjb25zdCBwaCA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICAgIGNvbnN0IGlzRWRpdG9yTG9naWNhbGx5RW1wdHkgPSBzZXJpYWxpemUoKS50ZXh0LnRyaW0oKSA9PT0gJydcblxuICAgICAgaWYgKCFlbCB8fCAhcGggfHwgIWlzRWRpdG9yTG9naWNhbGx5RW1wdHkpIHtcbiAgICAgICAgc2V0UGxhY2Vob2xkZXJUcnVuY2F0ZWQoZmFsc2UpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzZXRQbGFjZWhvbGRlclRydW5jYXRlZChpc1BsYWNlaG9sZGVyVHJ1bmNhdGVkSW5FZGl0b3IoZWwsIHBoKSlcbiAgICB9LCBbcGxhY2Vob2xkZXIsIHNlcmlhbGl6ZV0pXG5cbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgcmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uKClcbiAgICAgIGNvbnN0IGVsID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgY29uc3Qgcm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhyZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24pXG4gICAgICB9KVxuICAgICAgcm8ub2JzZXJ2ZShlbClcbiAgICAgIHJldHVybiAoKSA9PiByby5kaXNjb25uZWN0KClcbiAgICB9LCBbcGxhY2Vob2xkZXIsIGRpc2FibGVkLCByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb25dKVxuXG4gICAgY29uc3QgZW1pdElucHV0U3RhdGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCB0cmlnID0gdXBkYXRlVHJpZ2dlcigpXG4gICAgICBjb25zdCBzbGFzaFRyaWcgPSB1cGRhdGVTbGFzaFRyaWdnZXIoKVxuICAgICAgY29uc3QgaGFzaFRyaWcgPSB1cGRhdGVIYXNoVHJpZ2dlcigpXG4gICAgICBsZXQgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgICAgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20oKVxuICAgICAgICBzdGF0ZSA9IHsgdGV4dDogJycsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfVxuICAgICAgfVxuICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogdHJpZy5hY3RpdmUsIHF1ZXJ5OiB0cmlnLnF1ZXJ5LCBhdFJ1bkxlbmd0aDogdHJpZy5hdFJ1bkxlbmd0aCB9LFxuICAgICAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBzbGFzaFRyaWcuYWN0aXZlLCBxdWVyeTogc2xhc2hUcmlnLnF1ZXJ5IH0sXG4gICAgICAgIGhhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogaGFzaFRyaWcuYWN0aXZlLCBxdWVyeTogaGFzaFRyaWcucXVlcnkgfSxcbiAgICAgIH0pXG4gICAgICBxdWV1ZU1pY3JvdGFzayhyZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24pXG4gICAgfSwgW1xuICAgICAgdXBkYXRlVHJpZ2dlcixcbiAgICAgIHVwZGF0ZVNsYXNoVHJpZ2dlcixcbiAgICAgIHVwZGF0ZUhhc2hUcmlnZ2VyLFxuICAgICAgc2VyaWFsaXplLFxuICAgICAgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20sXG4gICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUsXG4gICAgICBvbklucHV0LFxuICAgICAgcmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uLFxuICAgIF0pXG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKFxuICAgICAgcmVmLFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJFZGl0b3JEb20oKVxuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSh0cnVlKVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eSh0cnVlKVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICAgICAgfSxcbiAgICAgICAgc2V0UGxhaW5UZXh0OiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvcikgcmV0dXJuXG4gICAgICAgICAgY29uc3QgcGxhaW4gPSB0ZXh0ID8/ICcnXG4gICAgICAgICAgZWRpdG9yLnRleHRDb250ZW50ID0gcGxhaW5cbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIGNvbnN0IGlzRW1wdHkgPSBzdGF0ZS50ZXh0LnRyaW0oKSA9PT0gJydcbiAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgfVxuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIGVkaXRvci5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKVxuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydE1lbnRpb25UcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvciB8fCBkaXNhYmxlZCkgcmV0dXJuXG5cbiAgICAgICAgICBmb2N1cygpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG5cbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFlZGl0b3IuY29udGFpbnMoc2VsZWN0aW9uLmFuY2hvck5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgICAgIGVuZFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICAgICAgICBlbmRSYW5nZS5jb2xsYXBzZShmYWxzZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKGVuZFJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuXG4gICAgICAgICAgbGV0IHByZWZpeCA9ICcnXG4gICAgICAgICAgY29uc3QgeyBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQgfSA9IHJhbmdlXG4gICAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgY29uc3QgcHJldkNoYXIgPSBzdGFydE9mZnNldCA+IDAgPyAoc3RhcnRDb250YWluZXIgYXMgVGV4dCkuZGF0YS5jaGFyQXQoc3RhcnRPZmZzZXQgLSAxKSA6ICcnXG4gICAgICAgICAgICAvLyBFc3BhY2lvIHNvbG8gc2kgaGF5IHRleHRvIHByZXZpbyBxdWUgbm8gc2VhIGzDrW1pdGUgbmkgYEBgIChAQCBkZWJlbiBxdWVkYXIgc2VndWlkb3MpLlxuICAgICAgICAgICAgaWYgKHByZXZDaGFyICYmICEvW1xccyhbe0BdLy50ZXN0KHByZXZDaGFyKSkge1xuICAgICAgICAgICAgICBwcmVmaXggPSAnICdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbnNlcnRlZCA9IGAke3ByZWZpeH1AYFxuICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaW5zZXJ0ZWQpXG4gICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSlcblxuICAgICAgICAgIC8vIFNpIGVsIGBAYCBxdWVkw7MgZW4gdW4gbm9kbyBudWV2bywgdW5pciBjb24gZWwgdGV4dCBub2RlIHByZXZpbyBxdWUgdGVybWluYSBlbiBgQGBcbiAgICAgICAgICAvLyBwYXJhIHF1ZSBkZXRlY3RNZW50aW9uVHJpZ2dlciB2ZWEgZWwgcnVuIGNvbXBsZXRvIChAQCwgQEBALCDigKYpLlxuICAgICAgICAgIGNvbnN0IHByZXZTaWJsaW5nID0gdGV4dE5vZGUucHJldmlvdXNTaWJsaW5nXG4gICAgICAgICAgbGV0IGNhcmV0Tm9kZSA9IHRleHROb2RlXG4gICAgICAgICAgbGV0IGNhcmV0T2Zmc2V0ID0gaW5zZXJ0ZWQubGVuZ3RoXG4gICAgICAgICAgaWYgKHByZWZpeCA9PT0gJycgJiYgcHJldlNpYmxpbmc/Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiAocHJldlNpYmxpbmcgYXMgVGV4dCkuZGF0YS5lbmRzV2l0aCgnQCcpKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2VGV4dCA9IHByZXZTaWJsaW5nIGFzIFRleHRcbiAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gcHJldlRleHQuZGF0YS5sZW5ndGggKyBpbnNlcnRlZC5sZW5ndGhcbiAgICAgICAgICAgIHByZXZUZXh0LmRhdGEgKz0gaW5zZXJ0ZWRcbiAgICAgICAgICAgIHRleHROb2RlLnJlbW92ZSgpXG4gICAgICAgICAgICBjYXJldE5vZGUgPSBwcmV2VGV4dFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVsIGNhcmV0IGRlYmUgcXVlZGFyIERFTlRSTyBkZWwgdGV4dCBub2RlIChkZXNwdcOpcyBkZSBgQGApLlxuICAgICAgICAgIC8vIGBzZXRTdGFydEFmdGVyYCBsbyBkZWphIGVuIGVsIHBhZHJlIHkgZGV0ZWN0TWVudGlvblRyaWdnZXIgbm8gYWN0aXZhIGVsIHBvcG92ZXIuXG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY2FyZXROb2RlLCBjYXJldE9mZnNldClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcblxuICAgICAgICAgIGVtaXRJbnB1dFN0YXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0U2xhc2hUcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvciB8fCBkaXNhYmxlZCkgcmV0dXJuXG5cbiAgICAgICAgICBmb2N1cygpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG5cbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFlZGl0b3IuY29udGFpbnMoc2VsZWN0aW9uLmFuY2hvck5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgICAgIGVuZFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICAgICAgICBlbmRSYW5nZS5jb2xsYXBzZShmYWxzZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKGVuZFJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuXG4gICAgICAgICAgbGV0IHByZWZpeCA9ICcnXG4gICAgICAgICAgY29uc3QgeyBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQgfSA9IHJhbmdlXG4gICAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgY29uc3QgcHJldkNoYXIgPSBzdGFydE9mZnNldCA+IDAgPyAoc3RhcnRDb250YWluZXIgYXMgVGV4dCkuZGF0YS5jaGFyQXQoc3RhcnRPZmZzZXQgLSAxKSA6ICcnXG4gICAgICAgICAgICBpZiAocHJldkNoYXIgJiYgIS9bXFxzKFt7XS8udGVzdChwcmV2Q2hhcikpIHtcbiAgICAgICAgICAgICAgcHJlZml4ID0gJyAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaW5zZXJ0ZWQgPSBgJHtwcmVmaXh9L2BcbiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGluc2VydGVkKVxuICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUodGV4dE5vZGUpXG5cbiAgICAgICAgICAvLyBDYXJldCBkZW50cm8gZGVsIHRleHQgbm9kZSBwYXJhIHF1ZSBkZXRlY3RTbGFzaFRyaWdnZXIgYWN0aXZlIGVsIGRyb3Bkb3duLlxuICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRleHROb2RlLCBpbnNlcnRlZC5sZW5ndGgpXG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG5cbiAgICAgICAgICBlbWl0SW5wdXRTdGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFNraWxsVHJpZ2dlcjogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlZGl0b3IgfHwgZGlzYWJsZWQpIHJldHVyblxuXG4gICAgICAgICAgZm9jdXMoKVxuXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHJldHVyblxuXG4gICAgICAgICAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhZWRpdG9yLmNvbnRhaW5zKHNlbGVjdGlvbi5hbmNob3JOb2RlKSkge1xuICAgICAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgICAgICBlbmRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKVxuICAgICAgICAgICAgZW5kUmFuZ2UuY29sbGFwc2UoZmFsc2UpXG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShlbmRSYW5nZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcblxuICAgICAgICAgIGxldCBwcmVmaXggPSAnJ1xuICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0IH0gPSByYW5nZVxuICAgICAgICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDaGFyID0gc3RhcnRPZmZzZXQgPiAwID8gKHN0YXJ0Q29udGFpbmVyIGFzIFRleHQpLmRhdGEuY2hhckF0KHN0YXJ0T2Zmc2V0IC0gMSkgOiAnJ1xuICAgICAgICAgICAgaWYgKHByZXZDaGFyICYmICEvW1xccyhbe10vLnRlc3QocHJldkNoYXIpKSB7XG4gICAgICAgICAgICAgIHByZWZpeCA9ICcgJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluc2VydGVkID0gYCR7cHJlZml4fSNgXG4gICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpbnNlcnRlZClcbiAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKHRleHROb2RlKVxuXG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIGluc2VydGVkLmxlbmd0aClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcblxuICAgICAgICAgIGVtaXRJbnB1dFN0YXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgICAgICBoYXNWaXN1YWxNdWx0aWxpbmU6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZWRpdG9yLnRleHRDb250ZW50Py50cmltKCkgPz8gJydcbiAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMubGluZUhlaWdodCkgfHwgMjJcbiAgICAgICAgICBjb25zdCBlZGl0b3JIZWlnaHQgPSBlZGl0b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XG4gICAgICAgICAgY29uc3QgaXNNdWx0aWxpbmUgPSBlZGl0b3JIZWlnaHQgPiBsaW5lSGVpZ2h0ICogMS41XG5cbiAgICAgICAgICByZXR1cm4gaXNNdWx0aWxpbmVcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IG51bGwsXG4gICAgICAgIGluc2VydE1lbnRpb246IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcChjaGlwLCBtZW50aW9uKVxuICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IHRydWVcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICAgICAgb25JbnB1dD8uKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgdHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwIH0sXG4gICAgICAgICAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgICBoYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnN0IGlzRW1wdHkgPSBzdGF0ZS50ZXh0LnRyaW0oKSA9PT0gJydcbiAgICAgICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoaXNFbXB0eSlcbiAgICAgICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAvLyBTaSBlbCBuYXZlZ2Fkb3Igbm8gZGlzcGFyYSBgaW5wdXRgIHRyYXMgZWwgY2hpcCwgZWwgZmxhZyBxdWVkYWJhIGVuIHRydWUgeSBlbCBwcsOzeGltbyBAIGRlbCB1c3VhcmlvIHNlIGlnbm9yYWJhLlxuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgYXBwZW5kTWVudGlvbkF0RW5kOiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSByZXR1cm5cblxuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbicsICd0cnVlJylcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWlkJywgU3RyaW5nKG1lbnRpb24uaWQpKVxuICAgICAgICAgIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWxhYmVsJywgbWVudGlvbi5sYWJlbClcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcblxuICAgICAgICAgIGNvbnN0IHRyYWlsaW5nU3BhY2UgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MDBhMCcpXG4gICAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGNoaXApXG4gICAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHRyYWlsaW5nU3BhY2UpXG5cbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoZmFsc2UpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGZhbHNlKVxuXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0cmFpbGluZ1NwYWNlLCAxKVxuICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFNraWxsTWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hpcCA9IGJ1aWxkQ2hpcEVsZW1lbnQobWVudGlvbilcbiAgICAgICAgICByZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAoY2hpcCwgbWVudGlvbilcbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBpc0VtcHR5ID0gc3RhdGUudGV4dC50cmltKCkgPT09ICcnXG4gICAgICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGlzRW1wdHkpXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0U2xhc2hDb21tYW5kOiAoY29tbWFuZDogU2xhc2hDb21tYW5kQ2hpcERhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlwID0gYnVpbGRTbGFzaENoaXBFbGVtZW50KGNvbW1hbmQpXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwKGNoaXAsIGNvbW1hbmQpXG4gICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2VyaWFsaXplKClcbiAgICAgICAgICBvbklucHV0Py4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAgfSxcbiAgICAgICAgICAgIHNsYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICAgIGhhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIFtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyRWRpdG9yRG9tLFxuICAgICAgICBzZXJpYWxpemUsXG4gICAgICAgIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgsXG4gICAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAsXG4gICAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCxcbiAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2tpbGxDaGlwLFxuICAgICAgICBvbklucHV0LFxuICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24sXG4gICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSxcbiAgICAgICAgZW1pdElucHV0U3RhdGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBlZGl0b3JSZWYsXG4gICAgICBdXG4gICAgKVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgICBpZiAoc2tpcE5leHRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZW1pdElucHV0U3RhdGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVBhc3RlID0gKGU6IENsaXBib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZmlsZXMgPSBmaWxlc0Zyb21EYXRhVHJhbnNmZXIoZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKGZpbGVzLmxlbmd0aCAmJiBvblBhc3RlRmlsZXMpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG9uUGFzdGVGaWxlcyhmaWxlcylcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJylcbiAgICAgIGlmIChmaWxlcy5sZW5ndGggJiYgb25QYXN0ZUZpbGVzICYmICF0ZXh0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVyblxuICAgICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpXG4gICAgICBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKVxuICAgICAgc2VsZWN0aW9uLmNvbGxhcHNlVG9FbmQoKVxuICAgICAgaGFuZGxlSW5wdXQoKVxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICBjb25zdCBwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSA9IGxvZ2ljYWxFbXB0eSAmJiBwbGFjZWhvbGRlclRydW5jYXRlZCAmJiB0cmltbWVkUGxhY2Vob2xkZXIgPyB0cmltbWVkUGxhY2Vob2xkZXIgOiAnJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxDb250ZXh0TWVudGlvbkNoaXBHbG9iYWxTdHlsZXMgLz5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3BsYWNlaG9sZGVyVG9vbHRpcFRpdGxlfT5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgIDxTQ01FRWRpdGFibGVcbiAgICAgICAgICAgICAgcmVmPXtlZGl0b3JSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAkbWF4SGVpZ2h0PXttYXhIZWlnaHR9XG4gICAgICAgICAgICAgIHN0eWxlPXttYXhIZWlnaHQgIT0gbnVsbCA/IHsgbWF4SGVpZ2h0IH0gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBkYXRhLWVtcHR5PXtTdHJpbmcobG9naWNhbEVtcHR5KX1cbiAgICAgICAgICAgICAgY29udGVudEVkaXRhYmxlPXshZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGRhdGEtZGlzYWJsZWQ9e1N0cmluZyghIWRpc2FibGVkKX1cbiAgICAgICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXG4gICAgICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICAgICAgYXJpYS1tdWx0aWxpbmU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgb25JbnB1dD17aGFuZGxlSW5wdXR9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgICBvblBhc3RlPXtoYW5kbGVQYXN0ZX1cbiAgICAgICAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbkNvbnRleHRNZW50aW9uRWRpdG9yLmRpc3BsYXlOYW1lID0gJ0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsU0FFRUEsVUFBVSxFQUVWQyxXQUFXLEVBQ1hDLG1CQUFtQixFQUNuQkMsZUFBZSxFQUNmQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxrQkFBa0IsUUFBUSxtQ0FBbUM7QUFFdEUsU0FBU0MsZ0JBQWdCLFFBQVEsdUJBQXVCO0FBQ3hELFNBQVNDLDhCQUE4QixRQUFRLGlEQUFpRDtBQUNoRyxTQUFTQyxxQkFBcUIsUUFBOEIscUJBQXFCO0FBQ2pGLFNBQVNDLHFCQUFxQixRQUFRLCtCQUErQjtBQUNyRSxTQUFTQyxZQUFZLFFBQVEsK0JBQStCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFF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
|