@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.
Files changed (75) hide show
  1. package/lib/App.js +22 -11
  2. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +36 -0
  3. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +181 -0
  4. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
  5. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +322 -0
  6. package/lib/components/atoms/ContextMentionChip/index.js +4 -0
  7. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +191 -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 +283 -0
  11. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +114 -0
  12. package/lib/components/atoms/ContextMentionItem/index.js +2 -0
  13. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +142 -0
  14. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +75 -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 +8 -6
  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/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
  34. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
  35. package/lib/constants/taskLinkIcon.js +6 -0
  36. package/lib/context/cor-user.js +1 -1
  37. package/lib/dev/DevContextMentionInput.js +65 -0
  38. package/lib/dev/Providers.js +11 -6
  39. package/lib/hooks/useCaretPosition.js +35 -0
  40. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  41. package/lib/hooks/useChatManager/useChatManager.js +21 -11
  42. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  43. package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
  44. package/lib/hooks/useContextMentions.js +270 -0
  45. package/lib/hooks/useEntitySearch.js +535 -0
  46. package/lib/hooks/useEvent.js +6 -1
  47. package/lib/hooks/useMentionAllowedTypes.js +103 -0
  48. package/lib/hooks/useMentionPopover.js +319 -0
  49. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
  50. package/lib/hooks/useTaskPanel.js +3 -10
  51. package/lib/hooks/useTextOverflowEllipsisTooltip.js +35 -0
  52. package/lib/lang/br/index.js +24 -1
  53. package/lib/lang/en/index.js +24 -1
  54. package/lib/lang/es/index.js +24 -1
  55. package/lib/lang/fr/index.js +23 -1
  56. package/lib/services/maia/Chats/getChatMessages.js +29 -4
  57. package/lib/services/maia/Orchestrator/orchestrator.js +8 -5
  58. package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
  59. package/lib/services/maia/RecentTasks/getRecentTasks.js +43 -0
  60. package/lib/services/maia/RecentTasks/index.js +6 -0
  61. package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
  62. package/lib/services/maia/RecentUsers/index.js +6 -0
  63. package/lib/services/query/entitySearchQuery.js +16 -0
  64. package/lib/services/query/usersDirectoryQuery.js +19 -0
  65. package/lib/services/utils/mapChatMessages.js +12 -5
  66. package/lib/types/Chat.js +1 -1
  67. package/lib/types/agent.js +1 -1
  68. package/lib/types/contextMention.js +37 -0
  69. package/lib/utils/contextMentionIcons.js +115 -0
  70. package/lib/utils/contextMentionLabel.js +4 -0
  71. package/lib/utils/contextMentionTypeLabel.js +17 -0
  72. package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
  73. package/lib/utils/openTaskInCorPanel.js +18 -0
  74. package/lib/utils/renderContextMentions.js +293 -0
  75. package/package.json +1 -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,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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