@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.
Files changed (213) hide show
  1. package/lib/components/atoms/ActionableButton.js +6 -1
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +4 -63
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +4 -16
  4. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +1 -12
  5. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -127
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  7. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +19 -2
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +20 -4
  10. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +18 -7
  11. package/lib/components/atoms/MAIAInput/MAIAInput.js +42 -243
  12. package/lib/components/atoms/MAIAInput/styles.js +44 -41
  13. package/lib/components/atoms/icons/SkillsNavIcon.js +7 -4
  14. package/lib/components/atoms/icons/index.js +1 -5
  15. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +11 -34
  16. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -5
  17. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +16 -5
  18. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +23 -2
  19. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +33 -5
  20. package/lib/components/molecules/ChatAIHome/styles.js +11 -2
  21. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +31 -20
  22. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +9 -4
  23. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +21 -61
  24. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  25. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +8 -1
  26. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +15 -9
  27. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +14 -3
  28. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
  29. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +17 -11
  30. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +14 -5
  31. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  32. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +12 -2
  33. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
  34. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +272 -334
  35. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +109 -132
  36. package/lib/components/molecules/ChatFooter/ChatFooter.js +63 -57
  37. package/lib/components/molecules/ChatFooter/styles.js +12 -6
  38. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  39. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +15 -5
  40. package/lib/components/molecules/Sidebar/Sidebar.js +7 -15
  41. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
  42. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +33 -0
  43. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +47 -0
  44. package/lib/components/molecules/UsageBlockedBanner/index.js +2 -0
  45. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +46 -30
  46. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +38 -26
  47. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +209 -430
  48. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +74 -131
  49. package/lib/components/organisms/ChatAI/ChatAI.js +6 -1
  50. package/lib/constants/config.js +4 -1
  51. package/lib/constants/permissions/utils.js +3 -3
  52. package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
  53. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
  54. package/lib/hooks/useChatManager/useChatManager.js +58 -38
  55. package/lib/hooks/useContextMentions.js +56 -96
  56. package/lib/hooks/useEntitySearch.js +278 -92
  57. package/lib/hooks/useEvent.js +2 -15
  58. package/lib/hooks/useMentionAllowedTypes.js +25 -9
  59. package/lib/hooks/useMentionPopover.js +33 -9
  60. package/lib/lang/br/index.js +12 -39
  61. package/lib/lang/en/index.js +12 -39
  62. package/lib/lang/es/index.js +13 -40
  63. package/lib/lang/fr/index.js +13 -40
  64. package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
  65. package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
  66. package/lib/services/maia/Orchestrator/orchestrator.js +7 -16
  67. package/lib/services/maia/Skills/createSkill.js +1 -1
  68. package/lib/services/maia/Skills/getSkills.js +40 -70
  69. package/lib/services/maia/Skills/updateSkill.js +1 -1
  70. package/lib/services/maia/Usage/getUsage.js +45 -0
  71. package/lib/services/maia/Usage/index.js +6 -0
  72. package/lib/services/maia/index.js +4 -2
  73. package/lib/services/utils/MaiaApiError.js +34 -0
  74. package/lib/services/utils/fetchCOR.js +106 -57
  75. package/lib/services/utils/index.js +2 -1
  76. package/lib/store/faqsStore.types.js +1 -1
  77. package/lib/store/index.js +2 -1
  78. package/lib/store/sessions/sessionStreamManager.js +61 -35
  79. package/lib/store/sessions/sessions.types.js +1 -1
  80. package/lib/store/useChatsStore.js +3 -3
  81. package/lib/store/useUsageStore.js +108 -0
  82. package/lib/types/Chat.js +1 -1
  83. package/lib/types/FrequentlyAskedQuestion.js +1 -1
  84. package/lib/types/agentModal.js +1 -1
  85. package/lib/types/skill.js +1 -1
  86. package/lib/types/usage.js +9 -0
  87. package/lib/utils/contextMentionTriggers.js +5 -2
  88. package/lib/utils/normalizeAgentConnectors.js +16 -44
  89. package/lib/utils/renderContextMentions.js +18 -39
  90. package/package.json +6 -9
  91. package/CHANGELOG.md +0 -727
  92. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
  93. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  94. package/lib/components/atoms/Chip/Chip.spec.js +0 -32
  95. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  96. package/lib/components/atoms/Fade/Fade.spec.js +0 -31
  97. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  98. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -283
  99. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -68
  100. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
  101. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  102. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
  103. package/lib/components/atoms/SkillsDropdown/index.js +0 -2
  104. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
  105. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  106. package/lib/components/atoms/icons/PlusIcon.js +0 -29
  107. package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
  108. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
  109. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
  110. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -77
  111. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  112. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -291
  113. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  114. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  115. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -105
  116. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  117. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  118. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -192
  119. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -335
  120. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -315
  121. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  122. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  123. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  124. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  125. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -95
  126. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -96
  127. package/lib/hooks/useCaretPosition.spec.js +0 -58
  128. package/lib/hooks/useDebounce.spec.js +0 -42
  129. package/lib/hooks/useEvent.spec.js +0 -40
  130. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  131. package/lib/hooks/useModal/useModal.spec.js +0 -73
  132. package/lib/hooks/useResize.spec.js +0 -37
  133. package/lib/hooks/useSkillsCatalog.js +0 -66
  134. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  135. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  136. package/lib/hooks/useT.spec.js +0 -20
  137. package/lib/hooks/useToggle.spec.js +0 -33
  138. package/lib/services/maia/Access/updateAccess.spec.js +0 -108
  139. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -69
  140. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -74
  141. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  142. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -42
  143. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  144. package/lib/services/maia/Agents/getAgentById.spec.js +0 -55
  145. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -82
  146. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  147. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -47
  148. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  149. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  150. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  151. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  152. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  153. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  154. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  155. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  156. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  157. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  158. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  159. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -72
  160. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  161. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -83
  162. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  163. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  164. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  165. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  166. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  167. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  168. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  169. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  170. package/lib/services/maia/client.spec.js +0 -56
  171. package/lib/services/utils/fetchCOR.spec.js +0 -211
  172. package/lib/services/utils/getCookie.spec.js +0 -20
  173. package/lib/store/chatsSidebarOptimistic.spec.js +0 -120
  174. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  175. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  176. package/lib/store/sessions/sessions.types.spec.js +0 -16
  177. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  178. package/lib/store/useChatsStore.spec.js +0 -619
  179. package/lib/store/useFaqsStore.spec.js +0 -57
  180. package/lib/test/buttonMock.js +0 -22
  181. package/lib/test/fetchPolyfill.js +0 -160
  182. package/lib/test/fileMock.js +0 -2
  183. package/lib/test/global-context.js +0 -49
  184. package/lib/test/iconMock.js +0 -19
  185. package/lib/test/mockFetch.js +0 -49
  186. package/lib/test/portalRoot.js +0 -13
  187. package/lib/test/styleMock.js +0 -2
  188. package/lib/test/test-utils.js +0 -26
  189. package/lib/test/tooltipMock.js +0 -11
  190. package/lib/utils/agentDisplayName.spec.js +0 -44
  191. package/lib/utils/autoApproveStorage.spec.js +0 -25
  192. package/lib/utils/chatInputFiles.spec.js +0 -39
  193. package/lib/utils/contextMentionLabel.spec.js +0 -13
  194. package/lib/utils/contextMentionTriggers.spec.js +0 -38
  195. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  196. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  197. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  198. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  199. package/lib/utils/formatUnreadCount.spec.js +0 -12
  200. package/lib/utils/getUnitFileSize.spec.js +0 -18
  201. package/lib/utils/hitlAnalytics.spec.js +0 -100
  202. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
  203. package/lib/utils/mapBackendLang.spec.js +0 -19
  204. package/lib/utils/normalizeAgentConnectors.spec.js +0 -89
  205. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  206. package/lib/utils/reasoningMappers.spec.js +0 -103
  207. package/lib/utils/retryCompletion.spec.js +0 -99
  208. package/lib/utils/skillContentSize.spec.js +0 -13
  209. package/lib/utils/slashCommandMarker.spec.js +0 -43
  210. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  211. package/lib/utils/sseStreamContent.spec.js +0 -31
  212. package/lib/utils/streamActivityMessages.spec.js +0 -98
  213. 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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