@projectcor/maia-components 2.35.3 → 2.35.4-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 (210) hide show
  1. package/CHANGELOG.md +727 -0
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +63 -4
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  4. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +16 -4
  5. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  6. package/lib/components/atoms/Chip/Chip.spec.js +32 -0
  7. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  8. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
  9. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
  10. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  11. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  12. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
  13. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  14. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +4 -20
  15. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -18
  16. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  17. package/lib/components/atoms/MAIAInput/MAIAInput.js +243 -42
  18. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +283 -0
  19. package/lib/components/atoms/MAIAInput/styles.js +41 -44
  20. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +68 -0
  21. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
  22. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  23. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -0
  24. package/lib/components/atoms/SkillsDropdown/index.js +2 -0
  25. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  26. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  27. package/lib/components/atoms/icons/PlusIcon.js +29 -0
  28. package/lib/components/atoms/icons/SkillCreatedByIcon.js +20 -0
  29. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
  30. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
  31. package/lib/components/atoms/icons/SkillsNavIcon.js +4 -7
  32. package/lib/components/atoms/icons/index.js +5 -1
  33. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +34 -11
  34. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +77 -0
  35. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
  36. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +5 -16
  37. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +2 -23
  38. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +5 -33
  39. package/lib/components/molecules/ChatAIHome/styles.js +2 -11
  40. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +20 -31
  41. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  42. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +3 -3
  43. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +291 -0
  44. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +59 -20
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +1 -8
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +9 -15
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +3 -14
  50. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
  51. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +11 -17
  52. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -14
  53. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  54. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +2 -12
  55. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
  56. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +333 -242
  57. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  58. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +131 -104
  59. package/lib/components/molecules/ChatFooter/ChatFooter.js +57 -63
  60. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +105 -0
  61. package/lib/components/molecules/ChatFooter/styles.js +6 -12
  62. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  63. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  64. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  65. package/lib/components/molecules/Sidebar/Sidebar.js +13 -6
  66. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
  67. package/lib/components/molecules/Sidebar/Sidebar.spec.js +183 -0
  68. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +30 -46
  69. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +335 -0
  70. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +8 -1
  71. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +430 -184
  72. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +293 -0
  73. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +132 -72
  74. package/lib/components/organisms/ChatAI/ChatAI.js +1 -6
  75. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  76. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  77. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  78. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  79. package/lib/constants/config.js +1 -4
  80. package/lib/constants/permissions/utils.js +3 -3
  81. package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
  82. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +95 -0
  83. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
  84. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +96 -0
  85. package/lib/hooks/useCaretPosition.spec.js +58 -0
  86. package/lib/hooks/useChatManager/useChatManager.js +12 -19
  87. package/lib/hooks/useContextMentions.js +96 -56
  88. package/lib/hooks/useDebounce.spec.js +42 -0
  89. package/lib/hooks/useEntitySearch.js +92 -278
  90. package/lib/hooks/useEvent.js +15 -2
  91. package/lib/hooks/useEvent.spec.js +40 -0
  92. package/lib/hooks/useMentionAllowedTypes.js +9 -25
  93. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  94. package/lib/hooks/useMentionPopover.js +9 -33
  95. package/lib/hooks/useModal/useModal.spec.js +73 -0
  96. package/lib/hooks/useResize.spec.js +37 -0
  97. package/lib/hooks/useSkillsCatalog.js +66 -0
  98. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  99. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  100. package/lib/hooks/useT.spec.js +20 -0
  101. package/lib/hooks/useToggle.spec.js +33 -0
  102. package/lib/lang/br/index.js +39 -12
  103. package/lib/lang/en/index.js +39 -12
  104. package/lib/lang/es/index.js +40 -13
  105. package/lib/lang/fr/index.js +40 -13
  106. package/lib/services/maia/Access/updateAccess.spec.js +108 -0
  107. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +69 -0
  108. package/lib/services/maia/Actions/getSlashCommands.spec.js +74 -0
  109. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  110. package/lib/services/maia/Agents/deleteAgent.spec.js +42 -0
  111. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  112. package/lib/services/maia/Agents/getAgentById.spec.js +55 -0
  113. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +82 -0
  114. package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
  115. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  116. package/lib/services/maia/Agents/toggleFavorite.spec.js +47 -0
  117. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  118. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  119. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  120. package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
  121. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  122. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  123. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  124. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  125. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  126. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  127. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  128. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  129. package/lib/services/maia/Orchestrator/orchestrator.js +16 -7
  130. package/lib/services/maia/Orchestrator/orchestrator.spec.js +72 -0
  131. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  132. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +83 -0
  133. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  134. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  135. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  136. package/lib/services/maia/Skills/createSkill.js +1 -1
  137. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  138. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  139. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  140. package/lib/services/maia/Skills/getSkills.js +70 -40
  141. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  142. package/lib/services/maia/Skills/updateSkill.js +1 -1
  143. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  144. package/lib/services/maia/client.spec.js +56 -0
  145. package/lib/services/maia/index.js +2 -4
  146. package/lib/services/utils/fetchCOR.js +57 -106
  147. package/lib/services/utils/fetchCOR.spec.js +211 -0
  148. package/lib/services/utils/getCookie.spec.js +20 -0
  149. package/lib/services/utils/index.js +1 -2
  150. package/lib/store/chatsSidebarOptimistic.spec.js +120 -0
  151. package/lib/store/faqsStore.types.js +1 -1
  152. package/lib/store/index.js +1 -2
  153. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  154. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  155. package/lib/store/sessions/sessionStreamManager.js +7 -24
  156. package/lib/store/sessions/sessions.types.spec.js +16 -0
  157. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  158. package/lib/store/useChatsStore.js +3 -3
  159. package/lib/store/useChatsStore.spec.js +619 -0
  160. package/lib/store/useFaqsStore.spec.js +57 -0
  161. package/lib/test/buttonMock.js +22 -0
  162. package/lib/test/fetchPolyfill.js +160 -0
  163. package/lib/test/fileMock.js +2 -0
  164. package/lib/test/global-context.js +49 -0
  165. package/lib/test/iconMock.js +19 -0
  166. package/lib/test/mockFetch.js +49 -0
  167. package/lib/test/portalRoot.js +13 -0
  168. package/lib/test/styleMock.js +2 -0
  169. package/lib/test/test-utils.js +26 -0
  170. package/lib/test/tooltipMock.js +11 -0
  171. package/lib/types/Chat.js +1 -1
  172. package/lib/types/FrequentlyAskedQuestion.js +1 -1
  173. package/lib/types/agentModal.js +1 -1
  174. package/lib/types/skill.js +1 -1
  175. package/lib/utils/agentDisplayName.spec.js +44 -0
  176. package/lib/utils/autoApproveStorage.spec.js +25 -0
  177. package/lib/utils/chatInputFiles.spec.js +39 -0
  178. package/lib/utils/contextMentionLabel.spec.js +13 -0
  179. package/lib/utils/contextMentionTriggers.js +2 -5
  180. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  181. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  182. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  183. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  184. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  185. package/lib/utils/formatUnreadCount.spec.js +12 -0
  186. package/lib/utils/getUnitFileSize.spec.js +18 -0
  187. package/lib/utils/hitlAnalytics.spec.js +100 -0
  188. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  189. package/lib/utils/mapBackendLang.spec.js +19 -0
  190. package/lib/utils/normalizeAgentConnectors.js +44 -16
  191. package/lib/utils/normalizeAgentConnectors.spec.js +89 -0
  192. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  193. package/lib/utils/reasoningMappers.spec.js +103 -0
  194. package/lib/utils/renderContextMentions.js +39 -18
  195. package/lib/utils/retryCompletion.spec.js +99 -0
  196. package/lib/utils/skillContentSize.spec.js +13 -0
  197. package/lib/utils/slashCommandMarker.spec.js +43 -0
  198. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  199. package/lib/utils/sseStreamContent.spec.js +31 -0
  200. package/lib/utils/streamActivityMessages.spec.js +98 -0
  201. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  202. package/package.json +9 -6
  203. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +0 -33
  204. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +0 -47
  205. package/lib/components/molecules/UsageBlockedBanner/index.js +0 -2
  206. package/lib/services/maia/Usage/getUsage.js +0 -45
  207. package/lib/services/maia/Usage/index.js +0 -6
  208. package/lib/services/utils/MaiaApiError.js +0 -34
  209. package/lib/store/useUsageStore.js +0 -108
  210. package/lib/types/usage.js +0 -9
