@projectcor/maia-components 2.44.5 → 2.45.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/lib/App.js +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +65 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +66 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +5 -51
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +211 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +55 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +41 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -76
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +253 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +31 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +33 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +3 -31
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +25 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +88 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +77 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +31 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +48 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -34
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +231 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.spec.js +31 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +12 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +26 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +8 -12
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +444 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +50 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +20 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -60
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +53 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +22 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +86 -0
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.spec.js +68 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +60 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +5 -29
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +371 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +39 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +57 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +6 -40
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +227 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +86 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +108 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +18 -90
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +254 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +21 -6
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +54 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +77 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +19 -47
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +410 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +147 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +471 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -108
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +659 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +30 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +76 -86
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +172 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +82 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +453 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +198 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +385 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +56 -171
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1125 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +68 -37
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +231 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +313 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +353 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +506 -0
- package/lib/hooks/useChatManager/useChatManager.js +76 -351
- package/lib/hooks/useChatManager/useChatManager.spec.js +1261 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +109 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +176 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +12 -82
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +379 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.js +36 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.js +4 -32
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.js +152 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +143 -0
- package/lib/hooks/useContextMentions.js +2 -163
- package/lib/hooks/useContextMentions.spec.js +239 -0
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +115 -0
- package/lib/hooks/useContextPinPopover.js +16 -75
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.js +359 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +321 -0
- package/lib/hooks/useEntitySearch.js +38 -391
- package/lib/hooks/useEntitySearch.spec.js +443 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +60 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
- package/lib/hooks/useIsMaiaPageRoute.js +26 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.js +41 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +71 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMentionPopover.spec.js +215 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +132 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +192 -0
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +70 -0
- package/lib/hooks/useProjectSearch.js +4 -58
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +92 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.js +4 -32
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/approvalBoxToolActions.js +492 -0
- package/lib/lang/br/index.js +44 -38
- package/lib/lang/en/index.js +44 -38
- package/lib/lang/es/index.js +44 -38
- package/lib/lang/fr/index.js +44 -38
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.spec.js +359 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.js +181 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +211 -0
- package/lib/services/maia/Agents/getAgents.js +78 -242
- package/lib/services/maia/Agents/getAgents.spec.js +697 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +153 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +112 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.js +35 -41
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.js +40 -52
- package/lib/store/sessions/sessionStreamManager.spec.js +503 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.spec.js +619 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/test/mockSseStream.js +121 -0
- package/lib/test/streamdownCodeMock.js +6 -0
- package/lib/test/streamdownMock.js +12 -0
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +44 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +38 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +100 -0
- package/lib/utils/hoursPlannerQuickActionType.js +74 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
- package/lib/utils/imagePreprocessor.helpers.js +28 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +12 -37
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.js +24 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +107 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.spec.js +158 -0
- package/lib/utils/retryCompletion.spec.js +99 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.js +71 -19
- package/lib/utils/streamActivityMessages.spec.js +229 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -9,8 +9,8 @@ import { CONTEXT_MENTION_CHIP_CLASS } from '../../../types/contextMention';
|
|
|
9
9
|
import { getContextMentionIcon } from '../../../utils/contextMentionIcons';
|
|
10
10
|
import { normalizeContextMentionLabel } from '../../../utils/contextMentionLabel';
|
|
11
11
|
import { openTaskInCorPanel } from '../../../utils/openTaskInCorPanel';
|
|
12
|
-
import { SLASH_COMMAND_CHIP_BASE_STYLE } from '../SlashCommandChip/SlashCommandChip.styles';
|
|
13
12
|
import { applyMentionChipStyles, MENTION_CHIP_COLORS } from './ContextMentionChip.styles';
|
|
13
|
+
import { buildSkillMentionChipElement, buildUserMentionTooltipElement, splitLabelFirstWord } from './buildChipElement.helpers';
|
|
14
14
|
var EDITABLE_NON_TASK_LABEL_STYLE = {
|
|
15
15
|
display: 'inline',
|
|
16
16
|
lineHeight: '20px',
|
|
@@ -45,22 +45,6 @@ var createEditableMentionLabelEl = function createEditableMentionLabelEl(isTask,
|
|
|
45
45
|
style: EDITABLE_TASK_LABEL_STYLE
|
|
46
46
|
}, mentionLabel);
|
|
47
47
|
};
|
|
48
|
-
var splitLabelFirstWord = function splitLabelFirstWord(label) {
|
|
49
|
-
var normalized = label.trim();
|
|
50
|
-
if (!normalized) return {
|
|
51
|
-
firstWord: '',
|
|
52
|
-
rest: ''
|
|
53
|
-
};
|
|
54
|
-
var firstWhitespaceIdx = normalized.search(/\s/);
|
|
55
|
-
if (firstWhitespaceIdx < 0) return {
|
|
56
|
-
firstWord: normalized,
|
|
57
|
-
rest: ''
|
|
58
|
-
};
|
|
59
|
-
return {
|
|
60
|
-
firstWord: normalized.slice(0, firstWhitespaceIdx),
|
|
61
|
-
rest: normalized.slice(firstWhitespaceIdx)
|
|
62
|
-
};
|
|
63
|
-
};
|
|
64
48
|
var EditableMentionChip = function EditableMentionChip(_ref) {
|
|
65
49
|
var mention = _ref.mention;
|
|
66
50
|
var mentionLabel = normalizeContextMentionLabel(mention.label);
|
|
@@ -118,213 +102,6 @@ var EditableMentionChip = function EditableMentionChip(_ref) {
|
|
|
118
102
|
style: restStyle
|
|
119
103
|
}, rest) : null);
|
|
120
104
|
};
|
|
121
|
-
var initialsFromName = function initialsFromName(name) {
|
|
122
|
-
var _parts$2;
|
|
123
|
-
var trimmed = name.trim();
|
|
124
|
-
if (!trimmed) return '?';
|
|
125
|
-
var parts = trimmed.split(/\s+/).filter(Boolean);
|
|
126
|
-
if (parts.length >= 2) {
|
|
127
|
-
var _parts$0$charAt, _parts$, _parts$charAt, _parts;
|
|
128
|
-
var first = (_parts$0$charAt = (_parts$ = parts[0]) === null || _parts$ === void 0 ? void 0 : _parts$.charAt(0)) !== null && _parts$0$charAt !== void 0 ? _parts$0$charAt : '';
|
|
129
|
-
var last = (_parts$charAt = (_parts = parts[parts.length - 1]) === null || _parts === void 0 ? void 0 : _parts.charAt(0)) !== null && _parts$charAt !== void 0 ? _parts$charAt : '';
|
|
130
|
-
return "".concat(first).concat(last).toUpperCase();
|
|
131
|
-
}
|
|
132
|
-
var single = (_parts$2 = parts[0]) !== null && _parts$2 !== void 0 ? _parts$2 : '';
|
|
133
|
-
return single.length >= 2 ? single.slice(0, 2).toUpperCase() : (single.charAt(0) || '?').toUpperCase();
|
|
134
|
-
};
|
|
135
|
-
var TOOLTIP_FONT = "var(--cor-typography-font-family, 'Work Sans')";
|
|
136
|
-
var TOOLTIP_SECONDARY_COLOR = 'var(--Text-Secondary-Dark, #666)';
|
|
137
|
-
var TOOLTIP_SECONDARY_STYLE = {
|
|
138
|
-
fontFamily: TOOLTIP_FONT,
|
|
139
|
-
fontSize: '14px',
|
|
140
|
-
fontWeight: '400',
|
|
141
|
-
lineHeight: '20px',
|
|
142
|
-
color: TOOLTIP_SECONDARY_COLOR
|
|
143
|
-
};
|
|
144
|
-
var normalizeTrimmedString = function normalizeTrimmedString(value) {
|
|
145
|
-
if (typeof value !== 'string') return '';
|
|
146
|
-
return value.trim();
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
/** Ancho mínimo del tooltip (incl. padding horizontal 8+8). */
|
|
150
|
-
var USER_TOOLTIP_MIN_WIDTH_PX = 292;
|
|
151
|
-
/** Padding horizontal total del tooltip. */
|
|
152
|
-
var USER_TOOLTIP_PAD_X_PX = 16;
|
|
153
|
-
/** Avatar 24px + gap 8px respecto a la columna de texto. */
|
|
154
|
-
var USER_TOOLTIP_AVATAR_GAP_PX = 32;
|
|
155
|
-
/**
|
|
156
|
-
* Ancho máximo de la fila nombre | posición: mismo hueco que con tooltip fijo 292px,
|
|
157
|
-
* para que solo el email ensanche el contenedor.
|
|
158
|
-
*/
|
|
159
|
-
var USER_TOOLTIP_NAME_ROW_MAX_PX = USER_TOOLTIP_MIN_WIDTH_PX - USER_TOOLTIP_PAD_X_PX - USER_TOOLTIP_AVATAR_GAP_PX;
|
|
160
|
-
/**
|
|
161
|
-
* Tope de ancho del nombre en la fila: por debajo del máximo de fila para que el ellipsis
|
|
162
|
-
* del nombre aparezca antes y quede más espacio visible para posición/cargo.
|
|
163
|
-
*/
|
|
164
|
-
var USER_TOOLTIP_NAME_MAX_WIDTH_PX = Math.floor(USER_TOOLTIP_NAME_ROW_MAX_PX * 0.42);
|
|
165
|
-
var createUserTooltipEl = function createUserTooltipEl(mention) {
|
|
166
|
-
var label = mention.label,
|
|
167
|
-
metadata = mention.metadata;
|
|
168
|
-
var picture = typeof (metadata === null || metadata === void 0 ? void 0 : metadata.picture) === 'string' ? metadata.picture : null;
|
|
169
|
-
var positionName = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.positionName);
|
|
170
|
-
var positionLine = positionName || i18n.t('contextMention.userNoPosition', {
|
|
171
|
-
defaultValue: 'Sin posición'
|
|
172
|
-
});
|
|
173
|
-
var email = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.email);
|
|
174
|
-
/** Misma fuente que `ContextMentionItem` (avatar): nombre de query, no el label del chip (ej. "Yo"). */
|
|
175
|
-
var metadataName = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.name);
|
|
176
|
-
var nameForInitials = (metadataName || normalizeTrimmedString(label) || '?').trim();
|
|
177
|
-
var tooltip = document.createElement('div');
|
|
178
|
-
Object.assign(tooltip.style, {
|
|
179
|
-
position: 'fixed',
|
|
180
|
-
zIndex: '9999',
|
|
181
|
-
minWidth: "".concat(USER_TOOLTIP_MIN_WIDTH_PX, "px"),
|
|
182
|
-
width: 'max-content',
|
|
183
|
-
maxWidth: 'min(560px, calc(100vw - 24px))',
|
|
184
|
-
padding: '12px 8px',
|
|
185
|
-
display: 'flex',
|
|
186
|
-
flexDirection: 'column',
|
|
187
|
-
alignItems: 'flex-start',
|
|
188
|
-
borderRadius: '4px',
|
|
189
|
-
border: '1px solid var(--Color-Light-Gray, #E0E0E0)',
|
|
190
|
-
background: '#FFF',
|
|
191
|
-
boxShadow: '0 1px 4px 0 rgba(0,0,0,0.08), 0 1px 4px 0 rgba(0,0,0,0.04)',
|
|
192
|
-
boxSizing: 'border-box',
|
|
193
|
-
pointerEvents: 'none',
|
|
194
|
-
overflow: 'hidden'
|
|
195
|
-
});
|
|
196
|
-
var row = document.createElement('div');
|
|
197
|
-
Object.assign(row.style, {
|
|
198
|
-
display: 'flex',
|
|
199
|
-
alignItems: 'center',
|
|
200
|
-
gap: '8px',
|
|
201
|
-
width: 'max-content',
|
|
202
|
-
maxWidth: '100%',
|
|
203
|
-
minWidth: '0'
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
// Avatar circular (foto o iniciales)
|
|
207
|
-
var avatarWrap = document.createElement('div');
|
|
208
|
-
Object.assign(avatarWrap.style, {
|
|
209
|
-
width: '24px',
|
|
210
|
-
height: '24px',
|
|
211
|
-
minWidth: '24px',
|
|
212
|
-
borderRadius: '24px',
|
|
213
|
-
overflow: 'hidden',
|
|
214
|
-
display: 'flex',
|
|
215
|
-
alignItems: 'center',
|
|
216
|
-
justifyContent: 'center',
|
|
217
|
-
/** Mismo fondo que `SCMUserAvatarFallback` en la fila de usuario del modal. */
|
|
218
|
-
background: 'var(--cor-color-grey-200, #e0e0e0)',
|
|
219
|
-
flexShrink: '0'
|
|
220
|
-
});
|
|
221
|
-
var initials = initialsFromName(nameForInitials);
|
|
222
|
-
var createInitialsFallback = function createInitialsFallback() {
|
|
223
|
-
var fb = document.createElement('span');
|
|
224
|
-
fb.textContent = initials;
|
|
225
|
-
Object.assign(fb.style, {
|
|
226
|
-
fontSize: '10px',
|
|
227
|
-
fontWeight: '600',
|
|
228
|
-
/** Mismo color que `SCMUserAvatarFallback` en la fila de usuario del modal. */
|
|
229
|
-
color: 'var(--cor-color-text-secondary, #666)',
|
|
230
|
-
lineHeight: '1',
|
|
231
|
-
fontFamily: TOOLTIP_FONT
|
|
232
|
-
});
|
|
233
|
-
return fb;
|
|
234
|
-
};
|
|
235
|
-
if (picture) {
|
|
236
|
-
var img = document.createElement('img');
|
|
237
|
-
img.src = picture;
|
|
238
|
-
img.alt = '';
|
|
239
|
-
img.draggable = false;
|
|
240
|
-
Object.assign(img.style, {
|
|
241
|
-
width: '24px',
|
|
242
|
-
height: '24px',
|
|
243
|
-
objectFit: 'cover',
|
|
244
|
-
display: 'block',
|
|
245
|
-
borderRadius: '24px'
|
|
246
|
-
});
|
|
247
|
-
img.onerror = function () {
|
|
248
|
-
img.remove();
|
|
249
|
-
avatarWrap.appendChild(createInitialsFallback());
|
|
250
|
-
};
|
|
251
|
-
avatarWrap.appendChild(img);
|
|
252
|
-
} else {
|
|
253
|
-
avatarWrap.appendChild(createInitialsFallback());
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// Columna de info: ancho = max(fila nombre, email); sin forzar 244px si el contenido es más corto.
|
|
257
|
-
var infoCol = document.createElement('div');
|
|
258
|
-
Object.assign(infoCol.style, {
|
|
259
|
-
display: 'flex',
|
|
260
|
-
flexDirection: 'column',
|
|
261
|
-
justifyContent: 'center',
|
|
262
|
-
alignItems: 'flex-start',
|
|
263
|
-
gap: '2px',
|
|
264
|
-
minWidth: '0',
|
|
265
|
-
width: 'max-content',
|
|
266
|
-
maxWidth: '100%'
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
// Fila: nombre | posición — max-content para no dejar hueco entre nombre corto y el pipe (evitar flex 50/50).
|
|
270
|
-
var nameRow = document.createElement('div');
|
|
271
|
-
Object.assign(nameRow.style, {
|
|
272
|
-
display: 'flex',
|
|
273
|
-
alignItems: 'flex-start',
|
|
274
|
-
gap: '4px',
|
|
275
|
-
minWidth: '0',
|
|
276
|
-
width: 'max-content',
|
|
277
|
-
maxWidth: "".concat(USER_TOOLTIP_NAME_ROW_MAX_PX, "px")
|
|
278
|
-
});
|
|
279
|
-
var nameSpan = document.createElement('span');
|
|
280
|
-
nameSpan.textContent = label;
|
|
281
|
-
Object.assign(nameSpan.style, {
|
|
282
|
-
flex: '0 1 auto',
|
|
283
|
-
minWidth: '0',
|
|
284
|
-
maxWidth: "".concat(USER_TOOLTIP_NAME_MAX_WIDTH_PX, "px"),
|
|
285
|
-
overflow: 'hidden',
|
|
286
|
-
textOverflow: 'ellipsis',
|
|
287
|
-
whiteSpace: 'nowrap',
|
|
288
|
-
color: 'var(--Text-Primary-Dark, #20201F)',
|
|
289
|
-
fontFamily: TOOLTIP_FONT,
|
|
290
|
-
fontSize: '14px',
|
|
291
|
-
fontWeight: '500',
|
|
292
|
-
lineHeight: '130%'
|
|
293
|
-
});
|
|
294
|
-
nameRow.appendChild(nameSpan);
|
|
295
|
-
var sep = document.createElement('span');
|
|
296
|
-
sep.textContent = '|';
|
|
297
|
-
Object.assign(sep.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
|
|
298
|
-
flexShrink: '0'
|
|
299
|
-
}));
|
|
300
|
-
nameRow.appendChild(sep);
|
|
301
|
-
var posSpan = document.createElement('span');
|
|
302
|
-
posSpan.textContent = positionLine;
|
|
303
|
-
Object.assign(posSpan.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
|
|
304
|
-
flex: '0 1 auto',
|
|
305
|
-
minWidth: '0',
|
|
306
|
-
overflow: 'hidden',
|
|
307
|
-
textOverflow: 'ellipsis',
|
|
308
|
-
whiteSpace: 'nowrap'
|
|
309
|
-
}));
|
|
310
|
-
nameRow.appendChild(posSpan);
|
|
311
|
-
infoCol.appendChild(nameRow);
|
|
312
|
-
if (email) {
|
|
313
|
-
var emailSpan = document.createElement('span');
|
|
314
|
-
emailSpan.textContent = email;
|
|
315
|
-
Object.assign(emailSpan.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
|
|
316
|
-
whiteSpace: 'nowrap',
|
|
317
|
-
maxWidth: '100%',
|
|
318
|
-
overflow: 'hidden',
|
|
319
|
-
textOverflow: 'ellipsis'
|
|
320
|
-
}));
|
|
321
|
-
infoCol.appendChild(emailSpan);
|
|
322
|
-
}
|
|
323
|
-
row.appendChild(avatarWrap);
|
|
324
|
-
row.appendChild(infoCol);
|
|
325
|
-
tooltip.appendChild(row);
|
|
326
|
-
return tooltip;
|
|
327
|
-
};
|
|
328
105
|
|
|
329
106
|
/**
|
|
330
107
|
* Crea un `<span>` atómico listo para insertarse dentro del contenteditable
|
|
@@ -335,45 +112,26 @@ var createUserTooltipEl = function createUserTooltipEl(mention) {
|
|
|
335
112
|
* `applyMentionChipStyles`, asegurando una única fuente de verdad visual.
|
|
336
113
|
*/
|
|
337
114
|
export var buildChipElement = function buildChipElement(mention) {
|
|
115
|
+
if (mention.type === 'skill') {
|
|
116
|
+
return buildSkillMentionChipElement(mention);
|
|
117
|
+
}
|
|
338
118
|
var chip = document.createElement('span');
|
|
339
119
|
chip.setAttribute('contenteditable', 'false');
|
|
340
120
|
chip.setAttribute('data-mention-chip', 'true');
|
|
341
121
|
chip.className = CONTEXT_MENTION_CHIP_CLASS;
|
|
342
122
|
chip.setAttribute('data-mention-type', mention.type);
|
|
343
123
|
chip.setAttribute('data-mention-surface', 'editor');
|
|
344
|
-
|
|
345
|
-
// Las skills se ven como los slash commands (texto plano `#nombre`), no como chip con fondo.
|
|
346
|
-
if (mention.type === 'skill') {
|
|
347
|
-
Object.assign(chip.style, SLASH_COMMAND_CHIP_BASE_STYLE, {
|
|
348
|
-
boxSizing: 'border-box',
|
|
349
|
-
maxWidth: '100%'
|
|
350
|
-
});
|
|
351
|
-
chip.textContent = normalizeContextMentionLabel(mention.label);
|
|
352
|
-
return chip;
|
|
353
|
-
}
|
|
354
124
|
applyMentionChipStyles(chip, mention.type);
|
|
355
|
-
|
|
356
|
-
var common = {
|
|
125
|
+
Object.assign(chip.style, {
|
|
357
126
|
boxSizing: 'border-box',
|
|
358
127
|
verticalAlign: 'baseline',
|
|
359
128
|
overflow: 'visible',
|
|
360
|
-
maxWidth: '100%'
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
minHeight: 'auto',
|
|
367
|
-
maxHeight: 'none'
|
|
368
|
-
});
|
|
369
|
-
} else {
|
|
370
|
-
Object.assign(chip.style, common, {
|
|
371
|
-
lineHeight: '20px',
|
|
372
|
-
height: 'auto',
|
|
373
|
-
minHeight: 'auto',
|
|
374
|
-
maxHeight: 'none'
|
|
375
|
-
});
|
|
376
|
-
}
|
|
129
|
+
maxWidth: '100%',
|
|
130
|
+
lineHeight: '20px',
|
|
131
|
+
height: 'auto',
|
|
132
|
+
minHeight: 'auto',
|
|
133
|
+
maxHeight: 'none'
|
|
134
|
+
});
|
|
377
135
|
var mountNode = document.createElement('span');
|
|
378
136
|
mountNode.style.display = 'inline';
|
|
379
137
|
mountNode.style.maxWidth = '100%';
|
|
@@ -429,7 +187,9 @@ export var buildChipElement = function buildChipElement(mention) {
|
|
|
429
187
|
};
|
|
430
188
|
chip.addEventListener('mouseenter', function () {
|
|
431
189
|
if (tooltipEl) return;
|
|
432
|
-
tooltipEl =
|
|
190
|
+
tooltipEl = buildUserMentionTooltipElement(mention, function (key, opts) {
|
|
191
|
+
return i18n.t(key, opts);
|
|
192
|
+
});
|
|
433
193
|
var rect = chip.getBoundingClientRect();
|
|
434
194
|
var left = Math.max(8, Math.min(window.innerWidth - 300, rect.left));
|
|
435
195
|
tooltipEl.style.top = "".concat(rect.top, "px");
|
|
@@ -442,4 +202,4 @@ export var buildChipElement = function buildChipElement(mention) {
|
|
|
442
202
|
}
|
|
443
203
|
return chip;
|
|
444
204
|
};
|
|
445
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVFbGVtZW50IiwiZmx1c2hTeW5jIiwiY3JlYXRlUm9vdCIsImkxOG4iLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJTTEFTSF9DT01NQU5EX0NISVBfQkFTRV9TVFlMRSIsImFwcGx5TWVudGlvbkNoaXBTdHlsZXMiLCJNRU5USU9OX0NISVBfQ09MT1JTIiwiRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwibGluZUhlaWdodCIsImFsaWduU2VsZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3dXcmFwIiwid29yZEJyZWFrIiwiRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwiY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbCIsImlzVGFzayIsIm1lbnRpb25MYWJlbCIsInN0eWxlIiwic3BsaXRMYWJlbEZpcnN0V29yZCIsImxhYmVsIiwibm9ybWFsaXplZCIsInRyaW0iLCJmaXJzdFdvcmQiLCJyZXN0IiwiZmlyc3RXaGl0ZXNwYWNlSWR4Iiwic2VhcmNoIiwic2xpY2UiLCJFZGl0YWJsZU1lbnRpb25DaGlwIiwiX3JlZiIsIm1lbnRpb24iLCJpY29uQ29sb3IiLCJ0eXBlIiwiZmciLCJpc1Byb2plY3QiLCJpY29uU2l6ZSIsImxhYmVsRWwiLCJvdXRlclN0eWxlIiwicG9zaXRpb24iLCJib3hTaXppbmciLCJ2ZXJ0aWNhbEFsaWduIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQiLCJsZWFkaW5nU3R5bGUiLCJhbGlnbkl0ZW1zIiwibGVhZGluZ1dvcmRTdHlsZSIsIl9vYmplY3RTcHJlYWQiLCJyZXN0U3R5bGUiLCJtYXJnaW5SaWdodCIsIndpZHRoIiwiaWQiLCJpbml0aWFsc0Zyb21OYW1lIiwibmFtZSIsIl9wYXJ0cyQyIiwidHJpbW1lZCIsInBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibGVuZ3RoIiwiX3BhcnRzJDAkY2hhckF0IiwiX3BhcnRzJCIsIl9wYXJ0cyRjaGFyQXQiLCJfcGFydHMiLCJmaXJzdCIsImNoYXJBdCIsImxhc3QiLCJjb25jYXQiLCJ0b1VwcGVyQ2FzZSIsInNpbmdsZSIsIlRPT0xUSVBfRk9OVCIsIlRPT0xUSVBfU0VDT05EQVJZX0NPTE9SIiwiVE9PTFRJUF9TRUNPTkRBUllfU1RZTEUiLCJmb250RmFtaWx5Iiwibm9ybWFsaXplVHJpbW1lZFN0cmluZyIsInZhbHVlIiwiVVNFUl9UT09MVElQX01JTl9XSURUSF9QWCIsIlVTRVJfVE9PTFRJUF9QQURfWF9QWCIsIlVTRVJfVE9PTFRJUF9BVkFUQVJfR0FQX1BYIiwiVVNFUl9UT09MVElQX05BTUVfUk9XX01BWF9QWCIsIlVTRVJfVE9PTFRJUF9OQU1FX01BWF9XSURUSF9QWCIsIk1hdGgiLCJmbG9vciIsImNyZWF0ZVVzZXJUb29sdGlwRWwiLCJtZXRhZGF0YSIsInBpY3R1cmUiLCJwb3NpdGlvbk5hbWUiLCJwb3NpdGlvbkxpbmUiLCJ0IiwiZGVmYXVsdFZhbHVlIiwiZW1haWwiLCJtZXRhZGF0YU5hbWUiLCJuYW1lRm9ySW5pdGlhbHMiLCJ0b29sdGlwIiwiZG9jdW1lbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJ6SW5kZXgiLCJwYWRkaW5nIiwiZmxleERpcmVjdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlciIsImJhY2tncm91bmQiLCJib3hTaGFkb3ciLCJwb2ludGVyRXZlbnRzIiwib3ZlcmZsb3ciLCJyb3ciLCJnYXAiLCJhdmF0YXJXcmFwIiwiaGVpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJmbGV4U2hyaW5rIiwiaW5pdGlhbHMiLCJjcmVhdGVJbml0aWFsc0ZhbGxiYWNrIiwiZmIiLCJ0ZXh0Q29udGVudCIsImltZyIsInNyYyIsImFsdCIsImRyYWdnYWJsZSIsIm9iamVjdEZpdCIsIm9uZXJyb3IiLCJyZW1vdmUiLCJhcHBlbmRDaGlsZCIsImluZm9Db2wiLCJuYW1lUm93IiwibmFtZVNwYW4iLCJmbGV4IiwidGV4dE92ZXJmbG93Iiwic2VwIiwicG9zU3BhbiIsImVtYWlsU3BhbiIsImJ1aWxkQ2hpcEVsZW1lbnQiLCJjaGlwIiwic2V0QXR0cmlidXRlIiwiY2xhc3NOYW1lIiwiY29tbW9uIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibW91bnROb2RlIiwicm9vdCIsInJlbmRlciIsImN1cnNvciIsIm9uY2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ3aW5kb3ciLCJvcGVuIiwidG9vbHRpcEVsIiwiY2hpcFJlbW92ZWRPYnNlcnZlciIsInJlbW92ZVVzZXJUb29sdGlwIiwiX2NoaXBSZW1vdmVkT2JzZXJ2ZXIiLCJkaXNjb25uZWN0Iiwid2F0Y2hDaGlwUmVtb3ZlZEZyb21Eb20iLCJfY2hpcFJlbW92ZWRPYnNlcnZlcjIiLCJwYXJlbnQiLCJwYXJlbnROb2RlIiwiTXV0YXRpb25PYnNlcnZlciIsImlzQ29ubmVjdGVkIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxlZnQiLCJtYXgiLCJtaW4iLCJpbm5lcldpZHRoIiwidG9wIiwidHJhbnNmb3JtIiwiYm9keSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uQ2hpcC9idWlsZENoaXBFbGVtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnXG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi9sYW5nJ1xuaW1wb3J0IHsgQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1MsIENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uTGFiZWwnXG5pbXBvcnQgeyBvcGVuVGFza0luQ29yUGFuZWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9vcGVuVGFza0luQ29yUGFuZWwnXG5pbXBvcnQgeyBTTEFTSF9DT01NQU5EX0NISVBfQkFTRV9TVFlMRSB9IGZyb20gJy4uL1NsYXNoQ29tbWFuZENoaXAvU2xhc2hDb21tYW5kQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBhcHBseU1lbnRpb25DaGlwU3R5bGVzLCBNRU5USU9OX0NISVBfQ09MT1JTIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkNoaXAuc3R5bGVzJ1xuXG5jb25zdCBFRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgYWxpZ25TZWxmOiAnYmFzZWxpbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gIG92ZXJmbG93V3JhcDogJ2JyZWFrLXdvcmQnLFxuICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbn1cblxuLyoqIFRleHRvIGRlIHRhcmVhOiBzaW4gYm9yZGUgaW5mZXJpb3I7IGVsIGFzcGVjdG8gZGUgZW5sYWNlIGxvIGRhIGVsIENTUyBnbG9iYWwgKDo6YmVmb3JlICsgY29sb3IpLiAqL1xuY29uc3QgRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgZm9udFdlaWdodDogJzYwMCcsXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAwLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCcsXG4gIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxufVxuXG5jb25zdCBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsID0gKGlzVGFzazogYm9vbGVhbiwgbWVudGlvbkxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFpc1Rhc2spIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFIH0sIG1lbnRpb25MYWJlbClcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX1RBU0tfTEFCRUxfU1RZTEUgfSwgbWVudGlvbkxhYmVsKVxufVxuXG5jb25zdCBzcGxpdExhYmVsRmlyc3RXb3JkID0gKGxhYmVsOiBzdHJpbmcpOiB7IGZpcnN0V29yZDogc3RyaW5nOyByZXN0OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYWJlbC50cmltKClcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4geyBmaXJzdFdvcmQ6ICcnLCByZXN0OiAnJyB9XG4gIGNvbnN0IGZpcnN0V2hpdGVzcGFjZUlkeCA9IG5vcm1hbGl6ZWQuc2VhcmNoKC9cXHMvKVxuICBpZiAoZmlyc3RXaGl0ZXNwYWNlSWR4IDwgMCkgcmV0dXJuIHsgZmlyc3RXb3JkOiBub3JtYWxpemVkLCByZXN0OiAnJyB9XG4gIHJldHVybiB7XG4gICAgZmlyc3RXb3JkOiBub3JtYWxpemVkLnNsaWNlKDAsIGZpcnN0V2hpdGVzcGFjZUlkeCksXG4gICAgcmVzdDogbm9ybWFsaXplZC5zbGljZShmaXJzdFdoaXRlc3BhY2VJZHgpLFxuICB9XG59XG5cbnR5cGUgRWRpdGFibGVNZW50aW9uQ2hpcFByb3BzID0ge1xuICBtZW50aW9uOiBDb250ZXh0TWVudGlvblxufVxuXG5jb25zdCBFZGl0YWJsZU1lbnRpb25DaGlwID0gKHsgbWVudGlvbiB9OiBFZGl0YWJsZU1lbnRpb25DaGlwUHJvcHMpID0+IHtcbiAgY29uc3QgbWVudGlvbkxhYmVsID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChtZW50aW9uLmxhYmVsKVxuICBjb25zdCBpY29uQ29sb3IgPSBNRU5USU9OX0NISVBfQ09MT1JTW21lbnRpb24udHlwZV0uZmdcbiAgY29uc3QgaXNUYXNrID0gbWVudGlvbi50eXBlID09PSAndGFzaydcbiAgY29uc3QgaXNQcm9qZWN0ID0gbWVudGlvbi50eXBlID09PSAncHJvamVjdCdcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IGxhYmVsRWwgPSBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsKGlzVGFzaywgbWVudGlvbkxhYmVsKVxuXG4gIGNvbnN0IG91dGVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgbGluZUhlaWdodDogJzIwcHgnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdiYXNlbGluZScsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfVxuXG4gIGlmIChpc1Rhc2sgfHwgaXNQcm9qZWN0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7IHN0eWxlOiBvdXRlclN0eWxlIH0sIGxhYmVsRWwpXG4gIH1cblxuICBjb25zdCB7IGZpcnN0V29yZCwgcmVzdCB9ID0gc3BsaXRMYWJlbEZpcnN0V29yZChtZW50aW9uTGFiZWwpXG4gIGNvbnN0IGxlYWRpbmdTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH1cbiAgY29uc3QgbGVhZGluZ1dvcmRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICAuLi5FRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRSxcbiAgICBkaXNwbGF5OiAnaW5saW5lJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfVxuICBjb25zdCByZXN0U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIH1cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAnc3BhbicsXG4gICAgeyBzdHlsZTogb3V0ZXJTdHlsZSB9LFxuICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAnc3BhbicsXG4gICAgICB7IHN0eWxlOiBsZWFkaW5nU3R5bGUgfSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICcycHgnLFxuICAgICAgICAgICAgbGluZUhlaWdodDogJzEnLFxuICAgICAgICAgICAgd2lkdGg6ICcxNHB4JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBnZXRDb250ZXh0TWVudGlvbkljb24obWVudGlvbi50eXBlLCBpY29uQ29sb3IsIG1lbnRpb24uaWQsIGljb25TaXplKVxuICAgICAgKSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7IHN0eWxlOiBsZWFkaW5nV29yZFN0eWxlIH0sIGZpcnN0V29yZClcbiAgICApLFxuICAgIHJlc3QgPyBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogcmVzdFN0eWxlIH0sIHJlc3QpIDogbnVsbFxuICApXG59XG5cbmNvbnN0IGluaXRpYWxzRnJvbU5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IG5hbWUudHJpbSgpXG4gIGlmICghdHJpbW1lZCkgcmV0dXJuICc/J1xuICBjb25zdCBwYXJ0cyA9IHRyaW1tZWQuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbilcbiAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgY29uc3QgZmlyc3QgPSBwYXJ0c1swXT8uY2hhckF0KDApID8/ICcnXG4gICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdPy5jaGFyQXQoMCkgPz8gJydcbiAgICByZXR1cm4gYCR7Zmlyc3R9JHtsYXN0fWAudG9VcHBlckNhc2UoKVxuICB9XG4gIGNvbnN0IHNpbmdsZSA9IHBhcnRzWzBdID8/ICcnXG4gIHJldHVybiBzaW5nbGUubGVuZ3RoID49IDIgPyBzaW5nbGUuc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKSA6IChzaW5nbGUuY2hhckF0KDApIHx8ICc/JykudG9VcHBlckNhc2UoKVxufVxuXG5jb25zdCBUT09MVElQX0ZPTlQgPSBgdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKWBcbmNvbnN0IFRPT0xUSVBfU0VDT05EQVJZX0NPTE9SID0gJ3ZhcigtLVRleHQtU2Vjb25kYXJ5LURhcmssICM2NjYpJ1xuY29uc3QgVE9PTFRJUF9TRUNPTkRBUllfU1RZTEUgPSB7XG4gIGZvbnRGYW1pbHk6IFRPT0xUSVBfRk9OVCxcbiAgZm9udFNpemU6ICcxNHB4JyxcbiAgZm9udFdlaWdodDogJzQwMCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgY29sb3I6IFRPT0xUSVBfU0VDT05EQVJZX0NPTE9SLFxufVxuXG5jb25zdCBub3JtYWxpemVUcmltbWVkU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJ1xuICByZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKiBBbmNobyBtw61uaW1vIGRlbCB0b29sdGlwIChpbmNsLiBwYWRkaW5nIGhvcml6b250YWwgOCs4KS4gKi9cbmNvbnN0IFVTRVJfVE9PTFRJUF9NSU5fV0lEVEhfUFggPSAyOTJcbi8qKiBQYWRkaW5nIGhvcml6b250YWwgdG90YWwgZGVsIHRvb2x0aXAuICovXG5jb25zdCBVU0VSX1RPT0xUSVBfUEFEX1hfUFggPSAxNlxuLyoqIEF2YXRhciAyNHB4ICsgZ2FwIDhweCByZXNwZWN0byBhIGxhIGNvbHVtbmEgZGUgdGV4dG8uICovXG5jb25zdCBVU0VSX1RPT0xUSVBfQVZBVEFSX0dBUF9QWCA9IDMyXG4vKipcbiAqIEFuY2hvIG3DoXhpbW8gZGUgbGEgZmlsYSBub21icmUgfCBwb3NpY2nDs246IG1pc21vIGh1ZWNvIHF1ZSBjb24gdG9vbHRpcCBmaWpvIDI5MnB4LFxuICogcGFyYSBxdWUgc29sbyBlbCBlbWFpbCBlbnNhbmNoZSBlbCBjb250ZW5lZG9yLlxuICovXG5jb25zdCBVU0VSX1RPT0xUSVBfTkFNRV9ST1dfTUFYX1BYID0gVVNFUl9UT09MVElQX01JTl9XSURUSF9QWCAtIFVTRVJfVE9PTFRJUF9QQURfWF9QWCAtIFVTRVJfVE9PTFRJUF9BVkFUQVJfR0FQX1BYXG4vKipcbiAqIFRvcGUgZGUgYW5jaG8gZGVsIG5vbWJyZSBlbiBsYSBmaWxhOiBwb3IgZGViYWpvIGRlbCBtw6F4aW1vIGRlIGZpbGEgcGFyYSBxdWUgZWwgZWxsaXBzaXNcbiAqIGRlbCBub21icmUgYXBhcmV6Y2EgYW50ZXMgeSBxdWVkZSBtw6FzIGVzcGFjaW8gdmlzaWJsZSBwYXJhIHBvc2ljacOzbi9jYXJnby5cbiAqL1xuY29uc3QgVVNFUl9UT09MVElQX05BTUVfTUFYX1dJRFRIX1BYID0gTWF0aC5mbG9vcihVU0VSX1RPT0xUSVBfTkFNRV9ST1dfTUFYX1BYICogMC40MilcblxuY29uc3QgY3JlYXRlVXNlclRvb2x0aXBFbCA9IChtZW50aW9uOiBDb250ZXh0TWVudGlvbik6IEhUTUxFbGVtZW50ID0+IHtcbiAgY29uc3QgeyBsYWJlbCwgbWV0YWRhdGEgfSA9IG1lbnRpb25cbiAgY29uc3QgcGljdHVyZSA9IHR5cGVvZiBtZXRhZGF0YT8ucGljdHVyZSA9PT0gJ3N0cmluZycgPyBtZXRhZGF0YS5waWN0dXJlIDogbnVsbFxuICBjb25zdCBwb3NpdGlvbk5hbWUgPSBub3JtYWxpemVUcmltbWVkU3RyaW5nKG1ldGFkYXRhPy5wb3NpdGlvbk5hbWUpXG4gIGNvbnN0IHBvc2l0aW9uTGluZSA9XG4gICAgcG9zaXRpb25OYW1lIHx8XG4gICAgaTE4bi50KCdjb250ZXh0TWVudGlvbi51c2VyTm9Qb3NpdGlvbicsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ1NpbiBwb3NpY2nDs24nLFxuICAgIH0pXG4gIGNvbnN0IGVtYWlsID0gbm9ybWFsaXplVHJpbW1lZFN0cmluZyhtZXRhZGF0YT8uZW1haWwpXG4gIC8qKiBNaXNtYSBmdWVudGUgcXVlIGBDb250ZXh0TWVudGlvbkl0ZW1gIChhdmF0YXIpOiBub21icmUgZGUgcXVlcnksIG5vIGVsIGxhYmVsIGRlbCBjaGlwIChlai4gXCJZb1wiKS4gKi9cbiAgY29uc3QgbWV0YWRhdGFOYW1lID0gbm9ybWFsaXplVHJpbW1lZFN0cmluZyhtZXRhZGF0YT8ubmFtZSlcbiAgY29uc3QgbmFtZUZvckluaXRpYWxzID0gKG1ldGFkYXRhTmFtZSB8fCBub3JtYWxpemVUcmltbWVkU3RyaW5nKGxhYmVsKSB8fCAnPycpLnRyaW0oKVxuXG4gIGNvbnN0IHRvb2x0aXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBPYmplY3QuYXNzaWduKHRvb2x0aXAuc3R5bGUsIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB6SW5kZXg6ICc5OTk5JyxcbiAgICBtaW5XaWR0aDogYCR7VVNFUl9UT09MVElQX01JTl9XSURUSF9QWH1weGAsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6ICdtaW4oNTYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSknLFxuICAgIHBhZGRpbmc6ICcxMnB4IDhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCB2YXIoLS1Db2xvci1MaWdodC1HcmF5LCAjRTBFMEUwKScsXG4gICAgYmFja2dyb3VuZDogJyNGRkYnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4wOCksIDAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4wNCknLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIH0pXG5cbiAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihyb3cuc3R5bGUsIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICB3aWR0aDogJ21heC1jb250ZW50JyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gIH0pXG5cbiAgLy8gQXZhdGFyIGNpcmN1bGFyIChmb3RvIG8gaW5pY2lhbGVzKVxuICBjb25zdCBhdmF0YXJXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihhdmF0YXJXcmFwLnN0eWxlLCB7XG4gICAgd2lkdGg6ICcyNHB4JyxcbiAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICBtaW5XaWR0aDogJzI0cHgnLFxuICAgIGJvcmRlclJhZGl1czogJzI0cHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIC8qKiBNaXNtbyBmb25kbyBxdWUgYFNDTVVzZXJBdmF0YXJGYWxsYmFja2AgZW4gbGEgZmlsYSBkZSB1c3VhcmlvIGRlbCBtb2RhbC4gKi9cbiAgICBiYWNrZ3JvdW5kOiAndmFyKC0tY29yLWNvbG9yLWdyZXktMjAwLCAjZTBlMGUwKScsXG4gICAgZmxleFNocmluazogJzAnLFxuICB9KVxuXG4gIGNvbnN0IGluaXRpYWxzID0gaW5pdGlhbHNGcm9tTmFtZShuYW1lRm9ySW5pdGlhbHMpXG5cbiAgY29uc3QgY3JlYXRlSW5pdGlhbHNGYWxsYmFjayA9ICgpOiBIVE1MRWxlbWVudCA9PiB7XG4gICAgY29uc3QgZmIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBmYi50ZXh0Q29udGVudCA9IGluaXRpYWxzXG4gICAgT2JqZWN0LmFzc2lnbihmYi5zdHlsZSwge1xuICAgICAgZm9udFNpemU6ICcxMHB4JyxcbiAgICAgIGZvbnRXZWlnaHQ6ICc2MDAnLFxuICAgICAgLyoqIE1pc21vIGNvbG9yIHF1ZSBgU0NNVXNlckF2YXRhckZhbGxiYWNrYCBlbiBsYSBmaWxhIGRlIHVzdWFyaW8gZGVsIG1vZGFsLiAqL1xuICAgICAgY29sb3I6ICd2YXIoLS1jb3ItY29sb3ItdGV4dC1zZWNvbmRhcnksICM2NjYpJyxcbiAgICAgIGxpbmVIZWlnaHQ6ICcxJyxcbiAgICAgIGZvbnRGYW1pbHk6IFRPT0xUSVBfRk9OVCxcbiAgICB9KVxuICAgIHJldHVybiBmYlxuICB9XG5cbiAgaWYgKHBpY3R1cmUpIHtcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKVxuICAgIGltZy5zcmMgPSBwaWN0dXJlXG4gICAgaW1nLmFsdCA9ICcnXG4gICAgaW1nLmRyYWdnYWJsZSA9IGZhbHNlXG4gICAgT2JqZWN0LmFzc2lnbihpbWcuc3R5bGUsIHtcbiAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgICB9KVxuICAgIGltZy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgaW1nLnJlbW92ZSgpXG4gICAgICBhdmF0YXJXcmFwLmFwcGVuZENoaWxkKGNyZWF0ZUluaXRpYWxzRmFsbGJhY2soKSlcbiAgICB9XG4gICAgYXZhdGFyV3JhcC5hcHBlbmRDaGlsZChpbWcpXG4gIH0gZWxzZSB7XG4gICAgYXZhdGFyV3JhcC5hcHBlbmRDaGlsZChjcmVhdGVJbml0aWFsc0ZhbGxiYWNrKCkpXG4gIH1cblxuICAvLyBDb2x1bW5hIGRlIGluZm86IGFuY2hvID0gbWF4KGZpbGEgbm9tYnJlLCBlbWFpbCk7IHNpbiBmb3J6YXIgMjQ0cHggc2kgZWwgY29udGVuaWRvIGVzIG3DoXMgY29ydG8uXG4gIGNvbnN0IGluZm9Db2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBPYmplY3QuYXNzaWduKGluZm9Db2wuc3R5bGUsIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBnYXA6ICcycHgnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfSlcblxuICAvLyBGaWxhOiBub21icmUgfCBwb3NpY2nDs24g4oCUIG1heC1jb250ZW50IHBhcmEgbm8gZGVqYXIgaHVlY28gZW50cmUgbm9tYnJlIGNvcnRvIHkgZWwgcGlwZSAoZXZpdGFyIGZsZXggNTAvNTApLlxuICBjb25zdCBuYW1lUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihuYW1lUm93LnN0eWxlLCB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBnYXA6ICc0cHgnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6IGAke1VTRVJfVE9PTFRJUF9OQU1FX1JPV19NQVhfUFh9cHhgLFxuICB9KVxuXG4gIGNvbnN0IG5hbWVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIG5hbWVTcGFuLnRleHRDb250ZW50ID0gbGFiZWxcbiAgT2JqZWN0LmFzc2lnbihuYW1lU3Bhbi5zdHlsZSwge1xuICAgIGZsZXg6ICcwIDEgYXV0bycsXG4gICAgbWluV2lkdGg6ICcwJyxcbiAgICBtYXhXaWR0aDogYCR7VVNFUl9UT09MVElQX05BTUVfTUFYX1dJRFRIX1BYfXB4YCxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIGNvbG9yOiAndmFyKC0tVGV4dC1QcmltYXJ5LURhcmssICMyMDIwMUYpJyxcbiAgICBmb250RmFtaWx5OiBUT09MVElQX0ZPTlQsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICBsaW5lSGVpZ2h0OiAnMTMwJScsXG4gIH0pXG4gIG5hbWVSb3cuYXBwZW5kQ2hpbGQobmFtZVNwYW4pXG5cbiAgY29uc3Qgc2VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIHNlcC50ZXh0Q29udGVudCA9ICd8J1xuICBPYmplY3QuYXNzaWduKHNlcC5zdHlsZSwgeyAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSwgZmxleFNocmluazogJzAnIH0pXG4gIG5hbWVSb3cuYXBwZW5kQ2hpbGQoc2VwKVxuXG4gIGNvbnN0IHBvc1NwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgcG9zU3Bhbi50ZXh0Q29udGVudCA9IHBvc2l0aW9uTGluZVxuICBPYmplY3QuYXNzaWduKHBvc1NwYW4uc3R5bGUsIHtcbiAgICAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSxcbiAgICBmbGV4OiAnMCAxIGF1dG8nLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfSlcbiAgbmFtZVJvdy5hcHBlbmRDaGlsZChwb3NTcGFuKVxuXG4gIGluZm9Db2wuYXBwZW5kQ2hpbGQobmFtZVJvdylcblxuICBpZiAoZW1haWwpIHtcbiAgICBjb25zdCBlbWFpbFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBlbWFpbFNwYW4udGV4dENvbnRlbnQgPSBlbWFpbFxuICAgIE9iamVjdC5hc3NpZ24oZW1haWxTcGFuLnN0eWxlLCB7XG4gICAgICAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB9KVxuICAgIGluZm9Db2wuYXBwZW5kQ2hpbGQoZW1haWxTcGFuKVxuICB9XG5cbiAgcm93LmFwcGVuZENoaWxkKGF2YXRhcldyYXApXG4gIHJvdy5hcHBlbmRDaGlsZChpbmZvQ29sKVxuICB0b29sdGlwLmFwcGVuZENoaWxkKHJvdylcblxuICByZXR1cm4gdG9vbHRpcFxufVxuXG4vKipcbiAqIENyZWEgdW4gYDxzcGFuPmAgYXTDs21pY28gbGlzdG8gcGFyYSBpbnNlcnRhcnNlIGRlbnRybyBkZWwgY29udGVudGVkaXRhYmxlXG4gKiBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yYC4gU2UgbWFyY2EgY29uIGxvcyBgZGF0YS1tZW50aW9uKmAgbmVjZXNhcmlvcyBwYXJhXG4gKiBxdWUgYHVzZUNvbnRleHRNZW50aW9ucy5zZXJpYWxpemUoKWAgcHVlZGEgdm9sdmVyIGEgZXh0cmFlciBsYSBtZW50aW9uLlxuICpcbiAqIENvbXBhcnRlIGxvcyBlc3RpbG9zIGNvbiBlbCBjb21wb25lbnRlIGBDb250ZXh0TWVudGlvbkNoaXBgIHZpYVxuICogYGFwcGx5TWVudGlvbkNoaXBTdHlsZXNgLCBhc2VndXJhbmRvIHVuYSDDum5pY2EgZnVlbnRlIGRlIHZlcmRhZCB2aXN1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENoaXBFbGVtZW50ID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogSFRNTFNwYW5FbGVtZW50ID0+IHtcbiAgY29uc3QgY2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1jaGlwJywgJ3RydWUnKVxuICBjaGlwLmNsYXNzTmFtZSA9IENPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTXG4gIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1zdXJmYWNlJywgJ2VkaXRvcicpXG5cbiAgLy8gTGFzIHNraWxscyBzZSB2ZW4gY29tbyBsb3Mgc2xhc2ggY29tbWFuZHMgKHRleHRvIHBsYW5vIGAjbm9tYnJlYCksIG5vIGNvbW8gY2hpcCBjb24gZm9uZG8uXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICdza2lsbCcpIHtcbiAgICBPYmplY3QuYXNzaWduKGNoaXAuc3R5bGUsIFNMQVNIX0NPTU1BTkRfQ0hJUF9CQVNFX1NUWUxFLCB7IGJveFNpemluZzogJ2JvcmRlci1ib3gnLCBtYXhXaWR0aDogJzEwMCUnIH0pXG4gICAgY2hpcC50ZXh0Q29udGVudCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobWVudGlvbi5sYWJlbClcbiAgICByZXR1cm4gY2hpcFxuICB9XG5cbiAgYXBwbHlNZW50aW9uQ2hpcFN0eWxlcyhjaGlwLCBtZW50aW9uLnR5cGUpXG4gIGNvbnN0IGlzVGFzayA9IG1lbnRpb24udHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfSBhcyBjb25zdFxuICBpZiAoaXNUYXNrKSB7XG4gICAgT2JqZWN0LmFzc2lnbihjaGlwLnN0eWxlLCBjb21tb24sIHtcbiAgICAgIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgbWluSGVpZ2h0OiAnYXV0bycsXG4gICAgICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIE9iamVjdC5hc3NpZ24oY2hpcC5zdHlsZSwgY29tbW9uLCB7XG4gICAgICBsaW5lSGVpZ2h0OiAnMjBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIG1pbkhlaWdodDogJ2F1dG8nLFxuICAgICAgbWF4SGVpZ2h0OiAnbm9uZScsXG4gICAgfSlcbiAgfVxuICBjb25zdCBtb3VudE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgbW91bnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJ1xuICBtb3VudE5vZGUuc3R5bGUubWF4V2lkdGggPSAnMTAwJSdcbiAgbW91bnROb2RlLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnYmFzZWxpbmUnXG4gIG1vdW50Tm9kZS5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgY2hpcC5hcHBlbmRDaGlsZChtb3VudE5vZGUpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KG1vdW50Tm9kZSlcblxuICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgIHJvb3QucmVuZGVyKGNyZWF0ZUVsZW1lbnQoRWRpdGFibGVNZW50aW9uQ2hpcCwgeyBtZW50aW9uIH0pKVxuICB9KVxuXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNoaXAuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInXG4gICAgY2hpcC5vbmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIG9wZW5UYXNrSW5Db3JQYW5lbChtZW50aW9uLmlkLCAnZGV0YWlsJylcbiAgICB9XG4gIH0gZWxzZSBpZiAobWVudGlvbi50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBjaGlwLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJ1xuICAgIGNoaXAub25jbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB3aW5kb3cub3BlbihgL3Byb2plY3RzLyR7bWVudGlvbi5pZH0vZGFzaGJvYXJkYCwgJ19ibGFuaycpXG4gICAgfVxuICB9IGVsc2UgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBjaGlwUmVtb3ZlZE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHJlbW92ZVVzZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbnVsbFxuICAgICAgaWYgKHRvb2x0aXBFbCkge1xuICAgICAgICB0b29sdGlwRWwucmVtb3ZlKClcbiAgICAgICAgdG9vbHRpcEVsID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTaSBlbCBjaGlwIHNlIGJvcnJhIGRlbCBlZGl0b3IgKEJhY2tzcGFjZSwgZXRjLikgbm8gc2llbXByZSBoYXkgYG1vdXNlbGVhdmVgOyBjZXJyYXIgZWwgdG9vbHRpcC4gKi9cbiAgICBjb25zdCB3YXRjaENoaXBSZW1vdmVkRnJvbURvbSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIWNoaXAuaXNDb25uZWN0ZWQpIHJlbW92ZVVzZXJUb29sdGlwKClcbiAgICAgIH0pXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGlmICh0b29sdGlwRWwpIHJldHVyblxuICAgICAgdG9vbHRpcEVsID0gY3JlYXRlVXNlclRvb2x0aXBFbChtZW50aW9uKVxuICAgICAgY29uc3QgcmVjdCA9IGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIDMwMCwgcmVjdC5sZWZ0KSlcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gNHB4KSknXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbClcbiAgICAgIHdhdGNoQ2hpcFJlbW92ZWRGcm9tRG9tKClcbiAgICB9KVxuXG4gICAgY2hpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVtb3ZlVXNlclRvb2x0aXApXG4gIH1cblxuICByZXR1cm4gY2hpcFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxhQUFhLFFBQTRCLE9BQU87QUFDekQsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsVUFBVSxRQUFRLGtCQUFrQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sZUFBZTtBQUNoQyxTQUFTQywwQkFBMEIsUUFBd0IsK0JBQStCO0FBQzFGLFNBQVNDLHFCQUFxQixRQUFRLG9DQUFvQztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxvQ0FBb0M7QUFDakYsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBQ3RFLFNBQVNDLDZCQUE2QixRQUFRLDZDQUE2QztBQUMzRixTQUFTQyxzQkFBc0IsRUFBRUMsbUJBQW1CLFFBQVEsNkJBQTZCO0FBRXpGLElBQU1DLDZCQUE0QyxHQUFHO0VBQ25EQyxPQUFPLEVBQUUsUUFBUTtFQUNqQkMsVUFBVSxFQUFFLE1BQU07RUFDbEJDLFNBQVMsRUFBRSxVQUFVO0VBQ3JCQyxRQUFRLEVBQUUsQ0FBQztF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
|
|
205
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVFbGVtZW50IiwiZmx1c2hTeW5jIiwiY3JlYXRlUm9vdCIsImkxOG4iLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJhcHBseU1lbnRpb25DaGlwU3R5bGVzIiwiTUVOVElPTl9DSElQX0NPTE9SUyIsImJ1aWxkU2tpbGxNZW50aW9uQ2hpcEVsZW1lbnQiLCJidWlsZFVzZXJNZW50aW9uVG9vbHRpcEVsZW1lbnQiLCJzcGxpdExhYmVsRmlyc3RXb3JkIiwiRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwibGluZUhlaWdodCIsImFsaWduU2VsZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3dXcmFwIiwid29yZEJyZWFrIiwiRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwiY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbCIsImlzVGFzayIsIm1lbnRpb25MYWJlbCIsInN0eWxlIiwiRWRpdGFibGVNZW50aW9uQ2hpcCIsIl9yZWYiLCJtZW50aW9uIiwibGFiZWwiLCJpY29uQ29sb3IiLCJ0eXBlIiwiZmciLCJpc1Byb2plY3QiLCJpY29uU2l6ZSIsImxhYmVsRWwiLCJvdXRlclN0eWxlIiwicG9zaXRpb24iLCJib3hTaXppbmciLCJ2ZXJ0aWNhbEFsaWduIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQiLCJmaXJzdFdvcmQiLCJyZXN0IiwibGVhZGluZ1N0eWxlIiwiYWxpZ25JdGVtcyIsImxlYWRpbmdXb3JkU3R5bGUiLCJfb2JqZWN0U3ByZWFkIiwicmVzdFN0eWxlIiwibWFyZ2luUmlnaHQiLCJ3aWR0aCIsImlkIiwiYnVpbGRDaGlwRWxlbWVudCIsImNoaXAiLCJkb2N1bWVudCIsInNldEF0dHJpYnV0ZSIsImNsYXNzTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsIm92ZXJmbG93IiwiaGVpZ2h0IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibW91bnROb2RlIiwiYXBwZW5kQ2hpbGQiLCJyb290IiwicmVuZGVyIiwiY3Vyc29yIiwib25jbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIndpbmRvdyIsIm9wZW4iLCJjb25jYXQiLCJ0b29sdGlwRWwiLCJjaGlwUmVtb3ZlZE9ic2VydmVyIiwicmVtb3ZlVXNlclRvb2x0aXAiLCJfY2hpcFJlbW92ZWRPYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJyZW1vdmUiLCJ3YXRjaENoaXBSZW1vdmVkRnJvbURvbSIsIl9jaGlwUmVtb3ZlZE9ic2VydmVyMiIsInBhcmVudCIsInBhcmVudE5vZGUiLCJNdXRhdGlvbk9ic2VydmVyIiwiaXNDb25uZWN0ZWQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJrZXkiLCJvcHRzIiwidCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsZWZ0IiwiTWF0aCIsIm1heCIsIm1pbiIsImlubmVyV2lkdGgiLCJ0b3AiLCJ0cmFuc2Zvcm0iLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25DaGlwL2J1aWxkQ2hpcEVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdHlwZSBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCdcbmltcG9ydCBpMThuIGZyb20gJy4uLy4uLy4uL2xhbmcnXG5pbXBvcnQgeyBDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUywgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGdldENvbnRleHRNZW50aW9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY29udGV4dE1lbnRpb25MYWJlbCdcbmltcG9ydCB7IG9wZW5UYXNrSW5Db3JQYW5lbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL29wZW5UYXNrSW5Db3JQYW5lbCdcbmltcG9ydCB7IGFwcGx5TWVudGlvbkNoaXBTdHlsZXMsIE1FTlRJT05fQ0hJUF9DT0xPUlMgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQge1xuICBidWlsZFNraWxsTWVudGlvbkNoaXBFbGVtZW50LFxuICBidWlsZFVzZXJNZW50aW9uVG9vbHRpcEVsZW1lbnQsXG4gIHNwbGl0TGFiZWxGaXJzdFdvcmQsXG59IGZyb20gJy4vYnVpbGRDaGlwRWxlbWVudC5oZWxwZXJzJ1xuXG5jb25zdCBFRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgYWxpZ25TZWxmOiAnYmFzZWxpbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gIG92ZXJmbG93V3JhcDogJ2JyZWFrLXdvcmQnLFxuICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbn1cblxuLyoqIFRleHRvIGRlIHRhcmVhOiBzaW4gYm9yZGUgaW5mZXJpb3I7IGVsIGFzcGVjdG8gZGUgZW5sYWNlIGxvIGRhIGVsIENTUyBnbG9iYWwgKDo6YmVmb3JlICsgY29sb3IpLiAqL1xuY29uc3QgRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgZm9udFdlaWdodDogJzYwMCcsXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAwLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCcsXG4gIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxufVxuXG5jb25zdCBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsID0gKGlzVGFzazogYm9vbGVhbiwgbWVudGlvbkxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFpc1Rhc2spIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFIH0sIG1lbnRpb25MYWJlbClcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX1RBU0tfTEFCRUxfU1RZTEUgfSwgbWVudGlvbkxhYmVsKVxufVxuXG50eXBlIEVkaXRhYmxlTWVudGlvbkNoaXBQcm9wcyA9IHtcbiAgbWVudGlvbjogQ29udGV4dE1lbnRpb25cbn1cblxuY29uc3QgRWRpdGFibGVNZW50aW9uQ2hpcCA9ICh7IG1lbnRpb24gfTogRWRpdGFibGVNZW50aW9uQ2hpcFByb3BzKSA9PiB7XG4gIGNvbnN0IG1lbnRpb25MYWJlbCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobWVudGlvbi5sYWJlbClcbiAgY29uc3QgaWNvbkNvbG9yID0gTUVOVElPTl9DSElQX0NPTE9SU1ttZW50aW9uLnR5cGVdLmZnXG4gIGNvbnN0IGlzVGFzayA9IG1lbnRpb24udHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGlzUHJvamVjdCA9IG1lbnRpb24udHlwZSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IGljb25TaXplID0gaXNUYXNrID8gMTYgOiAxNFxuICBjb25zdCBsYWJlbEVsID0gY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbChpc1Rhc2ssIG1lbnRpb25MYWJlbClcblxuICBjb25zdCBvdXRlclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH1cblxuICBpZiAoaXNUYXNrIHx8IGlzUHJvamVjdCkge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogb3V0ZXJTdHlsZSB9LCBsYWJlbEVsKVxuICB9XG5cbiAgY29uc3QgeyBmaXJzdFdvcmQsIHJlc3QgfSA9IHNwbGl0TGFiZWxGaXJzdFdvcmQobWVudGlvbkxhYmVsKVxuICBjb25zdCBsZWFkaW5nU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICB9XG4gIGNvbnN0IGxlYWRpbmdXb3JkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIH1cbiAgY29uc3QgcmVzdFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLkVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgJ3NwYW4nLFxuICAgIHsgc3R5bGU6IG91dGVyU3R5bGUgfSxcbiAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgJ3NwYW4nLFxuICAgICAgeyBzdHlsZTogbGVhZGluZ1N0eWxlIH0sXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMnB4JyxcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICcxJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTRweCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q29udGV4dE1lbnRpb25JY29uKG1lbnRpb24udHlwZSwgaWNvbkNvbG9yLCBtZW50aW9uLmlkLCBpY29uU2l6ZSlcbiAgICAgICksXG4gICAgICBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogbGVhZGluZ1dvcmRTdHlsZSB9LCBmaXJzdFdvcmQpXG4gICAgKSxcbiAgICByZXN0ID8gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IHJlc3RTdHlsZSB9LCByZXN0KSA6IG51bGxcbiAgKVxufVxuXG4vKipcbiAqIENyZWEgdW4gYDxzcGFuPmAgYXTDs21pY28gbGlzdG8gcGFyYSBpbnNlcnRhcnNlIGRlbnRybyBkZWwgY29udGVudGVkaXRhYmxlXG4gKiBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yYC4gU2UgbWFyY2EgY29uIGxvcyBgZGF0YS1tZW50aW9uKmAgbmVjZXNhcmlvcyBwYXJhXG4gKiBxdWUgYHVzZUNvbnRleHRNZW50aW9ucy5zZXJpYWxpemUoKWAgcHVlZGEgdm9sdmVyIGEgZXh0cmFlciBsYSBtZW50aW9uLlxuICpcbiAqIENvbXBhcnRlIGxvcyBlc3RpbG9zIGNvbiBlbCBjb21wb25lbnRlIGBDb250ZXh0TWVudGlvbkNoaXBgIHZpYVxuICogYGFwcGx5TWVudGlvbkNoaXBTdHlsZXNgLCBhc2VndXJhbmRvIHVuYSDDum5pY2EgZnVlbnRlIGRlIHZlcmRhZCB2aXN1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENoaXBFbGVtZW50ID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogSFRNTFNwYW5FbGVtZW50ID0+IHtcbiAgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3NraWxsJykge1xuICAgIHJldHVybiBidWlsZFNraWxsTWVudGlvbkNoaXBFbGVtZW50KG1lbnRpb24pXG4gIH1cblxuICBjb25zdCBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIGNoaXAuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWNoaXAnLCAndHJ1ZScpXG4gIGNoaXAuY2xhc3NOYW1lID0gQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1NcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLXN1cmZhY2UnLCAnZWRpdG9yJylcblxuICBhcHBseU1lbnRpb25DaGlwU3R5bGVzKGNoaXAsIG1lbnRpb24udHlwZSlcbiAgT2JqZWN0LmFzc2lnbihjaGlwLnN0eWxlLCB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgdmVydGljYWxBbGlnbjogJ2Jhc2VsaW5lJyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgbGluZUhlaWdodDogJzIwcHgnLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIG1pbkhlaWdodDogJ2F1dG8nLFxuICAgIG1heEhlaWdodDogJ25vbmUnLFxuICB9KVxuICBjb25zdCBtb3VudE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgbW91bnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJ1xuICBtb3VudE5vZGUuc3R5bGUubWF4V2lkdGggPSAnMTAwJSdcbiAgbW91bnROb2RlLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnYmFzZWxpbmUnXG4gIG1vdW50Tm9kZS5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgY2hpcC5hcHBlbmRDaGlsZChtb3VudE5vZGUpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KG1vdW50Tm9kZSlcblxuICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgIHJvb3QucmVuZGVyKGNyZWF0ZUVsZW1lbnQoRWRpdGFibGVNZW50aW9uQ2hpcCwgeyBtZW50aW9uIH0pKVxuICB9KVxuXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNoaXAuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInXG4gICAgY2hpcC5vbmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIG9wZW5UYXNrSW5Db3JQYW5lbChtZW50aW9uLmlkLCAnZGV0YWlsJylcbiAgICB9XG4gIH0gZWxzZSBpZiAobWVudGlvbi50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBjaGlwLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJ1xuICAgIGNoaXAub25jbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB3aW5kb3cub3BlbihgL3Byb2plY3RzLyR7bWVudGlvbi5pZH0vZGFzaGJvYXJkYCwgJ19ibGFuaycpXG4gICAgfVxuICB9IGVsc2UgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBjaGlwUmVtb3ZlZE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHJlbW92ZVVzZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbnVsbFxuICAgICAgaWYgKHRvb2x0aXBFbCkge1xuICAgICAgICB0b29sdGlwRWwucmVtb3ZlKClcbiAgICAgICAgdG9vbHRpcEVsID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTaSBlbCBjaGlwIHNlIGJvcnJhIGRlbCBlZGl0b3IgKEJhY2tzcGFjZSwgZXRjLikgbm8gc2llbXByZSBoYXkgYG1vdXNlbGVhdmVgOyBjZXJyYXIgZWwgdG9vbHRpcC4gKi9cbiAgICBjb25zdCB3YXRjaENoaXBSZW1vdmVkRnJvbURvbSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIWNoaXAuaXNDb25uZWN0ZWQpIHJlbW92ZVVzZXJUb29sdGlwKClcbiAgICAgIH0pXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGlmICh0b29sdGlwRWwpIHJldHVyblxuICAgICAgdG9vbHRpcEVsID0gYnVpbGRVc2VyTWVudGlvblRvb2x0aXBFbGVtZW50KG1lbnRpb24sIChrZXksIG9wdHMpID0+IGkxOG4udChrZXksIG9wdHMpKVxuICAgICAgY29uc3QgcmVjdCA9IGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIDMwMCwgcmVjdC5sZWZ0KSlcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gNHB4KSknXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbClcbiAgICAgIHdhdGNoQ2hpcFJlbW92ZWRGcm9tRG9tKClcbiAgICB9KVxuXG4gICAgY2hpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVtb3ZlVXNlclRvb2x0aXApXG4gIH1cblxuICByZXR1cm4gY2hpcFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxhQUFhLFFBQTRCLE9BQU87QUFDekQsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsVUFBVSxRQUFRLGtCQUFrQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sZUFBZTtBQUNoQyxTQUFTQywwQkFBMEIsUUFBd0IsK0JBQStCO0FBQzFGLFNBQVNDLHFCQUFxQixRQUFRLG9DQUFvQztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxvQ0FBb0M7QUFDakYsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBQ3RFLFNBQVNDLHNCQUFzQixFQUFFQyxtQkFBbUIsUUFBUSw2QkFBNkI7QUFDekYsU0FDRUMsNEJBQTRCLEVBQzVCQyw4QkFBOEIsRUFDOUJDLG1CQUFtQixRQUNkLDRCQUE0QjtBQUVuQyxJQUFNQyw2QkFBNEMsR0FB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
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { openTaskInCorPanel } from '../../../utils/openTaskInCorPanel';
|
|
2
|
+
import { buildChipElement } from './buildChipElement';
|
|
3
|
+
jest.mock('../../../lang', function () {
|
|
4
|
+
return {
|
|
5
|
+
__esModule: true,
|
|
6
|
+
"default": {
|
|
7
|
+
t: function t(_key, opts) {
|
|
8
|
+
var _opts$defaultValue;
|
|
9
|
+
return (_opts$defaultValue = opts === null || opts === void 0 ? void 0 : opts.defaultValue) !== null && _opts$defaultValue !== void 0 ? _opts$defaultValue : _key;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
});
|
|
14
|
+
jest.mock('../../../utils/openTaskInCorPanel', function () {
|
|
15
|
+
return {
|
|
16
|
+
openTaskInCorPanel: jest.fn()
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
describe('buildChipElement', function () {
|
|
20
|
+
beforeEach(function () {
|
|
21
|
+
document.body.innerHTML = '';
|
|
22
|
+
jest.clearAllMocks();
|
|
23
|
+
});
|
|
24
|
+
it('builds a skill chip without mounting react content', function () {
|
|
25
|
+
var chip = buildChipElement({
|
|
26
|
+
id: 'sk1',
|
|
27
|
+
type: 'skill',
|
|
28
|
+
label: 'Resumir'
|
|
29
|
+
});
|
|
30
|
+
expect(chip.getAttribute('data-mention-type')).toBe('skill');
|
|
31
|
+
expect(chip.textContent).toBe('Resumir');
|
|
32
|
+
expect(chip.querySelector('span')).toBeNull();
|
|
33
|
+
});
|
|
34
|
+
it('opens the task panel when clicking a task chip', function () {
|
|
35
|
+
var chip = buildChipElement({
|
|
36
|
+
id: 42,
|
|
37
|
+
type: 'task',
|
|
38
|
+
label: 'Bugfix'
|
|
39
|
+
});
|
|
40
|
+
chip.dispatchEvent(new MouseEvent('click', {
|
|
41
|
+
bubbles: true
|
|
42
|
+
}));
|
|
43
|
+
expect(openTaskInCorPanel).toHaveBeenCalledWith(42, 'detail');
|
|
44
|
+
});
|
|
45
|
+
it('opens the project dashboard in a new tab', function () {
|
|
46
|
+
var openSpy = jest.spyOn(window, 'open').mockImplementation(function () {
|
|
47
|
+
return null;
|
|
48
|
+
});
|
|
49
|
+
var chip = buildChipElement({
|
|
50
|
+
id: 99,
|
|
51
|
+
type: 'project',
|
|
52
|
+
label: 'Alpha'
|
|
53
|
+
});
|
|
54
|
+
chip.dispatchEvent(new MouseEvent('click', {
|
|
55
|
+
bubbles: true
|
|
56
|
+
}));
|
|
57
|
+
expect(openSpy).toHaveBeenCalledWith('/projects/99/dashboard', '_blank');
|
|
58
|
+
openSpy.mockRestore();
|
|
59
|
+
});
|
|
60
|
+
it('shows and removes the user tooltip on hover', function () {
|
|
61
|
+
var chip = buildChipElement({
|
|
62
|
+
id: 7,
|
|
63
|
+
type: 'user',
|
|
64
|
+
label: 'Yo',
|
|
65
|
+
metadata: {
|
|
66
|
+
name: 'Ana García',
|
|
67
|
+
email: 'ana@cor.com',
|
|
68
|
+
positionName: 'PM'
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
chip.dispatchEvent(new MouseEvent('mouseenter', {
|
|
72
|
+
bubbles: true
|
|
73
|
+
}));
|
|
74
|
+
expect(document.body.textContent).toContain('ana@cor.com');
|
|
75
|
+
chip.dispatchEvent(new MouseEvent('mouseleave', {
|
|
76
|
+
bubbles: true
|
|
77
|
+
}));
|
|
78
|
+
expect(document.body.textContent).not.toContain('ana@cor.com');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcGVuVGFza0luQ29yUGFuZWwiLCJidWlsZENoaXBFbGVtZW50IiwiamVzdCIsIm1vY2siLCJfX2VzTW9kdWxlIiwidCIsIl9rZXkiLCJvcHRzIiwiX29wdHMkZGVmYXVsdFZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiZm4iLCJkZXNjcmliZSIsImJlZm9yZUVhY2giLCJkb2N1bWVudCIsImJvZHkiLCJpbm5lckhUTUwiLCJjbGVhckFsbE1vY2tzIiwiaXQiLCJjaGlwIiwiaWQiLCJ0eXBlIiwibGFiZWwiLCJleHBlY3QiLCJnZXRBdHRyaWJ1dGUiLCJ0b0JlIiwidGV4dENvbnRlbnQiLCJxdWVyeVNlbGVjdG9yIiwidG9CZU51bGwiLCJkaXNwYXRjaEV2ZW50IiwiTW91c2VFdmVudCIsImJ1YmJsZXMiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIm9wZW5TcHkiLCJzcHlPbiIsIndpbmRvdyIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsIm1vY2tSZXN0b3JlIiwibWV0YWRhdGEiLCJuYW1lIiwiZW1haWwiLCJwb3NpdGlvbk5hbWUiLCJ0b0NvbnRhaW4iLCJub3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvbkNoaXAvYnVpbGRDaGlwRWxlbWVudC5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG9wZW5UYXNrSW5Db3JQYW5lbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL29wZW5UYXNrSW5Db3JQYW5lbCdcbmltcG9ydCB7IGJ1aWxkQ2hpcEVsZW1lbnQgfSBmcm9tICcuL2J1aWxkQ2hpcEVsZW1lbnQnXG5cbmplc3QubW9jaygnLi4vLi4vLi4vbGFuZycsICgpID0+ICh7XG4gIF9fZXNNb2R1bGU6IHRydWUsXG4gIGRlZmF1bHQ6IHtcbiAgICB0OiAoX2tleTogc3RyaW5nLCBvcHRzPzogeyBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfSkgPT4gb3B0cz8uZGVmYXVsdFZhbHVlID8/IF9rZXksXG4gIH0sXG59KSlcblxuamVzdC5tb2NrKCcuLi8uLi8uLi91dGlscy9vcGVuVGFza0luQ29yUGFuZWwnLCAoKSA9PiAoe1xuICBvcGVuVGFza0luQ29yUGFuZWw6IGplc3QuZm4oKSxcbn0pKVxuXG5kZXNjcmliZSgnYnVpbGRDaGlwRWxlbWVudCcsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnJ1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpXG4gIH0pXG5cbiAgaXQoJ2J1aWxkcyBhIHNraWxsIGNoaXAgd2l0aG91dCBtb3VudGluZyByZWFjdCBjb250ZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KHsgaWQ6ICdzazEnLCB0eXBlOiAnc2tpbGwnLCBsYWJlbDogJ1Jlc3VtaXInIH0pXG5cbiAgICBleHBlY3QoY2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJykpLnRvQmUoJ3NraWxsJylcbiAgICBleHBlY3QoY2hpcC50ZXh0Q29udGVudCkudG9CZSgnUmVzdW1pcicpXG4gICAgZXhwZWN0KGNoaXAucXVlcnlTZWxlY3Rvcignc3BhbicpKS50b0JlTnVsbCgpXG4gIH0pXG5cbiAgaXQoJ29wZW5zIHRoZSB0YXNrIHBhbmVsIHdoZW4gY2xpY2tpbmcgYSB0YXNrIGNoaXAnLCAoKSA9PiB7XG4gICAgY29uc3QgY2hpcCA9IGJ1aWxkQ2hpcEVsZW1lbnQoeyBpZDogNDIsIHR5cGU6ICd0YXNrJywgbGFiZWw6ICdCdWdmaXgnIH0pXG5cbiAgICBjaGlwLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJywgeyBidWJibGVzOiB0cnVlIH0pKVxuXG4gICAgZXhwZWN0KG9wZW5UYXNrSW5Db3JQYW5lbCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoNDIsICdkZXRhaWwnKVxuICB9KVxuXG4gIGl0KCdvcGVucyB0aGUgcHJvamVjdCBkYXNoYm9hcmQgaW4gYSBuZXcgdGFiJywgKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5TcHkgPSBqZXN0LnNweU9uKHdpbmRvdywgJ29wZW4nKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbnVsbClcbiAgICBjb25zdCBjaGlwID0gYnVpbGRDaGlwRWxlbWVudCh7IGlkOiA5OSwgdHlwZTogJ3Byb2plY3QnLCBsYWJlbDogJ0FscGhhJyB9KVxuXG4gICAgY2hpcC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHsgYnViYmxlczogdHJ1ZSB9KSlcblxuICAgIGV4cGVjdChvcGVuU3B5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnL3Byb2plY3RzLzk5L2Rhc2hib2FyZCcsICdfYmxhbmsnKVxuXG4gICAgb3BlblNweS5tb2NrUmVzdG9yZSgpXG4gIH0pXG5cbiAgaXQoJ3Nob3dzIGFuZCByZW1vdmVzIHRoZSB1c2VyIHRvb2x0aXAgb24gaG92ZXInLCAoKSA9PiB7XG4gICAgY29uc3QgY2hpcCA9IGJ1aWxkQ2hpcEVsZW1lbnQoe1xuICAgICAgaWQ6IDcsXG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBsYWJlbDogJ1lvJyxcbiAgICAgIG1ldGFkYXRhOiB7IG5hbWU6ICdBbmEgR2FyY8OtYScsIGVtYWlsOiAnYW5hQGNvci5jb20nLCBwb3NpdGlvbk5hbWU6ICdQTScgfSxcbiAgICB9KVxuXG4gICAgY2hpcC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZWVudGVyJywgeyBidWJibGVzOiB0cnVlIH0pKVxuICAgIGV4cGVjdChkb2N1bWVudC5ib2R5LnRleHRDb250ZW50KS50b0NvbnRhaW4oJ2FuYUBjb3IuY29tJylcblxuICAgIGNoaXAuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2VsZWF2ZScsIHsgYnViYmxlczogdHJ1ZSB9KSlcbiAgICBleHBlY3QoZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudCkubm90LnRvQ29udGFpbignYW5hQGNvci5jb20nKVxuICB9KVxufSlcbiJd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
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Espacio previo al insertar @, / o # cuando el caret no está en un límite válido. */
|
|
2
|
+
export var resolveTriggerInsertPrefix = function resolveTriggerInsertPrefix(previousChar) {
|
|
3
|
+
if (previousChar && !/[\s([{@]/.test(previousChar)) {
|
|
4
|
+
return ' ';
|
|
5
|
+
}
|
|
6
|
+
return '';
|
|
7
|
+
};
|
|
8
|
+
export var isPlaceholderTruncatedInEditor = function isPlaceholderTruncatedInEditor(editor, placeholder) {
|
|
9
|
+
var trimmed = placeholder.trim();
|
|
10
|
+
if (!trimmed) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
var clientWidth = editor.clientWidth;
|
|
14
|
+
if (clientWidth <= 4) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
var styles = window.getComputedStyle(editor);
|
|
18
|
+
var ctx = document.createElement('canvas').getContext('2d');
|
|
19
|
+
if (!ctx) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
ctx.font = "".concat(styles.fontWeight, " ").concat(styles.fontSize, " ").concat(styles.fontFamily);
|
|
23
|
+
var measured = ctx.measureText(trimmed).width;
|
|
24
|
+
var paddingLeft = parseFloat(styles.paddingLeft) || 0;
|
|
25
|
+
var paddingRight = parseFloat(styles.paddingRight) || 0;
|
|
26
|
+
var borderLeft = parseFloat(styles.borderLeftWidth) || 0;
|
|
27
|
+
var borderRight = parseFloat(styles.borderRightWidth) || 0;
|
|
28
|
+
var available = Math.max(0, clientWidth - paddingLeft - paddingRight - borderLeft - borderRight);
|
|
29
|
+
return measured > available + 1;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvbHZlVHJpZ2dlckluc2VydFByZWZpeCIsInByZXZpb3VzQ2hhciIsInRlc3QiLCJpc1BsYWNlaG9sZGVyVHJ1bmNhdGVkSW5FZGl0b3IiLCJlZGl0b3IiLCJwbGFjZWhvbGRlciIsInRyaW1tZWQiLCJ0cmltIiwiY2xpZW50V2lkdGgiLCJzdHlsZXMiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwiY3R4IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiZ2V0Q29udGV4dCIsImZvbnQiLCJjb25jYXQiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJmb250RmFtaWx5IiwibWVhc3VyZWQiLCJtZWFzdXJlVGV4dCIsIndpZHRoIiwicGFkZGluZ0xlZnQiLCJwYXJzZUZsb2F0IiwicGFkZGluZ1JpZ2h0IiwiYm9yZGVyTGVmdCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyUmlnaHRXaWR0aCIsImF2YWlsYWJsZSIsIk1hdGgiLCJtYXgiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvbkVkaXRvci9Db250ZXh0TWVudGlvbkVkaXRvci5oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBFc3BhY2lvIHByZXZpbyBhbCBpbnNlcnRhciBALCAvIG8gIyBjdWFuZG8gZWwgY2FyZXQgbm8gZXN0w6EgZW4gdW4gbMOtbWl0ZSB2w6FsaWRvLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4ID0gKHByZXZpb3VzQ2hhcjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKHByZXZpb3VzQ2hhciAmJiAhL1tcXHMoW3tAXS8udGVzdChwcmV2aW91c0NoYXIpKSB7XG4gICAgcmV0dXJuICcgJ1xuICB9XG4gIHJldHVybiAnJ1xufVxuXG5leHBvcnQgY29uc3QgaXNQbGFjZWhvbGRlclRydW5jYXRlZEluRWRpdG9yID0gKGVkaXRvcjogSFRNTEVsZW1lbnQsIHBsYWNlaG9sZGVyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IHBsYWNlaG9sZGVyLnRyaW0oKVxuICBpZiAoIXRyaW1tZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCB7IGNsaWVudFdpZHRoIH0gPSBlZGl0b3JcbiAgaWYgKGNsaWVudFdpZHRoIDw9IDQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgY29uc3QgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKVxuICBpZiAoIWN0eCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGN0eC5mb250ID0gYCR7c3R5bGVzLmZvbnRXZWlnaHR9ICR7c3R5bGVzLmZvbnRTaXplfSAke3N0eWxlcy5mb250RmFtaWx5fWBcbiAgY29uc3QgbWVhc3VyZWQgPSBjdHgubWVhc3VyZVRleHQodHJpbW1lZCkud2lkdGhcblxuICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdMZWZ0KSB8fCAwXG4gIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdSaWdodCkgfHwgMFxuICBjb25zdCBib3JkZXJMZWZ0ID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyTGVmdFdpZHRoKSB8fCAwXG4gIGNvbnN0IGJvcmRlclJpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyUmlnaHRXaWR0aCkgfHwgMFxuICBjb25zdCBhdmFpbGFibGUgPSBNYXRoLm1heCgwLCBjbGllbnRXaWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0IC0gYm9yZGVyTGVmdCAtIGJvcmRlclJpZ2h0KVxuXG4gIHJldHVybiBtZWFzdXJlZCA+IGF2YWlsYWJsZSArIDFcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxPQUFPLElBQU1BLDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBMEJBLENBQUlDLFlBQW9CLEVBQWE7RUFDMUUsSUFBSUEsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDQyxJQUFJLENBQUNELFlBQVksQ0FBQyxFQUFFO0lBQ2xELE9BQU8sR0FBRztFQUNaO0VBQ0EsT0FBTyxFQUFFO0FBQ1gsQ0FBQztBQUVELE9BQU8sSUFBTUUsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FBSUMsTUFBbUIsRUFBRUMsV0FBbUIsRUFBYztFQUNuRyxJQUFNQyxPQUFPLEdBQUdELFdBQVcsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7RUFDbEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPLEtBQUs7RUFDZDtFQUNBLElBQVFFLFdBQVcsR0FBS0osTUFBTSxDQUF0QkksV0FBVztFQUNuQixJQUFJQSxXQUFXLElBQUksQ0FBQyxFQUFFO0lBQ3BCLE9BQU8sS0FBSztFQUNkO0VBRUEsSUFBTUMsTUFBTSxHQUFHQyxNQUFNLENBQUNDLGdCQUFnQixDQUFDUCxNQUFNLENBQUM7RUFDOUMsSUFBTVEsR0FBRyxHQUFHQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQ0MsVUFBVSxDQUFDLElBQUksQ0FBQztFQUM3RCxJQUFJLENBQUNILEdBQUcsRUFBRTtJQUNSLE9BQU8sS0FBSztFQUNkO0VBQ0FBLEdBQUcsQ0FBQ0ksSUFBSSxNQUFBQyxNQUFBLENBQU1SLE1BQU0sQ0FBQ1MsVUFBVSxPQUFBRCxNQUFBLENBQUlSLE1BQU0sQ0FBQ1UsUUFBUSxPQUFBRixNQUFBLENBQUlSLE1BQU0sQ0FBQ1csVUFBVSxDQUFFO0VBQ3pFLElBQU1DLFFBQVEsR0FBR1QsR0FBRyxDQUFDVSxXQUFXLENBQUNoQixPQUFPLENBQUMsQ0FBQ2lCLEtBQUs7RUFFL0MsSUFBTUMsV0FBVyxHQUFHQyxVQUFVLENBQUNoQixNQUFNLENBQUNlLFdBQVcsQ0FBQyxJQUFJLENBQUM7RUFDdkQsSUFBTUUsWUFBWSxHQUFHRCxVQUFVLENBQUNoQixNQUFNLENBQUNpQixZQUFZLENBQUMsSUFBSSxDQUFDO0VBQ3pELElBQU1DLFVBQVUsR0FBR0YsVUFBVSxDQUFDaEIsTUFBTSxDQUFDbUIsZUFBZSxDQUFDLElBQUksQ0FBQztFQUMxRCxJQUFNQyxXQUFXLEdBQUdKLFVBQVUsQ0FBQ2hCLE1BQU0sQ0FBQ3FCLGdCQUFnQixDQUFDLElBQUksQ0FBQztFQUM1RCxJQUFNQyxTQUFTLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRXpCLFdBQVcsR0FBR2dCLFdBQVcsR0FBR0UsWUFBWSxHQUFHQyxVQUFVLEdBQUdFLFdBQVcsQ0FBQztFQUVsRyxPQUFPUixRQUFRLEdBQUdVLFNBQVMsR0FBRyxDQUFDO0FBQ2pDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { isPlaceholderTruncatedInEditor, resolveTriggerInsertPrefix } from './ContextMentionEditor.helpers';
|
|
2
|
+
describe('ContextMentionEditor.helpers', function () {
|
|
3
|
+
describe('resolveTriggerInsertPrefix', function () {
|
|
4
|
+
it('adds a space when the previous char is not a trigger boundary', function () {
|
|
5
|
+
expect(resolveTriggerInsertPrefix('a')).toBe(' ');
|
|
6
|
+
expect(resolveTriggerInsertPrefix('(')).toBe('');
|
|
7
|
+
expect(resolveTriggerInsertPrefix('@')).toBe('');
|
|
8
|
+
expect(resolveTriggerInsertPrefix('')).toBe('');
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
describe('isPlaceholderTruncatedInEditor', function () {
|
|
12
|
+
it('returns false for empty placeholders or narrow editors', function () {
|
|
13
|
+
var editor = document.createElement('div');
|
|
14
|
+
Object.defineProperty(editor, 'clientWidth', {
|
|
15
|
+
value: 0,
|
|
16
|
+
configurable: true
|
|
17
|
+
});
|
|
18
|
+
expect(isPlaceholderTruncatedInEditor(editor, ' ')).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
it('detects when measured text exceeds available width', function () {
|
|
21
|
+
var editor = document.createElement('div');
|
|
22
|
+
Object.defineProperty(editor, 'clientWidth', {
|
|
23
|
+
value: 80,
|
|
24
|
+
configurable: true
|
|
25
|
+
});
|
|
26
|
+
jest.spyOn(window, 'getComputedStyle').mockReturnValue({
|
|
27
|
+
fontWeight: '400',
|
|
28
|
+
fontSize: '16px',
|
|
29
|
+
fontFamily: 'Arial',
|
|
30
|
+
paddingLeft: '0px',
|
|
31
|
+
paddingRight: '0px',
|
|
32
|
+
borderLeftWidth: '0px',
|
|
33
|
+
borderRightWidth: '0px'
|
|
34
|
+
});
|
|
35
|
+
var measureSpy = jest.spyOn(CanvasRenderingContext2D.prototype, 'measureText').mockReturnValue({
|
|
36
|
+
width: 200
|
|
37
|
+
});
|
|
38
|
+
expect(isPlaceholderTruncatedInEditor(editor, 'Placeholder largo')).toBe(true);
|
|
39
|
+
measureSpy.mockReturnValue({
|
|
40
|
+
width: 10
|
|
41
|
+
});
|
|
42
|
+
expect(isPlaceholderTruncatedInEditor(editor, 'Corto')).toBe(false);
|
|
43
|
+
measureSpy.mockRestore();
|
|
44
|
+
jest.restoreAllMocks();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1BsYWNlaG9sZGVyVHJ1bmNhdGVkSW5FZGl0b3IiLCJyZXNvbHZlVHJpZ2dlckluc2VydFByZWZpeCIsImRlc2NyaWJlIiwiaXQiLCJleHBlY3QiLCJ0b0JlIiwiZWRpdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsImplc3QiLCJzcHlPbiIsIndpbmRvdyIsIm1vY2tSZXR1cm5WYWx1ZSIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJtZWFzdXJlU3B5IiwiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIiwicHJvdG90eXBlIiwid2lkdGgiLCJtb2NrUmVzdG9yZSIsInJlc3RvcmVBbGxNb2NrcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uRWRpdG9yL0NvbnRleHRNZW50aW9uRWRpdG9yLmhlbHBlcnMuc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYWNlaG9sZGVyVHJ1bmNhdGVkSW5FZGl0b3IsIHJlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4IH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkVkaXRvci5oZWxwZXJzJ1xuXG5kZXNjcmliZSgnQ29udGV4dE1lbnRpb25FZGl0b3IuaGVscGVycycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3Jlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4JywgKCkgPT4ge1xuICAgIGl0KCdhZGRzIGEgc3BhY2Ugd2hlbiB0aGUgcHJldmlvdXMgY2hhciBpcyBub3QgYSB0cmlnZ2VyIGJvdW5kYXJ5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4KCdhJykpLnRvQmUoJyAnKVxuICAgICAgZXhwZWN0KHJlc29sdmVUcmlnZ2VySW5zZXJ0UHJlZml4KCcoJykpLnRvQmUoJycpXG4gICAgICBleHBlY3QocmVzb2x2ZVRyaWdnZXJJbnNlcnRQcmVmaXgoJ0AnKSkudG9CZSgnJylcbiAgICAgIGV4cGVjdChyZXNvbHZlVHJpZ2dlckluc2VydFByZWZpeCgnJykpLnRvQmUoJycpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgnaXNQbGFjZWhvbGRlclRydW5jYXRlZEluRWRpdG9yJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBwbGFjZWhvbGRlcnMgb3IgbmFycm93IGVkaXRvcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVkaXRvciwgJ2NsaWVudFdpZHRoJywgeyB2YWx1ZTogMCwgY29uZmlndXJhYmxlOiB0cnVlIH0pXG4gICAgICBleHBlY3QoaXNQbGFjZWhvbGRlclRydW5jYXRlZEluRWRpdG9yKGVkaXRvciwgJyAgICcpKS50b0JlKGZhbHNlKVxuICAgIH0pXG5cbiAgICBpdCgnZGV0ZWN0cyB3aGVuIG1lYXN1cmVkIHRleHQgZXhjZWVkcyBhdmFpbGFibGUgd2lkdGgnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVkaXRvciwgJ2NsaWVudFdpZHRoJywgeyB2YWx1ZTogODAsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KVxuICAgICAgamVzdC5zcHlPbih3aW5kb3csICdnZXRDb21wdXRlZFN0eWxlJykubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgICAgIGZvbnRGYW1pbHk6ICdBcmlhbCcsXG4gICAgICAgIHBhZGRpbmdMZWZ0OiAnMHB4JyxcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiAnMHB4JyxcbiAgICAgICAgYm9yZGVyTGVmdFdpZHRoOiAnMHB4JyxcbiAgICAgICAgYm9yZGVyUmlnaHRXaWR0aDogJzBweCcsXG4gICAgICB9IGFzIENTU1N0eWxlRGVjbGFyYXRpb24pXG5cbiAgICAgIGNvbnN0IG1lYXN1cmVTcHkgPSBqZXN0LnNweU9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUsICdtZWFzdXJlVGV4dCcpLm1vY2tSZXR1cm5WYWx1ZSh7XG4gICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICB9IGFzIFRleHRNZXRyaWNzKVxuXG4gICAgICBleHBlY3QoaXNQbGFjZWhvbGRlclRydW5jYXRlZEluRWRpdG9yKGVkaXRvciwgJ1BsYWNlaG9sZGVyIGxhcmdvJykpLnRvQmUodHJ1ZSlcblxuICAgICAgbWVhc3VyZVNweS5tb2NrUmV0dXJuVmFsdWUoeyB3aWR0aDogMTAgfSBhcyBUZXh0TWV0cmljcylcbiAgICAgIGV4cGVjdChpc1BsYWNlaG9sZGVyVHJ1bmNhdGVkSW5FZGl0b3IoZWRpdG9yLCAnQ29ydG8nKSkudG9CZShmYWxzZSlcblxuICAgICAgbWVhc3VyZVNweS5tb2NrUmVzdG9yZSgpXG4gICAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpXG4gICAgfSlcbiAgfSlcbn0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLDhCQUE4QixFQUFFQywwQkFBMEIsUUFBUSxnQ0FBZ0M7QUFFM0dDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxZQUFNO0VBQzdDQSxRQUFRLENBQUMsNEJBQTRCLEVBQUUsWUFBTTtJQUMzQ0MsRUFBRSxDQUFDLCtEQUErRCxFQUFFLFlBQU07TUFDeEVDLE1BQU0sQ0FBQ0gsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUNqREQsTUFBTSxDQUFDSCwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDSSxJQUFJLENBQUMsRUFBRSxDQUFDO01BQ2hERCxNQUFNLENBQUNILDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNJLElBQUksQ0FBQyxFQUFFLENBQUM7TUFDaERELE1BQU0sQ0FBQ0gsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRkgsUUFBUSxDQUFDLGdDQUFnQyxFQUFFLFlBQU07SUFDL0NDLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxZQUFNO01BQ2pFLElBQU1HLE1BQU0sR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsS0FBSyxDQUFDO01BQzVDQyxNQUFNLENBQUNDLGNBQWMsQ0FBQ0osTUFBTSxFQUFFLGFBQWEsRUFBRTtRQUFFSyxLQUFLLEVBQUUsQ0FBQztRQUFFQyxZQUFZLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFDOUVSLE1BQU0sQ0FBQ0osOEJBQThCLENBQUNNLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25FLENBQUMsQ0FBQztJQUVGRixFQUFFLENBQUMsb0RBQW9ELEVBQUUsWUFBTTtNQUM3RCxJQUFNRyxNQUFNLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLEtBQUssQ0FBQztNQUM1Q0MsTUFBTSxDQUFDQyxjQUFjLENBQUNKLE1BQU0sRUFBRSxhQUFhLEVBQUU7UUFBRUssS0FBSyxFQUFFLEVBQUU7UUFBRUMsWUFBWSxFQUFFO01BQUssQ0FBQyxDQUFDO01BQy9FQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUNDLGVBQWUsQ0FBQztRQUNyREMsVUFBVSxFQUFFLEtBQUs7UUFDakJDLFFBQVEsRUFBRSxNQUFNO1FBQ2hCQyxVQUFVLEVBQUUsT0FBTztRQUNuQkMsV0FBVyxFQUFFLEtBQUs7UUFDbEJDLFlBQVksRUFBRSxLQUFLO1FBQ25CQyxlQUFlLEVBQUUsS0FBSztRQUN0QkMsZ0JBQWdCLEVBQUU7TUFDcEIsQ0FBd0IsQ0FBQztNQUV6QixJQUFNQyxVQUFVLEdBQUdYLElBQUksQ0FBQ0MsS0FBSyxDQUFDVyx3QkFBd0IsQ0FBQ0MsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDVixlQUFlLENBQUM7UUFDL0ZXLEtBQUssRUFBRTtNQUNULENBQWdCLENBQUM7TUFFakJ2QixNQUFNLENBQUNKLDhCQUE4QixDQUFDTSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDO01BRTlFbUIsVUFBVSxDQUFDUixlQUFlLENBQUM7UUFBRVcsS0FBSyxFQUFFO01BQUcsQ0FBZ0IsQ0FBQztNQUN4RHZCLE1BQU0sQ0FBQ0osOEJBQThCLENBQUNNLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDO01BRW5FbUIsVUFBVSxDQUFDSSxXQUFXLENBQUMsQ0FBQztNQUN4QmYsSUFBSSxDQUFDZ0IsZUFBZSxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|