@projectcor/maia-components 2.11.63-3 → 2.11.63

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 (115) hide show
  1. package/lib/App.js +2 -6
  2. package/lib/components/atoms/Chip/Chip.js +15 -49
  3. package/lib/components/atoms/Chip/styles.js +3 -7
  4. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +3 -7
  5. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +2 -4
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  7. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +11 -76
  9. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +14 -22
  10. package/lib/components/atoms/MAIAInput/MAIAInput.js +5 -8
  11. package/lib/components/atoms/icons/index.js +1 -4
  12. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
  13. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
  14. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
  15. package/lib/components/molecules/AbmSection/index.js +1 -2
  16. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +2 -21
  17. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +4 -6
  18. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +5 -10
  19. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +24 -74
  20. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +13 -14
  21. package/lib/components/molecules/ChatAIModal/constants.js +2 -10
  22. package/lib/components/molecules/ChatFooter/ChatFooter.js +21 -105
  23. package/lib/components/molecules/ChatFooter/styles.js +2 -11
  24. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  25. package/lib/components/molecules/Sidebar/Sidebar.js +32 -69
  26. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +11 -15
  27. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +56 -269
  28. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
  29. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +2 -17
  30. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
  31. package/lib/constants/config.js +1 -4
  32. package/lib/constants/maiaTaskPanelAccess.js +2 -2
  33. package/lib/context/global-context.js +1 -8
  34. package/lib/hooks/useAgentModel/useCreateAgent.js +10 -11
  35. package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -12
  36. package/lib/hooks/useChatManager/useChatManager.js +19 -142
  37. package/lib/hooks/useChatMessages/useChatMessages.js +1 -1
  38. package/lib/hooks/useContextMentions.js +13 -61
  39. package/lib/hooks/useEntitySearch.js +142 -273
  40. package/lib/hooks/useMentionAllowedTypes.js +11 -55
  41. package/lib/hooks/useMentionPopover.js +30 -64
  42. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  43. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +7 -16
  44. package/lib/hooks/useProjectSearch.js +28 -4
  45. package/lib/hooks/useProjectSummaryConfig.js +3 -47
  46. package/lib/hooks/useRecentClientsSearch.js +34 -4
  47. package/lib/lang/br/index.js +3 -578
  48. package/lib/lang/en/index.js +3 -578
  49. package/lib/lang/es/index.js +3 -578
  50. package/lib/lang/fr/index.js +4 -310
  51. package/lib/services/maia/Agents/createAgent.js +1 -1
  52. package/lib/services/maia/Agents/getAgentById.js +2 -3
  53. package/lib/services/maia/Agents/getAgents.js +91 -68
  54. package/lib/services/maia/Agents/updateAgent.js +1 -1
  55. package/lib/services/maia/Chats/getChatsByUserId.js +9 -13
  56. package/lib/services/maia/Orchestrator/orchestrator.js +6 -15
  57. package/lib/services/utils/validateIsMaia.js +2 -2
  58. package/lib/types/Chat.js +1 -1
  59. package/lib/types/agent.js +1 -1
  60. package/lib/types/agentModal.js +1 -1
  61. package/lib/types/contextMention.js +1 -1
  62. package/lib/types/global.d.js +1 -1
  63. package/lib/utils/contextMentionIcons.js +1 -29
  64. package/lib/utils/hitlAnalytics.js +3 -3
  65. package/lib/utils/renderContextMentions.js +4 -9
  66. package/package.json +1 -1
  67. package/lib/components/atoms/icons/RocketIcon.js +0 -31
  68. package/lib/components/atoms/icons/SkillIcon.js +0 -30
  69. package/lib/components/atoms/icons/SkillsNavIcon.js +0 -27
  70. package/lib/components/atoms/icons/WrenchIcon.js +0 -42
  71. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +0 -522
  72. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +0 -234
  73. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +0 -437
  74. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +0 -3
  75. package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +0 -80
  76. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.interface.js +0 -2
  77. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +0 -722
  78. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +0 -165
  79. package/lib/components/molecules/AbmSection/AbmTriggersSection/index.js +0 -2
  80. package/lib/components/molecules/ChatAIMyRoutines/ChatAIMyRoutines.js +0 -486
  81. package/lib/components/molecules/ChatAIMyRoutines/ChatAIMyRoutines.styles.js +0 -184
  82. package/lib/components/molecules/ChatAIMyRoutines/index.js +0 -2
  83. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +0 -357
  84. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +0 -145
  85. package/lib/components/molecules/ChatAIMySkills/index.js +0 -2
  86. package/lib/components/molecules/SchedulesPage/SchedulesPage.js +0 -610
  87. package/lib/components/molecules/SchedulesPage/index.js +0 -2
  88. package/lib/components/molecules/SkillsPage/SkillsPage.js +0 -708
  89. package/lib/components/molecules/SkillsPage/index.js +0 -2
  90. package/lib/components/molecules/maiaSectionModalStyles.js +0 -91
  91. package/lib/components/molecules/maiaSectionUiTokens.js +0 -31
  92. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +0 -160
  93. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +0 -34
  94. package/lib/components/organisms/AbmSkillGenerateModal/index.js +0 -2
  95. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +0 -446
  96. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +0 -98
  97. package/lib/components/organisms/AbmSkillModal/index.js +0 -2
  98. package/lib/dev/DevAbmAgentModal.js +0 -114
  99. package/lib/dev/mocks/abmModalMocks.js +0 -193
  100. package/lib/hooks/useContextPinPopover.js +0 -228
  101. package/lib/services/maia/Agents/connectors.js +0 -110
  102. package/lib/services/maia/Agents/skills.js +0 -164
  103. package/lib/services/maia/Schedules/createSchedule.js +0 -39
  104. package/lib/services/maia/Schedules/deleteSchedule.js +0 -36
  105. package/lib/services/maia/Schedules/getMySchedules.js +0 -55
  106. package/lib/services/maia/Schedules/getSchedules.js +0 -58
  107. package/lib/services/maia/Schedules/index.js +0 -5
  108. package/lib/services/maia/Skills/createSkill.js +0 -39
  109. package/lib/services/maia/Skills/deleteSkill.js +0 -38
  110. package/lib/services/maia/Skills/generateSkill.js +0 -41
  111. package/lib/services/maia/Skills/getSkills.js +0 -90
  112. package/lib/services/maia/Skills/updateSkill.js +0 -39
  113. package/lib/types/agentSkill.js +0 -2
  114. package/lib/types/attachment.js +0 -2
  115. package/lib/types/skill.js +0 -2