@@ -6,7 +6,6 @@ import { useState, useCallback } from 'react';
6
6
  import { ArrowRight } from '@projectcor/icons/lib/components/ArrowRight';
7
7
  import { useT } from '../../../hooks/useT';
8
8
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
9
- import { useUsageStore } from '../../../store/useUsageStore';
10
9
  import { fetchAgentDetailAndParsedForAbm } from '../../../services/maia/Agents/fetchAgentDetail';
11
10
  import { SCSuggestionsWrapper, SCSuggestionsTitle, SCSuggestionsList, SCSuggestionButton, SCSuggestionText } from './ChatAISuggestions.styles';
12
11
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -20,48 +19,38 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
20
19
  t = _useT.t;
21
20
  var _useSnackBarManager = useSnackBarManager(),
22
21
  handleSnackbarError = _useSnackBarManager.handleSnackbarError;
23
- var usageBlocked = useUsageStore(function (state) {
24
- return state.blocked;
25
- });
26
22
  var _useState = useState(null),
27
23
  _useState2 = _slicedToArray(_useState, 2),
28
24
  busy = _useState2[0],
29
25
  setBusy = _useState2[1];
30
- var isActionDisabled = disabled || hidden || usageBlocked;
31
26
  var runAction = useCallback(/*#__PURE__*/function () {
32
27
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(action) {
33
28
  var _yield$fetchAgentDeta, chatAgent, abmParsed, message, _t;
34
29
  return _regeneratorRuntime.wrap(function (_context) {
35
30
  while (1) switch (_context.prev = _context.next) {
36
31
  case 0:
37
- if (!(!(agentId !== null && agentId !== void 0 && agentId.trim()) || isActionDisabled || busy)) {
32
+ if (!(!(agentId !== null && agentId !== void 0 && agentId.trim()) || disabled || hidden || busy)) {
38
33
  _context.next = 1;
39
34
  break;
40
35
  }
41
36
  return _context.abrupt("return");
42
37
  case 1:
43
- if (!(action === 'knowledge' && usageBlocked)) {
38
+ if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
44
39
  _context.next = 2;
45
40
  break;
46
41
  }
47
42
  return _context.abrupt("return");
48
43
  case 2:
49
- if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
50
- _context.next = 3;
51
- break;
52
- }
53
- return _context.abrupt("return");
54
- case 3:
55
44
  setBusy(action);
56
- _context.prev = 4;
57
- _context.next = 5;
45
+ _context.prev = 3;
46
+ _context.next = 4;
58
47
  return fetchAgentDetailAndParsedForAbm(agentId);
59
- case 5:
48
+ case 4:
60
49
  _yield$fetchAgentDeta = _context.sent;
61
50
  chatAgent = _yield$fetchAgentDeta.chatAgent;
62
51
  abmParsed = _yield$fetchAgentDeta.abmParsed;
63
52
  if (!(action === 'start_chat')) {
64
- _context.next = 6;
53
+ _context.next = 5;
65
54
  break;
66
55
  }
67
56
  // Igual que ChatAIMyAgents: setProject/client, selectAgent, volver al home del modal
@@ -71,7 +60,7 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
71
60
  }
72
61
  }));
73
62
  return _context.abrupt("return");
74
- case 6:
63
+ case 5:
75
64
  document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
76
65
  detail: {
77
66
  agentValues: {
@@ -88,27 +77,27 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
88
77
  }
89
78
  }
90
79
  }));
