@projectcor/maia-components 2.35.4-4 → 2.35.6
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/ActionableButton.js +6 -1
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +4 -63
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +4 -16
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +1 -12
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -127
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +19 -2
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +20 -4
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +18 -7
- package/lib/components/atoms/MAIAInput/MAIAInput.js +42 -243
- package/lib/components/atoms/MAIAInput/styles.js +44 -41
- package/lib/components/atoms/icons/SkillsNavIcon.js +7 -4
- package/lib/components/atoms/icons/index.js +1 -5
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +11 -34
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -5
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +16 -5
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +23 -2
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +33 -5
- package/lib/components/molecules/ChatAIHome/styles.js +11 -2
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +31 -20
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +9 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +21 -61
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +8 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +15 -9
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +14 -3
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +17 -11
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +14 -5
- package/lib/components/molecules/ChatAIModal/layout.js +2 -2
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +12 -2
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +272 -334
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +109 -132
- package/lib/components/molecules/ChatFooter/ChatFooter.js +63 -57
- package/lib/components/molecules/ChatFooter/styles.js +12 -6
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
- package/lib/components/molecules/MessageFeedback/MessageFeedback.js +15 -5
- package/lib/components/molecules/Sidebar/Sidebar.js +7 -15
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
- package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +33 -0
- package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +47 -0
- package/lib/components/molecules/UsageBlockedBanner/index.js +2 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +46 -30
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +38 -26
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +209 -430
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +74 -131
- package/lib/components/organisms/ChatAI/ChatAI.js +6 -1
- package/lib/constants/config.js +4 -1
- package/lib/constants/permissions/utils.js +3 -3
- package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
- package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
- package/lib/hooks/useChatManager/useChatManager.js +58 -38
- package/lib/hooks/useContextMentions.js +56 -96
- package/lib/hooks/useEntitySearch.js +278 -92
- package/lib/hooks/useEvent.js +2 -15
- package/lib/hooks/useMentionAllowedTypes.js +25 -9
- package/lib/hooks/useMentionPopover.js +33 -9
- package/lib/lang/br/index.js +12 -39
- package/lib/lang/en/index.js +12 -39
- package/lib/lang/es/index.js +13 -40
- package/lib/lang/fr/index.js +13 -40
- package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
- package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
- package/lib/services/maia/Orchestrator/orchestrator.js +7 -16
- package/lib/services/maia/Skills/createSkill.js +1 -1
- package/lib/services/maia/Skills/getSkills.js +40 -70
- package/lib/services/maia/Skills/updateSkill.js +1 -1
- package/lib/services/maia/Usage/getUsage.js +45 -0
- package/lib/services/maia/Usage/index.js +6 -0
- package/lib/services/maia/index.js +4 -2
- package/lib/services/utils/MaiaApiError.js +34 -0
- package/lib/services/utils/fetchCOR.js +106 -57
- package/lib/services/utils/index.js +2 -1
- package/lib/store/faqsStore.types.js +1 -1
- package/lib/store/index.js +2 -1
- package/lib/store/sessions/sessionStreamManager.js +61 -35
- package/lib/store/sessions/sessions.types.js +1 -1
- package/lib/store/useChatsStore.js +3 -3
- package/lib/store/useUsageStore.js +108 -0
- package/lib/types/Chat.js +1 -1
- package/lib/types/FrequentlyAskedQuestion.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/skill.js +1 -1
- package/lib/types/usage.js +9 -0
- package/lib/utils/contextMentionTriggers.js +5 -2
- package/lib/utils/normalizeAgentConnectors.js +16 -44
- package/lib/utils/renderContextMentions.js +18 -39
- package/package.json +6 -9
- package/CHANGELOG.md +0 -727
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
- package/lib/components/atoms/Chip/Chip.spec.js +0 -32
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
- package/lib/components/atoms/Fade/Fade.spec.js +0 -31
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -283
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -68
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
- package/lib/components/atoms/SkillsDropdown/index.js +0 -2
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
- package/lib/components/atoms/Switch/Switch.spec.js +0 -41
- package/lib/components/atoms/icons/PlusIcon.js +0 -29
- package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
- package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
- package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -77
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -291
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -105
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -192
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -335
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -315
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -95
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -96
- package/lib/hooks/useCaretPosition.spec.js +0 -58
- package/lib/hooks/useDebounce.spec.js +0 -42
- package/lib/hooks/useEvent.spec.js +0 -40
- package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
- package/lib/hooks/useModal/useModal.spec.js +0 -73
- package/lib/hooks/useResize.spec.js +0 -37
- package/lib/hooks/useSkillsCatalog.js +0 -66
- package/lib/hooks/useSkillsCatalog.spec.js +0 -88
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
- package/lib/hooks/useT.spec.js +0 -20
- package/lib/hooks/useToggle.spec.js +0 -33
- package/lib/services/maia/Access/updateAccess.spec.js +0 -108
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -69
- package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -74
- package/lib/services/maia/Agents/createAgent.spec.js +0 -55
- package/lib/services/maia/Agents/deleteAgent.spec.js +0 -42
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
- package/lib/services/maia/Agents/getAgentById.spec.js +0 -55
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -82
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
- package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -47
- package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
- package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
- package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
- package/lib/services/maia/Chats/patchChat.spec.js +0 -41
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
- package/lib/services/maia/Knowledge/delete.spec.js +0 -45
- package/lib/services/maia/Knowledge/download.spec.js +0 -78
- package/lib/services/maia/Knowledge/save.spec.js +0 -58
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -72
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -83
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
- package/lib/services/maia/Skills/createSkill.spec.js +0 -68
- package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
- package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
- package/lib/services/maia/Skills/getSkills.spec.js +0 -152
- package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
- package/lib/services/maia/client.spec.js +0 -56
- package/lib/services/utils/fetchCOR.spec.js +0 -211
- package/lib/services/utils/getCookie.spec.js +0 -20
- package/lib/store/chatsSidebarOptimistic.spec.js +0 -120
- package/lib/store/maiaLastChatPersistence.spec.js +0 -22
- package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
- package/lib/store/sessions/sessions.types.spec.js +0 -16
- package/lib/store/sessions/useSessionsStore.spec.js +0 -135
- package/lib/store/useChatsStore.spec.js +0 -619
- package/lib/store/useFaqsStore.spec.js +0 -57
- package/lib/test/buttonMock.js +0 -22
- package/lib/test/fetchPolyfill.js +0 -160
- package/lib/test/fileMock.js +0 -2
- package/lib/test/global-context.js +0 -49
- package/lib/test/iconMock.js +0 -19
- package/lib/test/mockFetch.js +0 -49
- package/lib/test/portalRoot.js +0 -13
- package/lib/test/styleMock.js +0 -2
- package/lib/test/test-utils.js +0 -26
- package/lib/test/tooltipMock.js +0 -11
- package/lib/utils/agentDisplayName.spec.js +0 -44
- package/lib/utils/autoApproveStorage.spec.js +0 -25
- package/lib/utils/chatInputFiles.spec.js +0 -39
- package/lib/utils/contextMentionLabel.spec.js +0 -13
- package/lib/utils/contextMentionTriggers.spec.js +0 -38
- package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
- package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
- package/lib/utils/fileDownloadHelper.spec.js +0 -67
- package/lib/utils/formatQuickActionMessage.spec.js +0 -27
- package/lib/utils/formatUnreadCount.spec.js +0 -12
- package/lib/utils/getUnitFileSize.spec.js +0 -18
- package/lib/utils/hitlAnalytics.spec.js +0 -100
- package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
- package/lib/utils/mapBackendLang.spec.js +0 -19
- package/lib/utils/normalizeAgentConnectors.spec.js +0 -89
- package/lib/utils/orchestratorSubagents.spec.js +0 -32
- package/lib/utils/reasoningMappers.spec.js +0 -103
- package/lib/utils/retryCompletion.spec.js +0 -99
- package/lib/utils/skillContentSize.spec.js +0 -13
- package/lib/utils/slashCommandMarker.spec.js +0 -43
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
- package/lib/utils/sseStreamContent.spec.js +0 -31
- package/lib/utils/streamActivityMessages.spec.js +0 -98
- package/lib/utils/validateTrimmedFields.spec.js +0 -26
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import { fireEvent, renderWithProviders, screen } from '../../../test/test-utils';
|
|
3
|
-
import { GlobalContextTestProvider } from '../../../test/global-context';
|
|
4
|
-
import { MAIAInput } from './MAIAInput';
|
|
5
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
-
var insertSkillMention = jest.fn();
|
|
7
|
-
jest.mock('../../../hooks/useEvent', function () {
|
|
8
|
-
return {
|
|
9
|
-
EVENTS: {
|
|
10
|
-
aiChatPlusOpen: 'AI_CHAT_PLUS_OPEN',
|
|
11
|
-
aiChatQuickActionOpen: 'AI_CHAT_QUICK_ACTION_OPEN',
|
|
12
|
-
aiChatSkillOpen: 'AI_CHAT_SKILL_OPEN',
|
|
13
|
-
aiChatSkillSelect: 'AI_CHAT_SKILL_SELECT',
|
|
14
|
-
aiChatSkillRemove: 'AI_CHAT_SKILL_REMOVE'
|
|
15
|
-
},
|
|
16
|
-
useEvent: function useEvent() {
|
|
17
|
-
return jest.fn();
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
});
|
|
21
|
-
jest.mock('../../../context/cor-user', function () {
|
|
22
|
-
return {
|
|
23
|
-
CORUserRole: {
|
|
24
|
-
CLEVEL: 1,
|
|
25
|
-
DIRECTOR: 2,
|
|
26
|
-
PROJECT_MANAGER: 3,
|
|
27
|
-
COLLABORATOR: 4,
|
|
28
|
-
FREELANCER: 5,
|
|
29
|
-
CLIENT: 6
|
|
30
|
-
},
|
|
31
|
-
useUser: function useUser() {
|
|
32
|
-
return {
|
|
33
|
-
id: 99,
|
|
34
|
-
role_id: 3
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
jest.mock('../../../constants/permissions', function () {
|
|
40
|
-
return {
|
|
41
|
-
canAccessToSkills: function canAccessToSkills() {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
jest.mock('../../../hooks/useSkillsCatalog', function () {
|
|
47
|
-
return {
|
|
48
|
-
useSkillsCatalog: function useSkillsCatalog() {
|
|
49
|
-
return {
|
|
50
|
-
skills: [{
|
|
51
|
-
id: 'sk1',
|
|
52
|
-
name: 'Resumir',
|
|
53
|
-
description: 'Desc',
|
|
54
|
-
content: 'Resume'
|
|
55
|
-
}],
|
|
56
|
-
loading: false,
|
|
57
|
-
error: false,
|
|
58
|
-
fetchSkills: jest.fn()
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
});
|
|
63
|
-
jest.mock('../../../hooks/useSlashCommands', function () {
|
|
64
|
-
return {
|
|
65
|
-
useSlashCommands: function useSlashCommands() {
|
|
66
|
-
return {
|
|
67
|
-
commands: []
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
});
|
|
72
|
-
jest.mock('../../../hooks/useMentionPopover', function () {
|
|
73
|
-
return {
|
|
74
|
-
useMentionPopover: function useMentionPopover() {
|
|
75
|
-
return {
|
|
76
|
-
popoverOpen: false,
|
|
77
|
-
resetMentionOpenTracking: jest.fn(),
|
|
78
|
-
handleTrigger: jest.fn(),
|
|
79
|
-
handleKeyDown: function handleKeyDown() {
|
|
80
|
-
return false;
|
|
81
|
-
},
|
|
82
|
-
popoverNode: null,
|
|
83
|
-
close: jest.fn()
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
});
|
|
88
|
-
jest.mock('../../../hooks/useMaiaTaskPanelZIndex', function () {
|
|
89
|
-
return {
|
|
90
|
-
useMaiaTaskPanelZIndex: function useMaiaTaskPanelZIndex() {
|
|
91
|
-
return 1300;
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
});
|
|
95
|
-
jest.mock('../../organisms/ModalFileExceeds', function () {
|
|
96
|
-
return {
|
|
97
|
-
ModalFileExceeds: function ModalFileExceeds() {
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
});
|
|
102
|
-
jest.mock('../SlashCommandDropdown', function () {
|
|
103
|
-
return {
|
|
104
|
-
SlashCommandDropdown: function SlashCommandDropdown() {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
});
|
|
109
|
-
jest.mock('../ContextMentionEditor', function () {
|
|
110
|
-
var React = jest.requireActual('react');
|
|
111
|
-
return {
|
|
112
|
-
ContextMentionEditor: React.forwardRef(function (_ref, ref) {
|
|
113
|
-
var onInput = _ref.onInput,
|
|
114
|
-
placeholder = _ref.placeholder,
|
|
115
|
-
disabled = _ref.disabled;
|
|
116
|
-
var _React$useState = React.useState(''),
|
|
117
|
-
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
118
|
-
value = _React$useState2[0],
|
|
119
|
-
setValue = _React$useState2[1];
|
|
120
|
-
var emit = function emit(text) {
|
|
121
|
-
onInput === null || onInput === void 0 || onInput({
|
|
122
|
-
text: text,
|
|
123
|
-
mentions: [],
|
|
124
|
-
slashCommands: [],
|
|
125
|
-
trigger: {
|
|
126
|
-
active: false,
|
|
127
|
-
query: '',
|
|
128
|
-
atRunLength: 0
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
React.useImperativeHandle(ref, function () {
|
|
133
|
-
return {
|
|
134
|
-
focus: jest.fn(),
|
|
135
|
-
clear: function clear() {
|
|
136
|
-
setValue('');
|
|
137
|
-
emit('');
|
|
138
|
-
},
|
|
139
|
-
setPlainText: function setPlainText(text) {
|
|
140
|
-
setValue(text);
|
|
141
|
-
emit(text);
|
|
142
|
-
},
|
|
143
|
-
serialize: function serialize() {
|
|
144
|
-
return {
|
|
145
|
-
text: value,
|
|
146
|
-
mentions: [],
|
|
147
|
-
slashCommands: []
|
|
148
|
-
};
|
|
149
|
-
},
|
|
150
|
-
insertMentionTrigger: jest.fn(),
|
|
151
|
-
insertSlashTrigger: jest.fn(),
|
|
152
|
-
insertMention: jest.fn(),
|
|
153
|
-
insertSlashCommand: jest.fn(),
|
|
154
|
-
insertSkillTrigger: function insertSkillTrigger() {
|
|
155
|
-
onInput === null || onInput === void 0 || onInput({
|
|
156
|
-
text: '#',
|
|
157
|
-
mentions: [],
|
|
158
|
-
slashCommands: [],
|
|
159
|
-
trigger: {
|
|
160
|
-
active: false,
|
|
161
|
-
query: '',
|
|
162
|
-
atRunLength: 0
|
|
163
|
-
},
|
|
164
|
-
hashTrigger: {
|
|
165
|
-
active: true,
|
|
166
|
-
query: ''
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
},
|
|
170
|
-
insertSkillMention: insertSkillMention,
|
|
171
|
-
syncTriggerAtRunLength: jest.fn(),
|
|
172
|
-
syncSkillTrigger: jest.fn(),
|
|
173
|
-
hasVisualMultiline: function hasVisualMultiline() {
|
|
174
|
-
return false;
|
|
175
|
-
},
|
|
176
|
-
getEditorClientRect: function getEditorClientRect() {
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
});
|
|
181
|
-
return /*#__PURE__*/_jsx("textarea", {
|
|
182
|
-
"aria-label": "maia-editor",
|
|
183
|
-
placeholder: placeholder,
|
|
184
|
-
disabled: disabled,
|
|
185
|
-
value: value,
|
|
186
|
-
onChange: function onChange(event) {
|
|
187
|
-
setValue(event.target.value);
|
|
188
|
-
emit(event.target.value);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
})
|
|
192
|
-
};
|
|
193
|
-
});
|
|
194
|
-
var sendButton = function sendButton() {
|
|
195
|
-
return screen.getAllByRole('button').find(function (button) {
|
|
196
|
-
return !button.getAttribute('aria-label') && !button.getAttribute('aria-haspopup');
|
|
197
|
-
});
|
|
198
|
-
};
|
|
199
|
-
describe('MAIAInput', function () {
|
|
200
|
-
it('keeps send disabled without text', function () {
|
|
201
|
-
renderWithProviders(/*#__PURE__*/_jsx(GlobalContextTestProvider, {
|
|
202
|
-
children: /*#__PURE__*/_jsx(MAIAInput, {
|
|
203
|
-
onSendMessage: jest.fn(),
|
|
204
|
-
placeholder: "Escrib\xED"
|
|
205
|
-
})
|
|
206
|
-
}));
|
|
207
|
-
expect(screen.getByPlaceholderText('Escribí')).toBeInTheDocument();
|
|
208
|
-
expect(sendButton()).toBeDisabled();
|
|
209
|
-
});
|
|
210
|
-
it('sends the typed message and clears the editor', function () {
|
|
211
|
-
var onSendMessage = jest.fn();
|
|
212
|
-
renderWithProviders(/*#__PURE__*/_jsx(GlobalContextTestProvider, {
|
|
213
|
-
children: /*#__PURE__*/_jsx(MAIAInput, {
|
|
214
|
-
onSendMessage: onSendMessage
|
|
215
|
-
})
|
|
216
|
-
}));
|
|
217
|
-
fireEvent.change(screen.getByLabelText('maia-editor'), {
|
|
218
|
-
target: {
|
|
219
|
-
value: 'Hola draft'
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
fireEvent.click(sendButton());
|
|
223
|
-
expect(onSendMessage).toHaveBeenCalledWith('Hola draft', [], []);
|
|
224
|
-
expect(screen.getByLabelText('maia-editor')).toHaveValue('');
|
|
225
|
-
});
|
|
226
|
-
it('does not send when disabled', function () {
|
|
227
|
-
var onSendMessage = jest.fn();
|
|
228
|
-
renderWithProviders(/*#__PURE__*/_jsx(GlobalContextTestProvider, {
|
|
229
|
-
children: /*#__PURE__*/_jsx(MAIAInput, {
|
|
230
|
-
onSendMessage: onSendMessage,
|
|
231
|
-
disabled: true
|
|
232
|
-
})
|
|
233
|
-
}));
|
|
234
|
-
expect(screen.getByLabelText('maia-editor')).toBeDisabled();
|
|
235
|
-
expect(sendButton()).toBeDisabled();
|
|
236
|
-
fireEvent.click(sendButton());
|
|
237
|
-
expect(onSendMessage).not.toHaveBeenCalled();
|
|
238
|
-
});
|
|
239
|
-
it('shows stop while writing', function () {
|
|
240
|
-
var onStopGeneration = jest.fn();
|
|
241
|
-
renderWithProviders(/*#__PURE__*/_jsx(GlobalContextTestProvider, {
|
|
242
|
-
children: /*#__PURE__*/_jsx(MAIAInput, {
|
|
243
|
-
onSendMessage: jest.fn(),
|
|
244
|
-
isWriting: true,
|
|
245
|
-
onStopGeneration: onStopGeneration
|
|
246
|
-
})
|
|
247
|
-
}));
|
|
248
|
-
fireEvent.click(sendButton());
|
|
249
|
-
expect(onStopGeneration).toHaveBeenCalled();
|
|
250
|
-
});
|
|
251
|
-
it('opens the plus menu', function () {
|
|
252
|
-
renderWithProviders(/*#__PURE__*/_jsx(GlobalContextTestProvider, {
|
|
253
|
-
children: /*#__PURE__*/_jsx(MAIAInput, {
|
|
254
|
-
onSendMessage: jest.fn()
|
|
255
|
-
})
|
|
256
|
-
}));
|
|
257
|
-
fireEvent.click(screen.getByRole('button', {
|
|
258
|
-
name: 'chat.openPlusMenuAria'
|
|
259
|
-
}));
|
|
260
|
-
expect(screen.getByText('chat.plusMenuAttach')).toBeInTheDocument();
|
|
261
|
-
expect(screen.getByText('chat.searchWeb')).toBeInTheDocument();
|
|
262
|
-
});
|
|
263
|
-
it('opens the skills catalog and selects a skill', function () {
|
|
264
|
-
insertSkillMention.mockClear();
|
|
265
|
-
renderWithProviders(/*#__PURE__*/_jsx(GlobalContextTestProvider, {
|
|
266
|
-
children: /*#__PURE__*/_jsx(MAIAInput, {
|
|
267
|
-
onSendMessage: jest.fn()
|
|
268
|
-
})
|
|
269
|
-
}));
|
|
270
|
-
fireEvent.click(screen.getByRole('button', {
|
|
271
|
-
name: 'mySkills.dropdownButton'
|
|
272
|
-
}));
|
|
273
|
-
fireEvent.click(screen.getByRole('button', {
|
|
274
|
-
name: /#Resumir/
|
|
275
|
-
}));
|
|
276
|
-
expect(insertSkillMention).toHaveBeenCalledWith({
|
|
277
|
-
id: 'sk1',
|
|
278
|
-
type: 'skill',
|
|
279
|
-
label: '#Resumir'
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
});
|
|
283
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiR2xvYmFsQ29udGV4dFRlc3RQcm92aWRlciIsIk1BSUFJbnB1dCIsImpzeCIsIl9qc3giLCJpbnNlcnRTa2lsbE1lbnRpb24iLCJqZXN0IiwiZm4iLCJtb2NrIiwiRVZFTlRTIiwiYWlDaGF0UGx1c09wZW4iLCJhaUNoYXRRdWlja0FjdGlvbk9wZW4iLCJhaUNoYXRTa2lsbE9wZW4iLCJhaUNoYXRTa2lsbFNlbGVjdCIsImFpQ2hhdFNraWxsUmVtb3ZlIiwidXNlRXZlbnQiLCJDT1JVc2VyUm9sZSIsIkNMRVZFTCIsIkRJUkVDVE9SIiwiUFJPSkVDVF9NQU5BR0VSIiwiQ09MTEFCT1JBVE9SIiwiRlJFRUxBTkNFUiIsIkNMSUVOVCIsInVzZVVzZXIiLCJpZCIsInJvbGVfaWQiLCJjYW5BY2Nlc3NUb1NraWxscyIsInVzZVNraWxsc0NhdGFsb2ciLCJza2lsbHMiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb250ZW50IiwibG9hZGluZyIsImVycm9yIiwiZmV0Y2hTa2lsbHMiLCJ1c2VTbGFzaENvbW1hbmRzIiwiY29tbWFuZHMiLCJ1c2VNZW50aW9uUG9wb3ZlciIsInBvcG92ZXJPcGVuIiwicmVzZXRNZW50aW9uT3BlblRyYWNraW5nIiwiaGFuZGxlVHJpZ2dlciIsImhhbmRsZUtleURvd24iLCJwb3BvdmVyTm9kZSIsImNsb3NlIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsIk1vZGFsRmlsZUV4Y2VlZHMiLCJTbGFzaENvbW1hbmREcm9wZG93biIsIlJlYWN0IiwicmVxdWlyZUFjdHVhbCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwiZm9yd2FyZFJlZiIsIl9yZWYiLCJyZWYiLCJvbklucHV0IiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidmFsdWUiLCJzZXRWYWx1ZSIsImVtaXQiLCJ0ZXh0IiwibWVudGlvbnMiLCJzbGFzaENvbW1hbmRzIiwidHJpZ2dlciIsImFjdGl2ZSIsInF1ZXJ5IiwiYXRSdW5MZW5ndGgiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiZm9jdXMiLCJjbGVhciIsInNldFBsYWluVGV4dCIsInNlcmlhbGl6ZSIsImluc2VydE1lbnRpb25UcmlnZ2VyIiwiaW5zZXJ0U2xhc2hUcmlnZ2VyIiwiaW5zZXJ0TWVudGlvbiIsImluc2VydFNsYXNoQ29tbWFuZCIsImluc2VydFNraWxsVHJpZ2dlciIsImhhc2hUcmlnZ2VyIiwic3luY1RyaWdnZXJBdFJ1bkxlbmd0aCIsInN5bmNTa2lsbFRyaWdnZXIiLCJoYXNWaXN1YWxNdWx0aWxpbmUiLCJnZXRFZGl0b3JDbGllbnRSZWN0Iiwib25DaGFuZ2UiLCJldmVudCIsInRhcmdldCIsInNlbmRCdXR0b24iLCJnZXRBbGxCeVJvbGUiLCJmaW5kIiwiYnV0dG9uIiwiZ2V0QXR0cmlidXRlIiwiZGVzY3JpYmUiLCJpdCIsImNoaWxkcmVuIiwib25TZW5kTWVzc2FnZSIsImV4cGVjdCIsImdldEJ5UGxhY2Vob2xkZXJUZXh0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJ0b0JlRGlzYWJsZWQiLCJjaGFuZ2UiLCJnZXRCeUxhYmVsVGV4dCIsImNsaWNrIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJ0b0hhdmVWYWx1ZSIsIm5vdCIsInRvSGF2ZUJlZW5DYWxsZWQiLCJvblN0b3BHZW5lcmF0aW9uIiwiaXNXcml0aW5nIiwiZ2V0QnlSb2xlIiwiZ2V0QnlUZXh0IiwibW9ja0NsZWFyIiwidHlwZSIsImxhYmVsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dC5zcGVjLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJlRXZlbnQsIHJlbmRlcldpdGhQcm92aWRlcnMsIHNjcmVlbiB9IGZyb20gJy4uLy4uLy4uL3Rlc3QvdGVzdC11dGlscydcbmltcG9ydCB7IEdsb2JhbENvbnRleHRUZXN0UHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi90ZXN0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgTUFJQUlucHV0IH0gZnJvbSAnLi9NQUlBSW5wdXQnXG5cbmNvbnN0IGluc2VydFNraWxsTWVudGlvbiA9IGplc3QuZm4oKVxuXG5qZXN0Lm1vY2soJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50JywgKCkgPT4gKHtcbiAgRVZFTlRTOiB7XG4gICAgYWlDaGF0UGx1c09wZW46ICdBSV9DSEFUX1BMVVNfT1BFTicsXG4gICAgYWlDaGF0UXVpY2tBY3Rpb25PcGVuOiAnQUlfQ0hBVF9RVUlDS19BQ1RJT05fT1BFTicsXG4gICAgYWlDaGF0U2tpbGxPcGVuOiAnQUlfQ0hBVF9TS0lMTF9PUEVOJyxcbiAgICBhaUNoYXRTa2lsbFNlbGVjdDogJ0FJX0NIQVRfU0tJTExfU0VMRUNUJyxcbiAgICBhaUNoYXRTa2lsbFJlbW92ZTogJ0FJX0NIQVRfU0tJTExfUkVNT1ZFJyxcbiAgfSxcbiAgdXNlRXZlbnQ6ICgpID0+IGplc3QuZm4oKSxcbn0pKVxuXG5qZXN0Lm1vY2soJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInLCAoKSA9PiAoe1xuICBDT1JVc2VyUm9sZToge1xuICAgIENMRVZFTDogMSxcbiAgICBESVJFQ1RPUjogMixcbiAgICBQUk9KRUNUX01BTkFHRVI6IDMsXG4gICAgQ09MTEFCT1JBVE9SOiA0LFxuICAgIEZSRUVMQU5DRVI6IDUsXG4gICAgQ0xJRU5UOiA2LFxuICB9LFxuICB1c2VVc2VyOiAoKSA9PiAoeyBpZDogOTksIHJvbGVfaWQ6IDMgfSksXG59KSlcblxuamVzdC5tb2NrKCcuLi8uLi8uLi9jb25zdGFudHMvcGVybWlzc2lvbnMnLCAoKSA9PiAoe1xuICBjYW5BY2Nlc3NUb1NraWxsczogKCkgPT4gdHJ1ZSxcbn0pKVxuXG5qZXN0Lm1vY2soJy4uLy4uLy4uL2hvb2tzL3VzZVNraWxsc0NhdGFsb2cnLCAoKSA9PiAoe1xuICB1c2VTa2lsbHNDYXRhbG9nOiAoKSA9PiAoe1xuICAgIHNraWxsczogW3sgaWQ6ICdzazEnLCBuYW1lOiAnUmVzdW1pcicsIGRlc2NyaXB0aW9uOiAnRGVzYycsIGNvbnRlbnQ6ICdSZXN1bWUnIH1dLFxuICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBmZXRjaFNraWxsczogamVzdC5mbigpLFxuICB9KSxcbn0pKVxuXG5qZXN0Lm1vY2soJy4uLy4uLy4uL2hvb2tzL3VzZVNsYXNoQ29tbWFuZHMnLCAoKSA9PiAoe1xuICB1c2VTbGFzaENvbW1hbmRzOiAoKSA9PiAoeyBjb21tYW5kczogW10gfSksXG59KSlcblxuamVzdC5tb2NrKCcuLi8uLi8uLi9ob29rcy91c2VNZW50aW9uUG9wb3ZlcicsICgpID0+ICh7XG4gIHVzZU1lbnRpb25Qb3BvdmVyOiAoKSA9PiAoe1xuICAgIHBvcG92ZXJPcGVuOiBmYWxzZSxcbiAgICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmc6IGplc3QuZm4oKSxcbiAgICBoYW5kbGVUcmlnZ2VyOiBqZXN0LmZuKCksXG4gICAgaGFuZGxlS2V5RG93bjogKCkgPT4gZmFsc2UsXG4gICAgcG9wb3Zlck5vZGU6IG51bGwsXG4gICAgY2xvc2U6IGplc3QuZm4oKSxcbiAgfSksXG59KSlcblxuamVzdC5tb2NrKCcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4JywgKCkgPT4gKHtcbiAgdXNlTWFpYVRhc2tQYW5lbFpJbmRleDogKCkgPT4gMTMwMCxcbn0pKVxuXG5qZXN0Lm1vY2soJy4uLy4uL29yZ2FuaXNtcy9Nb2RhbEZpbGVFeGNlZWRzJywgKCkgPT4gKHtcbiAgTW9kYWxGaWxlRXhjZWVkczogKCkgPT4gbnVsbCxcbn0pKVxuXG5qZXN0Lm1vY2soJy4uL1NsYXNoQ29tbWFuZERyb3Bkb3duJywgKCkgPT4gKHtcbiAgU2xhc2hDb21tYW5kRHJvcGRvd246ICgpID0+IG51bGwsXG59KSlcblxuamVzdC5tb2NrKCcuLi9Db250ZXh0TWVudGlvbkVkaXRvcicsICgpID0+IHtcbiAgY29uc3QgUmVhY3QgPSBqZXN0LnJlcXVpcmVBY3R1YWwoJ3JlYWN0JykgYXMgdHlwZW9mIGltcG9ydCgncmVhY3QnKVxuICByZXR1cm4ge1xuICAgIENvbnRleHRNZW50aW9uRWRpdG9yOiBSZWFjdC5mb3J3YXJkUmVmKFxuICAgICAgKFxuICAgICAgICB7XG4gICAgICAgICAgb25JbnB1dCxcbiAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgfToge1xuICAgICAgICAgIG9uSW5wdXQ/OiAoc3RhdGU6IHtcbiAgICAgICAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgICAgICAgbWVudGlvbnM6IHVua25vd25bXVxuICAgICAgICAgICAgc2xhc2hDb21tYW5kczogdW5rbm93bltdXG4gICAgICAgICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9XG4gICAgICAgICAgfSkgPT4gdm9pZFxuICAgICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gICAgICAgICAgZGlzYWJsZWQ/OiBib29sZWFuXG4gICAgICAgIH0sXG4gICAgICAgIHJlZjoge1xuICAgICAgICAgIGZvY3VzOiAoKSA9PiB2b2lkXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHZvaWRcbiAgICAgICAgICBzZXRQbGFpblRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWRcbiAgICAgICAgICBzZXJpYWxpemU6ICgpID0+IHsgdGV4dDogc3RyaW5nOyBtZW50aW9uczogdW5rbm93bltdOyBzbGFzaENvbW1hbmRzOiB1bmtub3duW10gfVxuICAgICAgICAgIGluc2VydE1lbnRpb25UcmlnZ2VyOiAoKSA9PiB2b2lkXG4gICAgICAgIH0gfCBudWxsXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgnJylcbiAgICAgICAgY29uc3QgZW1pdCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBvbklucHV0Py4oe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIG1lbnRpb25zOiBbXSxcbiAgICAgICAgICAgIHNsYXNoQ29tbWFuZHM6IFtdLFxuICAgICAgICAgICAgdHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgICAgIGZvY3VzOiBqZXN0LmZuKCksXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICAgIHNldFZhbHVlKCcnKVxuICAgICAgICAgICAgZW1pdCgnJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldFBsYWluVGV4dDogKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc2V0VmFsdWUodGV4dClcbiAgICAgICAgICAgIGVtaXQodGV4dClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlcmlhbGl6ZTogKCkgPT4gKHsgdGV4dDogdmFsdWUsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfSksXG4gICAgICAgICAgaW5zZXJ0TWVudGlvblRyaWdnZXI6IGplc3QuZm4oKSxcbiAgICAgICAgICBpbnNlcnRTbGFzaFRyaWdnZXI6IGplc3QuZm4oKSxcbiAgICAgICAgICBpbnNlcnRNZW50aW9uOiBqZXN0LmZuKCksXG4gICAgICAgICAgaW5zZXJ0U2xhc2hDb21tYW5kOiBqZXN0LmZuKCksXG4gICAgICAgICAgaW5zZXJ0U2tpbGxUcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgICAgICBvbklucHV0Py4oe1xuICAgICAgICAgICAgICB0ZXh0OiAnIycsXG4gICAgICAgICAgICAgIG1lbnRpb25zOiBbXSxcbiAgICAgICAgICAgICAgc2xhc2hDb21tYW5kczogW10sXG4gICAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgICBoYXNoVHJpZ2dlcjogeyBhY3RpdmU6IHRydWUsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgfSBhcyBuZXZlcilcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluc2VydFNraWxsTWVudGlvbixcbiAgICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoOiBqZXN0LmZuKCksXG4gICAgICAgICAgc3luY1NraWxsVHJpZ2dlcjogamVzdC5mbigpLFxuICAgICAgICAgIGhhc1Zpc3VhbE11bHRpbGluZTogKCkgPT4gZmFsc2UsXG4gICAgICAgICAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gbnVsbCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJtYWlhLWVkaXRvclwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBzZXRWYWx1ZShldmVudC50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgIGVtaXQoZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgKSxcbiAgfVxufSlcblxuY29uc3Qgc2VuZEJ1dHRvbiA9ICgpID0+XG4gIHNjcmVlblxuICAgIC5nZXRBbGxCeVJvbGUoJ2J1dHRvbicpXG4gICAgLmZpbmQoYnV0dG9uID0+ICFidXR0b24uZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgJiYgIWJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGFzcG9wdXAnKSlcblxuZGVzY3JpYmUoJ01BSUFJbnB1dCcsICgpID0+IHtcbiAgaXQoJ2tlZXBzIHNlbmQgZGlzYWJsZWQgd2l0aG91dCB0ZXh0JywgKCkgPT4ge1xuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoXG4gICAgICA8R2xvYmFsQ29udGV4dFRlc3RQcm92aWRlcj5cbiAgICAgICAgPE1BSUFJbnB1dCBvblNlbmRNZXNzYWdlPXtqZXN0LmZuKCl9IHBsYWNlaG9sZGVyPVwiRXNjcmliw61cIiAvPlxuICAgICAgPC9HbG9iYWxDb250ZXh0VGVzdFByb3ZpZGVyPlxuICAgIClcblxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlQbGFjZWhvbGRlclRleHQoJ0VzY3JpYsOtJykpLnRvQmVJblRoZURvY3VtZW50KClcbiAgICBleHBlY3Qoc2VuZEJ1dHRvbigpKS50b0JlRGlzYWJsZWQoKVxuICB9KVxuXG4gIGl0KCdzZW5kcyB0aGUgdHlwZWQgbWVzc2FnZSBhbmQgY2xlYXJzIHRoZSBlZGl0b3InLCAoKSA9PiB7XG4gICAgY29uc3Qgb25TZW5kTWVzc2FnZSA9IGplc3QuZm4oKVxuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoXG4gICAgICA8R2xvYmFsQ29udGV4dFRlc3RQcm92aWRlcj5cbiAgICAgICAgPE1BSUFJbnB1dCBvblNlbmRNZXNzYWdlPXtvblNlbmRNZXNzYWdlfSAvPlxuICAgICAgPC9HbG9iYWxDb250ZXh0VGVzdFByb3ZpZGVyPlxuICAgIClcblxuICAgIGZpcmVFdmVudC5jaGFuZ2Uoc2NyZWVuLmdldEJ5TGFiZWxUZXh0KCdtYWlhLWVkaXRvcicpLCB7IHRhcmdldDogeyB2YWx1ZTogJ0hvbGEgZHJhZnQnIH0gfSlcbiAgICBmaXJlRXZlbnQuY2xpY2soc2VuZEJ1dHRvbigpIGFzIEhUTUxCdXR0b25FbGVtZW50KVxuXG4gICAgZXhwZWN0KG9uU2VuZE1lc3NhZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdIb2xhIGRyYWZ0JywgW10sIFtdKVxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ21haWEtZWRpdG9yJykpLnRvSGF2ZVZhbHVlKCcnKVxuICB9KVxuXG4gIGl0KCdkb2VzIG5vdCBzZW5kIHdoZW4gZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgY29uc3Qgb25TZW5kTWVzc2FnZSA9IGplc3QuZm4oKVxuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoXG4gICAgICA8R2xvYmFsQ29udGV4dFRlc3RQcm92aWRlcj5cbiAgICAgICAgPE1BSUFJbnB1dCBvblNlbmRNZXNzYWdlPXtvblNlbmRNZXNzYWdlfSBkaXNhYmxlZCAvPlxuICAgICAgPC9HbG9iYWxDb250ZXh0VGVzdFByb3ZpZGVyPlxuICAgIClcblxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlMYWJlbFRleHQoJ21haWEtZWRpdG9yJykpLnRvQmVEaXNhYmxlZCgpXG4gICAgZXhwZWN0KHNlbmRCdXR0b24oKSkudG9CZURpc2FibGVkKClcbiAgICBmaXJlRXZlbnQuY2xpY2soc2VuZEJ1dHRvbigpIGFzIEhUTUxCdXR0b25FbGVtZW50KVxuICAgIGV4cGVjdChvblNlbmRNZXNzYWdlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gIH0pXG5cbiAgaXQoJ3Nob3dzIHN0b3Agd2hpbGUgd3JpdGluZycsICgpID0+IHtcbiAgICBjb25zdCBvblN0b3BHZW5lcmF0aW9uID0gamVzdC5mbigpXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxHbG9iYWxDb250ZXh0VGVzdFByb3ZpZGVyPlxuICAgICAgICA8TUFJQUlucHV0IG9uU2VuZE1lc3NhZ2U9e2plc3QuZm4oKX0gaXNXcml0aW5nIG9uU3RvcEdlbmVyYXRpb249e29uU3RvcEdlbmVyYXRpb259IC8+XG4gICAgICA8L0dsb2JhbENvbnRleHRUZXN0UHJvdmlkZXI+XG4gICAgKVxuXG4gICAgZmlyZUV2ZW50LmNsaWNrKHNlbmRCdXR0b24oKSBhcyBIVE1MQnV0dG9uRWxlbWVudClcbiAgICBleHBlY3Qob25TdG9wR2VuZXJhdGlvbikudG9IYXZlQmVlbkNhbGxlZCgpXG4gIH0pXG5cbiAgaXQoJ29wZW5zIHRoZSBwbHVzIG1lbnUnLCAoKSA9PiB7XG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxHbG9iYWxDb250ZXh0VGVzdFByb3ZpZGVyPlxuICAgICAgICA8TUFJQUlucHV0IG9uU2VuZE1lc3NhZ2U9e2plc3QuZm4oKX0gLz5cbiAgICAgIDwvR2xvYmFsQ29udGV4dFRlc3RQcm92aWRlcj5cbiAgICApXG5cbiAgICBmaXJlRXZlbnQuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnY2hhdC5vcGVuUGx1c01lbnVBcmlhJyB9KSlcblxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdjaGF0LnBsdXNNZW51QXR0YWNoJykpLnRvQmVJblRoZURvY3VtZW50KClcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnY2hhdC5zZWFyY2hXZWInKSkudG9CZUluVGhlRG9jdW1lbnQoKVxuICB9KVxuXG4gIGl0KCdvcGVucyB0aGUgc2tpbGxzIGNhdGFsb2cgYW5kIHNlbGVjdHMgYSBza2lsbCcsICgpID0+IHtcbiAgICBpbnNlcnRTa2lsbE1lbnRpb24ubW9ja0NsZWFyKClcblxuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoXG4gICAgICA8R2xvYmFsQ29udGV4dFRlc3RQcm92aWRlcj5cbiAgICAgICAgPE1BSUFJbnB1dCBvblNlbmRNZXNzYWdlPXtqZXN0LmZuKCl9IC8+XG4gICAgICA8L0dsb2JhbENvbnRleHRUZXN0UHJvdmlkZXI+XG4gICAgKVxuXG4gICAgZmlyZUV2ZW50LmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ215U2tpbGxzLmRyb3Bkb3duQnV0dG9uJyB9KSlcblxuICAgIGZpcmVFdmVudC5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC8jUmVzdW1pci8gfSkpXG4gICAgZXhwZWN0KGluc2VydFNraWxsTWVudGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBpZDogJ3NrMScsIHR5cGU6ICdza2lsbCcsIGxhYmVsOiAnI1Jlc3VtaXInIH0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsU0FBUyxFQUFFQyxtQkFBbUIsRUFBRUMsTUFBTSxRQUFRLDBCQUEwQjtBQUNqRixTQUFTQyx5QkFBeUIsUUFBUSw4QkFBOEI7QUFDeEUsU0FBU0MsU0FBUyxRQUFRLGFBQWE7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUE7QUFFdkMsSUFBTUMsa0JBQWtCLEdBQUdDLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7QUFFcENELElBQUksQ0FBQ0UsSUFBSSxDQUFDLHlCQUF5QixFQUFFO0VBQUEsT0FBTztJQUMxQ0MsTUFBTSxFQUFFO01BQ05DLGNBQWMsRUFBRSxtQkFBbUI7TUFDbkNDLHFCQUFxQixFQUFFLDJCQUEyQjtNQUNsREMsZUFBZSxFQUFFLG9CQUFvQjtNQUNyQ0MsaUJBQWlCLEVBQUUsc0JBQXNCO01BQ3pDQyxpQkFBaUIsRUFBRTtJQUNyQixDQUFDO0lBQ0RDLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBO01BQUEsT0FBUVQsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztJQUFBO0VBQzNCLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSEQsSUFBSSxDQUFDRSxJQUFJLENBQUMsMkJBQTJCLEVBQUU7RUFBQSxPQUFPO0lBQzVDUSxXQUFXLEVBQUU7TUFDWEMsTUFBTSxFQUFFLENBQUM7TUFDVEMsUUFBUSxFQUFFLENBQUM7TUFDWEMsZUFBZSxFQUFFLENBQUM7TUFDbEJDLFlBQVksRUFBRSxDQUFDO01BQ2ZDLFVBQVUsRUFBRSxDQUFDO01BQ2JDLE1BQU0sRUFBRTtJQUNWLENBQUM7SUFDREMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7TUFBQSxPQUFTO1FBQUVDLEVBQUUsRUFBRSxFQUFFO1FBQUVDLE9BQU8sRUFBRTtNQUFFLENBQUM7SUFBQTtFQUN4QyxDQUFDO0FBQUEs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
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { fireEvent, renderWithProviders, screen } from '../../../test/test-utils';
|
|
2
|
-
import { ReasoningBlock } from './ReasoningBlock';
|
|
3
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
-
jest.mock('../MaiaStreamdown/MaiaStreamdown', function () {
|
|
5
|
-
return {
|
|
6
|
-
MaiaStreamdown: function MaiaStreamdown(_ref) {
|
|
7
|
-
var children = _ref.children;
|
|
8
|
-
return /*#__PURE__*/_jsx("div", {
|
|
9
|
-
children: children
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
});
|
|
14
|
-
jest.mock('../../../hooks/useEvent', function () {
|
|
15
|
-
return {
|
|
16
|
-
EVENTS: {
|
|
17
|
-
aiChatThinking: 'AI_CHAT_THINKING'
|
|
18
|
-
},
|
|
19
|
-
useEvent: function useEvent() {
|
|
20
|
-
return jest.fn();
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
});
|
|
24
|
-
describe('ReasoningBlock', function () {
|
|
25
|
-
it('returns null without visible steps', function () {
|
|
26
|
-
var _renderWithProviders = renderWithProviders(/*#__PURE__*/_jsx(ReasoningBlock, {
|
|
27
|
-
messageId: "m1",
|
|
28
|
-
trace: {
|
|
29
|
-
steps: [{
|
|
30
|
-
i: 0,
|
|
31
|
-
type: 'thinking',
|
|
32
|
-
text: '...'
|
|
33
|
-
}],
|
|
34
|
-
summary: {
|
|
35
|
-
stepCount: 1,
|
|
36
|
-
toolCount: 0
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
})),
|
|
40
|
-
container = _renderWithProviders.container;
|
|
41
|
-
expect(container).toBeEmptyDOMElement();
|
|
42
|
-
});
|
|
43
|
-
it('toggles the expanded trace', function () {
|
|
44
|
-
renderWithProviders(/*#__PURE__*/_jsx(ReasoningBlock, {
|
|
45
|
-
messageId: "m1",
|
|
46
|
-
trace: {
|
|
47
|
-
steps: [{
|
|
48
|
-
i: 0,
|
|
49
|
-
type: 'narration',
|
|
50
|
-
text: 'Revisando'
|
|
51
|
-
}, {
|
|
52
|
-
i: 1,
|
|
53
|
-
type: 'tool',
|
|
54
|
-
tool: 'edit_task'
|
|
55
|
-
}],
|
|
56
|
-
summary: {
|
|
57
|
-
stepCount: 2,
|
|
58
|
-
toolCount: 1
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}));
|
|
62
|
-
var toggle = screen.getByRole('button');
|
|
63
|
-
expect(toggle).toHaveAttribute('aria-expanded', 'false');
|
|
64
|
-
fireEvent.click(toggle);
|
|
65
|
-
expect(toggle).toHaveAttribute('aria-expanded', 'true');
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiUmVhc29uaW5nQmxvY2siLCJqc3giLCJfanN4IiwiamVzdCIsIm1vY2siLCJNYWlhU3RyZWFtZG93biIsIl9yZWYiLCJjaGlsZHJlbiIsIkVWRU5UUyIsImFpQ2hhdFRoaW5raW5nIiwidXNlRXZlbnQiLCJmbiIsImRlc2NyaWJlIiwiaXQiLCJfcmVuZGVyV2l0aFByb3ZpZGVycyIsIm1lc3NhZ2VJZCIsInRyYWNlIiwic3RlcHMiLCJpIiwidHlwZSIsInRleHQiLCJzdW1tYXJ5Iiwic3RlcENvdW50IiwidG9vbENvdW50IiwiY29udGFpbmVyIiwiZXhwZWN0IiwidG9CZUVtcHR5RE9NRWxlbWVudCIsInRvb2wiLCJ0b2dnbGUiLCJnZXRCeVJvbGUiLCJ0b0hhdmVBdHRyaWJ1dGUiLCJjbGljayJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ0Jsb2NrLnNwZWMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpcmVFdmVudCwgcmVuZGVyV2l0aFByb3ZpZGVycywgc2NyZWVuIH0gZnJvbSAnLi4vLi4vLi4vdGVzdC90ZXN0LXV0aWxzJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuL1JlYXNvbmluZ0Jsb2NrJ1xuXG5qZXN0Lm1vY2soJy4uL01haWFTdHJlYW1kb3duL01haWFTdHJlYW1kb3duJywgKCkgPT4gKHtcbiAgTWFpYVN0cmVhbWRvd246ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBzdHJpbmcgfSkgPT4gPGRpdj57Y2hpbGRyZW59PC9kaXY+LFxufSkpXG5cbmplc3QubW9jaygnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnLCAoKSA9PiAoe1xuICBFVkVOVFM6IHsgYWlDaGF0VGhpbmtpbmc6ICdBSV9DSEFUX1RISU5LSU5HJyB9LFxuICB1c2VFdmVudDogKCkgPT4gamVzdC5mbigpLFxufSkpXG5cbmRlc2NyaWJlKCdSZWFzb25pbmdCbG9jaycsICgpID0+IHtcbiAgaXQoJ3JldHVybnMgbnVsbCB3aXRob3V0IHZpc2libGUgc3RlcHMnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcldpdGhQcm92aWRlcnMoXG4gICAgICA8UmVhc29uaW5nQmxvY2tcbiAgICAgICAgbWVzc2FnZUlkPVwibTFcIlxuICAgICAgICB0cmFjZT17eyBzdGVwczogW3sgaTogMCwgdHlwZTogJ3RoaW5raW5nJywgdGV4dDogJy4uLicgfV0sIHN1bW1hcnk6IHsgc3RlcENvdW50OiAxLCB0b29sQ291bnQ6IDAgfSB9fVxuICAgICAgLz5cbiAgICApXG5cbiAgICBleHBlY3QoY29udGFpbmVyKS50b0JlRW1wdHlET01FbGVtZW50KClcbiAgfSlcblxuICBpdCgndG9nZ2xlcyB0aGUgZXhwYW5kZWQgdHJhY2UnLCAoKSA9PiB7XG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxSZWFzb25pbmdCbG9ja1xuICAgICAgICBtZXNzYWdlSWQ9XCJtMVwiXG4gICAgICAgIHRyYWNlPXt7XG4gICAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICAgIHsgaTogMCwgdHlwZTogJ25hcnJhdGlvbicsIHRleHQ6ICdSZXZpc2FuZG8nIH0sXG4gICAgICAgICAgICB7IGk6IDEsIHR5cGU6ICd0b29sJywgdG9vbDogJ2VkaXRfdGFzaycgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHN1bW1hcnk6IHsgc3RlcENvdW50OiAyLCB0b29sQ291bnQ6IDEgfSxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgKVxuXG4gICAgY29uc3QgdG9nZ2xlID0gc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJylcbiAgICBleHBlY3QodG9nZ2xlKS50b0hhdmVBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKVxuXG4gICAgZmlyZUV2ZW50LmNsaWNrKHRvZ2dsZSlcbiAgICBleHBlY3QodG9nZ2xlKS50b0hhdmVBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxTQUFTLEVBQUVDLG1CQUFtQixFQUFFQyxNQUFNLFFBQVEsMEJBQTBCO0FBQ2pGLFNBQVNDLGNBQWMsUUFBUSxrQkFBa0I7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUE7QUFFakRDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLGtDQUFrQyxFQUFFO0VBQUEsT0FBTztJQUNuREMsY0FBYyxFQUFFLFNBQWhCQSxjQUFjQSxDQUFBQyxJQUFBO01BQUEsSUFBS0MsUUFBUSxHQUFBRCxJQUFBLENBQVJDLFFBQVE7TUFBQSxvQkFBOEJMLElBQUE7UUFBQUssUUFBQSxFQUFNQTtNQUFRLENBQU0sQ0FBQztJQUFBO0VBQ2hGLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSEosSUFBSSxDQUFDQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7RUFBQSxPQUFPO0lBQzFDSSxNQUFNLEVBQUU7TUFBRUMsY0FBYyxFQUFFO0lBQW1CLENBQUM7SUFDOUNDLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBO01BQUEsT0FBUVAsSUFBSSxDQUFDUSxFQUFFLENBQUMsQ0FBQztJQUFBO0VBQzNCLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSEMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLFlBQU07RUFDL0JDLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFNO0lBQzdDLElBQUFDLG9CQUFBLEdBQXNCaEIsbUJBQW1CLGNBQ3ZDSSxJQUFBLENBQUNGLGNBQWM7UUFDYmUsU0FBUyxFQUFDLElBQUk7UUFDZEMsS0FBSyxFQUFFO1VBQUVDLEtBQUssRUFBRSxDQUFDO1lBQUVDLENBQUMsRUFBRSxDQUFDO1lBQUVDLElBQUksRUFBRSxVQUFVO1lBQUVDLElBQUksRUFBRTtVQUFNLENBQUMsQ0FBQztVQUFFQyxPQUFPLEVBQUU7WUFBRUMsU0FBUyxFQUFFLENBQUM7WUFBRUMsU0FBUyxFQUFFO1VBQUU7UUFBRTtNQUFFLENBQ3RHLENBQ0gsQ0FBQztNQUxPQyxTQUFTLEdBQUFWLG9CQUFBLENBQVRVLFNBQVM7SUFPakJDLE1BQU0sQ0FBQ0QsU0FBUyxDQUFDLENBQUNFLG1CQUFtQixDQUFDLENBQUM7RUFDekMsQ0FBQyxDQUFDO0VBRUZiLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxZQUFNO0lBQ3JDZixtQkFBbUIsY0FDakJJLElBQUEsQ0FBQ0YsY0FBYztNQUNiZSxTQUFTLEVBQUMsSUFBSTtNQUNkQyxLQUFLLEVBQUU7UUFDTEMsS0FBSyxFQUFFLENBQ0w7VUFBRUMsQ0FBQyxFQUFFLENBQUM7VUFBRUMsSUFBSSxFQUFFLFdBQVc7VUFBRUMsSUFBSSxFQUFFO1FBQVksQ0FBQyxFQUM5QztVQUFFRixDQUFDLEVBQUUsQ0FBQztVQUFFQyxJQUFJLEVBQUUsTUFBTTtVQUFFUSxJQUFJLEVBQUU7UUFBWSxDQUFDLENBQzFDO1FBQ0ROLE9BQU8sRUFBRTtVQUFFQyxTQUFTLEVBQUUsQ0FBQztVQUFFQyxTQUFTLEVBQUU7UUFBRTtNQUN4QztJQUFFLENBQ0gsQ0FDSCxDQUFDO0lBRUQsSUFBTUssTUFBTSxHQUFHN0IsTUFBTSxDQUFDOEIsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUN6Q0osTUFBTSxDQUFDRyxNQUFNLENBQUMsQ0FBQ0UsZUFBZSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7SUFFeERqQyxTQUFTLENBQUNrQyxLQUFLLENBQUNILE1BQU0sQ0FBQztJQUN2QkgsTUFBTSxDQUFDRyxNQUFNLENBQUMsQ0FBQ0UsZUFBZSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7RUFDekQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
-
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
6
|
-
import { InformationCircle } from '@projectcor/icons/lib/components/InformationCircle';
|
|
7
|
-
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
8
|
-
import { useT } from '../../../hooks/useT';
|
|
9
|
-
import { PlusIcon } from '../icons/PlusIcon';
|
|
10
|
-
import { Skeleton } from '../Skeleton/Skeleton';
|
|
11
|
-
import { SCSKDAnchor, SCSKDCreateHeader, SCSKDCreateInfoIcon, SCSKDCreateRow, SCSKDDivider, SCSKDDropdown, SCSKDItem, SCSKDItemSubtitle, SCSKDItemTitle, SCSKDList, SCSKDMatchHighlight, SCSKDSkeletonList, SCSKDStateMessage } from './SkillsDropdown.styles';
|
|
12
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
|
-
var renderWithHighlight = function renderWithHighlight(text, query) {
|
|
14
|
-
var needle = query.trim().toLowerCase();
|
|
15
|
-
if (!needle) return text;
|
|
16
|
-
var haystack = text.toLowerCase();
|
|
17
|
-
if (haystack.indexOf(needle) === -1) return text;
|
|
18
|
-
var parts = [];
|
|
19
|
-
var cursor = 0;
|
|
20
|
-
var nextIdx = haystack.indexOf(needle, cursor);
|
|
21
|
-
var chunkKey = 0;
|
|
22
|
-
while (nextIdx !== -1) {
|
|
23
|
-
if (nextIdx > cursor) parts.push(text.slice(cursor, nextIdx));
|
|
24
|
-
parts.push(/*#__PURE__*/_jsx(SCSKDMatchHighlight, {
|
|
25
|
-
children: text.slice(nextIdx, nextIdx + needle.length)
|
|
26
|
-
}, "m-".concat(chunkKey)));
|
|
27
|
-
chunkKey += 1;
|
|
28
|
-
cursor = nextIdx + needle.length;
|
|
29
|
-
nextIdx = haystack.indexOf(needle, cursor);
|
|
30
|
-
}
|
|
31
|
-
if (cursor < text.length) parts.push(text.slice(cursor));
|
|
32
|
-
return parts;
|
|
33
|
-
};
|
|
34
|
-
export var SkillsDropdown = function SkillsDropdown(_ref) {
|
|
35
|
-
var skills = _ref.skills,
|
|
36
|
-
query = _ref.query,
|
|
37
|
-
_ref$loading = _ref.loading,
|
|
38
|
-
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
39
|
-
_ref$error = _ref.error,
|
|
40
|
-
error = _ref$error === void 0 ? false : _ref$error,
|
|
41
|
-
_ref$canCreate = _ref.canCreate,
|
|
42
|
-
canCreate = _ref$canCreate === void 0 ? false : _ref$canCreate,
|
|
43
|
-
onSelect = _ref.onSelect,
|
|
44
|
-
onCreate = _ref.onCreate,
|
|
45
|
-
onClose = _ref.onClose,
|
|
46
|
-
bottom = _ref.bottom,
|
|
47
|
-
left = _ref.left,
|
|
48
|
-
maxHeight = _ref.maxHeight,
|
|
49
|
-
zIndex = _ref.zIndex,
|
|
50
|
-
anchorRef = _ref.anchorRef;
|
|
51
|
-
var _useT = useT(),
|
|
52
|
-
t = _useT.t;
|
|
53
|
-
var _useState = useState(0),
|
|
54
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
55
|
-
highlightedIndex = _useState2[0],
|
|
56
|
-
setHighlightedIndex = _useState2[1];
|
|
57
|
-
var dropdownRef = useRef(null);
|
|
58
|
-
var itemRefs = useRef([]);
|
|
59
|
-
var filtered = useMemo(function () {
|
|
60
|
-
var normalized = query.trim().toLowerCase();
|
|
61
|
-
if (!normalized) return skills;
|
|
62
|
-
return skills.filter(function (s) {
|
|
63
|
-
return s.name.toLowerCase().includes(normalized);
|
|
64
|
-
});
|
|
65
|
-
}, [skills, query]);
|
|
66
|
-
useEffect(function () {
|
|
67
|
-
setHighlightedIndex(0);
|
|
68
|
-
}, [query]);
|
|
69
|
-
useEffect(function () {
|
|
70
|
-
itemRefs.current = itemRefs.current.slice(0, filtered.length);
|
|
71
|
-
}, [filtered.length]);
|
|
72
|
-
useEffect(function () {
|
|
73
|
-
var handlePointerDownOutside = function handlePointerDownOutside(mouseEvent) {
|
|
74
|
-
var _dropdownRef$current, _anchorRef$current;
|
|
75
|
-
var target = mouseEvent.target;
|
|
76
|
-
if (!target) return;
|
|
77
|
-
if ((_dropdownRef$current = dropdownRef.current) !== null && _dropdownRef$current !== void 0 && _dropdownRef$current.contains(target)) return;
|
|
78
|
-
if (anchorRef !== null && anchorRef !== void 0 && (_anchorRef$current = anchorRef.current) !== null && _anchorRef$current !== void 0 && _anchorRef$current.contains(target)) return;
|
|
79
|
-
onClose();
|
|
80
|
-
};
|
|
81
|
-
document.addEventListener('mousedown', handlePointerDownOutside);
|
|
82
|
-
return function () {
|
|
83
|
-
return document.removeEventListener('mousedown', handlePointerDownOutside);
|
|
84
|
-
};
|
|
85
|
-
}, [onClose, anchorRef]);
|
|
86
|
-
useEffect(function () {
|
|
87
|
-
var scrollHighlightedIntoView = function scrollHighlightedIntoView(index) {
|
|
88
|
-
requestAnimationFrame(function () {
|
|
89
|
-
var _itemRefs$current$ind;
|
|
90
|
-
(_itemRefs$current$ind = itemRefs.current[index]) === null || _itemRefs$current$ind === void 0 || _itemRefs$current$ind.scrollIntoView({
|
|
91
|
-
block: 'nearest'
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
var handler = function handler(e) {
|
|
96
|
-
if (e.key === 'ArrowDown') {
|
|
97
|
-
e.preventDefault();
|
|
98
|
-
var next = filtered.length ? (highlightedIndex + 1) % filtered.length : 0;
|
|
99
|
-
setHighlightedIndex(next);
|
|
100
|
-
scrollHighlightedIntoView(next);
|
|
101
|
-
} else if (e.key === 'ArrowUp') {
|
|
102
|
-
e.preventDefault();
|
|
103
|
-
var _next = filtered.length ? (highlightedIndex - 1 + filtered.length) % filtered.length : 0;
|
|
104
|
-
setHighlightedIndex(_next);
|
|
105
|
-
scrollHighlightedIntoView(_next);
|
|
106
|
-
} else if (e.key === 'Enter') {
|
|
107
|
-
if (filtered[highlightedIndex]) {
|
|
108
|
-
e.preventDefault();
|
|
109
|
-
e.stopPropagation();
|
|
110
|
-
onSelect(filtered[highlightedIndex]);
|
|
111
|
-
}
|
|
112
|
-
} else if (e.key === 'Escape') {
|
|
113
|
-
e.preventDefault();
|
|
114
|
-
onClose();
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
document.addEventListener('keydown', handler, true);
|
|
118
|
-
return function () {
|
|
119
|
-
return document.removeEventListener('keydown', handler, true);
|
|
120
|
-
};
|
|
121
|
-
}, [filtered, highlightedIndex, onSelect, onClose]);
|
|
122
|
-
var renderBody = function renderBody() {
|
|
123
|
-
if (loading) {
|
|
124
|
-
return /*#__PURE__*/_jsx(SCSKDSkeletonList, {
|
|
125
|
-
children: [0, 1, 2].map(function (i) {
|
|
126
|
-
return /*#__PURE__*/_jsx(Skeleton, {
|
|
127
|
-
variant: "text",
|
|
128
|
-
height: 20,
|
|
129
|
-
width: i === 0 ? '70%' : '55%'
|
|
130
|
-
}, i);
|
|
131
|
-
})
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
if (error) {
|
|
135
|
-
return /*#__PURE__*/_jsx(SCSKDStateMessage, {
|
|
136
|
-
children: t('mySkills.dropdownError')
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
if (filtered.length === 0) {
|
|
140
|
-
return /*#__PURE__*/_jsx(SCSKDStateMessage, {
|
|
141
|
-
children: t('mySkills.dropdownEmpty')
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
return /*#__PURE__*/_jsx(SCSKDList, {
|
|
145
|
-
children: filtered.map(function (skill, index) {
|
|
146
|
-
return /*#__PURE__*/_jsxs(SCSKDItem, {
|
|
147
|
-
ref: function ref(el) {
|
|
148
|
-
itemRefs.current[index] = el;
|
|
149
|
-
},
|
|
150
|
-
$index: index,
|
|
151
|
-
$highlighted: index === highlightedIndex,
|
|
152
|
-
onMouseEnter: function onMouseEnter() {
|
|
153
|
-
return setHighlightedIndex(index);
|
|
154
|
-
},
|
|
155
|
-
onClick: function onClick() {
|
|
156
|
-
return onSelect(skill);
|
|
157
|
-
},
|
|
158
|
-
type: "button",
|
|
159
|
-
children: [/*#__PURE__*/_jsx(SCSKDItemTitle, {
|
|
160
|
-
children: renderWithHighlight("#".concat(skill.name), query)
|
|
161
|
-
}), skill.description && /*#__PURE__*/_jsx(SCSKDItemSubtitle, {
|
|
162
|
-
children: skill.description
|
|
163
|
-
})]
|
|
164
|
-
}, skill.id);
|
|
165
|
-
})
|
|
166
|
-
});
|
|
167
|
-
};
|
|
168
|
-
return /*#__PURE__*/_jsx(SCSKDAnchor, {
|
|
169
|
-
$bottom: bottom,
|
|
170
|
-
$left: left,
|
|
171
|
-
$maxHeight: maxHeight,
|
|
172
|
-
$zIndex: zIndex,
|
|
173
|
-
onMouseDown: function onMouseDown(e) {
|
|
174
|
-
return e.stopPropagation();
|
|
175
|
-
},
|
|
176
|
-
children: /*#__PURE__*/_jsxs(SCSKDDropdown, {
|
|
177
|
-
ref: dropdownRef,
|
|
178
|
-
children: [canCreate && onCreate && /*#__PURE__*/_jsxs(_Fragment, {
|
|
179
|
-
children: [/*#__PURE__*/_jsxs(SCSKDCreateHeader, {
|
|
180
|
-
children: [/*#__PURE__*/_jsxs(SCSKDCreateRow, {
|
|
181
|
-
type: "button",
|
|
182
|
-
onClick: onCreate,
|
|
183
|
-
children: [/*#__PURE__*/_jsx(PlusIcon, {
|
|
184
|
-
width: 16,
|
|
185
|
-
height: 16
|
|
186
|
-
}), t('mySkills.dropdownCreate')]
|
|
187
|
-
}), /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
188
|
-
title: t('mySkills.infoTooltip')
|
|
189
|
-
}, zIndex != null ? {
|
|
190
|
-
zIndex: zIndex + 1
|
|
191
|
-
} : {}), {}, {
|
|
192
|
-
children: /*#__PURE__*/_jsx(SCSKDCreateInfoIcon, {
|
|
193
|
-
"aria-label": t('mySkills.infoTooltip'),
|
|
194
|
-
children: /*#__PURE__*/_jsx(InformationCircle, {
|
|
195
|
-
color: "#808080",
|
|
196
|
-
width: 20,
|
|
197
|
-
height: 20
|
|
198
|
-
})
|
|
199
|
-
})
|
|
200
|
-
}))]
|
|
201
|
-
}), /*#__PURE__*/_jsx(SCSKDDivider, {
|
|
202
|
-
children: /*#__PURE__*/_jsx("span", {})
|
|
203
|
-
})]
|
|
204
|
-
}), renderBody()]
|
|
205
|
-
})
|
|
206
|
-
});
|
|
207
|
-
};
|
|
208
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJJbmZvcm1hdGlvbkNpcmNsZSIsIlRvb2x0aXAiLCJ1c2VUIiwiUGx1c0ljb24iLCJTa2VsZXRvbiIsIlNDU0tEQW5jaG9yIiwiU0NTS0RDcmVhdGVIZWFkZXIiLCJTQ1NLRENyZWF0ZUluZm9JY29uIiwiU0NTS0RDcmVhdGVSb3ciLCJTQ1NLRERpdmlkZXIiLCJTQ1NLRERyb3Bkb3duIiwiU0NTS0RJdGVtIiwiU0NTS0RJdGVtU3VidGl0bGUiLCJTQ1NLREl0ZW1UaXRsZSIsIlNDU0tETGlzdCIsIlNDU0tETWF0Y2hIaWdobGlnaHQiLCJTQ1NLRFNrZWxldG9uTGlzdCIsIlNDU0tEU3RhdGVNZXNzYWdlIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwicmVuZGVyV2l0aEhpZ2hsaWdodCIsInRleHQiLCJxdWVyeSIsIm5lZWRsZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImhheXN0YWNrIiwiaW5kZXhPZiIsInBhcnRzIiwiY3Vyc29yIiwibmV4dElkeCIsImNodW5rS2V5IiwicHVzaCIsInNsaWNlIiwiY2hpbGRyZW4iLCJsZW5ndGgiLCJjb25jYXQiLCJTa2lsbHNEcm9wZG93biIsIl9yZWYiLCJza2lsbHMiLCJfcmVmJGxvYWRpbmciLCJsb2FkaW5nIiwiX3JlZiRlcnJvciIsImVycm9yIiwiX3JlZiRjYW5DcmVhdGUiLCJjYW5DcmVhdGUiLCJvblNlbGVjdCIsIm9uQ3JlYXRlIiwib25DbG9zZSIsImJvdHRvbSIsImxlZnQiLCJtYXhIZWlnaHQiLCJ6SW5kZXgiLCJhbmNob3JSZWYiLCJfdXNlVCIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJoaWdobGlnaHRlZEluZGV4Iiwic2V0SGlnaGxpZ2h0ZWRJbmRleCIsImRyb3Bkb3duUmVmIiwiaXRlbVJlZnMiLCJmaWx0ZXJlZCIsIm5vcm1hbGl6ZWQiLCJmaWx0ZXIiLCJzIiwibmFtZSIsImluY2x1ZGVzIiwiY3VycmVudCIsImhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSIsIm1vdXNlRXZlbnQiLCJfZHJvcGRvd25SZWYkY3VycmVudCIsIl9hbmNob3JSZWYkY3VycmVudCIsInRhcmdldCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNjcm9sbEhpZ2hsaWdodGVkSW50b1ZpZXciLCJpbmRleCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIl9pdGVtUmVmcyRjdXJyZW50JGluZCIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCJoYW5kbGVyIiwiZSIsImtleSIsInByZXZlbnREZWZhdWx0IiwibmV4dCIsInN0b3BQcm9wYWdhdGlvbiIsInJlbmRlckJvZHkiLCJtYXAiLCJpIiwidmFyaWFudCIsImhlaWdodCIsIndpZHRoIiwic2tpbGwiLCJyZWYiLCJlbCIsIiRpbmRleCIsIiRoaWdobGlnaHRlZCIsIm9uTW91c2VFbnRlciIsIm9uQ2xpY2siLCJ0eXBlIiwiZGVzY3JpcHRpb24iLCJpZCIsIiRib3R0b20iLCIkbGVmdCIsIiRtYXhIZWlnaHQiLCIkekluZGV4Iiwib25Nb3VzZURvd24iLCJfb2JqZWN0U3ByZWFkIiwidGl0bGUiLCJjb2xvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1NraWxsc0Ryb3Bkb3duL1NraWxsc0Ryb3Bkb3duLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEluZm9ybWF0aW9uQ2lyY2xlIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvSW5mb3JtYXRpb25DaXJjbGUnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgdHlwZSB7IFNraWxsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IFBsdXNJY29uIH0gZnJvbSAnLi4vaWNvbnMvUGx1c0ljb24nXG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4uL1NrZWxldG9uL1NrZWxldG9uJ1xuaW1wb3J0IHtcbiAgU0NTS0RBbmNob3IsXG4gIFNDU0tEQ3JlYXRlSGVhZGVyLFxuICBTQ1NLRENyZWF0ZUluZm9JY29uLFxuICBTQ1NLRENyZWF0ZVJvdyxcbiAgU0NTS0REaXZpZGVyLFxuICBTQ1NLRERyb3Bkb3duLFxuICBTQ1NLREl0ZW0sXG4gIFNDU0tESXRlbVN1YnRpdGxlLFxuICBTQ1NLREl0ZW1UaXRsZSxcbiAgU0NTS0RMaXN0LFxuICBTQ1NLRE1hdGNoSGlnaGxpZ2h0LFxuICBTQ1NLRFNrZWxldG9uTGlzdCxcbiAgU0NTS0RTdGF0ZU1lc3NhZ2UsXG59IGZyb20gJy4vU2tpbGxzRHJvcGRvd24uc3R5bGVzJ1xuXG50eXBlIFNraWxsc0Ryb3Bkb3duUHJvcHMgPSB7XG4gIHNraWxsczogU2tpbGxbXVxuICBxdWVyeTogc3RyaW5nXG4gIGxvYWRpbmc/OiBib29sZWFuXG4gIGVycm9yPzogYm9vbGVhblxuICBjYW5DcmVhdGU/OiBib29sZWFuXG4gIG9uU2VsZWN0OiAoc2tpbGw6IFNraWxsKSA9PiB2b2lkXG4gIG9uQ3JlYXRlPzogKCkgPT4gdm9pZFxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIGJvdHRvbTogbnVtYmVyXG4gIGxlZnQ6IG51bWJlclxuICBtYXhIZWlnaHQ/OiBudW1iZXJcbiAgekluZGV4PzogbnVtYmVyXG4gIC8qKiBOb2RvIGFuY2xhIChwLiBlai4gYm90w7NuIGRlIHNraWxscyk6IGNsaWNrcyBhaMOtIG5vIGNpZXJyYW4gZWwgbWVuw7ouICovXG4gIGFuY2hvclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG59XG5cbmNvbnN0IHJlbmRlcldpdGhIaWdobGlnaHQgPSAodGV4dDogc3RyaW5nLCBxdWVyeTogc3RyaW5nKTogUmVhY3ROb2RlID0+IHtcbiAgY29uc3QgbmVlZGxlID0gcXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgaWYgKCFuZWVkbGUpIHJldHVybiB0ZXh0XG4gIGNvbnN0IGhheXN0YWNrID0gdGV4dC50b0xvd2VyQ2FzZSgpXG4gIGlmIChoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgPT09IC0xKSByZXR1cm4gdGV4dFxuXG4gIGNvbnN0IHBhcnRzOiBSZWFjdE5vZGVbXSA9IFtdXG4gIGxldCBjdXJzb3IgPSAwXG4gIGxldCBuZXh0SWR4ID0gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUsIGN1cnNvcilcbiAgbGV0IGNodW5rS2V5ID0gMFxuICB3aGlsZSAobmV4dElkeCAhPT0gLTEpIHtcbiAgICBpZiAobmV4dElkeCA+IGN1cnNvcikgcGFydHMucHVzaCh0ZXh0LnNsaWNlKGN1cnNvciwgbmV4dElkeCkpXG4gICAgcGFydHMucHVzaChcbiAgICAgIDxTQ1NLRE1hdGNoSGlnaGxpZ2h0IGtleT17YG0tJHtjaHVua0tleX1gfT57dGV4dC5zbGljZShuZXh0SWR4LCBuZXh0SWR4ICsgbmVlZGxlLmxlbmd0aCl9PC9TQ1NLRE1hdGNoSGlnaGxpZ2h0PlxuICAgIClcbiAgICBjaHVua0tleSArPSAxXG4gICAgY3Vyc29yID0gbmV4dElkeCArIG5lZWRsZS5sZW5ndGhcbiAgICBuZXh0SWR4ID0gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUsIGN1cnNvcilcbiAgfVxuICBpZiAoY3Vyc29yIDwgdGV4dC5sZW5ndGgpIHBhcnRzLnB1c2godGV4dC5zbGljZShjdXJzb3IpKVxuICByZXR1cm4gcGFydHNcbn1cblxuZXhwb3J0IGNvbnN0IFNraWxsc0Ryb3Bkb3duID0gKHtcbiAgc2tpbGxzLFxuICBxdWVyeSxcbiAgbG9hZGluZyA9IGZhbHNlLFxuICBlcnJvciA9IGZhbHNlLFxuICBjYW5DcmVhdGUgPSBmYWxzZSxcbiAgb25TZWxlY3QsXG4gIG9uQ3JlYXRlLFxuICBvbkNsb3NlLFxuICBib3R0b20sXG4gIGxlZnQsXG4gIG1heEhlaWdodCxcbiAgekluZGV4LFxuICBhbmNob3JSZWYsXG59OiBTa2lsbHNEcm9wZG93blByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IFtoaWdobGlnaHRlZEluZGV4LCBzZXRIaWdobGlnaHRlZEluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IGRyb3Bkb3duUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBpdGVtUmVmcyA9IHVzZVJlZjwoSFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsKVtdPihbXSlcblxuICBjb25zdCBmaWx0ZXJlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBxdWVyeS50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIHNraWxsc1xuICAgIHJldHVybiBza2lsbHMuZmlsdGVyKHMgPT4gcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZCkpXG4gIH0sIFtza2lsbHMsIHF1ZXJ5XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEhpZ2hsaWdodGVkSW5kZXgoMClcbiAgfSwgW3F1ZXJ5XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGl0ZW1SZWZzLmN1cnJlbnQgPSBpdGVtUmVmcy5jdXJyZW50LnNsaWNlKDAsIGZpbHRlcmVkLmxlbmd0aClcbiAgfSwgW2ZpbHRlcmVkLmxlbmd0aF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUgPSAobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW91c2VFdmVudC50YXJnZXQgYXMgTm9kZSB8IG51bGxcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm5cbiAgICAgIGlmIChkcm9wZG93blJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGlmIChhbmNob3JSZWY/LmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVyblxuICAgICAgb25DbG9zZSgpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gIH0sIFtvbkNsb3NlLCBhbmNob3JSZWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsSGlnaGxpZ2h0ZWRJbnRvVmlldyA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpdGVtUmVmcy5jdXJyZW50W2luZGV4XT8uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY29uc3QgbmV4dCA9IGZpbHRlcmVkLmxlbmd0aCA/IChoaWdobGlnaHRlZEluZGV4ICsgMSkgJSBmaWx0ZXJlZC5sZW5ndGggOiAwXG4gICAgICAgIHNldEhpZ2hsaWdodGVkSW5kZXgobmV4dClcbiAgICAgICAgc2Nyb2xsSGlnaGxpZ2h0ZWRJbnRvVmlldyhuZXh0KVxuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBjb25zdCBuZXh0ID0gZmlsdGVyZWQubGVuZ3RoID8gKGhpZ2hsaWdodGVkSW5kZXggLSAxICsgZmlsdGVyZWQubGVuZ3RoKSAlIGZpbHRlcmVkLmxlbmd0aCA6IDBcbiAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleChuZXh0KVxuICAgICAgICBzY3JvbGxIaWdobGlnaHRlZEludG9WaWV3KG5leHQpXG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGlmIChmaWx0ZXJlZFtoaWdobGlnaHRlZEluZGV4XSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBvblNlbGVjdChmaWx0ZXJlZFtoaWdobGlnaHRlZEluZGV4XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG9uQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlciwgdHJ1ZSlcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZXIsIHRydWUpXG4gIH0sIFtmaWx0ZXJlZCwgaGlnaGxpZ2h0ZWRJbmRleCwgb25TZWxlY3QsIG9uQ2xvc2VdKVxuXG4gIGNvbnN0IHJlbmRlckJvZHkgPSAoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ1NLRFNrZWxldG9uTGlzdD5cbiAgICAgICAgICB7WzAsIDEsIDJdLm1hcChpID0+IChcbiAgICAgICAgICAgIDxTa2VsZXRvbiBrZXk9e2l9IHZhcmlhbnQ9XCJ0ZXh0XCIgaGVpZ2h0PXsyMH0gd2lkdGg9e2kgPT09IDAgPyAnNzAlJyA6ICc1NSUnfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NDU0tEU2tlbGV0b25MaXN0PlxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIDxTQ1NLRFN0YXRlTWVzc2FnZT57dCgnbXlTa2lsbHMuZHJvcGRvd25FcnJvcicpfTwvU0NTS0RTdGF0ZU1lc3NhZ2U+XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDxTQ1NLRFN0YXRlTWVzc2FnZT57dCgnbXlTa2lsbHMuZHJvcGRvd25FbXB0eScpfTwvU0NTS0RTdGF0ZU1lc3NhZ2U+XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ1NLRExpc3Q+XG4gICAgICAgIHtmaWx0ZXJlZC5tYXAoKHNraWxsLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxTQ1NLREl0ZW1cbiAgICAgICAgICAgIGtleT17c2tpbGwuaWR9XG4gICAgICAgICAgICByZWY9e2VsID0+IHtcbiAgICAgICAgICAgICAgaXRlbVJlZnMuY3VycmVudFtpbmRleF0gPSBlbFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICRpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAkaGlnaGxpZ2h0ZWQ9e2luZGV4ID09PSBoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRIaWdobGlnaHRlZEluZGV4KGluZGV4KX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0KHNraWxsKX1cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTQ1NLREl0ZW1UaXRsZT57cmVuZGVyV2l0aEhpZ2hsaWdodChgIyR7c2tpbGwubmFtZX1gLCBxdWVyeSl9PC9TQ1NLREl0ZW1UaXRsZT5cbiAgICAgICAgICAgIHtza2lsbC5kZXNjcmlwdGlvbiAmJiA8U0NTS0RJdGVtU3VidGl0bGU+e3NraWxsLmRlc2NyaXB0aW9ufTwvU0NTS0RJdGVtU3VidGl0bGU+fVxuICAgICAgICAgIDwvU0NTS0RJdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvU0NTS0RMaXN0PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDU0tEQW5jaG9yXG4gICAgICAkYm90dG9tPXtib3R0b219XG4gICAgICAkbGVmdD17bGVmdH1cbiAgICAgICRtYXhIZWlnaHQ9e21heEhlaWdodH1cbiAgICAgICR6SW5kZXg9e3pJbmRleH1cbiAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgPlxuICAgICAgPFNDU0tERHJvcGRvd24gcmVmPXtkcm9wZG93blJlZn0+XG4gICAgICAgIHtjYW5DcmVhdGUgJiYgb25DcmVhdGUgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8U0NTS0RDcmVhdGVIZWFkZXI+XG4gICAgICAgICAgICAgIDxTQ1NLRENyZWF0ZVJvdyB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25DcmVhdGV9PlxuICAgICAgICAgICAgICAgIDxQbHVzSWNvbiB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+XG4gICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRyb3Bkb3duQ3JlYXRlJyl9XG4gICAgICAgICAgICAgIDwvU0NTS0RDcmVhdGVSb3c+XG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdteVNraWxscy5pbmZvVG9vbHRpcCcpfSB7Li4uKHpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHpJbmRleCArIDEgfSA6IHt9KX0+XG4gICAgICAgICAgICAgICAgPFNDU0tEQ3JlYXRlSW5mb0ljb24gYXJpYS1sYWJlbD17dCgnbXlTa2lsbHMuaW5mb1Rvb2x0aXAnKX0+XG4gICAgICAgICAgICAgICAgICA8SW5mb3JtYXRpb25DaXJjbGUgY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgIDwvU0NTS0RDcmVhdGVJbmZvSWNvbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPC9TQ1NLRENyZWF0ZUhlYWRlcj5cbiAgICAgICAgICAgIDxTQ1NLRERpdmlkZXI+XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICA8L1NDU0tERGl2aWRlcj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge3JlbmRlckJvZHkoKX1cbiAgICAgIDwvU0NTS0REcm9wZG93bj5cbiAgICA8L1NDU0tEQW5jaG9yPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxTQUFvQkEsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUF3QixPQUFPO0FBQ3ZGLFNBQVNDLGlCQUFpQixRQUFRLG9EQUFvRDtBQUN0RixTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBRXRFLFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsUUFBUSxRQUFRLG1CQUFtQjtBQUM1QyxTQUFTQyxRQUFRLFFBQVEsc0JBQXNCO0FBQy9DLFNBQ0VDLFdBQVcsRUFDWEMsaUJBQWlCLEVBQ2pCQyxtQkFBbUIsRUFDbkJDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RDLFNBQVMsRUFDVEMsbUJBQW1CLEVBQ25CQyxpQkFBaUIsRUFDakJDLGlCQUFpQixRQUNaLHlCQUF5QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBbUJoQyxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJQyxJQUFZLEVBQUVDLEtBQWEsRUFBZ0I7RUFDdEUsSUFBTUMsTUFBTSxHQUFHRCxLQUFLLENBQUNFLElBQUksQ0FBQyxDQUFDLENBQUNDLFdB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
|