@@ -1,2 +0,0 @@
1
- export { AbmSkillModal } from './AbmSkillModal';
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBYm1Ta2lsbE1vZGFsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvb3JnYW5pc21zL0FibVNraWxsTW9kYWwvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEFibVNraWxsTW9kYWwgfSBmcm9tICcuL0FibVNraWxsTW9kYWwnXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBUSxpQkFBaUIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,114 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- /* eslint-disable @typescript-eslint/no-explicit-any */
5
- import { useEffect, useMemo, useRef } from 'react';
6
- import { AbmAgentModal } from '../components/organisms/AbmAgentModal/AbmAgentModal';
7
- import { GlobalContext, DEFAULT_AGENT } from '../context/global-context';
8
- import { installAbmModalFetchMocks, uninstallAbmModalFetchMocks } from './mocks/abmModalMocks';
9
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
- var DEV_GLOBAL_CONTEXT_VALUE = {
11
- section: 'header',
12
- agent: _objectSpread(_objectSpread({}, DEFAULT_AGENT), {}, {
13
- entity: 'global'
14
- }),
15
- selectAgent: function selectAgent() {},
16
- clearAgent: function clearAgent() {},
17
- project: null,
18
- setProject: function setProject() {},
19
- client: null,
20
- setClient: function setClient() {},
21
- isWebSearchActive: false,
22
- toggleWebSearch: function toggleWebSearch() {},
23
- isDeepSearchActive: false,
24
- toggleDeepSearch: function toggleDeepSearch() {},
25
- chipsProject: null,
26
- setChipsProject: function setChipsProject() {},
27
- configureSettingsItems: {
28
- current: []
29
- },
30
- restoreConfigureSettings: function restoreConfigureSettings() {},
31
- entityValues: {
32
- projectId: null,
33
- clientId: null
34
- },
35
- setEntityValues: function setEntityValues() {},
36
- hasMultiAgents: true
37
- };
38
- var noopAgent = function noopAgent() {};
39
- export function DevAbmAgentModal() {
40
- var featureFlagPrev = useRef(undefined);
41
- useEffect(function () {
42
- installAbmModalFetchMocks();
43
- featureFlagPrev.current = window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
44
- window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS = true;
45
- return function () {
46
- uninstallAbmModalFetchMocks();
47
- window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS = featureFlagPrev.current;
48
- };
49
- }, []);
50
- var handleOpenInActions = function handleOpenInActions() {
51
- document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
52
- detail: {
53
- agentValues: {
54
- values: {
55
- isEditing: false,
56
- initialSection: 'actions'
57
- },
58
- isOpen: true
59
- }
60
- }
61
- }));
62
- };
63
- var contextValue = useMemo(function () {
64
- return DEV_GLOBAL_CONTEXT_VALUE;
65
- }, []);
66
- return /*#__PURE__*/_jsxs(GlobalContext.Provider, {
67
- value: contextValue,
68
- children: [/*#__PURE__*/_jsxs("div", {
69
- style: {
70
- padding: 24,
71
- display: 'flex',
72
- flexDirection: 'column',
73
- gap: 12
74
- },
75
- children: [/*#__PURE__*/_jsx("h3", {
76
- style: {
77
- margin: 0,
78
- fontFamily: 'Work Sans, sans-serif'
79
- },
80
- children: "AbmAgentModal \xB7 DEV (mock data)"
81
- }), /*#__PURE__*/_jsx("p", {
82
- style: {
83
- margin: 0,
84
- color: '#6b7280',
85
- maxWidth: 560,
86
- lineHeight: 1.5
87
- },
88
- children: "Abre el modal de ABM directamente en la pesta\xF1a Actions / Conectores. Todas las llamadas al back se interceptan y responden con mocks (no requiere MAIA_URL levantado)."
89
- }), /*#__PURE__*/_jsx("div", {
90
- children: /*#__PURE__*/_jsx("button", {
91
- type: "button",
92
- onClick: handleOpenInActions,
93
- style: {
94
- padding: '8px 14px',
95
- borderRadius: 8,
96
- border: '1px solid rgba(0,68,102,1)',
97
- background: 'rgba(0,68,102,1)',
98
- color: '#fff',
99
- cursor: 'pointer',
100
- fontWeight: 600
101
- },
102
- children: "Abrir modal ABM (Conectores)"
103
- })
104
- })]
105
- }), /*#__PURE__*/_jsx(AbmAgentModal, {
106
- addAgent: noopAgent,
107
- removeAgent: noopAgent,
108
- updateAgent: noopAgent,
109
- updateAgentFavorite: noopAgent,
110
- selectFirstAgent: noopAgent
111
- })]
112
- });
113
- }
114
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwiQWJtQWdlbnRNb2RhbCIsIkdsb2JhbENvbnRleHQiLCJERUZBVUxUX0FHRU5UIiwiaW5zdGFsbEFibU1vZGFsRmV0Y2hNb2NrcyIsInVuaW5zdGFsbEFibU1vZGFsRmV0Y2hNb2NrcyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJERVZfR0xPQkFMX0NPTlRFWFRfVkFMVUUiLCJzZWN0aW9uIiwiYWdlbnQiLCJfb2JqZWN0U3ByZWFkIiwiZW50aXR5Iiwic2VsZWN0QWdlbnQiLCJjbGVhckFnZW50IiwicHJvamVjdCIsInNldFByb2plY3QiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInRvZ2dsZVdlYlNlYXJjaCIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInRvZ2dsZURlZXBTZWFyY2giLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJjb25maWd1cmVTZXR0aW5nc0l0ZW1zIiwiY3VycmVudCIsInJlc3RvcmVDb25maWd1cmVTZXR0aW5ncyIsImVudGl0eVZhbHVlcyIsInByb2plY3RJZCIsImNsaWVudElkIiwic2V0RW50aXR5VmFsdWVzIiwiaGFzTXVsdGlBZ2VudHMiLCJub29wQWdlbnQiLCJEZXZBYm1BZ2VudE1vZGFsIiwiZmVhdHVyZUZsYWdQcmV2IiwidW5kZWZpbmVkIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImhhbmRsZU9wZW5JbkFjdGlvbnMiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImFnZW50VmFsdWVzIiwidmFsdWVzIiwiaXNFZGl0aW5nIiwiaW5pdGlhbFNlY3Rpb24iLCJpc09wZW4iLCJjb250ZXh0VmFsdWUiLCJQcm92aWRlciIsInZhbHVlIiwiY2hpbGRyZW4iLCJzdHlsZSIsInBhZGRpbmciLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImdhcCIsIm1hcmdpbiIsImZvbnRGYW1pbHkiLCJjb2xvciIsIm1heFdpZHRoIiwibGluZUhlaWdodCIsInR5cGUiLCJvbkNsaWNrIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyIiwiYmFja2dyb3VuZCIsImN1cnNvciIsImZvbnRXZWlnaHQiLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXYvRGV2QWJtQWdlbnRNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQWJtQWdlbnRNb2RhbCB9IGZyb20gJy4uL2NvbXBvbmVudHMvb3JnYW5pc21zL0FibUFnZW50TW9kYWwvQWJtQWdlbnRNb2RhbCdcbmltcG9ydCB7IEdsb2JhbENvbnRleHQsIERFRkFVTFRfQUdFTlQgfSBmcm9tICcuLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgaW5zdGFsbEFibU1vZGFsRmV0Y2hNb2NrcywgdW5pbnN0YWxsQWJtTW9kYWxGZXRjaE1vY2tzIH0gZnJvbSAnLi9tb2Nrcy9hYm1Nb2RhbE1vY2tzJ1xuXG5jb25zdCBERVZfR0xPQkFMX0NPTlRFWFRfVkFMVUUgPSB7XG4gIHNlY3Rpb246ICdoZWFkZXInIGFzIGNvbnN0LFxuICBhZ2VudDogeyAuLi5ERUZBVUxUX0FHRU5ULCBlbnRpdHk6ICdnbG9iYWwnIGFzIGNvbnN0IH0sXG4gIHNlbGVjdEFnZW50OiAoKSA9PiB7fSxcbiAgY2xlYXJBZ2VudDogKCkgPT4ge30sXG4gIHByb2plY3Q6IG51bGwsXG4gIHNldFByb2plY3Q6ICgpID0+IHt9LFxuICBjbGllbnQ6IG51bGwsXG4gIHNldENsaWVudDogKCkgPT4ge30sXG4gIGlzV2ViU2VhcmNoQWN0aXZlOiBmYWxzZSxcbiAgdG9nZ2xlV2ViU2VhcmNoOiAoKSA9PiB7fSxcbiAgaXNEZWVwU2VhcmNoQWN0aXZlOiBmYWxzZSxcbiAgdG9nZ2xlRGVlcFNlYXJjaDogKCkgPT4ge30sXG4gIGNoaXBzUHJvamVjdDogbnVsbCxcbiAgc2V0Q2hpcHNQcm9qZWN0OiAoKSA9PiB7fSxcbiAgY29uZmlndXJlU2V0dGluZ3NJdGVtczogeyBjdXJyZW50OiBbXSB9LFxuICByZXN0b3JlQ29uZmlndXJlU2V0dGluZ3M6ICgpID0+IHt9LFxuICBlbnRpdHlWYWx1ZXM6IHsgcHJvamVjdElkOiBudWxsLCBjbGllbnRJZDogbnVsbCB9LFxuICBzZXRFbnRpdHlWYWx1ZXM6ICgpID0+IHt9LFxuICBoYXNNdWx0aUFnZW50czogdHJ1ZSxcbn1cblxuY29uc3Qgbm9vcEFnZW50ID0gKCkgPT4ge31cblxuZXhwb3J0IGZ1bmN0aW9uIERldkFibUFnZW50TW9kYWwoKSB7XG4gIGNvbnN0IGZlYXR1cmVGbGFnUHJldiA9IHVzZVJlZjx1bmtub3duPih1bmRlZmluZWQpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpbnN0YWxsQWJtTW9kYWxGZXRjaE1vY2tzKClcbiAgICBmZWF0dXJlRmxhZ1ByZXYuY3VycmVudCA9ICh3aW5kb3cgYXMgYW55KS5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gICAgOyh3aW5kb3cgYXMgYW55KS5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTID0gdHJ1ZVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHVuaW5zdGFsbEFibU1vZGFsRmV0Y2hNb2NrcygpXG4gICAgICA7KHdpbmRvdyBhcyBhbnkpLk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgPSBmZWF0dXJlRmxhZ1ByZXYuY3VycmVudFxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlT3BlbkluQWN0aW9ucyA9ICgpID0+IHtcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICBpbml0aWFsU2VjdGlvbjogJ2FjdGlvbnMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKCgpID0+IERFVl9HTE9CQUxfQ09OVEVYVF9WQUxVRSwgW10pXG5cbiAgcmV0dXJuIChcbiAgICA8R2xvYmFsQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlIGFzIGFueX0+XG4gICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6IDI0LCBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEyIH19PlxuICAgICAgICA8aDMgc3R5bGU9e3sgbWFyZ2luOiAwLCBmb250RmFtaWx5OiAnV29yayBTYW5zLCBzYW5zLXNlcmlmJyB9fT5BYm1BZ2VudE1vZGFsIMK3IERFViAobW9jayBkYXRhKTwvaDM+XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCwgY29sb3I6ICcjNmI3MjgwJywgbWF4V2lkdGg6IDU2MCwgbGluZUhlaWdodDogMS41IH19PlxuICAgICAgICAgIEFicmUgZWwgbW9kYWwgZGUgQUJNIGRpcmVjdGFtZW50ZSBlbiBsYSBwZXN0YcOxYSBBY3Rpb25zIC8gQ29uZWN0b3Jlcy4gVG9kYXMgbGFzIGxsYW1hZGFzIGFsIGJhY2sgc2VcbiAgICAgICAgICBpbnRlcmNlcHRhbiB5IHJlc3BvbmRlbiBjb24gbW9ja3MgKG5vIHJlcXVpZXJlIE1BSUFfVVJMIGxldmFudGFkbykuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5JbkFjdGlvbnN9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwYWRkaW5nOiAnOHB4IDE0cHgnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDAsNjgsMTAyLDEpJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMCw2OCwxMDIsMSknLFxuICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICBBYnJpciBtb2RhbCBBQk0gKENvbmVjdG9yZXMpXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxBYm1BZ2VudE1vZGFsXG4gICAgICAgIGFkZEFnZW50PXtub29wQWdlbnQgYXMgYW55fVxuICAgICAgICByZW1vdmVBZ2VudD17bm9vcEFnZW50IGFzIGFueX1cbiAgICAgICAgdXBkYXRlQWdlbnQ9e25vb3BBZ2VudCBhcyBhbnl9XG4gICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGU9e25vb3BBZ2VudCBhcyBhbnl9XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e25vb3BBZ2VudCBhcyBhbnl9XG4gICAgICAvPlxuICAgIDwvR2xvYmFsQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7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
@@ -1,193 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _typeof from "@babel/runtime/helpers/typeof";
3
- import _regeneratorRuntime from "@babel/runtime/regenerator";
4
- /* eslint-disable @typescript-eslint/no-explicit-any */
5
- /**
6
- * Mocks de las llamadas que dispara AbmAgentModal en modo creación + sección Actions.
7
- * Sólo se usa en pantallas /src/dev/* — no se importa desde código de producción.
8
- *
9
- * Replica el shape real de las respuestas del back para que el modal funcione
10
- * sin necesidad de tener `MAIA_URL` levantado (caso domingo / staging caído).
11
- */
12
-
13
- var jsonResponse = function jsonResponse(body) {
14
- var init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
15
- status: 200
16
- };
17
- var status = _typeof(init) === 'object' && init != null && 'status' in init && init.status != null ? init.status : 200;
18
- return new Response(JSON.stringify(body), {
19
- status: status,
20
- headers: {
21
- 'Content-Type': 'application/json'
22
- }
23
- });
24
- };
25
- var mockedAgentModels = [{
26
- id: 1,
27
- display_name: 'GPT-4o',
28
- description: 'OpenAI GPT-4o (default)',
29
- model_name: 'gpt-4o',
30
- provider: 'openai',
31
- is_deprecated: false
32
- }, {
33
- id: 2,
34
- display_name: 'Claude 3.5 Sonnet',
35
- description: 'Anthropic Claude 3.5 Sonnet',
36
- model_name: 'claude-3-5-sonnet',
37
- provider: 'anthropic',
38
- is_deprecated: false
39
- }, {
40
- id: 3,
41
- display_name: 'Gemini 1.5 Pro',
42
- description: 'Google Gemini 1.5 Pro',
43
- model_name: 'gemini-1.5-pro',
44
- provider: 'google',
45
- is_deprecated: false
46
- }];
47
- var mockedAgentConnectors = [{
48
- id: 1,
49
- slug: 'notion',
50
- name: 'Notion',
51
- description: 'Conector de Notion para acceder a páginas y bases de datos del workspace.',
52
- icon_url: 'https://www.notion.so/images/favicon.ico',
53
- requires_auth: true,
54
- is_active: true,
55
- enabled_for_agent: false,
56
- user_authorized: false
57
- }];
58
- var buildCreatedAgent = function buildCreatedAgent(body) {
59
- var _body$name, _body$emoji, _body$introduction, _body$input_placehold, _body$user_prompt, _body$tool_group_slug;
60
- return {
61
- id: "mock-agent-".concat(Date.now()),
62
- name: (_body$name = body === null || body === void 0 ? void 0 : body.name) !== null && _body$name !== void 0 ? _body$name : 'Mock Agent',
63
- emoji: (_body$emoji = body === null || body === void 0 ? void 0 : body.emoji) !== null && _body$emoji !== void 0 ? _body$emoji : '✨',
64
- introduction: (_body$introduction = body === null || body === void 0 ? void 0 : body.introduction) !== null && _body$introduction !== void 0 ? _body$introduction : '',
65
- input_placeholder: (_body$input_placehold = body === null || body === void 0 ? void 0 : body.input_placeholder) !== null && _body$input_placehold !== void 0 ? _body$input_placehold : '',
66
- user_prompt: (_body$user_prompt = body === null || body === void 0 ? void 0 : body.user_prompt) !== null && _body$user_prompt !== void 0 ? _body$user_prompt : '',
67
- type: 'custom',
68
- company_id: '2336',
69
- is_internal: false,
70
- is_favorite: false,
71
- ai_model_id: 1,
72
- model_display_name: 'GPT-4o',
73
- tool_group_slugs: (_body$tool_group_slug = body === null || body === void 0 ? void 0 : body.tool_group_slugs) !== null && _body$tool_group_slug !== void 0 ? _body$tool_group_slug : [],
74
- knowledge: [],
75
- created_by: {
76
- name: 'Mock User',
77
- is_deleted: false
78
- }
79
- };
80
- };
81
- var resolvers = [function (_ref) {
82
- var method = _ref.method,
83
- path = _ref.path;
84
- if (method === 'GET' && path === 'ai-models') {
85
- return jsonResponse({
86
- data: mockedAgentModels,
87
- total: mockedAgentModels.length
88
- });
89
- }
90
- return null;
91
- }, function (_ref2) {
92
- var method = _ref2.method,
93
- path = _ref2.path,
94
- body = _ref2.body;
95
- if (method === 'POST' && path === 'agents') {
96
- return jsonResponse(buildCreatedAgent(body));
97
- }
98
- return null;
99
- }, function (_ref3) {
100
- var method = _ref3.method,
101
- path = _ref3.path;
102
- var agentConnectorsMatch = path.match(/^agents\/([^/]+)\/connectors$/);
103
- if (!agentConnectorsMatch) return null;
104
- if (method === 'GET') {
105
- return jsonResponse(mockedAgentConnectors);
106
- }
107
- if (method === 'POST') {
108
- return jsonResponse({
109
- agent_id: agentConnectorsMatch[1],
110
- connector_slugs: [],
111
- requires_auth: []
112
- });
113
- }
114
- return null;
115
- }];
116
- var parseBody = function parseBody(init) {
117
- if (!(init !== null && init !== void 0 && init.body)) return null;
118
- if (typeof init.body !== 'string') return null;
119
- try {
120
- return JSON.parse(init.body);
121
- } catch (_unused) {
122
- return null;
123
- }
124
- };
125
- var stripBaseUrl = function stripBaseUrl(url, baseUrl) {
126
- if (!baseUrl) return null;
127
- var normalizedBase = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
128
- if (!url.startsWith(normalizedBase)) return null;
129
- return url.slice(normalizedBase.length).replace(/^\//, '');
130
- };
131
- var originalFetch = null;
132
- var installed = false;
133
- export var installAbmModalFetchMocks = function installAbmModalFetchMocks() {
134
- if (installed) return;
135
- installed = true;
136
- originalFetch = window.fetch.bind(window);
137
- var baseUrl = process.env.MAIA_URL || '';
138
- window.fetch = /*#__PURE__*/function () {
139
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(input, init) {
140
- var url, method, path, body, matched;
141
- return _regeneratorRuntime.wrap(function (_context) {
142
- while (1) switch (_context.prev = _context.next) {
143
- case 0:
144
- url = typeof input === 'string' ? input : input.url;
145
- method = ((init === null || init === void 0 ? void 0 : init.method) || typeof input !== 'string' && input.method || 'GET').toUpperCase();
146
- path = stripBaseUrl(url, baseUrl);
147
- if (!(path !== null)) {
148
- _context.next = 2;
149
- break;
150
- }
151
- body = parseBody(init);
152
- matched = resolvers.map(function (r) {
153
- return r({
154
- method: method,
155
- path: path,
156
- body: body
157
- });
158
- }).find(function (r) {
159
- return r != null;
160
- });
161
- if (!matched) {
162
- _context.next = 1;
163
- break;
164
- }
165
- // eslint-disable-next-line no-console
166
- console.info("[DEV mock] ".concat(method, " ").concat(path, " \u2192 ").concat(matched.status));
167
- return _context.abrupt("return", matched);
168
- case 1:
169
- // eslint-disable-next-line no-console
170
- console.warn("[DEV mock] ".concat(method, " ").concat(path, " no tiene mock \u2014 devolviendo 200 vac\xEDo"));
171
- return _context.abrupt("return", jsonResponse({}));
172
- case 2:
173
- return _context.abrupt("return", originalFetch ? originalFetch(input, init) : Promise.reject(new Error('fetch not available')));
174
- case 3:
175
- case "end":
176
- return _context.stop();
177
- }
178
- }, _callee);
179
- }));
180
- return function (_x, _x2) {
181
- return _ref4.apply(this, arguments);
182
- };
183
- }();
184
- };
185
- export var uninstallAbmModalFetchMocks = function uninstallAbmModalFetchMocks() {
186
- if (!installed) return;
187
- if (originalFetch) {
188
- window.fetch = originalFetch;
189
- }
190
- originalFetch = null;
191
- installed = false;
192
- };
193
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqc29uUmVzcG9uc2UiLCJib2R5IiwiaW5pdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInN0YXR1cyIsIl90eXBlb2YiLCJSZXNwb25zZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJoZWFkZXJzIiwibW9ja2VkQWdlbnRNb2RlbHMiLCJpZCIsImRpc3BsYXlfbmFtZSIsImRlc2NyaXB0aW9uIiwibW9kZWxfbmFtZSIsInByb3ZpZGVyIiwiaXNfZGVwcmVjYXRlZCIsIm1vY2tlZEFnZW50Q29ubmVjdG9ycyIsInNsdWciLCJuYW1lIiwiaWNvbl91cmwiLCJyZXF1aXJlc19hdXRoIiwiaXNfYWN0aXZlIiwiZW5hYmxlZF9mb3JfYWdlbnQiLCJ1c2VyX2F1dGhvcml6ZWQiLCJidWlsZENyZWF0ZWRBZ2VudCIsIl9ib2R5JG5hbWUiLCJfYm9keSRlbW9qaSIsIl9ib2R5JGludHJvZHVjdGlvbiIsIl9ib2R5JGlucHV0X3BsYWNlaG9sZCIsIl9ib2R5JHVzZXJfcHJvbXB0IiwiX2JvZHkkdG9vbF9ncm91cF9zbHVnIiwiY29uY2F0IiwiRGF0ZSIsIm5vdyIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRfcGxhY2Vob2xkZXIiLCJ1c2VyX3Byb21wdCIsInR5cGUiLCJjb21wYW55X2lkIiwiaXNfaW50ZXJuYWwiLCJpc19mYXZvcml0ZSIsImFpX21vZGVsX2lkIiwibW9kZWxfZGlzcGxheV9uYW1lIiwidG9vbF9ncm91cF9zbHVncyIsImtub3dsZWRnZSIsImNyZWF0ZWRfYnkiLCJpc19kZWxldGVkIiwicmVzb2x2ZXJzIiwiX3JlZiIsIm1ldGhvZCIsInBhdGgiLCJkYXRhIiwidG90YWwiLCJfcmVmMiIsIl9yZWYzIiwiYWdlbnRDb25uZWN0b3JzTWF0Y2giLCJtYXRjaCIsImFnZW50X2lkIiwiY29ubmVjdG9yX3NsdWdzIiwicGFyc2VCb2R5IiwicGFyc2UiLCJfdW51c2VkIiwic3RyaXBCYXNlVXJsIiwidXJsIiwiYmFzZVVybCIsIm5vcm1hbGl6ZWRCYXNlIiwiZW5kc1dpdGgiLCJzbGljZSIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwib3JpZ2luYWxGZXRjaCIsImluc3RhbGxlZCIsImluc3RhbGxBYm1Nb2RhbEZldGNoTW9ja3MiLCJ3aW5kb3ciLCJmZXRjaCIsImJpbmQiLCJwcm9jZXNzIiwiZW52IiwiTUFJQV9VUkwiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiaW5wdXQiLCJtYXRjaGVkIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ0b1VwcGVyQ2FzZSIsIm1hcCIsInIiLCJmaW5kIiwiY29uc29sZSIsImluZm8iLCJhYnJ1cHQiLCJ3YXJuIiwiUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwic3RvcCIsIl94IiwiX3gyIiwiYXBwbHkiLCJ1bmluc3RhbGxBYm1Nb2RhbEZldGNoTW9ja3MiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGV2L21vY2tzL2FibU1vZGFsTW9ja3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyoqXG4gKiBNb2NrcyBkZSBsYXMgbGxhbWFkYXMgcXVlIGRpc3BhcmEgQWJtQWdlbnRNb2RhbCBlbiBtb2RvIGNyZWFjacOzbiArIHNlY2Npw7NuIEFjdGlvbnMuXG4gKiBTw7NsbyBzZSB1c2EgZW4gcGFudGFsbGFzIC9zcmMvZGV2Lyog4oCUIG5vIHNlIGltcG9ydGEgZGVzZGUgY8OzZGlnbyBkZSBwcm9kdWNjacOzbi5cbiAqXG4gKiBSZXBsaWNhIGVsIHNoYXBlIHJlYWwgZGUgbGFzIHJlc3B1ZXN0YXMgZGVsIGJhY2sgcGFyYSBxdWUgZWwgbW9kYWwgZnVuY2lvbmVcbiAqIHNpbiBuZWNlc2lkYWQgZGUgdGVuZXIgYE1BSUFfVVJMYCBsZXZhbnRhZG8gKGNhc28gZG9taW5nbyAvIHN0YWdpbmcgY2HDrWRvKS5cbiAqL1xuXG50eXBlIEZldGNoSW5wdXQgPSBQYXJhbWV0ZXJzPHR5cGVvZiBmZXRjaD5bMF1cbnR5cGUgRmV0Y2hJbml0ID0gUGFyYW1ldGVyczx0eXBlb2YgZmV0Y2g+WzFdXG50eXBlIEpzb25SZXNwb25zZUluaXQgPSBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFJlc3BvbnNlPlsxXVxuXG5jb25zdCBqc29uUmVzcG9uc2UgPSAoYm9keTogdW5rbm93biwgaW5pdDogSnNvblJlc3BvbnNlSW5pdCA9IHsgc3RhdHVzOiAyMDAgfSk6IFJlc3BvbnNlID0+IHtcbiAgY29uc3Qgc3RhdHVzID0gdHlwZW9mIGluaXQgPT09ICdvYmplY3QnICYmIGluaXQgIT0gbnVsbCAmJiAnc3RhdHVzJyBpbiBpbml0ICYmIGluaXQuc3RhdHVzICE9IG51bGwgPyBpbml0LnN0YXR1cyA6IDIwMFxuICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KGJvZHkpLCB7XG4gICAgc3RhdHVzLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICB9KVxufVxuXG5jb25zdCBtb2NrZWRBZ2VudE1vZGVscyA9IFtcbiAge1xuICAgIGlkOiAxLFxuICAgIGRpc3BsYXlfbmFtZTogJ0dQVC00bycsXG4gICAgZGVzY3JpcHRpb246ICdPcGVuQUkgR1BULTRvIChkZWZhdWx0KScsXG4gICAgbW9kZWxfbmFtZTogJ2dwdC00bycsXG4gICAgcHJvdmlkZXI6ICdvcGVuYWknLFxuICAgIGlzX2RlcHJlY2F0ZWQ6IGZhbHNlLFxuICB9LFxuICB7XG4gICAgaWQ6IDIsXG4gICAgZGlzcGxheV9uYW1lOiAnQ2xhdWRlIDMuNSBTb25uZXQnLFxuICAgIGRlc2NyaXB0aW9uOiAnQW50aHJvcGljIENsYXVkZSAzLjUgU29ubmV0JyxcbiAgICBtb2RlbF9uYW1lOiAnY2xhdWRlLTMtNS1zb25uZXQnLFxuICAgIHByb3ZpZGVyOiAnYW50aHJvcGljJyxcbiAgICBpc19kZXByZWNhdGVkOiBmYWxzZSxcbiAgfSxcbiAge1xuICAgIGlkOiAzLFxuICAgIGRpc3BsYXlfbmFtZTogJ0dlbWluaSAxLjUgUHJvJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dvb2dsZSBHZW1pbmkgMS41IFBybycsXG4gICAgbW9kZWxfbmFtZTogJ2dlbWluaS0xLjUtcHJvJyxcbiAgICBwcm92aWRlcjogJ2dvb2dsZScsXG4gICAgaXNfZGVwcmVjYXRlZDogZmFsc2UsXG4gIH0sXG5dXG5cbmNvbnN0IG1vY2tlZEFnZW50Q29ubmVjdG9ycyA9IFtcbiAge1xuICAgIGlkOiAxLFxuICAgIHNsdWc6ICdub3Rpb24nLFxuICAgIG5hbWU6ICdOb3Rpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29uZWN0b3IgZGUgTm90aW9uIHBhcmEgYWNjZWRlciBhIHDDoWdpbmFzIHkgYmFzZXMgZGUgZGF0b3MgZGVsIHdvcmtzcGFjZS4nLFxuICAgIGljb25fdXJsOiAnaHR0cHM6Ly93d3cubm90aW9uLnNvL2ltYWdlcy9mYXZpY29uLmljbycsXG4gICAgcmVxdWlyZXNfYXV0aDogdHJ1ZSxcbiAgICBpc19hY3RpdmU6IHRydWUsXG4gICAgZW5hYmxlZF9mb3JfYWdlbnQ6IGZhbHNlLFxuICAgIHVzZXJfYXV0aG9yaXplZDogZmFsc2UsXG4gIH0sXG5dXG5cbmNvbnN0IGJ1aWxkQ3JlYXRlZEFnZW50ID0gKGJvZHk6IGFueSkgPT4gKHtcbiAgaWQ6IGBtb2NrLWFnZW50LSR7RGF0ZS5ub3coKX1gLFxuICBuYW1lOiBib2R5Py5uYW1lID8/ICdNb2NrIEFnZW50JyxcbiAgZW1vamk6IGJvZHk/LmVtb2ppID8/ICfinKgnLFxuICBpbnRyb2R1Y3Rpb246IGJvZHk/LmludHJvZHVjdGlvbiA/PyAnJyxcbiAgaW5wdXRfcGxhY2Vob2xkZXI6IGJvZHk/LmlucHV0X3BsYWNlaG9sZGVyID8/ICcnLFxuICB1c2VyX3Byb21wdDogYm9keT8udXNlcl9wcm9tcHQgPz8gJycsXG4gIHR5cGU6ICdjdXN0b20nLFxuICBjb21wYW55X2lkOiAnMjMzNicsXG4gIGlzX2ludGVybmFsOiBmYWxzZSxcbiAgaXNfZmF2b3JpdGU6IGZhbHNlLFxuICBhaV9tb2RlbF9pZDogMSxcbiAgbW9kZWxfZGlzcGxheV9uYW1lOiAnR1BULTRvJyxcbiAgdG9vbF9ncm91cF9zbHVnczogYm9keT8udG9vbF9ncm91cF9zbHVncyA/PyBbXSxcbiAga25vd2xlZGdlOiBbXSxcbiAgY3JlYXRlZF9ieTogeyBuYW1lOiAnTW9jayBVc2VyJywgaXNfZGVsZXRlZDogZmFsc2UgfSxcbn0pXG5cbnR5cGUgUmVzb2x2ZXIgPSAocmVxOiB7IG1ldGhvZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9KSA9PiBSZXNwb25zZSB8IG51bGxcblxuY29uc3QgcmVzb2x2ZXJzOiBSZXNvbHZlcltdID0gW1xuICAoeyBtZXRob2QsIHBhdGggfSkgPT4ge1xuICAgIGlmIChtZXRob2QgPT09ICdHRVQnICYmIHBhdGggPT09ICdhaS1tb2RlbHMnKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKHsgZGF0YTogbW9ja2VkQWdlbnRNb2RlbHMsIHRvdGFsOiBtb2NrZWRBZ2VudE1vZGVscy5sZW5ndGggfSlcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfSxcbiAgKHsgbWV0aG9kLCBwYXRoLCBib2R5IH0pID0+IHtcbiAgICBpZiAobWV0aG9kID09PSAnUE9TVCcgJiYgcGF0aCA9PT0gJ2FnZW50cycpIHtcbiAgICAgIHJldHVybiBqc29uUmVzcG9uc2UoYnVpbGRDcmVhdGVkQWdlbnQoYm9keSkpXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH0sXG4gICh7IG1ldGhvZCwgcGF0aCB9KSA9PiB7XG4gICAgY29uc3QgYWdlbnRDb25uZWN0b3JzTWF0Y2ggPSBwYXRoLm1hdGNoKC9eYWdlbnRzXFwvKFteL10rKVxcL2Nvbm5lY3RvcnMkLylcbiAgICBpZiAoIWFnZW50Q29ubmVjdG9yc01hdGNoKSByZXR1cm4gbnVsbFxuICAgIGlmIChtZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKG1vY2tlZEFnZW50Q29ubmVjdG9ycylcbiAgICB9XG4gICAgaWYgKG1ldGhvZCA9PT0gJ1BPU1QnKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKHtcbiAgICAgICAgYWdlbnRfaWQ6IGFnZW50Q29ubmVjdG9yc01hdGNoWzFdLFxuICAgICAgICBjb25uZWN0b3Jfc2x1Z3M6IFtdLFxuICAgICAgICByZXF1aXJlc19hdXRoOiBbXSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH0sXG5dXG5cbmNvbnN0IHBhcnNlQm9keSA9IChpbml0PzogRmV0Y2hJbml0KTogYW55ID0+IHtcbiAgaWYgKCFpbml0Py5ib2R5KSByZXR1cm4gbnVsbFxuICBpZiAodHlwZW9mIGluaXQuYm9keSAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoaW5pdC5ib2R5KVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHN0cmlwQmFzZVVybCA9ICh1cmw6IHN0cmluZywgYmFzZVVybDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghYmFzZVVybCkgcmV0dXJuIG51bGxcbiAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBiYXNlVXJsLmVuZHNXaXRoKCcvJykgPyBiYXNlVXJsLnNsaWNlKDAsIC0xKSA6IGJhc2VVcmxcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZSkpIHJldHVybiBudWxsXG4gIHJldHVybiB1cmwuc2xpY2Uobm9ybWFsaXplZEJhc2UubGVuZ3RoKS5yZXBsYWNlKC9eXFwvLywgJycpXG59XG5cbmxldCBvcmlnaW5hbEZldGNoOiB0eXBlb2Ygd2luZG93LmZldGNoIHwgbnVsbCA9IG51bGxcbmxldCBpbnN0YWxsZWQgPSBmYWxzZVxuXG5leHBvcnQgY29uc3QgaW5zdGFsbEFibU1vZGFsRmV0Y2hNb2NrcyA9ICgpID0+IHtcbiAgaWYgKGluc3RhbGxlZCkgcmV0dXJuXG4gIGluc3RhbGxlZCA9IHRydWVcbiAgb3JpZ2luYWxGZXRjaCA9IHdpbmRvdy5mZXRjaC5iaW5kKHdpbmRvdylcblxuICBjb25zdCBiYXNlVXJsID0gcHJvY2Vzcy5lbnYuTUFJQV9VUkwgfHwgJydcblxuICB3aW5kb3cuZmV0Y2ggPSAoYXN5bmMgKGlucHV0OiBGZXRjaElucHV0LCBpbml0PzogRmV0Y2hJbml0KSA9PiB7XG4gICAgY29uc3QgdXJsID0gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/IGlucHV0IDogKGlucHV0IGFzIFJlcXVlc3QpLnVybFxuICAgIGNvbnN0IG1ldGhvZCA9IChpbml0Py5tZXRob2QgfHwgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgKGlucHV0IGFzIFJlcXVlc3QpLm1ldGhvZCkgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKClcbiAgICBjb25zdCBwYXRoID0gc3RyaXBCYXNlVXJsKHVybCwgYmFzZVVybClcblxuICAgIGlmIChwYXRoICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBib2R5ID0gcGFyc2VCb2R5KGluaXQpXG4gICAgICBjb25zdCBtYXRjaGVkID0gcmVzb2x2ZXJzLm1hcChyID0+IHIoeyBtZXRob2QsIHBhdGgsIGJvZHkgfSkpLmZpbmQoKHIpOiByIGlzIFJlc3BvbnNlID0+IHIgIT0gbnVsbClcbiAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW0RFViBtb2NrXSAke21ldGhvZH0gJHtwYXRofSDihpIgJHttYXRjaGVkLnN0YXR1c31gKVxuICAgICAgICByZXR1cm4gbWF0Y2hlZFxuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihgW0RFViBtb2NrXSAke21ldGhvZH0gJHtwYXRofSBubyB0aWVuZSBtb2NrIOKAlCBkZXZvbHZpZW5kbyAyMDAgdmFjw61vYClcbiAgICAgIHJldHVybiBqc29uUmVzcG9uc2Uoe30pXG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsRmV0Y2ggPyBvcmlnaW5hbEZldGNoKGlucHV0LCBpbml0KSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignZmV0Y2ggbm90IGF2YWlsYWJsZScpKVxuICB9KSBhcyB0eXBlb2Ygd2luZG93LmZldGNoXG59XG5cbmV4cG9ydCBjb25zdCB1bmluc3RhbGxBYm1Nb2RhbEZldGNoTW9ja3MgPSAoKSA9PiB7XG4gIGlmICghaW5zdGFsbGVkKSByZXR1cm5cbiAgaWYgKG9yaWdpbmFsRmV0Y2gpIHtcbiAgICB3aW5kb3cuZmV0Y2ggPSBvcmlnaW5hbEZldGNoXG4gIH1cbiAgb3JpZ2luYWxGZXRjaCA9IG51bGxcbiAgaW5zdGFsbGVkID0gZmFsc2Vcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFNQSxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSUMsSUFBYSxFQUF5RDtFQUFBLElBQXZEQyxJQUFzQixHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRztJQUFFRyxNQUFNLEVBQUU7RUFBSSxDQUFDO0VBQzNFLElBQU1BLE1BQU0sR0FBR0MsT0FBQSxDQUFPTCxJQUFJLE1BQUssUUFBUSxJQUFJQSxJQUFJLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSUEsSUFBSSxJQUFJQSxJQUFJLENBQUNJLE1BQU0sSUFBSSxJQUFJLEdBQUdKLElBQUksQ0FBQ0ksTUFBTSxHQUFHLEdBQUc7RUFDdEgsT0FBTyxJQUFJRSxRQUFRLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDVCxJQUFJLENBQUMsRUFBRTtJQUN4Q0ssTUFBTSxFQUFOQSxNQUFNO0lBQ05LLE9BQU8sRUFBRTtNQUFF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LE9BQUlBLENBQUMsQ0FBQztnQkFBRTNDLE1BQU0sRUFBTkEsTUFBTTtnQkFBRUMsSUFBSSxFQUFKQSxJQUFJO2dCQUFFckQsSUFBSSxFQUFKQTtjQUFLLENBQUMsQ0FBQztZQUFBLEVBQUMsQ0FBQ2dHLElBQUksQ0FBQyxVQUFDRCxDQUFDO2NBQUEsT0FBb0JBLENBQUMsSUFBSSxJQUFJO1lBQUEsRUFBQztZQUFBLEtBQy9GUCxPQUFPO2NBQUFFLFFBQUEsQ0FBQUUsSUFBQTtjQUFBO1lBQUE7WUFDVDtZQUNBSyxPQUFPLENBQUNDLElBQUksZUFBQWpFLE1BQUEsQ0FBZW1CLE1BQU0sT0FBQW5CLE1BQUEsQ0FBSW9CLElBQUksY0FBQXBCLE1BQUEsQ0FBTXVELE9BQU8sQ0FBQ25GLE1BQU0sQ0FBRSxDQUFDO1lBQUEsT0FBQXFGLFFBQUEsQ0FBQVMsTUFBQSxXQUN6RFgsT0FBTztVQUFBO1lBRWhCO1lBQ0FTLE9BQU8sQ0FBQ0csSUFBSSxlQUFBbkUsTUFBQSxDQUFlbUIsTUFBTSxPQUFBbkIsTUFBQSxDQUFJb0IsSUFBSSxtREFBd0MsQ0FBQztZQUFBLE9BQUFxQyxRQUFBLENBQUFTLE1BQUEsV0FDM0VwRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQTtZQUFBLE9BQUEyRixRQUFBLENBQUFTLE1BQUEsV0FHbEIxQixhQUFhLEdBQUdBLGFBQWEsQ0FBQ2MsS0FBSyxFQUFFdEYsSUFBSSxDQUFDLEdBQUdvRyxPQUFPLENBQUNDLE1BQU0sQ0FBQyxJQUFJQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBYixRQUFBLENBQUFjLElBQUE7UUFBQTtNQUFBLEdBQUFsQixPQUFBO0lBQUEsQ0FDckc7SUFBQSxpQkFBQW1CLEVBQUEsRUFBQUMsR0FBQTtNQUFBLE9BQUF4QixLQUFBLENBQUF5QixLQUFBLE9BQUF6RyxTQUFBO0lBQUE7RUFBQSxHQUF3QjtBQUMzQixDQUFDO0FBRUQsT0FBTyxJQUFNMEcsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBQSxFQUFTO0VBQy9DLElBQUksQ0FBQ2xDLFNBQVMsRUFBRTtFQUNoQixJQUFJRCxhQUFhLEVBQUU7SUFDakJHLE1BQU0sQ0FBQ0MsS0FBSyxHQUFHSixhQUFhO0VBQzlCO0VBQ0FBLGFBQWEsR0FBRyxJQUFJO0VBQ3BCQyxTQUFTLEdBQUcsS0FBSztBQUNuQixDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,228 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- import { useCallback, useEffect, useMemo, useState } from 'react';
6
- import { ContextMentionPopover, MAIA_TASK_PANEL_OVERLAY_ATTR, SCMPAnchor } from '../components/atoms/ContextMentionPopover';
7
- import { useMaiaTaskPanelZIndex } from './useMaiaTaskPanelZIndex';
8
- import { useGlobalContext } from '../context/global-context';
9
- import { useT } from './useT';
10
- // eslint-disable-next-line import/no-cycle
11
- import { useEntitySearch } from './useEntitySearch';
12
- import { jsx as _jsx } from "react/jsx-runtime";
13
- /** Tipos pineables como contexto persistente (RFC §6: no incluye `user`, que es solo mención). */
14
- var PIN_ALLOWED_TYPES = ['client', 'project', 'task'];
15
- var PIN_DEFAULT_TYPE = 'project';
16
- /**
17
- * Segundo punto de entrada del buscador de contexto (RFC §6): el mismo motor
18
- * (`useEntitySearch` + `ContextMentionPopover`) pero el commit fija un **pin**
19
- * persistente en el contexto global en vez de insertar una mención.
20
- *
21
- * Jerarquía mono-contexto (RFC §5.1): un pin a la vez; fijar uno reemplaza al
22
- * anterior y arrastra su scope hacia arriba (tarea ⇒ proyecto+cliente, etc.).
23
- */
24
- export var useContextPinPopover = function useContextPinPopover(_ref) {
25
- var popoverAnchorRef = _ref.popoverAnchorRef,
26
- topAnchorRef = _ref.topAnchorRef,
27
- triggerRef = _ref.triggerRef,
28
- enabledTypes = _ref.enabledTypes,
29
- onPinned = _ref.onPinned;
30
- var _useT = useT(),
31
- t = _useT.t;
32
- var _useGlobalContext = useGlobalContext(),
33
- setProject = _useGlobalContext.setProject,
34
- setClient = _useGlobalContext.setClient,
35
- setTask = _useGlobalContext.setTask,
36
- setChipsProject = _useGlobalContext.setChipsProject;
37
- var zIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
38
- var allowedTypes = enabledTypes && enabledTypes.length > 0 ? enabledTypes : PIN_ALLOWED_TYPES;
39
- var _useState = useState(allowedTypes.includes(PIN_DEFAULT_TYPE) ? PIN_DEFAULT_TYPE : allowedTypes[0]),
40
- _useState2 = _slicedToArray(_useState, 2),
41
- activeType = _useState2[0],
42
- setActiveType = _useState2[1];
43
- var _useState3 = useState(false),
44
- _useState4 = _slicedToArray(_useState3, 2),
45
- open = _useState4[0],
46
- setOpen = _useState4[1];
47
- var _useState5 = useState({
48
- bottom: 0,
49
- left: 0,
50
- width: 0
51
- }),
52
- _useState6 = _slicedToArray(_useState5, 2),
53
- pos = _useState6[0],
54
- setPos = _useState6[1];
55
-
56
- // Scope sin restricción: desde el botón se busca libremente cualquier entidad (modo global).
57
- var _useEntitySearch = useEntitySearch(activeType),
58
- items = _useEntitySearch.items,
59
- loading = _useEntitySearch.loading,
60
- error = _useEntitySearch.error,
61
- hideRecentsLabel = _useEntitySearch.hideRecentsLabel,
62
- hasMore = _useEntitySearch.hasMore,
63
- isLoadingMore = _useEntitySearch.isLoadingMore,
64
- loadMore = _useEntitySearch.loadMore,
65
- searchValue = _useEntitySearch.searchValue,
66
- updateSearchValue = _useEntitySearch.updateSearchValue;
67
- var positionPopover = useCallback(function () {
68
- var _popoverAnchorRef$cur, _topAnchorRef$current, _topRect$top;
69
- var inputRect = (_popoverAnchorRef$cur = popoverAnchorRef.current) === null || _popoverAnchorRef$cur === void 0 ? void 0 : _popoverAnchorRef$cur.getBoundingClientRect();
70
- if (!inputRect || inputRect.width <= 0) return;
71
- var topRect = topAnchorRef === null || topAnchorRef === void 0 || (_topAnchorRef$current = topAnchorRef.current) === null || _topAnchorRef$current === void 0 ? void 0 : _topAnchorRef$current.getBoundingClientRect();
72
- var anchorTop = (_topRect$top = topRect === null || topRect === void 0 ? void 0 : topRect.top) !== null && _topRect$top !== void 0 ? _topRect$top : inputRect.top;
73
- var viewportW = window.innerWidth;
74
- var viewportH = window.innerHeight;
75
- var width = inputRect.width;
76
- var left = Math.max(8, Math.min(viewportW - width - 8, inputRect.left));
77
- /** ~4px sobre el borde superior de la barra de contexto (chip), no del input. */
78
- setPos({
79
- width: width,
80
- left: left,
81
- bottom: viewportH - anchorTop + 4
82
- });
83
- }, [popoverAnchorRef, topAnchorRef]);
84
- var close = useCallback(function () {
85
- setOpen(false);
86
- updateSearchValue('');
87
- }, [updateSearchValue]);
88
- var toggle = useCallback(function () {
89
- setOpen(function (prev) {
90
- if (prev) {
91
- updateSearchValue('');
92
- return false;
93
- }
94
- positionPopover();
95
- return true;
96
- });
97
- }, [positionPopover, updateSearchValue]);
98
- var commitPin = useCallback(function (item) {
99
- var _raw$clientName;
100
- var raw = item.raw;
101
- var clientId = raw.clientId != null ? Number(raw.clientId) : undefined;
102
- var clientName = (_raw$clientName = raw.clientName) !== null && _raw$clientName !== void 0 ? _raw$clientName : undefined;
103
- if (item.type === 'client') {
104
- var _raw$totalProyectos;
105
- setProject(null);
106
- setTask(null);
107
- setChipsProject(null);
108
- setClient({
109
- id: Number(raw.id),
110
- name: raw.name,
111
- totalProyectos: (_raw$totalProyectos = raw.totalProyectos) !== null && _raw$totalProyectos !== void 0 ? _raw$totalProyectos : undefined
112
- });
113
- } else if (item.type === 'project') {
114
- setTask(null);
115
- setProject(_objectSpread(_objectSpread(_objectSpread({
116
- id: Number(raw.id),
117
- name: raw.name
118
- }, clientId != null ? {
119
- clientId: clientId
120
- } : {}), raw.feeId != null ? {
121
- feeId: raw.feeId
122
- } : {}), clientId != null ? {
123
- client: {
124
- id: clientId,
125
- name: clientName !== null && clientName !== void 0 ? clientName : ''
126
- }
127
- } : {}));
128
- // chipsProject hace visible el pin en el chip del orquestador (RFC §7).
129
- setChipsProject({
130
- projectId: String(raw.id),
131
- projectName: raw.name,
132
- clientName: clientName !== null && clientName !== void 0 ? clientName : ''
133
- });
134
- setClient(clientId != null ? {
135
- id: clientId,
136
- name: clientName !== null && clientName !== void 0 ? clientName : ''
137
- } : null);
138
- } else if (item.type === 'task') {
139
- // El item de tarea no trae projectId fiable; subimos lo disponible (proyecto por nombre, cliente por id).
140
- setTask(_objectSpread({
141
- id: raw.id,
142
- name: raw.name
143
- }, clientId != null ? {
144
- clientId: clientId
145
- } : {}));
146
- setChipsProject(raw.projectName ? {
147
- projectId: '',
148
- projectName: raw.projectName,
149
- clientName: clientName !== null && clientName !== void 0 ? clientName : ''
150
- } : null);
151
- if (clientId != null) setClient({
152
- id: clientId,
153
- name: clientName !== null && clientName !== void 0 ? clientName : ''
154
- });
155
- }
156
- onPinned === null || onPinned === void 0 || onPinned(item);
157
- close();
158
- }, [setProject, setClient, setTask, setChipsProject, onPinned, close]);
159
- useEffect(function () {
160
- if (!open) return undefined;
161
- var handler = function handler() {
162
- return positionPopover();
163
- };
164
- window.addEventListener('scroll', handler, true);
165
- window.addEventListener('resize', handler);
166
- return function () {
167
- window.removeEventListener('scroll', handler, true);
168
- window.removeEventListener('resize', handler);
169
- };
170
- }, [open, positionPopover]);
171
- useEffect(function () {
172
- if (!open) return undefined;
173
- var handlePointerDownOutside = function handlePointerDownOutside(mouseEvent) {
174
- var _popoverAnchorRef$cur2, _triggerRef$current, _closest, _ref2;
175
- var target = mouseEvent.target;
176
- if (!target) return;
177
- if ((_popoverAnchorRef$cur2 = popoverAnchorRef.current) !== null && _popoverAnchorRef$cur2 !== void 0 && _popoverAnchorRef$cur2.contains(target)) return;
178
- if (triggerRef !== null && triggerRef !== void 0 && (_triggerRef$current = triggerRef.current) !== null && _triggerRef$current !== void 0 && _triggerRef$current.contains(target)) return;
179
- var overlay = target === null || target === void 0 || (_closest = (_ref2 = target).closest) === null || _closest === void 0 ? void 0 : _closest.call(_ref2, "[".concat(MAIA_TASK_PANEL_OVERLAY_ATTR, "]"));
180
- if (overlay) return;
181
- close();
182
- };
183
- document.addEventListener('mousedown', handlePointerDownOutside);
184
- return function () {
185
- return document.removeEventListener('mousedown', handlePointerDownOutside);
186
- };
187
- }, [open, close, popoverAnchorRef, triggerRef]);
188
- var popoverNode = useMemo(function () {
189
- if (!open) return null;
190
- return /*#__PURE__*/_jsx(SCMPAnchor, _objectSpread(_objectSpread({}, _defineProperty({}, MAIA_TASK_PANEL_OVERLAY_ATTR, '')), {}, {
191
- $bottom: pos.bottom,
192
- $left: pos.left,
193
- $width: pos.width,
194
- $zIndex: zIndex,
195
- onMouseDown: function onMouseDown(e) {
196
- return e.stopPropagation();
197
- },
198
- children: /*#__PURE__*/_jsx(ContextMentionPopover, {
199
- allowedTypes: allowedTypes,
200
- activeType: activeType,
201
- onTypeChange: setActiveType,
202
- items: items,
203
- loading: loading,
204
- error: error,
205
- hideRecentsLabel: hideRecentsLabel,
206
- hasMore: hasMore,
207
- isLoadingMore: isLoadingMore,
208
- onReachListEnd: loadMore,
209
- searchValue: searchValue,
210
- onItemSelected: commitPin,
211
- showSearchInput: true,
212
- hideTabPrefix: true,
213
- searchPlaceholder: t('contextPin.searchPlaceholder', {
214
- defaultValue: 'Buscar contexto…'
215
- }),
216
- onSearchChange: updateSearchValue,
217
- onRequestClose: close
218
- })
219
- }));
220
- }, [open, pos, zIndex, allowedTypes, activeType, items, loading, error, hideRecentsLabel, hasMore, isLoadingMore, loadMore, searchValue, commitPin, updateSearchValue, close, t]);
221
- return {
222
- open: open,
223
- toggle: toggle,
224
- close: close,
225
- popoverNode: popoverNode
226
- };
227
- };
228
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwianN4IiwiX2pzeCIsIlBJTl9BTExPV0VEX1RZUEVTIiwiUElOX0RFRkFVTFRfVFlQRSIsInVzZUNvbnRleHRQaW5Qb3BvdmVyIiwiX3JlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJ0b3BBbmNob3JSZWYiLCJ0cmlnZ2VyUmVmIiwiZW5hYmxlZFR5cGVzIiwib25QaW5uZWQiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwic2V0Q2hpcHNQcm9qZWN0IiwiekluZGV4IiwiYWxsb3dlZFR5cGVzIiwibGVuZ3RoIiwiX3VzZVN0YXRlIiwiaW5jbHVkZXMiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib3BlbiIsInNldE9wZW4iLCJfdXNlU3RhdGU1IiwiYm90dG9tIiwibGVmdCIsIndpZHRoIiwiX3VzZVN0YXRlNiIsInBvcyIsInNldFBvcyIsIl91c2VFbnRpdHlTZWFyY2giLCJpdGVtcyIsImxvYWRpbmciLCJlcnJvciIsImhpZGVSZWNlbnRzTGFiZWwiLCJoYXNNb3JlIiwiaXNMb2FkaW5nTW9yZSIsImxvYWRNb3JlIiwic2VhcmNoVmFsdWUiLCJ1cGRhdGVTZWFyY2hWYWx1ZSIsInBvc2l0aW9uUG9wb3ZlciIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1ciIsIl90b3BBbmNob3JSZWYkY3VycmVudCIsIl90b3BSZWN0JHRvcCIsImlucHV0UmVjdCIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3BSZWN0IiwiYW5jaG9yVG9wIiwidG9wIiwidmlld3BvcnRXIiwid2luZG93IiwiaW5uZXJXaWR0aCIsInZpZXdwb3J0SCIsImlubmVySGVpZ2h0IiwiTWF0aCIsIm1heCIsIm1pbiIsImNsb3NlIiwidG9nZ2xlIiwicHJldiIsImNvbW1pdFBpbiIsIml0ZW0iLCJfcmF3JGNsaWVudE5hbWUiLCJyYXciLCJjbGllbnRJZCIsIk51bWJlciIsInVuZGVmaW5lZCIsImNsaWVudE5hbWUiLCJ0eXBlIiwiX3JhdyR0b3RhbFByb3llY3RvcyIsImlkIiwibmFtZSIsInRvdGFsUHJveWVjdG9zIiwiX29iamVjdFNwcmVhZCIsImZlZUlkIiwiY2xpZW50IiwicHJvamVjdElkIiwiU3RyaW5nIiwicHJvamVjdE5hbWUiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVQb2ludGVyRG93bk91dHNpZGUiLCJtb3VzZUV2ZW50IiwiX3BvcG92ZXJBbmNob3JSZWYkY3VyMiIsIl90cmlnZ2VyUmVmJGN1cnJlbnQiLCJfY2xvc2VzdCIsIl9yZWYyIiwidGFyZ2V0IiwiY29udGFpbnMiLCJvdmVybGF5IiwiY2xvc2VzdCIsImNhbGwiLCJjb25jYXQiLCJkb2N1bWVudCIsInBvcG92ZXJOb2RlIiwiX2RlZmluZVByb3BlcnR5IiwiJGJvdHRvbSIsIiRsZWZ0IiwiJHdpZHRoIiwiJHpJbmRleCIsIm9uTW91c2VEb3duIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImNoaWxkcmVuIiwib25UeXBlQ2hhbmdlIiwib25SZWFjaExpc3RFbmQiLCJvbkl0ZW1TZWxlY3RlZCIsInNob3dTZWFyY2hJbnB1dCIsImhpZGVUYWJQcmVmaXgiLCJzZWFyY2hQbGFjZWhvbGRlciIsImRlZmF1bHRWYWx1ZSIsIm9uU2VhcmNoQ2hhbmdlIiwib25SZXF1ZXN0Q2xvc2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlQ29udGV4dFBpblBvcG92ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtcbiAgQ29udGV4dE1lbnRpb25Qb3BvdmVyLFxuICBNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSLFxuICBTQ01QQW5jaG9yLFxufSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuL3VzZVQnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQgeyB1c2VFbnRpdHlTZWFyY2ggfSBmcm9tICcuL3VzZUVudGl0eVNlYXJjaCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbkl0ZW0gfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcblxuLyoqIFRpcG9zIHBpbmVhYmxlcyBjb21vIGNvbnRleHRvIHBlcnNpc3RlbnRlIChSRkMgwqc2OiBubyBpbmNsdXllIGB1c2VyYCwgcXVlIGVzIHNvbG8gbWVuY2nDs24pLiAqL1xuY29uc3QgUElOX0FMTE9XRURfVFlQRVM6IENvbnRleHRFbnRpdHlUeXBlW10gPSBbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snXVxuY29uc3QgUElOX0RFRkFVTFRfVFlQRTogQ29udGV4dEVudGl0eVR5cGUgPSAncHJvamVjdCdcblxuZXhwb3J0IHR5cGUgVXNlQ29udGV4dFBpblBvcG92ZXJPcHRpb25zID0ge1xuICAvKiogV3JhcHBlciBkZWwgTUFJQUlucHV0OiBkZWZpbmUgYW5jaG8geSBhbGluZWFjacOzbiBob3Jpem9udGFsIChpZ3VhbCBxdWUgQC1tZW50aW9ucykuICovXG4gIHBvcG92ZXJBbmNob3JSZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG4gIC8qKiBGaWxhIGRlbCBjaGlwIC8gYmFycmEgZGUgY29udGV4dG86IGRlZmluZSBlbCBib3JkZSBzdXBlcmlvciB2ZXJ0aWNhbCBkZWwgcG9wb3Zlci4gKi9cbiAgdG9wQW5jaG9yUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIEJvdMOzbiBcIisgQ29udGV4dG9cIjsgbm8gY2VycmFyIGFsIGhhY2VyIGNsaWNrIGVuIGVsIHRyaWdnZXIuICovXG4gIHRyaWdnZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICAvKiogT3ZlcnJpZGUgZGVsIHNldCBkZSB0YWJzIHBpbmVhYmxlczsgcG9yIGRlZmVjdG8gY2xpZW50ZS9wcm95ZWN0by90YXJlYS4gKi9cbiAgZW5hYmxlZFR5cGVzPzogQ29udGV4dEVudGl0eVR5cGVbXVxuICAvKiogQ2FsbGJhY2sgdHJhcyBmaWphciB1biBjb250ZXh0byAoYW5hbHl0aWNzIC8gY2llcnJlIGV4dGVybm8pLiAqL1xuICBvblBpbm5lZD86IChpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW0pID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgVXNlQ29udGV4dFBpblBvcG92ZXJSZXR1cm4gPSB7XG4gIG9wZW46IGJvb2xlYW5cbiAgLyoqIEFicmUvY2llcnJhIGVsIHBvcG92ZXIgKGhhbmRsZXIgZGVsIGJvdMOzbiBcIisgQ29udGV4dG9cIikuICovXG4gIHRvZ2dsZTogKCkgPT4gdm9pZFxuICBjbG9zZTogKCkgPT4gdm9pZFxuICAvKiogTm9kbyBkZWwgcG9wb3ZlcjsgZWwgY29uc3VtZXIgZGViZSBwb3J0YXJsbyBjb24gYGNyZWF0ZVBvcnRhbGAuICovXG4gIHBvcG92ZXJOb2RlOiBSZWFjdE5vZGUgfCBudWxsXG59XG5cbi8qKlxuICogU2VndW5kbyBwdW50byBkZSBlbnRyYWRhIGRlbCBidXNjYWRvciBkZSBjb250ZXh0byAoUkZDIMKnNik6IGVsIG1pc21vIG1vdG9yXG4gKiAoYHVzZUVudGl0eVNlYXJjaGAgKyBgQ29udGV4dE1lbnRpb25Qb3BvdmVyYCkgcGVybyBlbCBjb21taXQgZmlqYSB1biAqKnBpbioqXG4gKiBwZXJzaXN0ZW50ZSBlbiBlbCBjb250ZXh0byBnbG9iYWwgZW4gdmV6IGRlIGluc2VydGFyIHVuYSBtZW5jacOzbi5cbiAqXG4gKiBKZXJhcnF1w61hIG1vbm8tY29udGV4dG8gKFJGQyDCpzUuMSk6IHVuIHBpbiBhIGxhIHZlejsgZmlqYXIgdW5vIHJlZW1wbGF6YSBhbFxuICogYW50ZXJpb3IgeSBhcnJhc3RyYSBzdSBzY29wZSBoYWNpYSBhcnJpYmEgKHRhcmVhIOKHkiBwcm95ZWN0bytjbGllbnRlLCBldGMuKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUNvbnRleHRQaW5Qb3BvdmVyID0gKHtcbiAgcG9wb3ZlckFuY2hvclJlZixcbiAgdG9wQW5jaG9yUmVmLFxuICB0cmlnZ2VyUmVmLFxuICBlbmFibGVkVHlwZXMsXG4gIG9uUGlubmVkLFxufTogVXNlQ29udGV4dFBpblBvcG92ZXJPcHRpb25zKTogVXNlQ29udGV4dFBpblBvcG92ZXJSZXR1cm4gPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgekluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMjAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3QgYWxsb3dlZFR5cGVzID0gZW5hYmxlZFR5cGVzICYmIGVuYWJsZWRUeXBlcy5sZW5ndGggPiAwID8gZW5hYmxlZFR5cGVzIDogUElOX0FMTE9XRURfVFlQRVNcbiAgY29uc3QgW2FjdGl2ZVR5cGUsIHNldEFjdGl2ZVR5cGVdID0gdXNlU3RhdGU8Q29udGV4dEVudGl0eVR5cGU+KFxuICAgIGFsbG93ZWRUeXBlcy5pbmNsdWRlcyhQSU5fREVGQVVMVF9UWVBFKSA/IFBJTl9ERUZBVUxUX1RZUEUgOiBhbGxvd2VkVHlwZXNbMF1cbiAgKVxuICBjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Bvcywgc2V0UG9zXSA9IHVzZVN0YXRlPHsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9Pih7IGJvdHRvbTogMCwgbGVmdDogMCwgd2lkdGg6IDAgfSlcblxuICAvLyBTY29wZSBzaW4gcmVzdHJpY2Npw7NuOiBkZXNkZSBlbCBib3TDs24gc2UgYnVzY2EgbGlicmVtZW50ZSBjdWFscXVpZXIgZW50aWRhZCAobW9kbyBnbG9iYWwpLlxuICBjb25zdCB7IGl0ZW1zLCBsb2FkaW5nLCBlcnJvciwgaGlkZVJlY2VudHNMYWJlbCwgaGFzTW9yZSwgaXNMb2FkaW5nTW9yZSwgbG9hZE1vcmUsIHNlYXJjaFZhbHVlLCB1cGRhdGVTZWFyY2hWYWx1ZSB9ID1cbiAgICB1c2VFbnRpdHlTZWFyY2goYWN0aXZlVHlwZSlcblxuICBjb25zdCBwb3NpdGlvblBvcG92ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgaW5wdXRSZWN0ID0gcG9wb3ZlckFuY2hvclJlZi5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGlmICghaW5wdXRSZWN0IHx8IGlucHV0UmVjdC53aWR0aCA8PSAwKSByZXR1cm5cbiAgICBjb25zdCB0b3BSZWN0ID0gdG9wQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGFuY2hvclRvcCA9IHRvcFJlY3Q/LnRvcCA/PyBpbnB1dFJlY3QudG9wXG4gICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICBjb25zdCB2aWV3cG9ydEggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBjb25zdCB7IHdpZHRoIH0gPSBpbnB1dFJlY3RcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoOCwgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSA4LCBpbnB1dFJlY3QubGVmdCkpXG4gICAgLyoqIH40cHggc29icmUgZWwgYm9yZGUgc3VwZXJpb3IgZGUgbGEgYmFycmEgZGUgY29udGV4dG8gKGNoaXApLCBubyBkZWwgaW5wdXQuICovXG4gICAgc2V0UG9zKHsgd2lkdGgsIGxlZnQsIGJvdHRvbTogdmlld3BvcnRIIC0gYW5jaG9yVG9wICsgNCB9KVxuICB9LCBbcG9wb3ZlckFuY2hvclJlZiwgdG9wQW5jaG9yUmVmXSlcblxuICBjb25zdCBjbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRPcGVuKGZhbHNlKVxuICAgIHVwZGF0ZVNlYXJjaFZhbHVlKCcnKVxuICB9LCBbdXBkYXRlU2VhcmNoVmFsdWVdKVxuXG4gIGNvbnN0IHRvZ2dsZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRPcGVuKHByZXYgPT4ge1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgcG9zaXRpb25Qb3BvdmVyKClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSlcbiAgfSwgW3Bvc2l0aW9uUG9wb3ZlciwgdXBkYXRlU2VhcmNoVmFsdWVdKVxuXG4gIGNvbnN0IGNvbW1pdFBpbiA9IHVzZUNhbGxiYWNrKFxuICAgIChpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHsgcmF3IH0gPSBpdGVtXG4gICAgICBjb25zdCBjbGllbnRJZCA9IHJhdy5jbGllbnRJZCAhPSBudWxsID8gTnVtYmVyKHJhdy5jbGllbnRJZCkgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSByYXcuY2xpZW50TmFtZSA/PyB1bmRlZmluZWRcblxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICBzZXRUYXNrKG51bGwpXG4gICAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgICBzZXRDbGllbnQoeyBpZDogTnVtYmVyKHJhdy5pZCksIG5hbWU6IHJhdy5uYW1lLCB0b3RhbFByb3llY3RvczogcmF3LnRvdGFsUHJveWVjdG9zID8/IHVuZGVmaW5lZCB9KVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBzZXRUYXNrKG51bGwpXG4gICAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICAgIGlkOiBOdW1iZXIocmF3LmlkKSxcbiAgICAgICAgICBuYW1lOiByYXcubmFtZSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocmF3LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiByYXcuZmVlSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50OiB7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSA/PyAnJyB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIC8vIGNoaXBzUHJvamVjdCBoYWNlIHZpc2libGUgZWwgcGluIGVuIGVsIGNoaXAgZGVsIG9ycXVlc3RhZG9yIChSRkMgwqc3KS5cbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocmF3LmlkKSwgcHJvamVjdE5hbWU6IHJhdy5uYW1lLCBjbGllbnROYW1lOiBjbGllbnROYW1lID8/ICcnIH0pXG4gICAgICAgIHNldENsaWVudChjbGllbnRJZCAhPSBudWxsID8geyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgPz8gJycgfSA6IG51bGwpXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIC8vIEVsIGl0ZW0gZGUgdGFyZWEgbm8gdHJhZSBwcm9qZWN0SWQgZmlhYmxlOyBzdWJpbW9zIGxvIGRpc3BvbmlibGUgKHByb3llY3RvIHBvciBub21icmUsIGNsaWVudGUgcG9yIGlkKS5cbiAgICAgICAgc2V0VGFzayh7IGlkOiByYXcuaWQsIG5hbWU6IHJhdy5uYW1lLCAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QoXG4gICAgICAgICAgcmF3LnByb2plY3ROYW1lID8geyBwcm9qZWN0SWQ6ICcnLCBwcm9qZWN0TmFtZTogcmF3LnByb2plY3ROYW1lLCBjbGllbnROYW1lOiBjbGllbnROYW1lID8/ICcnIH0gOiBudWxsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGNsaWVudElkICE9IG51bGwpIHNldENsaWVudCh7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSA/PyAnJyB9KVxuICAgICAgfVxuXG4gICAgICBvblBpbm5lZD8uKGl0ZW0pXG4gICAgICBjbG9zZSgpXG4gICAgfSxcbiAgICBbc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QsIG9uUGlubmVkLCBjbG9zZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHBvc2l0aW9uUG9wb3ZlcigpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZXIsIHRydWUpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZXIpXG4gICAgfVxuICB9LCBbb3BlbiwgcG9zaXRpb25Qb3BvdmVyXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSA9IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBtb3VzZUV2ZW50LnRhcmdldCBhcyBOb2RlIHwgbnVsbFxuICAgICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgICAgaWYgKHBvcG92ZXJBbmNob3JSZWYuY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuXG4gICAgICBpZiAodHJpZ2dlclJlZj8uY3VycmVudD8uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuXG4gICAgICBjb25zdCBvdmVybGF5ID0gKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGBbJHtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSfV1gKVxuICAgICAgaWYgKG92ZXJsYXkpIHJldHVyblxuICAgICAgY2xvc2UoKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW29wZW4sIGNsb3NlLCBwb3BvdmVyQW5jaG9yUmVmLCB0cmlnZ2VyUmVmXSlcblxuICBjb25zdCBwb3BvdmVyTm9kZSA9IHVzZU1lbW88UmVhY3ROb2RlIHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPFNDTVBBbmNob3JcbiAgICAgICAgey4uLnsgW01BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFJdOiAnJyB9fVxuICAgICAgICAkYm90dG9tPXtwb3MuYm90dG9tfVxuICAgICAgICAkbGVmdD17cG9zLmxlZnR9XG4gICAgICAgICR3aWR0aD17cG9zLndpZHRofVxuICAgICAgICAkekluZGV4PXt6SW5kZXh9XG4gICAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICA+XG4gICAgICAgIDxDb250ZXh0TWVudGlvblBvcG92ZXJcbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17c2V0QWN0aXZlVHlwZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgaGlkZVJlY2VudHNMYWJlbD17aGlkZVJlY2VudHNMYWJlbH1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgICAgb25SZWFjaExpc3RFbmQ9e2xvYWRNb3JlfVxuICAgICAgICAgIHNlYXJjaFZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICBvbkl0ZW1TZWxlY3RlZD17Y29tbWl0UGlufVxuICAgICAgICAgIHNob3dTZWFyY2hJbnB1dFxuICAgICAgICAgIGhpZGVUYWJQcmVmaXhcbiAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcj17dCgnY29udGV4dFBpbi5zZWFyY2hQbGFjZWhvbGRlcicsIHsgZGVmYXVsdFZhbHVlOiAnQnVzY2FyIGNvbnRleHRv4oCmJyB9KX1cbiAgICAgICAgICBvblNlYXJjaENoYW5nZT17dXBkYXRlU2VhcmNoVmFsdWV9XG4gICAgICAgICAgb25SZXF1ZXN0Q2xvc2U9e2Nsb3NlfVxuICAgICAgICAvPlxuICAgICAgPC9TQ01QQW5jaG9yPlxuICAgIClcbiAgfSwgW1xuICAgIG9wZW4sXG4gICAgcG9zLFxuICAgIHpJbmRleCxcbiAgICBhbGxvd2VkVHlwZXMsXG4gICAgYWN0aXZlVHlwZSxcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGhpZGVSZWNlbnRzTGFiZWwsXG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGxvYWRNb3JlLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIGNvbW1pdFBpbixcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZSxcbiAgICBjbG9zZSxcbiAgICB0LFxuICBdKVxuXG4gIHJldHVybiB7IG9wZW4sIHRvZ2dsZSwgY2xvc2UsIHBvcG92ZXJOb2RlIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQStCQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN2RixTQUNFQyxxQkFBcUIsRUFDckJDLDRCQUE0QixFQUM1QkMsVUFBVSxRQUNMLDJDQUEyQztBQUNsRCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FBQzVELFNBQVNDLElBQUksUUFBUSxRQUFRO0FBQzdCO0FBQ0EsU0FBU0MsZUFBZSxRQUFRLG1CQUFtQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQTtBQUduRDtBQUNBLElBQU1DLGlCQUFzQyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7QUFDNUUsSUFBTUMsZ0JBQW1DLEdBQUcsU0FBUztBQXdCckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBQUMsSUFBQSxFQU04QjtFQUFBLElBTDdEQyxnQkFBZ0IsR0FBQUQsSUFBQSxDQUFoQkMsZ0JBQWdCO0lBQ2hCQyxZ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QUFBLGFBQUEsS0FBQXVCLGVBQUEsS0FDRi9HLDRCQUE0QixFQUFHLEVBQUU7TUFDeENnSCxPQUFPLEVBQUV0RSxHQUFHLENBQUNKLE1BQU87TUFDcEIyRSxLQUFLLEVBQUV2RSxHQUFHLENBQUNILElBQUs7TUFDaEIyRSxNQUFNLEVBQUV4RSxHQUFHLENBQUNGLEtBQU07TUFDbEIyRSxPQUFPLEVBQUUzRixNQUFPO01BQ2hCNEYsV0FBVyxFQUFFLFNBQWJBLFdBQVdBLENBQUVDLENBQUM7UUFBQSxPQUFJQSxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUFBQyxRQUFBLGVBRXRDaEgsSUFBQSxDQUFDUixxQkFBcUI7UUFDcEIwQixZQUFZLEVBQUVBLFlBQWE7UUFDM0JNLFVBQVUsRUFBRUEsVUFBVztRQUN2QnlGLFlBQVksRUFBRXhGLGFBQWM7UUFDNUJhLEtBQUssRUFBRUEsS0FBTTtRQUNiQyxPQUFPLEVBQUVBLE9BQVE7UUFDakJDLEtBQUssRUFBRUEsS0FBTTtRQUNiQyxnQkFBZ0IsRUFBRUEsZ0JBQWlCO1FBQ25DQyxPQUFPLEVBQUVBLE9BQVE7UUFDakJDLGFBQWEsRUFBRUEsYUFBYztRQUM3QnVFLGNBQWMsRUFBRXRFLFFBQVM7UUFDekJDLFdBQVcsRUFBRUEsV0FBWTtRQUN6QnNFLGNBQWMsRUFBRS9DLFNBQVU7UUFDMUJnRCxlQUFlO1FBQ2ZDLGFBQWE7UUFDYkMsaUJBQWlCLEVBQUUzRyxDQUFDLENBQUMsOEJBQThCLEVBQUU7VUFBRTRHLFlBQVksRUFBRTtRQUFtQixDQUFDLENBQUU7UUFDM0ZDLGNBQWMsRUFBRTFFLGlCQUFrQjtRQUNsQzJFLGNBQWMsRUFBRXhEO01BQU0sQ0FDdkI7SUFBQyxFQUNRLENBQUM7RUFFakIsQ0FBQyxFQUFFLENBQ0RyQyxJQUFJLEVBQ0pPLEdBQUcsRUFDSGxCLE1BQU0sRUFDTkMsWUFBWSxFQUNaTSxVQUFVLEVBQ1ZjLEtBQUssRUFDTEMsT0FBTyxFQUNQQyxLQUFLLEVBQ0xDLGdCQUFnQixFQUNoQkMsT0FBTyxFQUNQQyxhQUFhLEVBQ2JDLFFBQVEsRUFDUkMsV0FBVyxFQUNYdUIsU0FBUyxFQUNUdEIsaUJBQWlCLEVBQ2pCbUIsS0FBSyxFQUNMdEQsQ0FBQyxDQUNGLENBQUM7RUFFRixPQUFPO0lBQUVpQixJQUFJLEVBQUpBLElBQUk7SUFBRXNDLE1BQU0sRUFBTkEsTUFBTTtJQUFFRCxLQUFLLEVBQUxBLEtBQUs7SUFBRXNDLFdBQVcsRUFBWEE7RUFBWSxDQUFDO0FBQzdDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=