@projectcor/maia-components 2.11.39 → 2.11.40-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 +22 -11
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +36 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +181 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +322 -0
- package/lib/components/atoms/ContextMentionChip/index.js +4 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +191 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
- package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +283 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +114 -0
- package/lib/components/atoms/ContextMentionItem/index.js +2 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +142 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +75 -0
- package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +238 -321
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +269 -0
- package/lib/components/atoms/MAIAInput/styles.js +75 -46
- package/lib/components/atoms/icons/NotionIcon.js +36 -0
- package/lib/components/atoms/icons/SubtaskIcon.js +36 -0
- package/lib/components/atoms/icons/index.js +2 -1
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +31 -3
- package/lib/components/molecules/ChatAIMessages/newStyles.js +5 -2
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +8 -6
- package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +68 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
- package/lib/components/molecules/ContextMentionInput/index.js +2 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +9 -5
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +6 -2
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
- package/lib/constants/taskLinkIcon.js +6 -0
- package/lib/context/cor-user.js +1 -1
- package/lib/dev/DevContextMentionInput.js +65 -0
- package/lib/dev/Providers.js +11 -6
- package/lib/hooks/useCaretPosition.js +35 -0
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +21 -11
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
- package/lib/hooks/useContextMentions.js +270 -0
- package/lib/hooks/useEntitySearch.js +535 -0
- package/lib/hooks/useEvent.js +6 -1
- package/lib/hooks/useMentionAllowedTypes.js +103 -0
- package/lib/hooks/useMentionPopover.js +319 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
- package/lib/hooks/useTaskPanel.js +3 -10
- package/lib/hooks/useTextOverflowEllipsisTooltip.js +35 -0
- package/lib/lang/br/index.js +24 -1
- package/lib/lang/en/index.js +24 -1
- package/lib/lang/es/index.js +24 -1
- package/lib/lang/fr/index.js +23 -1
- package/lib/services/maia/Chats/getChatMessages.js +29 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +8 -5
- package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
- package/lib/services/maia/RecentTasks/getRecentTasks.js +43 -0
- package/lib/services/maia/RecentTasks/index.js +6 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
- package/lib/services/maia/RecentUsers/index.js +6 -0
- package/lib/services/query/entitySearchQuery.js +16 -0
- package/lib/services/query/usersDirectoryQuery.js +19 -0
- package/lib/services/utils/mapChatMessages.js +12 -5
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/contextMention.js +37 -0
- package/lib/utils/contextMentionIcons.js +115 -0
- package/lib/utils/contextMentionLabel.js +4 -0
- package/lib/utils/contextMentionTypeLabel.js +17 -0
- package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
- package/lib/utils/openTaskInCorPanel.js +18 -0
- package/lib/utils/renderContextMentions.js +293 -0
- package/package.json +1 -1
package/lib/hooks/useEvent.js
CHANGED
|
@@ -35,6 +35,11 @@ var CHAT_AI_EVENTS = {
|
|
|
35
35
|
aiChatAgentSelect: 'AI_CHAT_AGENTE_SELECTED',
|
|
36
36
|
aiChatSearchContextOpen: 'AI_CHAT_SEARCH_CONTEXT_OPEN',
|
|
37
37
|
aiChatSearchContextSelectResult: 'AI_CHAT_SEARCH_CONTEXT_SELECT_RESULT',
|
|
38
|
+
aiChatMentionOpen: 'AI_CHAT_MENTION_OPEN',
|
|
39
|
+
aiChatMentionTypeSwitch: 'AI_CHAT_MENTION_TYPE_SWITCH',
|
|
40
|
+
aiChatMentionSelect: 'AI_CHAT_MENTION_SELECT',
|
|
41
|
+
aiChatMentionSend: 'AI_CHAT_MENTION_SEND',
|
|
42
|
+
aiChatMentionRemove: 'AI_CHAT_MENTION_REMOVE',
|
|
38
43
|
aiChatBreadcrumbChange: 'AI_CHAT_BREADCRUMB_CHANGE',
|
|
39
44
|
aiChatFavorite: 'AI_CHAT_FAVORITE',
|
|
40
45
|
aiChatTools: 'AI_CHAT_TOOLS',
|
|
@@ -75,4 +80,4 @@ export var useEvent = function useEvent() {
|
|
|
75
80
|
}, [companyId, userId]);
|
|
76
81
|
return triggerEvent;
|
|
77
82
|
};
|
|
78
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsImRpc3BhdGNoQW1wbGl0dWRlIiwidXNlVXNlciIsIlBST0pFQ1RfUkVTVU1FX0VWRU5UUyIsInByb2plY3RSZXN1bWVPcGVuIiwicHJvamVjdFJlc3VtZU9wZW5Db25maWd1cmUiLCJwcm9qZWN0UmVzdW1lQ29uZmlnQ2hhbmdlIiwicHJvamVjdFJlc3VtZUdlbmVyYXRlIiwicHJvamVjdFJlc3VtZUNsb3NlIiwicHJvamVjdFJlc3VtZUV4cGFuZCIsInByb2plY3RSZXN1bWVCYWNrVGVtcGxhdGVzIiwicHJvamVjdFJlc3VtZUZlZWRiYWNrIiwicHJvamVjdFJlc3VtZUNvcHkiLCJwcm9qZWN0UmVzdW1lR2VuZXJhdGlvbkNvbXBsZXRlIiwiQ0hBVF9BSV9FVkVOVFMiLCJwbUFpT3BlbiIsInBtQWlGcmVxdWVudFF1ZXN0aW9uIiwicG1BaVR5cGVkVGV4dCIsInBtQWlTZW5kUXVlc3Rpb24iLCJwbUFpT3BlbkNoYXRIaXN0b3J5IiwicG1BaU5ld0NvbnZlcnNhdGlvbiIsInBtQWlPcGVuQ29udmVyc2F0aW9uIiwicG1BaU9wZW5NZW51IiwicG1BaU1lbnVEZWxldGUiLCJwbUFpTWVudUVkaXQiLCJwbUFpQmFja0J1dHRvbiIsImFpQ2hhdEZhcSIsImFpQ2hhdFNlbmQiLCJhaUNoYXRSZXNwb25zZSIsImFpQ2hhdE9wZW5BZ2VudFNlbGVjdCIsImFpQ2hhdEFnZW50U2VsZWN0IiwiYWlDaGF0U2VhcmNoQ29udGV4dE9wZW4iLCJhaUNoYXRTZWFyY2hDb250ZXh0U2VsZWN0UmVzdWx0IiwiYWlDaGF0TWVudGlvbk9wZW4iLCJhaUNoYXRNZW50aW9uVHlwZVN3aXRjaCIsImFpQ2hhdE1lbnRpb25TZWxlY3QiLCJhaUNoYXRNZW50aW9uU2VuZCIsImFpQ2hhdE1lbnRpb25SZW1vdmUiLCJhaUNoYXRCcmVhZGNydW1iQ2hhbmdlIiwiYWlDaGF0RmF2b3JpdGUiLCJhaUNoYXRUb29scyIsImFpQ2hhdFBsdXNPcGVuIiwiYWlDaGF0U3RvcFJlc3BvbnNlIiwiYWlDaGF0U2VsZWN0RkFRIiwiYWlDaGF0SGl0bCIsImFpQ2hhdEhpdGxPcHRpb24iLCJhaUNoYXRNcE9wZW4iLCJhaUNoYXRNcFNlbGVjdEFnZW50IiwiYWlDaGF0U3VnZ2VzdGVkQW5zd2VyIiwiYWlDaGF0T3BlblZpZXdPcHRpb25zIiwiYWlDaGF0U2VsZWN0Vmlld09wdGlvbnMiLCJhaUNoYXREcmFnZ2FibGUiLCJBQk1fQUdFTlRfRVZFTlRTIiwib3Blbk1vZGFsIiwiY2FuY2VsTW9kYWwiLCJ0YWJTZWN0aW9uIiwiYWRkRmlsZSIsImNvbmZpcm1BY3Rpb24iLCJhY2Nlc3NpYmlsaXR5VHlwZSIsImFjY2Vzc2liaWxpdHlTZWxlY3RDbGllbnQiLCJzZWxlY3RNb2RlbCIsImNob29zZU1vZGVsIiwiRVZFTlRTIiwiX29iamVjdFNwcmVhZCIsInVzZUV2ZW50IiwiX3VzZVVzZXIiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwidXNlcklkIiwiaWQiLCJ0cmlnZ2VyRXZlbnQiLCJldmVudE5hbWUiLCJhcmdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgZGlzcGF0Y2hBbXBsaXR1ZGUgZnJvbSAnQHByb2plY3Rjb3IvY29yLWNvbW1vbnMvbGliL3V0aWxzL2Rpc3BhdGNoQW1wbGl0dWRlJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmNvbnN0IFBST0pFQ1RfUkVTVU1FX0VWRU5UUyA9IHtcbiAgcHJvamVjdFJlc3VtZU9wZW46ICdQUk9KRUNUX1JFU1VNRV9PUEVOJyxcbiAgcHJvamVjdFJlc3VtZU9wZW5Db25maWd1cmU6ICdQUk9KRUNUX1JFU1VNRV9PUEVOX0NPTkZJR1VSRScsXG4gIHByb2plY3RSZXN1bWVDb25maWdDaGFuZ2U6ICdQUk9KRUNUX1JFU1VNRV9DT05GSUdfQ0hBTkdFJyxcbiAgcHJvamVjdFJlc3VtZUdlbmVyYXRlOiAnUFJPSkVDVF9SRVNVTUVfR0VORVJBVEUnLFxuICBwcm9qZWN0UmVzdW1lQ2xvc2U6ICdQUk9KRUNUX1JFU1VNRV9DTE9TRScsXG4gIHByb2plY3RSZXN1bWVFeHBhbmQ6ICdQUk9KRUNUX1JFU1VNRV9FWFBBTkQnLFxuICBwcm9qZWN0UmVzdW1lQmFja1RlbXBsYXRlczogJ1BST0pFQ1RfUkVTVU1FX0JBQ0tfVEVNUExBVEVTJyxcbiAgcHJvamVjdFJlc3VtZUZlZWRiYWNrOiAnUFJPSkVDVF9SRVNVTUVfRkVFREJBQ0snLFxuICBwcm9qZWN0UmVzdW1lQ29weTogJ1BST0pFQ1RfUkVTVU1FX0NPUFknLFxuICBwcm9qZWN0UmVzdW1lR2VuZXJhdGlvbkNvbXBsZXRlOiAnUFJPSkVDVF9SRVNVTUVfR0VORVJBVElPTl9DT01QTEVURScsXG59XG5cbmNvbnN0IENIQVRfQUlfRVZFTlRTID0ge1xuICBwbUFpT3BlbjogJ1BNX0FJX09QRU4nLFxuICBwbUFpRnJlcXVlbnRRdWVzdGlvbjogJ1BNX0FJX0ZSRVFVRU5UX1FVRVNUSU9OJyxcbiAgcG1BaVR5cGVkVGV4dDogJ0FJX0NIQVRfVFlQRUQnLFxuICBwbUFpU2VuZFF1ZXN0aW9uOiAnUE1fQUlfU0VORF9RVUVTVElPTicsXG4gIHBtQWlPcGVuQ2hhdEhpc3Rvcnk6ICdQTV9BSV9PUEVOX0NIQVRfSElTVE9SWScsXG4gIHBtQWlOZXdDb252ZXJzYXRpb246ICdQTV9BSV9ORVdfQ09OVkVSU0FUSU9OJyxcbiAgcG1BaU9wZW5Db252ZXJzYXRpb246ICdQTV9BSV9PUEVOX0NPTlZFUlNBVElPTicsXG4gIHBtQWlPcGVuTWVudTogJ1BNX0FJX09QRU5fTUVOVScsXG4gIHBtQWlNZW51RGVsZXRlOiAnUE1fQUlfTUVOVV9ERUxFVEUnLFxuICBwbUFpTWVudUVkaXQ6ICdQTV9BSV9NRU5VX0VESVQnLFxuICBwbUFpQmFja0J1dHRvbjogJ1BNX0FJX0JBQ0tfQlVUVE9OJyxcbiAgYWlDaGF0RmFxOiAnQUlfQ0hBVF9GQVEnLFxuICBhaUNoYXRTZW5kOiAnQUlfQ0hBVF9TRU5EJyxcbiAgYWlDaGF0UmVzcG9uc2U6ICdBSV9DSEFUX1JFU1BPTlNFJyxcbiAgYWlDaGF0T3BlbkFnZW50U2VsZWN0OiAnQUlfQ0hBVF9PUEVOX0FHRU5URV9TRUxFQ1QnLFxuICBhaUNoYXRBZ2VudFNlbGVjdDogJ0FJX0NIQVRfQUdFTlRFX1NFTEVDVEVEJyxcbiAgYWlDaGF0U2VhcmNoQ29udGV4dE9wZW46ICdBSV9DSEFUX1NFQVJDSF9DT05URVhUX09QRU4nLFxuICBhaUNoYXRTZWFyY2hDb250ZXh0U2VsZWN0UmVzdWx0OiAnQUlfQ0hBVF9TRUFSQ0hfQ09OVEVYVF9TRUxFQ1RfUkVTVUxUJyxcbiAgYWlDaGF0TWVudGlvbk9wZW46ICdBSV9DSEFUX01FTlRJT05fT1BFTicsXG4gIGFpQ2hhdE1lbnRpb25UeXBlU3dpdGNoOiAnQUlfQ0hBVF9NRU5USU9OX1RZUEVfU1dJVENIJyxcbiAgYWlDaGF0TWVudGlvblNlbGVjdDogJ0FJX0NIQVRfTUVOVElPTl9TRUxFQ1QnLFxuICBhaUNoYXRNZW50aW9uU2VuZDogJ0FJX0NIQVRfTUVOVElPTl9TRU5EJyxcbiAgYWlDaGF0TWVudGlvblJlbW92ZTogJ0FJX0NIQVRfTUVOVElPTl9SRU1PVkUnLFxuICBhaUNoYXRCcmVhZGNydW1iQ2hhbmdlOiAnQUlfQ0hBVF9CUkVBRENSVU1CX0NIQU5HRScsXG4gIGFpQ2hhdEZhdm9yaXRlOiAnQUlfQ0hBVF9GQVZPUklURScsXG4gIGFpQ2hhdFRvb2xzOiAnQUlfQ0hBVF9UT09MUycsXG4gIGFpQ2hhdFBsdXNPcGVuOiAnQUlfQ0hBVF9QTFVTX09QRU4nLFxuICBhaUNoYXRTdG9wUmVzcG9uc2U6ICdBSV9DSEFUX1NUT1BfUkVTUE9OU0UnLFxuICBhaUNoYXRTZWxlY3RGQVE6ICdBSV9DSEFUX1NFTEVDVF9GQVEnLFxuICBhaUNoYXRIaXRsOiAnQUlfQ0hBVF9ISVRMJyxcbiAgYWlDaGF0SGl0bE9wdGlvbjogJ0FJX0NIQVRfSElUTF9PUFRJT04nLFxuICBhaUNoYXRNcE9wZW46ICdBSV9DSEFUX01QX09QRU4nLFxuICBhaUNoYXRNcFNlbGVjdEFnZW50OiAnQUlfQ0hBVF9NUF9TRUxFQ1RfQUdFTlQnLFxuICBhaUNoYXRTdWdnZXN0ZWRBbnN3ZXI6ICdBSV9DSEFUX1NVR0dFU1RFRF9BTlNXRVInLFxuICBhaUNoYXRPcGVuVmlld09wdGlvbnM6ICdBSV9DSEFUX09QRU5fVklFV19PUFRJT05TJyxcbiAgYWlDaGF0U2VsZWN0Vmlld09wdGlvbnM6ICdBSV9DSEFUX1NFTEVDVF9WSUVXX09QVElPTlMnLFxuICBhaUNoYXREcmFnZ2FibGU6ICdBSV9DSEFUX0RSQUdHQUJMRScsXG59XG5cbmNvbnN0IEFCTV9BR0VOVF9FVkVOVFMgPSB7XG4gIG9wZW5Nb2RhbDogJ0FJX0NIQVRfQUJNX0FDQ0VTUycsXG4gIGNhbmNlbE1vZGFsOiAnQUlfQ0hBVF9BQk1fQ0FOQ0VMJyxcbiAgdGFiU2VjdGlvbjogJ0FJX0NIQVRfQUJNX1NFQ1RJT04nLFxuICBhZGRGaWxlOiAnQUlfQ0hBVF9BQk1fU0VDVElPTicsXG4gIGNvbmZpcm1BY3Rpb246ICdBSV9DSEFUX0FCTV9DT05GSVJNJyxcbiAgZGVsZXRlOiAnQUlfQ0hBVF9BQk1fREVMRVRFX0FHRU5UJyxcbiAgYWNjZXNzaWJpbGl0eVR5cGU6ICdBSV9DSEFUX0FCTV9BQ0NFU1NJQklMSVRZX1RZUEUnLFxuICBhY2Nlc3NpYmlsaXR5U2VsZWN0Q2xpZW50OiAnQUlfQ0hBVF9BQk1fQUNDRVNTSUJJTElUWV9TRUxFQ1RfQ0xJRU5UJyxcbiAgc2VsZWN0TW9kZWw6ICdBSV9DSEFUX0FCTV9TRUxFQ1RfTU9ERUwnLFxuICBjaG9vc2VNb2RlbDogJ0FJX0NIQVRfQUJNX0NIT09TRV9NT0RFTCcsXG59XG5leHBvcnQgY29uc3QgRVZFTlRTID0ge1xuICAuLi5QUk9KRUNUX1JFU1VNRV9FVkVOVFMsXG4gIC4uLkNIQVRfQUlfRVZFTlRTLFxuICAuLi5BQk1fQUdFTlRfRVZFTlRTLFxufVxuXG5leHBvcnQgdHlwZSBFdmVudE5hbWUgPSAodHlwZW9mIEVWRU5UUylba2V5b2YgdHlwZW9mIEVWRU5UU11cblxuZXhwb3J0IGNvbnN0IHVzZUV2ZW50ID0gKCkgPT4ge1xuICBjb25zdCB7IGNvbXBhbnlfaWQ6IGNvbXBhbnlJZCwgaWQ6IHVzZXJJZCB9ID0gdXNlVXNlcigpXG5cbiAgY29uc3QgdHJpZ2dlckV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgPEV2ZW50QXJncz4oZXZlbnROYW1lOiBFdmVudE5hbWUsIGFyZ3M/OiBFdmVudEFyZ3MpID0+IHtcbiAgICAgIGRpc3BhdGNoQW1wbGl0dWRlKGV2ZW50TmFtZSwgY29tcGFueUlkLCB7XG4gICAgICAgIGNvbXBhbnlJZCxcbiAgICAgICAgdXNlcklkLFxuICAgICAgICAuLi5hcmdzLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjb21wYW55SWQsIHVzZXJJZF1cbiAgKVxuXG4gIHJldHVybiB0cmlnZ2VyRXZlbnRcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBU0EsV0FBVyxRQUFRLE9BQU87QUFDbkMsT0FBT0MsaUJBQWlCLE1BQU0scURBQXFEO0FBQ25GLFNBQVNDLE9BQU8sUUFBUSxxQkFBcUI7QUFFN0MsSUFBTUMscUJBQXFCLEdBQUc7RUFDNUJDLGlCQUFpQixFQUFFLHFCQUFxQjtFQUN4Q0MsMEJBQTBCLEVBQUUsK0JBQStCO0VBQzNEQyx5QkFBeUIsRUFBRSw4QkFBOEI7RUFDekRDLHFCQUFxQixFQUFFLHlCQUF5QjtFQUNoREMsa0JBQWtCLEVBQUUsc0JBQXNCO0VBQzFDQyxtQkFBbUIsRUFBRSx1QkFBdUI7RUFDNUNDLDBCQUEwQixFQUFFLCtCQUErQjtFQUMzREMscUJBQXFCLEVBQUUseUJBQXlCO0VBQ2hEQyxpQkFBaUIsRUFBRSxxQkFBcUI7RUFDeENDLCtCQUErQixFQUFFO0FBQ25DLENBQUM7QUFFRCxJQUFNQyxjQUFjLEdBQUc7RUFDckJDLFFBQVEsRUFBRSxZQUFZO0VBQ3RCQyxvQkFBb0IsRUFBRSx5QkFBeUI7RUFDL0NDLGFBQWEsRUFBRSxlQUFlO0VBQzlCQyxnQkFBZ0IsRUFBRSxxQkFBcUI7RUFDdkNDLG1CQUFtQixFQUFFLHlCQUF5QjtFQUM5Q0MsbUJBQW1CLEVBQUUsd0JBQXdCO0VBQzdDQyxvQkFBb0IsRUFBRSx5QkFBeUI7RUFDL0NDLFlBQVksRUFBRSxpQkFBaUI7RUFDL0JDLGNBQWMsRUFBRSxtQkFBbUI7RUFDbkNDLFlBQVksRUFBRSxpQkFBaUI7RUFDL0JDLGNBQWMsRUFBRSxtQkFBbUI7RUFDbkNDLFNBQVMsRUFBRSxhQUFhO0VBQ3hCQyxVQUFVLEVBQUUsY0FBYztFQUMxQkMsY0FBYyxFQUFFLGtCQUFrQjtFQUNsQ0MscUJBQXFCLEVBQUUsNEJBQTRCO0VBQ25EQyxpQkFBaUIsRUFBRSx5QkFBeUI7RUFDNUNDLHVCQUF1QixFQUFFLDZCQUE2QjtFQUN0REMsK0JBQStCLEVBQUUsc0NBQXNDO0VBQ3ZFQyxpQkFBaUIsRUFBRSxzQkFBc0I7RUFDekNDLHVCQUF1QixFQUFFLDZCQUE2QjtFQUN0REMsbUJBQW1CLEVBQUUsd0JBQXdCO0VBQzdDQyxpQkFBaUIsRUFBRSxzQkFBc0I7RUFDekNDLG1CQUFtQixFQUFFLHdCQUF3QjtFQUM3Q0Msc0JBQXNCLEVBQUUsMkJBQTJCO0VBQ25EQyxjQUFjLEVBQUUsa0JBQWtCO0VBQ2xDQyxXQUFXLEVBQUUsZUFBZTtFQUM1QkMsY0FBYyxFQUFFLG1CQUFtQjtFQUNuQ0Msa0JBQWtCLEVBQUUsdUJBQXVCO0VBQzNDQyxlQUFlLEVBQUUsb0JBQW9CO0VBQ3JDQyxVQUFVLEVBQUUsY0FBYztFQUMxQkMsZ0JBQWdCLEVBQUUscUJBQXFCO0VBQ3ZDQyxZQUFZLEVBQUUsaUJBQWlCO0VBQy9CQyxtQkFBbUIsRUFBRSx5QkFBeUI7RUFDOUNDLHFCQUFxQixFQUFFLDBCQUEwQjtFQUNqREMscUJBQXFCLEVBQUUsMkJBQTJCO0VBQ2xEQyx1QkFBdUIsRUFBRSw2QkFBNkI7RUFDdERDLGVBQWUsRUFBRTtBQUNuQixDQUFDO0FBRUQsSUFBTUMsZ0JBQWdCLEdBQUc7RUFDdkJDLFNBQVMsRUFBRSxvQkFBb0I7RUFDL0JDLFdBQVcsRUFBRSxvQkFBb0I7RUFDakNDLFVBQVUsRUFBRSxxQkFBcUI7RUFDakNDLE9BQU8sRUFBRSxxQkFBcUI7RUFDOUJDLGFBQWEsRUFBRSxxQkFBcUI7RUFDcEMsVUFBUSwwQkFBMEI7RUFDbENDLGlCQUFpQixFQUFFLGdDQUFnQztFQUNuREMseUJBQXlCLEVBQUUseUNBQXlDO0VBQ3BFQyxXQUFXLEVBQUUsMEJBQTBCO0VBQ3ZDQyxXQUFXLEVBQUU7QUFDZixDQUFDO0FBQ0QsT0FBTyxJQUFNQyxNQUFNLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ2Q1RCxxQkFBcUIsR0FDckJXLGNBQWMsR0FDZHNDLGdCQUFnQixDQUNwQjtBQUlELE9BQU8sSUFBTVksUUFBUSxHQUFHLFNBQVhBLFFBQVFBLENBQUEsRUFBUztFQUM1QixJQUFBQyxRQUFBLEdBQThDL0QsT0FBTyxDQUFDLENBQUM7SUFBbkNnRSxTQUFTLEdBQUFELFFBQUEsQ0FBckJFLFVBQVU7SUFBaUJDLE1BQU0sR0FBQUgsUUFBQSxDQUFWSSxFQUFFO0VBRWpDLElBQU1DLFlBQVksR0FBR3RFLFdBQVcsQ0FDOUIsVUFBWXVFLFNBQW9CLEVBQUVDLElBQWdCLEVBQUs7SUFDckR2RSxpQkFBaUIsQ0FBQ3NFLFNBQVMsRUFBRUwsU0FBUyxFQUFBSCxhQUFBO01BQ3BDRyxTQUFTLEVBQVRBLFNBQVM7TUFDVEUsTUFBTSxFQUFOQTtJQUFNLEdBQ0hJLElBQUksQ0FDUixDQUFDO0VBQ0osQ0FBQyxFQUNELENBQUNOLFNBQVMsRUFBRUUsTUFBTSxDQUNwQixDQUFDO0VBRUQsT0FBT0UsWUFBWTtBQUNyQixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { useGlobalContext } from '../context/global-context';
|
|
4
|
+
var ALL_TYPES = ['client', 'project', 'task', 'user'];
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Restricción temporal de producto: el popover de @-mentions (COR + MCP) solo aplica a
|
|
8
|
+
* agentes cuyo `entity` es proyecto o cliente (“especialistas” acotados). El resto no ve tabs
|
|
9
|
+
* ni MCP aunque tenga conectores activos. Pasar a `false` cuando se habilite de nuevo el
|
|
10
|
+
* alcance amplio; no borrar el cuerpo del hook que queda debajo.
|
|
11
|
+
*/
|
|
12
|
+
var TEMP_CONTEXT_MENTIONS_REQUIRE_PROJECT_OR_CLIENT_ENTITY = true;
|
|
13
|
+
var COR_READ_SLUG_TO_TYPE = {
|
|
14
|
+
clients_read: 'client',
|
|
15
|
+
client_read: 'client',
|
|
16
|
+
projects_read: 'project',
|
|
17
|
+
project_read: 'project',
|
|
18
|
+
tasks_read: 'task',
|
|
19
|
+
task_read: 'task'
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Deriva del agent activo qué tabs del context mention deben estar disponibles.
|
|
23
|
+
*
|
|
24
|
+
* Reglas:
|
|
25
|
+
* - agent.entity === 'global' → ninguna (sin @-mentions)
|
|
26
|
+
* - agent.entity === 'project' → [task, user]
|
|
27
|
+
* - agent.entity === 'client' → [project, task, user]
|
|
28
|
+
* - agent.entity === null/otro → todas si el flag temporal está en false (contexto amplio)
|
|
29
|
+
* - agent.type === 'custom' y conectores COR → además filtra client/project/task por slugs *_read
|
|
30
|
+
* - agentes no custom (pm, clone): no se aplica filtro por conectores; solo reglas por entity
|
|
31
|
+
*
|
|
32
|
+
* El `override` (prop `enabledTypes` del componente consumidor) siempre gana.
|
|
33
|
+
*
|
|
34
|
+
* Mientras `TEMP_CONTEXT_MENTIONS_REQUIRE_PROJECT_OR_CLIENT_ENTITY` sea true, tras el override
|
|
35
|
+
* solo se permite continuar si `agent.entity` es `project` o `client` (sin @ para global/null/otros).
|
|
36
|
+
*/
|
|
37
|
+
export var useMentionAllowedTypes = function useMentionAllowedTypes(override) {
|
|
38
|
+
var _useGlobalContext = useGlobalContext(),
|
|
39
|
+
agent = _useGlobalContext.agent;
|
|
40
|
+
return useMemo(function () {
|
|
41
|
+
var _agent$connectors, _corConnector$slugs, _agent$connectors$fin, _agent$connectors2, _allowedTypes$;
|
|
42
|
+
if (override && override.length > 0) {
|
|
43
|
+
var defaultType = override[0];
|
|
44
|
+
return {
|
|
45
|
+
allowedTypes: override,
|
|
46
|
+
defaultType: defaultType
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (TEMP_CONTEXT_MENTIONS_REQUIRE_PROJECT_OR_CLIENT_ENTITY && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'project' && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'client') {
|
|
50
|
+
return {
|
|
51
|
+
allowedTypes: [],
|
|
52
|
+
defaultType: 'user'
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'global') {
|
|
56
|
+
return {
|
|
57
|
+
allowedTypes: [],
|
|
58
|
+
defaultType: 'user'
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
var allowedTypes = ALL_TYPES;
|
|
62
|
+
if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project') {
|
|
63
|
+
allowedTypes = ['user', 'task'];
|
|
64
|
+
} else if ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'client') {
|
|
65
|
+
allowedTypes = ['user', 'task', 'project'];
|
|
66
|
+
}
|
|
67
|
+
var corConnector = agent === null || agent === void 0 || (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.find(function (connector) {
|
|
68
|
+
return connector.group === 'COR';
|
|
69
|
+
});
|
|
70
|
+
var allowedByConnectors = new Set(((_corConnector$slugs = corConnector === null || corConnector === void 0 ? void 0 : corConnector.slugs) !== null && _corConnector$slugs !== void 0 ? _corConnector$slugs : []).map(function (slug) {
|
|
71
|
+
return COR_READ_SLUG_TO_TYPE[slug];
|
|
72
|
+
}).filter(function (type) {
|
|
73
|
+
return !!type;
|
|
74
|
+
}));
|
|
75
|
+
|
|
76
|
+
// Solo custom: permisos COR por slug. Project/client “de producto” no deben quedar en [] por conectores incompletos.
|
|
77
|
+
if ((agent === null || agent === void 0 ? void 0 : agent.type) === 'custom' && corConnector) {
|
|
78
|
+
allowedTypes = allowedTypes.filter(function (type) {
|
|
79
|
+
return type === 'user' || allowedByConnectors.has(type);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// `user` sólo se habilita junto con `task`.
|
|
84
|
+
if (!allowedTypes.includes('task')) {
|
|
85
|
+
allowedTypes = allowedTypes.filter(function (type) {
|
|
86
|
+
return type !== 'user';
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
var mcpSlugs = (_agent$connectors$fin = agent === null || agent === void 0 || (_agent$connectors2 = agent.connectors) === null || _agent$connectors2 === void 0 || (_agent$connectors2 = _agent$connectors2.find(function (connector) {
|
|
90
|
+
return connector.group === 'MCP';
|
|
91
|
+
})) === null || _agent$connectors2 === void 0 || (_agent$connectors2 = _agent$connectors2.slugs) === null || _agent$connectors2 === void 0 ? void 0 : _agent$connectors2.filter(function (slug) {
|
|
92
|
+
return typeof slug === 'string' && slug.trim().length > 0;
|
|
93
|
+
})) !== null && _agent$connectors$fin !== void 0 ? _agent$connectors$fin : [];
|
|
94
|
+
if (mcpSlugs.length > 0) {
|
|
95
|
+
allowedTypes = [].concat(_toConsumableArray(allowedTypes), ['mcp']);
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
allowedTypes: allowedTypes,
|
|
99
|
+
defaultType: (_allowedTypes$ = allowedTypes[0]) !== null && _allowedTypes$ !== void 0 ? _allowedTypes$ : 'user'
|
|
100
|
+
};
|
|
101
|
+
}, [agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.type, agent === null || agent === void 0 ? void 0 : agent.connectors, override]);
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlR2xvYmFsQ29udGV4dCIsIkFMTF9UWVBFUyIsIlRFTVBfQ09OVEVYVF9NRU5USU9OU19SRVFVSVJFX1BST0pFQ1RfT1JfQ0xJRU5UX0VOVElUWSIsIkNPUl9SRUFEX1NMVUdfVE9fVFlQRSIsImNsaWVudHNfcmVhZCIsImNsaWVudF9yZWFkIiwicHJvamVjdHNfcmVhZCIsInByb2plY3RfcmVhZCIsInRhc2tzX3JlYWQiLCJ0YXNrX3JlYWQiLCJ1c2VNZW50aW9uQWxsb3dlZFR5cGVzIiwib3ZlcnJpZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsImFnZW50IiwiX2FnZW50JGNvbm5lY3RvcnMiLCJfY29yQ29ubmVjdG9yJHNsdWdzIiwiX2FnZW50JGNvbm5lY3RvcnMkZmluIiwiX2FnZW50JGNvbm5lY3RvcnMyIiwiX2FsbG93ZWRUeXBlcyQiLCJsZW5ndGgiLCJkZWZhdWx0VHlwZSIsImFsbG93ZWRUeXBlcyIsImVudGl0eSIsImNvckNvbm5lY3RvciIsImNvbm5lY3RvcnMiLCJmaW5kIiwiY29ubmVjdG9yIiwiZ3JvdXAiLCJhbGxvd2VkQnlDb25uZWN0b3JzIiwiU2V0Iiwic2x1Z3MiLCJtYXAiLCJzbHVnIiwiZmlsdGVyIiwidHlwZSIsImhhcyIsImluY2x1ZGVzIiwibWNwU2x1Z3MiLCJ0cmltIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZU1lbnRpb25BbGxvd2VkVHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuXG5jb25zdCBBTExfVFlQRVM6IENvbnRleHRFbnRpdHlUeXBlW10gPSBbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snLCAndXNlciddXG5cbi8qKlxuICogUmVzdHJpY2Npw7NuIHRlbXBvcmFsIGRlIHByb2R1Y3RvOiBlbCBwb3BvdmVyIGRlIEAtbWVudGlvbnMgKENPUiArIE1DUCkgc29sbyBhcGxpY2EgYVxuICogYWdlbnRlcyBjdXlvIGBlbnRpdHlgIGVzIHByb3llY3RvIG8gY2xpZW50ZSAo4oCcZXNwZWNpYWxpc3Rhc+KAnSBhY290YWRvcykuIEVsIHJlc3RvIG5vIHZlIHRhYnNcbiAqIG5pIE1DUCBhdW5xdWUgdGVuZ2EgY29uZWN0b3JlcyBhY3Rpdm9zLiBQYXNhciBhIGBmYWxzZWAgY3VhbmRvIHNlIGhhYmlsaXRlIGRlIG51ZXZvIGVsXG4gKiBhbGNhbmNlIGFtcGxpbzsgbm8gYm9ycmFyIGVsIGN1ZXJwbyBkZWwgaG9vayBxdWUgcXVlZGEgZGViYWpvLlxuICovXG5jb25zdCBURU1QX0NPTlRFWFRfTUVOVElPTlNfUkVRVUlSRV9QUk9KRUNUX09SX0NMSUVOVF9FTlRJVFkgPSB0cnVlXG5cbmNvbnN0IENPUl9SRUFEX1NMVUdfVE9fVFlQRTogUmVjb3JkPHN0cmluZywgRXh0cmFjdDxDb250ZXh0RW50aXR5VHlwZSwgJ2NsaWVudCcgfCAncHJvamVjdCcgfCAndGFzayc+PiA9IHtcbiAgY2xpZW50c19yZWFkOiAnY2xpZW50JyxcbiAgY2xpZW50X3JlYWQ6ICdjbGllbnQnLFxuICBwcm9qZWN0c19yZWFkOiAncHJvamVjdCcsXG4gIHByb2plY3RfcmVhZDogJ3Byb2plY3QnLFxuICB0YXNrc19yZWFkOiAndGFzaycsXG4gIHRhc2tfcmVhZDogJ3Rhc2snLFxufVxuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uQWxsb3dlZFR5cGVzUmVzdWx0ID0ge1xuICBhbGxvd2VkVHlwZXM6IENvbnRleHRFbnRpdHlUeXBlW11cbiAgZGVmYXVsdFR5cGU6IENvbnRleHRFbnRpdHlUeXBlXG59XG5cbi8qKlxuICogRGVyaXZhIGRlbCBhZ2VudCBhY3Rpdm8gcXXDqSB0YWJzIGRlbCBjb250ZXh0IG1lbnRpb24gZGViZW4gZXN0YXIgZGlzcG9uaWJsZXMuXG4gKlxuICogUmVnbGFzOlxuICogICAtIGFnZW50LmVudGl0eSA9PT0gJ2dsb2JhbCcgIOKGkiBuaW5ndW5hIChzaW4gQC1tZW50aW9ucylcbiAqICAgLSBhZ2VudC5lbnRpdHkgPT09ICdwcm9qZWN0JyDihpIgW3Rhc2ssIHVzZXJdXG4gKiAgIC0gYWdlbnQuZW50aXR5ID09PSAnY2xpZW50JyAg4oaSIFtwcm9qZWN0LCB0YXNrLCB1c2VyXVxuICogICAtIGFnZW50LmVudGl0eSA9PT0gbnVsbC9vdHJvICDihpIgdG9kYXMgc2kgZWwgZmxhZyB0ZW1wb3JhbCBlc3TDoSBlbiBmYWxzZSAoY29udGV4dG8gYW1wbGlvKVxuICogICAtIGFnZW50LnR5cGUgPT09ICdjdXN0b20nIHkgY29uZWN0b3JlcyBDT1Ig4oaSIGFkZW3DoXMgZmlsdHJhIGNsaWVudC9wcm9qZWN0L3Rhc2sgcG9yIHNsdWdzICpfcmVhZFxuICogICAtIGFnZW50ZXMgbm8gY3VzdG9tIChwbSwgY2xvbmUpOiBubyBzZSBhcGxpY2EgZmlsdHJvIHBvciBjb25lY3RvcmVzOyBzb2xvIHJlZ2xhcyBwb3IgZW50aXR5XG4gKlxuICogRWwgYG92ZXJyaWRlYCAocHJvcCBgZW5hYmxlZFR5cGVzYCBkZWwgY29tcG9uZW50ZSBjb25zdW1pZG9yKSBzaWVtcHJlIGdhbmEuXG4gKlxuICogTWllbnRyYXMgYFRFTVBfQ09OVEVYVF9NRU5USU9OU19SRVFVSVJFX1BST0pFQ1RfT1JfQ0xJRU5UX0VOVElUWWAgc2VhIHRydWUsIHRyYXMgZWwgb3ZlcnJpZGVcbiAqIHNvbG8gc2UgcGVybWl0ZSBjb250aW51YXIgc2kgYGFnZW50LmVudGl0eWAgZXMgYHByb2plY3RgIG8gYGNsaWVudGAgKHNpbiBAIHBhcmEgZ2xvYmFsL251bGwvb3Ryb3MpLlxuICovXG5leHBvcnQgY29uc3QgdXNlTWVudGlvbkFsbG93ZWRUeXBlcyA9IChvdmVycmlkZT86IENvbnRleHRFbnRpdHlUeXBlW10pOiBVc2VNZW50aW9uQWxsb3dlZFR5cGVzUmVzdWx0ID0+IHtcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgcmV0dXJuIHVzZU1lbW8oKCk6IFVzZU1lbnRpb25BbGxvd2VkVHlwZXNSZXN1bHQgPT4ge1xuICAgIGlmIChvdmVycmlkZSAmJiBvdmVycmlkZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VHlwZSA9IG92ZXJyaWRlWzBdXG4gICAgICByZXR1cm4geyBhbGxvd2VkVHlwZXM6IG92ZXJyaWRlLCBkZWZhdWx0VHlwZSB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgVEVNUF9DT05URVhUX01FTlRJT05TX1JFUVVJUkVfUFJPSkVDVF9PUl9DTElFTlRfRU5USVRZICYmXG4gICAgICBhZ2VudD8uZW50aXR5ICE9PSAncHJvamVjdCcgJiZcbiAgICAgIGFnZW50Py5lbnRpdHkgIT09ICdjbGllbnQnXG4gICAgKSB7XG4gICAgICByZXR1cm4geyBhbGxvd2VkVHlwZXM6IFtdLCBkZWZhdWx0VHlwZTogJ3VzZXInIH1cbiAgICB9XG5cbiAgICBpZiAoYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcpIHtcbiAgICAgIHJldHVybiB7IGFsbG93ZWRUeXBlczogW10sIGRlZmF1bHRUeXBlOiAndXNlcicgfVxuICAgIH1cblxuICAgIGxldCBhbGxvd2VkVHlwZXM6IENvbnRleHRFbnRpdHlUeXBlW10gPSBBTExfVFlQRVNcblxuICAgIGlmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcpIHtcbiAgICAgIGFsbG93ZWRUeXBlcyA9IFsndXNlcicsICd0YXNrJ11cbiAgICB9IGVsc2UgaWYgKGFnZW50Py5lbnRpdHkgPT09ICdjbGllbnQnKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBbJ3VzZXInLCAndGFzaycsICdwcm9qZWN0J11cbiAgICB9XG5cbiAgICBjb25zdCBjb3JDb25uZWN0b3IgPSBhZ2VudD8uY29ubmVjdG9ycz8uZmluZChjb25uZWN0b3IgPT4gY29ubmVjdG9yLmdyb3VwID09PSAnQ09SJylcbiAgICBjb25zdCBhbGxvd2VkQnlDb25uZWN0b3JzID0gbmV3IFNldDxDb250ZXh0RW50aXR5VHlwZT4oXG4gICAgICAoY29yQ29ubmVjdG9yPy5zbHVncyA/PyBbXSlcbiAgICAgICAgLm1hcChzbHVnID0+IENPUl9SRUFEX1NMVUdfVE9fVFlQRVtzbHVnXSlcbiAgICAgICAgLmZpbHRlcigodHlwZSk6IHR5cGUgaXMgRXh0cmFjdDxDb250ZXh0RW50aXR5VHlwZSwgJ2NsaWVudCcgfCAncHJvamVjdCcgfCAndGFzayc+ID0+ICEhdHlwZSlcbiAgICApXG5cbiAgICAvLyBTb2xvIGN1c3RvbTogcGVybWlzb3MgQ09SIHBvciBzbHVnLiBQcm9qZWN0L2NsaWVudCDigJxkZSBwcm9kdWN0b+KAnSBubyBkZWJlbiBxdWVkYXIgZW4gW10gcG9yIGNvbmVjdG9yZXMgaW5jb21wbGV0b3MuXG4gICAgaWYgKGFnZW50Py50eXBlID09PSAnY3VzdG9tJyAmJiBjb3JDb25uZWN0b3IpIHtcbiAgICAgIGFsbG93ZWRUeXBlcyA9IGFsbG93ZWRUeXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlID09PSAndXNlcicgfHwgYWxsb3dlZEJ5Q29ubmVjdG9ycy5oYXModHlwZSkpXG4gICAgfVxuXG4gICAgLy8gYHVzZXJgIHPDs2xvIHNlIGhhYmlsaXRhIGp1bnRvIGNvbiBgdGFza2AuXG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoJ3Rhc2snKSkge1xuICAgICAgYWxsb3dlZFR5cGVzID0gYWxsb3dlZFR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUgIT09ICd1c2VyJylcbiAgICB9XG5cbiAgICBjb25zdCBtY3BTbHVncyA9XG4gICAgICBhZ2VudD8uY29ubmVjdG9yc1xuICAgICAgICA/LmZpbmQoY29ubmVjdG9yID0+IGNvbm5lY3Rvci5ncm91cCA9PT0gJ01DUCcpXG4gICAgICAgID8uc2x1Z3M/LmZpbHRlcigoc2x1Zyk6IHNsdWcgaXMgc3RyaW5nID0+IHR5cGVvZiBzbHVnID09PSAnc3RyaW5nJyAmJiBzbHVnLnRyaW0oKS5sZW5ndGggPiAwKSA/PyBbXVxuICAgIGlmIChtY3BTbHVncy5sZW5ndGggPiAwKSB7XG4gICAgICBhbGxvd2VkVHlwZXMgPSBbLi4uYWxsb3dlZFR5cGVzLCAnbWNwJ11cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsb3dlZFR5cGVzLFxuICAgICAgZGVmYXVsdFR5cGU6IGFsbG93ZWRUeXBlc1swXSA/PyAndXNlcicsXG4gICAgfVxuICB9LCBbYWdlbnQ/LmVudGl0eSwgYWdlbnQ/LnR5cGUsIGFnZW50Py5jb25uZWN0b3JzLCBvdmVycmlkZV0pXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxPQUFPLFFBQVEsT0FBTztBQUMvQixTQUFTQyxnQkFBZ0IsUUFBUSwyQkFBMkI7QUFHNUQsSUFBTUMsU0FBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7QUFFNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUMsc0RBQXNELEdBQUcsSUFBSTtBQUVuRSxJQUFNQyxxQkFBZ0csR0FBRztFQUN2R0MsWUFBWSxFQUFFLFFBQVE7RUFDdEJDLFdBQVcsRUFBRSxRQUFRO0VBQ3JCQyxhQUFhLEVBQUUsU0FBUztFQUN4QkMsWUFBWSxFQUFFLFNBQVM7RUFDdkJDLFVBQVUsRUFBRSxNQUFNO0VBQ2xCQyxTQUFTLEVBQUU7QUFDYixDQUFDO0FBT0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlDLFFBQThCLEVBQW1DO0VBQ3RHLElBQUFDLGlCQUFBLEdBQWtCWixnQkFBZ0IsQ0FBQyxDQUFDO0lBQTVCYSxLQUFLLEdBQUFELGlCQUFBLENBQUxDLEtBQUs7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
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { ContextMentionPopover, SCMPAnchor } from '../components/atoms/ContextMentionPopover';
|
|
5
|
+
import { useGlobalContext } from '../context/global-context';
|
|
6
|
+
import { useT } from './useT';
|
|
7
|
+
// eslint-disable-next-line import/no-cycle
|
|
8
|
+
import { useEntitySearch } from './useEntitySearch';
|
|
9
|
+
import { useMentionAllowedTypes } from './useMentionAllowedTypes';
|
|
10
|
+
import { useCaretPosition } from './useCaretPosition';
|
|
11
|
+
import { EVENTS, useEvent } from './useEvent';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
var TYPE_TO_TRIGGER_SEQUENCE = {
|
|
14
|
+
user: 1,
|
|
15
|
+
task: 2,
|
|
16
|
+
project: 3
|
|
17
|
+
};
|
|
18
|
+
var getTypeFromTriggerSequence = function getTypeFromTriggerSequence(atRunLength, allowedTypes, defaultType) {
|
|
19
|
+
var _Object$entries$find$, _Object$entries$find, _allowedTypes$tabIdx;
|
|
20
|
+
var normalized = Math.max(1, Math.floor(atRunLength));
|
|
21
|
+
var mappedType = (_Object$entries$find$ = (_Object$entries$find = Object.entries(TYPE_TO_TRIGGER_SEQUENCE).find(function (_ref) {
|
|
22
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
23
|
+
len = _ref2[1];
|
|
24
|
+
return len === normalized;
|
|
25
|
+
})) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[0]) !== null && _Object$entries$find$ !== void 0 ? _Object$entries$find$ : null;
|
|
26
|
+
if (mappedType && allowedTypes.includes(mappedType)) return mappedType;
|
|
27
|
+
var tabIdx = Math.min(Math.max(0, normalized - 1), allowedTypes.length - 1);
|
|
28
|
+
return (_allowedTypes$tabIdx = allowedTypes[tabIdx]) !== null && _allowedTypes$tabIdx !== void 0 ? _allowedTypes$tabIdx : defaultType;
|
|
29
|
+
};
|
|
30
|
+
var getTriggerSequenceFromType = function getTriggerSequenceFromType(type, allowedTypes) {
|
|
31
|
+
var mapped = TYPE_TO_TRIGGER_SEQUENCE[type];
|
|
32
|
+
if (mapped) return mapped;
|
|
33
|
+
var idx = allowedTypes.indexOf(type);
|
|
34
|
+
return idx >= 0 ? idx + 1 : 1;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Deriva clientId, projectId, agentEntity y MCP desde el contexto global (incl.
|
|
39
|
+
* `entityValues` y `chipsProject`) para filtrar recents y búsqueda GraphQL.
|
|
40
|
+
*/
|
|
41
|
+
var useDerivedScope = function useDerivedScope() {
|
|
42
|
+
var _ref3, _ctx$client$id, _ctx$client, _ctx$entityValues, _ref4, _ref5, _ctx$project$id, _ctx$project, _ctx$entityValues2, _ctx$chipsProject, _ctx$agent$entity, _ctx$agent, _ctx$agent$connectors, _ctx$agent2;
|
|
43
|
+
var ctx = useGlobalContext();
|
|
44
|
+
var clientId = (_ref3 = (_ctx$client$id = (_ctx$client = ctx.client) === null || _ctx$client === void 0 ? void 0 : _ctx$client.id) !== null && _ctx$client$id !== void 0 ? _ctx$client$id : (_ctx$entityValues = ctx.entityValues) === null || _ctx$entityValues === void 0 ? void 0 : _ctx$entityValues.clientId) !== null && _ref3 !== void 0 ? _ref3 : null;
|
|
45
|
+
var projectId = (_ref4 = (_ref5 = (_ctx$project$id = (_ctx$project = ctx.project) === null || _ctx$project === void 0 ? void 0 : _ctx$project.id) !== null && _ctx$project$id !== void 0 ? _ctx$project$id : (_ctx$entityValues2 = ctx.entityValues) === null || _ctx$entityValues2 === void 0 ? void 0 : _ctx$entityValues2.projectId) !== null && _ref5 !== void 0 ? _ref5 : (_ctx$chipsProject = ctx.chipsProject) === null || _ctx$chipsProject === void 0 ? void 0 : _ctx$chipsProject.projectId) !== null && _ref4 !== void 0 ? _ref4 : null;
|
|
46
|
+
var agentEntity = (_ctx$agent$entity = (_ctx$agent = ctx.agent) === null || _ctx$agent === void 0 ? void 0 : _ctx$agent.entity) !== null && _ctx$agent$entity !== void 0 ? _ctx$agent$entity : null;
|
|
47
|
+
var mcpSlugsKey = ((_ctx$agent$connectors = (_ctx$agent2 = ctx.agent) === null || _ctx$agent2 === void 0 || (_ctx$agent2 = _ctx$agent2.connectors) === null || _ctx$agent2 === void 0 || (_ctx$agent2 = _ctx$agent2.find(function (c) {
|
|
48
|
+
return c.group === 'MCP';
|
|
49
|
+
})) === null || _ctx$agent2 === void 0 ? void 0 : _ctx$agent2.slugs) !== null && _ctx$agent$connectors !== void 0 ? _ctx$agent$connectors : []).join('|');
|
|
50
|
+
var mcpSlugs = useMemo(function () {
|
|
51
|
+
var _ctx$agent$connectors2, _ctx$agent3;
|
|
52
|
+
var raw = (_ctx$agent$connectors2 = (_ctx$agent3 = ctx.agent) === null || _ctx$agent3 === void 0 || (_ctx$agent3 = _ctx$agent3.connectors) === null || _ctx$agent3 === void 0 || (_ctx$agent3 = _ctx$agent3.find(function (c) {
|
|
53
|
+
return c.group === 'MCP';
|
|
54
|
+
})) === null || _ctx$agent3 === void 0 ? void 0 : _ctx$agent3.slugs) !== null && _ctx$agent$connectors2 !== void 0 ? _ctx$agent$connectors2 : [];
|
|
55
|
+
return _toConsumableArray(new Set(raw.filter(function (s) {
|
|
56
|
+
return typeof s === 'string' && s.trim().length > 0;
|
|
57
|
+
}))).sort();
|
|
58
|
+
}, [mcpSlugsKey]);
|
|
59
|
+
return useMemo(function () {
|
|
60
|
+
return {
|
|
61
|
+
clientId: clientId,
|
|
62
|
+
projectId: projectId,
|
|
63
|
+
mcpSlugs: mcpSlugs,
|
|
64
|
+
agentEntity: agentEntity
|
|
65
|
+
};
|
|
66
|
+
}, [clientId, projectId, mcpSlugs, agentEntity]);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Encapsula la lógica del popover de @-mentions (estado, fetch por tab, analytics,
|
|
71
|
+
* posicionamiento). El consumer mantiene el editor y el envío del mensaje.
|
|
72
|
+
* Los filtros de búsqueda usan `useDerivedScope`: especialista proyecto acota tareas
|
|
73
|
+
* al `projectId` del contexto; especialista cliente, proyectos al `clientId` (en `extra` de search).
|
|
74
|
+
*/
|
|
75
|
+
export var useMentionPopover = function useMentionPopover(_ref6) {
|
|
76
|
+
var editorRef = _ref6.editorRef,
|
|
77
|
+
popoverAnchorRef = _ref6.popoverAnchorRef,
|
|
78
|
+
enabledTypes = _ref6.enabledTypes,
|
|
79
|
+
onMentionAdded = _ref6.onMentionAdded;
|
|
80
|
+
var _useT = useT(),
|
|
81
|
+
t = _useT.t;
|
|
82
|
+
var event = useEvent();
|
|
83
|
+
var _useMentionAllowedTyp = useMentionAllowedTypes(enabledTypes),
|
|
84
|
+
allowedTypes = _useMentionAllowedTyp.allowedTypes,
|
|
85
|
+
defaultType = _useMentionAllowedTyp.defaultType;
|
|
86
|
+
var _useState = useState(defaultType),
|
|
87
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
88
|
+
activeType = _useState2[0],
|
|
89
|
+
setActiveType = _useState2[1];
|
|
90
|
+
var _useState3 = useState(false),
|
|
91
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
92
|
+
popoverOpen = _useState4[0],
|
|
93
|
+
setPopoverOpen = _useState4[1];
|
|
94
|
+
var _useState5 = useState({
|
|
95
|
+
bottom: 0,
|
|
96
|
+
left: 0,
|
|
97
|
+
width: 0
|
|
98
|
+
}),
|
|
99
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
100
|
+
popoverPos = _useState6[0],
|
|
101
|
+
setPopoverPos = _useState6[1];
|
|
102
|
+
var _useState7 = useState(0),
|
|
103
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
104
|
+
activeIndex = _useState8[0],
|
|
105
|
+
setActiveIndex = _useState8[1];
|
|
106
|
+
var hasEmittedOpen = useRef(false);
|
|
107
|
+
var popoverRef = useRef(null);
|
|
108
|
+
var getCaretRect = useCaretPosition();
|
|
109
|
+
var scope = useDerivedScope();
|
|
110
|
+
var _useEntitySearch = useEntitySearch(activeType, scope),
|
|
111
|
+
items = _useEntitySearch.items,
|
|
112
|
+
loading = _useEntitySearch.loading,
|
|
113
|
+
error = _useEntitySearch.error,
|
|
114
|
+
searchValue = _useEntitySearch.searchValue,
|
|
115
|
+
updateSearchValue = _useEntitySearch.updateSearchValue;
|
|
116
|
+
useEffect(function () {
|
|
117
|
+
if (!allowedTypes.includes(activeType)) {
|
|
118
|
+
setActiveType(defaultType);
|
|
119
|
+
}
|
|
120
|
+
}, [allowedTypes, activeType, defaultType]);
|
|
121
|
+
var positionPopover = useCallback(function () {
|
|
122
|
+
var _popoverAnchorRef$cur, _editorRef$current$ge, _editorRef$current, _editorRef$current$ge2;
|
|
123
|
+
var fromAnchor = popoverAnchorRef === null || popoverAnchorRef === void 0 || (_popoverAnchorRef$cur = popoverAnchorRef.current) === null || _popoverAnchorRef$cur === void 0 ? void 0 : _popoverAnchorRef$cur.getBoundingClientRect();
|
|
124
|
+
var fromEditor = (_editorRef$current$ge = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || (_editorRef$current$ge2 = _editorRef$current.getEditorClientRect) === null || _editorRef$current$ge2 === void 0 ? void 0 : _editorRef$current$ge2.call(_editorRef$current)) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : null;
|
|
125
|
+
var rect = fromAnchor !== null && fromAnchor !== void 0 ? fromAnchor : fromEditor;
|
|
126
|
+
if (!rect || rect.width <= 0) {
|
|
127
|
+
var caret = getCaretRect();
|
|
128
|
+
if (!caret) return;
|
|
129
|
+
var _viewportH = window.innerHeight;
|
|
130
|
+
var _viewportW = window.innerWidth;
|
|
131
|
+
var fallbackW = 320;
|
|
132
|
+
var _left = Math.max(8, Math.min(_viewportW - fallbackW - 8, caret.left));
|
|
133
|
+
setPopoverPos({
|
|
134
|
+
width: fallbackW,
|
|
135
|
+
left: _left,
|
|
136
|
+
bottom: _viewportH - caret.top + 4
|
|
137
|
+
});
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
var viewportW = window.innerWidth;
|
|
141
|
+
var viewportH = window.innerHeight;
|
|
142
|
+
var width = rect.width;
|
|
143
|
+
var left = Math.max(8, Math.min(viewportW - width - 8, rect.left));
|
|
144
|
+
/** Popover siempre arriba del input: borde inferior del popover ~4px sobre el borde superior del ancla. */
|
|
145
|
+
setPopoverPos({
|
|
146
|
+
width: width,
|
|
147
|
+
left: left,
|
|
148
|
+
bottom: viewportH - rect.top + 4
|
|
149
|
+
});
|
|
150
|
+
}, [popoverAnchorRef, editorRef, getCaretRect]);
|
|
151
|
+
var resetMentionOpenTracking = useCallback(function () {
|
|
152
|
+
hasEmittedOpen.current = false;
|
|
153
|
+
}, []);
|
|
154
|
+
var close = useCallback(function () {
|
|
155
|
+
setPopoverOpen(false);
|
|
156
|
+
updateSearchValue('');
|
|
157
|
+
}, [updateSearchValue]);
|
|
158
|
+
var handleTrigger = useCallback(function (trigger) {
|
|
159
|
+
if (allowedTypes.length === 0) {
|
|
160
|
+
if (popoverOpen) close();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (trigger.active) {
|
|
164
|
+
var typeFromAt = getTypeFromTriggerSequence(trigger.atRunLength, allowedTypes, defaultType);
|
|
165
|
+
if (!popoverOpen) {
|
|
166
|
+
setPopoverOpen(true);
|
|
167
|
+
setActiveType(typeFromAt);
|
|
168
|
+
positionPopover();
|
|
169
|
+
if (!hasEmittedOpen.current) {
|
|
170
|
+
event(EVENTS.aiChatMentionOpen, {
|
|
171
|
+
type: typeFromAt
|
|
172
|
+
});
|
|
173
|
+
hasEmittedOpen.current = true;
|
|
174
|
+
}
|
|
175
|
+
} else {
|
|
176
|
+
setActiveType(typeFromAt);
|
|
177
|
+
positionPopover();
|
|
178
|
+
}
|
|
179
|
+
updateSearchValue(trigger.query);
|
|
180
|
+
} else if (popoverOpen) {
|
|
181
|
+
close();
|
|
182
|
+
}
|
|
183
|
+
}, [allowedTypes, defaultType, popoverOpen, positionPopover, updateSearchValue, event, close]);
|
|
184
|
+
var insertSelectedItem = useCallback(function (item) {
|
|
185
|
+
var _item$raw$clientId, _item$raw$clientName, _item$raw$projectName, _item$raw$feeId, _item$raw$fatherId, _item$raw$fatherTitle, _item$raw$totalProyec, _item$raw$picture, _item$raw$positionNam, _item$raw$email, _editorRef$current2;
|
|
186
|
+
var mention = {
|
|
187
|
+
id: item.id,
|
|
188
|
+
type: item.type,
|
|
189
|
+
label: item.primary,
|
|
190
|
+
metadata: {
|
|
191
|
+
clientId: (_item$raw$clientId = item.raw.clientId) !== null && _item$raw$clientId !== void 0 ? _item$raw$clientId : null,
|
|
192
|
+
clientName: (_item$raw$clientName = item.raw.clientName) !== null && _item$raw$clientName !== void 0 ? _item$raw$clientName : null,
|
|
193
|
+
projectName: (_item$raw$projectName = item.raw.projectName) !== null && _item$raw$projectName !== void 0 ? _item$raw$projectName : null,
|
|
194
|
+
feeId: (_item$raw$feeId = item.raw.feeId) !== null && _item$raw$feeId !== void 0 ? _item$raw$feeId : null,
|
|
195
|
+
fatherId: (_item$raw$fatherId = item.raw.fatherId) !== null && _item$raw$fatherId !== void 0 ? _item$raw$fatherId : null,
|
|
196
|
+
fatherTitle: (_item$raw$fatherTitle = item.raw.fatherTitle) !== null && _item$raw$fatherTitle !== void 0 ? _item$raw$fatherTitle : null,
|
|
197
|
+
totalProyectos: (_item$raw$totalProyec = item.raw.totalProyectos) !== null && _item$raw$totalProyec !== void 0 ? _item$raw$totalProyec : null,
|
|
198
|
+
picture: (_item$raw$picture = item.raw.picture) !== null && _item$raw$picture !== void 0 ? _item$raw$picture : null,
|
|
199
|
+
positionName: (_item$raw$positionNam = item.raw.positionName) !== null && _item$raw$positionNam !== void 0 ? _item$raw$positionNam : null,
|
|
200
|
+
email: (_item$raw$email = item.raw.email) !== null && _item$raw$email !== void 0 ? _item$raw$email : null
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
(_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.insertMention(mention);
|
|
204
|
+
onMentionAdded === null || onMentionAdded === void 0 || onMentionAdded(mention);
|
|
205
|
+
event(EVENTS.aiChatMentionSelect, {
|
|
206
|
+
type: mention.type,
|
|
207
|
+
id: String(mention.id)
|
|
208
|
+
});
|
|
209
|
+
close();
|
|
210
|
+
}, [editorRef, onMentionAdded, event, close]);
|
|
211
|
+
var handleTypeChange = useCallback(function (type) {
|
|
212
|
+
var _editorRef$current3;
|
|
213
|
+
setActiveType(type);
|
|
214
|
+
var nextRunLength = getTriggerSequenceFromType(type, allowedTypes);
|
|
215
|
+
(_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.syncTriggerAtRunLength(nextRunLength);
|
|
216
|
+
event(EVENTS.aiChatMentionTypeSwitch, {
|
|
217
|
+
type: type
|
|
218
|
+
});
|
|
219
|
+
}, [allowedTypes, editorRef, event]);
|
|
220
|
+
var handleKeyDown = useCallback(function (e) {
|
|
221
|
+
if (!popoverOpen || allowedTypes.length === 0) return false;
|
|
222
|
+
if (e.key === 'Escape') {
|
|
223
|
+
e.preventDefault();
|
|
224
|
+
close();
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
if ((e.key === 'ArrowRight' || e.key === 'ArrowLeft') && (e.metaKey || e.altKey)) {
|
|
228
|
+
e.preventDefault();
|
|
229
|
+
var idx = allowedTypes.indexOf(activeType);
|
|
230
|
+
var delta = e.key === 'ArrowRight' ? 1 : -1;
|
|
231
|
+
var nextIdx = (idx + delta + allowedTypes.length) % allowedTypes.length;
|
|
232
|
+
handleTypeChange(allowedTypes[nextIdx]);
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
if (items.length === 0) return false;
|
|
236
|
+
if (e.key === 'ArrowDown') {
|
|
237
|
+
e.preventDefault();
|
|
238
|
+
setActiveIndex(function (prev) {
|
|
239
|
+
return (prev + 1) % items.length;
|
|
240
|
+
});
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
if (e.key === 'ArrowUp') {
|
|
244
|
+
e.preventDefault();
|
|
245
|
+
setActiveIndex(function (prev) {
|
|
246
|
+
return (prev - 1 + items.length) % items.length;
|
|
247
|
+
});
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
if (e.key === 'Enter' || e.key === 'Tab') {
|
|
251
|
+
e.preventDefault();
|
|
252
|
+
insertSelectedItem(items[activeIndex]);
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
return false;
|
|
256
|
+
}, [popoverOpen, items, allowedTypes, activeType, activeIndex, insertSelectedItem, close, handleTypeChange]);
|
|
257
|
+
useEffect(function () {
|
|
258
|
+
if (!popoverOpen) return undefined;
|
|
259
|
+
var handler = function handler() {
|
|
260
|
+
return positionPopover();
|
|
261
|
+
};
|
|
262
|
+
window.addEventListener('scroll', handler, true);
|
|
263
|
+
window.addEventListener('resize', handler);
|
|
264
|
+
return function () {
|
|
265
|
+
window.removeEventListener('scroll', handler, true);
|
|
266
|
+
window.removeEventListener('resize', handler);
|
|
267
|
+
};
|
|
268
|
+
}, [popoverOpen, positionPopover]);
|
|
269
|
+
useEffect(function () {
|
|
270
|
+
if (!popoverOpen) return undefined;
|
|
271
|
+
var handlePointerDownOutside = function handlePointerDownOutside(mouseEvent) {
|
|
272
|
+
var _popoverRef$current;
|
|
273
|
+
var target = mouseEvent.target;
|
|
274
|
+
if (!target) return;
|
|
275
|
+
if ((_popoverRef$current = popoverRef.current) !== null && _popoverRef$current !== void 0 && _popoverRef$current.contains(target)) return;
|
|
276
|
+
close();
|
|
277
|
+
};
|
|
278
|
+
document.addEventListener('mousedown', handlePointerDownOutside);
|
|
279
|
+
return function () {
|
|
280
|
+
return document.removeEventListener('mousedown', handlePointerDownOutside);
|
|
281
|
+
};
|
|
282
|
+
}, [popoverOpen, close]);
|
|
283
|
+
useEffect(function () {
|
|
284
|
+
setActiveIndex(0);
|
|
285
|
+
}, [items.length, activeType]);
|
|
286
|
+
var popoverNode = useMemo(function () {
|
|
287
|
+
if (!popoverOpen) return null;
|
|
288
|
+
return /*#__PURE__*/_jsx(SCMPAnchor, {
|
|
289
|
+
$bottom: popoverPos.bottom,
|
|
290
|
+
$left: popoverPos.left,
|
|
291
|
+
$width: popoverPos.width,
|
|
292
|
+
children: /*#__PURE__*/_jsx(ContextMentionPopover, {
|
|
293
|
+
ref: popoverRef,
|
|
294
|
+
allowedTypes: allowedTypes,
|
|
295
|
+
activeType: activeType,
|
|
296
|
+
onTypeChange: handleTypeChange,
|
|
297
|
+
items: items,
|
|
298
|
+
loading: loading,
|
|
299
|
+
error: error,
|
|
300
|
+
searchValue: searchValue,
|
|
301
|
+
keyboardHint: t('contextMention.keyboardHint', {
|
|
302
|
+
defaultValue: 'Navegación entre pestañas: @, @@, @@@… en orden. También Alt/Cmd + ←/→'
|
|
303
|
+
}),
|
|
304
|
+
onItemSelected: insertSelectedItem,
|
|
305
|
+
activeIndex: activeIndex,
|
|
306
|
+
onActiveIndexChange: setActiveIndex
|
|
307
|
+
})
|
|
308
|
+
});
|
|
309
|
+
}, [popoverOpen, popoverPos, allowedTypes, activeType, handleTypeChange, items, loading, error, searchValue, insertSelectedItem, activeIndex]);
|
|
310
|
+
return {
|
|
311
|
+
popoverOpen: popoverOpen,
|
|
312
|
+
resetMentionOpenTracking: resetMentionOpenTracking,
|
|
313
|
+
handleTrigger: handleTrigger,
|
|
314
|
+
handleKeyDown: handleKeyDown,
|
|
315
|
+
popoverNode: popoverNode,
|
|
316
|
+
close: close
|
|
317
|
+
};
|
|
318
|
+
};
|
|
319
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIlNDTVBBbmNob3IiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlVCIsInVzZUVudGl0eVNlYXJjaCIsInVzZU1lbnRpb25BbGxvd2VkVHlwZXMiLCJ1c2VDYXJldFBvc2l0aW9uIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJqc3giLCJfanN4IiwiVFlQRV9UT19UUklHR0VSX1NFUVVFTkNFIiwidXNlciIsInRhc2siLCJwcm9qZWN0IiwiZ2V0VHlwZUZyb21UcmlnZ2VyU2VxdWVuY2UiLCJhdFJ1bkxlbmd0aCIsImFsbG93ZWRUeXBlcyIsImRlZmF1bHRUeXBlIiwiX09iamVjdCRlbnRyaWVzJGZpbmQkIiwiX09iamVjdCRlbnRyaWVzJGZpbmQiLCJfYWxsb3dlZFR5cGVzJHRhYklkeCIsIm5vcm1hbGl6ZWQiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJtYXBwZWRUeXBlIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJfcmVmIiwiX3JlZjIiLCJfc2xpY2VkVG9BcnJheSIsImxlbiIsImluY2x1ZGVzIiwidGFiSWR4IiwibWluIiwibGVuZ3RoIiwiZ2V0VHJpZ2dlclNlcXVlbmNlRnJvbVR5cGUiLCJ0eXBlIiwibWFwcGVkIiwiaWR4IiwiaW5kZXhPZiIsInVzZURlcml2ZWRTY29wZSIsIl9yZWYzIiwiX2N0eCRjbGllbnQkaWQiLCJfY3R4JGNsaWVudCIsIl9jdHgkZW50aXR5VmFsdWVzIiwiX3JlZjQiLCJfcmVmNSIsIl9jdHgkcHJvamVjdCRpZCIsIl9jdHgkcHJvamVjdCIsIl9jdHgkZW50aXR5VmFsdWVzMiIsIl9jdHgkY2hpcHNQcm9qZWN0IiwiX2N0eCRhZ2VudCRlbnRpdHkiLCJfY3R4JGFnZW50IiwiX2N0eCRhZ2VudCRjb25uZWN0b3JzIiwiX2N0eCRhZ2VudDIiLCJjdHgiLCJjbGllbnRJZCIsImNsaWVudCIsImlkIiwiZW50aXR5VmFsdWVzIiwicHJvamVjdElkIiwiY2hpcHNQcm9qZWN0IiwiYWdlbnRFbnRpdHkiLCJhZ2VudCIsImVudGl0eSIsIm1jcFNsdWdzS2V5IiwiY29ubmVjdG9ycyIsImMiLCJncm91cCIsInNsdWdzIiwiam9pbiIsIm1jcFNsdWdzIiwiX2N0eCRhZ2VudCRjb25uZWN0b3JzMiIsIl9jdHgkYWdlbnQzIiwicmF3IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0IiwiZmlsdGVyIiwicyIsInRyaW0iLCJzb3J0IiwidXNlTWVudGlvblBvcG92ZXIiLCJfcmVmNiIsImVkaXRvclJlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJlbmFibGVkVHlwZXMiLCJvbk1lbnRpb25BZGRlZCIsIl91c2VUIiwidCIsImV2ZW50IiwiX3VzZU1lbnRpb25BbGxvd2VkVHlwIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZVR5cGUiLCJzZXRBY3RpdmVUeXBlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwb3BvdmVyT3BlbiIsInNldFBvcG92ZXJPcGVuIiwiX3VzZVN0YXRlNSIsImJvdHRvbSIsImxlZnQiLCJ3aWR0aCIsIl91c2VTdGF0ZTYiLCJwb3BvdmVyUG9zIiwic2V0UG9wb3ZlclBvcyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiYWN0aXZlSW5kZXgiLCJzZXRBY3RpdmVJbmRleCIsImhhc0VtaXR0ZWRPcGVuIiwicG9wb3ZlclJlZiIsImdldENhcmV0UmVjdCIsInNjb3BlIiwiX3VzZUVudGl0eVNlYXJjaCIsIml0ZW1zIiwibG9hZGluZyIsImVycm9yIiwic2VhcmNoVmFsdWUiLCJ1cGRhdGVTZWFyY2hWYWx1ZSIsInBvc2l0aW9uUG9wb3ZlciIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1ciIsIl9lZGl0b3JSZWYkY3VycmVudCRnZSIsIl9lZGl0b3JSZWYkY3VycmVudCIsIl9lZGl0b3JSZWYkY3VycmVudCRnZTIiLCJmcm9tQW5jaG9yIiwiY3VycmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImZyb21FZGl0b3IiLCJnZXRFZGl0b3JDbGllbnRSZWN0IiwiY2FsbCIsInJlY3QiLCJjYXJldCIsInZpZXdwb3J0SCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwidmlld3BvcnRXIiwiaW5uZXJXaWR0aCIsImZhbGxiYWNrVyIsInRvcCIsInJlc2V0TWVudGlvbk9wZW5UcmFja2luZyIsImNsb3NlIiwiaGFuZGxlVHJpZ2dlciIsInRyaWdnZXIiLCJhY3RpdmUiLCJ0eXBlRnJvbUF0IiwiYWlDaGF0TWVudGlvbk9wZW4iLCJxdWVyeSIsImluc2VydFNlbGVjdGVkSXRlbSIsIml0ZW0iLCJfaXRlbSRyYXckY2xpZW50SWQiLCJfaXRlbSRyYXckY2xpZW50TmFtZSIsIl9pdGVtJHJhdyRwcm9qZWN0TmFtZSIsIl9pdGVtJHJhdyRmZWVJZCIsIl9pdGVtJHJhdyRmYXRoZXJJZCIsIl9pdGVtJHJhdyRmYXRoZXJUaXRsZSIsIl9pdGVtJHJhdyR0b3RhbFByb3llYyIsIl9pdGVtJHJhdyRwaWN0dXJlIiwiX2l0ZW0kcmF3JHBvc2l0aW9uTmFtIiwiX2l0ZW0kcmF3JGVtYWlsIiwiX2VkaXRvclJlZiRjdXJyZW50MiIsIm1lbnRpb24iLCJsYWJlbCIsInByaW1hcnkiLCJtZXRhZGF0YSIsImNsaWVudE5hbWUiLCJwcm9qZWN0TmFtZSIsImZlZUlkIiwiZmF0aGVySWQiLCJmYXRoZXJUaXRsZSIsInRvdGFsUHJveWVjdG9zIiwicGljdHVyZSIsInBvc2l0aW9uTmFtZSIsImVtYWlsIiwiaW5zZXJ0TWVudGlvbiIsImFpQ2hhdE1lbnRpb25TZWxlY3QiLCJTdHJpbmciLCJoYW5kbGVUeXBlQ2hhbmdlIiwiX2VkaXRvclJlZiRjdXJyZW50MyIsIm5leHRSdW5MZW5ndGgiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwiYWlDaGF0TWVudGlvblR5cGVTd2l0Y2giLCJoYW5kbGVLZXlEb3duIiwiZSIsImtleSIsInByZXZlbnREZWZhdWx0IiwibWV0YUtleSIsImFsdEtleSIsImRlbHRhIiwibmV4dElkeCIsInByZXYiLCJ1bmRlZmluZWQiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVQb2ludGVyRG93bk91dHNpZGUiLCJtb3VzZUV2ZW50IiwiX3BvcG92ZXJSZWYkY3VycmVudCIsInRhcmdldCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJwb3BvdmVyTm9kZSIsIiRib3R0b20iLCIkbGVmdCIsIiR3aWR0aCIsImNoaWxkcmVuIiwicmVmIiwib25UeXBlQ2hhbmdlIiwia2V5Ym9hcmRIaW50IiwiZGVmYXVsdFZhbHVlIiwib25JdGVtU2VsZWN0ZWQiLCJvbkFjdGl2ZUluZGV4Q2hhbmdlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZU1lbnRpb25Qb3BvdmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlib2FyZEV2ZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25Qb3BvdmVyLCBTQ01QQW5jaG9yIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuL3VzZVQnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQgeyBFbnRpdHlTZWFyY2hTY29wZSwgdXNlRW50aXR5U2VhcmNoIH0gZnJvbSAnLi91c2VFbnRpdHlTZWFyY2gnXG5pbXBvcnQgeyB1c2VNZW50aW9uQWxsb3dlZFR5cGVzIH0gZnJvbSAnLi91c2VNZW50aW9uQWxsb3dlZFR5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FyZXRQb3NpdGlvbiB9IGZyb20gJy4vdXNlQ2FyZXRQb3NpdGlvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuL3VzZUV2ZW50J1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uLCBDb250ZXh0TWVudGlvbkl0ZW0gfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcblxuZXhwb3J0IHR5cGUgVXNlTWVudGlvblBvcG92ZXJPcHRpb25zID0ge1xuICBlZGl0b3JSZWY6IFJlZk9iamVjdDxDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZT5cbiAgLyoqXG4gICAqIE5vZG8gY3V5byBhbmNobyB5IGJvcmRlIHN1cGVyaW9yIGRlZmluZW4gZWwgcG9wb3ZlciAocC4gZWouIHdyYXBwZXIgZGVsIGlucHV0IGVuIE1BSUEpLlxuICAgKiBTaSBubyBzZSBwYXNhLCBzZSB1c2EgZWwgcmVjdCBkZWwgY29udGVudGVkaXRhYmxlIChgZ2V0RWRpdG9yQ2xpZW50UmVjdGApLlxuICAgKi9cbiAgcG9wb3ZlckFuY2hvclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG4gIC8qKiBPdmVycmlkZSBkZWwgc2V0IGRlIHRhYnMgcGVybWl0aWRhczsgc2kgbm8gc2UgcGFzYSBzZSBkZXJpdmEgZGVsIGFnZW50LiAqL1xuICBlbmFibGVkVHlwZXM/OiBDb250ZXh0RW50aXR5VHlwZVtdXG4gIC8qKiBDYWxsYmFjayBjdWFuZG8gZWwgdXN1YXJpbyBpbnNlcnRhIHVuYSBtZW50aW9uIHbDrWEgY2xpY2svdGVjbGFkby4gKi9cbiAgb25NZW50aW9uQWRkZWQ/OiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgVXNlTWVudGlvblBvcG92ZXJSZXR1cm4gPSB7XG4gIHBvcG92ZXJPcGVuOiBib29sZWFuXG4gIC8qKlxuICAgKiBSZWluaWNpYSBlbCB0cmFja2luZyBkZSBgQUlfQ0hBVF9NRU5USU9OX09QRU5gIChwcmltZXJhIGFwZXJ0dXJhIHBvciBtZW5zYWplKS5cbiAgICogTGxhbWFyIHRyYXMgZW52aWFyIGVsIG1lbnNhamUgbyBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24uXG4gICAqL1xuICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmc6ICgpID0+IHZvaWRcbiAgLyoqIFByb2Nlc2EgZWwgdHJpZ2dlciBwcm92ZW5pZW50ZSBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yLm9uSW5wdXRgLiAqL1xuICBoYW5kbGVUcmlnZ2VyOiAodHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmc7IGF0UnVuTGVuZ3RoOiBudW1iZXIgfSkgPT4gdm9pZFxuICAvKipcbiAgICogTWFuZWpvIGRlIHRlY2xhcyByZWxhdGl2YXMgYWwgcG9wb3ZlciAobmF2ZWdhY2nDs24sIHNlbGVjY2nDs24sIGNhbWJpbyBkZVxuICAgKiB0YWIgeSBlc2NhcGUpLiBEZXZ1ZWx2ZSBgdHJ1ZWAgc2kgY29uc3VtacOzIGxhIGtleSwgcGFyYSBxdWUgZWwgY29uc3VtZXJcbiAgICogcHVlZGEgZGVjaWRpciBzaSBzZWd1aXIgcHJvY2VzYW5kbyBvdHJhcyB0ZWNsYXMgKHAuZWouIEVudGVyIHBhcmEgZW52aWFyKS5cbiAgICovXG4gIGhhbmRsZUtleURvd246IChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gYm9vbGVhblxuICAvKiogTm9kbyBkZWwgcG9wb3ZlcjsgZWwgY29uc3VtZXIgZGViZSBwb3J0YXJsbyBjb24gYGNyZWF0ZVBvcnRhbGAuICovXG4gIHBvcG92ZXJOb2RlOiBSZWFjdE5vZGUgfCBudWxsXG4gIC8qKiBDaWVycmEgZWwgcG9wb3ZlciB5IGxpbXBpYSBlbCBxdWVyeS4gKi9cbiAgY2xvc2U6ICgpID0+IHZvaWRcbn1cblxuY29uc3QgVFlQRV9UT19UUklHR0VSX1NFUVVFTkNFOiBQYXJ0aWFsPFJlY29yZDxDb250ZXh0RW50aXR5VHlwZSwgbnVtYmVyPj4gPSB7XG4gIHVzZXI6IDEsXG4gIHRhc2s6IDIsXG4gIHByb2plY3Q6IDMsXG59XG5cbmNvbnN0IGdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlID0gKFxuICBhdFJ1bkxlbmd0aDogbnVtYmVyLFxuICBhbGxvd2VkVHlwZXM6IENvbnRleHRFbnRpdHlUeXBlW10sXG4gIGRlZmF1bHRUeXBlOiBDb250ZXh0RW50aXR5VHlwZVxuKTogQ29udGV4dEVudGl0eVR5cGUgPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihhdFJ1bkxlbmd0aCkpXG4gIGNvbnN0IG1hcHBlZFR5cGUgPSAoT2JqZWN0LmVudHJpZXMoVFlQRV9UT19UUklHR0VSX1NFUVVFTkNFKS5maW5kKChbLCBsZW5dKSA9PiBsZW4gPT09IG5vcm1hbGl6ZWQpPy5bMF0gPz9cbiAgICBudWxsKSBhcyBDb250ZXh0RW50aXR5VHlwZSB8IG51bGxcbiAgaWYgKG1hcHBlZFR5cGUgJiYgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKG1hcHBlZFR5cGUpKSByZXR1cm4gbWFwcGVkVHlwZVxuICBjb25zdCB0YWJJZHggPSBNYXRoLm1pbihNYXRoLm1heCgwLCBub3JtYWxpemVkIC0gMSksIGFsbG93ZWRUeXBlcy5sZW5ndGggLSAxKVxuICByZXR1cm4gYWxsb3dlZFR5cGVzW3RhYklkeF0gPz8gZGVmYXVsdFR5cGVcbn1cblxuY29uc3QgZ2V0VHJpZ2dlclNlcXVlbmNlRnJvbVR5cGUgPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIGFsbG93ZWRUeXBlczogQ29udGV4dEVudGl0eVR5cGVbXSk6IG51bWJlciA9PiB7XG4gIGNvbnN0IG1hcHBlZCA9IFRZUEVfVE9fVFJJR0dFUl9TRVFVRU5DRVt0eXBlXVxuICBpZiAobWFwcGVkKSByZXR1cm4gbWFwcGVkXG4gIGNvbnN0IGlkeCA9IGFsbG93ZWRUeXBlcy5pbmRleE9mKHR5cGUpXG4gIHJldHVybiBpZHggPj0gMCA/IGlkeCArIDEgOiAxXG59XG5cbi8qKlxuICogRGVyaXZhIGNsaWVudElkLCBwcm9qZWN0SWQsIGFnZW50RW50aXR5IHkgTUNQIGRlc2RlIGVsIGNvbnRleHRvIGdsb2JhbCAoaW5jbC5cbiAqIGBlbnRpdHlWYWx1ZXNgIHkgYGNoaXBzUHJvamVjdGApIHBhcmEgZmlsdHJhciByZWNlbnRzIHkgYsO6c3F1ZWRhIEdyYXBoUUwuXG4gKi9cbmNvbnN0IHVzZURlcml2ZWRTY29wZSA9ICgpOiBFbnRpdHlTZWFyY2hTY29wZSA9PiB7XG4gIGNvbnN0IGN0eCA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBjbGllbnRJZCA9IGN0eC5jbGllbnQ/LmlkID8/IGN0eC5lbnRpdHlWYWx1ZXM/LmNsaWVudElkID8/IG51bGxcbiAgY29uc3QgcHJvamVjdElkID0gY3R4LnByb2plY3Q/LmlkID8/IGN0eC5lbnRpdHlWYWx1ZXM/LnByb2plY3RJZCA/PyBjdHguY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPz8gbnVsbFxuICBjb25zdCBhZ2VudEVudGl0eSA9IGN0eC5hZ2VudD8uZW50aXR5ID8/IG51bGxcbiAgY29uc3QgbWNwU2x1Z3NLZXkgPSAoY3R4LmFnZW50Py5jb25uZWN0b3JzPy5maW5kKGMgPT4gYy5ncm91cCA9PT0gJ01DUCcpPy5zbHVncyA/PyBbXSkuam9pbignfCcpXG5cbiAgY29uc3QgbWNwU2x1Z3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCByYXcgPSBjdHguYWdlbnQ/LmNvbm5lY3RvcnM/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnTUNQJyk/LnNsdWdzID8/IFtdXG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KHJhdy5maWx0ZXIoKHMpOiBzIGlzIHN0cmluZyA9PiB0eXBlb2YgcyA9PT0gJ3N0cmluZycgJiYgcy50cmltKCkubGVuZ3RoID4gMCkpXS5zb3J0KClcbiAgfSwgW21jcFNsdWdzS2V5XSlcblxuICByZXR1cm4gdXNlTWVtbzxFbnRpdHlTZWFyY2hTY29wZT4oXG4gICAgKCkgPT4gKHsgY2xpZW50SWQsIHByb2plY3RJZCwgbWNwU2x1Z3MsIGFnZW50RW50aXR5IH0pLFxuICAgIFtjbGllbnRJZCwgcHJvamVjdElkLCBtY3BTbHVncywgYWdlbnRFbnRpdHldXG4gIClcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGEgbGEgbMOzZ2ljYSBkZWwgcG9wb3ZlciBkZSBALW1lbnRpb25zIChlc3RhZG8sIGZldGNoIHBvciB0YWIsIGFuYWx5dGljcyxcbiAqIHBvc2ljaW9uYW1pZW50bykuIEVsIGNvbnN1bWVyIG1hbnRpZW5lIGVsIGVkaXRvciB5IGVsIGVudsOtbyBkZWwgbWVuc2FqZS5cbiAqIExvcyBmaWx0cm9zIGRlIGLDunNxdWVkYSB1c2FuIGB1c2VEZXJpdmVkU2NvcGVgOiBlc3BlY2lhbGlzdGEgcHJveWVjdG8gYWNvdGEgdGFyZWFzXG4gKiBhbCBgcHJvamVjdElkYCBkZWwgY29udGV4dG87IGVzcGVjaWFsaXN0YSBjbGllbnRlLCBwcm95ZWN0b3MgYWwgYGNsaWVudElkYCAoZW4gYGV4dHJhYCBkZSBzZWFyY2gpLlxuICovXG5leHBvcnQgY29uc3QgdXNlTWVudGlvblBvcG92ZXIgPSAoe1xuICBlZGl0b3JSZWYsXG4gIHBvcG92ZXJBbmNob3JSZWYsXG4gIGVuYWJsZWRUeXBlcyxcbiAgb25NZW50aW9uQWRkZWQsXG59OiBVc2VNZW50aW9uUG9wb3Zlck9wdGlvbnMpOiBVc2VNZW50aW9uUG9wb3ZlclJldHVybiA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUgfSA9IHVzZU1lbnRpb25BbGxvd2VkVHlwZXMoZW5hYmxlZFR5cGVzKVxuICBjb25zdCBbYWN0aXZlVHlwZSwgc2V0QWN0aXZlVHlwZV0gPSB1c2VTdGF0ZTxDb250ZXh0RW50aXR5VHlwZT4oZGVmYXVsdFR5cGUpXG4gIGNvbnN0IFtwb3BvdmVyT3Blbiwgc2V0UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwb3BvdmVyUG9zLCBzZXRQb3BvdmVyUG9zXSA9IHVzZVN0YXRlPHsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9Pih7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gIH0pXG4gIGNvbnN0IFthY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXhdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgaGFzRW1pdHRlZE9wZW4gPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHBvcG92ZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBnZXRDYXJldFJlY3QgPSB1c2VDYXJldFBvc2l0aW9uKClcblxuICBjb25zdCBzY29wZSA9IHVzZURlcml2ZWRTY29wZSgpXG4gIGNvbnN0IHsgaXRlbXMsIGxvYWRpbmcsIGVycm9yLCBzZWFyY2hWYWx1ZSwgdXBkYXRlU2VhcmNoVmFsdWUgfSA9IHVzZUVudGl0eVNlYXJjaChhY3RpdmVUeXBlLCBzY29wZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYWxsb3dlZFR5cGVzLmluY2x1ZGVzKGFjdGl2ZVR5cGUpKSB7XG4gICAgICBzZXRBY3RpdmVUeXBlKGRlZmF1bHRUeXBlKVxuICAgIH1cbiAgfSwgW2FsbG93ZWRUeXBlcywgYWN0aXZlVHlwZSwgZGVmYXVsdFR5cGVdKVxuXG4gIGNvbnN0IHBvc2l0aW9uUG9wb3ZlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBmcm9tQW5jaG9yID0gcG9wb3ZlckFuY2hvclJlZj8uY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBmcm9tRWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEVkaXRvckNsaWVudFJlY3Q/LigpID8/IG51bGxcbiAgICBjb25zdCByZWN0ID0gZnJvbUFuY2hvciA/PyBmcm9tRWRpdG9yXG4gICAgaWYgKCFyZWN0IHx8IHJlY3Qud2lkdGggPD0gMCkge1xuICAgICAgY29uc3QgY2FyZXQgPSBnZXRDYXJldFJlY3QoKVxuICAgICAgaWYgKCFjYXJldCkgcmV0dXJuXG4gICAgICBjb25zdCB2aWV3cG9ydEggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgIGNvbnN0IHZpZXdwb3J0VyA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICBjb25zdCBmYWxsYmFja1cgPSAzMjBcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih2aWV3cG9ydFcgLSBmYWxsYmFja1cgLSA4LCBjYXJldC5sZWZ0KSlcbiAgICAgIHNldFBvcG92ZXJQb3Moe1xuICAgICAgICB3aWR0aDogZmFsbGJhY2tXLFxuICAgICAgICBsZWZ0LFxuICAgICAgICBib3R0b206IHZpZXdwb3J0SCAtIGNhcmV0LnRvcCArIDQsXG4gICAgICB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICBjb25zdCB2aWV3cG9ydEggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBjb25zdCB7IHdpZHRoIH0gPSByZWN0XG4gICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDgsIE1hdGgubWluKHZpZXdwb3J0VyAtIHdpZHRoIC0gOCwgcmVjdC5sZWZ0KSlcbiAgICAvKiogUG9wb3ZlciBzaWVtcHJlIGFycmliYSBkZWwgaW5wdXQ6IGJvcmRlIGluZmVyaW9yIGRlbCBwb3BvdmVyIH40cHggc29icmUgZWwgYm9yZGUgc3VwZXJpb3IgZGVsIGFuY2xhLiAqL1xuICAgIHNldFBvcG92ZXJQb3Moe1xuICAgICAgd2lkdGgsXG4gICAgICBsZWZ0LFxuICAgICAgYm90dG9tOiB2aWV3cG9ydEggLSByZWN0LnRvcCArIDQsXG4gICAgfSlcbiAgfSwgW3BvcG92ZXJBbmNob3JSZWYsIGVkaXRvclJlZiwgZ2V0Q2FyZXRSZWN0XSlcblxuICBjb25zdCByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaGFzRW1pdHRlZE9wZW4uY3VycmVudCA9IGZhbHNlXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIHVwZGF0ZVNlYXJjaFZhbHVlKCcnKVxuICB9LCBbdXBkYXRlU2VhcmNoVmFsdWVdKVxuXG4gIGNvbnN0IGhhbmRsZVRyaWdnZXIgPSB1c2VDYWxsYmFjayhcbiAgICAodHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmc7IGF0UnVuTGVuZ3RoOiBudW1iZXIgfSkgPT4ge1xuICAgICAgaWYgKGFsbG93ZWRUeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKHBvcG92ZXJPcGVuKSBjbG9zZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHJpZ2dlci5hY3RpdmUpIHtcbiAgICAgICAgY29uc3QgdHlwZUZyb21BdCA9IGdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlKHRyaWdnZXIuYXRSdW5MZW5ndGgsIGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUpXG5cbiAgICAgICAgaWYgKCFwb3BvdmVyT3Blbikge1xuICAgICAgICAgIHNldFBvcG92ZXJPcGVuKHRydWUpXG4gICAgICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlRnJvbUF0KVxuICAgICAgICAgIHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgICAgICAgaWYgKCFoYXNFbWl0dGVkT3Blbi5jdXJyZW50KSB7XG4gICAgICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0TWVudGlvbk9wZW4sIHsgdHlwZTogdHlwZUZyb21BdCB9KVxuICAgICAgICAgICAgaGFzRW1pdHRlZE9wZW4uY3VycmVudCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlRnJvbUF0KVxuICAgICAgICAgIHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2VhcmNoVmFsdWUodHJpZ2dlci5xdWVyeSlcbiAgICAgIH0gZWxzZSBpZiAocG9wb3Zlck9wZW4pIHtcbiAgICAgICAgY2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUsIHBvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXIsIHVwZGF0ZVNlYXJjaFZhbHVlLCBldmVudCwgY2xvc2VdXG4gIClcblxuICBjb25zdCBpbnNlcnRTZWxlY3RlZEl0ZW0gPSB1c2VDYWxsYmFjayhcbiAgICAoaXRlbTogQ29udGV4dE1lbnRpb25JdGVtKSA9PiB7XG4gICAgICBjb25zdCBtZW50aW9uOiBDb250ZXh0TWVudGlvbiA9IHtcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ucHJpbWFyeSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBjbGllbnRJZDogaXRlbS5yYXcuY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgICAgICBjbGllbnROYW1lOiBpdGVtLnJhdy5jbGllbnROYW1lID8/IG51bGwsXG4gICAgICAgICAgcHJvamVjdE5hbWU6IGl0ZW0ucmF3LnByb2plY3ROYW1lID8/IG51bGwsXG4gICAgICAgICAgZmVlSWQ6IGl0ZW0ucmF3LmZlZUlkID8/IG51bGwsXG4gICAgICAgICAgZmF0aGVySWQ6IGl0ZW0ucmF3LmZhdGhlcklkID8/IG51bGwsXG4gICAgICAgICAgZmF0aGVyVGl0bGU6IGl0ZW0ucmF3LmZhdGhlclRpdGxlID8/IG51bGwsXG4gICAgICAgICAgdG90YWxQcm95ZWN0b3M6IGl0ZW0ucmF3LnRvdGFsUHJveWVjdG9zID8/IG51bGwsXG4gICAgICAgICAgcGljdHVyZTogaXRlbS5yYXcucGljdHVyZSA/PyBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uTmFtZTogaXRlbS5yYXcucG9zaXRpb25OYW1lID8/IG51bGwsXG4gICAgICAgICAgZW1haWw6IGl0ZW0ucmF3LmVtYWlsID8/IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0TWVudGlvbihtZW50aW9uKVxuICAgICAgb25NZW50aW9uQWRkZWQ/LihtZW50aW9uKVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdE1lbnRpb25TZWxlY3QsIHsgdHlwZTogbWVudGlvbi50eXBlLCBpZDogU3RyaW5nKG1lbnRpb24uaWQpIH0pXG4gICAgICBjbG9zZSgpXG4gICAgfSxcbiAgICBbZWRpdG9yUmVmLCBvbk1lbnRpb25BZGRlZCwgZXZlbnQsIGNsb3NlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlVHlwZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSkgPT4ge1xuICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlKVxuICAgICAgY29uc3QgbmV4dFJ1bkxlbmd0aCA9IGdldFRyaWdnZXJTZXF1ZW5jZUZyb21UeXBlKHR5cGUsIGFsbG93ZWRUeXBlcylcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5zeW5jVHJpZ2dlckF0UnVuTGVuZ3RoKG5leHRSdW5MZW5ndGgpXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0TWVudGlvblR5cGVTd2l0Y2gsIHsgdHlwZSB9KVxuICAgIH0sXG4gICAgW2FsbG93ZWRUeXBlcywgZWRpdG9yUmVmLCBldmVudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pOiBib29sZWFuID0+IHtcbiAgICAgIGlmICghcG9wb3Zlck9wZW4gfHwgYWxsb3dlZFR5cGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGNsb3NlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKChlLmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGUua2V5ID09PSAnQXJyb3dMZWZ0JykgJiYgKGUubWV0YUtleSB8fCBlLmFsdEtleSkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGNvbnN0IGlkeCA9IGFsbG93ZWRUeXBlcy5pbmRleE9mKGFjdGl2ZVR5cGUpXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5rZXkgPT09ICdBcnJvd1JpZ2h0JyA/IDEgOiAtMVxuICAgICAgICBjb25zdCBuZXh0SWR4ID0gKGlkeCArIGRlbHRhICsgYWxsb3dlZFR5cGVzLmxlbmd0aCkgJSBhbGxvd2VkVHlwZXMubGVuZ3RoXG4gICAgICAgIGhhbmRsZVR5cGVDaGFuZ2UoYWxsb3dlZFR5cGVzW25leHRJZHhdKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgc2V0QWN0aXZlSW5kZXgocHJldiA9PiAocHJldiArIDEpICUgaXRlbXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gKHByZXYgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGluc2VydFNlbGVjdGVkSXRlbShpdGVtc1thY3RpdmVJbmRleF0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuICAgIFtwb3BvdmVyT3BlbiwgaXRlbXMsIGFsbG93ZWRUeXBlcywgYWN0aXZlVHlwZSwgYWN0aXZlSW5kZXgsIGluc2VydFNlbGVjdGVkSXRlbSwgY2xvc2UsIGhhbmRsZVR5cGVDaGFuZ2VdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcG9wb3Zlck9wZW4pIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4gcG9zaXRpb25Qb3BvdmVyKClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlcilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZXIsIHRydWUpXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlcilcbiAgICB9XG4gIH0sIFtwb3BvdmVyT3BlbiwgcG9zaXRpb25Qb3BvdmVyXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcG9wb3Zlck9wZW4pIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSA9IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBtb3VzZUV2ZW50LnRhcmdldCBhcyBOb2RlIHwgbnVsbFxuICAgICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgICAgaWYgKHBvcG92ZXJSZWYuY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuXG4gICAgICBjbG9zZSgpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gIH0sIFtwb3BvdmVyT3BlbiwgY2xvc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0QWN0aXZlSW5kZXgoMClcbiAgfSwgW2l0ZW1zLmxlbmd0aCwgYWN0aXZlVHlwZV0pXG5cbiAgY29uc3QgcG9wb3Zlck5vZGUgPSB1c2VNZW1vPFJlYWN0Tm9kZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIXBvcG92ZXJPcGVuKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8U0NNUEFuY2hvciAkYm90dG9tPXtwb3BvdmVyUG9zLmJvdHRvbX0gJGxlZnQ9e3BvcG92ZXJQb3MubGVmdH0gJHdpZHRoPXtwb3BvdmVyUG9zLndpZHRofT5cbiAgICAgICAgPENvbnRleHRNZW50aW9uUG9wb3ZlclxuICAgICAgICAgIHJlZj17cG9wb3ZlclJlZn1cbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17aGFuZGxlVHlwZUNoYW5nZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgc2VhcmNoVmFsdWU9e3NlYXJjaFZhbHVlfVxuICAgICAgICAgIGtleWJvYXJkSGludD17dCgnY29udGV4dE1lbnRpb24ua2V5Ym9hcmRIaW50Jywge1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAnTmF2ZWdhY2nDs24gZW50cmUgcGVzdGHDsWFzOiBALCBAQCwgQEBA4oCmIGVuIG9yZGVuLiBUYW1iacOpbiBBbHQvQ21kICsg4oaQL+KGkicsXG4gICAgICAgICAgfSl9XG4gICAgICAgICAgb25JdGVtU2VsZWN0ZWQ9e2luc2VydFNlbGVjdGVkSXRlbX1cbiAgICAgICAgICBhY3RpdmVJbmRleD17YWN0aXZlSW5kZXh9XG4gICAgICAgICAgb25BY3RpdmVJbmRleENoYW5nZT17c2V0QWN0aXZlSW5kZXh9XG4gICAgICAgIC8+XG4gICAgICA8L1NDTVBBbmNob3I+XG4gICAgKVxuICB9LCBbXG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcG9wb3ZlclBvcyxcbiAgICBhbGxvd2VkVHlwZXMsXG4gICAgYWN0aXZlVHlwZSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlLFxuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgaW5zZXJ0U2VsZWN0ZWRJdGVtLFxuICAgIGFjdGl2ZUluZGV4LFxuICBdKVxuXG4gIHJldHVybiB7IHBvcG92ZXJPcGVuLCByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsIGhhbmRsZVRyaWdnZXIsIGhhbmRsZUtleURvd24sIHBvcG92ZXJOb2RlLCBjbG9zZSB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsU0FBOENBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFFOUcsU0FBU0MscUJBQXFCLEVBQUVDLFVBQVUsUUFBUSwyQ0FBMkM7QUFDN0YsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FBQzVELFNBQVNDLElBQUksUUFBUSxRQUFRO0FBQzdCO0FBQ0EsU0FBNEJDLGVBQWUsUUFBUSxtQkFBbUI7QUFDdEUsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLG9CQUFvQjtBQUNyRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEs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
|