@projectcor/maia-components 2.49.1-0 → 2.49.1-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +3 -1
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +24 -14
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +28 -10
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +19 -15
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +33 -1
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +8 -4
- package/lib/components/atoms/ClientSelector/ClientSelector.js +15 -13
- package/lib/components/atoms/Fade/Fade.js +10 -6
- package/lib/components/atoms/Fade/Fade.spec.js +36 -1
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.js +10 -5
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +9 -4
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +4 -5
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +3 -3
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +3 -2
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +6 -4
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +25 -16
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +3 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +51 -359
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +69 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +144 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +174 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +99 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +65 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +5 -2
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +24 -15
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +8 -7
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +11 -7
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +4 -1
- package/lib/hooks/useAgentModel/useUpdateAgent.js +7 -6
- package/lib/hooks/useEntitySearch.js +3 -1
- package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +16 -15
- package/lib/hooks/useProjectSummaryConfig.js +10 -5
- package/lib/services/maia/Agents/connectors.js +3 -1
- package/lib/store/useChatsStore.js +4 -3
- package/lib/utils/imagePreprocessor.js +14 -3
- package/lib/utils/navigateContextEntity.js +2 -2
- package/lib/utils/navigateContextEntity.spec.js +3 -3
- package/lib/utils/openTaskInCorPanel.js +2 -2
- package/lib/utils/openTaskInCorPanel.spec.js +2 -2
- package/lib/utils/streamActivityMessages.helpers.js +3 -3
- package/package.json +1 -1
package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export var isMaiaAgent = function isMaiaAgent(agent) {
|
|
2
|
+
return agent.type === 'orchestrator';
|
|
3
|
+
};
|
|
4
|
+
export var isAgentUnavailable = function isAgentUnavailable(agent) {
|
|
5
|
+
return !!(agent !== null && agent !== void 0 && agent.is_deleted) || !!(agent !== null && agent !== void 0 && agent.has_not_permissions) || !!(agent !== null && agent !== void 0 && agent.has_not_access);
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
/** Los custom requieren la feature multi-agents; clone y MAIA no van en esta lista. */
|
|
9
|
+
export var isListableAgent = function isListableAgent(agent, multiAgentsEnabled) {
|
|
10
|
+
if (isAgentUnavailable(agent) || agent.type === 'clone' || isMaiaAgent(agent)) return false;
|
|
11
|
+
return agent.type !== 'custom' || multiAgentsEnabled;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/** Solo los custom no legacy muestran su emoji; el resto usa el icono de MAIA. */
|
|
15
|
+
export var showsAgentEmoji = function showsAgentEmoji(agent) {
|
|
16
|
+
return (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom' && !(agent !== null && agent !== void 0 && agent.is_legacy_context);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** Los clone de project/client resuelven la sesión recién al elegir la entity. */
|
|
20
|
+
export var agentNeedsEntity = function agentNeedsEntity(agent) {
|
|
21
|
+
return (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' && ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project' || (agent === null || agent === void 0 ? void 0 : agent.entity) === 'client');
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Agente a mostrar en el selector. Los no disponibles o de conversación se muestran tal cual;
|
|
26
|
+
* si no está en la lista paginada (p. ej. hidratado por GET tras create_agent) se usa el del contexto.
|
|
27
|
+
*/
|
|
28
|
+
export var resolveDisplayedAgent = function resolveDisplayedAgent(agents, selectedAgent) {
|
|
29
|
+
var _ref;
|
|
30
|
+
if (isAgentUnavailable(selectedAgent) || selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_from_conversation || selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_legacy_context) {
|
|
31
|
+
return selectedAgent !== null && selectedAgent !== void 0 ? selectedAgent : null;
|
|
32
|
+
}
|
|
33
|
+
var fromList = agents.find(function (agent) {
|
|
34
|
+
return !isAgentUnavailable(agent) && agent.id === (selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id);
|
|
35
|
+
});
|
|
36
|
+
return (_ref = fromList !== null && fromList !== void 0 ? fromList : selectedAgent) !== null && _ref !== void 0 ? _ref : null;
|
|
37
|
+
};
|
|
38
|
+
export var getSectionLabelKey = function getSectionLabelKey(isMyAgentsSection, isMySkillsSection) {
|
|
39
|
+
if (isMyAgentsSection) return 'marketplace.myAgentsTitle';
|
|
40
|
+
if (isMySkillsSection) return 'conversations.mySkillsNav';
|
|
41
|
+
return null;
|
|
42
|
+
};
|
|
43
|
+
export var canUserCreateAgents = function canUserCreateAgents(user) {
|
|
44
|
+
var _user$permissions;
|
|
45
|
+
return !!((_user$permissions = user.permissions) !== null && _user$permissions !== void 0 && (_user$permissions = _user$permissions.ai_agents) !== null && _user$permissions !== void 0 && _user$permissions.create) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
|
|
46
|
+
};
|
|
47
|
+
export var shouldShowAgentSelector = function shouldShowAgentSelector(_ref2) {
|
|
48
|
+
var hasError = _ref2.hasError,
|
|
49
|
+
loading = _ref2.loading,
|
|
50
|
+
hideAgentSelector = _ref2.hideAgentSelector,
|
|
51
|
+
hasSelectedAgent = _ref2.hasSelectedAgent,
|
|
52
|
+
isAgentsSection = _ref2.isAgentsSection;
|
|
53
|
+
if (hasError || loading || hideAgentSelector) return false;
|
|
54
|
+
if (!hasSelectedAgent && !isAgentsSection) return false;
|
|
55
|
+
return !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS || !!window.MAIA_CHAT_AI_FEATURE_ACCESS;
|
|
56
|
+
};
|
|
57
|
+
export var dispatchOpenCreateAgentModal = function dispatchOpenCreateAgentModal() {
|
|
58
|
+
document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
|
|
59
|
+
detail: {
|
|
60
|
+
agentValues: {
|
|
61
|
+
values: {
|
|
62
|
+
isEditing: false
|
|
63
|
+
},
|
|
64
|
+
isOpen: true
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}));
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc01haWFBZ2VudCIsImFnZW50IiwidHlwZSIsImlzQWdlbnRVbmF2YWlsYWJsZSIsImlzX2RlbGV0ZWQiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiaGFzX25vdF9hY2Nlc3MiLCJpc0xpc3RhYmxlQWdlbnQiLCJtdWx0aUFnZW50c0VuYWJsZWQiLCJzaG93c0FnZW50RW1vamkiLCJpc19sZWdhY3lfY29udGV4dCIsImFnZW50TmVlZHNFbnRpdHkiLCJlbnRpdHkiLCJyZXNvbHZlRGlzcGxheWVkQWdlbnQiLCJhZ2VudHMiLCJzZWxlY3RlZEFnZW50IiwiX3JlZiIsImlzX2Zyb21fY29udmVyc2F0aW9uIiwiZnJvbUxpc3QiLCJmaW5kIiwiaWQiLCJnZXRTZWN0aW9uTGFiZWxLZXkiLCJpc015QWdlbnRzU2VjdGlvbiIsImlzTXlTa2lsbHNTZWN0aW9uIiwiY2FuVXNlckNyZWF0ZUFnZW50cyIsInVzZXIiLCJfdXNlciRwZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY3JlYXRlIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsInNob3VsZFNob3dBZ2VudFNlbGVjdG9yIiwiX3JlZjIiLCJoYXNFcnJvciIsImxvYWRpbmciLCJoaWRlQWdlbnRTZWxlY3RvciIsImhhc1NlbGVjdGVkQWdlbnQiLCJpc0FnZW50c1NlY3Rpb24iLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJkaXNwYXRjaE9wZW5DcmVhdGVBZ2VudE1vZGFsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJhZ2VudFZhbHVlcyIsInZhbHVlcyIsImlzRWRpdGluZyIsImlzT3BlbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9jb21wb25lbnRzL0NoYXRBaU1vZGFsSGVhZGVyL0NoYXRBaU1vZGFsSGVhZGVyLnV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ09SVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuXG5leHBvcnQgY29uc3QgaXNNYWlhQWdlbnQgPSAoYWdlbnQ6IEFnZW50KTogYm9vbGVhbiA9PiBhZ2VudC50eXBlID09PSAnb3JjaGVzdHJhdG9yJ1xuXG5leHBvcnQgY29uc3QgaXNBZ2VudFVuYXZhaWxhYmxlID0gKGFnZW50PzogQWdlbnQgfCBudWxsKTogYm9vbGVhbiA9PlxuICAhIWFnZW50Py5pc19kZWxldGVkIHx8ICEhYWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHwgISFhZ2VudD8uaGFzX25vdF9hY2Nlc3NcblxuLyoqIExvcyBjdXN0b20gcmVxdWllcmVuIGxhIGZlYXR1cmUgbXVsdGktYWdlbnRzOyBjbG9uZSB5IE1BSUEgbm8gdmFuIGVuIGVzdGEgbGlzdGEuICovXG5leHBvcnQgY29uc3QgaXNMaXN0YWJsZUFnZW50ID0gKGFnZW50OiBBZ2VudCwgbXVsdGlBZ2VudHNFbmFibGVkOiBib29sZWFuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChpc0FnZW50VW5hdmFpbGFibGUoYWdlbnQpIHx8IGFnZW50LnR5cGUgPT09ICdjbG9uZScgfHwgaXNNYWlhQWdlbnQoYWdlbnQpKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGFnZW50LnR5cGUgIT09ICdjdXN0b20nIHx8IG11bHRpQWdlbnRzRW5hYmxlZFxufVxuXG4vKiogU29sbyBsb3MgY3VzdG9tIG5vIGxlZ2FjeSBtdWVzdHJhbiBzdSBlbW9qaTsgZWwgcmVzdG8gdXNhIGVsIGljb25vIGRlIE1BSUEuICovXG5leHBvcnQgY29uc3Qgc2hvd3NBZ2VudEVtb2ppID0gKGFnZW50PzogQWdlbnQgfCBudWxsKTogYm9vbGVhbiA9PiBhZ2VudD8udHlwZSA9PT0gJ2N1c3RvbScgJiYgIWFnZW50Py5pc19sZWdhY3lfY29udGV4dFxuXG4vKiogTG9zIGNsb25lIGRlIHByb2plY3QvY2xpZW50IHJlc3VlbHZlbiBsYSBzZXNpw7NuIHJlY2nDqW4gYWwgZWxlZ2lyIGxhIGVudGl0eS4gKi9cbmV4cG9ydCBjb25zdCBhZ2VudE5lZWRzRW50aXR5ID0gKGFnZW50PzogQWdlbnQgfCBudWxsKTogYm9vbGVhbiA9PlxuICBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJiAoYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnIHx8IGFnZW50Py5lbnRpdHkgPT09ICdjbGllbnQnKVxuXG4vKipcbiAqIEFnZW50ZSBhIG1vc3RyYXIgZW4gZWwgc2VsZWN0b3IuIExvcyBubyBkaXNwb25pYmxlcyBvIGRlIGNvbnZlcnNhY2nDs24gc2UgbXVlc3RyYW4gdGFsIGN1YWw7XG4gKiBzaSBubyBlc3TDoSBlbiBsYSBsaXN0YSBwYWdpbmFkYSAocC4gZWouIGhpZHJhdGFkbyBwb3IgR0VUIHRyYXMgY3JlYXRlX2FnZW50KSBzZSB1c2EgZWwgZGVsIGNvbnRleHRvLlxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZURpc3BsYXllZEFnZW50ID0gKGFnZW50czogQWdlbnRbXSwgc2VsZWN0ZWRBZ2VudD86IEFnZW50IHwgbnVsbCk6IEFnZW50IHwgbnVsbCA9PiB7XG4gIGlmIChpc0FnZW50VW5hdmFpbGFibGUoc2VsZWN0ZWRBZ2VudCkgfHwgc2VsZWN0ZWRBZ2VudD8uaXNfZnJvbV9jb252ZXJzYXRpb24gfHwgc2VsZWN0ZWRBZ2VudD8uaXNfbGVnYWN5X2NvbnRleHQpIHtcbiAgICByZXR1cm4gc2VsZWN0ZWRBZ2VudCA/PyBudWxsXG4gIH1cbiAgY29uc3QgZnJvbUxpc3QgPSBhZ2VudHMuZmluZChhZ2VudCA9PiAhaXNBZ2VudFVuYXZhaWxhYmxlKGFnZW50KSAmJiBhZ2VudC5pZCA9PT0gc2VsZWN0ZWRBZ2VudD8uaWQpXG4gIHJldHVybiBmcm9tTGlzdCA/PyBzZWxlY3RlZEFnZW50ID8/IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGdldFNlY3Rpb25MYWJlbEtleSA9IChpc015QWdlbnRzU2VjdGlvbjogYm9vbGVhbiwgaXNNeVNraWxsc1NlY3Rpb246IGJvb2xlYW4pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKGlzTXlBZ2VudHNTZWN0aW9uKSByZXR1cm4gJ21hcmtldHBsYWNlLm15QWdlbnRzVGl0bGUnXG4gIGlmIChpc015U2tpbGxzU2VjdGlvbikgcmV0dXJuICdjb252ZXJzYXRpb25zLm15U2tpbGxzTmF2J1xuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgY2FuVXNlckNyZWF0ZUFnZW50cyA9ICh1c2VyOiBDT1JVc2VyKTogYm9vbGVhbiA9PlxuICAhIXVzZXIucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxudHlwZSBBZ2VudFNlbGVjdG9yVmlzaWJpbGl0eSA9IHtcbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgbG9hZGluZzogYm9vbGVhblxuICBoaWRlQWdlbnRTZWxlY3RvcjogYm9vbGVhblxuICBoYXNTZWxlY3RlZEFnZW50OiBib29sZWFuXG4gIGlzQWdlbnRzU2VjdGlvbjogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd0FnZW50U2VsZWN0b3IgPSAoe1xuICBoYXNFcnJvcixcbiAgbG9hZGluZyxcbiAgaGlkZUFnZW50U2VsZWN0b3IsXG4gIGhhc1NlbGVjdGVkQWdlbnQsXG4gIGlzQWdlbnRzU2VjdGlvbixcbn06IEFnZW50U2VsZWN0b3JWaXNpYmlsaXR5KTogYm9vbGVhbiA9PiB7XG4gIGlmIChoYXNFcnJvciB8fCBsb2FkaW5nIHx8IGhpZGVBZ2VudFNlbGVjdG9yKSByZXR1cm4gZmFsc2VcbiAgaWYgKCFoYXNTZWxlY3RlZEFnZW50ICYmICFpc0FnZW50c1NlY3Rpb24pIHJldHVybiBmYWxzZVxuICByZXR1cm4gISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyB8fCAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1Ncbn1cblxuZXhwb3J0IGNvbnN0IGRpc3BhdGNoT3BlbkNyZWF0ZUFnZW50TW9kYWwgPSAoKTogdm9pZCA9PiB7XG4gIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLElBQU1BLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxLQUFZO0VBQUEsT0FBY0EsS0FBSyxDQUFDQyxJQUFJLEtBQUssY0FBYztBQUFBO0FBRW5GLE9BQU8sSUFBTUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUYsS0FBb0I7RUFBQSxPQUNyRCxDQUFDLEVBQUNBLEtBQUssYUFBTEEsS0FBSyxlQUFMQSxLQUFLLENBQUVHLFVBQVUsS0FBSSxDQUFDLEVBQUNILEtBQUssYUFBTEEsS0FBSyxlQUFMQSxLQUFLLENBQUVJLG1CQUFtQixLQUFJLENBQUMsRUFBQ0osS0FBSyxhQUFMQSxLQUFLLGVBQUxBLEtBQUssQ0FBRUssY0FBYztBQUFBOztBQUVoRjtBQUNBLE9BQU8sSUFBTUMsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJTixLQUFZLEVBQUVPLGtCQUEyQixFQUFjO0VBQ3JGLElBQUlMLGtCQUFrQixDQUFDRixLQUFLLENBQUMsSUFBSUEsS0FBSyxDQUFDQyxJQUFJLEtBQUssT0FBTyxJQUFJRixXQUFXLENBQUND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
|
|
@@ -0,0 +1,144 @@
|
|
|
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
|
+
import { agentNeedsEntity, canUserCreateAgents, dispatchOpenCreateAgentModal, getSectionLabelKey, isAgentUnavailable, isListableAgent, resolveDisplayedAgent, shouldShowAgentSelector, showsAgentEmoji } from './ChatAiModalHeader.utils';
|
|
5
|
+
var makeAgent = function makeAgent() {
|
|
6
|
+
var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
7
|
+
return _objectSpread({
|
|
8
|
+
id: 1,
|
|
9
|
+
name: 'Agent',
|
|
10
|
+
type: 'custom'
|
|
11
|
+
}, overrides);
|
|
12
|
+
};
|
|
13
|
+
describe('ChatAiModalHeader utils', function () {
|
|
14
|
+
afterEach(function () {
|
|
15
|
+
delete window.MAIA_CHAT_AI_FEATURE_ACCESS;
|
|
16
|
+
delete window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
|
|
17
|
+
});
|
|
18
|
+
it('isAgentUnavailable detects deleted, forbidden and inaccessible agents', function () {
|
|
19
|
+
expect(isAgentUnavailable(makeAgent())).toBe(false);
|
|
20
|
+
expect(isAgentUnavailable(makeAgent({
|
|
21
|
+
is_deleted: true
|
|
22
|
+
}))).toBe(true);
|
|
23
|
+
expect(isAgentUnavailable(makeAgent({
|
|
24
|
+
has_not_permissions: true
|
|
25
|
+
}))).toBe(true);
|
|
26
|
+
expect(isAgentUnavailable(makeAgent({
|
|
27
|
+
has_not_access: true
|
|
28
|
+
}))).toBe(true);
|
|
29
|
+
expect(isAgentUnavailable(null)).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
it('isListableAgent excludes clone, MAIA and custom without multi-agents', function () {
|
|
32
|
+
expect(isListableAgent(makeAgent({
|
|
33
|
+
type: 'clone'
|
|
34
|
+
}), true)).toBe(false);
|
|
35
|
+
expect(isListableAgent(makeAgent({
|
|
36
|
+
type: 'orchestrator'
|
|
37
|
+
}), true)).toBe(false);
|
|
38
|
+
expect(isListableAgent(makeAgent({
|
|
39
|
+
type: 'custom'
|
|
40
|
+
}), false)).toBe(false);
|
|
41
|
+
expect(isListableAgent(makeAgent({
|
|
42
|
+
type: 'custom'
|
|
43
|
+
}), true)).toBe(true);
|
|
44
|
+
expect(isListableAgent(makeAgent({
|
|
45
|
+
type: 'custom',
|
|
46
|
+
is_deleted: true
|
|
47
|
+
}), true)).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
it('showsAgentEmoji only for non legacy custom agents', function () {
|
|
50
|
+
expect(showsAgentEmoji(makeAgent())).toBe(true);
|
|
51
|
+
expect(showsAgentEmoji(makeAgent({
|
|
52
|
+
is_legacy_context: true
|
|
53
|
+
}))).toBe(false);
|
|
54
|
+
expect(showsAgentEmoji(makeAgent({
|
|
55
|
+
type: 'orchestrator'
|
|
56
|
+
}))).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
it('agentNeedsEntity only for project/client clones', function () {
|
|
59
|
+
expect(agentNeedsEntity(makeAgent({
|
|
60
|
+
type: 'clone',
|
|
61
|
+
entity: 'project'
|
|
62
|
+
}))).toBe(true);
|
|
63
|
+
expect(agentNeedsEntity(makeAgent({
|
|
64
|
+
type: 'clone',
|
|
65
|
+
entity: 'client'
|
|
66
|
+
}))).toBe(true);
|
|
67
|
+
expect(agentNeedsEntity(makeAgent({
|
|
68
|
+
type: 'clone',
|
|
69
|
+
entity: 'global'
|
|
70
|
+
}))).toBe(false);
|
|
71
|
+
expect(agentNeedsEntity(makeAgent())).toBe(false);
|
|
72
|
+
});
|
|
73
|
+
it('resolveDisplayedAgent prefers the list version and falls back to the context agent', function () {
|
|
74
|
+
var selected = makeAgent({
|
|
75
|
+
name: 'from context'
|
|
76
|
+
});
|
|
77
|
+
var listed = makeAgent({
|
|
78
|
+
name: 'from list'
|
|
79
|
+
});
|
|
80
|
+
expect(resolveDisplayedAgent([listed], selected)).toBe(listed);
|
|
81
|
+
expect(resolveDisplayedAgent([], selected)).toBe(selected);
|
|
82
|
+
expect(resolveDisplayedAgent([], null)).toBeNull();
|
|
83
|
+
var fromConversation = makeAgent({
|
|
84
|
+
is_from_conversation: true
|
|
85
|
+
});
|
|
86
|
+
expect(resolveDisplayedAgent([listed], fromConversation)).toBe(fromConversation);
|
|
87
|
+
});
|
|
88
|
+
it('getSectionLabelKey maps the section to its translation key', function () {
|
|
89
|
+
expect(getSectionLabelKey(true, false)).toBe('marketplace.myAgentsTitle');
|
|
90
|
+
expect(getSectionLabelKey(false, true)).toBe('conversations.mySkillsNav');
|
|
91
|
+
expect(getSectionLabelKey(false, false)).toBeNull();
|
|
92
|
+
});
|
|
93
|
+
it('canUserCreateAgents requires the permission and the multi-agents feature', function () {
|
|
94
|
+
var user = {
|
|
95
|
+
permissions: {
|
|
96
|
+
ai_agents: {
|
|
97
|
+
create: true
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
expect(canUserCreateAgents(user)).toBe(false);
|
|
102
|
+
window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS = true;
|
|
103
|
+
expect(canUserCreateAgents(user)).toBe(true);
|
|
104
|
+
expect(canUserCreateAgents({})).toBe(false);
|
|
105
|
+
});
|
|
106
|
+
it('shouldShowAgentSelector hides on error/loading and without agent or feature access', function () {
|
|
107
|
+
var base = {
|
|
108
|
+
hasError: false,
|
|
109
|
+
loading: false,
|
|
110
|
+
hideAgentSelector: false,
|
|
111
|
+
hasSelectedAgent: true,
|
|
112
|
+
isAgentsSection: false
|
|
113
|
+
};
|
|
114
|
+
expect(shouldShowAgentSelector(base)).toBe(false);
|
|
115
|
+
window.MAIA_CHAT_AI_FEATURE_ACCESS = true;
|
|
116
|
+
expect(shouldShowAgentSelector(base)).toBe(true);
|
|
117
|
+
expect(shouldShowAgentSelector(_objectSpread(_objectSpread({}, base), {}, {
|
|
118
|
+
loading: true
|
|
119
|
+
}))).toBe(false);
|
|
120
|
+
expect(shouldShowAgentSelector(_objectSpread(_objectSpread({}, base), {}, {
|
|
121
|
+
hasSelectedAgent: false
|
|
122
|
+
}))).toBe(false);
|
|
123
|
+
expect(shouldShowAgentSelector(_objectSpread(_objectSpread({}, base), {}, {
|
|
124
|
+
hasSelectedAgent: false,
|
|
125
|
+
isAgentsSection: true
|
|
126
|
+
}))).toBe(true);
|
|
127
|
+
});
|
|
128
|
+
it('dispatchOpenCreateAgentModal emits the ABM open event', function () {
|
|
129
|
+
var listener = jest.fn();
|
|
130
|
+
document.addEventListener('abm-agent-modal-set-values', listener);
|
|
131
|
+
dispatchOpenCreateAgentModal();
|
|
132
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
133
|
+
expect(listener.mock.calls[0][0].detail).toEqual({
|
|
134
|
+
agentValues: {
|
|
135
|
+
values: {
|
|
136
|
+
isEditing: false
|
|
137
|
+
},
|
|
138
|
+
isOpen: true
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
document.removeEventListener('abm-agent-modal-set-values', listener);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhZ2VudE5lZWRzRW50aXR5IiwiY2FuVXNlckNyZWF0ZUFnZW50cyIsImRpc3BhdGNoT3BlbkNyZWF0ZUFnZW50TW9kYWwiLCJnZXRTZWN0aW9uTGFiZWxLZXkiLCJpc0FnZW50VW5hdmFpbGFibGUiLCJpc0xpc3RhYmxlQWdlbnQiLCJyZXNvbHZlRGlzcGxheWVkQWdlbnQiLCJzaG91bGRTaG93QWdlbnRTZWxlY3RvciIsInNob3dzQWdlbnRFbW9qaSIsIm1ha2VBZ2VudCIsIm92ZXJyaWRlcyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9vYmplY3RTcHJlYWQiLCJpZCIsIm5hbWUiLCJ0eXBlIiwiZGVzY3JpYmUiLCJhZnRlckVhY2giLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiaXQiLCJleHBlY3QiLCJ0b0JlIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsImlzX2xlZ2FjeV9jb250ZXh0IiwiZW50aXR5Iiwic2VsZWN0ZWQiLCJsaXN0ZWQiLCJ0b0JlTnVsbCIsImZyb21Db252ZXJzYXRpb24iLCJpc19mcm9tX2NvbnZlcnNhdGlvbiIsInVzZXIiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNyZWF0ZSIsImJhc2UiLCJoYXNFcnJvciIsImxvYWRpbmciLCJoaWRlQWdlbnRTZWxlY3RvciIsImhhc1NlbGVjdGVkQWdlbnQiLCJpc0FnZW50c1NlY3Rpb24iLCJsaXN0ZW5lciIsImplc3QiLCJmbiIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsIm1vY2siLCJjYWxscyIsImRldGFpbCIsInRvRXF1YWwiLCJhZ2VudFZhbHVlcyIsInZhbHVlcyIsImlzRWRpdGluZyIsImlzT3BlbiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlci51dGlscy5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ09SVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHtcbiAgYWdlbnROZWVkc0VudGl0eSxcbiAgY2FuVXNlckNyZWF0ZUFnZW50cyxcbiAgZGlzcGF0Y2hPcGVuQ3JlYXRlQWdlbnRNb2RhbCxcbiAgZ2V0U2VjdGlvbkxhYmVsS2V5LFxuICBpc0FnZW50VW5hdmFpbGFibGUsXG4gIGlzTGlzdGFibGVBZ2VudCxcbiAgcmVzb2x2ZURpc3BsYXllZEFnZW50LFxuICBzaG91bGRTaG93QWdlbnRTZWxlY3RvcixcbiAgc2hvd3NBZ2VudEVtb2ppLFxufSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLnV0aWxzJ1xuXG5jb25zdCBtYWtlQWdlbnQgPSAob3ZlcnJpZGVzOiBQYXJ0aWFsPEFnZW50PiA9IHt9KTogQWdlbnQgPT5cbiAgKHsgaWQ6IDEsIG5hbWU6ICdBZ2VudCcsIHR5cGU6ICdjdXN0b20nLCAuLi5vdmVycmlkZXMgfSkgYXMgQWdlbnRcblxuZGVzY3JpYmUoJ0NoYXRBaU1vZGFsSGVhZGVyIHV0aWxzJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGRlbGV0ZSB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTXG4gICAgZGVsZXRlIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gIH0pXG5cbiAgaXQoJ2lzQWdlbnRVbmF2YWlsYWJsZSBkZXRlY3RzIGRlbGV0ZWQsIGZvcmJpZGRlbiBhbmQgaW5hY2Nlc3NpYmxlIGFnZW50cycsICgpID0+IHtcbiAgICBleHBlY3QoaXNBZ2VudFVuYXZhaWxhYmxlKG1ha2VBZ2VudCgpKSkudG9CZShmYWxzZSlcbiAgICBleHBlY3QoaXNBZ2VudFVuYXZhaWxhYmxlKG1ha2VBZ2VudCh7IGlzX2RlbGV0ZWQ6IHRydWUgfSkpKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KGlzQWdlbnRVbmF2YWlsYWJsZShtYWtlQWdlbnQoeyBoYXNfbm90X3Blcm1pc3Npb25zOiB0cnVlIH0pKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChpc0FnZW50VW5hdmFpbGFibGUobWFrZUFnZW50KHsgaGFzX25vdF9hY2Nlc3M6IHRydWUgfSkpKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KGlzQWdlbnRVbmF2YWlsYWJsZShudWxsKSkudG9CZShmYWxzZSlcbiAgfSlcblxuICBpdCgnaXNMaXN0YWJsZUFnZW50IGV4Y2x1ZGVzIGNsb25lLCBNQUlBIGFuZCBjdXN0b20gd2l0aG91dCBtdWx0aS1hZ2VudHMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGlzTGlzdGFibGVBZ2VudChtYWtlQWdlbnQoeyB0eXBlOiAnY2xvbmUnIH0pLCB0cnVlKSkudG9CZShmYWxzZSlcbiAgICBleHBlY3QoaXNMaXN0YWJsZUFnZW50KG1ha2VBZ2VudCh7IHR5cGU6ICdvcmNoZXN0cmF0b3InIH0pLCB0cnVlKSkudG9CZShmYWxzZSlcbiAgICBleHBlY3QoaXNMaXN0YWJsZUFnZW50KG1ha2VBZ2VudCh7IHR5cGU6ICdjdXN0b20nIH0pLCBmYWxzZSkpLnRvQmUoZmFsc2UpXG4gICAgZXhwZWN0KGlzTGlzdGFibGVBZ2VudChtYWtlQWdlbnQoeyB0eXBlOiAnY3VzdG9tJyB9KSwgdHJ1ZSkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QoaXNMaXN0YWJsZUFnZW50KG1ha2VBZ2VudCh7IHR5cGU6ICdjdXN0b20nLCBpc19kZWxldGVkOiB0cnVlIH0pLCB0cnVlKSkudG9CZShmYWxzZSlcbiAgfSlcblxuICBpdCgnc2hvd3NBZ2VudEVtb2ppIG9ubHkgZm9yIG5vbiBsZWdhY3kgY3VzdG9tIGFnZW50cycsICgpID0+IHtcbiAgICBleHBlY3Qoc2hvd3NBZ2VudEVtb2ppKG1ha2VBZ2VudCgpKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChzaG93c0FnZW50RW1vamkobWFrZUFnZW50KHsgaXNfbGVnYWN5X2NvbnRleHQ6IHRydWUgfSkpKS50b0JlKGZhbHNlKVxuICAgIGV4cGVjdChzaG93c0FnZW50RW1vamkobWFrZUFnZW50KHsgdHlwZTogJ29yY2hlc3RyYXRvcicgfSkpKS50b0JlKGZhbHNlKVxuICB9KVxuXG4gIGl0KCdhZ2VudE5lZWRzRW50aXR5IG9ubHkgZm9yIHByb2plY3QvY2xpZW50IGNsb25lcycsICgpID0+IHtcbiAgICBleHBlY3QoYWdlbnROZWVkc0VudGl0eShtYWtlQWdlbnQoeyB0eXBlOiAnY2xvbmUnLCBlbnRpdHk6ICdwcm9qZWN0JyB9KSkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QoYWdlbnROZWVkc0VudGl0eShtYWtlQWdlbnQoeyB0eXBlOiAnY2xvbmUnLCBlbnRpdHk6ICdjbGllbnQnIH0pKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChhZ2VudE5lZWRzRW50aXR5KG1ha2VBZ2VudCh7IHR5cGU6ICdjbG9uZScsIGVudGl0eTogJ2dsb2JhbCcgfSkpKS50b0JlKGZhbHNlKVxuICAgIGV4cGVjdChhZ2VudE5lZWRzRW50aXR5KG1ha2VBZ2VudCgpKSkudG9CZShmYWxzZSlcbiAgfSlcblxuICBpdCgncmVzb2x2ZURpc3BsYXllZEFnZW50IHByZWZlcnMgdGhlIGxpc3QgdmVyc2lvbiBhbmQgZmFsbHMgYmFjayB0byB0aGUgY29udGV4dCBhZ2VudCcsICgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IG1ha2VBZ2VudCh7IG5hbWU6ICdmcm9tIGNvbnRleHQnIH0pXG4gICAgY29uc3QgbGlzdGVkID0gbWFrZUFnZW50KHsgbmFtZTogJ2Zyb20gbGlzdCcgfSlcbiAgICBleHBlY3QocmVzb2x2ZURpc3BsYXllZEFnZW50KFtsaXN0ZWRdLCBzZWxlY3RlZCkpLnRvQmUobGlzdGVkKVxuICAgIGV4cGVjdChyZXNvbHZlRGlzcGxheWVkQWdlbnQoW10sIHNlbGVjdGVkKSkudG9CZShzZWxlY3RlZClcbiAgICBleHBlY3QocmVzb2x2ZURpc3BsYXllZEFnZW50KFtdLCBudWxsKSkudG9CZU51bGwoKVxuXG4gICAgY29uc3QgZnJvbUNvbnZlcnNhdGlvbiA9IG1ha2VBZ2VudCh7IGlzX2Zyb21fY29udmVyc2F0aW9uOiB0cnVlIH0pXG4gICAgZXhwZWN0KHJlc29sdmVEaXNwbGF5ZWRBZ2VudChbbGlzdGVkXSwgZnJvbUNvbnZlcnNhdGlvbikpLnRvQmUoZnJvbUNvbnZlcnNhdGlvbilcbiAgfSlcblxuICBpdCgnZ2V0U2VjdGlvbkxhYmVsS2V5IG1hcHMgdGhlIHNlY3Rpb24gdG8gaXRzIHRyYW5zbGF0aW9uIGtleScsICgpID0+IHtcbiAgICBleHBlY3QoZ2V0U2VjdGlvbkxhYmVsS2V5KHRydWUsIGZhbHNlKSkudG9CZSgnbWFya2V0cGxhY2UubXlBZ2VudHNUaXRsZScpXG4gICAgZXhwZWN0KGdldFNlY3Rpb25MYWJlbEtleShmYWxzZSwgdHJ1ZSkpLnRvQmUoJ2NvbnZlcnNhdGlvbnMubXlTa2lsbHNOYXYnKVxuICAgIGV4cGVjdChnZXRTZWN0aW9uTGFiZWxLZXkoZmFsc2UsIGZhbHNlKSkudG9CZU51bGwoKVxuICB9KVxuXG4gIGl0KCdjYW5Vc2VyQ3JlYXRlQWdlbnRzIHJlcXVpcmVzIHRoZSBwZXJtaXNzaW9uIGFuZCB0aGUgbXVsdGktYWdlbnRzIGZlYXR1cmUnLCAoKSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHsgcGVybWlzc2lvbnM6IHsgYWlfYWdlbnRzOiB7IGNyZWF0ZTogdHJ1ZSB9IH0gfSBhcyB1bmtub3duIGFzIENPUlVzZXJcbiAgICBleHBlY3QoY2FuVXNlckNyZWF0ZUFnZW50cyh1c2VyKSkudG9CZShmYWxzZSlcbiAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyA9IHRydWVcbiAgICBleHBlY3QoY2FuVXNlckNyZWF0ZUFnZW50cyh1c2VyKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChjYW5Vc2VyQ3JlYXRlQWdlbnRzKHt9IGFzIENPUlVzZXIpKS50b0JlKGZhbHNlKVxuICB9KVxuXG4gIGl0KCdzaG91bGRTaG93QWdlbnRTZWxlY3RvciBoaWRlcyBvbiBlcnJvci9sb2FkaW5nIGFuZCB3aXRob3V0IGFnZW50IG9yIGZlYXR1cmUgYWNjZXNzJywgKCkgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICBoYXNFcnJvcjogZmFsc2UsXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgIGhpZGVBZ2VudFNlbGVjdG9yOiBmYWxzZSxcbiAgICAgIGhhc1NlbGVjdGVkQWdlbnQ6IHRydWUsXG4gICAgICBpc0FnZW50c1NlY3Rpb246IGZhbHNlLFxuICAgIH1cbiAgICBleHBlY3Qoc2hvdWxkU2hvd0FnZW50U2VsZWN0b3IoYmFzZSkpLnRvQmUoZmFsc2UpXG4gICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyA9IHRydWVcbiAgICBleHBlY3Qoc2hvdWxkU2hvd0FnZW50U2VsZWN0b3IoYmFzZSkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3Qoc2hvdWxkU2hvd0FnZW50U2VsZWN0b3IoeyAuLi5iYXNlLCBsb2FkaW5nOiB0cnVlIH0pKS50b0JlKGZhbHNlKVxuICAgIGV4cGVjdChzaG91bGRTaG93QWdlbnRTZWxlY3Rvcih7IC4uLmJhc2UsIGhhc1NlbGVjdGVkQWdlbnQ6IGZhbHNlIH0pKS50b0JlKGZhbHNlKVxuICAgIGV4cGVjdChzaG91bGRTaG93QWdlbnRTZWxlY3Rvcih7IC4uLmJhc2UsIGhhc1NlbGVjdGVkQWdlbnQ6IGZhbHNlLCBpc0FnZW50c1NlY3Rpb246IHRydWUgfSkpLnRvQmUodHJ1ZSlcbiAgfSlcblxuICBpdCgnZGlzcGF0Y2hPcGVuQ3JlYXRlQWdlbnRNb2RhbCBlbWl0cyB0aGUgQUJNIG9wZW4gZXZlbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSBqZXN0LmZuKClcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIGxpc3RlbmVyKVxuICAgIGRpc3BhdGNoT3BlbkNyZWF0ZUFnZW50TW9kYWwoKVxuICAgIGV4cGVjdChsaXN0ZW5lcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpXG4gICAgZXhwZWN0KChsaXN0ZW5lci5tb2NrLmNhbGxzWzBdWzBdIGFzIEN1c3RvbUV2ZW50KS5kZXRhaWwpLnRvRXF1YWwoe1xuICAgICAgYWdlbnRWYWx1ZXM6IHsgdmFsdWVzOiB7IGlzRWRpdGluZzogZmFsc2UgfSwgaXNPcGVuOiB0cnVlIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIGxpc3RlbmVyKVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsU0FDRUEsZ0JBQWdCLEVBQ2hCQyxtQkFBbUIsRUFDbkJDLDRCQUE0QixFQUM1QkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0IsRUFDbEJDLGVBQWUsRUFDZkMscUJBQXFCLEVBQ3JCQyx1QkFBdUIsRUFDdkJDLGVBQWUsUUFDViwyQkFBMkI7QUFFbEMsSUFBTUMsU0FBUyxHQUFHLFNBQVpBLFNBQVNBLENBQUE7RUFBQSxJQUFJQyxTQUF5QixHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFBQSxPQUFBRyxhQUFBO0lBQzVDQyxFQUFFLEVBQUUsQ0FBQztJQUFFQyxJQUFJLEVBQUUsT0FBTztJQUFFQyxJQUFJLEVBQUU7RUFBUSxHQUFLUCxTQUFTO0FBQUEsQ0FBWTtBQUVuRVEsUUFBUSxDQUFDLHlCQUF5QixFQUFFLFlBQU07RUFDeENDLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsT0FBT0MsTUFB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Q0FBQztJQUNEckIsTUFBTSxDQUFDakIsdUJBQXVCLENBQUNpQyxJQUFJLENBQUMsQ0FBQyxDQUFDZixJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2pETCxNQUFNLENBQUNDLDJCQUEyQixHQUFHLElBQUk7SUFDekNHLE1BQU0sQ0FBQ2pCLHVCQUF1QixDQUFDaUMsSUFBSSxDQUFDLENBQUMsQ0FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoREQsTUFBTSxDQUFDakIsdUJBQXVCLENBQUFPLGFBQUEsQ0FBQUEsYUFBQSxLQUFNMEIsSUFBSTtNQUFFRSxPQUFPLEVBQUU7SUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN2RUQsTUFBTSxDQUFDakIsdUJBQXVCLENBQUFPLGFBQUEsQ0FBQUEsYUFBQSxLQUFNMEIsSUFBSTtNQUFFSSxnQkFBZ0IsRUFBRTtJQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2pGRCxNQUFNLENBQUNqQix1QkFBdUIsQ0FBQU8sYUFBQSxDQUFBQSxhQUFBLEtBQU0wQixJQUFJO01BQUVJLGdCQUFnQixFQUFFLEtBQUs7TUFBRUMsZUFBZSxFQUFFO0lBQUksRUFBRSxDQUFDLENBQUMsQ0FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDekcsQ0FBQyxDQUFDO0VBRUZGLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxZQUFNO0lBQ2hFLElBQU11QixRQUFRLEdBQUdDLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7SUFDMUJDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsNEJBQTRCLEVBQUVKLFFBQVEsQ0FBQztJQUNqRTVDLDRCQUE0QixDQUFDLENBQUM7SUFDOUJzQixNQUFNLENBQUNzQixRQUFRLENBQUMsQ0FBQ0sscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0lBQ3pDM0IsTUFBTSxDQUFFc0IsUUFBUSxDQUFDTSxJQUFJLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBaUJDLE1BQU0sQ0FBQyxDQUFDQyxPQUFPLENBQUM7TUFDaEVDLFdBQVcsRUFBRTtRQUFFQyxNQUFNLEVBQUU7VUFBRUMsU0FBUyxFQUFFO1FBQU0sQ0FBQztRQUFFQyxNQUFNLEVBQUU7TUFBSztJQUM1RCxDQUFDLENBQUM7SUFDRlYsUUFBUSxDQUFDVyxtQkFBbUIsQ0FBQyw0QkFBNEIsRUFBRWQsUUFBUSxDQUFDO0VBQ3RFLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { Plus } from '@projectcor/icons/lib/components/Plus';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { SECTIONS } from '../../../../../constants/config';
|
|
5
|
+
import { Loader } from '../../../../atoms/Loader';
|
|
6
|
+
import { ChatAIAgentOption } from '../ChatAiAgentOptions/ChatAiAgentOptions';
|
|
7
|
+
import { SCCAIMHAddAgent, SCCAIMHAgentsList, SCCAIMHDivider, SCCAIMHLoaderWrapper, SCCAIMHPlusIconWrapper, SCCAIMHWrapperModal, SCCAIMHWrapperModalContent, SCCAIMHWrapperModalContentTitle } from './ChatAiModalHeader.styles';
|
|
8
|
+
import { isListableAgent, isMaiaAgent } from './ChatAiModalHeader.utils';
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
10
|
+
export var ChatAiModalHeaderAgentDropdown = function ChatAiModalHeaderAgentDropdown(_ref) {
|
|
11
|
+
var agents = _ref.agents,
|
|
12
|
+
selectedAgentId = _ref.selectedAgentId,
|
|
13
|
+
companyName = _ref.companyName,
|
|
14
|
+
showMaiaAgents = _ref.showMaiaAgents,
|
|
15
|
+
showAddAgent = _ref.showAddAgent,
|
|
16
|
+
hasMore = _ref.hasMore,
|
|
17
|
+
loadingMore = _ref.loadingMore,
|
|
18
|
+
loadMoreAgents = _ref.loadMoreAgents,
|
|
19
|
+
onSelectAgent = _ref.onSelectAgent,
|
|
20
|
+
onAgentUpdate = _ref.onAgentUpdate,
|
|
21
|
+
onClose = _ref.onClose,
|
|
22
|
+
onAddAgent = _ref.onAddAgent;
|
|
23
|
+
var _useTranslation = useTranslation([SECTIONS.abmAgent, SECTIONS.chatAI]),
|
|
24
|
+
t = _useTranslation.t;
|
|
25
|
+
var agentsRef = useRef(null);
|
|
26
|
+
var multiAgentsEnabled = !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
|
|
27
|
+
var maiaAgents = showMaiaAgents ? agents.filter(isMaiaAgent) : [];
|
|
28
|
+
var showCustomTitle = multiAgentsEnabled && agents.some(function (agent) {
|
|
29
|
+
return agent.type === 'custom';
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Scroll infinito: cargar más agentes 50px antes del final de la lista
|
|
33
|
+
useEffect(function () {
|
|
34
|
+
var scrollElement = agentsRef.current;
|
|
35
|
+
if (!scrollElement || !loadMoreAgents || !hasMore || loadingMore) return undefined;
|
|
36
|
+
var handleScroll = function handleScroll() {
|
|
37
|
+
var scrollTop = scrollElement.scrollTop,
|
|
38
|
+
scrollHeight = scrollElement.scrollHeight,
|
|
39
|
+
clientHeight = scrollElement.clientHeight;
|
|
40
|
+
if (scrollHeight - scrollTop - clientHeight < 50) {
|
|
41
|
+
loadMoreAgents();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
scrollElement.addEventListener('scroll', handleScroll);
|
|
45
|
+
return function () {
|
|
46
|
+
scrollElement.removeEventListener('scroll', handleScroll);
|
|
47
|
+
};
|
|
48
|
+
}, [loadMoreAgents, hasMore, loadingMore]);
|
|
49
|
+
return /*#__PURE__*/_jsx(SCCAIMHWrapperModal, {
|
|
50
|
+
children: /*#__PURE__*/_jsxs(SCCAIMHWrapperModalContent, {
|
|
51
|
+
children: [maiaAgents.map(function (maiaAgent, index) {
|
|
52
|
+
return /*#__PURE__*/_jsx(ChatAIAgentOption, {
|
|
53
|
+
agent: maiaAgent,
|
|
54
|
+
index: index,
|
|
55
|
+
handleSelectAgent: onSelectAgent,
|
|
56
|
+
isSelected: selectedAgentId === maiaAgent.id,
|
|
57
|
+
isMaia: true,
|
|
58
|
+
onFavoriteToggle: onAgentUpdate
|
|
59
|
+
}, "agent-".concat(maiaAgent.id));
|
|
60
|
+
}), showCustomTitle ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
61
|
+
children: [/*#__PURE__*/_jsxs(SCCAIMHWrapperModalContentTitle, {
|
|
62
|
+
children: [t('agents'), " by ", companyName]
|
|
63
|
+
}), /*#__PURE__*/_jsx(SCCAIMHDivider, {})]
|
|
64
|
+
}) : null, /*#__PURE__*/_jsxs(SCCAIMHAgentsList, {
|
|
65
|
+
hasMore: hasMore,
|
|
66
|
+
agentsCount: agents.length,
|
|
67
|
+
ref: agentsRef,
|
|
68
|
+
children: [agents.map(function (agent, index) {
|
|
69
|
+
return isListableAgent(agent, multiAgentsEnabled) ? /*#__PURE__*/_jsx(ChatAIAgentOption, {
|
|
70
|
+
agent: agent,
|
|
71
|
+
index: index,
|
|
72
|
+
handleSelectAgent: onSelectAgent,
|
|
73
|
+
isSelected: selectedAgentId === agent.id,
|
|
74
|
+
onFavoriteToggle: onAgentUpdate,
|
|
75
|
+
setIsExpanded: onClose
|
|
76
|
+
}, "agent-".concat(agent.id)) : null;
|
|
77
|
+
}), loadingMore ? /*#__PURE__*/_jsx(SCCAIMHLoaderWrapper, {
|
|
78
|
+
children: /*#__PURE__*/_jsx(Loader, {
|
|
79
|
+
size: "small"
|
|
80
|
+
})
|
|
81
|
+
}) : null]
|
|
82
|
+
}), showAddAgent ? /*#__PURE__*/_jsxs(SCCAIMHAddAgent, {
|
|
83
|
+
onClick: onAddAgent,
|
|
84
|
+
children: [/*#__PURE__*/_jsx(SCCAIMHPlusIconWrapper, {
|
|
85
|
+
children: /*#__PURE__*/_jsx(Plus, {
|
|
86
|
+
color: "white",
|
|
87
|
+
width: 18,
|
|
88
|
+
height: 18
|
|
89
|
+
})
|
|
90
|
+
}), t('createAgent')]
|
|
91
|
+
}) : null]
|
|
92
|
+
})
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJQbHVzIiwidXNlVHJhbnNsYXRpb24iLCJTRUNUSU9OUyIsIkxvYWRlciIsIkNoYXRBSUFnZW50T3B0aW9uIiwiU0NDQUlNSEFkZEFnZW50IiwiU0NDQUlNSEFnZW50c0xpc3QiLCJTQ0NBSU1IRGl2aWRlciIsIlNDQ0FJTUhMb2FkZXJXcmFwcGVyIiwiU0NDQUlNSFBsdXNJY29uV3JhcHBlciIsIlNDQ0FJTUhXcmFwcGVyTW9kYWwiLCJTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudCIsIlNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50VGl0bGUiLCJpc0xpc3RhYmxlQWdlbnQiLCJpc01haWFBZ2VudCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkNoYXRBaU1vZGFsSGVhZGVyQWdlbnREcm9wZG93biIsIl9yZWYiLCJhZ2VudHMiLCJzZWxlY3RlZEFnZW50SWQiLCJjb21wYW55TmFtZSIsInNob3dNYWlhQWdlbnRzIiwic2hvd0FkZEFnZW50IiwiaGFzTW9yZSIsImxvYWRpbmdNb3JlIiwibG9hZE1vcmVBZ2VudHMiLCJvblNlbGVjdEFnZW50Iiwib25BZ2VudFVwZGF0ZSIsIm9uQ2xvc2UiLCJvbkFkZEFnZW50IiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJjaGF0QUkiLCJ0IiwiYWdlbnRzUmVmIiwibXVsdGlBZ2VudHNFbmFibGVkIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIm1haWFBZ2VudHMiLCJmaWx0ZXIiLCJzaG93Q3VzdG9tVGl0bGUiLCJzb21lIiwiYWdlbnQiLCJ0eXBlIiwic2Nyb2xsRWxlbWVudCIsImN1cnJlbnQiLCJ1bmRlZmluZWQiLCJoYW5kbGVTY3JvbGwiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNoaWxkcmVuIiwibWFwIiwibWFpYUFnZW50IiwiaW5kZXgiLCJoYW5kbGVTZWxlY3RBZ2VudCIsImlzU2VsZWN0ZWQiLCJpZCIsImlzTWFpYSIsIm9uRmF2b3JpdGVUb2dnbGUiLCJjb25jYXQiLCJhZ2VudHNDb3VudCIsImxlbmd0aCIsInJlZiIsInNldElzRXhwYW5kZWQiLCJzaXplIiwib25DbGljayIsImNvbG9yIiwid2lkdGgiLCJoZWlnaHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlckFnZW50RHJvcGRvd24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBQbHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvUGx1cydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBDaGF0QUlBZ2VudE9wdGlvbiB9IGZyb20gJy4uL0NoYXRBaUFnZW50T3B0aW9ucy9DaGF0QWlBZ2VudE9wdGlvbnMnXG5pbXBvcnQge1xuICBTQ0NBSU1IQWRkQWdlbnQsXG4gIFNDQ0FJTUhBZ2VudHNMaXN0LFxuICBTQ0NBSU1IRGl2aWRlcixcbiAgU0NDQUlNSExvYWRlcldyYXBwZXIsXG4gIFNDQ0FJTUhQbHVzSWNvbldyYXBwZXIsXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWwsXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50LFxuICBTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudFRpdGxlLFxufSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLnN0eWxlcydcbmltcG9ydCB7IGlzTGlzdGFibGVBZ2VudCwgaXNNYWlhQWdlbnQgfSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLnV0aWxzJ1xuXG50eXBlIENoYXRBaU1vZGFsSGVhZGVyQWdlbnREcm9wZG93blByb3BzID0ge1xuICBhZ2VudHM6IEFnZW50W11cbiAgc2VsZWN0ZWRBZ2VudElkPzogQWdlbnRbJ2lkJ11cbiAgY29tcGFueU5hbWU/OiBzdHJpbmdcbiAgc2hvd01haWFBZ2VudHM6IGJvb2xlYW5cbiAgc2hvd0FkZEFnZW50OiBib29sZWFuXG4gIGhhc01vcmU6IGJvb2xlYW5cbiAgbG9hZGluZ01vcmU6IGJvb2xlYW5cbiAgbG9hZE1vcmVBZ2VudHM/OiAoKSA9PiB2b2lkXG4gIG9uU2VsZWN0QWdlbnQ6IChhZ2VudDogQWdlbnQpID0+IHZvaWRcbiAgb25BZ2VudFVwZGF0ZT86ICh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbiAgb25BZGRBZ2VudDogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFpTW9kYWxIZWFkZXJBZ2VudERyb3Bkb3duID0gKHtcbiAgYWdlbnRzLFxuICBzZWxlY3RlZEFnZW50SWQsXG4gIGNvbXBhbnlOYW1lLFxuICBzaG93TWFpYUFnZW50cyxcbiAgc2hvd0FkZEFnZW50LFxuICBoYXNNb3JlLFxuICBsb2FkaW5nTW9yZSxcbiAgbG9hZE1vcmVBZ2VudHMsXG4gIG9uU2VsZWN0QWdlbnQsXG4gIG9uQWdlbnRVcGRhdGUsXG4gIG9uQ2xvc2UsXG4gIG9uQWRkQWdlbnQsXG59OiBDaGF0QWlNb2RhbEhlYWRlckFnZW50RHJvcGRvd25Qcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudCwgU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgYWdlbnRzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBtdWx0aUFnZW50c0VuYWJsZWQgPSAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gIGNvbnN0IG1haWFBZ2VudHMgPSBzaG93TWFpYUFnZW50cyA/IGFnZW50cy5maWx0ZXIoaXNNYWlhQWdlbnQpIDogW11cbiAgY29uc3Qgc2hvd0N1c3RvbVRpdGxlID0gbXVsdGlBZ2VudHNFbmFibGVkICYmIGFnZW50cy5zb21lKGFnZW50ID0+IGFnZW50LnR5cGUgPT09ICdjdXN0b20nKVxuXG4gIC8vIFNjcm9sbCBpbmZpbml0bzogY2FyZ2FyIG3DoXMgYWdlbnRlcyA1MHB4IGFudGVzIGRlbCBmaW5hbCBkZSBsYSBsaXN0YVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBhZ2VudHNSZWYuY3VycmVudFxuICAgIGlmICghc2Nyb2xsRWxlbWVudCB8fCAhbG9hZE1vcmVBZ2VudHMgfHwgIWhhc01vcmUgfHwgbG9hZGluZ01vcmUpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gc2Nyb2xsRWxlbWVudFxuICAgICAgaWYgKHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IDUwKSB7XG4gICAgICAgIGxvYWRNb3JlQWdlbnRzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY3JvbGxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2Nyb2xsRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgfVxuICB9LCBbbG9hZE1vcmVBZ2VudHMsIGhhc01vcmUsIGxvYWRpbmdNb3JlXSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSU1IV3JhcHBlck1vZGFsPlxuICAgICAgPFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50PlxuICAgICAgICB7bWFpYUFnZW50cy5tYXAoKG1haWFBZ2VudCwgaW5kZXgpID0+IChcbiAgICAgICAgICA8Q2hhdEFJQWdlbnRPcHRpb25cbiAgICAgICAgICAgIGtleT17YGFnZW50LSR7bWFpYUFnZW50LmlkfWB9XG4gICAgICAgICAgICBhZ2VudD17bWFpYUFnZW50fVxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWdlbnQ9e29uU2VsZWN0QWdlbnR9XG4gICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZEFnZW50SWQgPT09IG1haWFBZ2VudC5pZH1cbiAgICAgICAgICAgIGlzTWFpYVxuICAgICAgICAgICAgb25GYXZvcml0ZVRvZ2dsZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgICAge3Nob3dDdXN0b21UaXRsZSA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50VGl0bGU+XG4gICAgICAgICAgICAgIHt0KCdhZ2VudHMnKX0gYnkge2NvbXBhbnlOYW1lfVxuICAgICAgICAgICAgPC9TQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudFRpdGxlPlxuICAgICAgICAgICAgPFNDQ0FJTUhEaXZpZGVyIC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8U0NDQUlNSEFnZW50c0xpc3QgaGFzTW9yZT17aGFzTW9yZX0gYWdlbnRzQ291bnQ9e2FnZW50cy5sZW5ndGh9IHJlZj17YWdlbnRzUmVmfT5cbiAgICAgICAgICB7YWdlbnRzLm1hcCgoYWdlbnQsIGluZGV4KSA9PlxuICAgICAgICAgICAgaXNMaXN0YWJsZUFnZW50KGFnZW50LCBtdWx0aUFnZW50c0VuYWJsZWQpID8gKFxuICAgICAgICAgICAgICA8Q2hhdEFJQWdlbnRPcHRpb25cbiAgICAgICAgICAgICAgICBrZXk9e2BhZ2VudC0ke2FnZW50LmlkfWB9XG4gICAgICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBZ2VudD17b25TZWxlY3RBZ2VudH1cbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZEFnZW50SWQgPT09IGFnZW50LmlkfVxuICAgICAgICAgICAgICAgIG9uRmF2b3JpdGVUb2dnbGU9e29uQWdlbnRVcGRhdGV9XG4gICAgICAgICAgICAgICAgc2V0SXNFeHBhbmRlZD17b25DbG9zZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsXG4gICAgICAgICAgKX1cbiAgICAgICAgICB7bG9hZGluZ01vcmUgPyAoXG4gICAgICAgICAgICA8U0NDQUlNSExvYWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgIDwvU0NDQUlNSExvYWRlcldyYXBwZXI+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU0NDQUlNSEFnZW50c0xpc3Q+XG4gICAgICAgIHtzaG93QWRkQWdlbnQgPyAoXG4gICAgICAgICAgPFNDQ0FJTUhBZGRBZ2VudCBvbkNsaWNrPXtvbkFkZEFnZW50fT5cbiAgICAgICAgICAgIDxTQ0NBSU1IUGx1c0ljb25XcmFwcGVyPlxuICAgICAgICAgICAgICA8UGx1cyBjb2xvcj1cIndoaXRlXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgPC9TQ0NBSU1IUGx1c0ljb25XcmFwcGVyPlxuICAgICAgICAgICAge3QoJ2NyZWF0ZUFnZW50Jyl9XG4gICAgICAgICAgPC9TQ0NBSU1IQWRkQWdlbnQ+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudD5cbiAgICA8L1NDQ0FJTUhXcmFwcGVyTW9kYWw+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBUyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUN6QyxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLFFBQVEsUUFBUSxpQ0FBaUM7QUFFMUQsU0FBU0MsTUFBTSxRQUFRLDBCQUEwQjtBQUNqRCxTQUFTQyxpQkFBaUIsUUFBUSwwQ0FBMEM7QUFDNUUsU0FDRUMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLGNBQWMsRUFDZEMsb0JBQW9CLEVBQ3BCQyxzQkFBc0IsRUFDdEJDLG1CQUFtQixFQUNuQkMsMEJBQTBCLEVBQzFCQywrQkFBK0IsUUFDMUIsNEJBQTRCO0FBQ25DLFNBQVNDLGVBQWUsRUFBRUMsV0FBVyxRQUFRLDJCQUEyQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBaUJ4RSxPQUFPLElBQU1DLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUFDLElBQUEsRUFhQTtFQUFBLElBWnpDQyxNQUFNLEdBQUFELElBQUEsQ0FBTkMsTUFBTTtJQUNOQyxlQUFlLEdBQUFGLElBQUEsQ0FBZkUsZUFBZTtJQUNmQyxXQUFXLEdBQUFILElBQUEsQ0FBWEcsV0FBVztJQUNYQyxjQUFjLEdBQUFKLElBQUEsQ0FBZEksY0FBYztJQUNkQyxZQUFZLEdBQUFMLElBQUEsQ0FBWkssWUFBWTtJQUNaQyxPQUFPLEdBQUFOLElBQUEsQ0FBUE0sT0FBTztJQUNQQyxXQUFXLEdBQUFQLElBQUEsQ0FBWE8sV0FBVztJQUNYQyxjQUFjLEdBQUFSLElBQUEsQ0FBZFEsY0FBYztJQUNkQyxh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
|
|
@@ -0,0 +1,174 @@
|
|
|
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, useRef, useState } from 'react';
|
|
6
|
+
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
7
|
+
import { ChevronDown } from '@projectcor/icons/lib/components/ChevronDown';
|
|
8
|
+
import { useTranslation } from 'react-i18next';
|
|
9
|
+
import { SECTIONS } from '../../../../../constants/config';
|
|
10
|
+
import { isMaiaCloneAgentsRoleBlocked } from '../../../../../constants/maiaTaskPanelAccess';
|
|
11
|
+
import { useUser } from '../../../../../context/cor-user';
|
|
12
|
+
import { useGlobalContext } from '../../../../../context/global-context';
|
|
13
|
+
import { EVENTS, useEvent } from '../../../../../hooks/useEvent';
|
|
14
|
+
import { useResizeListener } from '../../../../../hooks/useResize';
|
|
15
|
+
import { MAIAIcon } from '../../../../atoms/icons';
|
|
16
|
+
import { SCCAIMHSelectedAgent, SCCAIMHSelectedAgentText, SCCAIMHWrapper, SCCAIMHWrapperIcon } from './ChatAiModalHeader.styles';
|
|
17
|
+
import { agentNeedsEntity, canUserCreateAgents, dispatchOpenCreateAgentModal, getSectionLabelKey, isAgentUnavailable, isMaiaAgent, resolveDisplayedAgent, showsAgentEmoji } from './ChatAiModalHeader.utils';
|
|
18
|
+
import { ChatAiModalHeaderAgentDropdown } from './ChatAiModalHeaderAgentDropdown';
|
|
19
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
20
|
+
var LABEL_STYLE = {
|
|
21
|
+
display: 'flex',
|
|
22
|
+
alignItems: 'center',
|
|
23
|
+
gap: '4px'
|
|
24
|
+
};
|
|
25
|
+
export var ChatAiModalHeaderAgentSelector = function ChatAiModalHeaderAgentSelector(_ref) {
|
|
26
|
+
var _localAgents$name;
|
|
27
|
+
var agents = _ref.agents,
|
|
28
|
+
hasMore = _ref.hasMore,
|
|
29
|
+
loadingMore = _ref.loadingMore,
|
|
30
|
+
isMyAgentsSection = _ref.isMyAgentsSection,
|
|
31
|
+
isMySkillsSection = _ref.isMySkillsSection,
|
|
32
|
+
isMaiakerSection = _ref.isMaiakerSection,
|
|
33
|
+
tooltipZIndex = _ref.tooltipZIndex,
|
|
34
|
+
handleResetChat = _ref.handleResetChat,
|
|
35
|
+
onAgentUpdate = _ref.onAgentUpdate,
|
|
36
|
+
loadMoreAgents = _ref.loadMoreAgents,
|
|
37
|
+
sortAgentsList = _ref.sortAgentsList,
|
|
38
|
+
onAgentSelected = _ref.onAgentSelected;
|
|
39
|
+
var _useTranslation = useTranslation([SECTIONS.abmAgent, SECTIONS.chatAI]),
|
|
40
|
+
t = _useTranslation.t;
|
|
41
|
+
var user = useUser();
|
|
42
|
+
var amplitudEvent = useEvent();
|
|
43
|
+
var _useGlobalContext = useGlobalContext(),
|
|
44
|
+
selectedAgent = _useGlobalContext.agent,
|
|
45
|
+
selectAgent = _useGlobalContext.selectAgent,
|
|
46
|
+
setProject = _useGlobalContext.setProject,
|
|
47
|
+
setClient = _useGlobalContext.setClient,
|
|
48
|
+
setTask = _useGlobalContext.setTask,
|
|
49
|
+
section = _useGlobalContext.section;
|
|
50
|
+
var _useState = useState(false),
|
|
51
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
52
|
+
isExpanded = _useState2[0],
|
|
53
|
+
setIsExpanded = _useState2[1];
|
|
54
|
+
var textRefAgent = useRef(null);
|
|
55
|
+
var dropdownRef = useRef(null);
|
|
56
|
+
var _useResizeListener = useResizeListener(textRefAgent, [selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.name]),
|
|
57
|
+
showTooltipAgent = _useResizeListener.showTooltip;
|
|
58
|
+
var agentsForSelector = useMemo(function () {
|
|
59
|
+
return agents.filter(function (agentItem) {
|
|
60
|
+
return isMaiaAgent(agentItem) || agentItem.entity !== 'global';
|
|
61
|
+
});
|
|
62
|
+
}, [agents]);
|
|
63
|
+
var localAgents = useMemo(function () {
|
|
64
|
+
return resolveDisplayedAgent(agents, selectedAgent);
|
|
65
|
+
}, [agents, selectedAgent]);
|
|
66
|
+
useEffect(function () {
|
|
67
|
+
if (!isExpanded) return undefined;
|
|
68
|
+
var handleClickOutside = function handleClickOutside(event) {
|
|
69
|
+
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
|
|
70
|
+
setIsExpanded(false);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
74
|
+
return function () {
|
|
75
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
76
|
+
};
|
|
77
|
+
}, [isExpanded]);
|
|
78
|
+
var handleSelectAgent = useCallback(function (agent) {
|
|
79
|
+
selectAgent(agent);
|
|
80
|
+
amplitudEvent(EVENTS.aiChatAgentSelect, {
|
|
81
|
+
agent_type: agent === null || agent === void 0 ? void 0 : agent.type
|
|
82
|
+
});
|
|
83
|
+
setIsExpanded(false);
|
|
84
|
+
setProject(null);
|
|
85
|
+
setClient === null || setClient === void 0 || setClient(null);
|
|
86
|
+
setTask(null);
|
|
87
|
+
setTimeout(function () {
|
|
88
|
+
handleResetChat();
|
|
89
|
+
// Si el agente no depende de una entity (custom o clone+global) ya podemos
|
|
90
|
+
// resolver si existe una sesión previa y, en ese caso, navegar a ella.
|
|
91
|
+
// Para clone+project|client, la resolución ocurre en los selectors de entity.
|
|
92
|
+
if (!agentNeedsEntity(agent)) {
|
|
93
|
+
onAgentSelected === null || onAgentSelected === void 0 || onAgentSelected(agent);
|
|
94
|
+
}
|
|
95
|
+
}, 100);
|
|
96
|
+
}, [selectAgent, amplitudEvent, handleResetChat, setProject, setClient, setTask, onAgentSelected]);
|
|
97
|
+
var handleExpandModal = function handleExpandModal() {
|
|
98
|
+
if (!isExpanded) {
|
|
99
|
+
amplitudEvent(EVENTS.aiChatOpenAgentSelect);
|
|
100
|
+
// Cuando se abre el selector, ordenar los agentes
|
|
101
|
+
sortAgentsList === null || sortAgentsList === void 0 || sortAgentsList();
|
|
102
|
+
}
|
|
103
|
+
setIsExpanded(function (prev) {
|
|
104
|
+
return !prev;
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
var handleCloseDropdown = useCallback(function () {
|
|
108
|
+
return setIsExpanded(false);
|
|
109
|
+
}, []);
|
|
110
|
+
var handleAddAgent = function handleAddAgent() {
|
|
111
|
+
setIsExpanded(false);
|
|
112
|
+
amplitudEvent(EVENTS.openModal, {
|
|
113
|
+
option: 'create_agent'
|
|
114
|
+
});
|
|
115
|
+
dispatchOpenCreateAgentModal();
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// En 'Mis agentes' / 'Skills' sin agente seteado, el selector muestra el icono de MAIA y el nombre de la sección
|
|
119
|
+
// en lugar del agente, para que el usuario pueda abrir el dropdown y elegir uno.
|
|
120
|
+
var selectorIcon = showsAgentEmoji(localAgents) ? localAgents === null || localAgents === void 0 ? void 0 : localAgents.emoji : /*#__PURE__*/_jsx(MAIAIcon, {});
|
|
121
|
+
var sectionLabelKey = getSectionLabelKey(isMyAgentsSection, isMySkillsSection);
|
|
122
|
+
var selectorLabel = (_localAgents$name = localAgents === null || localAgents === void 0 ? void 0 : localAgents.name) !== null && _localAgents$name !== void 0 ? _localAgents$name : sectionLabelKey ? t(sectionLabelKey, {
|
|
123
|
+
ns: SECTIONS.chatAI
|
|
124
|
+
}) : '';
|
|
125
|
+
var tooltipTitle = showTooltipAgent ? /*#__PURE__*/_jsxs("span", {
|
|
126
|
+
style: LABEL_STYLE,
|
|
127
|
+
children: [selectorIcon, " ", localAgents === null || localAgents === void 0 ? void 0 : localAgents.name]
|
|
128
|
+
}) : '';
|
|
129
|
+
var isAgentsSection = isMyAgentsSection || isMySkillsSection || isMaiakerSection;
|
|
130
|
+
var showAddAgent = canUserCreateAgents(user) && !isAgentsSection;
|
|
131
|
+
return /*#__PURE__*/_jsxs(SCCAIMHWrapper, {
|
|
132
|
+
ref: dropdownRef,
|
|
133
|
+
"data-no-drag": "true",
|
|
134
|
+
onClick: agents.length ? handleExpandModal : undefined,
|
|
135
|
+
id: "chat-ai-modal-header-wrapper",
|
|
136
|
+
children: [/*#__PURE__*/_jsx(SCCAIMHSelectedAgent, {
|
|
137
|
+
children: /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
138
|
+
title: tooltipTitle,
|
|
139
|
+
placement: isExpanded ? 'left' : 'top'
|
|
140
|
+
}, tooltipZIndex != null ? {
|
|
141
|
+
zIndex: tooltipZIndex
|
|
142
|
+
} : {}), {}, {
|
|
143
|
+
children: /*#__PURE__*/_jsx(SCCAIMHSelectedAgentText, {
|
|
144
|
+
ref: textRefAgent,
|
|
145
|
+
isAgentDeleted: isAgentUnavailable(selectedAgent) || !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_legacy_context),
|
|
146
|
+
children: /*#__PURE__*/_jsxs("span", {
|
|
147
|
+
style: LABEL_STYLE,
|
|
148
|
+
children: [selectorIcon, " ", selectorLabel]
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
}))
|
|
152
|
+
}), /*#__PURE__*/_jsx(SCCAIMHWrapperIcon, {
|
|
153
|
+
children: /*#__PURE__*/_jsx(ChevronDown, {
|
|
154
|
+
width: 14,
|
|
155
|
+
height: 14,
|
|
156
|
+
color: "#20201F"
|
|
157
|
+
})
|
|
158
|
+
}), isExpanded ? /*#__PURE__*/_jsx(ChatAiModalHeaderAgentDropdown, {
|
|
159
|
+
agents: agentsForSelector,
|
|
160
|
+
selectedAgentId: selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id,
|
|
161
|
+
companyName: user.company,
|
|
162
|
+
showMaiaAgents: !!window.MAIA_CHAT_AI_FEATURE_ACCESS && !isMaiaCloneAgentsRoleBlocked(user, section),
|
|
163
|
+
showAddAgent: showAddAgent,
|
|
164
|
+
hasMore: hasMore,
|
|
165
|
+
loadingMore: loadingMore,
|
|
166
|
+
loadMoreAgents: loadMoreAgents,
|
|
167
|
+
onSelectAgent: handleSelectAgent,
|
|
168
|
+
onAgentUpdate: onAgentUpdate,
|
|
169
|
+
onClose: handleCloseDropdown,
|
|
170
|
+
onAddAgent: handleAddAgent
|
|
171
|
+
}) : null]
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlRvb2x0aXAiLCJDaGV2cm9uRG93biIsInVzZVRyYW5zbGF0aW9uIiwiU0VDVElPTlMiLCJpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVJlc2l6ZUxpc3RlbmVyIiwiTUFJQUljb24iLCJTQ0NBSU1IU2VsZWN0ZWRBZ2VudCIsIlNDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dCIsIlNDQ0FJTUhXcmFwcGVyIiwiU0NDQUlNSFdyYXBwZXJJY29uIiwiYWdlbnROZWVkc0VudGl0eSIsImNhblVzZXJDcmVhdGVBZ2VudHMiLCJkaXNwYXRjaE9wZW5DcmVhdGVBZ2VudE1vZGFsIiwiZ2V0U2VjdGlvbkxhYmVsS2V5IiwiaXNBZ2VudFVuYXZhaWxhYmxlIiwiaXNNYWlhQWdlbnQiLCJyZXNvbHZlRGlzcGxheWVkQWdlbnQiLCJzaG93c0FnZW50RW1vamkiLCJDaGF0QWlNb2RhbEhlYWRlckFnZW50RHJvcGRvd24iLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImdhcCIsIkNoYXRBaU1vZGFsSGVhZGVyQWdlbnRTZWxlY3RvciIsIl9yZWYiLCJfbG9jYWxBZ2VudHMkbmFtZSIsImFnZW50cyIsImhhc01vcmUiLCJsb2FkaW5nTW9yZSIsImlzTXlBZ2VudHNTZWN0aW9uIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJpc01haWFrZXJTZWN0aW9uIiwidG9vbHRpcFpJbmRleCIsImhhbmRsZVJlc2V0Q2hhdCIsIm9uQWdlbnRVcGRhdGUiLCJsb2FkTW9yZUFnZW50cyIsInNvcnRBZ2VudHNMaXN0Iiwib25BZ2VudFNlbGVjdGVkIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJjaGF0QUkiLCJ0IiwidXNlciIsImFtcGxpdHVkRXZlbnQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInNlbGVjdEFnZW50Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsInNldFRhc2siLCJzZWN0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNFeHBhbmRlZCIsInNldElzRXhwYW5kZWQiLCJ0ZXh0UmVmQWdlbnQiLCJkcm9wZG93blJlZiIsIl91c2VSZXNpemVMaXN0ZW5lciIsIm5hbWUiLCJzaG93VG9vbHRpcEFnZW50Iiwic2hvd1Rvb2x0aXAiLCJhZ2VudHNGb3JTZWxlY3RvciIsImZpbHRlciIsImFnZW50SXRlbSIsImVudGl0eSIsImxvY2FsQWdlbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiZXZlbnQiLCJjdXJyZW50IiwiY29udGFpbnMiLCJ0YXJnZXQiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlU2VsZWN0QWdlbnQiLCJhaUNoYXRBZ2VudFNlbGVjdCIsImFnZW50X3R5cGUiLCJ0eXBlIiwic2V0VGltZW91dCIsImhhbmRsZUV4cGFuZE1vZGFsIiwiYWlDaGF0T3BlbkFnZW50U2VsZWN0IiwicHJldiIsImhhbmRsZUNsb3NlRHJvcGRvd24iLCJoYW5kbGVBZGRBZ2VudCIsIm9wZW5Nb2RhbCIsIm9wdGlvbiIsInNlbGVjdG9ySWNvbiIsImVtb2ppIiwic2VjdGlvbkxhYmVsS2V5Iiwic2VsZWN0b3JMYWJlbCIsIm5zIiwidG9vbHRpcFRpdGxlIiwic3R5bGUiLCJjaGlsZHJlbiIsImlzQWdlbnRzU2VjdGlvbiIsInNob3dBZGRBZ2VudCIsInJlZiIsIm9uQ2xpY2siLCJsZW5ndGgiLCJpZCIsIl9vYmplY3RTcHJlYWQiLCJ0aXRsZSIsInBsYWNlbWVudCIsInpJbmRleCIsImlzQWdlbnREZWxldGVkIiwiaXNfbGVnYWN5X2NvbnRleHQiLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwic2VsZWN0ZWRBZ2VudElkIiwiY29tcGFueU5hbWUiLCJjb21wYW55Iiwic2hvd01haWFBZ2VudHMiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJvblNlbGVjdEFnZW50Iiwib25DbG9zZSIsIm9uQWRkQWdlbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlckFnZW50U2VsZWN0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IENoZXZyb25Eb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkRvd24nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL21haWFUYXNrUGFuZWxBY2Nlc3MnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgTUFJQUljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7XG4gIFNDQ0FJTUhTZWxlY3RlZEFnZW50LFxuICBTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQsXG4gIFNDQ0FJTUhXcmFwcGVyLFxuICBTQ0NBSU1IV3JhcHBlckljb24sXG59IGZyb20gJy4vQ2hhdEFpTW9kYWxIZWFkZXIuc3R5bGVzJ1xuaW1wb3J0IHtcbiAgYWdlbnROZWVkc0VudGl0eSxcbiAgY2FuVXNlckNyZWF0ZUFnZW50cyxcbiAgZGlzcGF0Y2hPcGVuQ3JlYXRlQWdlbnRNb2RhbCxcbiAgZ2V0U2VjdGlvbkxhYmVsS2V5LFxuICBpc0FnZW50VW5hdmFpbGFibGUsXG4gIGlzTWFpYUFnZW50LFxuICByZXNvbHZlRGlzcGxheWVkQWdlbnQsXG4gIHNob3dzQWdlbnRFbW9qaSxcbn0gZnJvbSAnLi9DaGF0QWlNb2RhbEhlYWRlci51dGlscydcbmltcG9ydCB7IENoYXRBaU1vZGFsSGVhZGVyQWdlbnREcm9wZG93biB9IGZyb20gJy4vQ2hhdEFpTW9kYWxIZWFkZXJBZ2VudERyb3Bkb3duJ1xuXG5jb25zdCBMQUJFTF9TVFlMRSA9IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnNHB4JyB9XG5cbnR5cGUgQ2hhdEFpTW9kYWxIZWFkZXJBZ2VudFNlbGVjdG9yUHJvcHMgPSB7XG4gIGFnZW50czogQWdlbnRbXVxuICBoYXNNb3JlOiBib29sZWFuXG4gIGxvYWRpbmdNb3JlOiBib29sZWFuXG4gIGlzTXlBZ2VudHNTZWN0aW9uOiBib29sZWFuXG4gIGlzTXlTa2lsbHNTZWN0aW9uOiBib29sZWFuXG4gIGlzTWFpYWtlclNlY3Rpb246IGJvb2xlYW5cbiAgdG9vbHRpcFpJbmRleD86IG51bWJlclxuICBoYW5kbGVSZXNldENoYXQ6ICgpID0+IHZvaWRcbiAgb25BZ2VudFVwZGF0ZT86ICh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIGxvYWRNb3JlQWdlbnRzPzogKCkgPT4gdm9pZFxuICBzb3J0QWdlbnRzTGlzdD86ICgpID0+IHZvaWRcbiAgb25BZ2VudFNlbGVjdGVkPzogKGFnZW50OiBBZ2VudCkgPT4gdm9pZCB8IFByb21pc2U8dW5rbm93bj5cbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBaU1vZGFsSGVhZGVyQWdlbnRTZWxlY3RvciA9ICh7XG4gIGFnZW50cyxcbiAgaGFzTW9yZSxcbiAgbG9hZGluZ01vcmUsXG4gIGlzTXlBZ2VudHNTZWN0aW9uLFxuICBpc015U2tpbGxzU2VjdGlvbixcbiAgaXNNYWlha2VyU2VjdGlvbixcbiAgdG9vbHRpcFpJbmRleCxcbiAgaGFuZGxlUmVzZXRDaGF0LFxuICBvbkFnZW50VXBkYXRlLFxuICBsb2FkTW9yZUFnZW50cyxcbiAgc29ydEFnZW50c0xpc3QsXG4gIG9uQWdlbnRTZWxlY3RlZCxcbn06IENoYXRBaU1vZGFsSGVhZGVyQWdlbnRTZWxlY3RvclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmFibUFnZW50LCBTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGFtcGxpdHVkRXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgYWdlbnQ6IHNlbGVjdGVkQWdlbnQsIHNlbGVjdEFnZW50LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldFRhc2ssIHNlY3Rpb24gfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBbaXNFeHBhbmRlZCwgc2V0SXNFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgdGV4dFJlZkFnZW50ID0gdXNlUmVmPEhUTUxTcGFuRWxlbWVudD4obnVsbClcbiAgY29uc3QgZHJvcGRvd25SZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHsgc2hvd1Rvb2x0aXA6IHNob3dUb29sdGlwQWdlbnQgfSA9IHVzZVJlc2l6ZUxpc3RlbmVyKHRleHRSZWZBZ2VudCwgW3NlbGVjdGVkQWdlbnQ/Lm5hbWVdKVxuXG4gIGNvbnN0IGFnZW50c0ZvclNlbGVjdG9yID0gdXNlTWVtbyhcbiAgICAoKSA9PiBhZ2VudHMuZmlsdGVyKGFnZW50SXRlbSA9PiBpc01haWFBZ2VudChhZ2VudEl0ZW0pIHx8IGFnZW50SXRlbS5lbnRpdHkgIT09ICdnbG9iYWwnKSxcbiAgICBbYWdlbnRzXVxuICApXG5cbiAgY29uc3QgbG9jYWxBZ2VudHMgPSB1c2VNZW1vKCgpID0+IHJlc29sdmVEaXNwbGF5ZWRBZ2VudChhZ2VudHMsIHNlbGVjdGVkQWdlbnQpLCBbYWdlbnRzLCBzZWxlY3RlZEFnZW50XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNFeHBhbmRlZCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoZHJvcGRvd25SZWYuY3VycmVudCAmJiAhZHJvcGRvd25SZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFtpc0V4cGFuZGVkXSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudDogQWdlbnQpID0+IHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50KVxuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0QWdlbnRTZWxlY3QsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaGFuZGxlUmVzZXRDaGF0KClcbiAgICAgICAgLy8gU2kgZWwgYWdlbnRlIG5vIGRlcGVuZGUgZGUgdW5hIGVudGl0eSAoY3VzdG9tIG8gY2xvbmUrZ2xvYmFsKSB5YSBwb2RlbW9zXG4gICAgICAgIC8vIHJlc29sdmVyIHNpIGV4aXN0ZSB1bmEgc2VzacOzbiBwcmV2aWEgeSwgZW4gZXNlIGNhc28sIG5hdmVnYXIgYSBlbGxhLlxuICAgICAgICAvLyBQYXJhIGNsb25lK3Byb2plY3R8Y2xpZW50LCBsYSByZXNvbHVjacOzbiBvY3VycmUgZW4gbG9zIHNlbGVjdG9ycyBkZSBlbnRpdHkuXG4gICAgICAgIGlmICghYWdlbnROZWVkc0VudGl0eShhZ2VudCkpIHtcbiAgICAgICAgICBvbkFnZW50U2VsZWN0ZWQ/LihhZ2VudClcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKVxuICAgIH0sXG4gICAgW3NlbGVjdEFnZW50LCBhbXBsaXR1ZEV2ZW50LCBoYW5kbGVSZXNldENoYXQsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgb25BZ2VudFNlbGVjdGVkXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRXhwYW5kTW9kYWwgPSAoKSA9PiB7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuQWdlbnRTZWxlY3QpXG4gICAgICAvLyBDdWFuZG8gc2UgYWJyZSBlbCBzZWxlY3Rvciwgb3JkZW5hciBsb3MgYWdlbnRlc1xuICAgICAgc29ydEFnZW50c0xpc3Q/LigpXG4gICAgfVxuICAgIHNldElzRXhwYW5kZWQocHJldiA9PiAhcHJldilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlRHJvcGRvd24gPSB1c2VDYWxsYmFjaygoKSA9PiBzZXRJc0V4cGFuZGVkKGZhbHNlKSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQWRkQWdlbnQgPSAoKSA9PiB7XG4gICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5vcGVuTW9kYWwsIHsgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyB9KVxuICAgIGRpc3BhdGNoT3BlbkNyZWF0ZUFnZW50TW9kYWwoKVxuICB9XG5cbiAgLy8gRW4gJ01pcyBhZ2VudGVzJyAvICdTa2lsbHMnIHNpbiBhZ2VudGUgc2V0ZWFkbywgZWwgc2VsZWN0b3IgbXVlc3RyYSBlbCBpY29ubyBkZSBNQUlBIHkgZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuXG4gIC8vIGVuIGx1Z2FyIGRlbCBhZ2VudGUsIHBhcmEgcXVlIGVsIHVzdWFyaW8gcHVlZGEgYWJyaXIgZWwgZHJvcGRvd24geSBlbGVnaXIgdW5vLlxuICBjb25zdCBzZWxlY3Rvckljb24gPSBzaG93c0FnZW50RW1vamkobG9jYWxBZ2VudHMpID8gbG9jYWxBZ2VudHM/LmVtb2ppIDogPE1BSUFJY29uIC8+XG4gIGNvbnN0IHNlY3Rpb25MYWJlbEtleSA9IGdldFNlY3Rpb25MYWJlbEtleShpc015QWdlbnRzU2VjdGlvbiwgaXNNeVNraWxsc1NlY3Rpb24pXG4gIGNvbnN0IHNlbGVjdG9yTGFiZWwgPSBsb2NhbEFnZW50cz8ubmFtZSA/PyAoc2VjdGlvbkxhYmVsS2V5ID8gdChzZWN0aW9uTGFiZWxLZXksIHsgbnM6IFNFQ1RJT05TLmNoYXRBSSB9KSA6ICcnKVxuXG4gIGNvbnN0IHRvb2x0aXBUaXRsZSA9IHNob3dUb29sdGlwQWdlbnQgPyAoXG4gICAgPHNwYW4gc3R5bGU9e0xBQkVMX1NUWUxFfT5cbiAgICAgIHtzZWxlY3Rvckljb259IHtsb2NhbEFnZW50cz8ubmFtZX1cbiAgICA8L3NwYW4+XG4gICkgOiAoXG4gICAgJydcbiAgKVxuXG4gIGNvbnN0IGlzQWdlbnRzU2VjdGlvbiA9IGlzTXlBZ2VudHNTZWN0aW9uIHx8IGlzTXlTa2lsbHNTZWN0aW9uIHx8IGlzTWFpYWtlclNlY3Rpb25cbiAgY29uc3Qgc2hvd0FkZEFnZW50ID0gY2FuVXNlckNyZWF0ZUFnZW50cyh1c2VyKSAmJiAhaXNBZ2VudHNTZWN0aW9uXG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlNSFdyYXBwZXJcbiAgICAgIHJlZj17ZHJvcGRvd25SZWZ9XG4gICAgICBkYXRhLW5vLWRyYWc9XCJ0cnVlXCJcbiAgICAgIG9uQ2xpY2s9e2FnZW50cy5sZW5ndGggPyBoYW5kbGVFeHBhbmRNb2RhbCA6IHVuZGVmaW5lZH1cbiAgICAgIGlkPVwiY2hhdC1haS1tb2RhbC1oZWFkZXItd3JhcHBlclwiXG4gICAgPlxuICAgICAgPFNDQ0FJTUhTZWxlY3RlZEFnZW50PlxuICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgIHRpdGxlPXt0b29sdGlwVGl0bGV9XG4gICAgICAgICAgcGxhY2VtZW50PXtpc0V4cGFuZGVkID8gJ2xlZnQnIDogJ3RvcCd9XG4gICAgICAgICAgey4uLih0b29sdGlwWkluZGV4ICE9IG51bGwgPyB7IHpJbmRleDogdG9vbHRpcFpJbmRleCB9IDoge30pfVxuICAgICAgICA+XG4gICAgICAgICAgPFNDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dFxuICAgICAgICAgICAgcmVmPXt0ZXh0UmVmQWdlbnR9XG4gICAgICAgICAgICBpc0FnZW50RGVsZXRlZD17aXNBZ2VudFVuYXZhaWxhYmxlKHNlbGVjdGVkQWdlbnQpIHx8ICEhc2VsZWN0ZWRBZ2VudD8uaXNfbGVnYWN5X2NvbnRleHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e0xBQkVMX1NUWUxFfT5cbiAgICAgICAgICAgICAge3NlbGVjdG9ySWNvbn0ge3NlbGVjdG9yTGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9TQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQ+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgIDwvU0NDQUlNSFNlbGVjdGVkQWdlbnQ+XG4gICAgICA8U0NDQUlNSFdyYXBwZXJJY29uPlxuICAgICAgICA8Q2hldnJvbkRvd24gd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgPC9TQ0NBSU1IV3JhcHBlckljb24+XG4gICAgICB7aXNFeHBhbmRlZCA/IChcbiAgICAgICAgPENoYXRBaU1vZGFsSGVhZGVyQWdlbnREcm9wZG93blxuICAgICAgICAgIGFnZW50cz17YWdlbnRzRm9yU2VsZWN0b3J9XG4gICAgICAgICAgc2VsZWN0ZWRBZ2VudElkPXtzZWxlY3RlZEFnZW50Py5pZH1cbiAgICAgICAgICBjb21wYW55TmFtZT17dXNlci5jb21wYW55fVxuICAgICAgICAgIHNob3dNYWlhQWdlbnRzPXshIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgIWlzTWFpYUNsb25lQWdlbnRzUm9sZUJsb2NrZWQodXNlciwgc2VjdGlvbil9XG4gICAgICAgICAgc2hvd0FkZEFnZW50PXtzaG93QWRkQWdlbnR9XG4gICAgICAgICAgaGFzTW9yZT17aGFzTW9yZX1cbiAgICAgICAgICBsb2FkaW5nTW9yZT17bG9hZGluZ01vcmV9XG4gICAgICAgICAgbG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgIG9uU2VsZWN0QWdlbnQ9e2hhbmRsZVNlbGVjdEFnZW50fVxuICAgICAgICAgIG9uQWdlbnRVcGRhdGU9e29uQWdlbnRVcGRhdGV9XG4gICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VEcm9wZG93bn1cbiAgICAgICAgICBvbkFkZEFnZW50PXtoYW5kbGVBZGRBZ2VudH1cbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvU0NDQUlNSFdyYXBwZXI+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQVNBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDekUsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxXQUFXLFFBQVEsOENBQThDO0FBQzFFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLFFBQVEsUUFBUSxpQ0FBaUM7QUFDMUQsU0FBU0MsNEJBQTRCLFFBQVEsOENBQThDO0FBQzNGLFNBQVNDLE9BQU8sUUFBUSxpQ0FBaUM7QUFDekQsU0FBU0MsZ0JBQWdCLFFBQVEsdUNBQXVDO0FBQ3hFLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLCtCQUErQjtBQUNoRSxTQUFTQyxpQkFBaUIsUUFBUSxnQ0FBZ0M7QUFFbEUsU0FBU0MsUUFBUSxRQUFRLHlCQUF5QjtBQUNsRCxTQUNFQyxvQkFBb0IsRUFDcEJDLHdCQUF3QixFQUN4QkMsY0FBYyxFQUNkQyxrQkFBa0IsUUFDYiw0QkFBNEI7QUFDbkMsU0FDRUMsZ0JBQWdCLEVBQ2hCQyxtQkFBbUIsRUFDbkJDLDRCQUE0QixFQUM1QkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0IsRUFDbEJDLFdBQVcsRUFDWEMscUJBQXFCLEVBQ3JCQyxlQUFlLFFBQ1YsMkJBQTJCO0FBQ2xDLFNBQVNDLDhCQUE4QixRQUFRLGtDQUFrQztBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFFakYsSUFBTUMsV0FBVyxHQUFHO0VBQUVDLE9BQU8sRUFBRSxNQUFNO0VBQUVDLFVBQVUsRUFBRSxRQUFRO0VBQUVDLEdBQUcsRUFBRTtBQUFNLENBQUM7QUFpQnpFLE9BQU8sSUFBTUMsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4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
|