91
- _context.next = 8;
80
+ _context.next = 7;
92
81
  break;
93
- case 7:
94
- _context.prev = 7;
95
- _t = _context["catch"](4);
82
+ case 6:
83
+ _context.prev = 6;
84
+ _t = _context["catch"](3);
96
85
  message = _t instanceof Error ? _t.message : t('chat.createAgentActionLoadError');
97
86
  handleSnackbarError(message);
98
- case 8:
99
- _context.prev = 8;
87
+ case 7:
88
+ _context.prev = 7;
100
89
  setBusy(null);
101
- return _context.finish(8);
102
- case 9:
90
+ return _context.finish(7);
91
+ case 8:
103
92
  case "end":
104
93
  return _context.stop();
105
94
  }
106
- }, _callee, null, [[4, 7, 8, 9]]);
95
+ }, _callee, null, [[3, 6, 7, 8]]);
107
96
  }));
108
97
  return function (_x) {
109
98
  return _ref2.apply(this, arguments);
110
99
  };
111
- }(), [agentId, isActionDisabled, busy, handleSnackbarError, t, usageBlocked]);
100
+ }(), [agentId, disabled, hidden, busy, handleSnackbarError, t]);
112
101
  if (!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) return null;
113
102
  return /*#__PURE__*/_jsxs(SCSuggestionsWrapper, {
114
103
  $hidden: hidden,
@@ -120,7 +109,7 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
120
109
  onClick: function onClick() {
121
110
  return runAction('start_chat');
122
111
  },
123
- disabled: isActionDisabled || busy !== null,
112
+ disabled: disabled || hidden || busy !== null,
124
113
  children: [/*#__PURE__*/_jsx(ArrowRight, {
125
114
  width: 12,
126
115
  height: 12,
@@ -133,7 +122,7 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
133
122
  onClick: function onClick() {
134
123
  return runAction('knowledge');
135
124
  },
136
- disabled: isActionDisabled || busy !== null,
125
+ disabled: disabled || hidden || busy !== null,
137
126
  children: [/*#__PURE__*/_jsx(ArrowRight, {
138
127
  width: 12,
139
128
  height: 12,
@@ -145,4 +134,4 @@ export var ChatAICreateAgentActions = function ChatAICreateAgentActions(_ref) {
145
134
  })]
146
135
  });
147
136
  };
148
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwiQXJyb3dSaWdodCIsInVzZVQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJ1c2VVc2FnZVN0b3JlIiwiZmV0Y2hBZ2VudERldGFpbEFuZFBhcnNlZEZvckFibSIsIlNDU3VnZ2VzdGlvbnNXcmFwcGVyIiwiU0NTdWdnZXN0aW9uc1RpdGxlIiwiU0NTdWdnZXN0aW9uc0xpc3QiLCJTQ1N1Z2dlc3Rpb25CdXR0b24iLCJTQ1N1Z2dlc3Rpb25UZXh0IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIl9yZWYiLCJhZ2VudElkIiwiX3JlZiRoaWRkZW4iLCJoaWRkZW4iLCJfcmVmJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfdXNlVCIsInQiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsInVzYWdlQmxvY2tlZCIsInN0YXRlIiwiYmxvY2tlZCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImJ1c3kiLCJzZXRCdXN5IiwiaXNBY3Rpb25EaXNhYmxlZCIsInJ1bkFjdGlvbiIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJhY3Rpb24iLCJfeWllbGQkZmV0Y2hBZ2VudERldGEiLCJjaGF0QWdlbnQiLCJhYm1QYXJzZWQiLCJtZXNzYWdlIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInRyaW0iLCJhYnJ1cHQiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwic2VudCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiYWdlbnQiLCJhZ2VudFZhbHVlcyIsInZhbHVlcyIsImlzRWRpdGluZyIsImdlbmVyYWwiLCJpZCIsIm5hbWUiLCJwcmVmZXRjaGVkQWdlbnRCeUlkIiwiaXNPcGVuIiwiaW5pdGlhbFNlY3Rpb24iLCJFcnJvciIsImZpbmlzaCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiJGhpZGRlbiIsImNoaWxkcmVuIiwidHlwZSIsIm9uQ2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQXJyb3dSaWdodCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93UmlnaHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyB1c2VVc2FnZVN0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlVXNhZ2VTdG9yZSdcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHtcbiAgU0NTdWdnZXN0aW9uc1dyYXBwZXIsXG4gIFNDU3VnZ2VzdGlvbnNUaXRsZSxcbiAgU0NTdWdnZXN0aW9uc0xpc3QsXG4gIFNDU3VnZ2VzdGlvbkJ1dHRvbixcbiAgU0NTdWdnZXN0aW9uVGV4dCxcbn0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucy5zdHlsZXMnXG5cbmV4cG9ydCB0eXBlIENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24gPSAnc3RhcnRfY2hhdCcgfCAna25vd2xlZGdlJ1xuXG50eXBlIENoYXRBSUNyZWF0ZUFnZW50QWN0aW9uc1Byb3BzID0ge1xuICBhZ2VudElkOiBzdHJpbmdcbiAgaGlkZGVuPzogYm9vbGVhblxuICBkaXNhYmxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyA9ICh7XG4gIGFnZW50SWQsXG4gIGhpZGRlbiA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxufTogQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCB1c2FnZUJsb2NrZWQgPSB1c2VVc2FnZVN0b3JlKHN0YXRlID0+IHN0YXRlLmJsb2NrZWQpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IHVzZVN0YXRlPENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24gfCBudWxsPihudWxsKVxuICBjb25zdCBpc0FjdGlvbkRpc2FibGVkID0gZGlzYWJsZWQgfHwgaGlkZGVuIHx8IHVzYWdlQmxvY2tlZFxuXG4gIGNvbnN0IHJ1bkFjdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChhY3Rpb246IENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24pID0+IHtcbiAgICAgIGlmICghYWdlbnRJZD8udHJpbSgpIHx8IGlzQWN0aW9uRGlzYWJsZWQgfHwgYnVzeSkgcmV0dXJuXG4gICAgICBpZiAoYWN0aW9uID09PSAna25vd2xlZGdlJyAmJiB1c2FnZUJsb2NrZWQpIHJldHVyblxuICAgICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0QnVzeShhY3Rpb24pXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNoYXRBZ2VudCwgYWJtUGFyc2VkIH0gPSBhd2FpdCBmZXRjaEFnZW50RGV0YWlsQW5kUGFyc2VkRm9yQWJtKGFnZW50SWQpXG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdzdGFydF9jaGF0Jykge1xuICAgICAgICAgIC8vIElndWFsIHF1ZSBDaGF0QUlNeUFnZW50czogc2V0UHJvamVjdC9jbGllbnQsIHNlbGVjdEFnZW50LCB2b2x2ZXIgYWwgaG9tZSBkZWwgbW9kYWxcbiAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGFnZW50VmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBhYm1QYXJzZWQuaWQsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGFibVBhcnNlZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHByZWZldGNoZWRBZ2VudEJ5SWQ6IGFibVBhcnNlZCxcbiAgICAgICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICAgICAgaW5pdGlhbFNlY3Rpb246ICdrbm93bGVkZ2UnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiB0KCdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uTG9hZEVycm9yJylcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihtZXNzYWdlKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0QnVzeShudWxsKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50SWQsIGlzQWN0aW9uRGlzYWJsZWQsIGJ1c3ksIGhhbmRsZVNuYWNrYmFyRXJyb3IsIHQsIHVzYWdlQmxvY2tlZF1cbiAgKVxuXG4gIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIChcbiAgICA8U0NTdWdnZXN0aW9uc1dyYXBwZXIgJGhpZGRlbj17aGlkZGVufT5cbiAgICAgIDxTQ1N1Z2dlc3Rpb25zVGl0bGU+e3QoJ2NoYXQuY3JlYXRlQWdlbnRBY3Rpb25zVGl0bGUnKX08L1NDU3VnZ2VzdGlvbnNUaXRsZT5cbiAgICAgIDxTQ1N1Z2dlc3Rpb25zTGlzdD5cbiAgICAgICAgPFNDU3VnZ2VzdGlvbkJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJ1bkFjdGlvbignc3RhcnRfY2hhdCcpfVxuICAgICAgICAgIGRpc2FibGVkPXtpc0FjdGlvbkRpc2FibGVkIHx8IGJ1c3kgIT09IG51bGx9XG4gICAgICAgID5cbiAgICAgICAgICA8QXJyb3dSaWdodCB3aWR0aD17MTJ9IGhlaWdodD17MTJ9IGNvbG9yPVwiIzIwMjAxRlwiIC8+XG4gICAgICAgICAgPFNDU3VnZ2VzdGlvblRleHQ+e3QoJ2NoYXQuY3JlYXRlQWdlbnRBY3Rpb25TdGFydENoYXQnKX08L1NDU3VnZ2VzdGlvblRleHQ+XG4gICAgICAgIDwvU0NTdWdnZXN0aW9uQnV0dG9uPlxuICAgICAgICA8U0NTdWdnZXN0aW9uQnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gcnVuQWN0aW9uKCdrbm93bGVkZ2UnKX1cbiAgICAgICAgICBkaXNhYmxlZD17aXNBY3Rpb25EaXNhYmxlZCB8fCBidXN5ICE9PSBudWxsfVxuICAgICAgICA+XG4gICAgICAgICAgPEFycm93UmlnaHQgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICAgIDxTQ1N1Z2dlc3Rpb25UZXh0Pnt0KCdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uS25vd2xlZGdlJyl9PC9TQ1N1Z2dlc3Rpb25UZXh0PlxuICAgICAgICA8L1NDU3VnZ2VzdGlvbkJ1dHRvbj5cbiAgICAgIDwvU0NTdWdnZXN0aW9uc0xpc3Q+XG4gICAgPC9TQ1N1Z2dlc3Rpb25zV3JhcHBlcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxRQUFRLE9BQU87QUFDN0MsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQyxhQUFhLFFBQVEsOEJBQThCO0FBQzVELFNBQVNDLCtCQUErQixRQUFRLGdEQUFnRDtBQUNoRyxTQUNFQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixRQUNYLDRCQUE0QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFVbkMsT0FBTyxJQUFN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
137
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwiQXJyb3dSaWdodCIsInVzZVQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmZXRjaEFnZW50RGV0YWlsQW5kUGFyc2VkRm9yQWJtIiwiU0NTdWdnZXN0aW9uc1dyYXBwZXIiLCJTQ1N1Z2dlc3Rpb25zVGl0bGUiLCJTQ1N1Z2dlc3Rpb25zTGlzdCIsIlNDU3VnZ2VzdGlvbkJ1dHRvbiIsIlNDU3VnZ2VzdGlvblRleHQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiX3JlZiIsImFnZW50SWQiLCJfcmVmJGhpZGRlbiIsImhpZGRlbiIsIl9yZWYkZGlzYWJsZWQiLCJkaXNhYmxlZCIsIl91c2VUIiwidCIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYnVzeSIsInNldEJ1c3kiLCJydW5BY3Rpb24iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiYWN0aW9uIiwiX3lpZWxkJGZldGNoQWdlbnREZXRhIiwiY2hhdEFnZW50IiwiYWJtUGFyc2VkIiwibWVzc2FnZSIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ0cmltIiwiYWJydXB0Iiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsInNlbnQiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImFnZW50IiwiYWdlbnRWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0VkaXRpbmciLCJnZW5lcmFsIiwiaWQiLCJuYW1lIiwicHJlZmV0Y2hlZEFnZW50QnlJZCIsImlzT3BlbiIsImluaXRpYWxTZWN0aW9uIiwiRXJyb3IiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsIiRoaWRkZW4iLCJjaGlsZHJlbiIsInR5cGUiLCJvbkNsaWNrIiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFycm93UmlnaHQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1JpZ2h0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbEFuZFBhcnNlZEZvckFibSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQge1xuICBTQ1N1Z2dlc3Rpb25zV3JhcHBlcixcbiAgU0NTdWdnZXN0aW9uc1RpdGxlLFxuICBTQ1N1Z2dlc3Rpb25zTGlzdCxcbiAgU0NTdWdnZXN0aW9uQnV0dG9uLFxuICBTQ1N1Z2dlc3Rpb25UZXh0LFxufSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zLnN0eWxlcydcblxuZXhwb3J0IHR5cGUgQ3JlYXRlQWdlbnRGb2xsb3dVcEFjdGlvbiA9ICdzdGFydF9jaGF0JyB8ICdrbm93bGVkZ2UnXG5cbnR5cGUgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zUHJvcHMgPSB7XG4gIGFnZW50SWQ6IHN0cmluZ1xuICBoaWRkZW4/OiBib29sZWFuXG4gIGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zID0gKHtcbiAgYWdlbnRJZCxcbiAgaGlkZGVuID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG59OiBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IHVzZVN0YXRlPENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24gfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IHJ1bkFjdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChhY3Rpb246IENyZWF0ZUFnZW50Rm9sbG93VXBBY3Rpb24pID0+IHtcbiAgICAgIGlmICghYWdlbnRJZD8udHJpbSgpIHx8IGRpc2FibGVkIHx8IGhpZGRlbiB8fCBidXN5KSByZXR1cm5cbiAgICAgIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNldEJ1c3koYWN0aW9uKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjaGF0QWdlbnQsIGFibVBhcnNlZCB9ID0gYXdhaXQgZmV0Y2hBZ2VudERldGFpbEFuZFBhcnNlZEZvckFibShhZ2VudElkKVxuICAgICAgICBpZiAoYWN0aW9uID09PSAnc3RhcnRfY2hhdCcpIHtcbiAgICAgICAgICAvLyBJZ3VhbCBxdWUgQ2hhdEFJTXlBZ2VudHM6IHNldFByb2plY3QvY2xpZW50LCBzZWxlY3RBZ2VudCwgdm9sdmVyIGFsIGhvbWUgZGVsIG1vZGFsXG4gICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCB7XG4gICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogYWJtUGFyc2VkLmlkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhYm1QYXJzZWQubmFtZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwcmVmZXRjaGVkQWdlbnRCeUlkOiBhYm1QYXJzZWQsXG4gICAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluaXRpYWxTZWN0aW9uOiAna25vd2xlZGdlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogdCgnY2hhdC5jcmVhdGVBZ2VudEFjdGlvbkxvYWRFcnJvcicpXG4gICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IobWVzc2FnZSlcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEJ1c3kobnVsbClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudElkLCBkaXNhYmxlZCwgaGlkZGVuLCBidXN5LCBoYW5kbGVTbmFja2JhckVycm9yLCB0XVxuICApXG5cbiAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykgcmV0dXJuIG51bGxcblxuICByZXR1cm4gKFxuICAgIDxTQ1N1Z2dlc3Rpb25zV3JhcHBlciAkaGlkZGVuPXtoaWRkZW59PlxuICAgICAgPFNDU3VnZ2VzdGlvbnNUaXRsZT57dCgnY2hhdC5jcmVhdGVBZ2VudEFjdGlvbnNUaXRsZScpfTwvU0NTdWdnZXN0aW9uc1RpdGxlPlxuICAgICAgPFNDU3VnZ2VzdGlvbnNMaXN0PlxuICAgICAgICA8U0NTdWdnZXN0aW9uQnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gcnVuQWN0aW9uKCdzdGFydF9jaGF0Jyl9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGhpZGRlbiB8fCBidXN5ICE9PSBudWxsfVxuICAgICAgICA+XG4gICAgICAgICAgPEFycm93UmlnaHQgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICAgIDxTQ1N1Z2dlc3Rpb25UZXh0Pnt0KCdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uU3RhcnRDaGF0Jyl9PC9TQ1N1Z2dlc3Rpb25UZXh0PlxuICAgICAgICA8L1NDU3VnZ2VzdGlvbkJ1dHRvbj5cbiAgICAgICAgPFNDU3VnZ2VzdGlvbkJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJ1bkFjdGlvbigna25vd2xlZGdlJyl9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGhpZGRlbiB8fCBidXN5ICE9PSBudWxsfVxuICAgICAgICA+XG4gICAgICAgICAgPEFycm93UmlnaHQgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICAgIDxTQ1N1Z2dlc3Rpb25UZXh0Pnt0KCdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uS25vd2xlZGdlJyl9PC9TQ1N1Z2dlc3Rpb25UZXh0PlxuICAgICAgICA8L1NDU3VnZ2VzdGlvbkJ1dHRvbj5cbiAgICAgIDwvU0NTdWdnZXN0aW9uc0xpc3Q+XG4gICAgPC9TQ1N1Z2dlc3Rpb25zV3JhcHBlcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxRQUFRLE9BQU87QUFDN0MsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQywrQkFBK0IsUUFBUSxnREFBZ0Q7QUFDaEcsU0FDRUMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsUUFDWCw0QkFBNEI7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBO0FBVW5DLE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBQUMsSUFBQSxFQUlBO0VBQUEsSUFIbkNDLE9BQU8sR0FBQUQsSUFBQSxDQUFQQyxPQUFPO0lBQUFDLFdBQUEsR0FBQUYsSUFBQSxDQUNQRyxNQUFNO0lBQU5BLE1BQU0sR0FBQUQsV0FBQSxjQUFHLEtBQUssR0FBQUEsV0FBQTtJQUFBRSxhQUFBLEdBQUFKLElBQUEsQ0FDZEssUUFBUTtJQUFSQSxRQUFRLEdBQUFELGFBQUEsY0FBRyxLQUFLLEdBQUFBLGFBQUE7RUFFaEIsSUFBQUUsS0FBQSxHQUFjbkIsSUFBSSxDQUFDLENBQUM7SUFBWm9CLENBQUMsR0FBQUQsS0FBQSxDQUFEQyxDQUFDO0VBQ1QsSUFBQUMsbUJBQUEsR0FBZ0NwQixrQkFBa0IsQ0FBQyxDQUFD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
@@ -0,0 +1,104 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import { fireEvent, renderWithProviders, screen, waitFor } from '../../../test/test-utils';
4
+ import { fetchAgentDetailAndParsedForAbm } from '../../../services/maia/Agents/fetchAgentDetail';
5
+ import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ jest.mock('../../../services/maia/Agents/fetchAgentDetail', function () {
8
+ return {
9
+ fetchAgentDetailAndParsedForAbm: jest.fn()
10
+ };
11
+ });
12
+ jest.mock('../../../hooks/useSnackBarManager/useSnackBarManager', function () {
13
+ return {
14
+ useSnackBarManager: function useSnackBarManager() {
15
+ return {
16
+ handleSnackbarError: jest.fn()
17
+ };
18
+ }
19
+ };
20
+ });
21
+ var fetchDetail = fetchAgentDetailAndParsedForAbm;
22
+ var flags = window;
23
+ describe('ChatAICreateAgentActions', function () {
24
+ beforeEach(function () {
25
+ flags.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS = true;
26
+ fetchDetail.mockResolvedValue({
27
+ chatAgent: {
28
+ id: 'a1',
29
+ name: 'Nuevo',
30
+ emoji: '✨',
31
+ type: 'custom'
32
+ },
33
+ abmParsed: {
34
+ id: 'a1',
35
+ name: 'Nuevo'
36
+ }
37
+ });
38
+ });
39
+ afterEach(function () {
40
+ delete flags.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
41
+ });
42
+ it('returns null without the multi-agents flag', function () {
43
+ delete flags.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
44
+ var _renderWithProviders = renderWithProviders(/*#__PURE__*/_jsx(ChatAICreateAgentActions, {
45
+ agentId: "a1"
46
+ })),
47
+ container = _renderWithProviders.container;
48
+ expect(container).toBeEmptyDOMElement();
49
+ });
50
+ it('opens a new chat with the created agent', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
51
+ var onOpen;
52
+ return _regeneratorRuntime.wrap(function (_context) {
53
+ while (1) switch (_context.prev = _context.next) {
54
+ case 0:
55
+ onOpen = jest.fn();
56
+ document.addEventListener('maia-open-new-chat-with-agent', onOpen);
57
+ renderWithProviders(/*#__PURE__*/_jsx(ChatAICreateAgentActions, {
58
+ agentId: "a1"
59
+ }));
60
+ fireEvent.click(screen.getByRole('button', {
61
+ name: 'chat.createAgentActionStartChat'
62
+ }));
63
+ _context.next = 1;
64
+ return waitFor(function () {
65
+ expect(fetchDetail).toHaveBeenCalledWith('a1');
66
+ expect(onOpen).toHaveBeenCalled();
67
+ });
68
+ case 1:
69
+ document.removeEventListener('maia-open-new-chat-with-agent', onOpen);
70
+ case 2:
71
+ case "end":
72
+ return _context.stop();
73
+ }
74
+ }, _callee);
75
+ })));
76
+ it('opens the ABM on the knowledge section', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
77
+ var onAbm, event;
78
+ return _regeneratorRuntime.wrap(function (_context2) {
79
+ while (1) switch (_context2.prev = _context2.next) {
80
+ case 0:
81
+ onAbm = jest.fn();
82
+ document.addEventListener('abm-agent-modal-set-values', onAbm);
83
+ renderWithProviders(/*#__PURE__*/_jsx(ChatAICreateAgentActions, {
84
+ agentId: "a1"
85
+ }));
86
+ fireEvent.click(screen.getByRole('button', {
87
+ name: 'chat.createAgentActionKnowledge'
88
+ }));
89
+ _context2.next = 1;
90
+ return waitFor(function () {
91
+ expect(onAbm).toHaveBeenCalled();
92
+ });
93
+ case 1:
94
+ event = onAbm.mock.calls[0][0];
95
+ expect(event.detail.agentValues.initialSection).toBe('knowledge');
96
+ document.removeEventListener('abm-agent-modal-set-values', onAbm);
97
+ case 2:
98
+ case "end":
99
+ return _context2.stop();
100
+ }
101
+ }, _callee2);
102
+ })));
103
+ });
104
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwid2FpdEZvciIsImZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm0iLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJqc3giLCJfanN4IiwiamVzdCIsIm1vY2siLCJmbiIsInVzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJmZXRjaERldGFpbCIsImZsYWdzIiwid2luZG93IiwiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIm1vY2tSZXNvbHZlZFZhbHVlIiwiY2hhdEFnZW50IiwiaWQiLCJuYW1lIiwiZW1vamkiLCJ0eXBlIiwiYWJtUGFyc2VkIiwiYWZ0ZXJFYWNoIiwiaXQiLCJfcmVuZGVyV2l0aFByb3ZpZGVycyIsImFnZW50SWQiLCJjb250YWluZXIiLCJleHBlY3QiLCJ0b0JlRW1wdHlET01FbGVtZW50IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJvbk9wZW4iLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsaWNrIiwiZ2V0QnlSb2xlIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInN0b3AiLCJfY2FsbGVlMiIsIm9uQWJtIiwiZXZlbnQiLCJfY29udGV4dDIiLCJjYWxscyIsImRldGFpbCIsImFnZW50VmFsdWVzIiwiaW5pdGlhbFNlY3Rpb24iLCJ0b0JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucy5zcGVjLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJlRXZlbnQsIHJlbmRlcldpdGhQcm92aWRlcnMsIHNjcmVlbiwgd2FpdEZvciB9IGZyb20gJy4uLy4uLy4uL3Rlc3QvdGVzdC11dGlscydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5cbmplc3QubW9jaygnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCcsICgpID0+ICh7XG4gIGZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm06IGplc3QuZm4oKSxcbn0pKVxuXG5qZXN0Lm1vY2soJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInLCAoKSA9PiAoe1xuICB1c2VTbmFja0Jhck1hbmFnZXI6ICgpID0+ICh7IGhhbmRsZVNuYWNrYmFyRXJyb3I6IGplc3QuZm4oKSB9KSxcbn0pKVxuXG5jb25zdCBmZXRjaERldGFpbCA9IGZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm0gYXMgamVzdC5Nb2NrZWRGdW5jdGlvbjx0eXBlb2YgZmV0Y2hBZ2VudERldGFpbEFuZFBhcnNlZEZvckFibT5cblxudHlwZSBNdWx0aUFnZW50V2luZG93ID0gV2luZG93ICYgeyBNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTPzogYm9vbGVhbiB9XG5cbmNvbnN0IGZsYWdzID0gd2luZG93IGFzIE11bHRpQWdlbnRXaW5kb3dcblxuZGVzY3JpYmUoJ0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucycsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZmxhZ3MuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyA9IHRydWVcbiAgICBmZXRjaERldGFpbC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBjaGF0QWdlbnQ6IHsgaWQ6ICdhMScsIG5hbWU6ICdOdWV2bycsIGVtb2ppOiAn4pyoJywgdHlwZTogJ2N1c3RvbScgfSxcbiAgICAgIGFibVBhcnNlZDogeyBpZDogJ2ExJywgbmFtZTogJ051ZXZvJyB9LFxuICAgIH0gYXMgQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaEFnZW50RGV0YWlsQW5kUGFyc2VkRm9yQWJtPj4pXG4gIH0pXG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBkZWxldGUgZmxhZ3MuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICB9KVxuXG4gIGl0KCdyZXR1cm5zIG51bGwgd2l0aG91dCB0aGUgbXVsdGktYWdlbnRzIGZsYWcnLCAoKSA9PiB7XG4gICAgZGVsZXRlIGZsYWdzLk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFByb3ZpZGVycyg8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIGFnZW50SWQ9XCJhMVwiIC8+KVxuXG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUVtcHR5RE9NRWxlbWVudCgpXG4gIH0pXG5cbiAgaXQoJ29wZW5zIGEgbmV3IGNoYXQgd2l0aCB0aGUgY3JlYXRlZCBhZ2VudCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvbk9wZW4gPSBqZXN0LmZuKClcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9uT3BlbilcblxuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoPENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyBhZ2VudElkPVwiYTFcIiAvPilcbiAgICBmaXJlRXZlbnQuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnY2hhdC5jcmVhdGVBZ2VudEFjdGlvblN0YXJ0Q2hhdCcgfSkpXG5cbiAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIGV4cGVjdChmZXRjaERldGFpbCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2ExJylcbiAgICAgIGV4cGVjdChvbk9wZW4pLnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgIH0pXG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9uT3BlbilcbiAgfSlcblxuICBpdCgnb3BlbnMgdGhlIEFCTSBvbiB0aGUga25vd2xlZGdlIHNlY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb25BYm0gPSBqZXN0LmZuKClcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIG9uQWJtKVxuXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIGFnZW50SWQ9XCJhMVwiIC8+KVxuICAgIGZpcmVFdmVudC5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6ICdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uS25vd2xlZGdlJyB9KSlcblxuICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4ge1xuICAgICAgZXhwZWN0KG9uQWJtKS50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICB9KVxuXG4gICAgY29uc3QgZXZlbnQgPSBvbkFibS5tb2NrLmNhbGxzWzBdWzBdIGFzIEN1c3RvbUV2ZW50XG4gICAgZXhwZWN0KGV2ZW50LmRldGFpbC5hZ2VudFZhbHVlcy5pbml0aWFsU2VjdGlvbikudG9CZSgna25vd2xlZGdlJylcblxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgb25BYm0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOztB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