@projectcor/maia-components 2.11.41-10 → 2.11.41-2

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.
Files changed (82) hide show
  1. package/lib/App.js +22 -11
  2. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +38 -0
  3. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +184 -0
  4. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
  5. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +390 -0
  6. package/lib/components/atoms/ContextMentionChip/index.js +4 -0
  7. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +195 -0
  8. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
  9. package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
  10. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +282 -0
  11. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +145 -0
  12. package/lib/components/atoms/ContextMentionItem/index.js +2 -0
  13. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +168 -0
  14. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +79 -0
  15. package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
  16. package/lib/components/atoms/MAIAInput/MAIAInput.js +238 -321
  17. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +269 -0
  18. package/lib/components/atoms/MAIAInput/styles.js +75 -46
  19. package/lib/components/atoms/icons/NotionIcon.js +36 -0
  20. package/lib/components/atoms/icons/SubtaskIcon.js +36 -0
  21. package/lib/components/atoms/icons/index.js +2 -1
  22. package/lib/components/index.js +2 -1
  23. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
  24. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +31 -3
  25. package/lib/components/molecules/ChatAIMessages/newStyles.js +5 -2
  26. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +9 -30
  27. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
  28. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +68 -0
  29. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
  30. package/lib/components/molecules/ContextMentionInput/index.js +2 -0
  31. package/lib/components/molecules/Sidebar/Sidebar.js +9 -5
  32. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +6 -2
  33. package/lib/components/organisms/ChatAI/ChatAI.js +4 -20
  34. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
  35. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
  36. package/lib/constants/config.js +3 -1
  37. package/lib/constants/taskLinkIcon.js +6 -0
  38. package/lib/context/cor-user.js +1 -1
  39. package/lib/context/global-context.js +1 -5
  40. package/lib/dev/DevContextMentionInput.js +65 -0
  41. package/lib/dev/Providers.js +11 -6
  42. package/lib/hooks/useCaretPosition.js +35 -0
  43. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  44. package/lib/hooks/useChatManager/useChatManager.js +21 -11
  45. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  46. package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
  47. package/lib/hooks/useClientSearch.js +3 -2
  48. package/lib/hooks/useContextMentions.js +270 -0
  49. package/lib/hooks/useEntitySearch.js +1119 -0
  50. package/lib/hooks/useEvent.js +6 -1
  51. package/lib/hooks/useMentionAllowedTypes.js +103 -0
  52. package/lib/hooks/useMentionPopover.js +334 -0
  53. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
  54. package/lib/hooks/useProjectSearch.js +3 -2
  55. package/lib/hooks/useRecentClientsSearch.js +3 -2
  56. package/lib/hooks/useTaskPanel.js +3 -10
  57. package/lib/hooks/useTextOverflowEllipsisTooltip.js +34 -0
  58. package/lib/lang/br/index.js +24 -1
  59. package/lib/lang/en/index.js +24 -1
  60. package/lib/lang/es/index.js +24 -1
  61. package/lib/lang/fr/index.js +23 -1
  62. package/lib/services/maia/Chats/getChatMessages.js +29 -4
  63. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +4 -8
  64. package/lib/services/maia/Orchestrator/orchestrator.js +8 -5
  65. package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
  66. package/lib/services/maia/RecentTasks/getRecentTasks.js +54 -0
  67. package/lib/services/maia/RecentTasks/index.js +6 -0
  68. package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
  69. package/lib/services/maia/RecentUsers/index.js +6 -0
  70. package/lib/services/query/entitySearchQuery.js +18 -0
  71. package/lib/services/query/usersDirectoryQuery.js +19 -0
  72. package/lib/services/utils/mapChatMessages.js +12 -5
  73. package/lib/types/Chat.js +1 -1
  74. package/lib/types/agent.js +1 -1
  75. package/lib/types/contextMention.js +37 -0
  76. package/lib/utils/contextMentionIcons.js +115 -0
  77. package/lib/utils/contextMentionLabel.js +4 -0
  78. package/lib/utils/contextMentionTypeLabel.js +17 -0
  79. package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
  80. package/lib/utils/openTaskInCorPanel.js +18 -0
  81. package/lib/utils/renderContextMentions.js +299 -0
  82. package/package.json +2 -1
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsImRpc3BhdGNoQW1wbGl0dWRlIiwidXNlVXNlciIsIlBST0pFQ1RfUkVTVU1FX0VWRU5UUyIsInByb2plY3RSZXN1bWVPcGVuIiwicHJvamVjdFJlc3VtZU9wZW5Db25maWd1cmUiLCJwcm9qZWN0UmVzdW1lQ29uZmlnQ2hhbmdlIiwicHJvamVjdFJlc3VtZUdlbmVyYXRlIiwicHJvamVjdFJlc3VtZUNsb3NlIiwicHJvamVjdFJlc3VtZUV4cGFuZCIsInByb2plY3RSZXN1bWVCYWNrVGVtcGxhdGVzIiwicHJvamVjdFJlc3VtZUZlZWRiYWNrIiwicHJvamVjdFJlc3VtZUNvcHkiLCJwcm9qZWN0UmVzdW1lR2VuZXJhdGlvbkNvbXBsZXRlIiwiQ0hBVF9BSV9FVkVOVFMiLCJwbUFpT3BlbiIsInBtQWlGcmVxdWVudFF1ZXN0aW9uIiwicG1BaVR5cGVkVGV4dCIsInBtQWlTZW5kUXVlc3Rpb24iLCJwbUFpT3BlbkNoYXRIaXN0b3J5IiwicG1BaU5ld0NvbnZlcnNhdGlvbiIsInBtQWlPcGVuQ29udmVyc2F0aW9uIiwicG1BaU9wZW5NZW51IiwicG1BaU1lbnVEZWxldGUiLCJwbUFpTWVudUVkaXQiLCJwbUFpQmFja0J1dHRvbiIsImFpQ2hhdEZhcSIsImFpQ2hhdFNlbmQiLCJhaUNoYXRSZXNwb25zZSIsImFpQ2hhdE9wZW5BZ2VudFNlbGVjdCIsImFpQ2hhdEFnZW50U2VsZWN0IiwiYWlDaGF0U2VhcmNoQ29udGV4dE9wZW4iLCJhaUNoYXRTZWFyY2hDb250ZXh0U2VsZWN0UmVzdWx0IiwiYWlDaGF0QnJlYWRjcnVtYkNoYW5nZSIsImFpQ2hhdEZhdm9yaXRlIiwiYWlDaGF0VG9vbHMiLCJhaUNoYXRQbHVzT3BlbiIsImFpQ2hhdFN0b3BSZXNwb25zZSIsImFpQ2hhdFNlbGVjdEZBUSIsImFpQ2hhdEhpdGwiLCJhaUNoYXRIaXRsT3B0aW9uIiwiYWlDaGF0TXBPcGVuIiwiYWlDaGF0TXBTZWxlY3RBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFpQ2hhdE9wZW5WaWV3T3B0aW9ucyIsImFpQ2hhdFNlbGVjdFZpZXdPcHRpb25zIiwiYWlDaGF0RHJhZ2dhYmxlIiwiQUJNX0FHRU5UX0VWRU5UUyIsIm9wZW5Nb2RhbCIsImNhbmNlbE1vZGFsIiwidGFiU2VjdGlvbiIsImFkZEZpbGUiLCJjb25maXJtQWN0aW9uIiwiYWNjZXNzaWJpbGl0eVR5cGUiLCJhY2Nlc3NpYmlsaXR5U2VsZWN0Q2xpZW50Iiwic2VsZWN0TW9kZWwiLCJjaG9vc2VNb2RlbCIsIkVWRU5UUyIsIl9vYmplY3RTcHJlYWQiLCJ1c2VFdmVudCIsIl91c2VVc2VyIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsInVzZXJJZCIsImlkIiwidHJpZ2dlckV2ZW50IiwiZXZlbnROYW1lIiwiYXJncyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VFdmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRpc3BhdGNoQW1wbGl0dWRlIGZyb20gJ0Bwcm9qZWN0Y29yL2Nvci1jb21tb25zL2xpYi91dGlscy9kaXNwYXRjaEFtcGxpdHVkZSdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi9jb250ZXh0L2Nvci11c2VyJ1xuXG5jb25zdCBQUk9KRUNUX1JFU1VNRV9FVkVOVFMgPSB7XG4gIHByb2plY3RSZXN1bWVPcGVuOiAnUFJPSkVDVF9SRVNVTUVfT1BFTicsXG4gIHByb2plY3RSZXN1bWVPcGVuQ29uZmlndXJlOiAnUFJPSkVDVF9SRVNVTUVfT1BFTl9DT05GSUdVUkUnLFxuICBwcm9qZWN0UmVzdW1lQ29uZmlnQ2hhbmdlOiAnUFJPSkVDVF9SRVNVTUVfQ09ORklHX0NIQU5HRScsXG4gIHByb2plY3RSZXN1bWVHZW5lcmF0ZTogJ1BST0pFQ1RfUkVTVU1FX0dFTkVSQVRFJyxcbiAgcHJvamVjdFJlc3VtZUNsb3NlOiAnUFJPSkVDVF9SRVNVTUVfQ0xPU0UnLFxuICBwcm9qZWN0UmVzdW1lRXhwYW5kOiAnUFJPSkVDVF9SRVNVTUVfRVhQQU5EJyxcbiAgcHJvamVjdFJlc3VtZUJhY2tUZW1wbGF0ZXM6ICdQUk9KRUNUX1JFU1VNRV9CQUNLX1RFTVBMQVRFUycsXG4gIHByb2plY3RSZXN1bWVGZWVkYmFjazogJ1BST0pFQ1RfUkVTVU1FX0ZFRURCQUNLJyxcbiAgcHJvamVjdFJlc3VtZUNvcHk6ICdQUk9KRUNUX1JFU1VNRV9DT1BZJyxcbiAgcHJvamVjdFJlc3VtZUdlbmVyYXRpb25Db21wbGV0ZTogJ1BST0pFQ1RfUkVTVU1FX0dFTkVSQVRJT05fQ09NUExFVEUnLFxufVxuXG5jb25zdCBDSEFUX0FJX0VWRU5UUyA9IHtcbiAgcG1BaU9wZW46ICdQTV9BSV9PUEVOJyxcbiAgcG1BaUZyZXF1ZW50UXVlc3Rpb246ICdQTV9BSV9GUkVRVUVOVF9RVUVTVElPTicsXG4gIHBtQWlUeXBlZFRleHQ6ICdBSV9DSEFUX1RZUEVEJyxcbiAgcG1BaVNlbmRRdWVzdGlvbjogJ1BNX0FJX1NFTkRfUVVFU1RJT04nLFxuICBwbUFpT3BlbkNoYXRIaXN0b3J5OiAnUE1fQUlfT1BFTl9DSEFUX0hJU1RPUlknLFxuICBwbUFpTmV3Q29udmVyc2F0aW9uOiAnUE1fQUlfTkVXX0NPTlZFUlNBVElPTicsXG4gIHBtQWlPcGVuQ29udmVyc2F0aW9uOiAnUE1fQUlfT1BFTl9DT05WRVJTQVRJT04nLFxuICBwbUFpT3Blbk1lbnU6ICdQTV9BSV9PUEVOX01FTlUnLFxuICBwbUFpTWVudURlbGV0ZTogJ1BNX0FJX01FTlVfREVMRVRFJyxcbiAgcG1BaU1lbnVFZGl0OiAnUE1fQUlfTUVOVV9FRElUJyxcbiAgcG1BaUJhY2tCdXR0b246ICdQTV9BSV9CQUNLX0JVVFRPTicsXG4gIGFpQ2hhdEZhcTogJ0FJX0NIQVRfRkFRJyxcbiAgYWlDaGF0U2VuZDogJ0FJX0NIQVRfU0VORCcsXG4gIGFpQ2hhdFJlc3BvbnNlOiAnQUlfQ0hBVF9SRVNQT05TRScsXG4gIGFpQ2hhdE9wZW5BZ2VudFNlbGVjdDogJ0FJX0NIQVRfT1BFTl9BR0VOVEVfU0VMRUNUJyxcbiAgYWlDaGF0QWdlbnRTZWxlY3Q6ICdBSV9DSEFUX0FHRU5URV9TRUxFQ1RFRCcsXG4gIGFpQ2hhdFNlYXJjaENvbnRleHRPcGVuOiAnQUlfQ0hBVF9TRUFSQ0hfQ09OVEVYVF9PUEVOJyxcbiAgYWlDaGF0U2VhcmNoQ29udGV4dFNlbGVjdFJlc3VsdDogJ0FJX0NIQVRfU0VBUkNIX0NPTlRFWFRfU0VMRUNUX1JFU1VMVCcsXG4gIGFpQ2hhdEJyZWFkY3J1bWJDaGFuZ2U6ICdBSV9DSEFUX0JSRUFEQ1JVTUJfQ0hBTkdFJyxcbiAgYWlDaGF0RmF2b3JpdGU6ICdBSV9DSEFUX0ZBVk9SSVRFJyxcbiAgYWlDaGF0VG9vbHM6ICdBSV9DSEFUX1RPT0xTJyxcbiAgYWlDaGF0UGx1c09wZW46ICdBSV9DSEFUX1BMVVNfT1BFTicsXG4gIGFpQ2hhdFN0b3BSZXNwb25zZTogJ0FJX0NIQVRfU1RPUF9SRVNQT05TRScsXG4gIGFpQ2hhdFNlbGVjdEZBUTogJ0FJX0NIQVRfU0VMRUNUX0ZBUScsXG4gIGFpQ2hhdEhpdGw6ICdBSV9DSEFUX0hJVEwnLFxuICBhaUNoYXRIaXRsT3B0aW9uOiAnQUlfQ0hBVF9ISVRMX09QVElPTicsXG4gIGFpQ2hhdE1wT3BlbjogJ0FJX0NIQVRfTVBfT1BFTicsXG4gIGFpQ2hhdE1wU2VsZWN0QWdlbnQ6ICdBSV9DSEFUX01QX1NFTEVDVF9BR0VOVCcsXG4gIGFpQ2hhdFN1Z2dlc3RlZEFuc3dlcjogJ0FJX0NIQVRfU1VHR0VTVEVEX0FOU1dFUicsXG4gIGFpQ2hhdE9wZW5WaWV3T3B0aW9uczogJ0FJX0NIQVRfT1BFTl9WSUVXX09QVElPTlMnLFxuICBhaUNoYXRTZWxlY3RWaWV3T3B0aW9uczogJ0FJX0NIQVRfU0VMRUNUX1ZJRVdfT1BUSU9OUycsXG4gIGFpQ2hhdERyYWdnYWJsZTogJ0FJX0NIQVRfRFJBR0dBQkxFJyxcbn1cblxuY29uc3QgQUJNX0FHRU5UX0VWRU5UUyA9IHtcbiAgb3Blbk1vZGFsOiAnQUlfQ0hBVF9BQk1fQUNDRVNTJyxcbiAgY2FuY2VsTW9kYWw6ICdBSV9DSEFUX0FCTV9DQU5DRUwnLFxuICB0YWJTZWN0aW9uOiAnQUlfQ0hBVF9BQk1fU0VDVElPTicsXG4gIGFkZEZpbGU6ICdBSV9DSEFUX0FCTV9TRUNUSU9OJyxcbiAgY29uZmlybUFjdGlvbjogJ0FJX0NIQVRfQUJNX0NPTkZJUk0nLFxuICBkZWxldGU6ICdBSV9DSEFUX0FCTV9ERUxFVEVfQUdFTlQnLFxuICBhY2Nlc3NpYmlsaXR5VHlwZTogJ0FJX0NIQVRfQUJNX0FDQ0VTU0lCSUxJVFlfVFlQRScsXG4gIGFjY2Vzc2liaWxpdHlTZWxlY3RDbGllbnQ6ICdBSV9DSEFUX0FCTV9BQ0NFU1NJQklMSVRZX1NFTEVDVF9DTElFTlQnLFxuICBzZWxlY3RNb2RlbDogJ0FJX0NIQVRfQUJNX1NFTEVDVF9NT0RFTCcsXG4gIGNob29zZU1vZGVsOiAnQUlfQ0hBVF9BQk1fQ0hPT1NFX01PREVMJyxcbn1cbmV4cG9ydCBjb25zdCBFVkVOVFMgPSB7XG4gIC4uLlBST0pFQ1RfUkVTVU1FX0VWRU5UUyxcbiAgLi4uQ0hBVF9BSV9FVkVOVFMsXG4gIC4uLkFCTV9BR0VOVF9FVkVOVFMsXG59XG5cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9ICh0eXBlb2YgRVZFTlRTKVtrZXlvZiB0eXBlb2YgRVZFTlRTXVxuXG5leHBvcnQgY29uc3QgdXNlRXZlbnQgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY29tcGFueV9pZDogY29tcGFueUlkLCBpZDogdXNlcklkIH0gPSB1c2VVc2VyKClcblxuICBjb25zdCB0cmlnZ2VyRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICA8RXZlbnRBcmdzPihldmVudE5hbWU6IEV2ZW50TmFtZSwgYXJncz86IEV2ZW50QXJncykgPT4ge1xuICAgICAgZGlzcGF0Y2hBbXBsaXR1ZGUoZXZlbnROYW1lLCBjb21wYW55SWQsIHtcbiAgICAgICAgY29tcGFueUlkLFxuICAgICAgICB1c2VySWQsXG4gICAgICAgIC4uLmFyZ3MsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2NvbXBhbnlJZCwgdXNlcklkXVxuICApXG5cbiAgcmV0dXJuIHRyaWdnZXJFdmVudFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxXQUFXLFFBQVEsT0FBTztBQUNuQyxPQUFPQyxpQkFBaUIsTUFBTSxxREFBcUQ7QUFDbkYsU0FBU0MsT0FBTyxRQUFRLHFCQUFxQjtBQUU3QyxJQUFNQyxxQkFBcUIsR0FBRztFQUM1QkMsaUJBQWlCLEVBQUUscUJBQXFCO0VBQ3hDQywwQkFBMEIsRUFBRSwrQkFBK0I7RUFDM0RDLHlCQUF5QixFQUFFLDhCQUE4QjtFQUN6REMscUJBQXFCLEVBQUUseUJBQXlCO0VBQ2hEQyxrQkFBa0IsRUFBRSxzQkFBc0I7RUFDMUNDLG1CQUFtQixFQUFFLHVCQUF1QjtFQUM1Q0MsMEJBQTBCLEVBQUUsK0JBQStCO0VBQzNEQyxxQkFBcUIsRUFBRSx5QkFBeUI7RUFDaERDLGlCQUFpQixFQUFFLHFCQUFxQjtFQUN4Q0MsK0JBQStCLEVBQUU7QUFDbkMsQ0FBQztBQUVELElBQU1DLGNBQWMsR0FBRztFQUNyQkMsUUFBUSxFQUFFLFlBQVk7RUFDdEJDLG9CQUFvQixFQUFFLHlCQUF5QjtFQUMvQ0MsYUFBYSxFQUFFLGVBQWU7RUFDOUJDLGdCQUFnQixFQUFFLHFCQUFxQjtFQUN2Q0MsbUJBQW1CLEVBQUUseUJBQXlCO0VBQzlDQyxtQkFBbUIsRUFBRSx3QkFBd0I7RUFDN0NDLG9CQUFvQixFQUFFLHlCQUF5QjtFQUMvQ0MsWUFBWSxFQUFFLGlCQUFpQjtFQUMvQkMsY0FBYyxFQUFFLG1CQUFtQjtFQUNuQ0MsWUFBWSxFQUFFLGlCQUFpQjtFQUMvQkMsY0FBYyxFQUFFLG1CQUFtQjtFQUNuQ0MsU0FBUyxFQUFFLGFBQWE7RUFDeEJDLFVBQVUsRUFBRSxjQUFjO0VBQzFCQyxjQUFjLEVBQUUsa0JBQWtCO0VBQ2xDQyxxQkFBcUIsRUFBRSw0QkFBNEI7RUFDbkRDLGlCQUFpQixFQUFFLHlCQUF5QjtFQUM1Q0MsdUJBQXVCLEVBQUUsNkJBQTZCO0VBQ3REQywrQkFBK0IsRUFBRSxzQ0FBc0M7RUFDdkVDLHNCQUFzQixFQUFFLDJCQUEyQjtFQUNuREMsY0FBYyxFQUFFLGtCQUFrQjtFQUNsQ0MsV0FBVyxFQUFFLGVBQWU7RUFDNUJDLGNBQWMsRUFBRSxtQkFBbUI7RUFDbkNDLGtCQUFrQixFQUFFLHVCQUF1QjtFQUMzQ0MsZUFBZSxFQUFFLG9CQUFvQjtFQUNyQ0MsVUFBVSxFQUFFLGNBQWM7RUFDMUJDLGdCQUFnQixFQUFFLHFCQUFxQjtFQUN2Q0MsWUFBWSxFQUFFLGlCQUFpQjtFQUMvQkMsbUJBQW1CLEVBQUUseUJBQXlCO0VBQzlDQyxxQkFBcUIsRUFBRSwwQkFBMEI7RUFDakRDLHFCQUFxQixFQUFFLDJCQUEyQjtFQUNsREMsdUJBQXVCLEVBQUUsNkJBQTZCO0VBQ3REQyxlQUFlLEVBQUU7QUFDbkIsQ0FBQztBQUVELElBQU1DLGdCQUFnQixHQUFHO0VBQ3ZCQyxTQUFTLEVBQUUsb0JBQW9CO0VBQy9CQyxXQUFXLEVBQUUsb0JBQW9CO0VBQ2pDQyxVQUFVLEVBQUUscUJBQXFCO0VBQ2pDQyxPQUFPLEVBQUUscUJBQXFCO0VBQzlCQyxhQUFhLEVBQUUscUJBQXFCO0VBQ3BDLFVBQVEsMEJBQTBCO0VBQ2xDQyxpQkFBaUIsRUFBRSxnQ0FBZ0M7RUFDbkRDLHlCQUF5QixFQUFFLHlDQUF5QztFQUNwRUMsV0FBVyxFQUFFLDBCQUEwQjtFQUN2Q0MsV0FBVyxFQUFFO0FBQ2YsQ0FBQztBQUNELE9BQU8sSUFBTUMsTUFBTSxHQUFBQyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNkdkQscUJBQXFCLEdBQ3JCVyxjQUFjLEdBQ2RpQyxnQkFBZ0IsQ0FDcEI7QUFJRCxPQUFPLElBQU1ZLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFBLEVBQVM7RUFDNUIsSUFBQUMsUUFBQSxHQUE4QzFELE9BQU8sQ0FBQyxDQUFDO0lBQW5DMkQsU0FBUyxHQUFBRCxRQUFBLENBQXJCRSxVQUFVO0lBQWlCQyxNQUFNLEdBQUFILFFBQUEsQ0FBVkksRUFBRTtFQUVqQyxJQUFNQyxZQUFZLEdBQUdqRSxXQUFXLENBQzlCLFVBQVlrRSxTQUFvQixFQUFFQyxJQUFnQixFQUFLO0lBQ3JEbEUsaUJBQWlCLENBQUNpRSxTQUFTLEVBQUVMLFNBQVMsRUFBQUgsYUFBQTtNQUNwQ0csU0FBUyxFQUFUQSxTQUFTO01BQ1RFLE1BQU0sRUFBTkE7SUFBTSxHQUNISSxJQUFJLENBQ1IsQ0FBQztFQUNKLENBQUMsRUFDRCxDQUFDTixTQUFTLEVBQUVFLE1BQU0sQ0FDcEIsQ0FBQztFQUVELE9BQU9FLFlBQVk7QUFDckIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
83
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsImRpc3BhdGNoQW1wbGl0dWRlIiwidXNlVXNlciIsIlBST0pFQ1RfUkVTVU1FX0VWRU5UUyIsInByb2plY3RSZXN1bWVPcGVuIiwicHJvamVjdFJlc3VtZU9wZW5Db25maWd1cmUiLCJwcm9qZWN0UmVzdW1lQ29uZmlnQ2hhbmdlIiwicHJvamVjdFJlc3VtZUdlbmVyYXRlIiwicHJvamVjdFJlc3VtZUNsb3NlIiwicHJvamVjdFJlc3VtZUV4cGFuZCIsInByb2plY3RSZXN1bWVCYWNrVGVtcGxhdGVzIiwicHJvamVjdFJlc3VtZUZlZWRiYWNrIiwicHJvamVjdFJlc3VtZUNvcHkiLCJwcm9qZWN0UmVzdW1lR2VuZXJhdGlvbkNvbXBsZXRlIiwiQ0hBVF9BSV9FVkVOVFMiLCJwbUFpT3BlbiIsInBtQWlGcmVxdWVudFF1ZXN0aW9uIiwicG1BaVR5cGVkVGV4dCIsInBtQWlTZW5kUXVlc3Rpb24iLCJwbUFpT3BlbkNoYXRIaXN0b3J5IiwicG1BaU5ld0NvbnZlcnNhdGlvbiIsInBtQWlPcGVuQ29udmVyc2F0aW9uIiwicG1BaU9wZW5NZW51IiwicG1BaU1lbnVEZWxldGUiLCJwbUFpTWVudUVkaXQiLCJwbUFpQmFja0J1dHRvbiIsImFpQ2hhdEZhcSIsImFpQ2hhdFNlbmQiLCJhaUNoYXRSZXNwb25zZSIsImFpQ2hhdE9wZW5BZ2VudFNlbGVjdCIsImFpQ2hhdEFnZW50U2VsZWN0IiwiYWlDaGF0U2VhcmNoQ29udGV4dE9wZW4iLCJhaUNoYXRTZWFyY2hDb250ZXh0U2VsZWN0UmVzdWx0IiwiYWlDaGF0TWVudGlvbk9wZW4iLCJhaUNoYXRNZW50aW9uVHlwZVN3aXRjaCIsImFpQ2hhdE1lbnRpb25TZWxlY3QiLCJhaUNoYXRNZW50aW9uU2VuZCIsImFpQ2hhdE1lbnRpb25SZW1vdmUiLCJhaUNoYXRCcmVhZGNydW1iQ2hhbmdlIiwiYWlDaGF0RmF2b3JpdGUiLCJhaUNoYXRUb29scyIsImFpQ2hhdFBsdXNPcGVuIiwiYWlDaGF0U3RvcFJlc3BvbnNlIiwiYWlDaGF0U2VsZWN0RkFRIiwiYWlDaGF0SGl0bCIsImFpQ2hhdEhpdGxPcHRpb24iLCJhaUNoYXRNcE9wZW4iLCJhaUNoYXRNcFNlbGVjdEFnZW50IiwiYWlDaGF0U3VnZ2VzdGVkQW5zd2VyIiwiYWlDaGF0T3BlblZpZXdPcHRpb25zIiwiYWlDaGF0U2VsZWN0Vmlld09wdGlvbnMiLCJhaUNoYXREcmFnZ2FibGUiLCJBQk1fQUdFTlRfRVZFTlRTIiwib3Blbk1vZGFsIiwiY2FuY2VsTW9kYWwiLCJ0YWJTZWN0aW9uIiwiYWRkRmlsZSIsImNvbmZpcm1BY3Rpb24iLCJhY2Nlc3NpYmlsaXR5VHlwZSIsImFjY2Vzc2liaWxpdHlTZWxlY3RDbGllbnQiLCJzZWxlY3RNb2RlbCIsImNob29zZU1vZGVsIiwiRVZFTlRTIiwiX29iamVjdFNwcmVhZCIsInVzZUV2ZW50IiwiX3VzZVVzZXIiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwidXNlcklkIiwiaWQiLCJ0cmlnZ2VyRXZlbnQiLCJldmVudE5hbWUiLCJhcmdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgZGlzcGF0Y2hBbXBsaXR1ZGUgZnJvbSAnQHByb2plY3Rjb3IvY29yLWNvbW1vbnMvbGliL3V0aWxzL2Rpc3BhdGNoQW1wbGl0dWRlJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmNvbnN0IFBST0pFQ1RfUkVTVU1FX0VWRU5UUyA9IHtcbiAgcHJvamVjdFJlc3VtZU9wZW46ICdQUk9KRUNUX1JFU1VNRV9PUEVOJyxcbiAgcHJvamVjdFJlc3VtZU9wZW5Db25maWd1cmU6ICdQUk9KRUNUX1JFU1VNRV9PUEVOX0NPTkZJR1VSRScsXG4gIHByb2plY3RSZXN1bWVDb25maWdDaGFuZ2U6ICdQUk9KRUNUX1JFU1VNRV9DT05GSUdfQ0hBTkdFJyxcbiAgcHJvamVjdFJlc3VtZUdlbmVyYXRlOiAnUFJPSkVDVF9SRVNVTUVfR0VORVJBVEUnLFxuICBwcm9qZWN0UmVzdW1lQ2xvc2U6ICdQUk9KRUNUX1JFU1VNRV9DTE9TRScsXG4gIHByb2plY3RSZXN1bWVFeHBhbmQ6ICdQUk9KRUNUX1JFU1VNRV9FWFBBTkQnLFxuICBwcm9qZWN0UmVzdW1lQmFja1RlbXBsYXRlczogJ1BST0pFQ1RfUkVTVU1FX0JBQ0tfVEVNUExBVEVTJyxcbiAgcHJvamVjdFJlc3VtZUZlZWRiYWNrOiAnUFJPSkVDVF9SRVNVTUVfRkVFREJBQ0snLFxuICBwcm9qZWN0UmVzdW1lQ29weTogJ1BST0pFQ1RfUkVTVU1FX0NPUFknLFxuICBwcm9qZWN0UmVzdW1lR2VuZXJhdGlvbkNvbXBsZXRlOiAnUFJPSkVDVF9SRVNVTUVfR0VORVJBVElPTl9DT01QTEVURScsXG59XG5cbmNvbnN0IENIQVRfQUlfRVZFTlRTID0ge1xuICBwbUFpT3BlbjogJ1BNX0FJX09QRU4nLFxuICBwbUFpRnJlcXVlbnRRdWVzdGlvbjogJ1BNX0FJX0ZSRVFVRU5UX1FVRVNUSU9OJyxcbiAgcG1BaVR5cGVkVGV4dDogJ0FJX0NIQVRfVFlQRUQnLFxuICBwbUFpU2VuZFF1ZXN0aW9uOiAnUE1fQUlfU0VORF9RVUVTVElPTicsXG4gIHBtQWlPcGVuQ2hhdEhpc3Rvcnk6ICdQTV9BSV9PUEVOX0NIQVRfSElTVE9SWScsXG4gIHBtQWlOZXdDb252ZXJzYXRpb246ICdQTV9BSV9ORVdfQ09OVkVSU0FUSU9OJyxcbiAgcG1BaU9wZW5Db252ZXJzYXRpb246ICdQTV9BSV9PUEVOX0NPTlZFUlNBVElPTicsXG4gIHBtQWlPcGVuTWVudTogJ1BNX0FJX09QRU5fTUVOVScsXG4gIHBtQWlNZW51RGVsZXRlOiAnUE1fQUlfTUVOVV9ERUxFVEUnLFxuICBwbUFpTWVudUVkaXQ6ICdQTV9BSV9NRU5VX0VESVQnLFxuICBwbUFpQmFja0J1dHRvbjogJ1BNX0FJX0JBQ0tfQlVUVE9OJyxcbiAgYWlDaGF0RmFxOiAnQUlfQ0hBVF9GQVEnLFxuICBhaUNoYXRTZW5kOiAnQUlfQ0hBVF9TRU5EJyxcbiAgYWlDaGF0UmVzcG9uc2U6ICdBSV9DSEFUX1JFU1BPTlNFJyxcbiAgYWlDaGF0T3BlbkFnZW50U2VsZWN0OiAnQUlfQ0hBVF9PUEVOX0FHRU5URV9TRUxFQ1QnLFxuICBhaUNoYXRBZ2VudFNlbGVjdDogJ0FJX0NIQVRfQUdFTlRFX1NFTEVDVEVEJyxcbiAgYWlDaGF0U2VhcmNoQ29udGV4dE9wZW46ICdBSV9DSEFUX1NFQVJDSF9DT05URVhUX09QRU4nLFxuICBhaUNoYXRTZWFyY2hDb250ZXh0U2VsZWN0UmVzdWx0OiAnQUlfQ0hBVF9TRUFSQ0hfQ09OVEVYVF9TRUxFQ1RfUkVTVUxUJyxcbiAgYWlDaGF0TWVudGlvbk9wZW46ICdBSV9DSEFUX01FTlRJT05fT1BFTicsXG4gIGFpQ2hhdE1lbnRpb25UeXBlU3dpdGNoOiAnQUlfQ0hBVF9NRU5USU9OX1RZUEVfU1dJVENIJyxcbiAgYWlDaGF0TWVudGlvblNlbGVjdDogJ0FJX0NIQVRfTUVOVElPTl9TRUxFQ1QnLFxuICBhaUNoYXRNZW50aW9uU2VuZDogJ0FJX0NIQVRfTUVOVElPTl9TRU5EJyxcbiAgYWlDaGF0TWVudGlvblJlbW92ZTogJ0FJX0NIQVRfTUVOVElPTl9SRU1PVkUnLFxuICBhaUNoYXRCcmVhZGNydW1iQ2hhbmdlOiAnQUlfQ0hBVF9CUkVBRENSVU1CX0NIQU5HRScsXG4gIGFpQ2hhdEZhdm9yaXRlOiAnQUlfQ0hBVF9GQVZPUklURScsXG4gIGFpQ2hhdFRvb2xzOiAnQUlfQ0hBVF9UT09MUycsXG4gIGFpQ2hhdFBsdXNPcGVuOiAnQUlfQ0hBVF9QTFVTX09QRU4nLFxuICBhaUNoYXRTdG9wUmVzcG9uc2U6ICdBSV9DSEFUX1NUT1BfUkVTUE9OU0UnLFxuICBhaUNoYXRTZWxlY3RGQVE6ICdBSV9DSEFUX1NFTEVDVF9GQVEnLFxuICBhaUNoYXRIaXRsOiAnQUlfQ0hBVF9ISVRMJyxcbiAgYWlDaGF0SGl0bE9wdGlvbjogJ0FJX0NIQVRfSElUTF9PUFRJT04nLFxuICBhaUNoYXRNcE9wZW46ICdBSV9DSEFUX01QX09QRU4nLFxuICBhaUNoYXRNcFNlbGVjdEFnZW50OiAnQUlfQ0hBVF9NUF9TRUxFQ1RfQUdFTlQnLFxuICBhaUNoYXRTdWdnZXN0ZWRBbnN3ZXI6ICdBSV9DSEFUX1NVR0dFU1RFRF9BTlNXRVInLFxuICBhaUNoYXRPcGVuVmlld09wdGlvbnM6ICdBSV9DSEFUX09QRU5fVklFV19PUFRJT05TJyxcbiAgYWlDaGF0U2VsZWN0Vmlld09wdGlvbnM6ICdBSV9DSEFUX1NFTEVDVF9WSUVXX09QVElPTlMnLFxuICBhaUNoYXREcmFnZ2FibGU6ICdBSV9DSEFUX0RSQUdHQUJMRScsXG59XG5cbmNvbnN0IEFCTV9BR0VOVF9FVkVOVFMgPSB7XG4gIG9wZW5Nb2RhbDogJ0FJX0NIQVRfQUJNX0FDQ0VTUycsXG4gIGNhbmNlbE1vZGFsOiAnQUlfQ0hBVF9BQk1fQ0FOQ0VMJyxcbiAgdGFiU2VjdGlvbjogJ0FJX0NIQVRfQUJNX1NFQ1RJT04nLFxuICBhZGRGaWxlOiAnQUlfQ0hBVF9BQk1fU0VDVElPTicsXG4gIGNvbmZpcm1BY3Rpb246ICdBSV9DSEFUX0FCTV9DT05GSVJNJyxcbiAgZGVsZXRlOiAnQUlfQ0hBVF9BQk1fREVMRVRFX0FHRU5UJyxcbiAgYWNjZXNzaWJpbGl0eVR5cGU6ICdBSV9DSEFUX0FCTV9BQ0NFU1NJQklMSVRZX1RZUEUnLFxuICBhY2Nlc3NpYmlsaXR5U2VsZWN0Q2xpZW50OiAnQUlfQ0hBVF9BQk1fQUNDRVNTSUJJTElUWV9TRUxFQ1RfQ0xJRU5UJyxcbiAgc2VsZWN0TW9kZWw6ICdBSV9DSEFUX0FCTV9TRUxFQ1RfTU9ERUwnLFxuICBjaG9vc2VNb2RlbDogJ0FJX0NIQVRfQUJNX0NIT09TRV9NT0RFTCcsXG59XG5leHBvcnQgY29uc3QgRVZFTlRTID0ge1xuICAuLi5QUk9KRUNUX1JFU1VNRV9FVkVOVFMsXG4gIC4uLkNIQVRfQUlfRVZFTlRTLFxuICAuLi5BQk1fQUdFTlRfRVZFTlRTLFxufVxuXG5leHBvcnQgdHlwZSBFdmVudE5hbWUgPSAodHlwZW9mIEVWRU5UUylba2V5b2YgdHlwZW9mIEVWRU5UU11cblxuZXhwb3J0IGNvbnN0IHVzZUV2ZW50ID0gKCkgPT4ge1xuICBjb25zdCB7IGNvbXBhbnlfaWQ6IGNvbXBhbnlJZCwgaWQ6IHVzZXJJZCB9ID0gdXNlVXNlcigpXG5cbiAgY29uc3QgdHJpZ2dlckV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgPEV2ZW50QXJncz4oZXZlbnROYW1lOiBFdmVudE5hbWUsIGFyZ3M/OiBFdmVudEFyZ3MpID0+IHtcbiAgICAgIGRpc3BhdGNoQW1wbGl0dWRlKGV2ZW50TmFtZSwgY29tcGFueUlkLCB7XG4gICAgICAgIGNvbXBhbnlJZCxcbiAgICAgICAgdXNlcklkLFxuICAgICAgICAuLi5hcmdzLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjb21wYW55SWQsIHVzZXJJZF1cbiAgKVxuXG4gIHJldHVybiB0cmlnZ2VyRXZlbnRcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBU0EsV0FBVyxRQUFRLE9BQU87QUFDbkMsT0FBT0MsaUJBQWlCLE1BQU0scURBQXFEO0FBQ25GLFNBQVNDLE9BQU8sUUFBUSxxQkFBcUI7QUFFN0MsSUFBTUMscUJBQXFCLEdBQUc7RUFDNUJDLGlCQUFpQixFQUFFLHFCQUFxQjtFQUN4Q0MsMEJBQTBCLEVBQUUsK0JBQStCO0VBQzNEQyx5QkFBeUIsRUFBRSw4QkFBOEI7RUFDekRDLHFCQUFxQixFQUFFLHlCQUF5QjtFQUNoREMsa0JBQWtCLEVBQUUsc0JBQXNCO0VBQzFDQyxtQkFBbUIsRUFBRSx1QkFBdUI7RUFDNUNDLDBCQUEwQixFQUFFLCtCQUErQjtFQUMzREMscUJBQXFCLEVBQUUseUJBQXlCO0VBQ2hEQyxpQkFBaUIsRUFBRSxxQkFBcUI7RUFDeENDLCtCQUErQixFQUFFO0FBQ25DLENBQUM7QUFFRCxJQUFNQyxjQUFjLEdBQUc7RUFDckJDLFFBQVEsRUFBRSxZQUFZO0VBQ3RCQyxvQkFBb0IsRUFBRSx5QkFBeUI7RUFDL0NDLGFBQWEsRUFB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
@@ -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,334 @@
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
+ hideRecentsLabel = _useEntitySearch.hideRecentsLabel,
115
+ hasMore = _useEntitySearch.hasMore,
116
+ isLoadingMore = _useEntitySearch.isLoadingMore,
117
+ loadMore = _useEntitySearch.loadMore,
118
+ searchValue = _useEntitySearch.searchValue,
119
+ updateSearchValue = _useEntitySearch.updateSearchValue;
120
+ useEffect(function () {
121
+ if (!allowedTypes.includes(activeType)) {
122
+ setActiveType(defaultType);
123
+ }
124
+ }, [allowedTypes, activeType, defaultType]);
125
+ var positionPopover = useCallback(function () {
126
+ var _popoverAnchorRef$cur, _editorRef$current$ge, _editorRef$current, _editorRef$current$ge2;
127
+ var fromAnchor = popoverAnchorRef === null || popoverAnchorRef === void 0 || (_popoverAnchorRef$cur = popoverAnchorRef.current) === null || _popoverAnchorRef$cur === void 0 ? void 0 : _popoverAnchorRef$cur.getBoundingClientRect();
128
+ 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;
129
+ var rect = fromAnchor !== null && fromAnchor !== void 0 ? fromAnchor : fromEditor;
130
+ if (!rect || rect.width <= 0) {
131
+ var caret = getCaretRect();
132
+ if (!caret) return;
133
+ var _viewportH = window.innerHeight;
134
+ var _viewportW = window.innerWidth;
135
+ var fallbackW = 320;
136
+ var _left = Math.max(8, Math.min(_viewportW - fallbackW - 8, caret.left));
137
+ setPopoverPos({
138
+ width: fallbackW,
139
+ left: _left,
140
+ bottom: _viewportH - caret.top + 4
141
+ });
142
+ return;
143
+ }
144
+ var viewportW = window.innerWidth;
145
+ var viewportH = window.innerHeight;
146
+ var width = rect.width;
147
+ var left = Math.max(8, Math.min(viewportW - width - 8, rect.left));
148
+ /** Popover siempre arriba del input: borde inferior del popover ~4px sobre el borde superior del ancla. */
149
+ setPopoverPos({
150
+ width: width,
151
+ left: left,
152
+ bottom: viewportH - rect.top + 4
153
+ });
154
+ }, [popoverAnchorRef, editorRef, getCaretRect]);
155
+ var resetMentionOpenTracking = useCallback(function () {
156
+ hasEmittedOpen.current = false;
157
+ }, []);
158
+ var close = useCallback(function () {
159
+ setPopoverOpen(false);
160
+ updateSearchValue('');
161
+ }, [updateSearchValue]);
162
+ var handleTrigger = useCallback(function (trigger) {
163
+ if (allowedTypes.length === 0) {
164
+ if (popoverOpen) close();
165
+ return;
166
+ }
167
+ if (trigger.active) {
168
+ // Si hay más `@` que tabs (p. ej. agente proyecto: `@` usuario, `@@` tarea → `@@@`),
169
+ // se usa la última tab y los `@` de más pasan al texto de búsqueda (`@@@` ⇒ tab tarea + query `@`).
170
+ // Con ≥3 tabs (cliente), `@@@` coincide con la 3.er tab (`project`).
171
+ var overflowAtCount = Math.max(0, trigger.atRunLength - allowedTypes.length);
172
+ var effectiveAtRunLength = Math.min(trigger.atRunLength, allowedTypes.length);
173
+ var effectiveQuery = "".concat('@'.repeat(overflowAtCount)).concat(trigger.query);
174
+ var typeFromAt = getTypeFromTriggerSequence(effectiveAtRunLength, allowedTypes, defaultType);
175
+ if (!popoverOpen) {
176
+ setPopoverOpen(true);
177
+ setActiveType(typeFromAt);
178
+ positionPopover();
179
+ if (!hasEmittedOpen.current) {
180
+ event(EVENTS.aiChatMentionOpen, {
181
+ type: typeFromAt
182
+ });
183
+ hasEmittedOpen.current = true;
184
+ }
185
+ } else {
186
+ setActiveType(typeFromAt);
187
+ positionPopover();
188
+ }
189
+ updateSearchValue(effectiveQuery);
190
+ } else if (popoverOpen) {
191
+ close();
192
+ }
193
+ }, [allowedTypes, defaultType, popoverOpen, positionPopover, updateSearchValue, event, close]);
194
+ var insertSelectedItem = useCallback(function (item) {
195
+ var _item$raw$clientId, _item$raw$clientName, _item$raw$projectName, _item$raw$feeId, _item$raw$fatherId, _item$raw$fatherTitle, _item$raw$totalProyec, _item$raw$name, _item$raw$picture, _item$raw$positionNam, _item$raw$email, _editorRef$current2;
196
+ var mention = {
197
+ id: item.id,
198
+ type: item.type,
199
+ label: item.primary,
200
+ metadata: {
201
+ clientId: (_item$raw$clientId = item.raw.clientId) !== null && _item$raw$clientId !== void 0 ? _item$raw$clientId : null,
202
+ clientName: (_item$raw$clientName = item.raw.clientName) !== null && _item$raw$clientName !== void 0 ? _item$raw$clientName : null,
203
+ projectName: (_item$raw$projectName = item.raw.projectName) !== null && _item$raw$projectName !== void 0 ? _item$raw$projectName : null,
204
+ feeId: (_item$raw$feeId = item.raw.feeId) !== null && _item$raw$feeId !== void 0 ? _item$raw$feeId : null,
205
+ fatherId: (_item$raw$fatherId = item.raw.fatherId) !== null && _item$raw$fatherId !== void 0 ? _item$raw$fatherId : null,
206
+ fatherTitle: (_item$raw$fatherTitle = item.raw.fatherTitle) !== null && _item$raw$fatherTitle !== void 0 ? _item$raw$fatherTitle : null,
207
+ totalProyectos: (_item$raw$totalProyec = item.raw.totalProyectos) !== null && _item$raw$totalProyec !== void 0 ? _item$raw$totalProyec : null,
208
+ name: (_item$raw$name = item.raw.name) !== null && _item$raw$name !== void 0 ? _item$raw$name : null,
209
+ picture: (_item$raw$picture = item.raw.picture) !== null && _item$raw$picture !== void 0 ? _item$raw$picture : null,
210
+ positionName: (_item$raw$positionNam = item.raw.positionName) !== null && _item$raw$positionNam !== void 0 ? _item$raw$positionNam : null,
211
+ email: (_item$raw$email = item.raw.email) !== null && _item$raw$email !== void 0 ? _item$raw$email : null
212
+ }
213
+ };
214
+ (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.insertMention(mention);
215
+ onMentionAdded === null || onMentionAdded === void 0 || onMentionAdded(mention);
216
+ event(EVENTS.aiChatMentionSelect, {
217
+ type: mention.type,
218
+ id: String(mention.id)
219
+ });
220
+ close();
221
+ }, [editorRef, onMentionAdded, event, close]);
222
+ var handleTypeChange = useCallback(function (type) {
223
+ var _editorRef$current3;
224
+ setActiveType(type);
225
+ var nextRunLength = getTriggerSequenceFromType(type, allowedTypes);
226
+ (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.syncTriggerAtRunLength(nextRunLength);
227
+ event(EVENTS.aiChatMentionTypeSwitch, {
228
+ type: type
229
+ });
230
+ }, [allowedTypes, editorRef, event]);
231
+ var handleKeyDown = useCallback(function (e) {
232
+ if (!popoverOpen || allowedTypes.length === 0) return false;
233
+ if (e.key === 'Escape') {
234
+ e.preventDefault();
235
+ close();
236
+ return true;
237
+ }
238
+ if ((e.key === 'ArrowRight' || e.key === 'ArrowLeft') && (e.metaKey || e.altKey)) {
239
+ e.preventDefault();
240
+ var idx = allowedTypes.indexOf(activeType);
241
+ var delta = e.key === 'ArrowRight' ? 1 : -1;
242
+ var nextIdx = (idx + delta + allowedTypes.length) % allowedTypes.length;
243
+ handleTypeChange(allowedTypes[nextIdx]);
244
+ return true;
245
+ }
246
+ if (items.length === 0) return false;
247
+ if (e.key === 'ArrowDown') {
248
+ e.preventDefault();
249
+ setActiveIndex(function (prev) {
250
+ return (prev + 1) % items.length;
251
+ });
252
+ return true;
253
+ }
254
+ if (e.key === 'ArrowUp') {
255
+ e.preventDefault();
256
+ setActiveIndex(function (prev) {
257
+ return (prev - 1 + items.length) % items.length;
258
+ });
259
+ return true;
260
+ }
261
+ if (e.key === 'Enter' || e.key === 'Tab') {
262
+ e.preventDefault();
263
+ insertSelectedItem(items[activeIndex]);
264
+ return true;
265
+ }
266
+ return false;
267
+ }, [popoverOpen, items, allowedTypes, activeType, activeIndex, insertSelectedItem, close, handleTypeChange]);
268
+ useEffect(function () {
269
+ if (!popoverOpen) return undefined;
270
+ var handler = function handler() {
271
+ return positionPopover();
272
+ };
273
+ window.addEventListener('scroll', handler, true);
274
+ window.addEventListener('resize', handler);
275
+ return function () {
276
+ window.removeEventListener('scroll', handler, true);
277
+ window.removeEventListener('resize', handler);
278
+ };
279
+ }, [popoverOpen, positionPopover]);
280
+ useEffect(function () {
281
+ if (!popoverOpen) return undefined;
282
+ var handlePointerDownOutside = function handlePointerDownOutside(mouseEvent) {
283
+ var _popoverRef$current;
284
+ var target = mouseEvent.target;
285
+ if (!target) return;
286
+ if ((_popoverRef$current = popoverRef.current) !== null && _popoverRef$current !== void 0 && _popoverRef$current.contains(target)) return;
287
+ close();
288
+ };
289
+ document.addEventListener('mousedown', handlePointerDownOutside);
290
+ return function () {
291
+ return document.removeEventListener('mousedown', handlePointerDownOutside);
292
+ };
293
+ }, [popoverOpen, close]);
294
+ useEffect(function () {
295
+ setActiveIndex(0);
296
+ }, [items.length, activeType]);
297
+ var popoverNode = useMemo(function () {
298
+ if (!popoverOpen) return null;
299
+ return /*#__PURE__*/_jsx(SCMPAnchor, {
300
+ $bottom: popoverPos.bottom,
301
+ $left: popoverPos.left,
302
+ $width: popoverPos.width,
303
+ children: /*#__PURE__*/_jsx(ContextMentionPopover, {
304
+ ref: popoverRef,
305
+ allowedTypes: allowedTypes,
306
+ activeType: activeType,
307
+ onTypeChange: handleTypeChange,
308
+ items: items,
309
+ loading: loading,
310
+ error: error,
311
+ hideRecentsLabel: hideRecentsLabel,
312
+ hasMore: hasMore,
313
+ isLoadingMore: isLoadingMore,
314
+ onReachListEnd: loadMore,
315
+ searchValue: searchValue,
316
+ keyboardHint: t('contextMention.keyboardHint', {
317
+ defaultValue: 'Navegación entre pestañas: @, @@, @@@… en orden. También Alt/Cmd + ←/→'
318
+ }),
319
+ onItemSelected: insertSelectedItem,
320
+ activeIndex: activeIndex,
321
+ onActiveIndexChange: setActiveIndex
322
+ })
323
+ });
324
+ }, [popoverOpen, popoverPos, allowedTypes, activeType, handleTypeChange, items, loading, error, hideRecentsLabel, hasMore, isLoadingMore, loadMore, searchValue, insertSelectedItem, activeIndex]);
325
+ return {
326
+ popoverOpen: popoverOpen,
327
+ resetMentionOpenTracking: resetMentionOpenTracking,
328
+ handleTrigger: handleTrigger,
329
+ handleKeyDown: handleKeyDown,
330
+ popoverNode: popoverNode,
331
+ close: close
332
+ };
333
+ };
334
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIlNDTVBBbmNob3IiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlVCIsInVzZUVudGl0eVNlYXJjaCIsInVzZU1lbnRpb25BbGxvd2VkVHlwZXMiLCJ1c2VDYXJldFBvc2l0aW9uIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJqc3giLCJfanN4IiwiVFlQRV9UT19UUklHR0VSX1NFUVVFTkNFIiwidXNlciIsInRhc2siLCJwcm9qZWN0IiwiZ2V0VHlwZUZyb21UcmlnZ2VyU2VxdWVuY2UiLCJhdFJ1bkxlbmd0aCIsImFsbG93ZWRUeXBlcyIsImRlZmF1bHRUeXBlIiwiX09iamVjdCRlbnRyaWVzJGZpbmQkIiwiX09iamVjdCRlbnRyaWVzJGZpbmQiLCJfYWxsb3dlZFR5cGVzJHRhYklkeCIsIm5vcm1hbGl6ZWQiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJtYXBwZWRUeXBlIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbmQiLCJfcmVmIiwiX3JlZjIiLCJfc2xpY2VkVG9BcnJheSIsImxlbiIsImluY2x1ZGVzIiwidGFiSWR4IiwibWluIiwibGVuZ3RoIiwiZ2V0VHJpZ2dlclNlcXVlbmNlRnJvbVR5cGUiLCJ0eXBlIiwibWFwcGVkIiwiaWR4IiwiaW5kZXhPZiIsInVzZURlcml2ZWRTY29wZSIsIl9yZWYzIiwiX2N0eCRjbGllbnQkaWQiLCJfY3R4JGNsaWVudCIsIl9jdHgkZW50aXR5VmFsdWVzIiwiX3JlZjQiLCJfcmVmNSIsIl9jdHgkcHJvamVjdCRpZCIsIl9jdHgkcHJvamVjdCIsIl9jdHgkZW50aXR5VmFsdWVzMiIsIl9jdHgkY2hpcHNQcm9qZWN0IiwiX2N0eCRhZ2VudCRlbnRpdHkiLCJfY3R4JGFnZW50IiwiX2N0eCRhZ2VudCRjb25uZWN0b3JzIiwiX2N0eCRhZ2VudDIiLCJjdHgiLCJjbGllbnRJZCIsImNsaWVudCIsImlkIiwiZW50aXR5VmFsdWVzIiwicHJvamVjdElkIiwiY2hpcHNQcm9qZWN0IiwiYWdlbnRFbnRpdHkiLCJhZ2VudCIsImVudGl0eSIsIm1jcFNsdWdzS2V5IiwiY29ubmVjdG9ycyIsImMiLCJncm91cCIsInNsdWdzIiwiam9pbiIsIm1jcFNsdWdzIiwiX2N0eCRhZ2VudCRjb25uZWN0b3JzMiIsIl9jdHgkYWdlbnQzIiwicmF3IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0IiwiZmlsdGVyIiwicyIsInRyaW0iLCJzb3J0IiwidXNlTWVudGlvblBvcG92ZXIiLCJfcmVmNiIsImVkaXRvclJlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJlbmFibGVkVHlwZXMiLCJvbk1lbnRpb25BZGRlZCIsIl91c2VUIiwidCIsImV2ZW50IiwiX3VzZU1lbnRpb25BbGxvd2VkVHlwIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZVR5cGUiLCJzZXRBY3RpdmVUeXBlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwb3BvdmVyT3BlbiIsInNldFBvcG92ZXJPcGVuIiwiX3VzZVN0YXRlNSIsImJvdHRvbSIsImxlZnQiLCJ3aWR0aCIsIl91c2VTdGF0ZTYiLCJwb3BvdmVyUG9zIiwic2V0UG9wb3ZlclBvcyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiYWN0aXZlSW5kZXgiLCJzZXRBY3RpdmVJbmRleCIsImhhc0VtaXR0ZWRPcGVuIiwicG9wb3ZlclJlZiIsImdldENhcmV0UmVjdCIsInNjb3BlIiwiX3VzZUVudGl0eVNlYXJjaCIsIml0ZW1zIiwibG9hZGluZyIsImVycm9yIiwiaGlkZVJlY2VudHNMYWJlbCIsImhhc01vcmUiLCJpc0xvYWRpbmdNb3JlIiwibG9hZE1vcmUiLCJzZWFyY2hWYWx1ZSIsInVwZGF0ZVNlYXJjaFZhbHVlIiwicG9zaXRpb25Qb3BvdmVyIiwiX3BvcG92ZXJBbmNob3JSZWYkY3VyIiwiX2VkaXRvclJlZiRjdXJyZW50JGdlIiwiX2VkaXRvclJlZiRjdXJyZW50IiwiX2VkaXRvclJlZiRjdXJyZW50JGdlMiIsImZyb21BbmNob3IiLCJjdXJyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZnJvbUVkaXRvciIsImdldEVkaXRvckNsaWVudFJlY3QiLCJjYWxsIiwicmVjdCIsImNhcmV0Iiwidmlld3BvcnRIIiwid2luZG93IiwiaW5uZXJIZWlnaHQiLCJ2aWV3cG9ydFciLCJpbm5lcldpZHRoIiwiZmFsbGJhY2tXIiwidG9wIiwicmVzZXRNZW50aW9uT3BlblRyYWNraW5nIiwiY2xvc2UiLCJoYW5kbGVUcmlnZ2VyIiwidHJpZ2dlciIsImFjdGl2ZSIsIm92ZXJmbG93QXRDb3VudCIsImVmZmVjdGl2ZUF0UnVuTGVuZ3RoIiwiZWZmZWN0aXZlUXVlcnkiLCJjb25jYXQiLCJyZXBlYXQiLCJxdWVyeSIsInR5cGVGcm9tQXQiLCJhaUNoYXRNZW50aW9uT3BlbiIsImluc2VydFNlbGVjdGVkSXRlbSIsIml0ZW0iLCJfaXRlbSRyYXckY2xpZW50SWQiLCJfaXRlbSRyYXckY2xpZW50TmFtZSIsIl9pdGVtJHJhdyRwcm9qZWN0TmFtZSIsIl9pdGVtJHJhdyRmZWVJZCIsIl9pdGVtJHJhdyRmYXRoZXJJZCIsIl9pdGVtJHJhdyRmYXRoZXJUaXRsZSIsIl9pdGVtJHJhdyR0b3RhbFByb3llYyIsIl9pdGVtJHJhdyRuYW1lIiwiX2l0ZW0kcmF3JHBpY3R1cmUiLCJfaXRlbSRyYXckcG9zaXRpb25OYW0iLCJfaXRlbSRyYXckZW1haWwiLCJfZWRpdG9yUmVmJGN1cnJlbnQyIiwibWVudGlvbiIsImxhYmVsIiwicHJpbWFyeSIsIm1ldGFkYXRhIiwiY2xpZW50TmFtZSIsInByb2plY3ROYW1lIiwiZmVlSWQiLCJmYXRoZXJJZCIsImZhdGhlclRpdGxlIiwidG90YWxQcm95ZWN0b3MiLCJuYW1lIiwicGljdHVyZSIsInBvc2l0aW9uTmFtZSIsImVtYWlsIiwiaW5zZXJ0TWVudGlvbiIsImFpQ2hhdE1lbnRpb25TZWxlY3QiLCJTdHJpbmciLCJoYW5kbGVUeXBlQ2hhbmdlIiwiX2VkaXRvclJlZiRjdXJyZW50MyIsIm5leHRSdW5MZW5ndGgiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwiYWlDaGF0TWVudGlvblR5cGVTd2l0Y2giLCJoYW5kbGVLZXlEb3duIiwiZSIsImtleSIsInByZXZlbnREZWZhdWx0IiwibWV0YUtleSIsImFsdEtleSIsImRlbHRhIiwibmV4dElkeCIsInByZXYiLCJ1bmRlZmluZWQiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVQb2ludGVyRG93bk91dHNpZGUiLCJtb3VzZUV2ZW50IiwiX3BvcG92ZXJSZWYkY3VycmVudCIsInRhcmdldCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJwb3BvdmVyTm9kZSIsIiRib3R0b20iLCIkbGVmdCIsIiR3aWR0aCIsImNoaWxkcmVuIiwicmVmIiwib25UeXBlQ2hhbmdlIiwib25SZWFjaExpc3RFbmQiLCJrZXlib2FyZEhpbnQiLCJkZWZhdWx0VmFsdWUiLCJvbkl0ZW1TZWxlY3RlZCIsIm9uQWN0aXZlSW5kZXhDaGFuZ2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlTWVudGlvblBvcG92ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleWJvYXJkRXZlbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3InXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvblBvcG92ZXIsIFNDTVBBbmNob3IgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4vdXNlVCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IEVudGl0eVNlYXJjaFNjb3BlLCB1c2VFbnRpdHlTZWFyY2ggfSBmcm9tICcuL3VzZUVudGl0eVNlYXJjaCdcbmltcG9ydCB7IHVzZU1lbnRpb25BbGxvd2VkVHlwZXMgfSBmcm9tICcuL3VzZU1lbnRpb25BbGxvd2VkVHlwZXMnXG5pbXBvcnQgeyB1c2VDYXJldFBvc2l0aW9uIH0gZnJvbSAnLi91c2VDYXJldFBvc2l0aW9uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4vdXNlRXZlbnQnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uUG9wb3Zlck9wdGlvbnMgPSB7XG4gIGVkaXRvclJlZjogUmVmT2JqZWN0PENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlPlxuICAvKipcbiAgICogTm9kbyBjdXlvIGFuY2hvIHkgYm9yZGUgc3VwZXJpb3IgZGVmaW5lbiBlbCBwb3BvdmVyIChwLiBlai4gd3JhcHBlciBkZWwgaW5wdXQgZW4gTUFJQSkuXG4gICAqIFNpIG5vIHNlIHBhc2EsIHNlIHVzYSBlbCByZWN0IGRlbCBjb250ZW50ZWRpdGFibGUgKGBnZXRFZGl0b3JDbGllbnRSZWN0YCkuXG4gICAqL1xuICBwb3BvdmVyQW5jaG9yUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIE92ZXJyaWRlIGRlbCBzZXQgZGUgdGFicyBwZXJtaXRpZGFzOyBzaSBubyBzZSBwYXNhIHNlIGRlcml2YSBkZWwgYWdlbnQuICovXG4gIGVuYWJsZWRUeXBlcz86IENvbnRleHRFbnRpdHlUeXBlW11cbiAgLyoqIENhbGxiYWNrIGN1YW5kbyBlbCB1c3VhcmlvIGluc2VydGEgdW5hIG1lbnRpb24gdsOtYSBjbGljay90ZWNsYWRvLiAqL1xuICBvbk1lbnRpb25BZGRlZD86IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uUG9wb3ZlclJldHVybiA9IHtcbiAgcG9wb3Zlck9wZW46IGJvb2xlYW5cbiAgLyoqXG4gICAqIFJlaW5pY2lhIGVsIHRyYWNraW5nIGRlIGBBSV9DSEFUX01FTlRJT05fT1BFTmAgKHByaW1lcmEgYXBlcnR1cmEgcG9yIG1lbnNhamUpLlxuICAgKiBMbGFtYXIgdHJhcyBlbnZpYXIgZWwgbWVuc2FqZSBvIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbi5cbiAgICovXG4gIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZzogKCkgPT4gdm9pZFxuICAvKiogUHJvY2VzYSBlbCB0cmlnZ2VyIHByb3ZlbmllbnRlIGRlbCBgQ29udGV4dE1lbnRpb25FZGl0b3Iub25JbnB1dGAuICovXG4gIGhhbmRsZVRyaWdnZXI6ICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgdGVjbGFzIHJlbGF0aXZhcyBhbCBwb3BvdmVyIChuYXZlZ2FjacOzbiwgc2VsZWNjacOzbiwgY2FtYmlvIGRlXG4gICAqIHRhYiB5IGVzY2FwZSkuIERldnVlbHZlIGB0cnVlYCBzaSBjb25zdW1pw7MgbGEga2V5LCBwYXJhIHF1ZSBlbCBjb25zdW1lclxuICAgKiBwdWVkYSBkZWNpZGlyIHNpIHNlZ3VpciBwcm9jZXNhbmRvIG90cmFzIHRlY2xhcyAocC5lai4gRW50ZXIgcGFyYSBlbnZpYXIpLlxuICAgKi9cbiAgaGFuZGxlS2V5RG93bjogKGU6IEtleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiBib29sZWFuXG4gIC8qKiBOb2RvIGRlbCBwb3BvdmVyOyBlbCBjb25zdW1lciBkZWJlIHBvcnRhcmxvIGNvbiBgY3JlYXRlUG9ydGFsYC4gKi9cbiAgcG9wb3Zlck5vZGU6IFJlYWN0Tm9kZSB8IG51bGxcbiAgLyoqIENpZXJyYSBlbCBwb3BvdmVyIHkgbGltcGlhIGVsIHF1ZXJ5LiAqL1xuICBjbG9zZTogKCkgPT4gdm9pZFxufVxuXG5jb25zdCBUWVBFX1RPX1RSSUdHRVJfU0VRVUVOQ0U6IFBhcnRpYWw8UmVjb3JkPENvbnRleHRFbnRpdHlUeXBlLCBudW1iZXI+PiA9IHtcbiAgdXNlcjogMSxcbiAgdGFzazogMixcbiAgcHJvamVjdDogMyxcbn1cblxuY29uc3QgZ2V0VHlwZUZyb21UcmlnZ2VyU2VxdWVuY2UgPSAoXG4gIGF0UnVuTGVuZ3RoOiBudW1iZXIsXG4gIGFsbG93ZWRUeXBlczogQ29udGV4dEVudGl0eVR5cGVbXSxcbiAgZGVmYXVsdFR5cGU6IENvbnRleHRFbnRpdHlUeXBlXG4pOiBDb250ZXh0RW50aXR5VHlwZSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGF0UnVuTGVuZ3RoKSlcbiAgY29uc3QgbWFwcGVkVHlwZSA9IChPYmplY3QuZW50cmllcyhUWVBFX1RPX1RSSUdHRVJfU0VRVUVOQ0UpLmZpbmQoKFssIGxlbl0pID0+IGxlbiA9PT0gbm9ybWFsaXplZCk/LlswXSA/P1xuICAgIG51bGwpIGFzIENvbnRleHRFbnRpdHlUeXBlIHwgbnVsbFxuICBpZiAobWFwcGVkVHlwZSAmJiBhbGxvd2VkVHlwZXMuaW5jbHVkZXMobWFwcGVkVHlwZSkpIHJldHVybiBtYXBwZWRUeXBlXG4gIGNvbnN0IHRhYklkeCA9IE1hdGgubWluKE1hdGgubWF4KDAsIG5vcm1hbGl6ZWQgLSAxKSwgYWxsb3dlZFR5cGVzLmxlbmd0aCAtIDEpXG4gIHJldHVybiBhbGxvd2VkVHlwZXNbdGFiSWR4XSA/PyBkZWZhdWx0VHlwZVxufVxuXG5jb25zdCBnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSA9ICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgYWxsb3dlZFR5cGVzOiBDb250ZXh0RW50aXR5VHlwZVtdKTogbnVtYmVyID0+IHtcbiAgY29uc3QgbWFwcGVkID0gVFlQRV9UT19UUklHR0VSX1NFUVVFTkNFW3R5cGVdXG4gIGlmIChtYXBwZWQpIHJldHVybiBtYXBwZWRcbiAgY29uc3QgaWR4ID0gYWxsb3dlZFR5cGVzLmluZGV4T2YodHlwZSlcbiAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgMSA6IDFcbn1cblxuLyoqXG4gKiBEZXJpdmEgY2xpZW50SWQsIHByb2plY3RJZCwgYWdlbnRFbnRpdHkgeSBNQ1AgZGVzZGUgZWwgY29udGV4dG8gZ2xvYmFsIChpbmNsLlxuICogYGVudGl0eVZhbHVlc2AgeSBgY2hpcHNQcm9qZWN0YCkgcGFyYSBmaWx0cmFyIHJlY2VudHMgeSBiw7pzcXVlZGEgR3JhcGhRTC5cbiAqL1xuY29uc3QgdXNlRGVyaXZlZFNjb3BlID0gKCk6IEVudGl0eVNlYXJjaFNjb3BlID0+IHtcbiAgY29uc3QgY3R4ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGNsaWVudElkID0gY3R4LmNsaWVudD8uaWQgPz8gY3R4LmVudGl0eVZhbHVlcz8uY2xpZW50SWQgPz8gbnVsbFxuICBjb25zdCBwcm9qZWN0SWQgPSBjdHgucHJvamVjdD8uaWQgPz8gY3R4LmVudGl0eVZhbHVlcz8ucHJvamVjdElkID8/IGN0eC5jaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/PyBudWxsXG4gIGNvbnN0IGFnZW50RW50aXR5ID0gY3R4LmFnZW50Py5lbnRpdHkgPz8gbnVsbFxuICBjb25zdCBtY3BTbHVnc0tleSA9IChjdHguYWdlbnQ/LmNvbm5lY3RvcnM/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnTUNQJyk/LnNsdWdzID8/IFtdKS5qb2luKCd8JylcblxuICBjb25zdCBtY3BTbHVncyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9IGN0eC5hZ2VudD8uY29ubmVjdG9ycz8uZmluZChjID0+IGMuZ3JvdXAgPT09ICdNQ1AnKT8uc2x1Z3MgPz8gW11cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQocmF3LmZpbHRlcigocyk6IHMgaXMgc3RyaW5nID0+IHR5cGVvZiBzID09PSAnc3RyaW5nJyAmJiBzLnRyaW0oKS5sZW5ndGggPiAwKSldLnNvcnQoKVxuICB9LCBbbWNwU2x1Z3NLZXldKVxuXG4gIHJldHVybiB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoeyBjbGllbnRJZCwgcHJvamVjdElkLCBtY3BTbHVncywgYWdlbnRFbnRpdHkgfSksXG4gICAgW2NsaWVudElkLCBwcm9qZWN0SWQsIG1jcFNsdWdzLCBhZ2VudEVudGl0eV1cbiAgKVxufVxuXG4vKipcbiAqIEVuY2Fwc3VsYSBsYSBsw7NnaWNhIGRlbCBwb3BvdmVyIGRlIEAtbWVudGlvbnMgKGVzdGFkbywgZmV0Y2ggcG9yIHRhYiwgYW5hbHl0aWNzLFxuICogcG9zaWNpb25hbWllbnRvKS4gRWwgY29uc3VtZXIgbWFudGllbmUgZWwgZWRpdG9yIHkgZWwgZW52w61vIGRlbCBtZW5zYWplLlxuICogTG9zIGZpbHRyb3MgZGUgYsO6c3F1ZWRhIHVzYW4gYHVzZURlcml2ZWRTY29wZWA6IGVzcGVjaWFsaXN0YSBwcm95ZWN0byBhY290YSB0YXJlYXNcbiAqIGFsIGBwcm9qZWN0SWRgIGRlbCBjb250ZXh0bzsgZXNwZWNpYWxpc3RhIGNsaWVudGUsIHByb3llY3RvcyBhbCBgY2xpZW50SWRgIChlbiBgZXh0cmFgIGRlIHNlYXJjaCkuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VNZW50aW9uUG9wb3ZlciA9ICh7XG4gIGVkaXRvclJlZixcbiAgcG9wb3ZlckFuY2hvclJlZixcbiAgZW5hYmxlZFR5cGVzLFxuICBvbk1lbnRpb25BZGRlZCxcbn06IFVzZU1lbnRpb25Qb3BvdmVyT3B0aW9ucyk6IFVzZU1lbnRpb25Qb3BvdmVyUmV0dXJuID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgYWxsb3dlZFR5cGVzLCBkZWZhdWx0VHlwZSB9ID0gdXNlTWVudGlvbkFsbG93ZWRUeXBlcyhlbmFibGVkVHlwZXMpXG4gIGNvbnN0IFthY3RpdmVUeXBlLCBzZXRBY3RpdmVUeXBlXSA9IHVzZVN0YXRlPENvbnRleHRFbnRpdHlUeXBlPihkZWZhdWx0VHlwZSlcbiAgY29uc3QgW3BvcG92ZXJPcGVuLCBzZXRQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3BvcG92ZXJQb3MsIHNldFBvcG92ZXJQb3NdID0gdXNlU3RhdGU8eyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0+KHtcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICB3aWR0aDogMCxcbiAgfSlcbiAgY29uc3QgW2FjdGl2ZUluZGV4LCBzZXRBY3RpdmVJbmRleF0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBoYXNFbWl0dGVkT3BlbiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgcG9wb3ZlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGdldENhcmV0UmVjdCA9IHVzZUNhcmV0UG9zaXRpb24oKVxuXG4gIGNvbnN0IHNjb3BlID0gdXNlRGVyaXZlZFNjb3BlKClcbiAgY29uc3QgeyBpdGVtcywgbG9hZGluZywgZXJyb3IsIGhpZGVSZWNlbnRzTGFiZWwsIGhhc01vcmUsIGlzTG9hZGluZ01vcmUsIGxvYWRNb3JlLCBzZWFyY2hWYWx1ZSwgdXBkYXRlU2VhcmNoVmFsdWUgfSA9XG4gICAgdXNlRW50aXR5U2VhcmNoKGFjdGl2ZVR5cGUsIHNjb3BlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoYWN0aXZlVHlwZSkpIHtcbiAgICAgIHNldEFjdGl2ZVR5cGUoZGVmYXVsdFR5cGUpXG4gICAgfVxuICB9LCBbYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBkZWZhdWx0VHlwZV0pXG5cbiAgY29uc3QgcG9zaXRpb25Qb3BvdmVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21BbmNob3IgPSBwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGZyb21FZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudD8uZ2V0RWRpdG9yQ2xpZW50UmVjdD8uKCkgPz8gbnVsbFxuICAgIGNvbnN0IHJlY3QgPSBmcm9tQW5jaG9yID8/IGZyb21FZGl0b3JcbiAgICBpZiAoIXJlY3QgfHwgcmVjdC53aWR0aCA8PSAwKSB7XG4gICAgICBjb25zdCBjYXJldCA9IGdldENhcmV0UmVjdCgpXG4gICAgICBpZiAoIWNhcmV0KSByZXR1cm5cbiAgICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgIGNvbnN0IGZhbGxiYWNrVyA9IDMyMFxuICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDgsIE1hdGgubWluKHZpZXdwb3J0VyAtIGZhbGxiYWNrVyAtIDgsIGNhcmV0LmxlZnQpKVxuICAgICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICAgIHdpZHRoOiBmYWxsYmFja1csXG4gICAgICAgIGxlZnQsXG4gICAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gY2FyZXQudG9wICsgNCxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHsgd2lkdGggfSA9IHJlY3RcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoOCwgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSA4LCByZWN0LmxlZnQpKVxuICAgIC8qKiBQb3BvdmVyIHNpZW1wcmUgYXJyaWJhIGRlbCBpbnB1dDogYm9yZGUgaW5mZXJpb3IgZGVsIHBvcG92ZXIgfjRweCBzb2JyZSBlbCBib3JkZSBzdXBlcmlvciBkZWwgYW5jbGEuICovXG4gICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHJlY3QudG9wICsgNCxcbiAgICB9KVxuICB9LCBbcG9wb3ZlckFuY2hvclJlZiwgZWRpdG9yUmVmLCBnZXRDYXJldFJlY3RdKVxuXG4gIGNvbnN0IHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoYXNFbWl0dGVkT3Blbi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3QgY2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKFxuICAgICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB7XG4gICAgICBpZiAoYWxsb3dlZFR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocG9wb3Zlck9wZW4pIGNsb3NlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0cmlnZ2VyLmFjdGl2ZSkge1xuICAgICAgICAvLyBTaSBoYXkgbcOhcyBgQGAgcXVlIHRhYnMgKHAuIGVqLiBhZ2VudGUgcHJveWVjdG86IGBAYCB1c3VhcmlvLCBgQEBgIHRhcmVhIOKGkiBgQEBAYCksXG4gICAgICAgIC8vIHNlIHVzYSBsYSDDumx0aW1hIHRhYiB5IGxvcyBgQGAgZGUgbcOhcyBwYXNhbiBhbCB0ZXh0byBkZSBiw7pzcXVlZGEgKGBAQEBgIOKHkiB0YWIgdGFyZWEgKyBxdWVyeSBgQGApLlxuICAgICAgICAvLyBDb24g4omlMyB0YWJzIChjbGllbnRlKSwgYEBAQGAgY29pbmNpZGUgY29uIGxhIDMuZXIgdGFiIChgcHJvamVjdGApLlxuICAgICAgICBjb25zdCBvdmVyZmxvd0F0Q291bnQgPSBNYXRoLm1heCgwLCB0cmlnZ2VyLmF0UnVuTGVuZ3RoIC0gYWxsb3dlZFR5cGVzLmxlbmd0aClcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQXRSdW5MZW5ndGggPSBNYXRoLm1pbih0cmlnZ2VyLmF0UnVuTGVuZ3RoLCBhbGxvd2VkVHlwZXMubGVuZ3RoKVxuICAgICAgICBjb25zdCBlZmZlY3RpdmVRdWVyeSA9IGAkeydAJy5yZXBlYXQob3ZlcmZsb3dBdENvdW50KX0ke3RyaWdnZXIucXVlcnl9YFxuICAgICAgICBjb25zdCB0eXBlRnJvbUF0ID0gZ2V0VHlwZUZyb21UcmlnZ2VyU2VxdWVuY2UoZWZmZWN0aXZlQXRSdW5MZW5ndGgsIGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUpXG5cbiAgICAgICAgaWYgKCFwb3BvdmVyT3Blbikge1xuICAgICAgICAgIHNldFBvcG92ZXJPcGVuKHRydWUpXG4gICAgICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlRnJvbUF0KVxuICAgICAgICAgIHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgICAgICAgaWYgKCFoYXNFbWl0dGVkT3Blbi5jdXJyZW50KSB7XG4gICAgICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0TWVudGlvbk9wZW4sIHsgdHlwZTogdHlwZUZyb21BdCB9KVxuICAgICAgICAgICAgaGFzRW1pdHRlZE9wZW4uY3VycmVudCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlRnJvbUF0KVxuICAgICAgICAgIHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2VhcmNoVmFsdWUoZWZmZWN0aXZlUXVlcnkpXG4gICAgICB9IGVsc2UgaWYgKHBvcG92ZXJPcGVuKSB7XG4gICAgICAgIGNsb3NlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthbGxvd2VkVHlwZXMsIGRlZmF1bHRUeXBlLCBwb3BvdmVyT3BlbiwgcG9zaXRpb25Qb3BvdmVyLCB1cGRhdGVTZWFyY2hWYWx1ZSwgZXZlbnQsIGNsb3NlXVxuICApXG5cbiAgY29uc3QgaW5zZXJ0U2VsZWN0ZWRJdGVtID0gdXNlQ2FsbGJhY2soXG4gICAgKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbSkgPT4ge1xuICAgICAgY29uc3QgbWVudGlvbjogQ29udGV4dE1lbnRpb24gPSB7XG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXG4gICAgICAgIGxhYmVsOiBpdGVtLnByaW1hcnksXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgY2xpZW50SWQ6IGl0ZW0ucmF3LmNsaWVudElkID8/IG51bGwsXG4gICAgICAgICAgY2xpZW50TmFtZTogaXRlbS5yYXcuY2xpZW50TmFtZSA/PyBudWxsLFxuICAgICAgICAgIHByb2plY3ROYW1lOiBpdGVtLnJhdy5wcm9qZWN0TmFtZSA/PyBudWxsLFxuICAgICAgICAgIGZlZUlkOiBpdGVtLnJhdy5mZWVJZCA/PyBudWxsLFxuICAgICAgICAgIGZhdGhlcklkOiBpdGVtLnJhdy5mYXRoZXJJZCA/PyBudWxsLFxuICAgICAgICAgIGZhdGhlclRpdGxlOiBpdGVtLnJhdy5mYXRoZXJUaXRsZSA/PyBudWxsLFxuICAgICAgICAgIHRvdGFsUHJveWVjdG9zOiBpdGVtLnJhdy50b3RhbFByb3llY3RvcyA/PyBudWxsLFxuICAgICAgICAgIG5hbWU6IGl0ZW0ucmF3Lm5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBwaWN0dXJlOiBpdGVtLnJhdy5waWN0dXJlID8/IG51bGwsXG4gICAgICAgICAgcG9zaXRpb25OYW1lOiBpdGVtLnJhdy5wb3NpdGlvbk5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBlbWFpbDogaXRlbS5yYXcuZW1haWwgPz8gbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRNZW50aW9uKG1lbnRpb24pXG4gICAgICBvbk1lbnRpb25BZGRlZD8uKG1lbnRpb24pXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0TWVudGlvblNlbGVjdCwgeyB0eXBlOiBtZW50aW9uLnR5cGUsIGlkOiBTdHJpbmcobWVudGlvbi5pZCkgfSlcbiAgICAgIGNsb3NlKClcbiAgICB9LFxuICAgIFtlZGl0b3JSZWYsIG9uTWVudGlvbkFkZGVkLCBldmVudCwgY2xvc2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVUeXBlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHR5cGU6IENvbnRleHRFbnRpdHlUeXBlKSA9PiB7XG4gICAgICBzZXRBY3RpdmVUeXBlKHR5cGUpXG4gICAgICBjb25zdCBuZXh0UnVuTGVuZ3RoID0gZ2V0VHJpZ2dlclNlcXVlbmNlRnJvbVR5cGUodHlwZSwgYWxsb3dlZFR5cGVzKVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgobmV4dFJ1bkxlbmd0aClcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uVHlwZVN3aXRjaCwgeyB0eXBlIH0pXG4gICAgfSxcbiAgICBbYWxsb3dlZFR5cGVzLCBlZGl0b3JSZWYsIGV2ZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKCFwb3BvdmVyT3BlbiB8fCBhbGxvd2VkVHlwZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY2xvc2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdBcnJvd0xlZnQnKSAmJiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5KSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY29uc3QgaWR4ID0gYWxsb3dlZFR5cGVzLmluZGV4T2YoYWN0aXZlVHlwZSlcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmtleSA9PT0gJ0Fycm93UmlnaHQnID8gMSA6IC0xXG4gICAgICAgIGNvbnN0IG5leHRJZHggPSAoaWR4ICsgZGVsdGEgKyBhbGxvd2VkVHlwZXMubGVuZ3RoKSAlIGFsbG93ZWRUeXBlcy5sZW5ndGhcbiAgICAgICAgaGFuZGxlVHlwZUNoYW5nZShhbGxvd2VkVHlwZXNbbmV4dElkeF0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRBY3RpdmVJbmRleChwcmV2ID0+IChwcmV2ICsgMSkgJSBpdGVtcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgc2V0QWN0aXZlSW5kZXgocHJldiA9PiAocHJldiAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnVGFiJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgaW5zZXJ0U2VsZWN0ZWRJdGVtKGl0ZW1zW2FjdGl2ZUluZGV4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW3BvcG92ZXJPcGVuLCBpdGVtcywgYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBhY3RpdmVJbmRleCwgaW5zZXJ0U2VsZWN0ZWRJdGVtLCBjbG9zZSwgaGFuZGxlVHlwZUNoYW5nZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblBvcG92ZXIoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3BvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXJdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlID0gKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIE5vZGUgfCBudWxsXG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgICBpZiAocG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGNsb3NlKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW3BvcG92ZXJPcGVuLCBjbG9zZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRBY3RpdmVJbmRleCgwKVxuICB9LCBbaXRlbXMubGVuZ3RoLCBhY3RpdmVUeXBlXSlcblxuICBjb25zdCBwb3BvdmVyTm9kZSA9IHVzZU1lbW88UmVhY3ROb2RlIHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmICghcG9wb3Zlck9wZW4pIHJldHVybiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01QQW5jaG9yICRib3R0b209e3BvcG92ZXJQb3MuYm90dG9tfSAkbGVmdD17cG9wb3ZlclBvcy5sZWZ0fSAkd2lkdGg9e3BvcG92ZXJQb3Mud2lkdGh9PlxuICAgICAgICA8Q29udGV4dE1lbnRpb25Qb3BvdmVyXG4gICAgICAgICAgcmVmPXtwb3BvdmVyUmVmfVxuICAgICAgICAgIGFsbG93ZWRUeXBlcz17YWxsb3dlZFR5cGVzfVxuICAgICAgICAgIGFjdGl2ZVR5cGU9e2FjdGl2ZVR5cGV9XG4gICAgICAgICAgb25UeXBlQ2hhbmdlPXtoYW5kbGVUeXBlQ2hhbmdlfVxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgICBoaWRlUmVjZW50c0xhYmVsPXtoaWRlUmVjZW50c0xhYmVsfVxuICAgICAgICAgIGhhc01vcmU9e2hhc01vcmV9XG4gICAgICAgICAgaXNMb2FkaW5nTW9yZT17aXNMb2FkaW5nTW9yZX1cbiAgICAgICAgICBvblJlYWNoTGlzdEVuZD17bG9hZE1vcmV9XG4gICAgICAgICAgc2VhcmNoVmFsdWU9e3NlYXJjaFZhbHVlfVxuICAgICAgICAgIGtleWJvYXJkSGludD17dCgnY29udGV4dE1lbnRpb24ua2V5Ym9hcmRIaW50Jywge1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAnTmF2ZWdhY2nDs24gZW50cmUgcGVzdGHDsWFzOiBALCBAQCwgQEBA4oCmIGVuIG9yZGVuLiBUYW1iacOpbiBBbHQvQ21kICsg4oaQL+KGkicsXG4gICAgICAgICAgfSl9XG4gICAgICAgICAgb25JdGVtU2VsZWN0ZWQ9e2luc2VydFNlbGVjdGVkSXRlbX1cbiAgICAgICAgICBhY3RpdmVJbmRleD17YWN0aXZlSW5kZXh9XG4gICAgICAgICAgb25BY3RpdmVJbmRleENoYW5nZT17c2V0QWN0aXZlSW5kZXh9XG4gICAgICAgIC8+XG4gICAgICA8L1NDTVBBbmNob3I+XG4gICAgKVxuICB9LCBbXG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcG9wb3ZlclBvcyxcbiAgICBhbGxvd2VkVHlwZXMsXG4gICAgYWN0aXZlVHlwZSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlLFxuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBoYXNNb3JlLFxuICAgIGlzTG9hZGluZ01vcmUsXG4gICAgbG9hZE1vcmUsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgaW5zZXJ0U2VsZWN0ZWRJdGVtLFxuICAgIGFjdGl2ZUluZGV4LFxuICBdKVxuXG4gIHJldHVybiB7IHBvcG92ZXJPcGVuLCByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsIGhhbmRsZVRyaWdnZXIsIGhhbmRsZUtleURvd24sIHBvcG92ZXJOb2RlLCBjbG9zZSB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsU0FBOENBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFFOUcsU0FBU0MscUJBQXFCLEVBQUVDLFVBQVUsUUFBUSwyQ0FBMkM7QUFDN0YsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FB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