@projectcor/maia-components 2.49.0-beta.1 → 2.49.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.helpers.js +37 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +137 -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.helpers.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -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 +109 -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 +59 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -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.attachments.helpers.js +74 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +130 -177
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +641 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -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 +146 -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.helpers.js +101 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -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.helpers.js +23 -0
- package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.js +11 -20
- package/lib/components/atoms/TextArea/TextArea.spec.js +126 -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 +82 -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 +6 -29
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +742 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -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.helpers.js +370 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +285 -302
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIHome/styles.js +85 -78
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +742 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +235 -245
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +541 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +522 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1394 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +250 -349
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1401 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- 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 +49 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +100 -93
- 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.helpers.js +39 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -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 +104 -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.helpers.js +43 -0
- package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +65 -44
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +464 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +310 -644
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -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 +246 -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/formatExtensions.js +7 -8
- package/lib/constants/formatExtensions.spec.js +14 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/maiaFeatureAccess.spec.js +30 -0
- package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
- package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
- package/lib/constants/permissions/clientRoleAccess.spec.js +65 -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/constants/plannerSyncEvents.spec.js +31 -0
- package/lib/constants/taskUrls.spec.js +9 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +75 -86
- 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.helpers.js +144 -0
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
- package/lib/hooks/useChatManager/useChatManager.js +272 -745
- package/lib/hooks/useChatManager/useChatManager.spec.js +2409 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -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 +212 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
- package/lib/hooks/useContextMentions.js +5 -223
- package/lib/hooks/useContextMentions.spec.js +338 -0
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -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 +407 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
- package/lib/hooks/useEntitySearch.js +52 -436
- package/lib/hooks/useEntitySearch.spec.js +718 -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 +100 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMentionPopover.spec.js +392 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -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.helpers.js +86 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +417 -0
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +89 -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 +151 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
- 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/br/index.js +26 -7
- package/lib/lang/en/index.js +26 -7
- package/lib/lang/es/index.js +26 -7
- package/lib/lang/fr/index.js +26 -7
- package/lib/services/appcues.spec.js +37 -0
- 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 +496 -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 +241 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
- package/lib/services/maia/Agents/getAgents.js +90 -282
- package/lib/services/maia/Agents/getAgents.spec.js +1135 -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 +225 -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.helpers.js +223 -0
- package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
- package/lib/services/utils/mapChatMessages.js +25 -254
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +145 -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.helpers.js +134 -0
- package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
- package/lib/store/sessions/sessionStreamManager.js +209 -277
- package/lib/store/sessions/sessionStreamManager.spec.js +939 -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/Chat.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/types/reasoning.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +48 -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 +44 -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 +136 -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 +98 -0
- package/lib/utils/openTaskInCorPanel.spec.js +43 -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.helpers.js +110 -0
- package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
- package/lib/utils/renderContextMentions.js +4 -110
- package/lib/utils/renderContextMentions.spec.js +268 -0
- package/lib/utils/retryCompletion.spec.js +181 -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.helpers.js +223 -0
- package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
- package/lib/utils/streamActivityMessages.js +33 -238
- package/lib/utils/streamActivityMessages.spec.js +336 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +2 -2
- package/README.md +0 -2
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
- package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
- package/lib/types/contextCompaction.js +0 -48
- package/lib/types/jest-dom.d.js +0 -2
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** Líneas visuales con wrap de palabras al ancho dado (aprox. el navegador en LTR). */
|
|
2
|
+
export var countVisualLinesWrapped = function countVisualLinesWrapped(raw, contentWidthPx, measureTextWidth) {
|
|
3
|
+
if (contentWidthPx <= 1) {
|
|
4
|
+
return 1;
|
|
5
|
+
}
|
|
6
|
+
var paragraphs = raw.split('\n');
|
|
7
|
+
var total = paragraphs.reduce(function (sum, paragraph) {
|
|
8
|
+
if (paragraph.length === 0) {
|
|
9
|
+
return sum + 1;
|
|
10
|
+
}
|
|
11
|
+
var words = paragraph.split(/\s+/).filter(function (word) {
|
|
12
|
+
return word.length > 0;
|
|
13
|
+
});
|
|
14
|
+
var _words$reduce = words.reduce(function (state, word, index) {
|
|
15
|
+
var wordWidth = measureTextWidth(word);
|
|
16
|
+
var spaceWidth = index > 0 ? measureTextWidth(' ') : 0;
|
|
17
|
+
if (wordWidth > contentWidthPx) {
|
|
18
|
+
var lines = state.linesInParagraph,
|
|
19
|
+
currentLineWidth = state.currentLineWidth;
|
|
20
|
+
if (currentLineWidth > 0) {
|
|
21
|
+
lines += 1;
|
|
22
|
+
currentLineWidth = 0;
|
|
23
|
+
}
|
|
24
|
+
lines += Math.ceil(wordWidth / contentWidthPx) - 1;
|
|
25
|
+
return {
|
|
26
|
+
linesInParagraph: lines,
|
|
27
|
+
currentLineWidth: 0
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
var candidateWidth = state.currentLineWidth === 0 ? wordWidth : state.currentLineWidth + spaceWidth + wordWidth;
|
|
31
|
+
if (candidateWidth > contentWidthPx && state.currentLineWidth > 0) {
|
|
32
|
+
return {
|
|
33
|
+
linesInParagraph: state.linesInParagraph + 1,
|
|
34
|
+
currentLineWidth: wordWidth
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
linesInParagraph: state.linesInParagraph,
|
|
39
|
+
currentLineWidth: candidateWidth
|
|
40
|
+
};
|
|
41
|
+
}, {
|
|
42
|
+
linesInParagraph: 1,
|
|
43
|
+
currentLineWidth: 0
|
|
44
|
+
}),
|
|
45
|
+
linesInParagraph = _words$reduce.linesInParagraph;
|
|
46
|
+
return sum + linesInParagraph;
|
|
47
|
+
}, 0);
|
|
48
|
+
return Math.max(1, total);
|
|
49
|
+
};
|
|
50
|
+
export var resolveSingleLineOuterHeight = function resolveSingleLineOuterHeight(metrics) {
|
|
51
|
+
return Math.round(metrics.lineHeight + metrics.paddingTop + metrics.paddingBottom + metrics.borderTop + metrics.borderBottom);
|
|
52
|
+
};
|
|
53
|
+
export var detectMultilineFromCanvas = function detectMultilineFromCanvas(text, wrapCheckWidth, measureSegmentWidth, scrollHeight, singleLineHeight) {
|
|
54
|
+
var lines = text.split('\n');
|
|
55
|
+
if (lines.length > 1) return true;
|
|
56
|
+
if (lines.some(function (line) {
|
|
57
|
+
return line.trim() !== '' && measureSegmentWidth(line) > wrapCheckWidth;
|
|
58
|
+
})) return true;
|
|
59
|
+
return scrollHeight > singleLineHeight * 2.05;
|
|
60
|
+
};
|
|
61
|
+
export var resolveVisualLineCounts = function resolveVisualLineCounts(params) {
|
|
62
|
+
var visualLinesAtWrapWidth = 1;
|
|
63
|
+
var visualLinesAtCurrentWidth = 1;
|
|
64
|
+
if (!params.isEmpty && params.canvasContext) {
|
|
65
|
+
visualLinesAtWrapWidth = countVisualLinesWrapped(params.text, params.wrapCheckWidth, params.measureSegmentWidth);
|
|
66
|
+
visualLinesAtCurrentWidth = countVisualLinesWrapped(params.text, params.textareaWidth, params.measureSegmentWidth);
|
|
67
|
+
} else if (!params.isEmpty && !params.canvasContext) {
|
|
68
|
+
visualLinesAtWrapWidth = params.scrollHeight > params.singleLineHeight * 1.85 ? Math.ceil(params.scrollHeight / params.singleLineHeight) : 1;
|
|
69
|
+
visualLinesAtCurrentWidth = visualLinesAtWrapWidth;
|
|
70
|
+
}
|
|
71
|
+
var linesForHeight = !params.isEmpty && params.canvasContext ? visualLinesAtCurrentWidth : visualLinesAtWrapWidth;
|
|
72
|
+
return {
|
|
73
|
+
visualLinesAtWrapWidth: visualLinesAtWrapWidth,
|
|
74
|
+
visualLinesAtCurrentWidth: visualLinesAtCurrentWidth,
|
|
75
|
+
linesForHeight: linesForHeight
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
export var resolveTextareaContentHeight = function resolveTextareaContentHeight(params) {
|
|
79
|
+
var isEmpty = params.isEmpty,
|
|
80
|
+
hasMultipleVisualLines = params.hasMultipleVisualLines,
|
|
81
|
+
linesForHeight = params.linesForHeight,
|
|
82
|
+
scrollHeight = params.scrollHeight,
|
|
83
|
+
minHeight = params.minHeight,
|
|
84
|
+
maxHeight = params.maxHeight,
|
|
85
|
+
singleLineOuterHeight = params.singleLineOuterHeight,
|
|
86
|
+
lineHeight = params.lineHeight,
|
|
87
|
+
paddingTop = params.paddingTop,
|
|
88
|
+
paddingBottom = params.paddingBottom,
|
|
89
|
+
borderTop = params.borderTop,
|
|
90
|
+
borderBottom = params.borderBottom;
|
|
91
|
+
if (isEmpty || !hasMultipleVisualLines) return singleLineOuterHeight;
|
|
92
|
+
if (linesForHeight <= 1) return Math.min(Math.max(singleLineOuterHeight, minHeight), maxHeight);
|
|
93
|
+
var snappedHeight = paddingTop + paddingBottom + borderTop + borderBottom + linesForHeight * lineHeight;
|
|
94
|
+
return Math.min(Math.max(Math.min(scrollHeight, snappedHeight), minHeight), maxHeight);
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3VudFZpc3VhbExpbmVzV3JhcHBlZCIsInJhdyIsImNvbnRlbnRXaWR0aFB4IiwibWVhc3VyZVRleHRXaWR0aCIsInBhcmFncmFwaHMiLCJzcGxpdCIsInRvdGFsIiwicmVkdWNlIiwic3VtIiwicGFyYWdyYXBoIiwibGVuZ3RoIiwid29yZHMiLCJmaWx0ZXIiLCJ3b3JkIiwiX3dvcmRzJHJlZHVjZSIsInN0YXRlIiwiaW5kZXgiLCJ3b3JkV2lkdGgiLCJzcGFjZVdpZHRoIiwibGluZXMiLCJsaW5lc0luUGFyYWdyYXBoIiwiY3VycmVudExpbmVXaWR0aCIsIk1hdGgiLCJjZWlsIiwiY2FuZGlkYXRlV2lkdGgiLCJtYXgiLCJyZXNvbHZlU2luZ2xlTGluZU91dGVySGVpZ2h0IiwibWV0cmljcyIsInJvdW5kIiwibGluZUhlaWdodCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wIiwiYm9yZGVyQm90dG9tIiwiZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcyIsInRleHQiLCJ3cmFwQ2hlY2tXaWR0aCIsIm1lYXN1cmVTZWdtZW50V2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJzaW5nbGVMaW5lSGVpZ2h0Iiwic29tZSIsImxpbmUiLCJ0cmltIiwicmVzb2x2ZVZpc3VhbExpbmVDb3VudHMiLCJwYXJhbXMiLCJ2aXN1YWxMaW5lc0F0V3JhcFdpZHRoIiwidmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aCIsImlzRW1wdHkiLCJjYW52YXNDb250ZXh0IiwidGV4dGFyZWFXaWR0aCIsImxpbmVzRm9ySGVpZ2h0IiwicmVzb2x2ZVRleHRhcmVhQ29udGVudEhlaWdodCIsImhhc011bHRpcGxlVmlzdWFsTGluZXMiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJzaW5nbGVMaW5lT3V0ZXJIZWlnaHQiLCJtaW4iLCJzbmFwcGVkSGVpZ2h0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dEVkaXRvci5oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBMw61uZWFzIHZpc3VhbGVzIGNvbiB3cmFwIGRlIHBhbGFicmFzIGFsIGFuY2hvIGRhZG8gKGFwcm94LiBlbCBuYXZlZ2Fkb3IgZW4gTFRSKS4gKi9cbmV4cG9ydCBjb25zdCBjb3VudFZpc3VhbExpbmVzV3JhcHBlZCA9IChcbiAgcmF3OiBzdHJpbmcsXG4gIGNvbnRlbnRXaWR0aFB4OiBudW1iZXIsXG4gIG1lYXN1cmVUZXh0V2lkdGg6IChzZWdtZW50OiBzdHJpbmcpID0+IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgaWYgKGNvbnRlbnRXaWR0aFB4IDw9IDEpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IHBhcmFncmFwaHMgPSByYXcuc3BsaXQoJ1xcbicpXG5cbiAgY29uc3QgdG90YWwgPSBwYXJhZ3JhcGhzLnJlZHVjZSgoc3VtLCBwYXJhZ3JhcGgpID0+IHtcbiAgICBpZiAocGFyYWdyYXBoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN1bSArIDFcbiAgICB9XG5cbiAgICBjb25zdCB3b3JkcyA9IHBhcmFncmFwaC5zcGxpdCgvXFxzKy8pLmZpbHRlcih3b3JkID0+IHdvcmQubGVuZ3RoID4gMClcblxuICAgIGNvbnN0IHsgbGluZXNJblBhcmFncmFwaCB9ID0gd29yZHMucmVkdWNlKFxuICAgICAgKHN0YXRlLCB3b3JkLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB3b3JkV2lkdGggPSBtZWFzdXJlVGV4dFdpZHRoKHdvcmQpXG4gICAgICAgIGNvbnN0IHNwYWNlV2lkdGggPSBpbmRleCA+IDAgPyBtZWFzdXJlVGV4dFdpZHRoKCcgJykgOiAwXG5cbiAgICAgICAgaWYgKHdvcmRXaWR0aCA+IGNvbnRlbnRXaWR0aFB4KSB7XG4gICAgICAgICAgbGV0IHsgbGluZXNJblBhcmFncmFwaDogbGluZXMsIGN1cnJlbnRMaW5lV2lkdGggfSA9IHN0YXRlXG4gICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBsaW5lcyArPSAxXG4gICAgICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gMFxuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5lcyArPSBNYXRoLmNlaWwod29yZFdpZHRoIC8gY29udGVudFdpZHRoUHgpIC0gMVxuICAgICAgICAgIHJldHVybiB7IGxpbmVzSW5QYXJhZ3JhcGg6IGxpbmVzLCBjdXJyZW50TGluZVdpZHRoOiAwIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVdpZHRoID1cbiAgICAgICAgICBzdGF0ZS5jdXJyZW50TGluZVdpZHRoID09PSAwID8gd29yZFdpZHRoIDogc3RhdGUuY3VycmVudExpbmVXaWR0aCArIHNwYWNlV2lkdGggKyB3b3JkV2lkdGhcbiAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZHRoID4gY29udGVudFdpZHRoUHggJiYgc3RhdGUuY3VycmVudExpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4geyBsaW5lc0luUGFyYWdyYXBoOiBzdGF0ZS5saW5lc0luUGFyYWdyYXBoICsgMSwgY3VycmVudExpbmVXaWR0aDogd29yZFdpZHRoIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBsaW5lc0luUGFyYWdyYXBoOiBzdGF0ZS5saW5lc0luUGFyYWdyYXBoLCBjdXJyZW50TGluZVdpZHRoOiBjYW5kaWRhdGVXaWR0aCB9XG4gICAgICB9LFxuICAgICAgeyBsaW5lc0luUGFyYWdyYXBoOiAxLCBjdXJyZW50TGluZVdpZHRoOiAwIH1cbiAgICApXG5cbiAgICByZXR1cm4gc3VtICsgbGluZXNJblBhcmFncmFwaFxuICB9LCAwKVxuXG4gIHJldHVybiBNYXRoLm1heCgxLCB0b3RhbClcbn1cblxuZXhwb3J0IHR5cGUgVGV4dGFyZWFCb3hNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiBudW1iZXJcbiAgcGFkZGluZ1RvcDogbnVtYmVyXG4gIHBhZGRpbmdCb3R0b206IG51bWJlclxuICBib3JkZXJUb3A6IG51bWJlclxuICBib3JkZXJCb3R0b206IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVNpbmdsZUxpbmVPdXRlckhlaWdodCA9IChtZXRyaWNzOiBUZXh0YXJlYUJveE1ldHJpY3MpOiBudW1iZXIgPT5cbiAgTWF0aC5yb3VuZChtZXRyaWNzLmxpbmVIZWlnaHQgKyBtZXRyaWNzLnBhZGRpbmdUb3AgKyBtZXRyaWNzLnBhZGRpbmdCb3R0b20gKyBtZXRyaWNzLmJvcmRlclRvcCArIG1ldHJpY3MuYm9yZGVyQm90dG9tKVxuXG5leHBvcnQgY29uc3QgZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcyA9IChcbiAgdGV4dDogc3RyaW5nLFxuICB3cmFwQ2hlY2tXaWR0aDogbnVtYmVyLFxuICBtZWFzdXJlU2VnbWVudFdpZHRoOiAoc2VnbWVudDogc3RyaW5nKSA9PiBudW1iZXIsXG4gIHNjcm9sbEhlaWdodDogbnVtYmVyLFxuICBzaW5nbGVMaW5lSGVpZ2h0OiBudW1iZXJcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpXG4gIGlmIChsaW5lcy5sZW5ndGggPiAxKSByZXR1cm4gdHJ1ZVxuICBpZiAobGluZXMuc29tZShsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJyAmJiBtZWFzdXJlU2VnbWVudFdpZHRoKGxpbmUpID4gd3JhcENoZWNrV2lkdGgpKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gc2Nyb2xsSGVpZ2h0ID4gc2luZ2xlTGluZUhlaWdodCAqIDIuMDVcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVWaXN1YWxMaW5lQ291bnRzID0gKHBhcmFtczoge1xuICBpc0VtcHR5OiBib29sZWFuXG4gIGNhbnZhc0NvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGxcbiAgdGV4dDogc3RyaW5nXG4gIHdyYXBDaGVja1dpZHRoOiBudW1iZXJcbiAgdGV4dGFyZWFXaWR0aDogbnVtYmVyXG4gIG1lYXN1cmVTZWdtZW50V2lkdGg6IChzZWdtZW50OiBzdHJpbmcpID0+IG51bWJlclxuICBzY3JvbGxIZWlnaHQ6IG51bWJlclxuICBzaW5nbGVMaW5lSGVpZ2h0OiBudW1iZXJcbn0pOiB7IHZpc3VhbExpbmVzQXRXcmFwV2lkdGg6IG51bWJlcjsgdmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aDogbnVtYmVyOyBsaW5lc0ZvckhlaWdodDogbnVtYmVyIH0gPT4ge1xuICBsZXQgdmlzdWFsTGluZXNBdFdyYXBXaWR0aCA9IDFcbiAgbGV0IHZpc3VhbExpbmVzQXRDdXJyZW50V2lkdGggPSAxXG5cbiAgaWYgKCFwYXJhbXMuaXNFbXB0eSAmJiBwYXJhbXMuY2FudmFzQ29udGV4dCkge1xuICAgIHZpc3VhbExpbmVzQXRXcmFwV2lkdGggPSBjb3VudFZpc3VhbExpbmVzV3JhcHBlZChwYXJhbXMudGV4dCwgcGFyYW1zLndyYXBDaGVja1dpZHRoLCBwYXJhbXMubWVhc3VyZVNlZ21lbnRXaWR0aClcbiAgICB2aXN1YWxMaW5lc0F0Q3VycmVudFdpZHRoID0gY291bnRWaXN1YWxMaW5lc1dyYXBwZWQocGFyYW1zLnRleHQsIHBhcmFtcy50ZXh0YXJlYVdpZHRoLCBwYXJhbXMubWVhc3VyZVNlZ21lbnRXaWR0aClcbiAgfSBlbHNlIGlmICghcGFyYW1zLmlzRW1wdHkgJiYgIXBhcmFtcy5jYW52YXNDb250ZXh0KSB7XG4gICAgdmlzdWFsTGluZXNBdFdyYXBXaWR0aCA9XG4gICAgICBwYXJhbXMuc2Nyb2xsSGVpZ2h0ID4gcGFyYW1zLnNpbmdsZUxpbmVIZWlnaHQgKiAxLjg1XG4gICAgICAgID8gTWF0aC5jZWlsKHBhcmFtcy5zY3JvbGxIZWlnaHQgLyBwYXJhbXMuc2luZ2xlTGluZUhlaWdodClcbiAgICAgICAgOiAxXG4gICAgdmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aCA9IHZpc3VhbExpbmVzQXRXcmFwV2lkdGhcbiAgfVxuXG4gIGNvbnN0IGxpbmVzRm9ySGVpZ2h0ID0gIXBhcmFtcy5pc0VtcHR5ICYmIHBhcmFtcy5jYW52YXNDb250ZXh0ID8gdmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aCA6IHZpc3VhbExpbmVzQXRXcmFwV2lkdGhcblxuICByZXR1cm4geyB2aXN1YWxMaW5lc0F0V3JhcFdpZHRoLCB2aXN1YWxMaW5lc0F0Q3VycmVudFdpZHRoLCBsaW5lc0ZvckhlaWdodCB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0ID0gKHBhcmFtczoge1xuICBpc0VtcHR5OiBib29sZWFuXG4gIGhhc011bHRpcGxlVmlzdWFsTGluZXM6IGJvb2xlYW5cbiAgbGluZXNGb3JIZWlnaHQ6IG51bWJlclxuICBzY3JvbGxIZWlnaHQ6IG51bWJlclxuICBtaW5IZWlnaHQ6IG51bWJlclxuICBtYXhIZWlnaHQ6IG51bWJlclxuICBzaW5nbGVMaW5lT3V0ZXJIZWlnaHQ6IG51bWJlclxuICBsaW5lSGVpZ2h0OiBudW1iZXJcbiAgcGFkZGluZ1RvcDogbnVtYmVyXG4gIHBhZGRpbmdCb3R0b206IG51bWJlclxuICBib3JkZXJUb3A6IG51bWJlclxuICBib3JkZXJCb3R0b206IG51bWJlclxufSk6IG51bWJlciA9PiB7XG4gIGNvbnN0IHtcbiAgICBpc0VtcHR5LFxuICAgIGhhc011bHRpcGxlVmlzdWFsTGluZXMsXG4gICAgbGluZXNGb3JIZWlnaHQsXG4gICAgc2Nyb2xsSGVpZ2h0LFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhIZWlnaHQsXG4gICAgc2luZ2xlTGluZU91dGVySGVpZ2h0LFxuICAgIGxpbmVIZWlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBwYWRkaW5nQm90dG9tLFxuICAgIGJvcmRlclRvcCxcbiAgICBib3JkZXJCb3R0b20sXG4gIH0gPSBwYXJhbXNcblxuICBpZiAoaXNFbXB0eSB8fCAhaGFzTXVsdGlwbGVWaXN1YWxMaW5lcykgcmV0dXJuIHNpbmdsZUxpbmVPdXRlckhlaWdodFxuICBpZiAobGluZXNGb3JIZWlnaHQgPD0gMSkgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHNpbmdsZUxpbmVPdXRlckhlaWdodCwgbWluSGVpZ2h0KSwgbWF4SGVpZ2h0KVxuXG4gIGNvbnN0IHNuYXBwZWRIZWlnaHQgPSBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlclRvcCArIGJvcmRlckJvdHRvbSArIGxpbmVzRm9ySGVpZ2h0ICogbGluZUhlaWdodFxuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoTWF0aC5taW4oc2Nyb2xsSGVpZ2h0LCBzbmFwcGVkSGVpZ2h0KSwgbWluSGVpZ2h0KSwgbWF4SGVpZ2h0KVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLE9BQU8sSUFBTUEsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENDLEdBQVcsRUFDWEMsY0FBc0IsRUFDdEJDLGdCQUE2QyxFQUNsQztFQUNYLElBQUlELGNBQWMsSUFBSSxDQUFDLEVBQUU7SUFDdkIsT0FBTyxDQUFDO0VBQ1Y7RUFDQSxJQUFNRSxVQUFVLEdBQUdILEdBQUcsQ0FBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQztFQUVsQyxJQUFNQyxLQUFLLEdBQUdGLFVBQVUsQ0FBQ0csTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRUMsU0FBUyxFQUFLO0lBQ2xELElBQUlBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMxQixPQUFPRixHQUFHLEdBQUcsQ0FBQztJQUNoQjtJQUVBLElBQU1HLEtBQUssR0FBR0YsU0FBUyxDQUFDSixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUNPLE1BQU0sQ0FBQyxVQUFBQyxJQUFJO01BQUEsT0FBSUEsSUFBSSxDQUFDSCxNQUFNLEdBQUcsQ0FBQztJQUFBLEVBQUM7SUFFcEUsSUFBQUksYUFBQSxHQUE2QkgsS0FBSyxDQUFDSixNQUFNLENBQ3ZDLFVBQUNRLEtBQUssRUFBRUYsSUFBSSxFQUFFRyxLQUFLLEVBQUs7UUFDdEIsSUFBTUMsU0FBUyxHQUFHZCxnQkFBZ0IsQ0FBQ1UsSUFBSSxDQUFDO1FBQ3hDLElBQU1LLFVBQVUsR0FB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
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
import { countVisualLinesWrapped, detectMultilineFromCanvas, resolveSingleLineOuterHeight, resolveTextareaContentHeight, resolveVisualLineCounts } from './MAIAInputEditor.helpers';
|
|
5
|
+
describe('MAIAInputEditor.helpers', function () {
|
|
6
|
+
var measure = function measure(text) {
|
|
7
|
+
return text.length * 10;
|
|
8
|
+
};
|
|
9
|
+
it('returns one line for empty width or single short line', function () {
|
|
10
|
+
expect(countVisualLinesWrapped('hola', 0, measure)).toBe(1);
|
|
11
|
+
expect(countVisualLinesWrapped('hola', 200, measure)).toBe(1);
|
|
12
|
+
});
|
|
13
|
+
it('wraps words when they exceed the available width', function () {
|
|
14
|
+
expect(countVisualLinesWrapped('hola mundo largo', 50, measure)).toBeGreaterThan(1);
|
|
15
|
+
});
|
|
16
|
+
it('counts explicit newlines as extra lines', function () {
|
|
17
|
+
expect(countVisualLinesWrapped('linea uno\nlinea dos', 200, measure)).toBe(2);
|
|
18
|
+
});
|
|
19
|
+
it('breaks oversized words across multiple lines', function () {
|
|
20
|
+
expect(countVisualLinesWrapped('supercalifragilistico', 30, measure)).toBeGreaterThan(1);
|
|
21
|
+
});
|
|
22
|
+
it('resolveSingleLineOuterHeight sums typography box metrics', function () {
|
|
23
|
+
expect(resolveSingleLineOuterHeight({
|
|
24
|
+
lineHeight: 20,
|
|
25
|
+
paddingTop: 4,
|
|
26
|
+
paddingBottom: 4,
|
|
27
|
+
borderTop: 1,
|
|
28
|
+
borderBottom: 1
|
|
29
|
+
})).toBe(30);
|
|
30
|
+
});
|
|
31
|
+
it('detectMultilineFromCanvas handles multiline text and fallback scroll height', function () {
|
|
32
|
+
expect(detectMultilineFromCanvas('linea uno\nlinea dos', 200, measure, 20, 30)).toBe(true);
|
|
33
|
+
expect(detectMultilineFromCanvas('corta', 200, measure, 80, 30)).toBe(true);
|
|
34
|
+
expect(detectMultilineFromCanvas('corta', 200, measure, 20, 30)).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
it('resolveVisualLineCounts uses canvas, scroll fallback and height selection', function () {
|
|
37
|
+
var canvasContext = {
|
|
38
|
+
measureText: function measureText(value) {
|
|
39
|
+
return {
|
|
40
|
+
width: measure(value)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var withCanvas = resolveVisualLineCounts({
|
|
45
|
+
isEmpty: false,
|
|
46
|
+
canvasContext: canvasContext,
|
|
47
|
+
text: 'hola mundo',
|
|
48
|
+
wrapCheckWidth: 30,
|
|
49
|
+
textareaWidth: 120,
|
|
50
|
+
measureSegmentWidth: measure,
|
|
51
|
+
scrollHeight: 40,
|
|
52
|
+
singleLineHeight: 30
|
|
53
|
+
});
|
|
54
|
+
expect(withCanvas.visualLinesAtWrapWidth).toBeGreaterThan(1);
|
|
55
|
+
expect(withCanvas.linesForHeight).toBe(1);
|
|
56
|
+
expect(resolveVisualLineCounts({
|
|
57
|
+
isEmpty: false,
|
|
58
|
+
canvasContext: null,
|
|
59
|
+
text: 'hola',
|
|
60
|
+
wrapCheckWidth: 30,
|
|
61
|
+
textareaWidth: 120,
|
|
62
|
+
measureSegmentWidth: measure,
|
|
63
|
+
scrollHeight: 80,
|
|
64
|
+
singleLineHeight: 30
|
|
65
|
+
}).linesForHeight).toBeGreaterThan(1);
|
|
66
|
+
});
|
|
67
|
+
it('resolveTextareaContentHeight snaps single and multiline heights', function () {
|
|
68
|
+
var base = {
|
|
69
|
+
minHeight: 20,
|
|
70
|
+
maxHeight: 170,
|
|
71
|
+
singleLineOuterHeight: 30,
|
|
72
|
+
lineHeight: 20,
|
|
73
|
+
paddingTop: 4,
|
|
74
|
+
paddingBottom: 4,
|
|
75
|
+
borderTop: 1,
|
|
76
|
+
borderBottom: 1
|
|
77
|
+
};
|
|
78
|
+
expect(resolveTextareaContentHeight(_objectSpread(_objectSpread({}, base), {}, {
|
|
79
|
+
isEmpty: true,
|
|
80
|
+
hasMultipleVisualLines: false,
|
|
81
|
+
linesForHeight: 1,
|
|
82
|
+
scrollHeight: 30
|
|
83
|
+
}))).toBe(30);
|
|
84
|
+
expect(resolveTextareaContentHeight(_objectSpread(_objectSpread({}, base), {}, {
|
|
85
|
+
isEmpty: false,
|
|
86
|
+
hasMultipleVisualLines: true,
|
|
87
|
+
linesForHeight: 3,
|
|
88
|
+
scrollHeight: 120
|
|
89
|
+
}))).toBeGreaterThan(30);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3VudFZpc3VhbExpbmVzV3JhcHBlZCIsImRldGVjdE11bHRpbGluZUZyb21DYW52YXMiLCJyZXNvbHZlU2luZ2xlTGluZU91dGVySGVpZ2h0IiwicmVzb2x2ZVRleHRhcmVhQ29udGVudEhlaWdodCIsInJlc29sdmVWaXN1YWxMaW5lQ291bnRzIiwiZGVzY3JpYmUiLCJtZWFzdXJlIiwidGV4dCIsImxlbmd0aCIsIml0IiwiZXhwZWN0IiwidG9CZSIsInRvQmVHcmVhdGVyVGhhbiIsImxpbmVIZWlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsImJvcmRlclRvcCIsImJvcmRlckJvdHRvbSIsImNhbnZhc0NvbnRleHQiLCJtZWFzdXJlVGV4dCIsInZhbHVlIiwid2lkdGgiLCJ3aXRoQ2FudmFzIiwiaXNFbXB0eSIsIndyYXBDaGVja1dpZHRoIiwidGV4dGFyZWFXaWR0aCIsIm1lYXN1cmVTZWdtZW50V2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJzaW5nbGVMaW5lSGVpZ2h0IiwidmlzdWFsTGluZXNBdFdyYXBXaWR0aCIsImxpbmVzRm9ySGVpZ2h0IiwiYmFzZSIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsInNpbmdsZUxpbmVPdXRlckhlaWdodCIsIl9vYmplY3RTcHJlYWQiLCJoYXNNdWx0aXBsZVZpc3VhbExpbmVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dEVkaXRvci5oZWxwZXJzLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY291bnRWaXN1YWxMaW5lc1dyYXBwZWQsXG4gIGRldGVjdE11bHRpbGluZUZyb21DYW52YXMsXG4gIHJlc29sdmVTaW5nbGVMaW5lT3V0ZXJIZWlnaHQsXG4gIHJlc29sdmVUZXh0YXJlYUNvbnRlbnRIZWlnaHQsXG4gIHJlc29sdmVWaXN1YWxMaW5lQ291bnRzLFxufSBmcm9tICcuL01BSUFJbnB1dEVkaXRvci5oZWxwZXJzJ1xuXG5kZXNjcmliZSgnTUFJQUlucHV0RWRpdG9yLmhlbHBlcnMnLCAoKSA9PiB7XG4gIGNvbnN0IG1lYXN1cmUgPSAodGV4dDogc3RyaW5nKSA9PiB0ZXh0Lmxlbmd0aCAqIDEwXG5cbiAgaXQoJ3JldHVybnMgb25lIGxpbmUgZm9yIGVtcHR5IHdpZHRoIG9yIHNpbmdsZSBzaG9ydCBsaW5lJywgKCkgPT4ge1xuICAgIGV4cGVjdChjb3VudFZpc3VhbExpbmVzV3JhcHBlZCgnaG9sYScsIDAsIG1lYXN1cmUpKS50b0JlKDEpXG4gICAgZXhwZWN0KGNvdW50VmlzdWFsTGluZXNXcmFwcGVkKCdob2xhJywgMjAwLCBtZWFzdXJlKSkudG9CZSgxKVxuICB9KVxuXG4gIGl0KCd3cmFwcyB3b3JkcyB3aGVuIHRoZXkgZXhjZWVkIHRoZSBhdmFpbGFibGUgd2lkdGgnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNvdW50VmlzdWFsTGluZXNXcmFwcGVkKCdob2xhIG11bmRvIGxhcmdvJywgNTAsIG1lYXN1cmUpKS50b0JlR3JlYXRlclRoYW4oMSlcbiAgfSlcblxuICBpdCgnY291bnRzIGV4cGxpY2l0IG5ld2xpbmVzIGFzIGV4dHJhIGxpbmVzJywgKCkgPT4ge1xuICAgIGV4cGVjdChjb3VudFZpc3VhbExpbmVzV3JhcHBlZCgnbGluZWEgdW5vXFxubGluZWEgZG9zJywgMjAwLCBtZWFzdXJlKSkudG9CZSgyKVxuICB9KVxuXG4gIGl0KCdicmVha3Mgb3ZlcnNpemVkIHdvcmRzIGFjcm9zcyBtdWx0aXBsZSBsaW5lcycsICgpID0+IHtcbiAgICBleHBlY3QoY291bnRWaXN1YWxMaW5lc1dyYXBwZWQoJ3N1cGVyY2FsaWZyYWdpbGlzdGljbycsIDMwLCBtZWFzdXJlKSkudG9CZUdyZWF0ZXJUaGFuKDEpXG4gIH0pXG5cbiAgaXQoJ3Jlc29sdmVTaW5nbGVMaW5lT3V0ZXJIZWlnaHQgc3VtcyB0eXBvZ3JhcGh5IGJveCBtZXRyaWNzJywgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIHJlc29sdmVTaW5nbGVMaW5lT3V0ZXJIZWlnaHQoe1xuICAgICAgICBsaW5lSGVpZ2h0OiAyMCxcbiAgICAgICAgcGFkZGluZ1RvcDogNCxcbiAgICAgICAgcGFkZGluZ0JvdHRvbTogNCxcbiAgICAgICAgYm9yZGVyVG9wOiAxLFxuICAgICAgICBib3JkZXJCb3R0b206IDEsXG4gICAgICB9KVxuICAgICkudG9CZSgzMClcbiAgfSlcblxuICBpdCgnZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcyBoYW5kbGVzIG11bHRpbGluZSB0ZXh0IGFuZCBmYWxsYmFjayBzY3JvbGwgaGVpZ2h0JywgKCkgPT4ge1xuICAgIGV4cGVjdChkZXRlY3RNdWx0aWxpbmVGcm9tQ2FudmFzKCdsaW5lYSB1bm9cXG5saW5lYSBkb3MnLCAyMDAsIG1lYXN1cmUsIDIwLCAzMCkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QoZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcygnY29ydGEnLCAyMDAsIG1lYXN1cmUsIDgwLCAzMCkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QoZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcygnY29ydGEnLCAyMDAsIG1lYXN1cmUsIDIwLCAzMCkpLnRvQmUoZmFsc2UpXG4gIH0pXG5cbiAgaXQoJ3Jlc29sdmVWaXN1YWxMaW5lQ291bnRzIHVzZXMgY2FudmFzLCBzY3JvbGwgZmFsbGJhY2sgYW5kIGhlaWdodCBzZWxlY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgY2FudmFzQ29udGV4dCA9IHsgbWVhc3VyZVRleHQ6ICh2YWx1ZTogc3RyaW5nKSA9PiAoeyB3aWR0aDogbWVhc3VyZSh2YWx1ZSkgfSkgfSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcblxuICAgIGNvbnN0IHdpdGhDYW52YXMgPSByZXNvbHZlVmlzdWFsTGluZUNvdW50cyh7XG4gICAgICBpc0VtcHR5OiBmYWxzZSxcbiAgICAgIGNhbnZhc0NvbnRleHQsXG4gICAgICB0ZXh0OiAnaG9sYSBtdW5kbycsXG4gICAgICB3cmFwQ2hlY2tXaWR0aDogMzAsXG4gICAgICB0ZXh0YXJlYVdpZHRoOiAxMjAsXG4gICAgICBtZWFzdXJlU2VnbWVudFdpZHRoOiBtZWFzdXJlLFxuICAgICAgc2Nyb2xsSGVpZ2h0OiA0MCxcbiAgICAgIHNpbmdsZUxpbmVIZWlnaHQ6IDMwLFxuICAgIH0pXG4gICAgZXhwZWN0KHdpdGhDYW52YXMudmlzdWFsTGluZXNBdFdyYXBXaWR0aCkudG9CZUdyZWF0ZXJUaGFuKDEpXG4gICAgZXhwZWN0KHdpdGhDYW52YXMubGluZXNGb3JIZWlnaHQpLnRvQmUoMSlcblxuICAgIGV4cGVjdChcbiAgICAgIHJlc29sdmVWaXN1YWxMaW5lQ291bnRzKHtcbiAgICAgICAgaXNFbXB0eTogZmFsc2UsXG4gICAgICAgIGNhbnZhc0NvbnRleHQ6IG51bGwsXG4gICAgICAgIHRleHQ6ICdob2xhJyxcbiAgICAgICAgd3JhcENoZWNrV2lkdGg6IDMwLFxuICAgICAgICB0ZXh0YXJlYVdpZHRoOiAxMjAsXG4gICAgICAgIG1lYXN1cmVTZWdtZW50V2lkdGg6IG1lYXN1cmUsXG4gICAgICAgIHNjcm9sbEhlaWdodDogODAsXG4gICAgICAgIHNpbmdsZUxpbmVIZWlnaHQ6IDMwLFxuICAgICAgfSkubGluZXNGb3JIZWlnaHRcbiAgICApLnRvQmVHcmVhdGVyVGhhbigxKVxuICB9KVxuXG4gIGl0KCdyZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0IHNuYXBzIHNpbmdsZSBhbmQgbXVsdGlsaW5lIGhlaWdodHMnLCAoKSA9PiB7XG4gICAgY29uc3QgYmFzZSA9IHtcbiAgICAgIG1pbkhlaWdodDogMjAsXG4gICAgICBtYXhIZWlnaHQ6IDE3MCxcbiAgICAgIHNpbmdsZUxpbmVPdXRlckhlaWdodDogMzAsXG4gICAgICBsaW5lSGVpZ2h0OiAyMCxcbiAgICAgIHBhZGRpbmdUb3A6IDQsXG4gICAgICBwYWRkaW5nQm90dG9tOiA0LFxuICAgICAgYm9yZGVyVG9wOiAxLFxuICAgICAgYm9yZGVyQm90dG9tOiAxLFxuICAgIH1cblxuICAgIGV4cGVjdChcbiAgICAgIHJlc29sdmVUZXh0YXJlYUNvbnRlbnRIZWlnaHQoe1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBpc0VtcHR5OiB0cnVlLFxuICAgICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzOiBmYWxzZSxcbiAgICAgICAgbGluZXNGb3JIZWlnaHQ6IDEsXG4gICAgICAgIHNjcm9sbEhlaWdodDogMzAsXG4gICAgICB9KVxuICAgICkudG9CZSgzMClcblxuICAgIGV4cGVjdChcbiAgICAgIHJlc29sdmVUZXh0YXJlYUNvbnRlbnRIZWlnaHQoe1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBpc0VtcHR5OiBmYWxzZSxcbiAgICAgICAgaGFzTXVsdGlwbGVWaXN1YWxMaW5lczogdHJ1ZSxcbiAgICAgICAgbGluZXNGb3JIZWlnaHQ6IDMsXG4gICAgICAgIHNjcm9sbEhlaWdodDogMTIwLFxuICAgICAgfSlcbiAgICApLnRvQmVHcmVhdGVyVGhhbigzMClcbiAgfSlcbn0pXG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQ0VBLHVCQUF1QixFQUN2QkMseUJBQXlCLEVBQ3pCQyw0QkFBNEIsRUFDNUJDLDRCQUE0QixFQUM1QkMsdUJBQXVCLFFBQ2xCLDJCQUEyQjtBQUVsQ0MsUUFBUSxDQUFDLHlCQUF5QixFQUFFLFlBQU07RUFDeEMsSUFBTUMsT0FBTyxHQUFHLFNBQVZBLE9BQU9BLENBQUlDLElBQVk7SUFBQSxPQUFLQSxJQUFJLENBQUNDLE1BQU0sR0FBRyxFQUFFO0VBQUE7RUFFbERDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxZQUFNO0lBQ2hFQyxNQUFNLENBQUNWLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUVNLE9BQU8sQ0FBQyxDQUFDLENBQUNLLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0RELE1BQU0sQ0FBQ1YsdUJBQXVCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRU0sT0FBTyxDQUFDLENBQUMsQ0FBQ0ssSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMvRCxDQUFDLENB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
|
|
@@ -1,67 +1,12 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
3
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
2
|
/* eslint-disable no-restricted-syntax */
|
|
6
3
|
/* eslint-disable no-continue */
|
|
7
4
|
/* eslint-disable no-void */
|
|
8
5
|
/* eslint-disable prefer-destructuring */
|
|
9
6
|
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
7
|
+
import { detectMultilineFromCanvas, resolveSingleLineOuterHeight, resolveTextareaContentHeight, resolveVisualLineCounts } from './MAIAInputEditor.helpers';
|
|
10
8
|
import { StyledMAIAInput } from './styles';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Líneas visuales con wrap de palabras al ancho dado (aprox. el navegador en LTR).
|
|
14
|
-
*/
|
|
15
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
-
function countVisualLinesWrapped(raw, contentWidthPx, measureTextWidth) {
|
|
17
|
-
if (contentWidthPx <= 1) {
|
|
18
|
-
return 1;
|
|
19
|
-
}
|
|
20
|
-
var paragraphs = raw.split('\n');
|
|
21
|
-
var total = 0;
|
|
22
|
-
var _iterator = _createForOfIteratorHelper(paragraphs),
|
|
23
|
-
_step;
|
|
24
|
-
try {
|
|
25
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
26
|
-
var paragraph = _step.value;
|
|
27
|
-
if (paragraph.length === 0) {
|
|
28
|
-
total += 1;
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
var words = paragraph.split(/\s+/).filter(function (w) {
|
|
32
|
-
return w.length > 0;
|
|
33
|
-
});
|
|
34
|
-
var linesInParagraph = 1;
|
|
35
|
-
var currentLineWidth = 0;
|
|
36
|
-
for (var i = 0; i < words.length; i += 1) {
|
|
37
|
-
var word = words[i];
|
|
38
|
-
var wordWidth = measureTextWidth(word);
|
|
39
|
-
var spaceWidth = i > 0 ? measureTextWidth(' ') : 0;
|
|
40
|
-
if (wordWidth > contentWidthPx) {
|
|
41
|
-
if (currentLineWidth > 0) {
|
|
42
|
-
linesInParagraph += 1;
|
|
43
|
-
currentLineWidth = 0;
|
|
44
|
-
}
|
|
45
|
-
linesInParagraph += Math.ceil(wordWidth / contentWidthPx) - 1;
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
var candidateWidth = currentLineWidth === 0 ? wordWidth : currentLineWidth + spaceWidth + wordWidth;
|
|
49
|
-
if (candidateWidth > contentWidthPx && currentLineWidth > 0) {
|
|
50
|
-
linesInParagraph += 1;
|
|
51
|
-
currentLineWidth = wordWidth;
|
|
52
|
-
} else {
|
|
53
|
-
currentLineWidth = candidateWidth;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
total += linesInParagraph;
|
|
57
|
-
}
|
|
58
|
-
} catch (err) {
|
|
59
|
-
_iterator.e(err);
|
|
60
|
-
} finally {
|
|
61
|
-
_iterator.f();
|
|
62
|
-
}
|
|
63
|
-
return Math.max(1, total);
|
|
64
|
-
}
|
|
65
10
|
export var MAIAInputEditor = function MAIAInputEditor(_ref) {
|
|
66
11
|
var inputRef = _ref.inputRef,
|
|
67
12
|
disabled = _ref.disabled,
|
|
@@ -105,7 +50,14 @@ export var MAIAInputEditor = function MAIAInputEditor(_ref) {
|
|
|
105
50
|
var paddingBottom = parseFloat(computedStyle.paddingBottom) || 0;
|
|
106
51
|
var borderTop = parseFloat(computedStyle.borderTopWidth) || 0;
|
|
107
52
|
var borderBottom = parseFloat(computedStyle.borderBottomWidth) || 0;
|
|
108
|
-
var
|
|
53
|
+
var boxMetrics = {
|
|
54
|
+
lineHeight: lineHeight,
|
|
55
|
+
paddingTop: paddingTop,
|
|
56
|
+
paddingBottom: paddingBottom,
|
|
57
|
+
borderTop: borderTop,
|
|
58
|
+
borderBottom: borderBottom
|
|
59
|
+
};
|
|
60
|
+
var singleLineHeight = resolveSingleLineOuterHeight(boxMetrics);
|
|
109
61
|
var isEmpty = textarea.value.trim() === '';
|
|
110
62
|
var paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;
|
|
111
63
|
var paddingRight = parseFloat(computedStyle.paddingRight) || 0;
|
|
@@ -116,69 +68,44 @@ export var MAIAInputEditor = function MAIAInputEditor(_ref) {
|
|
|
116
68
|
textareaMinContentWidthSeenRef.current = textareaMinContentWidthSeenRef.current === null ? textareaWidth : Math.min(textareaMinContentWidthSeenRef.current, textareaWidth);
|
|
117
69
|
}
|
|
118
70
|
var wrapCheckWidth = (_textareaMinContentWi = textareaMinContentWidthSeenRef.current) !== null && _textareaMinContentWi !== void 0 ? _textareaMinContentWi : textareaWidth;
|
|
119
|
-
var canvasMeasureIndicatesMultiline = false;
|
|
120
71
|
var canvas = document.createElement('canvas');
|
|
121
72
|
var canvasContext = canvas.getContext('2d');
|
|
122
73
|
var text = textarea.value || '';
|
|
123
|
-
|
|
124
|
-
if (!canvasContext) {
|
|
125
|
-
canvasMeasureIndicatesMultiline = scrollHeight > singleLineHeight * 2.05;
|
|
126
|
-
} else {
|
|
74
|
+
if (canvasContext) {
|
|
127
75
|
var textareaStyles = window.getComputedStyle(textarea);
|
|
128
76
|
canvasContext.font = "".concat(textareaStyles.fontWeight, " ").concat(textareaStyles.fontSize, " ").concat(textareaStyles.fontFamily);
|
|
129
|
-
if (lines.length > 1) {
|
|
130
|
-
canvasMeasureIndicatesMultiline = true;
|
|
131
|
-
} else {
|
|
132
|
-
var _iterator2 = _createForOfIteratorHelper(lines),
|
|
133
|
-
_step2;
|
|
134
|
-
try {
|
|
135
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
136
|
-
var line = _step2.value;
|
|
137
|
-
if (line.trim() === '') continue;
|
|
138
|
-
if (canvasContext.measureText(line).width > wrapCheckWidth) {
|
|
139
|
-
canvasMeasureIndicatesMultiline = true;
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
} catch (err) {
|
|
144
|
-
_iterator2.e(err);
|
|
145
|
-
} finally {
|
|
146
|
-
_iterator2.f();
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
77
|
}
|
|
78
|
+
var measureSegmentWidth = function measureSegmentWidth(segment) {
|
|
79
|
+
return canvasContext ? canvasContext.measureText(segment).width : 0;
|
|
80
|
+
};
|
|
81
|
+
var canvasMeasureIndicatesMultiline = canvasContext ? detectMultilineFromCanvas(text, wrapCheckWidth, measureSegmentWidth, scrollHeight, singleLineHeight) : scrollHeight > singleLineHeight * 2.05;
|
|
150
82
|
var hasMultipleVisualLines = canvasMeasureIndicatesMultiline;
|
|
151
83
|
var nextMultiline = !isEmpty && hasMultipleVisualLines;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
newHeight = Math.min(Math.max(snappedSingleLineOuterHeight, minHeight), maxHeight);
|
|
178
|
-
} else {
|
|
179
|
-
var snappedHeight = paddingTop + paddingBottom + borderTop + borderBottom + linesForHeight * lineHeight;
|
|
180
|
-
newHeight = Math.min(Math.max(Math.min(scrollHeight, snappedHeight), minHeight), maxHeight);
|
|
181
|
-
}
|
|
84
|
+
var _resolveVisualLineCou = resolveVisualLineCounts({
|
|
85
|
+
isEmpty: isEmpty,
|
|
86
|
+
canvasContext: canvasContext,
|
|
87
|
+
text: text,
|
|
88
|
+
wrapCheckWidth: wrapCheckWidth,
|
|
89
|
+
textareaWidth: textareaWidth,
|
|
90
|
+
measureSegmentWidth: measureSegmentWidth,
|
|
91
|
+
scrollHeight: scrollHeight,
|
|
92
|
+
singleLineHeight: singleLineHeight
|
|
93
|
+
}),
|
|
94
|
+
linesForHeight = _resolveVisualLineCou.linesForHeight;
|
|
95
|
+
var newHeight = resolveTextareaContentHeight({
|
|
96
|
+
isEmpty: isEmpty,
|
|
97
|
+
hasMultipleVisualLines: hasMultipleVisualLines,
|
|
98
|
+
linesForHeight: linesForHeight,
|
|
99
|
+
scrollHeight: scrollHeight,
|
|
100
|
+
minHeight: minHeight,
|
|
101
|
+
maxHeight: maxHeight,
|
|
102
|
+
singleLineOuterHeight: singleLineHeight,
|
|
103
|
+
lineHeight: lineHeight,
|
|
104
|
+
paddingTop: paddingTop,
|
|
105
|
+
paddingBottom: paddingBottom,
|
|
106
|
+
borderTop: borderTop,
|
|
107
|
+
borderBottom: borderBottom
|
|
108
|
+
});
|
|
182
109
|
setIsTextMultiline(function (prev) {
|
|
183
110
|
return prev === nextMultiline ? prev : nextMultiline;
|
|
184
111
|
});
|
|
@@ -263,4 +190,4 @@ export var MAIAInputEditor = function MAIAInputEditor(_ref) {
|
|
|
263
190
|
onBlur: handleBlur
|
|
264
191
|
});
|
|
265
192
|
};
|
|
266
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiU3R5bGVkTUFJQUlucHV0IiwianN4IiwiX2pzeCIsImNvdW50VmlzdWFsTGluZXNXcmFwcGVkIiwicmF3IiwiY29udGVudFdpZHRoUHgiLCJtZWFzdXJlVGV4dFdpZHRoIiwicGFyYWdyYXBocyIsInNwbGl0IiwidG90YWwiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwicGFyYWdyYXBoIiwidmFsdWUiLCJsZW5ndGgiLCJ3b3JkcyIsImZpbHRlciIsInciLCJsaW5lc0luUGFyYWdyYXBoIiwiY3VycmVudExpbmVXaWR0aCIsImkiLCJ3b3JkIiwid29yZFdpZHRoIiwic3BhY2VXaWR0aCIsIk1hdGgiLCJjZWlsIiwiY2FuZGlkYXRlV2lkdGgiLCJlcnIiLCJlIiwiZiIsIm1heCIsIk1BSUFJbnB1dEVkaXRvciIsIl9yZWYiLCJpbnB1dFJlZiIsImRpc2FibGVkIiwicGxhY2Vob2xkZXIiLCJhbGlnbkJ1dHRvbnMiLCJzZXRJc1RleHRNdWx0aWxpbmUiLCJjaGF0SWQiLCJuZXdDaGF0S2V5IiwiY2xlYXJTZXEiLCJzZW5kRGlzYWJsZWQiLCJvblR5cGluZ1ByZXNlbmNlQ2hhbmdlIiwib25FbnRlclNlbmQiLCJvbkNoYW5nZVByb3AiLCJ0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYiLCJwcmVzZW5jZVByZXZSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJyZXNpemVFcG9jaCIsInNldFJlc2l6ZUVwb2NoIiwiaGFuZGxlUmVzaXplIiwiX3RleHRhcmVhTWluQ29udGVudFdpIiwidGV4dGFyZWEiLCJjdXJyZW50IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwicHJldmlvdXNNaW5IZWlnaHQiLCJzdHlsZSIsInByZXZpb3VzTWF4SGVpZ2h0IiwiaGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiY29tcHV0ZWRTdHlsZSIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJsaW5lSGVpZ2h0IiwicGFyc2VGbG9hdCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b20iLCJib3JkZXJCb3R0b21XaWR0aCIsInNpbmdsZUxpbmVIZWlnaHQiLCJpc0VtcHR5IiwidHJpbSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwiYm9yZGVyTGVmdCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyUmlnaHRXaWR0aCIsInRleHRhcmVhV2lkdGgiLCJvZmZzZXRXaWR0aCIsIm1pbiIsIndyYXBDaGVja1dpZHRoIiwiY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSIsImNhbnZhcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhbnZhc0NvbnRleHQiLCJnZXRDb250ZXh0IiwidGV4dCIsImxpbmVzIiwidGV4dGFyZWFTdHlsZXMiLCJmb250IiwiY29uY2F0IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJsaW5lIiwibWVhc3VyZVRleHQiLCJ3aWR0aCIsImhhc011bHRpcGxlVmlzdWFsTGluZXMiLCJuZXh0TXVsdGlsaW5lIiwidmlzdWFsTGluZXNBdFdyYXBXaWR0aCIsInZpc3VhbExpbmVzQXRDdXJyZW50V2lkdGgiLCJzZWdtZW50IiwibGluZXNGb3JIZWlnaHQiLCJuZXdIZWlnaHQiLCJzbmFwcGVkU2luZ2xlTGluZU91dGVySGVpZ2h0Iiwicm91bmQiLCJzbmFwcGVkSGVpZ2h0IiwicHJldiIsIl9pbnB1dFJlZiRjdXJyZW50IiwiZm9jdXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpZCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlQ2hhbmdlIiwiaGFzVHJpbSIsInRhcmdldCIsIngiLCJoYW5kbGVCbHVyIiwiX2lucHV0UmVmJGN1cnJlbnQkdmFsIiwiX2lucHV0UmVmJGN1cnJlbnQyIiwidiIsImhhbmRsZUtleURvd24iLCJrZXkiLCJzaGlmdEtleSIsInByZXZlbnREZWZhdWx0IiwicmVmIiwib25DaGFuZ2UiLCJvbktleURvd24iLCIkdG9vbGJhckxheW91dFZhcmlhbnQiLCJvbkJsdXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0RWRpdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1kZXN0cnVjdHVyaW5nICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBSZWZPYmplY3QsIFNldFN0YXRlQWN0aW9uIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFN0eWxlZE1BSUFJbnB1dCB9IGZyb20gJy4vc3R5bGVzJ1xuXG4vKipcbiAqIEzDrW5lYXMgdmlzdWFsZXMgY29uIHdyYXAgZGUgcGFsYWJyYXMgYWwgYW5jaG8gZGFkbyAoYXByb3guIGVsIG5hdmVnYWRvciBlbiBMVFIpLlxuICovXG5mdW5jdGlvbiBjb3VudFZpc3VhbExpbmVzV3JhcHBlZChyYXc6IHN0cmluZywgY29udGVudFdpZHRoUHg6IG51bWJlciwgbWVhc3VyZVRleHRXaWR0aDogKHM6IHN0cmluZykgPT4gbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGNvbnRlbnRXaWR0aFB4IDw9IDEpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IHBhcmFncmFwaHMgPSByYXcuc3BsaXQoJ1xcbicpXG4gIGxldCB0b3RhbCA9IDBcbiAgZm9yIChjb25zdCBwYXJhZ3JhcGggb2YgcGFyYWdyYXBocykge1xuICAgIGlmIChwYXJhZ3JhcGgubGVuZ3RoID09PSAwKSB7XG4gICAgICB0b3RhbCArPSAxXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCB3b3JkcyA9IHBhcmFncmFwaC5zcGxpdCgvXFxzKy8pLmZpbHRlcih3ID0+IHcubGVuZ3RoID4gMClcbiAgICBsZXQgbGluZXNJblBhcmFncmFwaCA9IDFcbiAgICBsZXQgY3VycmVudExpbmVXaWR0aCA9IDBcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCB3b3JkID0gd29yZHNbaV1cbiAgICAgIGNvbnN0IHdvcmRXaWR0aCA9IG1lYXN1cmVUZXh0V2lkdGgod29yZClcbiAgICAgIGNvbnN0IHNwYWNlV2lkdGggPSBpID4gMCA/IG1lYXN1cmVUZXh0V2lkdGgoJyAnKSA6IDBcblxuICAgICAgaWYgKHdvcmRXaWR0aCA+IGNvbnRlbnRXaWR0aFB4KSB7XG4gICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoID4gMCkge1xuICAgICAgICAgIGxpbmVzSW5QYXJhZ3JhcGggKz0gMVxuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwXG4gICAgICAgIH1cbiAgICAgICAgbGluZXNJblBhcmFncmFwaCArPSBNYXRoLmNlaWwod29yZFdpZHRoIC8gY29udGVudFdpZHRoUHgpIC0gMVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYW5kaWRhdGVXaWR0aCA9IGN1cnJlbnRMaW5lV2lkdGggPT09IDAgPyB3b3JkV2lkdGggOiBjdXJyZW50TGluZVdpZHRoICsgc3BhY2VXaWR0aCArIHdvcmRXaWR0aFxuICAgICAgaWYgKGNhbmRpZGF0ZVdpZHRoID4gY29udGVudFdpZHRoUHggJiYgY3VycmVudExpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgbGluZXNJblBhcmFncmFwaCArPSAxXG4gICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSB3b3JkV2lkdGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSBjYW5kaWRhdGVXaWR0aFxuICAgICAgfVxuICAgIH1cbiAgICB0b3RhbCArPSBsaW5lc0luUGFyYWdyYXBoXG4gIH1cbiAgcmV0dXJuIE1hdGgubWF4KDEsIHRvdGFsKVxufVxuXG5leHBvcnQgdHlwZSBNQUlBSW5wdXRFZGl0b3JQcm9wcyA9IHtcbiAgaW5wdXRSZWY6IFJlZk9iamVjdDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbD5cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGFsaWduQnV0dG9ucz86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbiAgc2V0SXNUZXh0TXVsdGlsaW5lOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbiAgLyoqIEluY3JlbWVudGFyIGRlc2RlIGVsIHBhZHJlIHRyYXMgZW52aWFyIC8gY2FtYmlhciBzZXNpw7NuIHBhcmEgc2luY3Jvbml6YXIgbWVkaWNpw7NuIHNpbiBlc3RhZG8gZGVsIHRleHRvIGVuIGVsIHBhZHJlLiAqL1xuICBjbGVhclNlcTogbnVtYmVyXG4gIHNlbmREaXNhYmxlZDogYm9vbGVhblxuICBvblR5cGluZ1ByZXNlbmNlQ2hhbmdlOiAoaGFzVHJpbW1lZFRleHQ6IGJvb2xlYW4pID0+IHZvaWRcbiAgb25FbnRlclNlbmQ6ICgpID0+IHZvaWRcbiAgb25DaGFuZ2VQcm9wPzogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgTUFJQUlucHV0RWRpdG9yID0gKHtcbiAgaW5wdXRSZWYsXG4gIGRpc2FibGVkLFxuICBwbGFjZWhvbGRlcixcbiAgYWxpZ25CdXR0b25zLFxuICBzZXRJc1RleHRNdWx0aWxpbmUsXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbiAgY2xlYXJTZXEsXG4gIHNlbmREaXNhYmxlZCxcbiAgb25UeXBpbmdQcmVzZW5jZUNoYW5nZSxcbiAgb25FbnRlclNlbmQsXG4gIG9uQ2hhbmdlUHJvcCxcbn06IE1BSUFJbnB1dEVkaXRvclByb3BzKSA9PiB7XG4gIGNvbnN0IHRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBwcmVzZW5jZVByZXZSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBTb2xvIHBhcmEgcmUtYWdlbmRhciBtZWRpY2nDs24gZGUgYWx0byBzaW4gZ3VhcmRhciBlbCBzdHJpbmcgZW4gZWwgcGFkcmUgKGFpc2xhIHJlLXJlbmRlcnMgZGVsIHRvb2xiYXIpLiAqL1xuICBjb25zdCBbcmVzaXplRXBvY2gsIHNldFJlc2l6ZUVwb2NoXSA9IHVzZVN0YXRlKDApXG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRleHRhcmVhID0gaW5wdXRSZWYuY3VycmVudFxuICAgIGlmICghdGV4dGFyZWEpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBDb2luY2lkZSBjb24gU3R5bGVkTUFJQUlucHV0OiBsaW5lLWhlaWdodCAyMHB4IHNvYnJlIGZ1ZW50ZSAxNHB4ICh+dW5hIGzDrW5lYSBkZSB0ZXh0byB2aXNpYmxlKS4gKi9cbiAgICBjb25zdCBtaW5IZWlnaHQgPSAyMFxuICAgIGNvbnN0IG1heEhlaWdodCA9IDE3MFxuXG4gICAgY29uc3QgcHJldmlvdXNNaW5IZWlnaHQgPSB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHRcbiAgICBjb25zdCBwcmV2aW91c01heEhlaWdodCA9IHRleHRhcmVhLnN0eWxlLm1heEhlaWdodFxuXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nXG4gICAgdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0ID0gJzBweCdcbiAgICB0ZXh0YXJlYS5zdHlsZS5tYXhIZWlnaHQgPSAnbm9uZSdcblxuICAgIHZvaWQgdGV4dGFyZWEub2Zmc2V0SGVpZ2h0XG5cbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmxpbmVIZWlnaHQpIHx8IDIwXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nVG9wKSB8fCAwXG4gICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nQm90dG9tKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSB8fCAwXG5cbiAgICBjb25zdCBzaW5nbGVMaW5lSGVpZ2h0ID0gbGluZUhlaWdodCArIHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyVG9wICsgYm9yZGVyQm90dG9tXG5cbiAgICBjb25zdCBpc0VtcHR5ID0gdGV4dGFyZWEudmFsdWUudHJpbSgpID09PSAnJ1xuXG4gICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ0xlZnQpIHx8IDBcbiAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ1JpZ2h0KSB8fCAwXG4gICAgY29uc3QgYm9yZGVyTGVmdCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGgpIHx8IDBcbiAgICBjb25zdCBib3JkZXJSaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJSaWdodFdpZHRoKSB8fCAwXG4gICAgY29uc3QgdGV4dGFyZWFXaWR0aCA9IHRleHRhcmVhLm9mZnNldFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQgLSBib3JkZXJMZWZ0IC0gYm9yZGVyUmlnaHRcblxuICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgdGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQgPVxuICAgICAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9PT0gbnVsbFxuICAgICAgICAgID8gdGV4dGFyZWFXaWR0aFxuICAgICAgICAgIDogTWF0aC5taW4odGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQsIHRleHRhcmVhV2lkdGgpXG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcENoZWNrV2lkdGggPSB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA/PyB0ZXh0YXJlYVdpZHRoXG5cbiAgICBsZXQgY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSA9IGZhbHNlXG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICAgIGNvbnN0IGNhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxuICAgIGNvbnN0IHRleHQgPSB0ZXh0YXJlYS52YWx1ZSB8fCAnJ1xuICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJylcblxuICAgIGlmICghY2FudmFzQ29udGV4dCkge1xuICAgICAgY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSA9IHNjcm9sbEhlaWdodCA+IHNpbmdsZUxpbmVIZWlnaHQgKiAyLjA1XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRleHRhcmVhU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGV4dGFyZWEpXG4gICAgICBjYW52YXNDb250ZXh0LmZvbnQgPSBgJHt0ZXh0YXJlYVN0eWxlcy5mb250V2VpZ2h0fSAke3RleHRhcmVhU3R5bGVzLmZvbnRTaXplfSAke3RleHRhcmVhU3R5bGVzLmZvbnRGYW1pbHl9YFxuICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG4gICAgICAgICAgaWYgKGNhbnZhc0NvbnRleHQubWVhc3VyZVRleHQobGluZSkud2lkdGggPiB3cmFwQ2hlY2tXaWR0aCkge1xuICAgICAgICAgICAgY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSA9IHRydWVcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyA9IGNhbnZhc01lYXN1cmVJbmRpY2F0ZXNNdWx0aWxpbmVcblxuICAgIGNvbnN0IG5leHRNdWx0aWxpbmUgPSAhaXNFbXB0eSAmJiBoYXNNdWx0aXBsZVZpc3VhbExpbmVzXG5cbiAgICAvKiogTMOtbmVhcyBzZWfDum4gYW5jaG8gZXN0cmVjaG8gKGhpc3RvcnkgbWluKSDigJQgdG9vbGJhciBjb21wYWN0byB5IGRldGVjY2nDs24gbXVsdGlsaW5lICovXG4gICAgbGV0IHZpc3VhbExpbmVzQXRXcmFwV2lkdGggPSAxXG4gICAgLyoqIEzDrW5lYXMgYWwgYW5jaG8gYWN0dWFsIGRlbCB0ZXh0YXJlYSDigJQgZW4gc3RhY2tlZCBzdWVsZSBzZXIgbWF5b3IgcXVlIHdyYXBDaGVja1dpZHRoICovXG4gICAgbGV0IHZpc3VhbExpbmVzQXRDdXJyZW50V2lkdGggPSAxXG4gICAgaWYgKCFpc0VtcHR5ICYmIGNhbnZhc0NvbnRleHQpIHtcbiAgICAgIHZpc3VhbExpbmVzQXRXcmFwV2lkdGggPSBjb3VudFZpc3VhbExpbmVzV3JhcHBlZChcbiAgICAgICAgdGV4dCxcbiAgICAgICAgd3JhcENoZWNrV2lkdGgsXG4gICAgICAgIHNlZ21lbnQgPT4gY2FudmFzQ29udGV4dC5tZWFzdXJlVGV4dChzZWdtZW50KS53aWR0aFxuICAgICAgKVxuICAgICAgdmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aCA9IGNvdW50VmlzdWFsTGluZXNXcmFwcGVkKFxuICAgICAgICB0ZXh0LFxuICAgICAgICB0ZXh0YXJlYVdpZHRoLFxuICAgICAgICBzZWdtZW50ID0+IGNhbnZhc0NvbnRleHQubWVhc3VyZVRleHQoc2VnbWVudCkud2lkdGhcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKCFpc0VtcHR5ICYmICFjYW52YXNDb250ZXh0KSB7XG4gICAgICB2aXN1YWxMaW5lc0F0V3JhcFdpZHRoID0gc2Nyb2xsSGVpZ2h0ID4gc2luZ2xlTGluZUhlaWdodCAqIDEuODUgPyBNYXRoLmNlaWwoc2Nyb2xsSGVpZ2h0IC8gc2luZ2xlTGluZUhlaWdodCkgOiAxXG4gICAgICB2aXN1YWxMaW5lc0F0Q3VycmVudFdpZHRoID0gdmlzdWFsTGluZXNBdFdyYXBXaWR0aFxuICAgIH1cblxuICAgIGNvbnN0IGxpbmVzRm9ySGVpZ2h0ID0gIWlzRW1wdHkgJiYgY2FudmFzQ29udGV4dCA/IHZpc3VhbExpbmVzQXRDdXJyZW50V2lkdGggOiB2aXN1YWxMaW5lc0F0V3JhcFdpZHRoXG5cbiAgICBsZXQgbmV3SGVpZ2h0OiBudW1iZXJcbiAgICAvKiogVW5hIGzDrW5lYSBhbCBhbmNobyBhY3R1YWw6IGFsdHVyYSBmaWphZGEgcG9yIHRpcG9ncmFmw61hICgrIHBhZGRpbmcvYm9yZGUpLCBubyBzY3JvbGxIZWlnaHQg4oCUIGV2aXRhIH4zOXB4IGFsIHBhc2FyIGEgc3RhY2tlZCBjdWFuZG8gZWwgY2FudmFzIHlhIGN1ZW50YSAxIGzDrW5lYSBhIGFuY2hvIGFtcGxpbyBwZXJvIHNjcm9sbEhlaWdodCBhw7puIHZpZW5lIGRlIGzDrW5lYXMgdmllamFzL3dyYXAgYW50ZXJpb3IuICovXG4gICAgY29uc3Qgc25hcHBlZFNpbmdsZUxpbmVPdXRlckhlaWdodCA9IE1hdGgucm91bmQoc2luZ2xlTGluZUhlaWdodClcbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgbmV3SGVpZ2h0ID0gc25hcHBlZFNpbmdsZUxpbmVPdXRlckhlaWdodFxuICAgIH0gZWxzZSBpZiAoIWhhc011bHRpcGxlVmlzdWFsTGluZXMpIHtcbiAgICAgIG5ld0hlaWdodCA9IHNuYXBwZWRTaW5nbGVMaW5lT3V0ZXJIZWlnaHRcbiAgICB9IGVsc2UgaWYgKGxpbmVzRm9ySGVpZ2h0IDw9IDEpIHtcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKE1hdGgubWF4KHNuYXBwZWRTaW5nbGVMaW5lT3V0ZXJIZWlnaHQsIG1pbkhlaWdodCksIG1heEhlaWdodClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc25hcHBlZEhlaWdodCA9IHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyVG9wICsgYm9yZGVyQm90dG9tICsgbGluZXNGb3JIZWlnaHQgKiBsaW5lSGVpZ2h0XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbihNYXRoLm1heChNYXRoLm1pbihzY3JvbGxIZWlnaHQsIHNuYXBwZWRIZWlnaHQpLCBtaW5IZWlnaHQpLCBtYXhIZWlnaHQpXG4gICAgfVxuXG4gICAgc2V0SXNUZXh0TXVsdGlsaW5lKHByZXYgPT4gKHByZXYgPT09IG5leHRNdWx0aWxpbmUgPyBwcmV2IDogbmV4dE11bHRpbGluZSkpXG5cbiAgICB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHQgPSBwcmV2aW91c01pbkhlaWdodCB8fCBgJHttaW5IZWlnaHR9cHhgXG4gICAgdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0ID0gcHJldmlvdXNNYXhIZWlnaHQgfHwgJzE3MHB4J1xuXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YFxuICB9LCBbaW5wdXRSZWYsIHNldElzVGV4dE11bHRpbGluZV0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBoYW5kbGVSZXNpemUoKVxuICB9LCBbaGFuZGxlUmVzaXplXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50Py52YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9IG51bGxcbiAgICB9XG4gIH0sIFtyZXNpemVFcG9jaF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW2NoYXRJZCwgbmV3Q2hhdEtleV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaGFuZGxlUmVzaXplKClcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbZGlzYWJsZWQsIGhhbmRsZVJlc2l6ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xlYXJTZXEgPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9IG51bGxcbiAgICBwcmVzZW5jZVByZXZSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfSlcbiAgfSwgW2NsZWFyU2VxLCBoYW5kbGVSZXNpemVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICB9KVxuICAgIHJldHVybiAoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShpZClcbiAgfSwgW3Jlc2l6ZUVwb2NoLCBoYW5kbGVSZXNpemVdKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGhhc1RyaW0gPSBlLnRhcmdldC52YWx1ZS50cmltKCkubGVuZ3RoID4gMFxuICAgIGlmIChoYXNUcmltICE9PSBwcmVzZW5jZVByZXZSZWYuY3VycmVudCkge1xuICAgICAgcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQgPSBoYXNUcmltXG4gICAgICBvblR5cGluZ1ByZXNlbmNlQ2hhbmdlKGhhc1RyaW0pXG4gICAgfVxuICAgIHNldFJlc2l6ZUVwb2NoKHggPT4geCArIDEpXG4gICAgb25DaGFuZ2VQcm9wPy4oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICBjb25zdCB2ID0gaW5wdXRSZWYuY3VycmVudD8udmFsdWUgPz8gJydcbiAgICBjb25zdCBoYXNUcmltID0gdi50cmltKCkubGVuZ3RoID4gMFxuICAgIGlmIChoYXNUcmltICE9PSBwcmVzZW5jZVByZXZSZWYuY3VycmVudCkge1xuICAgICAgcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQgPSBoYXNUcmltXG4gICAgICBvblR5cGluZ1ByZXNlbmNlQ2hhbmdlKGhhc1RyaW0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGlmICghc2VuZERpc2FibGVkICYmICFkaXNhYmxlZCkge1xuICAgICAgICBvbkVudGVyU2VuZCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkTUFJQUlucHV0XG4gICAgICByZWY9e2lucHV0UmVmIGFzIFJlZk9iamVjdDxIVE1MVGV4dEFyZWFFbGVtZW50Pn1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICR0b29sYmFyTGF5b3V0VmFyaWFudD1cInN0YWNrZWRSb3dzXCJcbiAgICAgIG9uQmx1cj17aGFuZGxlQmx1cn1cbiAgICAvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQXFDQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBRzdHLFNBQVNDLGVBQWUsUUFBUSxVQUFVOztBQUUxQztBQUNBO0FBQ0E7QUFGQSxTQUFBQyxHQUFBLElBQUFDLElBQUE7QUFHQSxTQUFTQyx1QkFBdUJBLENBQUNDLEdBQVcsRUFBRUMsY0FBc0IsRUFBRUMsZ0JBQXVDLEVBQVU7RUFDckgsSUFBSUQsY0FBYyxJQUFJLENBQUMsRUFBRTtJQUN2QixPQUFPLENBQUM7RUFDVjtFQUNBLElBQU1FLFVBQVUsR0FBR0gsR0FBRyxDQUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQ2xDLElBQUlDLEtBQUssR0FBRyxDQUFDO0VBQUEsSUFBQUMsU0FBQSxHQUFBQywwQkFBQSxDQUNXSixV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
|
|
193
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcyIsInJlc29sdmVTaW5nbGVMaW5lT3V0ZXJIZWlnaHQiLCJyZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0IiwicmVzb2x2ZVZpc3VhbExpbmVDb3VudHMiLCJTdHlsZWRNQUlBSW5wdXQiLCJqc3giLCJfanN4IiwiTUFJQUlucHV0RWRpdG9yIiwiX3JlZiIsImlucHV0UmVmIiwiZGlzYWJsZWQiLCJwbGFjZWhvbGRlciIsImFsaWduQnV0dG9ucyIsInNldElzVGV4dE11bHRpbGluZSIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJjbGVhclNlcSIsInNlbmREaXNhYmxlZCIsIm9uVHlwaW5nUHJlc2VuY2VDaGFuZ2UiLCJvbkVudGVyU2VuZCIsIm9uQ2hhbmdlUHJvcCIsInRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZiIsInByZXNlbmNlUHJldlJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInJlc2l6ZUVwb2NoIiwic2V0UmVzaXplRXBvY2giLCJoYW5kbGVSZXNpemUiLCJfdGV4dGFyZWFNaW5Db250ZW50V2kiLCJ0ZXh0YXJlYSIsImN1cnJlbnQiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJwcmV2aW91c01pbkhlaWdodCIsInN0eWxlIiwicHJldmlvdXNNYXhIZWlnaHQiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJjb21wdXRlZFN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImxpbmVIZWlnaHQiLCJwYXJzZUZsb2F0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJib3JkZXJUb3AiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbSIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm94TWV0cmljcyIsInNpbmdsZUxpbmVIZWlnaHQiLCJpc0VtcHR5IiwidmFsdWUiLCJ0cmltIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwidGV4dGFyZWFXaWR0aCIsIm9mZnNldFdpZHRoIiwiTWF0aCIsIm1pbiIsIndyYXBDaGVja1dpZHRoIiwiY2FudmFzIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2FudmFzQ29udGV4dCIsImdldENvbnRleHQiLCJ0ZXh0IiwidGV4dGFyZWFTdHlsZXMiLCJmb250IiwiY29uY2F0IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsIm1lYXN1cmVTZWdtZW50V2lkdGgiLCJzZWdtZW50IiwibWVhc3VyZVRleHQiLCJ3aWR0aCIsImNhbnZhc01lYXN1cmVJbmRpY2F0ZXNNdWx0aWxpbmUiLCJoYXNNdWx0aXBsZVZpc3VhbExpbmVzIiwibmV4dE11bHRpbGluZSIsIl9yZXNvbHZlVmlzdWFsTGluZUNvdSIsImxpbmVzRm9ySGVpZ2h0IiwibmV3SGVpZ2h0Iiwic2luZ2xlTGluZU91dGVySGVpZ2h0IiwicHJldiIsIl9pbnB1dFJlZiRjdXJyZW50IiwiZm9jdXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpZCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlQ2hhbmdlIiwiZSIsImhhc1RyaW0iLCJ0YXJnZXQiLCJsZW5ndGgiLCJ4IiwiaGFuZGxlQmx1ciIsIl9pbnB1dFJlZiRjdXJyZW50JHZhbCIsIl9pbnB1dFJlZiRjdXJyZW50MiIsInYiLCJoYW5kbGVLZXlEb3duIiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsInJlZiIsIm9uQ2hhbmdlIiwib25LZXlEb3duIiwiJHRvb2xiYXJMYXlvdXRWYXJpYW50Iiwib25CbHVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dEVkaXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIEtleWJvYXJkRXZlbnQsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCwgUmVmT2JqZWN0LCBTZXRTdGF0ZUFjdGlvbiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQge1xuICBkZXRlY3RNdWx0aWxpbmVGcm9tQ2FudmFzLFxuICByZXNvbHZlU2luZ2xlTGluZU91dGVySGVpZ2h0LFxuICByZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0LFxuICByZXNvbHZlVmlzdWFsTGluZUNvdW50cyxcbn0gZnJvbSAnLi9NQUlBSW5wdXRFZGl0b3IuaGVscGVycydcbmltcG9ydCB7IFN0eWxlZE1BSUFJbnB1dCB9IGZyb20gJy4vc3R5bGVzJ1xuXG5leHBvcnQgdHlwZSBNQUlBSW5wdXRFZGl0b3JQcm9wcyA9IHtcbiAgaW5wdXRSZWY6IFJlZk9iamVjdDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbD5cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGFsaWduQnV0dG9ucz86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbiAgc2V0SXNUZXh0TXVsdGlsaW5lOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbiAgLyoqIEluY3JlbWVudGFyIGRlc2RlIGVsIHBhZHJlIHRyYXMgZW52aWFyIC8gY2FtYmlhciBzZXNpw7NuIHBhcmEgc2luY3Jvbml6YXIgbWVkaWNpw7NuIHNpbiBlc3RhZG8gZGVsIHRleHRvIGVuIGVsIHBhZHJlLiAqL1xuICBjbGVhclNlcTogbnVtYmVyXG4gIHNlbmREaXNhYmxlZDogYm9vbGVhblxuICBvblR5cGluZ1ByZXNlbmNlQ2hhbmdlOiAoaGFzVHJpbW1lZFRleHQ6IGJvb2xlYW4pID0+IHZvaWRcbiAgb25FbnRlclNlbmQ6ICgpID0+IHZvaWRcbiAgb25DaGFuZ2VQcm9wPzogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgTUFJQUlucHV0RWRpdG9yID0gKHtcbiAgaW5wdXRSZWYsXG4gIGRpc2FibGVkLFxuICBwbGFjZWhvbGRlcixcbiAgYWxpZ25CdXR0b25zLFxuICBzZXRJc1RleHRNdWx0aWxpbmUsXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbiAgY2xlYXJTZXEsXG4gIHNlbmREaXNhYmxlZCxcbiAgb25UeXBpbmdQcmVzZW5jZUNoYW5nZSxcbiAgb25FbnRlclNlbmQsXG4gIG9uQ2hhbmdlUHJvcCxcbn06IE1BSUFJbnB1dEVkaXRvclByb3BzKSA9PiB7XG4gIGNvbnN0IHRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBwcmVzZW5jZVByZXZSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBTb2xvIHBhcmEgcmUtYWdlbmRhciBtZWRpY2nDs24gZGUgYWx0byBzaW4gZ3VhcmRhciBlbCBzdHJpbmcgZW4gZWwgcGFkcmUgKGFpc2xhIHJlLXJlbmRlcnMgZGVsIHRvb2xiYXIpLiAqL1xuICBjb25zdCBbcmVzaXplRXBvY2gsIHNldFJlc2l6ZUVwb2NoXSA9IHVzZVN0YXRlKDApXG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRleHRhcmVhID0gaW5wdXRSZWYuY3VycmVudFxuICAgIGlmICghdGV4dGFyZWEpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBDb2luY2lkZSBjb24gU3R5bGVkTUFJQUlucHV0OiBsaW5lLWhlaWdodCAyMHB4IHNvYnJlIGZ1ZW50ZSAxNHB4ICh+dW5hIGzDrW5lYSBkZSB0ZXh0byB2aXNpYmxlKS4gKi9cbiAgICBjb25zdCBtaW5IZWlnaHQgPSAyMFxuICAgIGNvbnN0IG1heEhlaWdodCA9IDE3MFxuXG4gICAgY29uc3QgcHJldmlvdXNNaW5IZWlnaHQgPSB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHRcbiAgICBjb25zdCBwcmV2aW91c01heEhlaWdodCA9IHRleHRhcmVhLnN0eWxlLm1heEhlaWdodFxuXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nXG4gICAgdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0ID0gJzBweCdcbiAgICB0ZXh0YXJlYS5zdHlsZS5tYXhIZWlnaHQgPSAnbm9uZSdcblxuICAgIHZvaWQgdGV4dGFyZWEub2Zmc2V0SGVpZ2h0XG5cbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmxpbmVIZWlnaHQpIHx8IDIwXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nVG9wKSB8fCAwXG4gICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nQm90dG9tKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSB8fCAwXG5cbiAgICBjb25zdCBib3hNZXRyaWNzID0geyBsaW5lSGVpZ2h0LCBwYWRkaW5nVG9wLCBwYWRkaW5nQm90dG9tLCBib3JkZXJUb3AsIGJvcmRlckJvdHRvbSB9XG4gICAgY29uc3Qgc2luZ2xlTGluZUhlaWdodCA9IHJlc29sdmVTaW5nbGVMaW5lT3V0ZXJIZWlnaHQoYm94TWV0cmljcylcblxuICAgIGNvbnN0IGlzRW1wdHkgPSB0ZXh0YXJlYS52YWx1ZS50cmltKCkgPT09ICcnXG5cbiAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nTGVmdCkgfHwgMFxuICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nUmlnaHQpIHx8IDBcbiAgICBjb25zdCBib3JkZXJMZWZ0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCkgfHwgMFxuICAgIGNvbnN0IGJvcmRlclJpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpIHx8IDBcbiAgICBjb25zdCB0ZXh0YXJlYVdpZHRoID0gdGV4dGFyZWEub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodCAtIGJvcmRlckxlZnQgLSBib3JkZXJSaWdodFxuXG4gICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9XG4gICAgICAgIHRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZi5jdXJyZW50ID09PSBudWxsXG4gICAgICAgICAgPyB0ZXh0YXJlYVdpZHRoXG4gICAgICAgICAgOiBNYXRoLm1pbih0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCwgdGV4dGFyZWFXaWR0aClcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwQ2hlY2tXaWR0aCA9IHRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZi5jdXJyZW50ID8/IHRleHRhcmVhV2lkdGhcblxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gICAgY29uc3QgY2FudmFzQ29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXG4gICAgY29uc3QgdGV4dCA9IHRleHRhcmVhLnZhbHVlIHx8ICcnXG5cbiAgICBpZiAoY2FudmFzQ29udGV4dCkge1xuICAgICAgY29uc3QgdGV4dGFyZWFTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICAgIGNhbnZhc0NvbnRleHQuZm9udCA9IGAke3RleHRhcmVhU3R5bGVzLmZvbnRXZWlnaHR9ICR7dGV4dGFyZWFTdHlsZXMuZm9udFNpemV9ICR7dGV4dGFyZWFTdHlsZXMuZm9udEZhbWlseX1gXG4gICAgfVxuXG4gICAgY29uc3QgbWVhc3VyZVNlZ21lbnRXaWR0aCA9IChzZWdtZW50OiBzdHJpbmcpID0+IChjYW52YXNDb250ZXh0ID8gY2FudmFzQ29udGV4dC5tZWFzdXJlVGV4dChzZWdtZW50KS53aWR0aCA6IDApXG5cbiAgICBjb25zdCBjYW52YXNNZWFzdXJlSW5kaWNhdGVzTXVsdGlsaW5lID0gY2FudmFzQ29udGV4dFxuICAgICAgPyBkZXRlY3RNdWx0aWxpbmVGcm9tQ2FudmFzKHRleHQsIHdyYXBDaGVja1dpZHRoLCBtZWFzdXJlU2VnbWVudFdpZHRoLCBzY3JvbGxIZWlnaHQsIHNpbmdsZUxpbmVIZWlnaHQpXG4gICAgICA6IHNjcm9sbEhlaWdodCA+IHNpbmdsZUxpbmVIZWlnaHQgKiAyLjA1XG5cbiAgICBjb25zdCBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZVxuXG4gICAgY29uc3QgbmV4dE11bHRpbGluZSA9ICFpc0VtcHR5ICYmIGhhc011bHRpcGxlVmlzdWFsTGluZXNcblxuICAgIGNvbnN0IHsgbGluZXNGb3JIZWlnaHQgfSA9IHJlc29sdmVWaXN1YWxMaW5lQ291bnRzKHtcbiAgICAgIGlzRW1wdHksXG4gICAgICBjYW52YXNDb250ZXh0LFxuICAgICAgdGV4dCxcbiAgICAgIHdyYXBDaGVja1dpZHRoLFxuICAgICAgdGV4dGFyZWFXaWR0aCxcbiAgICAgIG1lYXN1cmVTZWdtZW50V2lkdGgsXG4gICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICBzaW5nbGVMaW5lSGVpZ2h0LFxuICAgIH0pXG5cbiAgICBjb25zdCBuZXdIZWlnaHQgPSByZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0KHtcbiAgICAgIGlzRW1wdHksXG4gICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzLFxuICAgICAgbGluZXNGb3JIZWlnaHQsXG4gICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICBtaW5IZWlnaHQsXG4gICAgICBtYXhIZWlnaHQsXG4gICAgICBzaW5nbGVMaW5lT3V0ZXJIZWlnaHQ6IHNpbmdsZUxpbmVIZWlnaHQsXG4gICAgICBsaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcCxcbiAgICAgIHBhZGRpbmdCb3R0b20sXG4gICAgICBib3JkZXJUb3AsXG4gICAgICBib3JkZXJCb3R0b20sXG4gICAgfSlcblxuICAgIHNldElzVGV4dE11bHRpbGluZShwcmV2ID0+IChwcmV2ID09PSBuZXh0TXVsdGlsaW5lID8gcHJldiA6IG5leHRNdWx0aWxpbmUpKVxuXG4gICAgdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0ID0gcHJldmlvdXNNaW5IZWlnaHQgfHwgYCR7bWluSGVpZ2h0fXB4YFxuICAgIHRleHRhcmVhLnN0eWxlLm1heEhlaWdodCA9IHByZXZpb3VzTWF4SGVpZ2h0IHx8ICcxNzBweCdcblxuICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGBcbiAgfSwgW2lucHV0UmVmLCBzZXRJc1RleHRNdWx0aWxpbmVdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaGFuZGxlUmVzaXplKClcbiAgfSwgW2hhbmRsZVJlc2l6ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudD8udmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgdGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgfVxuICB9LCBbcmVzaXplRXBvY2hdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtjaGF0SWQsIG5ld0NoYXRLZXldKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgJiYgIWRpc2FibGVkKSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKClcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW2Rpc2FibGVkLCBoYW5kbGVSZXNpemVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNsZWFyU2VxID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgIH0pXG4gIH0sIFtjbGVhclNlcSwgaGFuZGxlUmVzaXplXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfSlcbiAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpXG4gIH0sIFtyZXNpemVFcG9jaCwgaGFuZGxlUmVzaXplXSlcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBoYXNUcmltID0gZS50YXJnZXQudmFsdWUudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBpZiAoaGFzVHJpbSAhPT0gcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQpIHtcbiAgICAgIHByZXNlbmNlUHJldlJlZi5jdXJyZW50ID0gaGFzVHJpbVxuICAgICAgb25UeXBpbmdQcmVzZW5jZUNoYW5nZShoYXNUcmltKVxuICAgIH1cbiAgICBzZXRSZXNpemVFcG9jaCh4ID0+IHggKyAxKVxuICAgIG9uQ2hhbmdlUHJvcD8uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSAoKSA9PiB7XG4gICAgY29uc3QgdiA9IGlucHV0UmVmLmN1cnJlbnQ/LnZhbHVlID8/ICcnXG4gICAgY29uc3QgaGFzVHJpbSA9IHYudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBpZiAoaGFzVHJpbSAhPT0gcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQpIHtcbiAgICAgIHByZXNlbmNlUHJldlJlZi5jdXJyZW50ID0gaGFzVHJpbVxuICAgICAgb25UeXBpbmdQcmVzZW5jZUNoYW5nZShoYXNUcmltKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBpZiAoIXNlbmREaXNhYmxlZCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgb25FbnRlclNlbmQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZE1BSUFJbnB1dFxuICAgICAgcmVmPXtpbnB1dFJlZiBhcyBSZWZPYmplY3Q8SFRNTFRleHRBcmVhRWxlbWVudD59XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAkdG9vbGJhckxheW91dFZhcmlhbnQ9XCJzdGFja2VkUm93c1wiXG4gICAgICBvbkJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgLz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFxQ0EsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUc3RyxTQUNFQyx5QkFBeUIsRUFDekJDLDRCQUE0QixFQUM1QkMsNEJBQTRCLEVBQzVCQyx1QkFBdUIsUUFDbEIsMkJBQTJCO0FBQ2xDLFNBQVNDLGVBQWUsUUFBUSxVQUFVO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBa0IxQyxPQUFPLElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQUMsSUFBQSxFQWFBO0VBQUEsSUFaMUJDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO0lBQ1JDLFFBQVEsR0FBQUYsSUFBQSxDQUFSRSxRQUFRO0lBQ1JDLFdBQVcsR0FBQUgsSUFBQSxDQUFYRyxXQUFXO0lBQ1hDLFlBQVksR0FBQUosSUFBQSxDQUFaSSxZQUFZO0lBQ1pDLGtCQUFrQixHQUFBTCxJQUFBLENBQWxCSyxrQkFBa0I7SUFDbEJDLE1BQU0sR0FBQU4sSUFBQSxDQUFOTSxNQUFNO0lBQ05DLFVBQVUsR0FBQVAsSUFBQSxDQUFWTyxVQUFVO0lBQ1ZDLFFBQVEsR0FBQVIsSUFBQSxDQUFSUSxRQUFRO0lBQ1JDLFlBQVksR0FBQVQsSUFBQSxDQUFaUyxZQUFZO0lBQ1pDLHNCQUFzQixHQUFB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
|