@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,420 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import styled, { css } from 'styled-components';
|
|
3
|
+
import { CONTEXT_MENTION_CHIP_CLASS } from '../types/contextMention';
|
|
4
|
+
import { MENTION_CHIP_COLORS, MENTION_CHIP_NON_TASK_HOVER_BG } from '../components/atoms/ContextMentionChip/ContextMentionChip.styles';
|
|
5
|
+
import { SlashCommandChip } from '../components/atoms/SlashCommandChip';
|
|
6
|
+
import { SCSlashChip } from '../components/atoms/SlashCommandChip/SlashCommandChip.styles';
|
|
7
|
+
import { SLASH_COMMAND_MARKER_REGEX } from './slashCommandMarker';
|
|
8
|
+
import { VIOLET_IA_COLORS } from '../styles/config';
|
|
9
|
+
import { SCTaskLink } from '../components/molecules/ChatAIMessages/newStyles';
|
|
10
|
+
import { getContextMentionIcon } from './contextMentionIcons';
|
|
11
|
+
import { normalizeContextMentionLabel } from './contextMentionLabel';
|
|
12
|
+
import { openTaskInCorPanel } from './openTaskInCorPanel';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Formato del marcador que viaja en el texto del mensaje:
|
|
16
|
+
* [[mention:<type>:<id>|<label>]]
|
|
17
|
+
*
|
|
18
|
+
* El editor lo emite cuando serializa el contenteditable, el backend lo
|
|
19
|
+
* persiste tal cual y al renderizar se transforma en un link markdown con
|
|
20
|
+
* un protocolo propio que `CustomLink` intercepta y dibuja como span
|
|
21
|
+
* estilado.
|
|
22
|
+
*
|
|
23
|
+
* Por separado, la metadata `context_message` lleva los valores limpios
|
|
24
|
+
* (id + name) para que el backend pueda interpretar las entidades sin
|
|
25
|
+
* tener que parsear el texto.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Label puede contener `]` (ej: "[Educate]Blog Post ..."), por eso
|
|
29
|
+
* se captura de forma lazy hasta el cierre real `]]`.
|
|
30
|
+
*/
|
|
31
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
32
|
+
export var MENTION_MARKER_REGEX = /\[\[mention:(client|project|task|user|mcp|skill):([^|\]]+)\|([\s\S]*?)\]\]/g;
|
|
33
|
+
export var MAIA_MENTION_PROTOCOL = 'maia-mention://';
|
|
34
|
+
var INCOMPLETE_MENTION_MARKER_REGEX = /\[\[mention:[\s\S]*$/;
|
|
35
|
+
var INCOMPLETE_SLASH_MARKER_REGEX = /\[\[slash_command:[^|\]]+\|([\s\S]*)$/;
|
|
36
|
+
var ALLOWED_TYPES = ['client', 'project', 'task', 'user', 'mcp', 'skill'];
|
|
37
|
+
var parseMentionProtocolHref = function parseMentionProtocolHref(href) {
|
|
38
|
+
var rest = href.slice(MAIA_MENTION_PROTOCOL.length);
|
|
39
|
+
var slashIdx = rest.indexOf('/');
|
|
40
|
+
var rawType = slashIdx >= 0 ? rest.slice(0, slashIdx) : rest;
|
|
41
|
+
var rawId = slashIdx >= 0 ? rest.slice(slashIdx + 1) : '';
|
|
42
|
+
var id = '';
|
|
43
|
+
try {
|
|
44
|
+
id = rawId ? decodeURIComponent(rawId) : '';
|
|
45
|
+
} catch (_unused) {
|
|
46
|
+
id = rawId;
|
|
47
|
+
}
|
|
48
|
+
var type = ALLOWED_TYPES.includes(rawType) ? rawType : 'user';
|
|
49
|
+
return {
|
|
50
|
+
type: type,
|
|
51
|
+
id: id
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/** Genera el marcador para un mention dado. Lo usa el editor al serializar. */
|
|
56
|
+
export var serializeMention = function serializeMention(mention) {
|
|
57
|
+
return "[[mention:".concat(mention.type, ":").concat(mention.id, "|").concat(mention.label, "]]");
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Convierte cada `[[mention:...]]` en un link markdown con protocolo propio
|
|
62
|
+
* para que Streamdown lo emita como `<a>` y `CustomLink` lo intercepte.
|
|
63
|
+
*/
|
|
64
|
+
export var transformMentionMarkers = function transformMentionMarkers(text) {
|
|
65
|
+
if (!text) return text;
|
|
66
|
+
return text.replace(MENTION_MARKER_REGEX, function (_m, type, id, label) {
|
|
67
|
+
var safeLabel = String(label).replace(/[\\\]]/g, '\\$&');
|
|
68
|
+
return "[".concat(safeLabel, "](").concat(MAIA_MENTION_PROTOCOL).concat(type, "/").concat(encodeURIComponent(String(id)), ")");
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
var mentionChildrenToLabel = function mentionChildrenToLabel(children) {
|
|
72
|
+
if (typeof children === 'string') return normalizeContextMentionLabel(children);
|
|
73
|
+
if (children == null || children === false) return '';
|
|
74
|
+
if (Array.isArray(children)) {
|
|
75
|
+
return normalizeContextMentionLabel(children.map(function (c) {
|
|
76
|
+
return typeof c === 'string' ? c : '';
|
|
77
|
+
}).join(''));
|
|
78
|
+
}
|
|
79
|
+
return normalizeContextMentionLabel(String(children));
|
|
80
|
+
};
|
|
81
|
+
var splitLabelFirstWord = function splitLabelFirstWord(label) {
|
|
82
|
+
var normalized = normalizeContextMentionLabel(label).trim();
|
|
83
|
+
if (!normalized) return {
|
|
84
|
+
firstWord: '',
|
|
85
|
+
rest: ''
|
|
86
|
+
};
|
|
87
|
+
var firstWhitespaceIdx = normalized.search(/\s/);
|
|
88
|
+
if (firstWhitespaceIdx < 0) return {
|
|
89
|
+
firstWord: normalized,
|
|
90
|
+
rest: ''
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
firstWord: normalized.slice(0, firstWhitespaceIdx),
|
|
94
|
+
rest: normalized.slice(firstWhitespaceIdx)
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/** Las skills se muestran como `#nombre`, con el mismo estilo que los slash commands. */
|
|
99
|
+
var formatSkillLabel = function formatSkillLabel(label) {
|
|
100
|
+
return "#".concat(label.trim().replace(/^(@\/|#)/, ''));
|
|
101
|
+
};
|
|
102
|
+
var SkillInlineChip = function SkillInlineChip(_ref) {
|
|
103
|
+
var label = _ref.label;
|
|
104
|
+
return /*#__PURE__*/_jsx(SCSlashChip, {
|
|
105
|
+
className: CONTEXT_MENTION_CHIP_CLASS,
|
|
106
|
+
"data-mention-type": "skill",
|
|
107
|
+
"data-mention-surface": "chat",
|
|
108
|
+
children: formatSkillLabel(label)
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
var INLINE_MENTION_HOVER_BG = {
|
|
112
|
+
project: VIOLET_IA_COLORS[100]
|
|
113
|
+
};
|
|
114
|
+
var inlineMentionHoverCss = function inlineMentionHoverCss(type, isClickable) {
|
|
115
|
+
var _INLINE_MENTION_HOVER;
|
|
116
|
+
if (type === 'skill') return css([""]);
|
|
117
|
+
var bg = (_INLINE_MENTION_HOVER = INLINE_MENTION_HOVER_BG[type]) !== null && _INLINE_MENTION_HOVER !== void 0 ? _INLINE_MENTION_HOVER : MENTION_CHIP_NON_TASK_HOVER_BG;
|
|
118
|
+
return css(["background:", ";opacity:", ";"], bg, isClickable ? 0.95 : 1);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/** Span inline estilado (menciones no-task en chat). */
|
|
122
|
+
var SCInlineMention = styled.span.withConfig({
|
|
123
|
+
displayName: "renderContextMentions__SCInlineMention",
|
|
124
|
+
componentId: "sc-f3uz3m-0"
|
|
125
|
+
})(["display:inline;padding:2px 4px;margin:0 1px;border-radius:4px;font-family:var(--cor-typography-font-family,'Work Sans');font-weight:500;font-size:inherit;line-height:inherit;background:", ";color:", ";white-space:normal;overflow-wrap:break-word;word-break:break-word;cursor:", ";text-decoration:none;box-sizing:border-box;&:hover{", "}"], function (_ref2) {
|
|
126
|
+
var _MENTION_CHIP_COLORS$;
|
|
127
|
+
var $type = _ref2.$type;
|
|
128
|
+
return ((_MENTION_CHIP_COLORS$ = MENTION_CHIP_COLORS[$type]) !== null && _MENTION_CHIP_COLORS$ !== void 0 ? _MENTION_CHIP_COLORS$ : MENTION_CHIP_COLORS.user).bg;
|
|
129
|
+
}, function (_ref3) {
|
|
130
|
+
var _MENTION_CHIP_COLORS$2;
|
|
131
|
+
var $type = _ref3.$type;
|
|
132
|
+
return ((_MENTION_CHIP_COLORS$2 = MENTION_CHIP_COLORS[$type]) !== null && _MENTION_CHIP_COLORS$2 !== void 0 ? _MENTION_CHIP_COLORS$2 : MENTION_CHIP_COLORS.user).fg;
|
|
133
|
+
}, function (_ref4) {
|
|
134
|
+
var $isClickable = _ref4.$isClickable;
|
|
135
|
+
return $isClickable ? 'pointer' : 'default';
|
|
136
|
+
}, function (_ref5) {
|
|
137
|
+
var $type = _ref5.$type,
|
|
138
|
+
$isClickable = _ref5.$isClickable;
|
|
139
|
+
return inlineMentionHoverCss($type, $isClickable);
|
|
140
|
+
});
|
|
141
|
+
var SCInlineMentionIcon = styled.span.withConfig({
|
|
142
|
+
displayName: "renderContextMentions__SCInlineMentionIcon",
|
|
143
|
+
componentId: "sc-f3uz3m-1"
|
|
144
|
+
})(["display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;margin-right:2px;width:", ";height:", ";"], function (_ref6) {
|
|
145
|
+
var $task = _ref6.$task;
|
|
146
|
+
return $task ? '16px' : '14px';
|
|
147
|
+
}, function (_ref7) {
|
|
148
|
+
var $task = _ref7.$task;
|
|
149
|
+
return $task ? '16px' : '14px';
|
|
150
|
+
});
|
|
151
|
+
var SCInlineMentionIconRow = styled.span.withConfig({
|
|
152
|
+
displayName: "renderContextMentions__SCInlineMentionIconRow",
|
|
153
|
+
componentId: "sc-f3uz3m-2"
|
|
154
|
+
})(["display:inline-flex;align-items:center;vertical-align:middle;white-space:nowrap;max-width:100%;"]);
|
|
155
|
+
var SCInlineMentionWord = styled.span.withConfig({
|
|
156
|
+
displayName: "renderContextMentions__SCInlineMentionWord",
|
|
157
|
+
componentId: "sc-f3uz3m-3"
|
|
158
|
+
})(["white-space:nowrap;vertical-align:middle;"]);
|
|
159
|
+
var SCInlineMentionRest = styled.span.withConfig({
|
|
160
|
+
displayName: "renderContextMentions__SCInlineMentionRest",
|
|
161
|
+
componentId: "sc-f3uz3m-4"
|
|
162
|
+
})(["vertical-align:middle;"]);
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Si el href corresponde al protocolo de mention, devuelve un nodo estilado por tipo.
|
|
166
|
+
* Las tareas usan `<a>` como los enlaces de tarea del agente (`.has-task-links`).
|
|
167
|
+
*/
|
|
168
|
+
export var renderMentionLink = function renderMentionLink(href, children) {
|
|
169
|
+
if (!href || !href.startsWith(MAIA_MENTION_PROTOCOL)) return null;
|
|
170
|
+
var _parseMentionProtocol = parseMentionProtocolHref(href),
|
|
171
|
+
type = _parseMentionProtocol.type,
|
|
172
|
+
id = _parseMentionProtocol.id;
|
|
173
|
+
var label = mentionChildrenToLabel(children);
|
|
174
|
+
if (type === 'skill') return /*#__PURE__*/_jsx(SkillInlineChip, {
|
|
175
|
+
label: label
|
|
176
|
+
});
|
|
177
|
+
var isTask = type === 'task';
|
|
178
|
+
var iconSize = isTask ? 16 : 14;
|
|
179
|
+
var taskUrl = "/tasks/".concat(id, "/detail");
|
|
180
|
+
var handleTaskClick = function handleTaskClick(e) {
|
|
181
|
+
if (e.metaKey || e.ctrlKey) return;
|
|
182
|
+
e.preventDefault();
|
|
183
|
+
e.stopPropagation();
|
|
184
|
+
openTaskInCorPanel(id, 'detail');
|
|
185
|
+
};
|
|
186
|
+
var handleTaskKeyDown = function handleTaskKeyDown(e) {
|
|
187
|
+
if (e.key !== 'Enter' && e.key !== ' ') return;
|
|
188
|
+
e.preventDefault();
|
|
189
|
+
openTaskInCorPanel(id, 'detail');
|
|
190
|
+
};
|
|
191
|
+
if (isTask) {
|
|
192
|
+
return /*#__PURE__*/_jsx(SCTaskLink, {
|
|
193
|
+
href: taskUrl,
|
|
194
|
+
className: CONTEXT_MENTION_CHIP_CLASS,
|
|
195
|
+
"data-cor-link": "task",
|
|
196
|
+
"data-mention-type": type,
|
|
197
|
+
"data-mention-surface": "chat",
|
|
198
|
+
onClick: handleTaskClick,
|
|
199
|
+
onKeyDown: handleTaskKeyDown,
|
|
200
|
+
children: label
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
var isProject = type === 'project';
|
|
204
|
+
var projectUrl = isProject ? "/projects/".concat(id, "/dashboard") : null;
|
|
205
|
+
var showIcon = !isProject;
|
|
206
|
+
var _splitLabelFirstWord = splitLabelFirstWord(label),
|
|
207
|
+
firstWord = _splitLabelFirstWord.firstWord,
|
|
208
|
+
rest = _splitLabelFirstWord.rest;
|
|
209
|
+
var handleProjectClick = function handleProjectClick(e) {
|
|
210
|
+
if (!projectUrl) return;
|
|
211
|
+
e.preventDefault();
|
|
212
|
+
e.stopPropagation();
|
|
213
|
+
window.open(projectUrl, '_blank');
|
|
214
|
+
};
|
|
215
|
+
return /*#__PURE__*/_jsxs(SCInlineMention, {
|
|
216
|
+
$type: type,
|
|
217
|
+
$isClickable: isProject,
|
|
218
|
+
className: CONTEXT_MENTION_CHIP_CLASS,
|
|
219
|
+
"data-mention-type": type,
|
|
220
|
+
"data-mention-surface": "chat",
|
|
221
|
+
onClick: isProject ? handleProjectClick : undefined,
|
|
222
|
+
role: isProject ? 'button' : undefined,
|
|
223
|
+
tabIndex: isProject ? 0 : undefined,
|
|
224
|
+
children: [showIcon ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
225
|
+
children: [/*#__PURE__*/_jsxs(SCInlineMentionIconRow, {
|
|
226
|
+
children: [/*#__PURE__*/_jsx(SCInlineMentionIcon, {
|
|
227
|
+
$task: isTask,
|
|
228
|
+
children: getContextMentionIcon(type, MENTION_CHIP_COLORS[type].fg, id, iconSize)
|
|
229
|
+
}), /*#__PURE__*/_jsx(SCInlineMentionWord, {
|
|
230
|
+
children: firstWord
|
|
231
|
+
})]
|
|
232
|
+
}), rest ? /*#__PURE__*/_jsx(SCInlineMentionRest, {
|
|
233
|
+
children: rest
|
|
234
|
+
}) : null]
|
|
235
|
+
}) : null, !showIcon ? label : null]
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
/** Quita los markers del texto, dejando solo `label`. Útil para fallback plano. */
|
|
240
|
+
export var stripMentionMarkers = function stripMentionMarkers(text) {
|
|
241
|
+
return text.replace(MENTION_MARKER_REGEX, function (_m, _type, _id, label) {
|
|
242
|
+
return normalizeContextMentionLabel(String(label));
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Títulos de conversación (p. ej. `last_question` derivado del primer mensaje) pueden
|
|
248
|
+
* incluir el texto serializado `[[mention:type:id|label]]`. Para sidebar y listados,
|
|
249
|
+
* reemplaza cada bloque por `label` en texto plano, sin el marcador crudo.
|
|
250
|
+
*/
|
|
251
|
+
export var formatChatListTitleMentions = function formatChatListTitleMentions(text) {
|
|
252
|
+
if (text == null || text === '') return text !== null && text !== void 0 ? text : '';
|
|
253
|
+
var withoutMentions = text.replace(MENTION_MARKER_REGEX, function (_m, _type, _id, label) {
|
|
254
|
+
return normalizeContextMentionLabel(String(label).trim());
|
|
255
|
+
});
|
|
256
|
+
var slashRegex = new RegExp(SLASH_COMMAND_MARKER_REGEX.source, 'g');
|
|
257
|
+
var withoutSlash = withoutMentions.replace(slashRegex, function (_m, _id, label) {
|
|
258
|
+
return "/".concat(String(label).trim());
|
|
259
|
+
});
|
|
260
|
+
var withoutIncompleteSlash = withoutSlash.replace(INCOMPLETE_SLASH_MARKER_REGEX, function (_m, label) {
|
|
261
|
+
return "/".concat(String(label).trim());
|
|
262
|
+
});
|
|
263
|
+
return withoutIncompleteSlash.replace(INCOMPLETE_MENTION_MARKER_REGEX, '').trim();
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
/** Genera la URL de navegación para un mention según su tipo. */
|
|
267
|
+
var getMentionUrl = function getMentionUrl(type, id) {
|
|
268
|
+
switch (type) {
|
|
269
|
+
case 'client':
|
|
270
|
+
return "/clients/".concat(id);
|
|
271
|
+
case 'project':
|
|
272
|
+
return "/projects/".concat(id, "/dashboard");
|
|
273
|
+
case 'task':
|
|
274
|
+
return "/tasks/".concat(id, "/detail");
|
|
275
|
+
case 'user':
|
|
276
|
+
return null;
|
|
277
|
+
// Los users no son clickeables
|
|
278
|
+
case 'mcp':
|
|
279
|
+
return null;
|
|
280
|
+
default:
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
var MentionChip = function MentionChip(_ref8) {
|
|
285
|
+
var type = _ref8.type,
|
|
286
|
+
id = _ref8.id,
|
|
287
|
+
label = _ref8.label;
|
|
288
|
+
var normalizedLabel = normalizeContextMentionLabel(label);
|
|
289
|
+
if (type === 'skill') return /*#__PURE__*/_jsx(SkillInlineChip, {
|
|
290
|
+
label: normalizedLabel
|
|
291
|
+
});
|
|
292
|
+
var url = getMentionUrl(type, id);
|
|
293
|
+
var isClickable = !!url;
|
|
294
|
+
var isTask = type === 'task';
|
|
295
|
+
var isProject = type === 'project';
|
|
296
|
+
var showIcon = !isProject;
|
|
297
|
+
var iconSize = isTask ? 16 : 14;
|
|
298
|
+
var _splitLabelFirstWord2 = splitLabelFirstWord(normalizedLabel),
|
|
299
|
+
firstWord = _splitLabelFirstWord2.firstWord,
|
|
300
|
+
rest = _splitLabelFirstWord2.rest;
|
|
301
|
+
var handleClick = function handleClick(e) {
|
|
302
|
+
if (!isClickable || !url) return;
|
|
303
|
+
if (type === 'task') {
|
|
304
|
+
if (e.metaKey || e.ctrlKey) return;
|
|
305
|
+
e.preventDefault();
|
|
306
|
+
e.stopPropagation();
|
|
307
|
+
openTaskInCorPanel(id, 'detail');
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
e.preventDefault();
|
|
311
|
+
window.open(url, '_blank');
|
|
312
|
+
};
|
|
313
|
+
var handleKeyDown = function handleKeyDown(e) {
|
|
314
|
+
if (!isClickable || type !== 'task') return;
|
|
315
|
+
if (e.key !== 'Enter' && e.key !== ' ') return;
|
|
316
|
+
e.preventDefault();
|
|
317
|
+
openTaskInCorPanel(id, 'detail');
|
|
318
|
+
};
|
|
319
|
+
if (type === 'task') {
|
|
320
|
+
return /*#__PURE__*/_jsx(SCTaskLink, {
|
|
321
|
+
href: url !== null && url !== void 0 ? url : '#',
|
|
322
|
+
className: CONTEXT_MENTION_CHIP_CLASS,
|
|
323
|
+
"data-cor-link": "task",
|
|
324
|
+
"data-mention-type": "task",
|
|
325
|
+
"data-mention-surface": "chat",
|
|
326
|
+
onClick: handleClick,
|
|
327
|
+
onKeyDown: handleKeyDown,
|
|
328
|
+
children: normalizedLabel
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
return /*#__PURE__*/_jsxs(SCInlineMention, {
|
|
332
|
+
$type: type,
|
|
333
|
+
$isClickable: isClickable,
|
|
334
|
+
className: CONTEXT_MENTION_CHIP_CLASS,
|
|
335
|
+
"data-mention-type": type,
|
|
336
|
+
"data-mention-surface": "chat",
|
|
337
|
+
onClick: isClickable ? handleClick : undefined,
|
|
338
|
+
role: isClickable ? 'button' : undefined,
|
|
339
|
+
tabIndex: isClickable ? 0 : undefined,
|
|
340
|
+
children: [showIcon ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
341
|
+
children: [/*#__PURE__*/_jsxs(SCInlineMentionIconRow, {
|
|
342
|
+
children: [/*#__PURE__*/_jsx(SCInlineMentionIcon, {
|
|
343
|
+
$task: isTask,
|
|
344
|
+
children: getContextMentionIcon(type, MENTION_CHIP_COLORS[type].fg, id, iconSize)
|
|
345
|
+
}), /*#__PURE__*/_jsx(SCInlineMentionWord, {
|
|
346
|
+
children: firstWord
|
|
347
|
+
})]
|
|
348
|
+
}), rest ? /*#__PURE__*/_jsx(SCInlineMentionRest, {
|
|
349
|
+
children: rest
|
|
350
|
+
}) : null]
|
|
351
|
+
}) : null, !showIcon ? normalizedLabel : null]
|
|
352
|
+
});
|
|
353
|
+
};
|
|
354
|
+
export var hasInlineMarkers = function hasInlineMarkers(text) {
|
|
355
|
+
if (!text) return false;
|
|
356
|
+
return text.includes('[[mention:') || text.includes('[[slash_command:');
|
|
357
|
+
};
|
|
358
|
+
var collectInlineMarkers = function collectInlineMarkers(text) {
|
|
359
|
+
var markers = [];
|
|
360
|
+
MENTION_MARKER_REGEX.lastIndex = 0;
|
|
361
|
+
var m = MENTION_MARKER_REGEX.exec(text);
|
|
362
|
+
while (m) {
|
|
363
|
+
var _m2 = m,
|
|
364
|
+
_m3 = _slicedToArray(_m2, 4),
|
|
365
|
+
rawType = _m3[1],
|
|
366
|
+
id = _m3[2],
|
|
367
|
+
label = _m3[3];
|
|
368
|
+
var type = ALLOWED_TYPES.includes(rawType) ? rawType : 'user';
|
|
369
|
+
markers.push({
|
|
370
|
+
kind: 'mention',
|
|
371
|
+
index: m.index,
|
|
372
|
+
length: m[0].length,
|
|
373
|
+
type: type,
|
|
374
|
+
id: id,
|
|
375
|
+
label: label
|
|
376
|
+
});
|
|
377
|
+
m = MENTION_MARKER_REGEX.exec(text);
|
|
378
|
+
}
|
|
379
|
+
var slashRegex = new RegExp(SLASH_COMMAND_MARKER_REGEX.source, 'g');
|
|
380
|
+
var s = slashRegex.exec(text);
|
|
381
|
+
while (s) {
|
|
382
|
+
markers.push({
|
|
383
|
+
kind: 'slash',
|
|
384
|
+
index: s.index,
|
|
385
|
+
length: s[0].length,
|
|
386
|
+
id: s[1],
|
|
387
|
+
label: s[2]
|
|
388
|
+
});
|
|
389
|
+
s = slashRegex.exec(text);
|
|
390
|
+
}
|
|
391
|
+
return markers.sort(function (a, b) {
|
|
392
|
+
return a.index - b.index;
|
|
393
|
+
});
|
|
394
|
+
};
|
|
395
|
+
export var renderTextWithMentions = function renderTextWithMentions(text) {
|
|
396
|
+
if (!text) return [text];
|
|
397
|
+
var markers = collectInlineMarkers(text);
|
|
398
|
+
if (markers.length === 0) return [text];
|
|
399
|
+
var out = [];
|
|
400
|
+
var lastIdx = 0;
|
|
401
|
+
markers.forEach(function (marker) {
|
|
402
|
+
if (marker.index > lastIdx) out.push(text.slice(lastIdx, marker.index));
|
|
403
|
+
if (marker.kind === 'mention') {
|
|
404
|
+
out.push(/*#__PURE__*/_jsx(MentionChip, {
|
|
405
|
+
type: marker.type,
|
|
406
|
+
id: marker.id,
|
|
407
|
+
label: marker.label
|
|
408
|
+
}, "mention-".concat(marker.index, "-").concat(marker.type, "-").concat(marker.id)));
|
|
409
|
+
} else {
|
|
410
|
+
out.push(/*#__PURE__*/_jsx(SlashCommandChip, {
|
|
411
|
+
label: marker.label,
|
|
412
|
+
inline: false
|
|
413
|
+
}, "slash-".concat(marker.index, "-").concat(marker.id)));
|
|
414
|
+
}
|
|
415
|
+
lastIdx = marker.index + marker.length;
|
|
416
|
+
});
|
|
417
|
+
if (lastIdx < text.length) out.push(text.slice(lastIdx));
|
|
418
|
+
return out;
|
|
419
|
+
};
|
|
420
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJjc3MiLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsIk1FTlRJT05fQ0hJUF9DT0xPUlMiLCJNRU5USU9OX0NISVBfTk9OX1RBU0tfSE9WRVJfQkciLCJTbGFzaENvbW1hbmRDaGlwIiwiU0NTbGFzaENoaXAiLCJTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCIsIlZJT0xFVF9JQV9DT0xPUlMiLCJTQ1Rhc2tMaW5rIiwiZ2V0Q29udGV4dE1lbnRpb25JY29uIiwibm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCIsIm9wZW5UYXNrSW5Db3JQYW5lbCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIk1FTlRJT05fTUFSS0VSX1JFR0VYIiwiTUFJQV9NRU5USU9OX1BST1RPQ09MIiwiSU5DT01QTEVURV9NRU5USU9OX01BUktFUl9SRUdFWCIsIklOQ09NUExFVEVfU0xBU0hfTUFSS0VSX1JFR0VYIiwiQUxMT1dFRF9UWVBFUyIsInBhcnNlTWVudGlvblByb3RvY29sSHJlZiIsImhyZWYiLCJyZXN0Iiwic2xpY2UiLCJsZW5ndGgiLCJzbGFzaElkeCIsImluZGV4T2YiLCJyYXdUeXBlIiwicmF3SWQiLCJpZCIsImRlY29kZVVSSUNvbXBvbmVudCIsIl91bnVzZWQiLCJ0eXBlIiwiaW5jbHVkZXMiLCJzZXJpYWxpemVNZW50aW9uIiwibWVudGlvbiIsImNvbmNhdCIsImxhYmVsIiwidHJhbnNmb3JtTWVudGlvbk1hcmtlcnMiLCJ0ZXh0IiwicmVwbGFjZSIsIl9tIiwic2FmZUxhYmVsIiwiU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWVudGlvbkNoaWxkcmVuVG9MYWJlbCIsImNoaWxkcmVuIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiYyIsImpvaW4iLCJzcGxpdExhYmVsRmlyc3RXb3JkIiwibm9ybWFsaXplZCIsInRyaW0iLCJmaXJzdFdvcmQiLCJmaXJzdFdoaXRlc3BhY2VJZHgiLCJzZWFyY2giLCJmb3JtYXRTa2lsbExhYmVsIiwiU2tpbGxJbmxpbmVDaGlwIiwiX3JlZiIsImNsYXNzTmFtZSIsIklOTElORV9NRU5USU9OX0hPVkVSX0JHIiwicHJvamVjdCIsImlubGluZU1lbnRpb25Ib3ZlckNzcyIsImlzQ2xpY2thYmxlIiwiX0lOTElORV9NRU5USU9OX0hPVkVSIiwiYmciLCJTQ0lubGluZU1lbnRpb24iLCJzcGFuIiwid2l0aENvbmZpZyIsImRpc3BsYXlOYW1lIiwiY29tcG9uZW50SWQiLCJfcmVmMiIsIl9NRU5USU9OX0NISVBfQ09MT1JTJCIsIiR0eXBlIiwidXNlciIsIl9yZWYzIiwiX01FTlRJT05fQ0hJUF9DT0xPUlMkMiIsImZnIiwiX3JlZjQiLCIkaXNDbGlja2FibGUiLCJfcmVmNSIsIlNDSW5saW5lTWVudGlvbkljb24iLCJfcmVmNiIsIiR0YXNrIiwiX3JlZjciLCJTQ0lubGluZU1lbnRpb25JY29uUm93IiwiU0NJbmxpbmVNZW50aW9uV29yZCIsIlNDSW5saW5lTWVudGlvblJlc3QiLCJyZW5kZXJNZW50aW9uTGluayIsInN0YXJ0c1dpdGgiLCJfcGFyc2VNZW50aW9uUHJvdG9jb2wiLCJpc1Rhc2siLCJpY29uU2l6ZSIsInRhc2tVcmwiLCJoYW5kbGVUYXNrQ2xpY2siLCJlIiwibWV0YUtleSIsImN0cmxLZXkiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRhc2tLZXlEb3duIiwia2V5Iiwib25DbGljayIsIm9uS2V5RG93biIsImlzUHJvamVjdCIsInByb2plY3RVcmwiLCJzaG93SWNvbiIsIl9zcGxpdExhYmVsRmlyc3RXb3JkIiwiaGFuZGxlUHJvamVjdENsaWNrIiwid2luZG93Iiwib3BlbiIsInVuZGVmaW5lZCIsInJvbGUiLCJ0YWJJbmRleCIsInN0cmlwTWVudGlvbk1hcmtlcnMiLCJfdHlwZSIsIl9pZCIsImZvcm1hdENoYXRMaXN0VGl0bGVNZW50aW9ucyIsIndpdGhvdXRNZW50aW9ucyIsInNsYXNoUmVnZXgiLCJSZWdFeHAiLCJzb3VyY2UiLCJ3aXRob3V0U2xhc2giLCJ3aXRob3V0SW5jb21wbGV0ZVNsYXNoIiwiZ2V0TWVudGlvblVybCIsIk1lbnRpb25DaGlwIiwiX3JlZjgiLCJub3JtYWxpemVkTGFiZWwiLCJ1cmwiLCJfc3BsaXRMYWJlbEZpcnN0V29yZDIiLCJoYW5kbGVDbGljayIsImhhbmRsZUtleURvd24iLCJoYXNJbmxpbmVNYXJrZXJzIiwiY29sbGVjdElubGluZU1hcmtlcnMiLCJtYXJrZXJzIiwibGFzdEluZGV4IiwibSIsImV4ZWMiLCJfbTIiLCJfbTMiLCJfc2xpY2VkVG9BcnJheSIsInB1c2giLCJraW5kIiwiaW5kZXgiLCJzIiwic29ydCIsImEiLCJiIiwicmVuZGVyVGV4dFdpdGhNZW50aW9ucyIsIm91dCIsImxhc3RJZHgiLCJmb3JFYWNoIiwibWFya2VyIiwiaW5saW5lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBSZWFjdEVsZW1lbnQsIE1vdXNlRXZlbnQsIEtleWJvYXJkRXZlbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBzdHlsZWQsIHsgY3NzIH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb24sIENPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQge1xuICBNRU5USU9OX0NISVBfQ09MT1JTLFxuICBNRU5USU9OX0NISVBfTk9OX1RBU0tfSE9WRVJfQkcsXG59IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25DaGlwL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBTbGFzaENvbW1hbmRDaGlwIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9TbGFzaENvbW1hbmRDaGlwJ1xuaW1wb3J0IHsgU0NTbGFzaENoaXAgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL1NsYXNoQ29tbWFuZENoaXAvU2xhc2hDb21tYW5kQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCB9IGZyb20gJy4vc2xhc2hDb21tYW5kTWFya2VyJ1xuaW1wb3J0IHsgVklPTEVUX0lBX0NPTE9SUyB9IGZyb20gJy4uL3N0eWxlcy9jb25maWcnXG5pbXBvcnQgeyBTQ1Rhc2tMaW5rIH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvbmV3U3R5bGVzJ1xuaW1wb3J0IHsgZ2V0Q29udGV4dE1lbnRpb25JY29uIH0gZnJvbSAnLi9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCB9IGZyb20gJy4vY29udGV4dE1lbnRpb25MYWJlbCdcbmltcG9ydCB7IG9wZW5UYXNrSW5Db3JQYW5lbCB9IGZyb20gJy4vb3BlblRhc2tJbkNvclBhbmVsJ1xuXG4vKipcbiAqIEZvcm1hdG8gZGVsIG1hcmNhZG9yIHF1ZSB2aWFqYSBlbiBlbCB0ZXh0byBkZWwgbWVuc2FqZTpcbiAqICAgW1ttZW50aW9uOjx0eXBlPjo8aWQ+fDxsYWJlbD5dXVxuICpcbiAqIEVsIGVkaXRvciBsbyBlbWl0ZSBjdWFuZG8gc2VyaWFsaXphIGVsIGNvbnRlbnRlZGl0YWJsZSwgZWwgYmFja2VuZCBsb1xuICogcGVyc2lzdGUgdGFsIGN1YWwgeSBhbCByZW5kZXJpemFyIHNlIHRyYW5zZm9ybWEgZW4gdW4gbGluayBtYXJrZG93biBjb25cbiAqIHVuIHByb3RvY29sbyBwcm9waW8gcXVlIGBDdXN0b21MaW5rYCBpbnRlcmNlcHRhIHkgZGlidWphIGNvbW8gc3BhblxuICogZXN0aWxhZG8uXG4gKlxuICogUG9yIHNlcGFyYWRvLCBsYSBtZXRhZGF0YSBgY29udGV4dF9tZXNzYWdlYCBsbGV2YSBsb3MgdmFsb3JlcyBsaW1waW9zXG4gKiAoaWQgKyBuYW1lKSBwYXJhIHF1ZSBlbCBiYWNrZW5kIHB1ZWRhIGludGVycHJldGFyIGxhcyBlbnRpZGFkZXMgc2luXG4gKiB0ZW5lciBxdWUgcGFyc2VhciBlbCB0ZXh0by5cbiAqL1xuLyoqXG4gKiBMYWJlbCBwdWVkZSBjb250ZW5lciBgXWAgKGVqOiBcIltFZHVjYXRlXUJsb2cgUG9zdCAuLi5cIiksIHBvciBlc29cbiAqIHNlIGNhcHR1cmEgZGUgZm9ybWEgbGF6eSBoYXN0YSBlbCBjaWVycmUgcmVhbCBgXV1gLlxuICovXG5leHBvcnQgY29uc3QgTUVOVElPTl9NQVJLRVJfUkVHRVggPSAvXFxbXFxbbWVudGlvbjooY2xpZW50fHByb2plY3R8dGFza3x1c2VyfG1jcHxza2lsbCk6KFtefFxcXV0rKVxcfChbXFxzXFxTXSo/KVxcXVxcXS9nXG5leHBvcnQgY29uc3QgTUFJQV9NRU5USU9OX1BST1RPQ09MID0gJ21haWEtbWVudGlvbjovLydcbmNvbnN0IElOQ09NUExFVEVfTUVOVElPTl9NQVJLRVJfUkVHRVggPSAvXFxbXFxbbWVudGlvbjpbXFxzXFxTXSokL1xuY29uc3QgSU5DT01QTEVURV9TTEFTSF9NQVJLRVJfUkVHRVggPSAvXFxbXFxbc2xhc2hfY29tbWFuZDpbXnxcXF1dK1xcfChbXFxzXFxTXSopJC9cblxuY29uc3QgQUxMT1dFRF9UWVBFUzogQ29udGV4dEVudGl0eVR5cGVbXSA9IFsnY2xpZW50JywgJ3Byb2plY3QnLCAndGFzaycsICd1c2VyJywgJ21jcCcsICdza2lsbCddXG5cbmNvbnN0IHBhcnNlTWVudGlvblByb3RvY29sSHJlZiA9IChocmVmOiBzdHJpbmcpOiB7IHR5cGU6IENvbnRleHRFbnRpdHlUeXBlOyBpZDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCByZXN0ID0gaHJlZi5zbGljZShNQUlBX01FTlRJT05fUFJPVE9DT0wubGVuZ3RoKVxuICBjb25zdCBzbGFzaElkeCA9IHJlc3QuaW5kZXhPZignLycpXG4gIGNvbnN0IHJhd1R5cGUgPSBzbGFzaElkeCA+PSAwID8gcmVzdC5zbGljZSgwLCBzbGFzaElkeCkgOiByZXN0XG4gIGNvbnN0IHJhd0lkID0gc2xhc2hJZHggPj0gMCA/IHJlc3Quc2xpY2Uoc2xhc2hJZHggKyAxKSA6ICcnXG4gIGxldCBpZCA9ICcnXG4gIHRyeSB7XG4gICAgaWQgPSByYXdJZCA/IGRlY29kZVVSSUNvbXBvbmVudChyYXdJZCkgOiAnJ1xuICB9IGNhdGNoIHtcbiAgICBpZCA9IHJhd0lkXG4gIH1cbiAgY29uc3QgdHlwZSA9IEFMTE9XRURfVFlQRVMuaW5jbHVkZXMocmF3VHlwZSBhcyBDb250ZXh0RW50aXR5VHlwZSkgPyAocmF3VHlwZSBhcyBDb250ZXh0RW50aXR5VHlwZSkgOiAndXNlcidcbiAgcmV0dXJuIHsgdHlwZSwgaWQgfVxufVxuXG4vKiogR2VuZXJhIGVsIG1hcmNhZG9yIHBhcmEgdW4gbWVudGlvbiBkYWRvLiBMbyB1c2EgZWwgZWRpdG9yIGFsIHNlcmlhbGl6YXIuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplTWVudGlvbiA9IChtZW50aW9uOiBDb250ZXh0TWVudGlvbik6IHN0cmluZyA9PlxuICBgW1ttZW50aW9uOiR7bWVudGlvbi50eXBlfToke21lbnRpb24uaWR9fCR7bWVudGlvbi5sYWJlbH1dXWBcblxuLyoqXG4gKiBDb252aWVydGUgY2FkYSBgW1ttZW50aW9uOi4uLl1dYCBlbiB1biBsaW5rIG1hcmtkb3duIGNvbiBwcm90b2NvbG8gcHJvcGlvXG4gKiBwYXJhIHF1ZSBTdHJlYW1kb3duIGxvIGVtaXRhIGNvbW8gYDxhPmAgeSBgQ3VzdG9tTGlua2AgbG8gaW50ZXJjZXB0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU1lbnRpb25NYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIHRleHRcbiAgcmV0dXJuIHRleHQucmVwbGFjZShNRU5USU9OX01BUktFUl9SRUdFWCwgKF9tLCB0eXBlLCBpZCwgbGFiZWwpID0+IHtcbiAgICBjb25zdCBzYWZlTGFiZWwgPSBTdHJpbmcobGFiZWwpLnJlcGxhY2UoL1tcXFxcXFxdXS9nLCAnXFxcXCQmJylcbiAgICByZXR1cm4gYFske3NhZmVMYWJlbH1dKCR7TUFJQV9NRU5USU9OX1BST1RPQ09MfSR7dHlwZX0vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkKSl9KWBcbiAgfSlcbn1cblxuY29uc3QgbWVudGlvbkNoaWxkcmVuVG9MYWJlbCA9IChjaGlsZHJlbjogUmVhY3ROb2RlKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycpIHJldHVybiBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKGNoaWxkcmVuKVxuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCB8fCBjaGlsZHJlbiA9PT0gZmFsc2UpIHJldHVybiAnJ1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChjaGlsZHJlbi5tYXAoYyA9PiAodHlwZW9mIGMgPT09ICdzdHJpbmcnID8gYyA6ICcnKSkuam9pbignJykpXG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwoU3RyaW5nKGNoaWxkcmVuKSlcbn1cblxuY29uc3Qgc3BsaXRMYWJlbEZpcnN0V29yZCA9IChsYWJlbDogc3RyaW5nKTogeyBmaXJzdFdvcmQ6IHN0cmluZzsgcmVzdDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChsYWJlbCkudHJpbSgpXG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIHsgZmlyc3RXb3JkOiAnJywgcmVzdDogJycgfVxuICBjb25zdCBmaXJzdFdoaXRlc3BhY2VJZHggPSBub3JtYWxpemVkLnNlYXJjaCgvXFxzLylcbiAgaWYgKGZpcnN0V2hpdGVzcGFjZUlkeCA8IDApIHJldHVybiB7IGZpcnN0V29yZDogbm9ybWFsaXplZCwgcmVzdDogJycgfVxuICByZXR1cm4ge1xuICAgIGZpcnN0V29yZDogbm9ybWFsaXplZC5zbGljZSgwLCBmaXJzdFdoaXRlc3BhY2VJZHgpLFxuICAgIHJlc3Q6IG5vcm1hbGl6ZWQuc2xpY2UoZmlyc3RXaGl0ZXNwYWNlSWR4KSxcbiAgfVxufVxuXG4vKiogTGFzIHNraWxscyBzZSBtdWVzdHJhbiBjb21vIGAjbm9tYnJlYCwgY29uIGVsIG1pc21vIGVzdGlsbyBxdWUgbG9zIHNsYXNoIGNvbW1hbmRzLiAqL1xuY29uc3QgZm9ybWF0U2tpbGxMYWJlbCA9IChsYWJlbDogc3RyaW5nKTogc3RyaW5nID0+IGAjJHtsYWJlbC50cmltKCkucmVwbGFjZSgvXihAXFwvfCMpLywgJycpfWBcblxuY29uc3QgU2tpbGxJbmxpbmVDaGlwID0gKHsgbGFiZWwgfTogeyBsYWJlbDogc3RyaW5nIH0pOiBSZWFjdEVsZW1lbnQgPT4gKFxuICA8U0NTbGFzaENoaXAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU30gZGF0YS1tZW50aW9uLXR5cGU9XCJza2lsbFwiIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiPlxuICAgIHtmb3JtYXRTa2lsbExhYmVsKGxhYmVsKX1cbiAgPC9TQ1NsYXNoQ2hpcD5cbilcblxuY29uc3QgSU5MSU5FX01FTlRJT05fSE9WRVJfQkc6IFBhcnRpYWw8UmVjb3JkPENvbnRleHRFbnRpdHlUeXBlLCBzdHJpbmc+PiA9IHtcbiAgcHJvamVjdDogVklPTEVUX0lBX0NPTE9SU1sxMDBdLFxufVxuXG5jb25zdCBpbmxpbmVNZW50aW9uSG92ZXJDc3MgPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIGlzQ2xpY2thYmxlPzogYm9vbGVhbikgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3NraWxsJykgcmV0dXJuIGNzc2BgXG4gIGNvbnN0IGJnID0gSU5MSU5FX01FTlRJT05fSE9WRVJfQkdbdHlwZV0gPz8gTUVOVElPTl9DSElQX05PTl9UQVNLX0hPVkVSX0JHXG4gIHJldHVybiBjc3NgXG4gICAgYmFja2dyb3VuZDogJHtiZ307XG4gICAgb3BhY2l0eTogJHtpc0NsaWNrYWJsZSA/IDAuOTUgOiAxfTtcbiAgYFxufVxuXG4vKiogU3BhbiBpbmxpbmUgZXN0aWxhZG8gKG1lbmNpb25lcyBuby10YXNrIGVuIGNoYXQpLiAqL1xuY29uc3QgU0NJbmxpbmVNZW50aW9uID0gc3R5bGVkLnNwYW48eyAkdHlwZTogQ29udGV4dEVudGl0eVR5cGU7ICRpc0NsaWNrYWJsZT86IGJvb2xlYW4gfT5gXG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgbWFyZ2luOiAwIDFweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LWZhbWlseTogdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgYmFja2dyb3VuZDogJHsoeyAkdHlwZSB9KSA9PiAoTUVOVElPTl9DSElQX0NPTE9SU1skdHlwZV0gPz8gTUVOVElPTl9DSElQX0NPTE9SUy51c2VyKS5iZ307XG4gIGNvbG9yOiAkeyh7ICR0eXBlIH0pID0+IChNRU5USU9OX0NISVBfQ09MT1JTWyR0eXBlXSA/PyBNRU5USU9OX0NISVBfQ09MT1JTLnVzZXIpLmZnfTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgY3Vyc29yOiAkeyh7ICRpc0NsaWNrYWJsZSB9KSA9PiAoJGlzQ2xpY2thYmxlID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKX07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAmOmhvdmVyIHtcbiAgICAkeyh7ICR0eXBlLCAkaXNDbGlja2FibGUgfSkgPT4gaW5saW5lTWVudGlvbkhvdmVyQ3NzKCR0eXBlLCAkaXNDbGlja2FibGUpfVxuICB9XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvbkljb24gPSBzdHlsZWQuc3Bhbjx7ICR0YXNrPzogYm9vbGVhbiB9PmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgd2lkdGg6ICR7KHsgJHRhc2sgfSkgPT4gKCR0YXNrID8gJzE2cHgnIDogJzE0cHgnKX07XG4gIGhlaWdodDogJHsoeyAkdGFzayB9KSA9PiAoJHRhc2sgPyAnMTZweCcgOiAnMTRweCcpfTtcbmBcblxuY29uc3QgU0NJbmxpbmVNZW50aW9uSWNvblJvdyA9IHN0eWxlZC5zcGFuYFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuYFxuXG5jb25zdCBTQ0lubGluZU1lbnRpb25Xb3JkID0gc3R5bGVkLnNwYW5gXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvblJlc3QgPSBzdHlsZWQuc3BhbmBcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbmBcblxuLyoqXG4gKiBTaSBlbCBocmVmIGNvcnJlc3BvbmRlIGFsIHByb3RvY29sbyBkZSBtZW50aW9uLCBkZXZ1ZWx2ZSB1biBub2RvIGVzdGlsYWRvIHBvciB0aXBvLlxuICogTGFzIHRhcmVhcyB1c2FuIGA8YT5gIGNvbW8gbG9zIGVubGFjZXMgZGUgdGFyZWEgZGVsIGFnZW50ZSAoYC5oYXMtdGFzay1saW5rc2ApLlxuICovXG5leHBvcnQgY29uc3QgcmVuZGVyTWVudGlvbkxpbmsgPSAoaHJlZjogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGlsZHJlbjogUmVhY3ROb2RlKTogUmVhY3ROb2RlIHwgbnVsbCA9PiB7XG4gIGlmICghaHJlZiB8fCAhaHJlZi5zdGFydHNXaXRoKE1BSUFfTUVOVElPTl9QUk9UT0NPTCkpIHJldHVybiBudWxsXG4gIGNvbnN0IHsgdHlwZSwgaWQgfSA9IHBhcnNlTWVudGlvblByb3RvY29sSHJlZihocmVmKVxuICBjb25zdCBsYWJlbCA9IG1lbnRpb25DaGlsZHJlblRvTGFiZWwoY2hpbGRyZW4pXG4gIGlmICh0eXBlID09PSAnc2tpbGwnKSByZXR1cm4gPFNraWxsSW5saW5lQ2hpcCBsYWJlbD17bGFiZWx9IC8+XG4gIGNvbnN0IGlzVGFzayA9IHR5cGUgPT09ICd0YXNrJ1xuICBjb25zdCBpY29uU2l6ZSA9IGlzVGFzayA/IDE2IDogMTRcbiAgY29uc3QgdGFza1VybCA9IGAvdGFza3MvJHtpZH0vZGV0YWlsYFxuXG4gIGNvbnN0IGhhbmRsZVRhc2tDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgb3BlblRhc2tJbkNvclBhbmVsKGlkLCAnZGV0YWlsJylcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRhc2tLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ICE9PSAnRW50ZXInICYmIGUua2V5ICE9PSAnICcpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIG9wZW5UYXNrSW5Db3JQYW5lbChpZCwgJ2RldGFpbCcpXG4gIH1cblxuICBpZiAoaXNUYXNrKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ1Rhc2tMaW5rXG4gICAgICAgIGhyZWY9e3Rhc2tVcmx9XG4gICAgICAgIGNsYXNzTmFtZT17Q09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1N9XG4gICAgICAgIGRhdGEtY29yLWxpbms9XCJ0YXNrXCJcbiAgICAgICAgZGF0YS1tZW50aW9uLXR5cGU9e3R5cGV9XG4gICAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRhc2tDbGlja31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVUYXNrS2V5RG93bn1cbiAgICAgID5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9TQ1Rhc2tMaW5rPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzUHJvamVjdCA9IHR5cGUgPT09ICdwcm9qZWN0J1xuICBjb25zdCBwcm9qZWN0VXJsID0gaXNQcm9qZWN0ID8gYC9wcm9qZWN0cy8ke2lkfS9kYXNoYm9hcmRgIDogbnVsbFxuICBjb25zdCBzaG93SWNvbiA9ICFpc1Byb2plY3RcbiAgY29uc3QgeyBmaXJzdFdvcmQsIHJlc3QgfSA9IHNwbGl0TGFiZWxGaXJzdFdvcmQobGFiZWwpXG5cbiAgY29uc3QgaGFuZGxlUHJvamVjdENsaWNrID0gKGU6IE1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghcHJvamVjdFVybCkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHdpbmRvdy5vcGVuKHByb2plY3RVcmwsICdfYmxhbmsnKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NJbmxpbmVNZW50aW9uXG4gICAgICAkdHlwZT17dHlwZX1cbiAgICAgICRpc0NsaWNrYWJsZT17aXNQcm9qZWN0fVxuICAgICAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU31cbiAgICAgIGRhdGEtbWVudGlvbi10eXBlPXt0eXBlfVxuICAgICAgZGF0YS1tZW50aW9uLXN1cmZhY2U9XCJjaGF0XCJcbiAgICAgIG9uQ2xpY2s9e2lzUHJvamVjdCA/IGhhbmRsZVByb2plY3RDbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIHJvbGU9e2lzUHJvamVjdCA/ICdidXR0b24nIDogdW5kZWZpbmVkfVxuICAgICAgdGFiSW5kZXg9e2lzUHJvamVjdCA/IDAgOiB1bmRlZmluZWR9XG4gICAgPlxuICAgICAge3Nob3dJY29uID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uUm93PlxuICAgICAgICAgICAgPFNDSW5saW5lTWVudGlvbkljb24gJHRhc2s9e2lzVGFza30+XG4gICAgICAgICAgICAgIHtnZXRDb250ZXh0TWVudGlvbkljb24odHlwZSwgTUVOVElPTl9DSElQX0NPTE9SU1t0eXBlXS5mZywgaWQsIGljb25TaXplKX1cbiAgICAgICAgICAgIDwvU0NJbmxpbmVNZW50aW9uSWNvbj5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25Xb3JkPntmaXJzdFdvcmR9PC9TQ0lubGluZU1lbnRpb25Xb3JkPlxuICAgICAgICAgIDwvU0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICB7cmVzdCA/IDxTQ0lubGluZU1lbnRpb25SZXN0PntyZXN0fTwvU0NJbmxpbmVNZW50aW9uUmVzdD4gOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgeyFzaG93SWNvbiA/IGxhYmVsIDogbnVsbH1cbiAgICA8L1NDSW5saW5lTWVudGlvbj5cbiAgKVxufVxuXG4vKiogUXVpdGEgbG9zIG1hcmtlcnMgZGVsIHRleHRvLCBkZWphbmRvIHNvbG8gYGxhYmVsYC4gw5p0aWwgcGFyYSBmYWxsYmFjayBwbGFuby4gKi9cbmV4cG9ydCBjb25zdCBzdHJpcE1lbnRpb25NYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICB0ZXh0LnJlcGxhY2UoTUVOVElPTl9NQVJLRVJfUkVHRVgsIChfbSwgX3R5cGUsIF9pZCwgbGFiZWwpID0+IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwoU3RyaW5nKGxhYmVsKSkpXG5cbi8qKlxuICogVMOtdHVsb3MgZGUgY29udmVyc2FjacOzbiAocC4gZWouIGBsYXN0X3F1ZXN0aW9uYCBkZXJpdmFkbyBkZWwgcHJpbWVyIG1lbnNhamUpIHB1ZWRlblxuICogaW5jbHVpciBlbCB0ZXh0byBzZXJpYWxpemFkbyBgW1ttZW50aW9uOnR5cGU6aWR8bGFiZWxdXWAuIFBhcmEgc2lkZWJhciB5IGxpc3RhZG9zLFxuICogcmVlbXBsYXphIGNhZGEgYmxvcXVlIHBvciBgbGFiZWxgIGVuIHRleHRvIHBsYW5vLCBzaW4gZWwgbWFyY2Fkb3IgY3J1ZG8uXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRDaGF0TGlzdFRpdGxlTWVudGlvbnMgPSAodGV4dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gIGlmICh0ZXh0ID09IG51bGwgfHwgdGV4dCA9PT0gJycpIHJldHVybiB0ZXh0ID8/ICcnXG4gIGNvbnN0IHdpdGhvdXRNZW50aW9ucyA9IHRleHQucmVwbGFjZShNRU5USU9OX01BUktFUl9SRUdFWCwgKF9tLCBfdHlwZSwgX2lkLCBsYWJlbCkgPT5cbiAgICBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKFN0cmluZyhsYWJlbCkudHJpbSgpKVxuICApXG4gIGNvbnN0IHNsYXNoUmVnZXggPSBuZXcgUmVnRXhwKFNMQVNIX0NPTU1BTkRfTUFSS0VSX1JFR0VYLnNvdXJjZSwgJ2cnKVxuICBjb25zdCB3aXRob3V0U2xhc2ggPSB3aXRob3V0TWVudGlvbnMucmVwbGFjZShzbGFzaFJlZ2V4LCAoX20sIF9pZCwgbGFiZWwpID0+IGAvJHtTdHJpbmcobGFiZWwpLnRyaW0oKX1gKVxuICBjb25zdCB3aXRob3V0SW5jb21wbGV0ZVNsYXNoID0gd2l0aG91dFNsYXNoLnJlcGxhY2UoXG4gICAgSU5DT01QTEVURV9TTEFTSF9NQVJLRVJfUkVHRVgsXG4gICAgKF9tLCBsYWJlbCkgPT4gYC8ke1N0cmluZyhsYWJlbCkudHJpbSgpfWBcbiAgKVxuICByZXR1cm4gd2l0aG91dEluY29tcGxldGVTbGFzaC5yZXBsYWNlKElOQ09NUExFVEVfTUVOVElPTl9NQVJLRVJfUkVHRVgsICcnKS50cmltKClcbn1cblxuLyoqIEdlbmVyYSBsYSBVUkwgZGUgbmF2ZWdhY2nDs24gcGFyYSB1biBtZW50aW9uIHNlZ8O6biBzdSB0aXBvLiAqL1xuY29uc3QgZ2V0TWVudGlvblVybCA9ICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgaWQ6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdjbGllbnQnOlxuICAgICAgcmV0dXJuIGAvY2xpZW50cy8ke2lkfWBcbiAgICBjYXNlICdwcm9qZWN0JzpcbiAgICAgIHJldHVybiBgL3Byb2plY3RzLyR7aWR9L2Rhc2hib2FyZGBcbiAgICBjYXNlICd0YXNrJzpcbiAgICAgIHJldHVybiBgL3Rhc2tzLyR7aWR9L2RldGFpbGBcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiBudWxsIC8vIExvcyB1c2VycyBubyBzb24gY2xpY2tlYWJsZXNcbiAgICBjYXNlICdtY3AnOlxuICAgICAgcmV0dXJuIG51bGxcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBNZW50aW9uQ2hpcCA9ICh7IHR5cGUsIGlkLCBsYWJlbCB9OiB7IHR5cGU6IENvbnRleHRFbnRpdHlUeXBlOyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZExhYmVsID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChsYWJlbClcbiAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHJldHVybiA8U2tpbGxJbmxpbmVDaGlwIGxhYmVsPXtub3JtYWxpemVkTGFiZWx9IC8+XG4gIGNvbnN0IHVybCA9IGdldE1lbnRpb25VcmwodHlwZSwgaWQpXG4gIGNvbnN0IGlzQ2xpY2thYmxlID0gISF1cmxcbiAgY29uc3QgaXNUYXNrID0gdHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGlzUHJvamVjdCA9IHR5cGUgPT09ICdwcm9qZWN0J1xuICBjb25zdCBzaG93SWNvbiA9ICFpc1Byb2plY3RcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IHsgZmlyc3RXb3JkLCByZXN0IH0gPSBzcGxpdExhYmVsRmlyc3RXb3JkKG5vcm1hbGl6ZWRMYWJlbClcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50IHwgSFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghaXNDbGlja2FibGUgfHwgIXVybCkgcmV0dXJuXG4gICAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgICAgaWYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpIHJldHVyblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQgfCBIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFpc0NsaWNrYWJsZSB8fCB0eXBlICE9PSAndGFzaycpIHJldHVyblxuICAgIGlmIChlLmtleSAhPT0gJ0VudGVyJyAmJiBlLmtleSAhPT0gJyAnKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgIHJldHVybiAoXG4gICAgICA8U0NUYXNrTGlua1xuICAgICAgICBocmVmPXt1cmwgPz8gJyMnfVxuICAgICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgICBkYXRhLWNvci1saW5rPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi10eXBlPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIHtub3JtYWxpemVkTGFiZWx9XG4gICAgICA8L1NDVGFza0xpbms+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NJbmxpbmVNZW50aW9uXG4gICAgICAkdHlwZT17dHlwZX1cbiAgICAgICRpc0NsaWNrYWJsZT17aXNDbGlja2FibGV9XG4gICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgZGF0YS1tZW50aW9uLXR5cGU9e3R5cGV9XG4gICAgICBkYXRhLW1lbnRpb24tc3VyZmFjZT1cImNoYXRcIlxuICAgICAgb25DbGljaz17aXNDbGlja2FibGUgPyBoYW5kbGVDbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIHJvbGU9e2lzQ2xpY2thYmxlID8gJ2J1dHRvbicgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17aXNDbGlja2FibGUgPyAwIDogdW5kZWZpbmVkfVxuICAgID5cbiAgICAgIHtzaG93SWNvbiA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uICR0YXNrPXtpc1Rhc2t9PlxuICAgICAgICAgICAgICB7Z2V0Q29udGV4dE1lbnRpb25JY29uKHR5cGUsIE1FTlRJT05fQ0hJUF9DT0xPUlNbdHlwZV0uZmcsIGlkLCBpY29uU2l6ZSl9XG4gICAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb24+XG4gICAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uV29yZD57Zmlyc3RXb3JkfTwvU0NJbmxpbmVNZW50aW9uV29yZD5cbiAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb25Sb3c+XG4gICAgICAgICAge3Jlc3QgPyA8U0NJbmxpbmVNZW50aW9uUmVzdD57cmVzdH08L1NDSW5saW5lTWVudGlvblJlc3Q+IDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHshc2hvd0ljb24gPyBub3JtYWxpemVkTGFiZWwgOiBudWxsfVxuICAgIDwvU0NJbmxpbmVNZW50aW9uPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBoYXNJbmxpbmVNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdGV4dC5pbmNsdWRlcygnW1ttZW50aW9uOicpIHx8IHRleHQuaW5jbHVkZXMoJ1tbc2xhc2hfY29tbWFuZDonKVxufVxuXG50eXBlIElubGluZU1hcmtlciA9XG4gIHwgeyBraW5kOiAnbWVudGlvbic7IGluZGV4OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyOyB0eXBlOiBDb250ZXh0RW50aXR5VHlwZTsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnc2xhc2gnOyBpbmRleDogbnVtYmVyOyBsZW5ndGg6IG51bWJlcjsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG5cbmNvbnN0IGNvbGxlY3RJbmxpbmVNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IElubGluZU1hcmtlcltdID0+IHtcbiAgY29uc3QgbWFya2VyczogSW5saW5lTWFya2VyW10gPSBbXVxuXG4gIE1FTlRJT05fTUFSS0VSX1JFR0VYLmxhc3RJbmRleCA9IDBcbiAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBNRU5USU9OX01BUktFUl9SRUdFWC5leGVjKHRleHQpXG4gIHdoaWxlIChtKSB7XG4gICAgY29uc3QgWywgcmF3VHlwZSwgaWQsIGxhYmVsXSA9IG1cbiAgICBjb25zdCB0eXBlID0gQUxMT1dFRF9UWVBFUy5pbmNsdWRlcyhyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA/IChyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA6ICd1c2VyJ1xuICAgIG1hcmtlcnMucHVzaCh7IGtpbmQ6ICdtZW50aW9uJywgaW5kZXg6IG0uaW5kZXgsIGxlbmd0aDogbVswXS5sZW5ndGgsIHR5cGUsIGlkLCBsYWJlbCB9KVxuICAgIG0gPSBNRU5USU9OX01BUktFUl9SRUdFWC5leGVjKHRleHQpXG4gIH1cblxuICBjb25zdCBzbGFzaFJlZ2V4ID0gbmV3IFJlZ0V4cChTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWC5zb3VyY2UsICdnJylcbiAgbGV0IHM6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBzbGFzaFJlZ2V4LmV4ZWModGV4dClcbiAgd2hpbGUgKHMpIHtcbiAgICBtYXJrZXJzLnB1c2goeyBraW5kOiAnc2xhc2gnLCBpbmRleDogcy5pbmRleCwgbGVuZ3RoOiBzWzBdLmxlbmd0aCwgaWQ6IHNbMV0sIGxhYmVsOiBzWzJdIH0pXG4gICAgcyA9IHNsYXNoUmVnZXguZXhlYyh0ZXh0KVxuICB9XG5cbiAgcmV0dXJuIG1hcmtlcnMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpXG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJUZXh0V2l0aE1lbnRpb25zID0gKHRleHQ6IHN0cmluZyk6IEFycmF5PHN0cmluZyB8IFJlYWN0RWxlbWVudD4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBbdGV4dF1cbiAgY29uc3QgbWFya2VycyA9IGNvbGxlY3RJbmxpbmVNYXJrZXJzKHRleHQpXG4gIGlmIChtYXJrZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFt0ZXh0XVxuXG4gIGNvbnN0IG91dDogQXJyYXk8c3RyaW5nIHwgUmVhY3RFbGVtZW50PiA9IFtdXG4gIGxldCBsYXN0SWR4ID0gMFxuICBtYXJrZXJzLmZvckVhY2gobWFya2VyID0+IHtcbiAgICBpZiAobWFya2VyLmluZGV4ID4gbGFzdElkeCkgb3V0LnB1c2godGV4dC5zbGljZShsYXN0SWR4LCBtYXJrZXIuaW5kZXgpKVxuICAgIGlmIChtYXJrZXIua2luZCA9PT0gJ21lbnRpb24nKSB7XG4gICAgICBvdXQucHVzaChcbiAgICAgICAgPE1lbnRpb25DaGlwXG4gICAgICAgICAga2V5PXtgbWVudGlvbi0ke21hcmtlci5pbmRleH0tJHttYXJrZXIudHlwZX0tJHttYXJrZXIuaWR9YH1cbiAgICAgICAgICB0eXBlPXttYXJrZXIudHlwZX1cbiAgICAgICAgICBpZD17bWFya2VyLmlkfVxuICAgICAgICAgIGxhYmVsPXttYXJrZXIubGFiZWx9XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKDxTbGFzaENvbW1hbmRDaGlwIGtleT17YHNsYXNoLSR7bWFya2VyLmluZGV4fS0ke21hcmtlci5pZH1gfSBsYWJlbD17bWFya2VyLmxhYmVsfSBpbmxpbmU9e2ZhbHNlfSAvPilcbiAgICB9XG4gICAgbGFzdElkeCA9IG1hcmtlci5pbmRleCArIG1hcmtlci5sZW5ndGhcbiAgfSlcbiAgaWYgKGxhc3RJZHggPCB0ZXh0Lmxlbmd0aCkgb3V0LnB1c2godGV4dC5zbGljZShsYXN0SWR4KSlcbiAgcmV0dXJuIG91dFxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBT0EsTUFBTSxJQUFJQyxHQUFHLFFBQVEsbUJBQW1CO0FBQy9DLFNBQTRDQywwQkFBMEIsUUFBUSx5QkFBeUI7QUFDdkcsU0FDRUMsbUJBQW1CLEVBQ25CQyw4QkFBOEIsUUFDekIsa0VBQWtFO0FBQ3pFLFNBQVNDLGdCQUFnQixRQUFRLHNDQUFzQztBQUN2RSxTQUFTQyxXQUFXLFFBQVEsOERBQThEO0FBQzFGLFNBQVNDLDBCQUEwQixRQUFRLHNCQUFzQjtBQUNq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
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { ChatHistoryRole } from '../types/Chat';
|
|
2
|
+
|
|
3
|
+
/** Ids of the assistant turn to regenerate (`memory_sessions.id`). */
|
|
4
|
+
export var resolveRetryTurnId = function resolveRetryTurnId(message) {
|
|
5
|
+
var _message$memorySessio;
|
|
6
|
+
var fromField = (_message$memorySessio = message.memorySessionId) === null || _message$memorySessio === void 0 ? void 0 : _message$memorySessio.trim();
|
|
7
|
+
if (fromField) return fromField;
|
|
8
|
+
var id = message.id || '';
|
|
9
|
+
if (!id || id.includes('-streaming')) return null;
|
|
10
|
+
if (id.startsWith('answer-') && !id.endsWith('-cancelled')) {
|
|
11
|
+
var rest = id.slice('answer-'.length);
|
|
12
|
+
return rest || null;
|
|
13
|
+
}
|
|
14
|
+
if (id.endsWith('-answer')) {
|
|
15
|
+
var _rest = id.slice(0, -'-answer'.length);
|
|
16
|
+
return _rest || null;
|
|
17
|
+
}
|
|
18
|
+
if (id.endsWith('-cancelled')) {
|
|
19
|
+
var _message$memorySessio2;
|
|
20
|
+
if ((_message$memorySessio2 = message.memorySessionId) !== null && _message$memorySessio2 !== void 0 && _message$memorySessio2.trim()) return message.memorySessionId.trim();
|
|
21
|
+
// Burbuja local tras Stop: answer-{streamMessageId}-cancelled (no es memory_session_id).
|
|
22
|
+
if (id.startsWith('answer-')) return null;
|
|
23
|
+
var _rest2 = id.slice(0, -'-cancelled'.length);
|
|
24
|
+
return _rest2 || null;
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
};
|
|
28
|
+
var isUserMessage = function isUserMessage(message) {
|
|
29
|
+
var _message$user;
|
|
30
|
+
return message.role === ChatHistoryRole.USER || ((_message$user = message.user) === null || _message$user === void 0 ? void 0 : _message$user.id) !== 'assistant';
|
|
31
|
+
};
|
|
32
|
+
var isAssistantMessage = function isAssistantMessage(message) {
|
|
33
|
+
var _message$user2;
|
|
34
|
+
return message.role === ChatHistoryRole.ASSISTANT || ((_message$user2 = message.user) === null || _message$user2 === void 0 ? void 0 : _message$user2.id) === 'assistant';
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/** Pregunta del usuario asociada al turno que se quiere regenerar. */
|
|
38
|
+
export var findUserMessageForRetry = function findUserMessageForRetry(messages, target) {
|
|
39
|
+
var idx = messages.findIndex(function (message) {
|
|
40
|
+
return message.id === target.id;
|
|
41
|
+
});
|
|
42
|
+
if (idx <= 0) return null;
|
|
43
|
+
for (var i = idx - 1; i >= 0; i -= 1) {
|
|
44
|
+
var candidate = messages[i];
|
|
45
|
+
if (candidate && isUserMessage(candidate)) return candidate;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Clave para agrupar las burbujas locales de un mismo stop, que no tienen
|
|
52
|
+
* `memory_session_id`: `answer-X` (parcial) y `answer-X-cancelled` comparten X.
|
|
53
|
+
*/
|
|
54
|
+
var localStopTurnKey = function localStopTurnKey(message) {
|
|
55
|
+
var id = message.id || '';
|
|
56
|
+
if (!id.startsWith('answer-') || id.includes('-streaming')) return null;
|
|
57
|
+
var rest = id.slice('answer-'.length);
|
|
58
|
+
var base = rest.endsWith('-cancelled') ? rest.slice(0, -'-cancelled'.length) : rest;
|
|
59
|
+
return base || null;
|
|
60
|
+
};
|
|
61
|
+
var retryTurnKey = function retryTurnKey(message) {
|
|
62
|
+
var _resolveRetryTurnId;
|
|
63
|
+
return (_resolveRetryTurnId = resolveRetryTurnId(message)) !== null && _resolveRetryTurnId !== void 0 ? _resolveRetryTurnId : localStopTurnKey(message);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Drop the retried assistant turn (partial answer + cancelled notice) and every
|
|
68
|
+
* message after it. Keeps the original user question.
|
|
69
|
+
*/
|
|
70
|
+
export var messagesWithoutRetriedTurn = function messagesWithoutRetriedTurn(messages, target) {
|
|
71
|
+
var idx = messages.findIndex(function (message) {
|
|
72
|
+
return message.id === target.id;
|
|
73
|
+
});
|
|
74
|
+
if (idx < 0) return messages;
|
|
75
|
+
var turnKey = retryTurnKey(target);
|
|
76
|
+
var start = idx;
|
|
77
|
+
while (start > 0) {
|
|
78
|
+
var previous = messages[start - 1];
|
|
79
|
+
if (!previous || !isAssistantMessage(previous)) break;
|
|
80
|
+
if (!turnKey || retryTurnKey(previous) !== turnKey) break;
|
|
81
|
+
start -= 1;
|
|
82
|
+
}
|
|
83
|
+
return messages.slice(0, start);
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGF0SGlzdG9yeVJvbGUiLCJyZXNvbHZlUmV0cnlUdXJuSWQiLCJtZXNzYWdlIiwiX21lc3NhZ2UkbWVtb3J5U2Vzc2lvIiwiZnJvbUZpZWxkIiwibWVtb3J5U2Vzc2lvbklkIiwidHJpbSIsImlkIiwiaW5jbHVkZXMiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJyZXN0Iiwic2xpY2UiLCJsZW5ndGgiLCJfbWVzc2FnZSRtZW1vcnlTZXNzaW8yIiwiaXNVc2VyTWVzc2FnZSIsIl9tZXNzYWdlJHVzZXIiLCJyb2xlIiwiVVNFUiIsInVzZXIiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJfbWVzc2FnZSR1c2VyMiIsIkFTU0lTVEFOVCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwibWVzc2FnZXMiLCJ0YXJnZXQiLCJpZHgiLCJmaW5kSW5kZXgiLCJpIiwiY2FuZGlkYXRlIiwibG9jYWxTdG9wVHVybktleSIsImJhc2UiLCJyZXRyeVR1cm5LZXkiLCJfcmVzb2x2ZVJldHJ5VHVybklkIiwibWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4iLCJ0dXJuS2V5Iiwic3RhcnQiLCJwcmV2aW91cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZXRyeUNvbXBsZXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhdEhpc3RvcnlSb2xlLCBDaGF0TWVzc2FnZSB9IGZyb20gJy4uL3R5cGVzL0NoYXQnXG5cbi8qKiBJZHMgb2YgdGhlIGFzc2lzdGFudCB0dXJuIHRvIHJlZ2VuZXJhdGUgKGBtZW1vcnlfc2Vzc2lvbnMuaWRgKS4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlUmV0cnlUdXJuSWQgPSAobWVzc2FnZTogUGljazxDaGF0TWVzc2FnZSwgJ2lkJyB8ICdtZW1vcnlTZXNzaW9uSWQnPik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBmcm9tRmllbGQgPSBtZXNzYWdlLm1lbW9yeVNlc3Npb25JZD8udHJpbSgpXG4gIGlmIChmcm9tRmllbGQpIHJldHVybiBmcm9tRmllbGRcblxuICBjb25zdCBpZCA9IG1lc3NhZ2UuaWQgfHwgJydcbiAgaWYgKCFpZCB8fCBpZC5pbmNsdWRlcygnLXN0cmVhbWluZycpKSByZXR1cm4gbnVsbFxuXG4gIGlmIChpZC5zdGFydHNXaXRoKCdhbnN3ZXItJykgJiYgIWlkLmVuZHNXaXRoKCctY2FuY2VsbGVkJykpIHtcbiAgICBjb25zdCByZXN0ID0gaWQuc2xpY2UoJ2Fuc3dlci0nLmxlbmd0aClcbiAgICByZXR1cm4gcmVzdCB8fCBudWxsXG4gIH1cblxuICBpZiAoaWQuZW5kc1dpdGgoJy1hbnN3ZXInKSkge1xuICAgIGNvbnN0IHJlc3QgPSBpZC5zbGljZSgwLCAtJy1hbnN3ZXInLmxlbmd0aClcbiAgICByZXR1cm4gcmVzdCB8fCBudWxsXG4gIH1cbiAgaWYgKGlkLmVuZHNXaXRoKCctY2FuY2VsbGVkJykpIHtcbiAgICBpZiAobWVzc2FnZS5tZW1vcnlTZXNzaW9uSWQ/LnRyaW0oKSkgcmV0dXJuIG1lc3NhZ2UubWVtb3J5U2Vzc2lvbklkLnRyaW0oKVxuICAgIC8vIEJ1cmJ1amEgbG9jYWwgdHJhcyBTdG9wOiBhbnN3ZXIte3N0cmVhbU1lc3NhZ2VJZH0tY2FuY2VsbGVkIChubyBlcyBtZW1vcnlfc2Vzc2lvbl9pZCkuXG4gICAgaWYgKGlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCByZXN0ID0gaWQuc2xpY2UoMCwgLSctY2FuY2VsbGVkJy5sZW5ndGgpXG4gICAgcmV0dXJuIHJlc3QgfHwgbnVsbFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgaXNVc2VyTWVzc2FnZSA9IChtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IGJvb2xlYW4gPT5cbiAgbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtZXNzYWdlLnVzZXI/LmlkICE9PSAnYXNzaXN0YW50J1xuXG5jb25zdCBpc0Fzc2lzdGFudE1lc3NhZ2UgPSAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpOiBib29sZWFuID0+XG4gIG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXI/LmlkID09PSAnYXNzaXN0YW50J1xuXG4vKiogUHJlZ3VudGEgZGVsIHVzdWFyaW8gYXNvY2lhZGEgYWwgdHVybm8gcXVlIHNlIHF1aWVyZSByZWdlbmVyYXIuICovXG5leHBvcnQgY29uc3QgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkgPSAobWVzc2FnZXM6IENoYXRNZXNzYWdlW10sIHRhcmdldDogQ2hhdE1lc3NhZ2UpOiBDaGF0TWVzc2FnZSB8IG51bGwgPT4ge1xuICBjb25zdCBpZHggPSBtZXNzYWdlcy5maW5kSW5kZXgobWVzc2FnZSA9PiBtZXNzYWdlLmlkID09PSB0YXJnZXQuaWQpXG4gIGlmIChpZHggPD0gMCkgcmV0dXJuIG51bGxcblxuICBmb3IgKGxldCBpID0gaWR4IC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBtZXNzYWdlc1tpXVxuICAgIGlmIChjYW5kaWRhdGUgJiYgaXNVc2VyTWVzc2FnZShjYW5kaWRhdGUpKSByZXR1cm4gY2FuZGlkYXRlXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIENsYXZlIHBhcmEgYWdydXBhciBsYXMgYnVyYnVqYXMgbG9jYWxlcyBkZSB1biBtaXNtbyBzdG9wLCBxdWUgbm8gdGllbmVuXG4gKiBgbWVtb3J5X3Nlc3Npb25faWRgOiBgYW5zd2VyLVhgIChwYXJjaWFsKSB5IGBhbnN3ZXItWC1jYW5jZWxsZWRgIGNvbXBhcnRlbiBYLlxuICovXG5jb25zdCBsb2NhbFN0b3BUdXJuS2V5ID0gKG1lc3NhZ2U6IFBpY2s8Q2hhdE1lc3NhZ2UsICdpZCc+KTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGlkID0gbWVzc2FnZS5pZCB8fCAnJ1xuICBpZiAoIWlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBpZC5pbmNsdWRlcygnLXN0cmVhbWluZycpKSByZXR1cm4gbnVsbFxuICBjb25zdCByZXN0ID0gaWQuc2xpY2UoJ2Fuc3dlci0nLmxlbmd0aClcbiAgY29uc3QgYmFzZSA9IHJlc3QuZW5kc1dpdGgoJy1jYW5jZWxsZWQnKSA/IHJlc3Quc2xpY2UoMCwgLSctY2FuY2VsbGVkJy5sZW5ndGgpIDogcmVzdFxuICByZXR1cm4gYmFzZSB8fCBudWxsXG59XG5cbmNvbnN0IHJldHJ5VHVybktleSA9IChtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IHN0cmluZyB8IG51bGwgPT4gcmVzb2x2ZVJldHJ5VHVybklkKG1lc3NhZ2UpID8/IGxvY2FsU3RvcFR1cm5LZXkobWVzc2FnZSlcblxuLyoqXG4gKiBEcm9wIHRoZSByZXRyaWVkIGFzc2lzdGFudCB0dXJuIChwYXJ0aWFsIGFuc3dlciArIGNhbmNlbGxlZCBub3RpY2UpIGFuZCBldmVyeVxuICogbWVzc2FnZSBhZnRlciBpdC4gS2VlcHMgdGhlIG9yaWdpbmFsIHVzZXIgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiA9IChtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSwgdGFyZ2V0OiBDaGF0TWVzc2FnZSk6IENoYXRNZXNzYWdlW10gPT4ge1xuICBjb25zdCBpZHggPSBtZXNzYWdlcy5maW5kSW5kZXgobWVzc2FnZSA9PiBtZXNzYWdlLmlkID09PSB0YXJnZXQuaWQpXG4gIGlmIChpZHggPCAwKSByZXR1cm4gbWVzc2FnZXNcblxuICBjb25zdCB0dXJuS2V5ID0gcmV0cnlUdXJuS2V5KHRhcmdldClcbiAgbGV0IHN0YXJ0ID0gaWR4XG4gIHdoaWxlIChzdGFydCA+IDApIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IG1lc3NhZ2VzW3N0YXJ0IC0gMV1cbiAgICBpZiAoIXByZXZpb3VzIHx8ICFpc0Fzc2lzdGFudE1lc3NhZ2UocHJldmlvdXMpKSBicmVha1xuICAgIGlmICghdHVybktleSB8fCByZXRyeVR1cm5LZXkocHJldmlvdXMpICE9PSB0dXJuS2V5KSBicmVha1xuICAgIHN0YXJ0IC09IDFcbiAgfVxuXG4gIHJldHVybiBtZXNzYWdlcy5zbGljZSgwLCBzdGFydClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsZUFBZSxRQUFxQixlQUFlOztBQUU1RDtBQUNBLE9BQU8sSUFBTUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUMsT0FBb0QsRUFBb0I7RUFBQSxJQUFBQyxxQkFBQTtFQUN6RyxJQUFNQyxTQUFTLElBQUFELHFCQUFBLEdBQUdELE9BQU8sQ0FBQ0csZUFBZSxjQUFBRixxQkFBQSx1QkFBdkJBLHFCQUFBLENBQXlCRyxJQUFJLENBQUMsQ0FBQztFQUNqRCxJQUFJRixTQUFTLEVBQUUsT0FBT0EsU0FBUztFQUUvQixJQUFNRyxFQUFFLEdBQUdMLE9BQU8sQ0FBQ0ssRUFBRSxJQUFJLEVBQUU7RUFDM0IsSUFBSSxDQUFDQSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUVqRCxJQUFJRCxFQUFFLENBQUNFLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDRixFQUFFLENBQUNHLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUMxRCxJQUFNQyxJQUFJLEdBQUdKLEVBQUUsQ0FBQ0ssS0FBSyxDQUFDLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDO0lBQ3ZDLE9BQU9GLElBQUksSUFBSSxJQUFJO0VBQ3JCO0VBRUEsSUFBSUosRUFBRSxDQUFDRyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7SUFDMUIsSUFBTUMsS0FBSSxHQUFHSixFQUFFLENBQUNLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUNDLE1BQU0sQ0FBQztJQUMzQyxPQUFPRixLQUFJLElBQUksSUFBSTtFQUNyQjtFQUNBLElBQUlKLEVBQUUsQ0FBQ0csUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO0lBQUEsSUFBQUksc0JBQUE7SUFDN0IsS0FBQUEsc0JBQUEsR0FBSVosT0FB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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export var SLASH_COMMAND_MARKER_REGEX = /\[\[slash_command:([^|\]]+)\|([\s\S]*?)\]\]/g;
|
|
2
|
+
export var serializeSlashCommand = function serializeSlashCommand(marker) {
|
|
3
|
+
return "[[slash_command:".concat(marker.id, "|").concat(marker.label, "]]");
|
|
4
|
+
};
|
|
5
|
+
export var hasSlashCommandMarker = function hasSlashCommandMarker(text) {
|
|
6
|
+
if (!text) return false;
|
|
7
|
+
return text.includes('[[slash_command:');
|
|
8
|
+
};
|
|
9
|
+
export var parseSlashCommandMarkers = function parseSlashCommandMarkers(text) {
|
|
10
|
+
if (!hasSlashCommandMarker(text)) return [];
|
|
11
|
+
var out = [];
|
|
12
|
+
var regex = new RegExp(SLASH_COMMAND_MARKER_REGEX.source, 'g');
|
|
13
|
+
var match = regex.exec(text);
|
|
14
|
+
while (match) {
|
|
15
|
+
out.push({
|
|
16
|
+
id: match[1],
|
|
17
|
+
label: match[2]
|
|
18
|
+
});
|
|
19
|
+
match = regex.exec(text);
|
|
20
|
+
}
|
|
21
|
+
return out;
|
|
22
|
+
};
|
|
23
|
+
export var quickActionTitleToType = function quickActionTitleToType(id, title) {
|
|
24
|
+
var words = title.toLowerCase().replace(/[^a-z0-9\s]+/g, ' ').split(/\s+/).filter(Boolean);
|
|
25
|
+
if (words.length === 0) return id;
|
|
26
|
+
return words.map(function (word, i) {
|
|
27
|
+
return i === 0 ? word : "".concat(word.charAt(0).toUpperCase()).concat(word.slice(1));
|
|
28
|
+
}).join('');
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCIsInNlcmlhbGl6ZVNsYXNoQ29tbWFuZCIsIm1hcmtlciIsImNvbmNhdCIsImlkIiwibGFiZWwiLCJoYXNTbGFzaENvbW1hbmRNYXJrZXIiLCJ0ZXh0IiwiaW5jbHVkZXMiLCJwYXJzZVNsYXNoQ29tbWFuZE1hcmtlcnMiLCJvdXQiLCJyZWdleCIsIlJlZ0V4cCIsInNvdXJjZSIsIm1hdGNoIiwiZXhlYyIsInB1c2giLCJxdWlja0FjdGlvblRpdGxlVG9UeXBlIiwidGl0bGUiLCJ3b3JkcyIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsImxlbmd0aCIsIm1hcCIsIndvcmQiLCJpIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImpvaW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2xhc2hDb21tYW5kTWFya2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFNsYXNoQ29tbWFuZE1hcmtlciA9IHtcbiAgaWQ6IHN0cmluZ1xuICBsYWJlbDogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCA9IC9cXFtcXFtzbGFzaF9jb21tYW5kOihbXnxcXF1dKylcXHwoW1xcc1xcU10qPylcXF1cXF0vZ1xuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplU2xhc2hDb21tYW5kID0gKG1hcmtlcjogU2xhc2hDb21tYW5kTWFya2VyKTogc3RyaW5nID0+XG4gIGBbW3NsYXNoX2NvbW1hbmQ6JHttYXJrZXIuaWR9fCR7bWFya2VyLmxhYmVsfV1dYFxuXG5leHBvcnQgY29uc3QgaGFzU2xhc2hDb21tYW5kTWFya2VyID0gKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdGV4dC5pbmNsdWRlcygnW1tzbGFzaF9jb21tYW5kOicpXG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZVNsYXNoQ29tbWFuZE1hcmtlcnMgPSAodGV4dDogc3RyaW5nKTogU2xhc2hDb21tYW5kTWFya2VyW10gPT4ge1xuICBpZiAoIWhhc1NsYXNoQ29tbWFuZE1hcmtlcih0ZXh0KSkgcmV0dXJuIFtdXG4gIGNvbnN0IG91dDogU2xhc2hDb21tYW5kTWFya2VyW10gPSBbXVxuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoU0xBU0hfQ09NTUFORF9NQVJLRVJfUkVHRVguc291cmNlLCAnZycpXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbCA9IHJlZ2V4LmV4ZWModGV4dClcbiAgd2hpbGUgKG1hdGNoKSB7XG4gICAgb3V0LnB1c2goeyBpZDogbWF0Y2hbMV0sIGxhYmVsOiBtYXRjaFsyXSB9KVxuICAgIG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZXhwb3J0IGNvbnN0IHF1aWNrQWN0aW9uVGl0bGVUb1R5cGUgPSAoaWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHdvcmRzID0gdGl0bGVcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOVxcc10rL2csICcgJylcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgaWYgKHdvcmRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGlkXG4gIHJldHVybiB3b3Jkcy5tYXAoKHdvcmQsIGkpID0+IChpID09PSAwID8gd29yZCA6IGAke3dvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHt3b3JkLnNsaWNlKDEpfWApKS5qb2luKCcnKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLElBQU1BLDBCQUEwQixHQUFHLDhDQUE4QztBQUV4RixPQUFPLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLE1BQTBCO0VBQUEsMEJBQUFDLE1BQUEsQ0FDM0NELE1BQU0sQ0FBQ0UsRUFBRSxPQUFBRCxNQUFBLENBQUlELE1BQU0sQ0FBQ0csS0FBSztBQUFBLENBQUk7QUFFbEQsT0FBTyxJQUFNQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJQyxJQUFZLEVBQWM7RUFDOUQsSUFBSSxDQUFDQSxJQUFJLEVBQUUsT0FBTyxLQUFLO0VBQ3ZCLE9BQU9BLElBQUksQ0FBQ0MsUUFBUSxDQUFDLGtCQUFrQixDQUFDO0FBQzFDLENBQUM7QUFFRCxPQUFPLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlGLElBQVksRUFBMkI7RUFDOUUsSUFBSSxDQUFDRCxxQkFBcUIsQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFO0VBQzNDLElBQU1HLEdBQXlCLEdBQUcsRUFBRTtFQUNwQyxJQUFNQyxLQUFLLEdBQUcsSUFBSUMsTUFBTSxDQUFDWiwwQkFBMEIsQ0FBQ2EsTUFBTSxFQUFFLEdBQUcsQ0FBQztFQUNoRSxJQUFJQyxLQUE2QixHQUFHSCxLQUFLLENBQUNJLElBQUksQ0FBQ1IsSUFBSSxDQUFDO0VBQ3BELE9BQU9PLEtBQUssRUFBRTtJQUNaSixHQUFHLENBQUNNLElBQUksQ0FBQztNQUFFWixFQUFFLEVBQUVVLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFBRVQsS0FBSyxFQUFFUyxLQUFLLENBQUMsQ0FBQztJQUFFLENBQUMsQ0FBQztJQUMzQ0EsS0FBSyxHQUFHSCxLQUFLLENBQUNJLElBQUksQ0FBQ1IsSUFBSSxDQUFDO0VBQzFCO0VBQ0EsT0FBT0csR0FBRztBQUNaLENBQUM7QUFFRCxPQUFPLElBQU1PLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUliLEVBQVUsRUFBRWMsS0FBYSxFQUFhO0VBQzNFLElBQU1DLEtBQUssR0FBR0QsS0FBSyxDQUNoQkUsV0FBVyxDQUFDLENBQUMsQ0FDYkMsT0FBTyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FDN0JDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FDWkMsTUFBTSxDQUFDQyxPQUFPLENBQUM7RUFDbEIsSUFBSUwsS0FBSyxDQUFDTSxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU9yQixFQUFFO0VBQ2pDLE9BQU9lLEtBQUssQ0FBQ08sR0FBRyxDQUFDLFVBQUNDLElBQUksRUFBRUMsQ0FBQztJQUFBLE9BQU1BLENBQUMsS0FBSyxDQUFDLEdBQUdELElBQUksTUFBQXhCLE1BQUEsQ0FBTXdCLElBQUksQ0FBQ0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxFQUFBM0IsTUFBQSxDQUFHd0IsSUFBSSxDQUFDSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUU7RUFBQSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5RyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|