@projectcor/maia-components 2.42.0 → 2.42.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +847 -0
  2. package/lib/App.js +44 -19
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  4. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  5. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  6. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  7. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  8. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  10. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  11. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +303 -0
  12. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  13. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  14. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +10 -14
  15. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +1 -1
  16. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  17. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +57 -37
  18. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +58 -0
  19. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +18 -12
  20. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +68 -0
  21. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  22. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  23. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  24. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  25. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  26. package/lib/components/index.js +2 -1
  27. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +77 -0
  28. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  29. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  30. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  31. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  32. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  33. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  34. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  35. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  36. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  37. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +21 -6
  38. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
  39. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  40. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +9 -3
  41. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +291 -0
  42. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  43. package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
  44. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +8 -1
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +148 -0
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +25 -8
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +65 -61
  50. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  51. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  52. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -3
  53. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +112 -0
  54. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  55. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  56. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  57. package/lib/components/molecules/Sidebar/Sidebar.spec.js +234 -0
  58. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
  59. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +335 -0
  60. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
  61. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  62. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  63. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
  64. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  65. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  66. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  67. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  68. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +267 -0
  69. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +261 -0
  70. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +194 -0
  71. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +105 -0
  72. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +73 -0
  73. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  74. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  75. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  76. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  77. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  78. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  79. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  80. package/lib/constants/permissions/index.js +2 -2
  81. package/lib/constants/permissions/utils.js +4 -1
  82. package/lib/constants/permissions/utils.spec.js +34 -0
  83. package/lib/dev/DevMaiaPage.js +30 -0
  84. package/lib/dev/DevReasoningTimeline.js +11 -17
  85. package/lib/dev/Providers.js +5 -3
  86. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  87. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  88. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +95 -0
  89. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +96 -0
  90. package/lib/hooks/useCaretPosition.spec.js +58 -0
  91. package/lib/hooks/useChatManager/useChatManager.js +7 -7
  92. package/lib/hooks/useChatMessages/useChatMessages.spec.js +279 -0
  93. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  94. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  95. package/lib/hooks/useDebounce.spec.js +42 -0
  96. package/lib/hooks/useEvent.spec.js +40 -0
  97. package/lib/hooks/useFrequentlyUsedActions.js +63 -20
  98. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  99. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  100. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  101. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  102. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  103. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  104. package/lib/hooks/useModal/useModal.spec.js +73 -0
  105. package/lib/hooks/useResize.spec.js +37 -0
  106. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  107. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  108. package/lib/hooks/useT.spec.js +20 -0
  109. package/lib/hooks/useToggle.spec.js +33 -0
  110. package/lib/index.js +5 -2
  111. package/lib/lang/br/index.js +26 -1
  112. package/lib/lang/en/index.js +26 -1
  113. package/lib/lang/es/index.js +26 -1
  114. package/lib/lang/fr/index.js +26 -1
  115. package/lib/services/maia/Access/updateAccess.spec.js +108 -0
  116. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  117. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  118. package/lib/services/maia/Actions/getSlashCommands.spec.js +74 -0
  119. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  120. package/lib/services/maia/Agents/deleteAgent.spec.js +42 -0
  121. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  122. package/lib/services/maia/Agents/getAgentById.spec.js +55 -0
  123. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +82 -0
  124. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  125. package/lib/services/maia/Agents/toggleFavorite.spec.js +47 -0
  126. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  127. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  128. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  129. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  130. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  131. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  132. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  133. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  134. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  135. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  136. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  137. package/lib/services/maia/Orchestrator/orchestrator.spec.js +72 -0
  138. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  139. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +83 -0
  140. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  141. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  142. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  143. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  144. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  145. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  146. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  147. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  148. package/lib/services/maia/client.spec.js +56 -0
  149. package/lib/services/utils/fetchCOR.spec.js +211 -0
  150. package/lib/services/utils/getCookie.spec.js +20 -0
  151. package/lib/store/chatsSidebarOptimistic.spec.js +120 -0
  152. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  153. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  154. package/lib/store/sessions/sessionStreamManager.js +40 -52
  155. package/lib/store/sessions/sessions.types.spec.js +16 -0
  156. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  157. package/lib/store/useChatsStore.spec.js +619 -0
  158. package/lib/store/useFaqsStore.spec.js +57 -0
  159. package/lib/styles/cascade.js +29 -3
  160. package/lib/styles/transitions.js +3 -1
  161. package/lib/types/global.d.js +1 -1
  162. package/lib/utils/agentDisplayName.spec.js +44 -0
  163. package/lib/utils/autoApproveStorage.spec.js +25 -0
  164. package/lib/utils/chatInputFiles.spec.js +39 -0
  165. package/lib/utils/contextMentionLabel.spec.js +13 -0
  166. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  167. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  168. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  169. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  170. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  171. package/lib/utils/formatUnreadCount.spec.js +12 -0
  172. package/lib/utils/getUnitFileSize.spec.js +18 -0
  173. package/lib/utils/hitlAnalytics.spec.js +100 -0
  174. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  175. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  176. package/lib/utils/maiaPageRoute.js +24 -0
  177. package/lib/utils/maiaPageRoute.spec.js +23 -0
  178. package/lib/utils/mapBackendLang.spec.js +19 -0
  179. package/lib/utils/navigateContextEntity.spec.js +50 -0
  180. package/lib/utils/normalizeAgentConnectors.spec.js +89 -0
  181. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  182. package/lib/utils/reasoningMappers.spec.js +103 -0
  183. package/lib/utils/retryCompletion.spec.js +99 -0
  184. package/lib/utils/skillContentSize.spec.js +13 -0
  185. package/lib/utils/slashCommandMarker.spec.js +43 -0
  186. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  187. package/lib/utils/sseStreamContent.spec.js +31 -0
  188. package/lib/utils/streamActivityMessages.js +32 -19
  189. package/lib/utils/streamActivityMessages.spec.js +131 -0
  190. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  191. package/package.json +1 -1
  192. package/README.md +0 -2
@@ -0,0 +1,58 @@
1
+ import { act, cleanup, renderWithProviders, screen } from '../../../test/test-utils';
2
+ import { reasoningStore } from '../../../hooks/useReasoningTrace/reasoningStore';
3
+ import { ReasoningTimeline } from './ReasoningTimeline';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ jest.mock('../MaiaStreamdown/MaiaStreamdown', function () {
6
+ return {
7
+ MaiaStreamdown: function MaiaStreamdown(_ref) {
8
+ var children = _ref.children;
9
+ return /*#__PURE__*/_jsx("div", {
10
+ children: children
11
+ });
12
+ }
13
+ };
14
+ });
15
+ var writing = {
16
+ phase: 'writing',
17
+ message: 'Escribiendo'
18
+ };
19
+ describe('ReasoningTimeline', function () {
20
+ afterEach(function () {
21
+ cleanup();
22
+ act(function () {
23
+ reasoningStore.clear();
24
+ });
25
+ });
26
+ it('keeps the leading narration out of the timeline before any action', function () {
27
+ reasoningStore.start('m1');
28
+ reasoningStore.captureLeadingFromBody('m1', 'Voy a revisar');
29
+ var _renderWithProviders = renderWithProviders(/*#__PURE__*/_jsx(ReasoningTimeline, {
30
+ messageId: "m1",
31
+ streamActivity: writing,
32
+ streamingText: "Voy a revisar"
33
+ })),
34
+ container = _renderWithProviders.container;
35
+ expect(container).toBeEmptyDOMElement();
36
+ expect(screen.queryByText('Voy a revisar')).not.toBeInTheDocument();
37
+ });
38
+ it('shows action chrome once a tool arrives', function () {
39
+ reasoningStore.start('m1');
40
+ reasoningStore.captureLeadingFromBody('m1', 'Voy a revisar');
41
+ reasoningStore.applyStep('m1', {
42
+ i: 1,
43
+ type: 'tool',
44
+ tool: 'edit_task',
45
+ status: 'running'
46
+ });
47
+ var _renderWithProviders2 = renderWithProviders(/*#__PURE__*/_jsx(ReasoningTimeline, {
48
+ messageId: "m1",
49
+ streamActivity: writing,
50
+ streamingText: ""
51
+ })),
52
+ container = _renderWithProviders2.container;
53
+ expect(screen.getByText('Voy a revisar')).toBeInTheDocument();
54
+ expect(screen.getByText('chat.activity.actions.editTask.past')).toBeInTheDocument();
55
+ expect(container.querySelector('.ReasoningBlock-marker')).toBeInTheDocument();
56
+ });
57
+ });
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhY3QiLCJjbGVhbnVwIiwicmVuZGVyV2l0aFByb3ZpZGVycyIsInNjcmVlbiIsInJlYXNvbmluZ1N0b3JlIiwiUmVhc29uaW5nVGltZWxpbmUiLCJqc3giLCJfanN4IiwiamVzdCIsIm1vY2siLCJNYWlhU3RyZWFtZG93biIsIl9yZWYiLCJjaGlsZHJlbiIsIndyaXRpbmciLCJwaGFzZSIsIm1lc3NhZ2UiLCJkZXNjcmliZSIsImFmdGVyRWFjaCIsImNsZWFyIiwiaXQiLCJzdGFydCIsImNhcHR1cmVMZWFkaW5nRnJvbUJvZHkiLCJfcmVuZGVyV2l0aFByb3ZpZGVycyIsIm1lc3NhZ2VJZCIsInN0cmVhbUFjdGl2aXR5Iiwic3RyZWFtaW5nVGV4dCIsImNvbnRhaW5lciIsImV4cGVjdCIsInRvQmVFbXB0eURPTUVsZW1lbnQiLCJxdWVyeUJ5VGV4dCIsIm5vdCIsInRvQmVJblRoZURvY3VtZW50IiwiYXBwbHlTdGVwIiwiaSIsInR5cGUiLCJ0b29sIiwic3RhdHVzIiwiX3JlbmRlcldpdGhQcm92aWRlcnMyIiwiZ2V0QnlUZXh0IiwicXVlcnlTZWxlY3RvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ1RpbWVsaW5lLnNwZWMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjdCwgY2xlYW51cCwgcmVuZGVyV2l0aFByb3ZpZGVycywgc2NyZWVuIH0gZnJvbSAnLi4vLi4vLi4vdGVzdC90ZXN0LXV0aWxzJ1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZS9yZWFzb25pbmdTdG9yZSdcbmltcG9ydCB7IFJlYXNvbmluZ1RpbWVsaW5lIH0gZnJvbSAnLi9SZWFzb25pbmdUaW1lbGluZSdcblxuamVzdC5tb2NrKCcuLi9NYWlhU3RyZWFtZG93bi9NYWlhU3RyZWFtZG93bicsICgpID0+ICh7XG4gIE1haWFTdHJlYW1kb3duOiAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuPzogc3RyaW5nIH0pID0+IDxkaXY+e2NoaWxkcmVufTwvZGl2Pixcbn0pKVxuXG5jb25zdCB3cml0aW5nID0geyBwaGFzZTogJ3dyaXRpbmcnIGFzIGNvbnN0LCBtZXNzYWdlOiAnRXNjcmliaWVuZG8nIH1cblxuZGVzY3JpYmUoJ1JlYXNvbmluZ1RpbWVsaW5lJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGNsZWFudXAoKVxuICAgIGFjdCgoKSA9PiB7XG4gICAgICByZWFzb25pbmdTdG9yZS5jbGVhcigpXG4gICAgfSlcbiAgfSlcblxuICBpdCgna2VlcHMgdGhlIGxlYWRpbmcgbmFycmF0aW9uIG91dCBvZiB0aGUgdGltZWxpbmUgYmVmb3JlIGFueSBhY3Rpb24nLCAoKSA9PiB7XG4gICAgcmVhc29uaW5nU3RvcmUuc3RhcnQoJ20xJylcbiAgICByZWFzb25pbmdTdG9yZS5jYXB0dXJlTGVhZGluZ0Zyb21Cb2R5KCdtMScsICdWb3kgYSByZXZpc2FyJylcblxuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPFJlYXNvbmluZ1RpbWVsaW5lIG1lc3NhZ2VJZD1cIm0xXCIgc3RyZWFtQWN0aXZpdHk9e3dyaXRpbmd9IHN0cmVhbWluZ1RleHQ9XCJWb3kgYSByZXZpc2FyXCIgLz5cbiAgICApXG5cbiAgICBleHBlY3QoY29udGFpbmVyKS50b0JlRW1wdHlET01FbGVtZW50KClcbiAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlUZXh0KCdWb3kgYSByZXZpc2FyJykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpXG4gIH0pXG5cbiAgaXQoJ3Nob3dzIGFjdGlvbiBjaHJvbWUgb25jZSBhIHRvb2wgYXJyaXZlcycsICgpID0+IHtcbiAgICByZWFzb25pbmdTdG9yZS5zdGFydCgnbTEnKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNhcHR1cmVMZWFkaW5nRnJvbUJvZHkoJ20xJywgJ1ZveSBhIHJldmlzYXInKVxuICAgIHJlYXNvbmluZ1N0b3JlLmFwcGx5U3RlcCgnbTEnLCB7IGk6IDEsIHR5cGU6ICd0b29sJywgdG9vbDogJ2VkaXRfdGFzaycsIHN0YXR1czogJ3J1bm5pbmcnIH0pXG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9XCJtMVwiIHN0cmVhbUFjdGl2aXR5PXt3cml0aW5nfSBzdHJlYW1pbmdUZXh0PVwiXCIgLz5cbiAgICApXG5cbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVm95IGEgcmV2aXNhcicpKS50b0JlSW5UaGVEb2N1bWVudCgpXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ2NoYXQuYWN0aXZpdHkuYWN0aW9ucy5lZGl0VGFzay5wYXN0JykpLnRvQmVJblRoZURvY3VtZW50KClcbiAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5SZWFzb25pbmdCbG9jay1tYXJrZXInKSkudG9CZUluVGhlRG9jdW1lbnQoKVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsR0FBRyxFQUFFQyxPQUFPLEVBQUVDLG1CQUFtQixFQUFFQyxNQUFNLFFBQVEsMEJBQTBCO0FBQ3BGLFNBQVNDLGNBQWMsUUFBUSxpREFBaUQ7QUFDaEYsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBRXZEQyxJQUFJLENBQUNDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtFQUFBLE9BQU87SUFDbkRDLGNBQWMsRUFBRSxTQUFoQkEsY0FBY0EsQ0FBQUMsSUFBQTtNQUFBLElBQUtDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO01BQUEsb0JBQThCTCxJQUFBO1FBQUFLLFFBQUEsRUFBTUE7TUFBUSxDQUFNLENBQUM7SUFBQTtFQUNoRixDQUFDO0FBQUEsQ0FBQyxDQUFDO0FBRUgsSUFBTUMsT0FBTyxHQUFHO0VBQUVDLEtBQUssRUFBRSxTQUFrQjtFQUFFQyxPQUFPLEVBQUU7QUFBYyxDQUFDO0FBRXJFQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsWUFBTTtFQUNsQ0MsU0FBUyxDQUFDLFlBQU07SUFDZGhCLE9BQU8sQ0FBQyxDQUFDO0lBQ1RELEdBQUcsQ0FBQyxZQUFNO01BQ1JJLGNBQWMsQ0FBQ2MsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUZDLEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxZQUFNO0lBQzVFZixjQUFjLENBQUNnQixLQUFLLENBQUMsSUFBSSxDQUFDO0lBQzFCaEIsY0FBYyxDQUFDaUIsc0JBQXNCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQztJQUU1RCxJQUFBQyxvQkFBQSxHQUFzQnBCLG1CQUFtQixjQUN2Q0ssSUFBQSxDQUFDRixpQkFBaUI7UUFBQ2tCLFNBQVMsRUFBQyxJQUFJO1FBQUNDLGNBQWMsRUFBRVgsT0FBUTtRQUFDWSxhQUFhLEVBQUM7TUFBZSxDQUFFLENBQzVGLENBQUM7TUFGT0MsU0FBUyxHQUFBSixvQkFBQSxDQUFUSSxTQUFTO0lBSWpCQyxNQUFNLENBQUNELFNBQVMsQ0FBQyxDQUFDRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZDRCxNQUFNLENBQUN4QixNQUFNLENBQUMwQixXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsR0FBRyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO0VBQ3JFLENBQUMsQ0FBQztFQUVGWixFQUFFLENBQUMseUNBQXlDLEVBQUUsWUFBTTtJQUNsRGYsY0FBYyxDQUFDZ0IsS0FBSyxDQUFDLElBQUksQ0FBQztJQUMxQmhCLGNBQWMsQ0FBQ2lCLHNCQUFzQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUM7SUFDNURqQixjQUFjLENBQUM0QixTQUFTLENBQUMsSUFBSSxFQUFFO01BQUVDLENBQUMsRUFBRSxDQUFDO01BQUVDLElBQUksRUFBRSxNQUFNO01BQUVDLElBQUksRUFBRSxXQUFXO01BQUVDLE1BQU0sRUFBRTtJQUFVLENBQUMsQ0FBQztJQUU1RixJQUFBQyxxQkFBQSxHQUFzQm5DLG1CQUFtQixjQUN2Q0ssSUFBQSxDQUFDRixpQkFBaUI7UUFBQ2tCLFNBQVMsRUFBQyxJQUFJO1FBQUNDLGNBQWMsRUFBRVgsT0FBUTtRQUFDWSxhQUFhLEVBQUM7TUFBRSxDQUFFLENBQy9FLENBQUM7TUFGT0MsU0FBUyxHQUFBVyxxQkFBQSxDQUFUWCxTQUFTO0lBSWpCQyxNQUFNLENBQUN4QixNQUFNLENBQUNtQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQ1AsaUJBQWlCLENBQUMsQ0FBQztJQUM3REosTUFBTSxDQUFDeEIsTUFBTSxDQUFDbUMsU0FBUyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQ1AsaUJBQWlCLENBQUMsQ0FBQztJQUNuRkosTUFBTSxDQUFDRCxTQUFTLENBQUNhLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUNSLGlCQUFpQixDQUFDLENBQUM7RUFDL0UsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,5 +1,5 @@
1
1
  import { reasoningStore } from '../../../hooks/useReasoningTrace/reasoningStore';
2
- import { findLeadingNarration, hasActionStep, looksLikeIntermediateNarrationStream, narrationTextsMatch } from './reasoningLeading';
2
+ import { findLeadingNarration, hasActionStep, narrationTextsMatch } from './reasoningLeading';
3
3
  import { isVisibleStep } from './ReasoningSteps';
4
4
  export var PENDING_NARRATION_KEY = 'pending-narration';
5
5
  export { narrationTextsMatch } from './reasoningLeading';
@@ -11,21 +11,27 @@ export var isSeamlessNarrationCommit = function isSeamlessNarrationCommit(step,
11
11
  return step.type === 'narration' && narrationTextsMatch(step.text, streamedText);
12
12
  };
13
13
 
14
+ /** Narración inicial sin tools: vive en el cuerpo, no en la traza. */
15
+ export var shouldHideOrphanLeadingNarration = function shouldHideOrphanLeadingNarration(steps) {
16
+ return !hasActionStep(steps);
17
+ };
18
+
14
19
  /**
15
20
  * Narración de turno: tokens sin step van anclados al inicio. Una narración
16
21
  * commiteada (pre answer_reset) se pinta en su fila, no se recuelga al último tool.
17
22
  */
18
- export var shouldStreamNarrationInTimeline = function shouldStreamNarrationInTimeline(steps, streamActivity, streamingText, messageId) {
19
- var showThinking = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
23
+ export var shouldStreamNarrationInTimeline = function shouldStreamNarrationInTimeline(steps, streamActivity, streamingText) {
24
+ var context = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
25
+ var messageId = context.messageId,
26
+ _context$showThinking = context.showThinking,
27
+ showThinking = _context$showThinking === void 0 ? false : _context$showThinking;
20
28
  if ((streamActivity === null || streamActivity === void 0 ? void 0 : streamActivity.phase) !== 'writing') return false;
21
29
  if (!streamingText.trim()) return false;
22
30
  var visible = visibleReasoningSteps(steps, showThinking);
23
31
  var leading = findLeadingNarration(steps);
24
32
 
25
- // Tokens antes de cualquier acción: la narración es el primer paso.
26
- if (leading && !hasActionStep(visible) && looksLikeIntermediateNarrationStream(streamingText)) {
27
- return true;
28
- }
33
+ // Antes de cualquier acción el texto va al cuerpo, no a la traza.
34
+ if (leading && !hasActionStep(visible)) return false;
29
35
 
30
36
  // Leading ya anclada: el body todavía es esa misma narración (sin respuesta final).
31
37
  if (leading && narrationTextsMatch(leading.text, streamingText)) {
@@ -43,19 +49,19 @@ export var shouldStreamNarrationInTimeline = function shouldStreamNarrationInTim
43
49
  };
44
50
 
45
51
  /** Texto de la fila live al final de la traza; null si ya está anclada o va al cuerpo. */
46
- export var resolvePendingNarrationText = function resolvePendingNarrationText(steps, streamActivity, streamingText, messageId) {
47
- var showThinking = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
48
- if (!shouldStreamNarrationInTimeline(steps, streamActivity, streamingText, messageId, showThinking)) return null;
52
+ export var resolvePendingNarrationText = function resolvePendingNarrationText(steps, streamActivity, streamingText) {
53
+ var context = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
54
+ if (!shouldStreamNarrationInTimeline(steps, streamActivity, streamingText, context)) return null;
49
55
  var leading = findLeadingNarration(steps);
50
56
  // Ya está anclada al inicio: no recuelgues el mismo texto detrás de cada tool.
51
57
  if (leading && narrationTextsMatch(leading.text, streamingText)) {
52
58
  return null;
53
59
  }
54
- var last = visibleReasoningSteps(steps, showThinking).at(-1);
60
+ var last = visibleReasoningSteps(steps, context.showThinking).at(-1);
55
61
  if ((last === null || last === void 0 ? void 0 : last.type) === 'narration' && narrationTextsMatch(last.text, streamingText)) {
56
62
  return streamingText;
57
63
  }
58
64
  if (!last || last.type === 'thinking') return streamingText;
59
65
  return null;
60
66
  };
61
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFzb25pbmdTdG9yZSIsImZpbmRMZWFkaW5nTmFycmF0aW9uIiwiaGFzQWN0aW9uU3RlcCIsImxvb2tzTGlrZUludGVybWVkaWF0ZU5hcnJhdGlvblN0cmVhbSIsIm5hcnJhdGlvblRleHRzTWF0Y2giLCJpc1Zpc2libGVTdGVwIiwiUEVORElOR19OQVJSQVRJT05fS0VZIiwidmlzaWJsZVJlYXNvbmluZ1N0ZXBzIiwic3RlcHMiLCJzaG93VGhpbmtpbmciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0Iiwic3RlcCIsInN0cmVhbWVkVGV4dCIsInR5cGUiLCJ0ZXh0Iiwic2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0cmVhbUFjdGl2aXR5Iiwic3RyZWFtaW5nVGV4dCIsIm1lc3NhZ2VJZCIsInBoYXNlIiwidHJpbSIsInZpc2libGUiLCJsZWFkaW5nIiwibGFzdCIsImlzTmFycmF0aW9uSGFuZG9mZlBlbmRpbmciLCJyZXNvbHZlUGVuZGluZ05hcnJhdGlvblRleHQiLCJhdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL3JlYXNvbmluZ0xpdmVOYXJyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZS9yZWFzb25pbmdTdG9yZSdcbmltcG9ydCB7XG4gIGZpbmRMZWFkaW5nTmFycmF0aW9uLFxuICBoYXNBY3Rpb25TdGVwLFxuICBsb29rc0xpa2VJbnRlcm1lZGlhdGVOYXJyYXRpb25TdHJlYW0sXG4gIG5hcnJhdGlvblRleHRzTWF0Y2gsXG59IGZyb20gJy4vcmVhc29uaW5nTGVhZGluZydcbmltcG9ydCB7IGlzVmlzaWJsZVN0ZXAgfSBmcm9tICcuL1JlYXNvbmluZ1N0ZXBzJ1xuXG5leHBvcnQgY29uc3QgUEVORElOR19OQVJSQVRJT05fS0VZID0gJ3BlbmRpbmctbmFycmF0aW9uJ1xuXG5leHBvcnQgeyBuYXJyYXRpb25UZXh0c01hdGNoIH0gZnJvbSAnLi9yZWFzb25pbmdMZWFkaW5nJ1xuXG5leHBvcnQgY29uc3QgdmlzaWJsZVJlYXNvbmluZ1N0ZXBzID0gKHN0ZXBzOiBSZWFzb25pbmdTdGVwW10sIHNob3dUaGlua2luZyA9IGZhbHNlKTogUmVhc29uaW5nU3RlcFtdID0+XG4gIHNob3dUaGlua2luZyA/IHN0ZXBzIDogc3RlcHMuZmlsdGVyKGlzVmlzaWJsZVN0ZXApXG5cbmV4cG9ydCBjb25zdCBpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0ID0gKHN0ZXA6IFJlYXNvbmluZ1N0ZXAsIHN0cmVhbWVkVGV4dDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT5cbiAgc3RlcC50eXBlID09PSAnbmFycmF0aW9uJyAmJiBuYXJyYXRpb25UZXh0c01hdGNoKHN0ZXAudGV4dCwgc3RyZWFtZWRUZXh0KVxuXG4vKipcbiAqIE5hcnJhY2nDs24gZGUgdHVybm86IHRva2VucyBzaW4gc3RlcCB2YW4gYW5jbGFkb3MgYWwgaW5pY2lvLiBVbmEgbmFycmFjacOzblxuICogY29tbWl0ZWFkYSAocHJlIGFuc3dlcl9yZXNldCkgc2UgcGludGEgZW4gc3UgZmlsYSwgbm8gc2UgcmVjdWVsZ2EgYWwgw7psdGltbyB0b29sLlxuICovXG5leHBvcnQgY29uc3Qgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSA9IChcbiAgc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSxcbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3RyZWFtaW5nVGV4dDogc3RyaW5nLFxuICBtZXNzYWdlSWQ/OiBzdHJpbmcgfCBudWxsLFxuICBzaG93VGhpbmtpbmcgPSBmYWxzZVxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChzdHJlYW1BY3Rpdml0eT8ucGhhc2UgIT09ICd3cml0aW5nJykgcmV0dXJuIGZhbHNlXG4gIGlmICghc3RyZWFtaW5nVGV4dC50cmltKCkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHZpc2libGUgPSB2aXNpYmxlUmVhc29uaW5nU3RlcHMoc3RlcHMsIHNob3dUaGlua2luZylcbiAgY29uc3QgbGVhZGluZyA9IGZpbmRMZWFkaW5nTmFycmF0aW9uKHN0ZXBzKVxuXG4gIC8vIFRva2VucyBhbnRlcyBkZSBjdWFscXVpZXIgYWNjacOzbjogbGEgbmFycmFjacOzbiBlcyBlbCBwcmltZXIgcGFzby5cbiAgaWYgKGxlYWRpbmcgJiYgIWhhc0FjdGlvblN0ZXAodmlzaWJsZSkgJiYgbG9va3NMaWtlSW50ZXJtZWRpYXRlTmFycmF0aW9uU3RyZWFtKHN0cmVhbWluZ1RleHQpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIExlYWRpbmcgeWEgYW5jbGFkYTogZWwgYm9keSB0b2RhdsOtYSBlcyBlc2EgbWlzbWEgbmFycmFjacOzbiAoc2luIHJlc3B1ZXN0YSBmaW5hbCkuXG4gIGlmIChsZWFkaW5nICYmIG5hcnJhdGlvblRleHRzTWF0Y2gobGVhZGluZy50ZXh0LCBzdHJlYW1pbmdUZXh0KSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdCBsYXN0ID0gdmlzaWJsZVt2aXNpYmxlLmxlbmd0aCAtIDFdXG4gIGlmICghbGFzdCB8fCBsYXN0LnR5cGUgPT09ICd0aGlua2luZycpIHJldHVybiBmYWxzZVxuXG4gIGlmIChsYXN0LnR5cGUgPT09ICduYXJyYXRpb24nKSB7XG4gICAgaWYgKG1lc3NhZ2VJZCAmJiAhcmVhc29uaW5nU3RvcmUuaXNOYXJyYXRpb25IYW5kb2ZmUGVuZGluZyhtZXNzYWdlSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG5hcnJhdGlvblRleHRzTWF0Y2gobGFzdC50ZXh0LCBzdHJlYW1pbmdUZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKiBUZXh0byBkZSBsYSBmaWxhIGxpdmUgYWwgZmluYWwgZGUgbGEgdHJhemE7IG51bGwgc2kgeWEgZXN0w6EgYW5jbGFkYSBvIHZhIGFsIGN1ZXJwby4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlUGVuZGluZ05hcnJhdGlvblRleHQgPSAoXG4gIHN0ZXBzOiBSZWFzb25pbmdTdGVwW10sXG4gIHN0cmVhbUFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHN0cmVhbWluZ1RleHQ6IHN0cmluZyxcbiAgbWVzc2FnZUlkPzogc3RyaW5nIHwgbnVsbCxcbiAgc2hvd1RoaW5raW5nID0gZmFsc2Vcbik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoIXNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUoc3RlcHMsIHN0cmVhbUFjdGl2aXR5LCBzdHJlYW1pbmdUZXh0LCBtZXNzYWdlSWQsIHNob3dUaGlua2luZykpIHJldHVybiBudWxsXG5cbiAgY29uc3QgbGVhZGluZyA9IGZpbmRMZWFkaW5nTmFycmF0aW9uKHN0ZXBzKVxuICAvLyBZYSBlc3TDoSBhbmNsYWRhIGFsIGluaWNpbzogbm8gcmVjdWVsZ3VlcyBlbCBtaXNtbyB0ZXh0byBkZXRyw6FzIGRlIGNhZGEgdG9vbC5cbiAgaWYgKGxlYWRpbmcgJiYgbmFycmF0aW9uVGV4dHNNYXRjaChsZWFkaW5nLnRleHQsIHN0cmVhbWluZ1RleHQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGxhc3QgPSB2aXNpYmxlUmVhc29uaW5nU3RlcHMoc3RlcHMsIHNob3dUaGlua2luZykuYXQoLTEpXG4gIGlmIChsYXN0Py50eXBlID09PSAnbmFycmF0aW9uJyAmJiBuYXJyYXRpb25UZXh0c01hdGNoKGxhc3QudGV4dCwgc3RyZWFtaW5nVGV4dCkpIHtcbiAgICByZXR1cm4gc3RyZWFtaW5nVGV4dFxuICB9XG5cbiAgaWYgKCFsYXN0IHx8IGxhc3QudHlwZSA9PT0gJ3RoaW5raW5nJykgcmV0dXJuIHN0cmVhbWluZ1RleHRcblxuICByZXR1cm4gbnVsbFxufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxjQUFjLFFBQVEsaURBQWlEO0FBQ2hGLFNBQ0VDLG9CQUFvQixFQUNwQkMsYUFBYSxFQUNiQyxvQ0FBb0MsRUFDcENDLG1CQUFtQixRQUNkLG9CQUFvQjtBQUMzQixTQUFTQyxhQUFhLFFBQVEsa0JBQWtCO0FBRWhELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsbUJBQW1CO0FBRXhELFNBQVNGLG1CQUFtQixRQUFRLG9CQUFvQjtBQUV4RCxPQUFPLElBQU1HLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLEtBQXNCO0VBQUEsSUFBRUMsWUFBWSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0VBQUEsT0FDaEZELFlBQVksR0FBR0QsS0FBSyxHQUFHQSxLQUFLLENBQUNLLE1BQU0sQ0FBQ1IsYUFBYSxDQUFDO0FBQUE7QUFFcEQsT0FBTyxJQUFNUyx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFJQyxJQUFtQixFQUFFQyxZQUEyQjtFQUFBLE9BQ3hGRCxJQUFJLENBQUNFLElBQUksS0FBSyxXQUFXLElBQUliLG1CQUFtQixDQUFDVyxJQUFJLENBQUNHLElBQUksRUFBRUYsWUFBWSxDQUFDO0FBQUE7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNRywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUMxQ1gsS0FBc0IsRUFDdEJZLGNBQWlELEVBQ2pEQyxhQUFxQixFQUNyQkMsU0FBeUIsRUFFYjtFQUFBLElBRFpiLFlBQVksR0FBQUMsU0FBQSxDQUFBQyxN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
67
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFzb25pbmdTdG9yZSIsImZpbmRMZWFkaW5nTmFycmF0aW9uIiwiaGFzQWN0aW9uU3RlcCIsIm5hcnJhdGlvblRleHRzTWF0Y2giLCJpc1Zpc2libGVTdGVwIiwiUEVORElOR19OQVJSQVRJT05fS0VZIiwidmlzaWJsZVJlYXNvbmluZ1N0ZXBzIiwic3RlcHMiLCJzaG93VGhpbmtpbmciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0Iiwic3RlcCIsInN0cmVhbWVkVGV4dCIsInR5cGUiLCJ0ZXh0Iiwic2hvdWxkSGlkZU9ycGhhbkxlYWRpbmdOYXJyYXRpb24iLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwic3RyZWFtQWN0aXZpdHkiLCJzdHJlYW1pbmdUZXh0IiwiY29udGV4dCIsIm1lc3NhZ2VJZCIsIl9jb250ZXh0JHNob3dUaGlua2luZyIsInBoYXNlIiwidHJpbSIsInZpc2libGUiLCJsZWFkaW5nIiwibGFzdCIsImlzTmFycmF0aW9uSGFuZG9mZlBlbmRpbmciLCJyZXNvbHZlUGVuZGluZ05hcnJhdGlvblRleHQiLCJhdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL3JlYXNvbmluZ0xpdmVOYXJyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZS9yZWFzb25pbmdTdG9yZSdcbmltcG9ydCB7IGZpbmRMZWFkaW5nTmFycmF0aW9uLCBoYXNBY3Rpb25TdGVwLCBuYXJyYXRpb25UZXh0c01hdGNoIH0gZnJvbSAnLi9yZWFzb25pbmdMZWFkaW5nJ1xuaW1wb3J0IHsgaXNWaXNpYmxlU3RlcCB9IGZyb20gJy4vUmVhc29uaW5nU3RlcHMnXG5cbmV4cG9ydCBjb25zdCBQRU5ESU5HX05BUlJBVElPTl9LRVkgPSAncGVuZGluZy1uYXJyYXRpb24nXG5cbmV4cG9ydCB0eXBlIFN0cmVhbU5hcnJhdGlvbkNvbnRleHQgPSB7XG4gIG1lc3NhZ2VJZD86IHN0cmluZyB8IG51bGxcbiAgc2hvd1RoaW5raW5nPzogYm9vbGVhblxufVxuXG5leHBvcnQgeyBuYXJyYXRpb25UZXh0c01hdGNoIH0gZnJvbSAnLi9yZWFzb25pbmdMZWFkaW5nJ1xuXG5leHBvcnQgY29uc3QgdmlzaWJsZVJlYXNvbmluZ1N0ZXBzID0gKHN0ZXBzOiBSZWFzb25pbmdTdGVwW10sIHNob3dUaGlua2luZyA9IGZhbHNlKTogUmVhc29uaW5nU3RlcFtdID0+XG4gIHNob3dUaGlua2luZyA/IHN0ZXBzIDogc3RlcHMuZmlsdGVyKGlzVmlzaWJsZVN0ZXApXG5cbmV4cG9ydCBjb25zdCBpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0ID0gKHN0ZXA6IFJlYXNvbmluZ1N0ZXAsIHN0cmVhbWVkVGV4dDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT5cbiAgc3RlcC50eXBlID09PSAnbmFycmF0aW9uJyAmJiBuYXJyYXRpb25UZXh0c01hdGNoKHN0ZXAudGV4dCwgc3RyZWFtZWRUZXh0KVxuXG4vKiogTmFycmFjacOzbiBpbmljaWFsIHNpbiB0b29sczogdml2ZSBlbiBlbCBjdWVycG8sIG5vIGVuIGxhIHRyYXphLiAqL1xuZXhwb3J0IGNvbnN0IHNob3VsZEhpZGVPcnBoYW5MZWFkaW5nTmFycmF0aW9uID0gKHN0ZXBzOiBSZWFzb25pbmdTdGVwW10pOiBib29sZWFuID0+ICFoYXNBY3Rpb25TdGVwKHN0ZXBzKVxuXG4vKipcbiAqIE5hcnJhY2nDs24gZGUgdHVybm86IHRva2VucyBzaW4gc3RlcCB2YW4gYW5jbGFkb3MgYWwgaW5pY2lvLiBVbmEgbmFycmFjacOzblxuICogY29tbWl0ZWFkYSAocHJlIGFuc3dlcl9yZXNldCkgc2UgcGludGEgZW4gc3UgZmlsYSwgbm8gc2UgcmVjdWVsZ2EgYWwgw7psdGltbyB0b29sLlxuICovXG5leHBvcnQgY29uc3Qgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSA9IChcbiAgc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSxcbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3RyZWFtaW5nVGV4dDogc3RyaW5nLFxuICBjb250ZXh0OiBTdHJlYW1OYXJyYXRpb25Db250ZXh0ID0ge31cbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB7IG1lc3NhZ2VJZCwgc2hvd1RoaW5raW5nID0gZmFsc2UgfSA9IGNvbnRleHRcbiAgaWYgKHN0cmVhbUFjdGl2aXR5Py5waGFzZSAhPT0gJ3dyaXRpbmcnKSByZXR1cm4gZmFsc2VcbiAgaWYgKCFzdHJlYW1pbmdUZXh0LnRyaW0oKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgdmlzaWJsZSA9IHZpc2libGVSZWFzb25pbmdTdGVwcyhzdGVwcywgc2hvd1RoaW5raW5nKVxuICBjb25zdCBsZWFkaW5nID0gZmluZExlYWRpbmdOYXJyYXRpb24oc3RlcHMpXG5cbiAgLy8gQW50ZXMgZGUgY3VhbHF1aWVyIGFjY2nDs24gZWwgdGV4dG8gdmEgYWwgY3VlcnBvLCBubyBhIGxhIHRyYXphLlxuICBpZiAobGVhZGluZyAmJiAhaGFzQWN0aW9uU3RlcCh2aXNpYmxlKSkgcmV0dXJuIGZhbHNlXG5cbiAgLy8gTGVhZGluZyB5YSBhbmNsYWRhOiBlbCBib2R5IHRvZGF2w61hIGVzIGVzYSBtaXNtYSBuYXJyYWNpw7NuIChzaW4gcmVzcHVlc3RhIGZpbmFsKS5cbiAgaWYgKGxlYWRpbmcgJiYgbmFycmF0aW9uVGV4dHNNYXRjaChsZWFkaW5nLnRleHQsIHN0cmVhbWluZ1RleHQpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGNvbnN0IGxhc3QgPSB2aXNpYmxlW3Zpc2libGUubGVuZ3RoIC0gMV1cbiAgaWYgKCFsYXN0IHx8IGxhc3QudHlwZSA9PT0gJ3RoaW5raW5nJykgcmV0dXJuIGZhbHNlXG5cbiAgaWYgKGxhc3QudHlwZSA9PT0gJ25hcnJhdGlvbicpIHtcbiAgICBpZiAobWVzc2FnZUlkICYmICFyZWFzb25pbmdTdG9yZS5pc05hcnJhdGlvbkhhbmRvZmZQZW5kaW5nKG1lc3NhZ2VJZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbmFycmF0aW9uVGV4dHNNYXRjaChsYXN0LnRleHQsIHN0cmVhbWluZ1RleHQpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqIFRleHRvIGRlIGxhIGZpbGEgbGl2ZSBhbCBmaW5hbCBkZSBsYSB0cmF6YTsgbnVsbCBzaSB5YSBlc3TDoSBhbmNsYWRhIG8gdmEgYWwgY3VlcnBvLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVQZW5kaW5nTmFycmF0aW9uVGV4dCA9IChcbiAgc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSxcbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3RyZWFtaW5nVGV4dDogc3RyaW5nLFxuICBjb250ZXh0OiBTdHJlYW1OYXJyYXRpb25Db250ZXh0ID0ge31cbik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoIXNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUoc3RlcHMsIHN0cmVhbUFjdGl2aXR5LCBzdHJlYW1pbmdUZXh0LCBjb250ZXh0KSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBsZWFkaW5nID0gZmluZExlYWRpbmdOYXJyYXRpb24oc3RlcHMpXG4gIC8vIFlhIGVzdMOhIGFuY2xhZGEgYWwgaW5pY2lvOiBubyByZWN1ZWxndWVzIGVsIG1pc21vIHRleHRvIGRldHLDoXMgZGUgY2FkYSB0b29sLlxuICBpZiAobGVhZGluZyAmJiBuYXJyYXRpb25UZXh0c01hdGNoKGxlYWRpbmcudGV4dCwgc3RyZWFtaW5nVGV4dCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbGFzdCA9IHZpc2libGVSZWFzb25pbmdTdGVwcyhzdGVwcywgY29udGV4dC5zaG93VGhpbmtpbmcpLmF0KC0xKVxuICBpZiAobGFzdD8udHlwZSA9PT0gJ25hcnJhdGlvbicgJiYgbmFycmF0aW9uVGV4dHNNYXRjaChsYXN0LnRleHQsIHN0cmVhbWluZ1RleHQpKSB7XG4gICAgcmV0dXJuIHN0cmVhbWluZ1RleHRcbiAgfVxuXG4gIGlmICghbGFzdCB8fCBsYXN0LnR5cGUgPT09ICd0aGlua2luZycpIHJldHVybiBzdHJlYW1pbmdUZXh0XG5cbiAgcmV0dXJuIG51bGxcbn1cbiJdLCJtYXBwaW5ncyI6IkFBRUEsU0FBU0EsY0FBYyxRQUFRLGlEQUFpRDtBQUNoRixTQUFTQyxvQkFBb0IsRUFBRUMsYUFBYSxFQUFFQyxtQkFBbUIsUUFBUSxvQkFBb0I7QUFDN0YsU0FBU0MsYUFBYSxRQUFRLGtCQUFrQjtBQUVoRCxPQUFPLElBQU1DLHFCQUFxQixHQUFHLG1CQUFtQjtBQU94RCxTQUFTRixtQkFBbUIsUUFBUSxvQkFBb0I7QUFFeEQsT0FBTyxJQUFNRyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJQyxLQUFzQjtFQUFBLElBQUVDLFlBQVksR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsS0FBSztFQUFBLE9BQ2hGRCxZQUFZLEdBQUdELEtBQUssR0FBR0EsS0FBSyxDQUFDSyxNQUFNLENBQUNSLGFBQWEsQ0FBQztBQUFBO0FBRXBELE9BQU8sSUFBTVMseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSUMsSUFBbUIsRUFBRUMsWUFBMkI7RUFBQSxPQUN4RkQsSUFBSSxDQUFDRSxJQUFJLEtBQUssV0FBVyxJQUFJYixtQkFBbUIsQ0FBQ1csSUFBSSxDQUFDRyxJQUFJLEVBQUVGLFlBQVksQ0FBQztBQUFBOztBQUUzRTtBQUNBLE9BQU8sSUFBTUcsZ0NBQWdDLEdBQUcsU0FBbkNBLGdDQUFnQ0EsQ0FBSVgsS0FBc0I7RUFBQSxPQUFjLENBQUNMLGFBQWEsQ0FBQ0ssS0FBSyxDQUFDO0FBQUE7O0FBRTFHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNWSwrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUMxQ1osS0FBc0IsRUFDdEJhLGNBQWlELEVBQ2pEQyxhQUFxQixFQUVUO0VBQUEsSUFEWkMsT0FBK0IsR0FBQWIsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBRXBDLElBQVFjLFNBQVMsR0FBMkJELE9BQU8sQ0FBM0NDLFNBQVM7SUFBQUMscUJBQUEsR0FBMkJGLE9BQU8sQ0FBaENkLFlBQVk7SUFBWkEsWUFBWSxHQUFBZ0IscUJBQUEsY0FBRyxLQUFLLEdBQUFBLHFCQUFBO0VBQ3ZDLElBQUksQ0FBQUosY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVLLEtBQUssTUFBSyxTQUFTLEVBQUUsT0FBTyxLQUFLO0VBQ3JELElBQUksQ0FBQ0osYUFBYSxDQUFDSyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSztFQUV2QyxJQUFNQyxPQUFPLEdBQUdyQixxQkFBcUIsQ0FBQ0MsS0FBSyxFQUFFQyxZQUFZLENBQUM7RUFDMUQsSUFBTW9CLE9BQU8sR0FBRzNCLG9CQUFvQixDQUFDTSxLQUFLLENBQUM7O0VBRTNDO0VBQ0EsSUFBSXFCLE9BQU8sSUFBSSxDQUFDMUIsYUFBYSxDQUFDeUIsT0FBTyxDQUFDLEVBQUUsT0FBTyxLQUFLOztFQUVwRDtFQUNBLElBQUlDLE9BQU8sSUFBSXpCLG1CQUFtQixDQUFDeUIsT0FBTyxDQUFDWCxJQUFJLEVBQUVJLGFBQWEsQ0FBQyxFQUFFO0lBQy9ELE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBTVEsSUFBSSxHQUFHRixPQUFPLENBQUNBLE9BQU8sQ0FBQ2pCLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDeEMsSUFBSSxDQUFDbUIsSUFBSSxJQUFJQSxJQUFJLENBQUNiLElBQUksS0FBSyxVQUFVLEVBQUUsT0FBTyxLQUFLO0VBRW5ELElBQUlhLElBQUksQ0FBQ2IsSUFBSSxLQUFLLFdBQVcsRUFBRTtJQUM3QixJQUFJTyxTQUFTLElBQUksQ0FBQ3ZCLGNBQWMsQ0FBQzhCLHlCQUF5QixDQUFDUCxTQUFTLENBQUMsRUFBRTtNQUNyRSxPQUFPLEtBQUs7SUFDZDtJQUNBLE9BQU9wQixtQkFBbUIsQ0FBQzBCLElBQUksQ0FBQ1osSUFBSSxFQUFFSSxhQUFhLENBQUM7RUFDdEQ7RUFFQSxPQUFPLEtBQUs7QUFDZCxDQUFDOztBQUVEO0FBQ0EsT0FBTyxJQUFNVSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUN0Q3hCLEtBQXNCLEVBQ3RCYSxjQUFpRCxFQUNqREMsYUFBcUIsRUFFSDtFQUFBLElBRGxCQyxPQUErQixHQUFBYixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFFcEMsSUFBSSxDQUFDVSwrQkFBK0IsQ0FBQ1osS0FBSyxFQUFFYSxjQUFjLEVBQUVDLGFBQWEsRUFBRUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxJQUFJO0VBRWhHLElBQU1NLE9BQU8sR0FBRzNCLG9CQUFvQixDQUFDTSxLQUFLLENBQUM7RUFDM0M7RUFDQSxJQUFJcUIsT0FBTyxJQUFJekIsbUJBQW1CLENBQUN5QixPQUFPLENBQUNYLElBQUksRUFBRUksYUFBYSxDQUFDLEVBQUU7SUFDL0QsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFNUSxJQUFJLEdBQUd2QixxQkFBcUIsQ0FBQ0MsS0FBSyxFQUFFZSxPQUFPLENBQUNkLFlBQVksQ0FBQyxDQUFDd0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RFLElBQUksQ0FBQUgsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUViLElBQUksTUFBSyxXQUFXLElBQUliLG1CQUFtQixDQUFDMEIsSUFBSSxDQUFDWixJQUFJLEVBQUVJLGFBQWEsQ0FBQyxFQUFFO0lBQy9FLE9BQU9BLGFBQWE7RUFDdEI7RUFFQSxJQUFJLENBQUNRLElBQUksSUFBSUEsSUFBSSxDQUFDYixJQUFJLEtBQUssVUFBVSxFQUFFLE9BQU9LLGFBQWE7RUFFM0QsT0FBTyxJQUFJO0FBQ2IsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,68 @@
1
+ import { reasoningStore } from '../../../hooks/useReasoningTrace/reasoningStore';
2
+ import { LEADING_NARRATION_INDEX } from './reasoningLeading';
3
+ import { resolvePendingNarrationText, shouldHideOrphanLeadingNarration, shouldStreamNarrationInTimeline } from './reasoningLiveNarration';
4
+ jest.mock('../MaiaStreamdown/MaiaStreamdown', function () {
5
+ return {
6
+ MaiaStreamdown: function MaiaStreamdown(_ref) {
7
+ var children = _ref.children;
8
+ return children;
9
+ }
10
+ };
11
+ });
12
+ var writing = {
13
+ phase: 'writing',
14
+ message: 'Escribiendo'
15
+ };
16
+ var leadingOnly = [{
17
+ i: LEADING_NARRATION_INDEX,
18
+ type: 'narration',
19
+ text: 'Voy a revisar el proyecto'
20
+ }];
21
+ var withTool = [{
22
+ i: LEADING_NARRATION_INDEX,
23
+ type: 'narration',
24
+ text: 'Voy a revisar el proyecto'
25
+ }, {
26
+ i: 1,
27
+ type: 'tool',
28
+ tool: 'edit_task',
29
+ status: 'running'
30
+ }];
31
+ describe('shouldStreamNarrationInTimeline', function () {
32
+ afterEach(function () {
33
+ reasoningStore.clear();
34
+ });
35
+ it('keeps the leading narration in the body before any action', function () {
36
+ expect(shouldStreamNarrationInTimeline(leadingOnly, writing, 'Voy a revisar el proyecto')).toBe(false);
37
+ });
38
+ it('does not treat post-tool tokens as timeline narration', function () {
39
+ expect(shouldStreamNarrationInTimeline(withTool, writing, 'Esta es la respuesta final del turno')).toBe(false);
40
+ });
41
+ it('keeps a committed narration in the timeline while the handoff is pending', function () {
42
+ reasoningStore.start('m1');
43
+ reasoningStore.applyStep('m1', {
44
+ i: 2,
45
+ type: 'narration',
46
+ text: 'Listo, ahora edito'
47
+ });
48
+ expect(shouldStreamNarrationInTimeline([].concat(withTool, [{
49
+ i: 2,
50
+ type: 'narration',
51
+ text: 'Listo, ahora edito'
52
+ }]), writing, 'Listo, ahora edito', {
53
+ messageId: 'm1'
54
+ })).toBe(true);
55
+ });
56
+ });
57
+ describe('resolvePendingNarrationText', function () {
58
+ it('returns null when the leading narration belongs in the body', function () {
59
+ expect(resolvePendingNarrationText(leadingOnly, writing, 'Voy a revisar el proyecto')).toBeNull();
60
+ });
61
+ });
62
+ describe('shouldHideOrphanLeadingNarration', function () {
63
+ it('hides the leading step until an action arrives', function () {
64
+ expect(shouldHideOrphanLeadingNarration(leadingOnly)).toBe(true);
65
+ expect(shouldHideOrphanLeadingNarration(withTool)).toBe(false);
66
+ });
67
+ });
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFzb25pbmdTdG9yZSIsIkxFQURJTkdfTkFSUkFUSU9OX0lOREVYIiwicmVzb2x2ZVBlbmRpbmdOYXJyYXRpb25UZXh0Iiwic2hvdWxkSGlkZU9ycGhhbkxlYWRpbmdOYXJyYXRpb24iLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiamVzdCIsIm1vY2siLCJNYWlhU3RyZWFtZG93biIsIl9yZWYiLCJjaGlsZHJlbiIsIndyaXRpbmciLCJwaGFzZSIsIm1lc3NhZ2UiLCJsZWFkaW5nT25seSIsImkiLCJ0eXBlIiwidGV4dCIsIndpdGhUb29sIiwidG9vbCIsInN0YXR1cyIsImRlc2NyaWJlIiwiYWZ0ZXJFYWNoIiwiY2xlYXIiLCJpdCIsImV4cGVjdCIsInRvQmUiLCJzdGFydCIsImFwcGx5U3RlcCIsImNvbmNhdCIsIm1lc3NhZ2VJZCIsInRvQmVOdWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbi5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UvcmVhc29uaW5nU3RvcmUnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1N0ZXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBMRUFESU5HX05BUlJBVElPTl9JTkRFWCB9IGZyb20gJy4vcmVhc29uaW5nTGVhZGluZydcbmltcG9ydCB7XG4gIHJlc29sdmVQZW5kaW5nTmFycmF0aW9uVGV4dCxcbiAgc2hvdWxkSGlkZU9ycGhhbkxlYWRpbmdOYXJyYXRpb24sXG4gIHNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUsXG59IGZyb20gJy4vcmVhc29uaW5nTGl2ZU5hcnJhdGlvbidcblxuamVzdC5tb2NrKCcuLi9NYWlhU3RyZWFtZG93bi9NYWlhU3RyZWFtZG93bicsICgpID0+ICh7XG4gIE1haWFTdHJlYW1kb3duOiAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuPzogc3RyaW5nIH0pID0+IGNoaWxkcmVuLFxufSkpXG5cbmNvbnN0IHdyaXRpbmc6IFN0cmVhbUFjdGl2aXR5ID0geyBwaGFzZTogJ3dyaXRpbmcnLCBtZXNzYWdlOiAnRXNjcmliaWVuZG8nIH1cblxuY29uc3QgbGVhZGluZ09ubHk6IFJlYXNvbmluZ1N0ZXBbXSA9IFtcbiAgeyBpOiBMRUFESU5HX05BUlJBVElPTl9JTkRFWCwgdHlwZTogJ25hcnJhdGlvbicsIHRleHQ6ICdWb3kgYSByZXZpc2FyIGVsIHByb3llY3RvJyB9LFxuXVxuXG5jb25zdCB3aXRoVG9vbDogUmVhc29uaW5nU3RlcFtdID0gW1xuICB7IGk6IExFQURJTkdfTkFSUkFUSU9OX0lOREVYLCB0eXBlOiAnbmFycmF0aW9uJywgdGV4dDogJ1ZveSBhIHJldmlzYXIgZWwgcHJveWVjdG8nIH0sXG4gIHsgaTogMSwgdHlwZTogJ3Rvb2wnLCB0b29sOiAnZWRpdF90YXNrJywgc3RhdHVzOiAncnVubmluZycgfSxcbl1cblxuZGVzY3JpYmUoJ3Nob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcmVhc29uaW5nU3RvcmUuY2xlYXIoKVxuICB9KVxuXG4gIGl0KCdrZWVwcyB0aGUgbGVhZGluZyBuYXJyYXRpb24gaW4gdGhlIGJvZHkgYmVmb3JlIGFueSBhY3Rpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KHNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUobGVhZGluZ09ubHksIHdyaXRpbmcsICdWb3kgYSByZXZpc2FyIGVsIHByb3llY3RvJykpLnRvQmUoZmFsc2UpXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHRyZWF0IHBvc3QtdG9vbCB0b2tlbnMgYXMgdGltZWxpbmUgbmFycmF0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdChzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKHdpdGhUb29sLCB3cml0aW5nLCAnRXN0YSBlcyBsYSByZXNwdWVzdGEgZmluYWwgZGVsIHR1cm5vJykpLnRvQmUoZmFsc2UpXG4gIH0pXG5cbiAgaXQoJ2tlZXBzIGEgY29tbWl0dGVkIG5hcnJhdGlvbiBpbiB0aGUgdGltZWxpbmUgd2hpbGUgdGhlIGhhbmRvZmYgaXMgcGVuZGluZycsICgpID0+IHtcbiAgICByZWFzb25pbmdTdG9yZS5zdGFydCgnbTEnKVxuICAgIHJlYXNvbmluZ1N0b3JlLmFwcGx5U3RlcCgnbTEnLCB7IGk6IDIsIHR5cGU6ICduYXJyYXRpb24nLCB0ZXh0OiAnTGlzdG8sIGFob3JhIGVkaXRvJyB9KVxuXG4gICAgZXhwZWN0KFxuICAgICAgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShcbiAgICAgICAgWy4uLndpdGhUb29sLCB7IGk6IDIsIHR5cGU6ICduYXJyYXRpb24nLCB0ZXh0OiAnTGlzdG8sIGFob3JhIGVkaXRvJyB9XSxcbiAgICAgICAgd3JpdGluZyxcbiAgICAgICAgJ0xpc3RvLCBhaG9yYSBlZGl0bycsXG4gICAgICAgIHsgbWVzc2FnZUlkOiAnbTEnIH1cbiAgICAgIClcbiAgICApLnRvQmUodHJ1ZSlcbiAgfSlcbn0pXG5cbmRlc2NyaWJlKCdyZXNvbHZlUGVuZGluZ05hcnJhdGlvblRleHQnLCAoKSA9PiB7XG4gIGl0KCdyZXR1cm5zIG51bGwgd2hlbiB0aGUgbGVhZGluZyBuYXJyYXRpb24gYmVsb25ncyBpbiB0aGUgYm9keScsICgpID0+IHtcbiAgICBleHBlY3QocmVzb2x2ZVBlbmRpbmdOYXJyYXRpb25UZXh0KGxlYWRpbmdPbmx5LCB3cml0aW5nLCAnVm95IGEgcmV2aXNhciBlbCBwcm95ZWN0bycpKS50b0JlTnVsbCgpXG4gIH0pXG59KVxuXG5kZXNjcmliZSgnc2hvdWxkSGlkZU9ycGhhbkxlYWRpbmdOYXJyYXRpb24nLCAoKSA9PiB7XG4gIGl0KCdoaWRlcyB0aGUgbGVhZGluZyBzdGVwIHVudGlsIGFuIGFjdGlvbiBhcnJpdmVzJywgKCkgPT4ge1xuICAgIGV4cGVjdChzaG91bGRIaWRlT3JwaGFuTGVhZGluZ05hcnJhdGlvbihsZWFkaW5nT25seSkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3Qoc2hvdWxkSGlkZU9ycGhhbkxlYWRpbmdOYXJyYXRpb24od2l0aFRvb2wpKS50b0JlKGZhbHNlKVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsY0FBYyxRQUFRLGlEQUFpRDtBQUdoRixTQUFTQyx1QkFBdUIsUUFBUSxvQkFBb0I7QUFDNUQsU0FDRUMsMkJBQTJCLEVBQzNCQyxnQ0FBZ0MsRUFDaENDLCtCQUErQixRQUMxQiwwQkFBMEI7QUFFakNDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLGtDQUFrQyxFQUFFO0VBQUEsT0FBTztJQUNuREMsY0FBYyxFQUFFLFNBQWhCQSxjQUFjQSxDQUFBQyxJQUFBO01BQUEsSUFBS0MsUUFBUSxHQUFBRCxJQUFBLENBQVJDLFFBQVE7TUFBQSxPQUE4QkEsUUFBUTtJQUFBO0VBQ25FLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSCxJQUFNQyxPQUF1QixHQUFHO0VBQUVDLEtBQUssRUFBRSxTQUFTO0VBQUVDLE9BQU8sRUFBRTtBQUFjLENBQUM7QUFFNUUsSUFBTUMsV0FBNEIsR0FBRyxDQUNuQztFQUFFQyxDQUFDLEVBQUViLHVCQUF1QjtFQUFFYyxJQUFJLEVBQUUsV0FBVztFQUFFQyxJQUFJLEVBQUU7QUFBNEIsQ0FBQyxDQUNyRjtBQUVELElBQU1DLFFBQXlCLEdBQUcsQ0FDaEM7RUFBRUgsQ0FBQyxFQUFFYix1QkFBdUI7RUFBRWMsSUFBSSxFQUFFLFdBQVc7RUFBRUMsSUFBSSxFQUFFO0FBQTRCLENBQUMsRUFDcEY7RUFBRUYsQ0FBQyxFQUFFLENBQUM7RUFBRUMsSUFBSSxFQUFFLE1BQU07RUFBRUcsSUFBSSxFQUFFLFdBQVc7RUFBRUMsTUFBTSxFQUFFO0FBQVUsQ0FBQyxDQUM3RDtBQUVEQyxRQUFRLENBQUMsaUNBQWlDLEVBQUUsWUFBTTtFQUNoREMsU0FBUyxDQUFDLFlBQU07SUFDZHJCLGNBQWMsQ0FBQ3NCLEtBQUssQ0FBQyxDQUFDO0VBQ3hCLENBQUMsQ0FBQztFQUVGQyxFQUFFLENBQUMsMkRBQTJELEVBQUUsWUFBTTtJQUNwRUMsTUFBTSxDQUFDcEIsK0JBQStCLENBQUNTLFdBQVcsRUFBRUgsT0FBTyxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQ2UsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN4RyxDQUFDLENBQUM7RUFFRkYsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLFlBQU07SUFDaEVDLE1BQU0sQ0FBQ3BCLCtCQUErQixDQUFDYSxRQUFRLEVBQUVQLE9BQU8sRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDLENBQUNlLElBQUksQ0FBQyxLQUFLLENBQUM7RUFDaEgsQ0FBQyxDQUFDO0VBRUZGLEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxZQUFNO0lBQ25GdkIsY0FBYyxDQUFDMEIsS0FBSyxDQUFDLElBQUksQ0FBQztJQUMxQjFCLGNBQWMsQ0FBQzJCLFNBQVMsQ0FBQyxJQUFJLEVBQUU7TUFBRWIsQ0FBQyxFQUFFLENBQUM7TUFBRUMsSUFBSSxFQUFFLFdBQVc7TUFBRUMsSUFBSSxFQUFFO0lBQXFCLENBQUMsQ0FBQztJQUV2RlEsTUFBTSxDQUNKcEIsK0JBQStCLElBQUF3QixNQUFBLENBQ3pCWCxRQUFRLEdBQUU7TUFBRUgsQ0FBQyxFQUFFLENBQUM7TUFBRUMsSUFBSSxFQUFFLFdBQVc7TUFBRUMsSUFBSSxFQUFFO0lBQXFCLENBQUMsSUFDckVOLE9BQU8sRUFDUCxvQkFBb0IsRUFDcEI7TUFBRW1CLFNBQVMsRUFBRTtJQUFLLENBQ3BCLENBQ0YsQ0FBQyxDQUFDSixJQUFJLENBQUMsSUFBSSxDQUFDO0VBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUZMLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxZQUFNO0VBQzVDRyxFQUFFLENBQUMsNkRBQTZELEVBQUUsWUFBTTtJQUN0RUMsTUFBTSxDQUFDdEIsMkJBQTJCLENBQUNXLFdBQVcsRUFBRUgsT0FBTyxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQ29CLFFBQVEsQ0FBQyxDQUFDO0VBQ25HLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGVixRQUFRLENBQUMsa0NBQWtDLEVBQUUsWUFBTTtFQUNqREcsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLFlBQU07SUFDekRDLE1BQU0sQ0FBQ3JCLGdDQUFnQyxDQUFDVSxXQUFXLENBQUMsQ0FBQyxDQUFDWSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2hFRCxNQUFNLENBQUNyQixnQ0FBZ0MsQ0FBQ2MsUUFBUSxDQUFDLENBQUMsQ0FBQ1EsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUNoRSxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,52 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { useLayoutEffect, useRef, useState } from 'react';
3
+ export var REASONING_COLLAPSE_MS = 760;
4
+ export var REASONING_COLLAPSE_EASE = 'cubic-bezier(0.4, 0, 0.2, 1)';
5
+ var prefersReducedMotion = function prefersReducedMotion() {
6
+ return typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
7
+ };
8
+ export var useCollapsibleHeight = function useCollapsibleHeight(isOpen) {
9
+ var innerRef = useRef(null);
10
+ var isFirstRender = useRef(true);
11
+ var _useState = useState(function () {
12
+ return isOpen ? 'auto' : 0;
13
+ }),
14
+ _useState2 = _slicedToArray(_useState, 2),
15
+ height = _useState2[0],
16
+ setHeight = _useState2[1];
17
+ useLayoutEffect(function () {
18
+ if (isFirstRender.current) {
19
+ isFirstRender.current = false;
20
+ setHeight(isOpen ? 'auto' : 0);
21
+ return undefined;
22
+ }
23
+ var node = innerRef.current;
24
+ if (!node) return undefined;
25
+ if (prefersReducedMotion()) {
26
+ setHeight(isOpen ? 'auto' : 0);
27
+ return undefined;
28
+ }
29
+ if (isOpen) {
30
+ var measured = node.scrollHeight;
31
+ setHeight(measured);
32
+ var timeoutId = window.setTimeout(function () {
33
+ return setHeight('auto');
34
+ }, REASONING_COLLAPSE_MS);
35
+ return function () {
36
+ return window.clearTimeout(timeoutId);
37
+ };
38
+ }
39
+ setHeight(node.scrollHeight);
40
+ var rafId = window.requestAnimationFrame(function () {
41
+ return setHeight(0);
42
+ });
43
+ return function () {
44
+ return window.cancelAnimationFrame(rafId);
45
+ };
46
+ }, [isOpen]);
47
+ return {
48
+ innerRef: innerRef,
49
+ height: height
50
+ };
51
+ };
52
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlJFQVNPTklOR19DT0xMQVBTRV9NUyIsIlJFQVNPTklOR19DT0xMQVBTRV9FQVNFIiwicHJlZmVyc1JlZHVjZWRNb3Rpb24iLCJ3aW5kb3ciLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsInVzZUNvbGxhcHNpYmxlSGVpZ2h0IiwiaXNPcGVuIiwiaW5uZXJSZWYiLCJpc0ZpcnN0UmVuZGVyIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaGVpZ2h0Iiwic2V0SGVpZ2h0IiwiY3VycmVudCIsInVuZGVmaW5lZCIsIm5vZGUiLCJtZWFzdXJlZCIsInNjcm9sbEhlaWdodCIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJyYWZJZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svdXNlQ29sbGFwc2libGVIZWlnaHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB0eXBlIE11dGFibGVSZWZPYmplY3QgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IFJFQVNPTklOR19DT0xMQVBTRV9NUyA9IDc2MFxuZXhwb3J0IGNvbnN0IFJFQVNPTklOR19DT0xMQVBTRV9FQVNFID0gJ2N1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknXG5cbmNvbnN0IHByZWZlcnNSZWR1Y2VkTW90aW9uID0gKCk6IGJvb2xlYW4gPT5cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlc1xuXG5leHBvcnQgY29uc3QgdXNlQ29sbGFwc2libGVIZWlnaHQgPSAoXG4gIGlzT3BlbjogYm9vbGVhblxuKTogeyBpbm5lclJlZjogTXV0YWJsZVJlZk9iamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+OyBoZWlnaHQ6IG51bWJlciB8ICdhdXRvJyB9ID0+IHtcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGlzRmlyc3RSZW5kZXIgPSB1c2VSZWYodHJ1ZSlcbiAgY29uc3QgW2hlaWdodCwgc2V0SGVpZ2h0XSA9IHVzZVN0YXRlPG51bWJlciB8ICdhdXRvJz4oKCkgPT4gKGlzT3BlbiA/ICdhdXRvJyA6IDApKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRmlyc3RSZW5kZXIuY3VycmVudCkge1xuICAgICAgaXNGaXJzdFJlbmRlci5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNldEhlaWdodChpc09wZW4gPyAnYXV0bycgOiAwKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBpbm5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFub2RlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBpZiAocHJlZmVyc1JlZHVjZWRNb3Rpb24oKSkge1xuICAgICAgc2V0SGVpZ2h0KGlzT3BlbiA/ICdhdXRvJyA6IDApXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBub2RlLnNjcm9sbEhlaWdodFxuICAgICAgc2V0SGVpZ2h0KG1lYXN1cmVkKVxuICAgICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gc2V0SGVpZ2h0KCdhdXRvJyksIFJFQVNPTklOR19DT0xMQVBTRV9NUylcbiAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICB9XG5cbiAgICBzZXRIZWlnaHQobm9kZS5zY3JvbGxIZWlnaHQpXG4gICAgY29uc3QgcmFmSWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHNldEhlaWdodCgwKSlcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICB9LCBbaXNPcGVuXSlcblxuICByZXR1cm4geyBpbm5lclJlZiwgaGVpZ2h0IH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQStCLE9BQU87QUFFaEYsT0FBTyxJQUFNQyxxQkFBcUIsR0FBRyxHQUFHO0FBQ3hDLE9BQU8sSUFBTUMsdUJBQXVCLEdBQUcsOEJBQThCO0FBRXJFLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUE7RUFBQSxPQUN4QixPQUFPQyxNQUFNLEtBQUssV0FBVyxJQUFJQSxNQUFNLENBQUNDLFVBQVUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDQyxPQUFPO0FBQUE7QUFFaEcsT0FBTyxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQkMsTUFBZSxFQUNvRTtFQUNuRixJQUFNQyxRQUFRLEdBQUdWLE1BQU0sQ0FBaUIsSUFBSSxDQUFDO0VBQzdDLElBQU1XLGFBQWEsR0FBR1gsTUFBTSxDQUFDLElBQUksQ0FBQztFQUNsQyxJQUFBWSxTQUFBLEdBQTRCWCxRQUFRLENBQWtCO01BQUEsT0FBT1EsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDO0lBQUEsQ0FBQyxDQUFDO0lBQUFJLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQTNFRyxNQUFNLEdBQUFGLFVBQUE7SUFBRUcsU0FBUyxHQUFBSCxVQUFBO0VBRXhCZCxlQUFlLENBQUMsWUFBTTtJQUNwQixJQUFJWSxhQUFhLENBQUNNLE9BQU8sRUFBRTtNQUN6Qk4sYUFBYSxDQUFDTSxPQUFPLEdBQUcsS0FBSztNQUM3QkQsU0FBUyxDQUFDUCxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUM5QixPQUFPUyxTQUFTO0lBQ2xCO0lBRUEsSUFBTUMsSUFBSSxHQUFHVCxRQUFRLENBQUNPLE9BQU87SUFDN0IsSUFBSSxDQUFDRSxJQUFJLEVBQUUsT0FBT0QsU0FBUztJQUUzQixJQUFJZCxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7TUFDMUJZLFNBQVMsQ0FBQ1AsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDOUIsT0FBT1MsU0FBUztJQUNsQjtJQUVBLElBQUlULE1BQU0sRUFBRTtNQUNWLElBQU1XLFFBQVEsR0FBR0QsSUFBSSxDQUFDRSxZQUFZO01BQ2xDTCxTQUFTLENBQUNJLFFBQVEsQ0FBQztNQUNuQixJQUFNRSxTQUFTLEdBQUdqQixNQUFNLENBQUNrQixVQUFVLENBQUM7UUFBQSxPQUFNUCxTQUFTLENBQUMsTUFBTSxDQUFDO01BQUEsR0FBRWQscUJBQXFCLENBQUM7TUFDbkYsT0FBTztRQUFBLE9BQU1HLE1BQU0sQ0FBQ21CLFlBQVksQ0FBQ0YsU0FBUyxDQUFDO01BQUE7SUFDN0M7SUFFQU4sU0FBUyxDQUFDRyxJQUFJLENBQUNFLFlBQVksQ0FBQztJQUM1QixJQUFNSSxLQUFLLEdBQUdwQixNQUFNLENBQUNxQixxQkFBcUIsQ0FBQztNQUFBLE9BQU1WLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFBQSxFQUFDO0lBQzlELE9BQU87TUFBQSxPQUFNWCxNQUFNLENBQUNzQixvQkFBb0IsQ0FBQ0YsS0FBSyxDQUFDO0lBQUE7RUFDakQsQ0FBQyxFQUFFLENBQUNoQixNQUFNLENBQUMsQ0FBQztFQUVaLE9BQU87SUFBRUMsUUFBUSxFQUFSQSxRQUFRO0lBQUVLLE1BQU0sRUFBTkE7RUFBTyxDQUFDO0FBQzdCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,90 @@
1
+ import { act, renderHook } from '@testing-library/react';
2
+ import { REASONING_COLLAPSE_MS, useCollapsibleHeight } from './useCollapsibleHeight';
3
+ var createMeasuredNode = function createMeasuredNode(scrollHeight) {
4
+ var node = document.createElement('div');
5
+ Object.defineProperty(node, 'scrollHeight', {
6
+ configurable: true,
7
+ value: scrollHeight
8
+ });
9
+ return node;
10
+ };
11
+ describe('useCollapsibleHeight', function () {
12
+ var originalMatchMedia = window.matchMedia;
13
+ beforeEach(function () {
14
+ window.matchMedia = jest.fn().mockImplementation(function () {
15
+ return {
16
+ matches: false,
17
+ addListener: jest.fn(),
18
+ removeListener: jest.fn(),
19
+ addEventListener: jest.fn(),
20
+ removeEventListener: jest.fn(),
21
+ dispatchEvent: jest.fn()
22
+ };
23
+ });
24
+ });
25
+ afterEach(function () {
26
+ window.matchMedia = originalMatchMedia;
27
+ });
28
+ it('starts closed at 0 and open at auto', function () {
29
+ var closed = renderHook(function () {
30
+ return useCollapsibleHeight(false);
31
+ });
32
+ expect(closed.result.current.height).toBe(0);
33
+ var opened = renderHook(function () {
34
+ return useCollapsibleHeight(true);
35
+ });
36
+ expect(opened.result.current.height).toBe('auto');
37
+ });
38
+ it('locks the measured height and then collapses to 0', function () {
39
+ var rafCallbacks = [];
40
+ jest.spyOn(window, 'requestAnimationFrame').mockImplementation(function (cb) {
41
+ rafCallbacks.push(cb);
42
+ return rafCallbacks.length;
43
+ });
44
+ var _renderHook = renderHook(function (_ref) {
45
+ var isOpen = _ref.isOpen;
46
+ return useCollapsibleHeight(isOpen);
47
+ }, {
48
+ initialProps: {
49
+ isOpen: true
50
+ }
51
+ }),
52
+ result = _renderHook.result,
53
+ rerender = _renderHook.rerender;
54
+ result.current.innerRef.current = createMeasuredNode(180);
55
+ rerender({
56
+ isOpen: false
57
+ });
58
+ expect(result.current.height).toBe(180);
59
+ act(function () {
60
+ rafCallbacks.forEach(function (cb) {
61
+ return cb(0);
62
+ });
63
+ });
64
+ expect(result.current.height).toBe(0);
65
+ });
66
+ it('measures the content when opening and releases to auto after the transition', function () {
67
+ jest.useFakeTimers();
68
+ var _renderHook2 = renderHook(function (_ref2) {
69
+ var isOpen = _ref2.isOpen;
70
+ return useCollapsibleHeight(isOpen);
71
+ }, {
72
+ initialProps: {
73
+ isOpen: false
74
+ }
75
+ }),
76
+ result = _renderHook2.result,
77
+ rerender = _renderHook2.rerender;
78
+ result.current.innerRef.current = createMeasuredNode(220);
79
+ rerender({
80
+ isOpen: true
81
+ });
82
+ expect(result.current.height).toBe(220);
83
+ act(function () {
84
+ jest.advanceTimersByTime(REASONING_COLLAPSE_MS);
85
+ });
86
+ expect(result.current.height).toBe('auto');
87
+ jest.useRealTimers();
88
+ });
89
+ });
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhY3QiLCJyZW5kZXJIb29rIiwiUkVBU09OSU5HX0NPTExBUFNFX01TIiwidXNlQ29sbGFwc2libGVIZWlnaHQiLCJjcmVhdGVNZWFzdXJlZE5vZGUiLCJzY3JvbGxIZWlnaHQiLCJub2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJ2YWx1ZSIsImRlc2NyaWJlIiwib3JpZ2luYWxNYXRjaE1lZGlhIiwid2luZG93IiwibWF0Y2hNZWRpYSIsImJlZm9yZUVhY2giLCJqZXN0IiwiZm4iLCJtb2NrSW1wbGVtZW50YXRpb24iLCJtYXRjaGVzIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCIsImFmdGVyRWFjaCIsIml0IiwiY2xvc2VkIiwiZXhwZWN0IiwicmVzdWx0IiwiY3VycmVudCIsImhlaWdodCIsInRvQmUiLCJvcGVuZWQiLCJyYWZDYWxsYmFja3MiLCJzcHlPbiIsImNiIiwicHVzaCIsImxlbmd0aCIsIl9yZW5kZXJIb29rIiwiX3JlZiIsImlzT3BlbiIsImluaXRpYWxQcm9wcyIsInJlcmVuZGVyIiwiaW5uZXJSZWYiLCJmb3JFYWNoIiwidXNlRmFrZVRpbWVycyIsIl9yZW5kZXJIb29rMiIsIl9yZWYyIiwiYWR2YW5jZVRpbWVyc0J5VGltZSIsInVzZVJlYWxUaW1lcnMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9SZWFzb25pbmdCbG9jay91c2VDb2xsYXBzaWJsZUhlaWdodC5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjdCwgcmVuZGVySG9vayB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnXG5pbXBvcnQgeyBSRUFTT05JTkdfQ09MTEFQU0VfTVMsIHVzZUNvbGxhcHNpYmxlSGVpZ2h0IH0gZnJvbSAnLi91c2VDb2xsYXBzaWJsZUhlaWdodCdcblxuY29uc3QgY3JlYXRlTWVhc3VyZWROb2RlID0gKHNjcm9sbEhlaWdodDogbnVtYmVyKTogSFRNTERpdkVsZW1lbnQgPT4ge1xuICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsICdzY3JvbGxIZWlnaHQnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHNjcm9sbEhlaWdodCB9KVxuICByZXR1cm4gbm9kZVxufVxuXG5kZXNjcmliZSgndXNlQ29sbGFwc2libGVIZWlnaHQnLCAoKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsTWF0Y2hNZWRpYSA9IHdpbmRvdy5tYXRjaE1lZGlhXG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgd2luZG93Lm1hdGNoTWVkaWEgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgICBtYXRjaGVzOiBmYWxzZSxcbiAgICAgIGFkZExpc3RlbmVyOiBqZXN0LmZuKCksXG4gICAgICByZW1vdmVMaXN0ZW5lcjogamVzdC5mbigpLFxuICAgICAgYWRkRXZlbnRMaXN0ZW5lcjogamVzdC5mbigpLFxuICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogamVzdC5mbigpLFxuICAgICAgZGlzcGF0Y2hFdmVudDogamVzdC5mbigpLFxuICAgIH0pKVxuICB9KVxuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgd2luZG93Lm1hdGNoTWVkaWEgPSBvcmlnaW5hbE1hdGNoTWVkaWFcbiAgfSlcblxuICBpdCgnc3RhcnRzIGNsb3NlZCBhdCAwIGFuZCBvcGVuIGF0IGF1dG8nLCAoKSA9PiB7XG4gICAgY29uc3QgY2xvc2VkID0gcmVuZGVySG9vaygoKSA9PiB1c2VDb2xsYXBzaWJsZUhlaWdodChmYWxzZSkpXG4gICAgZXhwZWN0KGNsb3NlZC5yZXN1bHQuY3VycmVudC5oZWlnaHQpLnRvQmUoMClcblxuICAgIGNvbnN0IG9wZW5lZCA9IHJlbmRlckhvb2soKCkgPT4gdXNlQ29sbGFwc2libGVIZWlnaHQodHJ1ZSkpXG4gICAgZXhwZWN0KG9wZW5lZC5yZXN1bHQuY3VycmVudC5oZWlnaHQpLnRvQmUoJ2F1dG8nKVxuICB9KVxuXG4gIGl0KCdsb2NrcyB0aGUgbWVhc3VyZWQgaGVpZ2h0IGFuZCB0aGVuIGNvbGxhcHNlcyB0byAwJywgKCkgPT4ge1xuICAgIGNvbnN0IHJhZkNhbGxiYWNrczogQXJyYXk8KHRpbWU6IG51bWJlcikgPT4gdm9pZD4gPSBbXVxuICAgIGplc3Quc3B5T24od2luZG93LCAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJykubW9ja0ltcGxlbWVudGF0aW9uKGNiID0+IHtcbiAgICAgIHJhZkNhbGxiYWNrcy5wdXNoKGNiKVxuICAgICAgcmV0dXJuIHJhZkNhbGxiYWNrcy5sZW5ndGhcbiAgICB9KVxuXG4gICAgY29uc3QgeyByZXN1bHQsIHJlcmVuZGVyIH0gPSByZW5kZXJIb29rKCh7IGlzT3BlbiB9KSA9PiB1c2VDb2xsYXBzaWJsZUhlaWdodChpc09wZW4pLCB7XG4gICAgICBpbml0aWFsUHJvcHM6IHsgaXNPcGVuOiB0cnVlIH0sXG4gICAgfSlcbiAgICByZXN1bHQuY3VycmVudC5pbm5lclJlZi5jdXJyZW50ID0gY3JlYXRlTWVhc3VyZWROb2RlKDE4MClcblxuICAgIHJlcmVuZGVyKHsgaXNPcGVuOiBmYWxzZSB9KVxuICAgIGV4cGVjdChyZXN1bHQuY3VycmVudC5oZWlnaHQpLnRvQmUoMTgwKVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHJhZkNhbGxiYWNrcy5mb3JFYWNoKGNiID0+IGNiKDApKVxuICAgIH0pXG4gICAgZXhwZWN0KHJlc3VsdC5jdXJyZW50LmhlaWdodCkudG9CZSgwKVxuICB9KVxuXG4gIGl0KCdtZWFzdXJlcyB0aGUgY29udGVudCB3aGVuIG9wZW5pbmcgYW5kIHJlbGVhc2VzIHRvIGF1dG8gYWZ0ZXIgdGhlIHRyYW5zaXRpb24nLCAoKSA9PiB7XG4gICAgamVzdC51c2VGYWtlVGltZXJzKClcbiAgICBjb25zdCB7IHJlc3VsdCwgcmVyZW5kZXIgfSA9IHJlbmRlckhvb2soKHsgaXNPcGVuIH0pID0+IHVzZUNvbGxhcHNpYmxlSGVpZ2h0KGlzT3BlbiksIHtcbiAgICAgIGluaXRpYWxQcm9wczogeyBpc09wZW46IGZhbHNlIH0sXG4gICAgfSlcbiAgICByZXN1bHQuY3VycmVudC5pbm5lclJlZi5jdXJyZW50ID0gY3JlYXRlTWVhc3VyZWROb2RlKDIyMClcblxuICAgIHJlcmVuZGVyKHsgaXNPcGVuOiB0cnVlIH0pXG4gICAgZXhwZWN0KHJlc3VsdC5jdXJyZW50LmhlaWdodCkudG9CZSgyMjApXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKFJFQVNPTklOR19DT0xMQVBTRV9NUylcbiAgICB9KVxuICAgIGV4cGVjdChyZXN1bHQuY3VycmVudC5oZWlnaHQpLnRvQmUoJ2F1dG8nKVxuICAgIGplc3QudXNlUmVhbFRpbWVycygpXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxHQUFHLEVBQUVDLFVBQVUsUUFBUSx3QkFBd0I7QUFDeEQsU0FBU0MscUJBQXFCLEVBQUVDLG9CQUFvQixRQUFRLHdCQUF3QjtBQUVwRixJQUFNQyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFJQyxZQUFvQixFQUFxQjtFQUNuRSxJQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLEtBQUssQ0FBQztFQUMxQ0MsTUFBTSxDQUFDQyxjQUFjLENBQUNKLElBQUksRUFBRSxjQUFjLEVBQUU7SUFBRUssWUFBWSxFQUFFLElBQUk7SUFBRUMsS0FBSyxFQUFFUDtFQUFhLENBQUMsQ0FBQztFQUN4RixPQUFPQyxJQUFJO0FBQ2IsQ0FBQztBQUVETyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsWUFBTTtFQUNyQyxJQUFNQyxrQkFBa0IsR0FBR0MsTUFBTSxDQUFDQyxVQUFVO0VBRTVDQyxVQUFV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
@@ -0,0 +1,107 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import { fireEvent, renderWithProviders, screen } from '../../../test/test-utils';
5
+ import { SkillsDropdown } from './SkillsDropdown';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ var skill = function skill(overrides) {
8
+ return _objectSpread({
9
+ id: 'sk1',
10
+ name: 'Resumir',
11
+ description: 'Resume briefs',
12
+ content: 'Resume el brief',
13
+ access_type: 'only_me'
14
+ }, overrides);
15
+ };
16
+ var skills = [skill({
17
+ id: 'sk1',
18
+ name: 'Resumir'
19
+ }), skill({
20
+ id: 'sk2',
21
+ name: 'Traducir',
22
+ description: ''
23
+ })];
24
+ describe('SkillsDropdown', function () {
25
+ var onSelect = jest.fn();
26
+ var onCreate = jest.fn();
27
+ var onClose = jest.fn();
28
+ beforeEach(function () {
29
+ onSelect.mockClear();
30
+ onCreate.mockClear();
31
+ onClose.mockClear();
32
+ });
33
+ it('filters by name and selects a skill', function () {
34
+ renderWithProviders(/*#__PURE__*/_jsx(SkillsDropdown, {
35
+ skills: skills,
36
+ query: "trad",
37
+ onSelect: onSelect,
38
+ onClose: onClose,
39
+ bottom: 0,
40
+ left: 0
41
+ }));
42
+ var items = screen.getAllByRole('button');
43
+ expect(items).toHaveLength(1);
44
+ expect(items[0]).toHaveTextContent('#Traducir');
45
+ expect(screen.queryByText('#Resumir')).not.toBeInTheDocument();
46
+ fireEvent.click(items[0]);
47
+ expect(onSelect).toHaveBeenCalledWith(skills[1]);
48
+ });
49
+ it('shows the empty state when nothing matches', function () {
50
+ renderWithProviders(/*#__PURE__*/_jsx(SkillsDropdown, {
51
+ skills: skills,
52
+ query: "zzz",
53
+ onSelect: onSelect,
54
+ onClose: onClose,
55
+ bottom: 0,
56
+ left: 0
57
+ }));
58
+ expect(screen.getByText('mySkills.dropdownEmpty')).toBeInTheDocument();
59
+ });
60
+ it('shows the error state', function () {
61
+ renderWithProviders(/*#__PURE__*/_jsx(SkillsDropdown, {
62
+ skills: skills,
63
+ query: "",
64
+ error: true,
65
+ onSelect: onSelect,
66
+ onClose: onClose,
67
+ bottom: 0,
68
+ left: 0
69
+ }));
70
+ expect(screen.getByText('mySkills.dropdownError')).toBeInTheDocument();
71
+ });
72
+ it('creates a skill from the header action', function () {
73
+ renderWithProviders(/*#__PURE__*/_jsx(SkillsDropdown, {
74
+ skills: skills,
75
+ query: "",
76
+ canCreate: true,
77
+ onCreate: onCreate,
78
+ onSelect: onSelect,
79
+ onClose: onClose,
80
+ bottom: 0,
81
+ left: 0
82
+ }));
83
+ fireEvent.click(screen.getByRole('button', {
84
+ name: 'mySkills.dropdownCreate'
85
+ }));
86
+ expect(onCreate).toHaveBeenCalled();
87
+ });
88
+ it('selects the highlighted skill with Enter and closes on Escape', function () {
89
+ renderWithProviders(/*#__PURE__*/_jsx(SkillsDropdown, {
90
+ skills: skills,
91
+ query: "",
92
+ onSelect: onSelect,
93
+ onClose: onClose,
94
+ bottom: 0,
95
+ left: 0
96
+ }));
97
+ fireEvent.keyDown(document, {
98
+ key: 'Enter'
99
+ });
100
+ expect(onSelect).toHaveBeenCalledWith(skills[0]);
101
+ fireEvent.keyDown(document, {
102
+ key: 'Escape'
103
+ });
104
+ expect(onClose).toHaveBeenCalled();
105
+ });
106
+ });
107
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiU2tpbGxzRHJvcGRvd24iLCJqc3giLCJfanN4Iiwic2tpbGwiLCJvdmVycmlkZXMiLCJfb2JqZWN0U3ByZWFkIiwiaWQiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb250ZW50IiwiYWNjZXNzX3R5cGUiLCJza2lsbHMiLCJkZXNjcmliZSIsIm9uU2VsZWN0IiwiamVzdCIsImZuIiwib25DcmVhdGUiLCJvbkNsb3NlIiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsIml0IiwicXVlcnkiLCJib3R0b20iLCJsZWZ0IiwiaXRlbXMiLCJnZXRBbGxCeVJvbGUiLCJleHBlY3QiLCJ0b0hhdmVMZW5ndGgiLCJ0b0hhdmVUZXh0Q29udGVudCIsInF1ZXJ5QnlUZXh0Iiwibm90IiwidG9CZUluVGhlRG9jdW1lbnQiLCJjbGljayIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiZ2V0QnlUZXh0IiwiZXJyb3IiLCJjYW5DcmVhdGUiLCJnZXRCeVJvbGUiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwia2V5RG93biIsImRvY3VtZW50Iiwia2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvU2tpbGxzRHJvcGRvd24vU2tpbGxzRHJvcGRvd24uc3BlYy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmlyZUV2ZW50LCByZW5kZXJXaXRoUHJvdmlkZXJzLCBzY3JlZW4gfSBmcm9tICcuLi8uLi8uLi90ZXN0L3Rlc3QtdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFNraWxsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyBTa2lsbHNEcm9wZG93biB9IGZyb20gJy4vU2tpbGxzRHJvcGRvd24nXG5cbmNvbnN0IHNraWxsID0gKG92ZXJyaWRlczogUGFydGlhbDxTa2lsbD4pOiBTa2lsbCA9PiAoe1xuICBpZDogJ3NrMScsXG4gIG5hbWU6ICdSZXN1bWlyJyxcbiAgZGVzY3JpcHRpb246ICdSZXN1bWUgYnJpZWZzJyxcbiAgY29udGVudDogJ1Jlc3VtZSBlbCBicmllZicsXG4gIGFjY2Vzc190eXBlOiAnb25seV9tZScsXG4gIC4uLm92ZXJyaWRlcyxcbn0pXG5cbmNvbnN0IHNraWxscyA9IFtza2lsbCh7IGlkOiAnc2sxJywgbmFtZTogJ1Jlc3VtaXInIH0pLCBza2lsbCh7IGlkOiAnc2syJywgbmFtZTogJ1RyYWR1Y2lyJywgZGVzY3JpcHRpb246ICcnIH0pXVxuXG5kZXNjcmliZSgnU2tpbGxzRHJvcGRvd24nLCAoKSA9PiB7XG4gIGNvbnN0IG9uU2VsZWN0ID0gamVzdC5mbigpXG4gIGNvbnN0IG9uQ3JlYXRlID0gamVzdC5mbigpXG4gIGNvbnN0IG9uQ2xvc2UgPSBqZXN0LmZuKClcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvblNlbGVjdC5tb2NrQ2xlYXIoKVxuICAgIG9uQ3JlYXRlLm1vY2tDbGVhcigpXG4gICAgb25DbG9zZS5tb2NrQ2xlYXIoKVxuICB9KVxuXG4gIGl0KCdmaWx0ZXJzIGJ5IG5hbWUgYW5kIHNlbGVjdHMgYSBza2lsbCcsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPFNraWxsc0Ryb3Bkb3duIHNraWxscz17c2tpbGxzfSBxdWVyeT1cInRyYWRcIiBvblNlbGVjdD17b25TZWxlY3R9IG9uQ2xvc2U9e29uQ2xvc2V9IGJvdHRvbT17MH0gbGVmdD17MH0gLz5cbiAgICApXG5cbiAgICBjb25zdCBpdGVtcyA9IHNjcmVlbi5nZXRBbGxCeVJvbGUoJ2J1dHRvbicpXG4gICAgZXhwZWN0KGl0ZW1zKS50b0hhdmVMZW5ndGgoMSlcbiAgICBleHBlY3QoaXRlbXNbMF0pLnRvSGF2ZVRleHRDb250ZW50KCcjVHJhZHVjaXInKVxuICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVRleHQoJyNSZXN1bWlyJykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpXG5cbiAgICBmaXJlRXZlbnQuY2xpY2soaXRlbXNbMF0pXG4gICAgZXhwZWN0KG9uU2VsZWN0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChza2lsbHNbMV0pXG4gIH0pXG5cbiAgaXQoJ3Nob3dzIHRoZSBlbXB0eSBzdGF0ZSB3aGVuIG5vdGhpbmcgbWF0Y2hlcycsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPFNraWxsc0Ryb3Bkb3duIHNraWxscz17c2tpbGxzfSBxdWVyeT1cInp6elwiIG9uU2VsZWN0PXtvblNlbGVjdH0gb25DbG9zZT17b25DbG9zZX0gYm90dG9tPXswfSBsZWZ0PXswfSAvPlxuICAgIClcblxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdteVNraWxscy5kcm9wZG93bkVtcHR5JykpLnRvQmVJblRoZURvY3VtZW50KClcbiAgfSlcblxuICBpdCgnc2hvd3MgdGhlIGVycm9yIHN0YXRlJywgKCkgPT4ge1xuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoXG4gICAgICA8U2tpbGxzRHJvcGRvd24gc2tpbGxzPXtza2lsbHN9IHF1ZXJ5PVwiXCIgZXJyb3Igb25TZWxlY3Q9e29uU2VsZWN0fSBvbkNsb3NlPXtvbkNsb3NlfSBib3R0b209ezB9IGxlZnQ9ezB9IC8+XG4gICAgKVxuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ215U2tpbGxzLmRyb3Bkb3duRXJyb3InKSkudG9CZUluVGhlRG9jdW1lbnQoKVxuICB9KVxuXG4gIGl0KCdjcmVhdGVzIGEgc2tpbGwgZnJvbSB0aGUgaGVhZGVyIGFjdGlvbicsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPFNraWxsc0Ryb3Bkb3duXG4gICAgICAgIHNraWxscz17c2tpbGxzfVxuICAgICAgICBxdWVyeT1cIlwiXG4gICAgICAgIGNhbkNyZWF0ZVxuICAgICAgICBvbkNyZWF0ZT17b25DcmVhdGV9XG4gICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgYm90dG9tPXswfVxuICAgICAgICBsZWZ0PXswfVxuICAgICAgLz5cbiAgICApXG5cbiAgICBmaXJlRXZlbnQuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnbXlTa2lsbHMuZHJvcGRvd25DcmVhdGUnIH0pKVxuICAgIGV4cGVjdChvbkNyZWF0ZSkudG9IYXZlQmVlbkNhbGxlZCgpXG4gIH0pXG5cbiAgaXQoJ3NlbGVjdHMgdGhlIGhpZ2hsaWdodGVkIHNraWxsIHdpdGggRW50ZXIgYW5kIGNsb3NlcyBvbiBFc2NhcGUnLCAoKSA9PiB7XG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxTa2lsbHNEcm9wZG93biBza2lsbHM9e3NraWxsc30gcXVlcnk9XCJcIiBvblNlbGVjdD17b25TZWxlY3R9IG9uQ2xvc2U9e29uQ2xvc2V9IGJvdHRvbT17MH0gbGVmdD17MH0gLz5cbiAgICApXG5cbiAgICBmaXJlRXZlbnQua2V5RG93bihkb2N1bWVudCwgeyBrZXk6ICdFbnRlcicgfSlcbiAgICBleHBlY3Qob25TZWxlY3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHNraWxsc1swXSlcblxuICAgIGZpcmVFdmVudC5rZXlEb3duKGRvY3VtZW50LCB7IGtleTogJ0VzY2FwZScgfSlcbiAgICBleHBlY3Qob25DbG9zZSkudG9IYXZlQmVlbkNhbGxlZCgpXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxTQUFTLEVBQUVDLG1CQUFtQixFQUFFQyxNQUFNLFFBQVEsMEJBQTBCO0FBRWpGLFNBQVNDLGNBQWMsUUFBUSxrQkFBa0I7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUE7QUFFakQsSUFBTUMsS0FBSyxHQUFHLFNBQVJBLEtBQUtBLENBQUlDLFNBQXlCO0VBQUEsT0FBQUMsYUFBQTtJQUN0Q0MsRUFBRSxFQUFFLEtBQUs7SUFDVEMsSUFBSSxFQUFFLFNBQVM7SUFDZkMsV0FBVyxFQUFFLGVBQWU7SUFDNUJDLE9BQU8sRUFBRSxpQkFBaUI7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
@@ -0,0 +1,85 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import { fireEvent, renderWithProviders, screen } from '../../../test/test-utils';
5
+ import { SlashCommandDropdown } from './SlashCommandDropdown';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ var action = function action(overrides) {
8
+ return _objectSpread({
9
+ id: '1',
10
+ title: 'Crear tarea',
11
+ subtitle: 'Nueva tarea',
12
+ prompt: 'p',
13
+ language: null,
14
+ category: 'tasks'
15
+ }, overrides);
16
+ };
17
+ var commands = [action({
18
+ id: 'task',
19
+ title: 'Crear tarea',
20
+ category: 'tasks'
21
+ }), action({
22
+ id: 'hours',
23
+ title: 'Cargar horas',
24
+ subtitle: 'Esta semana',
25
+ category: 'hours'
26
+ })];
27
+ describe('SlashCommandDropdown', function () {
28
+ var onSelect = jest.fn();
29
+ var onClose = jest.fn();
30
+ beforeEach(function () {
31
+ onSelect.mockClear();
32
+ onClose.mockClear();
33
+ });
34
+ it('filters commands by query and selects one', function () {
35
+ renderWithProviders(/*#__PURE__*/_jsx(SlashCommandDropdown, {
36
+ commands: commands,
37
+ query: "horas",
38
+ onSelect: onSelect,
39
+ onClose: onClose,
40
+ bottom: 0,
41
+ left: 0
42
+ }));
43
+ var hoursButton = screen.getByRole('button', {
44
+ name: /Cargar horas/
45
+ });
46
+ expect(hoursButton).toBeInTheDocument();
47
+ expect(screen.queryByRole('button', {
48
+ name: /Crear tarea/
49
+ })).not.toBeInTheDocument();
50
+ fireEvent.click(hoursButton);
51
+ expect(onSelect).toHaveBeenCalledWith(expect.objectContaining({
52
+ id: 'hours'
53
+ }));
54
+ });
55
+ it('closes on Escape and outside click', function () {
56
+ renderWithProviders(/*#__PURE__*/_jsx(SlashCommandDropdown, {
57
+ commands: commands,
58
+ query: "",
59
+ onSelect: onSelect,
60
+ onClose: onClose,
61
+ bottom: 0,
62
+ left: 0
63
+ }));
64
+ fireEvent.keyDown(document, {
65
+ key: 'Escape'
66
+ });
67
+ expect(onClose).toHaveBeenCalled();
68
+ onClose.mockClear();
69
+ fireEvent.mouseDown(document.body);
70
+ expect(onClose).toHaveBeenCalled();
71
+ });
72
+ it('returns null when nothing matches', function () {
73
+ var _renderWithProviders = renderWithProviders(/*#__PURE__*/_jsx(SlashCommandDropdown, {
74
+ commands: commands,
75
+ query: "zzz",
76
+ onSelect: onSelect,
77
+ onClose: onClose,
78
+ bottom: 0,
79
+ left: 0
80
+ })),
81
+ container = _renderWithProviders.container;
82
+ expect(container).toBeEmptyDOMElement();
83
+ });
84
+ });
85
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiU2xhc2hDb21tYW5kRHJvcGRvd24iLCJqc3giLCJfanN4IiwiYWN0aW9uIiwib3ZlcnJpZGVzIiwiX29iamVjdFNwcmVhZCIsImlkIiwidGl0bGUiLCJzdWJ0aXRsZSIsInByb21wdCIsImxhbmd1YWdlIiwiY2F0ZWdvcnkiLCJjb21tYW5kcyIsImRlc2NyaWJlIiwib25TZWxlY3QiLCJqZXN0IiwiZm4iLCJvbkNsb3NlIiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsIml0IiwicXVlcnkiLCJib3R0b20iLCJsZWZ0IiwiaG91cnNCdXR0b24iLCJnZXRCeVJvbGUiLCJuYW1lIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJxdWVyeUJ5Um9sZSIsIm5vdCIsImNsaWNrIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJvYmplY3RDb250YWluaW5nIiwia2V5RG93biIsImRvY3VtZW50Iiwia2V5IiwidG9IYXZlQmVlbkNhbGxlZCIsIm1vdXNlRG93biIsImJvZHkiLCJfcmVuZGVyV2l0aFByb3ZpZGVycyIsImNvbnRhaW5lciIsInRvQmVFbXB0eURPTUVsZW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9TbGFzaENvbW1hbmREcm9wZG93bi9TbGFzaENvbW1hbmREcm9wZG93bi5zcGVjLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJlRXZlbnQsIHJlbmRlcldpdGhQcm92aWRlcnMsIHNjcmVlbiB9IGZyb20gJy4uLy4uLy4uL3Rlc3QvdGVzdC11dGlscydcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQWN0aW9uJ1xuaW1wb3J0IHsgU2xhc2hDb21tYW5kRHJvcGRvd24gfSBmcm9tICcuL1NsYXNoQ29tbWFuZERyb3Bkb3duJ1xuXG5jb25zdCBhY3Rpb24gPSAob3ZlcnJpZGVzOiBQYXJ0aWFsPEFjdGlvbj4pOiBBY3Rpb24gPT4gKHtcbiAgaWQ6ICcxJyxcbiAgdGl0bGU6ICdDcmVhciB0YXJlYScsXG4gIHN1YnRpdGxlOiAnTnVldmEgdGFyZWEnLFxuICBwcm9tcHQ6ICdwJyxcbiAgbGFuZ3VhZ2U6IG51bGwsXG4gIGNhdGVnb3J5OiAndGFza3MnLFxuICAuLi5vdmVycmlkZXMsXG59KVxuXG5jb25zdCBjb21tYW5kcyA9IFtcbiAgYWN0aW9uKHsgaWQ6ICd0YXNrJywgdGl0bGU6ICdDcmVhciB0YXJlYScsIGNhdGVnb3J5OiAndGFza3MnIH0pLFxuICBhY3Rpb24oeyBpZDogJ2hvdXJzJywgdGl0bGU6ICdDYXJnYXIgaG9yYXMnLCBzdWJ0aXRsZTogJ0VzdGEgc2VtYW5hJywgY2F0ZWdvcnk6ICdob3VycycgfSksXG5dXG5cbmRlc2NyaWJlKCdTbGFzaENvbW1hbmREcm9wZG93bicsICgpID0+IHtcbiAgY29uc3Qgb25TZWxlY3QgPSBqZXN0LmZuKClcbiAgY29uc3Qgb25DbG9zZSA9IGplc3QuZm4oKVxuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uU2VsZWN0Lm1vY2tDbGVhcigpXG4gICAgb25DbG9zZS5tb2NrQ2xlYXIoKVxuICB9KVxuXG4gIGl0KCdmaWx0ZXJzIGNvbW1hbmRzIGJ5IHF1ZXJ5IGFuZCBzZWxlY3RzIG9uZScsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPFNsYXNoQ29tbWFuZERyb3Bkb3duXG4gICAgICAgIGNvbW1hbmRzPXtjb21tYW5kc31cbiAgICAgICAgcXVlcnk9XCJob3Jhc1wiXG4gICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgYm90dG9tPXswfVxuICAgICAgICBsZWZ0PXswfVxuICAgICAgLz5cbiAgICApXG5cbiAgICBjb25zdCBob3Vyc0J1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL0NhcmdhciBob3Jhcy8gfSlcbiAgICBleHBlY3QoaG91cnNCdXR0b24pLnRvQmVJblRoZURvY3VtZW50KClcbiAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9DcmVhciB0YXJlYS8gfSkpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpXG5cbiAgICBmaXJlRXZlbnQuY2xpY2soaG91cnNCdXR0b24pXG4gICAgZXhwZWN0KG9uU2VsZWN0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IGlkOiAnaG91cnMnIH0pKVxuICB9KVxuXG4gIGl0KCdjbG9zZXMgb24gRXNjYXBlIGFuZCBvdXRzaWRlIGNsaWNrJywgKCkgPT4ge1xuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoXG4gICAgICA8U2xhc2hDb21tYW5kRHJvcGRvd24gY29tbWFuZHM9e2NvbW1hbmRzfSBxdWVyeT1cIlwiIG9uU2VsZWN0PXtvblNlbGVjdH0gb25DbG9zZT17b25DbG9zZX0gYm90dG9tPXswfSBsZWZ0PXswfSAvPlxuICAgIClcblxuICAgIGZpcmVFdmVudC5rZXlEb3duKGRvY3VtZW50LCB7IGtleTogJ0VzY2FwZScgfSlcbiAgICBleHBlY3Qob25DbG9zZSkudG9IYXZlQmVlbkNhbGxlZCgpXG5cbiAgICBvbkNsb3NlLm1vY2tDbGVhcigpXG4gICAgZmlyZUV2ZW50Lm1vdXNlRG93bihkb2N1bWVudC5ib2R5KVxuICAgIGV4cGVjdChvbkNsb3NlKS50b0hhdmVCZWVuQ2FsbGVkKClcbiAgfSlcblxuICBpdCgncmV0dXJucyBudWxsIHdoZW4gbm90aGluZyBtYXRjaGVzJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPFNsYXNoQ29tbWFuZERyb3Bkb3duIGNvbW1hbmRzPXtjb21tYW5kc30gcXVlcnk9XCJ6enpcIiBvblNlbGVjdD17b25TZWxlY3R9IG9uQ2xvc2U9e29uQ2xvc2V9IGJvdHRvbT17MH0gbGVmdD17MH0gLz5cbiAgICApXG5cbiAgICBleHBlY3QoY29udGFpbmVyKS50b0JlRW1wdHlET01FbGVtZW50KClcbiAgfSlcbn0pXG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQVNBLFNBQVMsRUFBRUMsbUJBQW1CLEVBQUVDLE1BQU0sUUFBUSwwQkFBMEI7QUFFakYsU0FBU0Msb0JBQW9CLFFBQVEsd0JBQXdCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBRTdELElBQU1DLE1BQU0sR0FBRyxTQUFUQSxNQUFNQSxDQUFJQyxTQUEwQjtFQUFBLE9BQUFDLGFBQUE7SUFDeENDLEVBQUUsRUFBRSxHQUFHO0lBQ1BDLEtBQUssRUFBRSxhQUFhO0lBQ3BCQyxRQUFRLEVBQUUsYUFBYTtJQUN2QkMsTUFBTSxFQUFFLEdBQUc7SUFDWEMsUUFBUSxFQUFFLElBQUk7SUFDZEMsUUFBUSxFQUFFO0VBQU8sR0FDZFAsU0FBUztBQUFBLENBQ1o7QUFFRixJQUFNUSxRQUFRLEdBQUcsQ0FDZlQsTUFBTSxDQUFDO0VBQUVHLEVBQUUsRUFBRSxNQUFNO0VBQUVDLEtBQUssRUFBRSxhQUFhO0VBQUVJLFFBQVEsRUFBRTtBQUFRLENBQUMsQ0FBQyxFQUMvRFIsTUFBTSxDQUFDO0VBQUVHLEVBQUUsRUFBRSxPQUFPO0VBQUVDLEtBQUssRUFBRSxjQUFjO0VBQUVDLFFBQVEsRUFBRSxhQUFhO0VBQUVHLFFBQVEsRUFBRTtBQUFRLENBQUMsQ0FBQyxDQUMzRjtBQUVERSxRQUFRLENBQUMsc0JBQXNCLEVBQUUsWUFBTTtFQUNyQyxJQUFNQyxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7RUFDMUIsSUFBTUMsT0FBTyxHQUFHRixJQUFJLENBQUNDLEVBQUUsQ0FBQyxDQUFDO0VBRXpCRSxVQUFVLENBQUMsWUFBTTtJQUNmSixRQUFRLENBQUNLLFNBQVMsQ0FBQyxDQUFDO0lBQ3BCRixPQUFPLENBQUNFLFNBQVMsQ0FBQyxDQUFDO0VBQ3JCLENBQUMsQ0FBQztFQUVGQyxFQUFFLENBQUMsMkNBQTJDLEVBQUUsWUFBTTtJQUNwRHRCLG1CQUFtQixjQUNqQkksSUFBQSxDQUFDRixvQkFBb0I7TUFDbkJZLFFBQVEsRUFBRUEsUUFBUztNQUNuQlMsS0FBSyxFQUFDLE9BQU87TUFDYlAsUUFBUSxFQUFFQSxRQUFTO01BQ25CRyxPQUFPLEVBQUVBLE9BQVE7TUFDakJLLE1BQU0sRUFBRSxDQUFFO01BQ1ZDLElBQUksRUFBRTtJQUFFLENBQ1QsQ0FDSCxDQUFDO0lBRUQsSUFBTUMsV0FBVyxHQUFHekIsTUFBTSxDQUFDMEIsU0FBUyxDQUFDLFFBQVEsRUFBRTtNQUFFQyxJQUFJLEVBQUU7SUFBZSxDQUFDLENBQUM7SUFDeEVDLE1BQU0sQ0FBQ0gsV0FBVyxDQUFDLENBQUNJLGlCQUFpQixDQUFDLENBQUM7SUFDdkNELE1BQU0sQ0FBQzVCLE1BQU0sQ0FBQzhCLFdBQVcsQ0FBQyxRQUFRLEVBQUU7TUFBRUgsSUFBSSxFQUFFO0lBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ksR0FBRyxDQUFDRixpQkFBaUIsQ0FBQyxDQUFDO0lBRXJGL0IsU0FBUyxDQUFDa0MsS0FBSyxDQUFDUCxXQUFXLENBQUM7SUFDNUJHLE1BQU0sQ0FBQ2IsUUFBUSxDQUFDLENBQUNrQixvQkFBb0IsQ0FBQ0wsTUFBTSxDQUFDTSxnQkFBZ0IsQ0FBQztNQUFFM0IsRUFBRSxFQUFFO0lBQVEsQ0FBQyxDQUFDLENBQUM7RUFDakYsQ0FBQyxDQUFDO0VBRUZjLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFNO0lBQzdDdEIsbUJBQW1CLGNBQ2pCSSxJQUFBLENBQUNGLG9CQUFvQjtNQUFDWSxRQUFRLEVBQUVBLFFBQVM7TUFBQ1MsS0FBSyxFQUFDLEVBQUU7TUFBQ1AsUUFBUSxFQUFFQSxRQUFTO01BQUNHLE9BQU8sRUFBRUEsT0FBUTtNQUFDSyxNQUFNLEVBQUUsQ0FBRTtNQUFDQyxJQUFJLEVBQUU7SUFBRSxDQUFFLENBQ2hILENBQUM7SUFFRDFCLFNBQVMsQ0FBQ3FDLE9BQU8sQ0FBQ0MsUUFBUSxFQUFFO01BQUVDLEdBQUcsRUFBRTtJQUFTLENBQUMsQ0FBQztJQUM5Q1QsTUFBTSxDQUFDVixPQUFPLENBQUMsQ0FBQ29CLGdCQUFnQixDQUFDLENBQUM7SUFFbENwQixPQUFPLENBQUNFLFNBQVMsQ0FBQyxDQUFDO0lBQ25CdEIsU0FBUyxDQUFDeUMsU0FBUyxDQUFDSCxRQUFRLENBQUNJLElBQUksQ0FBQztJQUNsQ1osTUFBTSxDQUFDVixPQUFPLENBQUMsQ0FBQ29CLGdCQUFnQixDQUFDLENBQUM7RUFDcEMsQ0FBQyxDQUFDO0VBRUZqQixFQUFFLENBQUMsbUNBQW1DLEVBQUUsWUFBTTtJQUM1QyxJQUFBb0Isb0JBQUEsR0FBc0IxQyxtQkFBbUIsY0FDdkNJLElBQUEsQ0FBQ0Ysb0JBQW9CO1FBQUNZLFFBQVEsRUFBRUEsUUFBUztRQUFDUyxLQUFLLEVBQUMsS0FBSztRQUFDUCxRQUFRLEVBQUVBLFFBQVM7UUFBQ0csT0FBTyxFQUFFQSxPQUFRO1FBQUNLLE1BQU0sRUFBRSxDQUFFO1FBQUNDLElBQUksRUFBRTtNQUFFLENBQUUsQ0FDbkgsQ0FBQztNQUZPa0IsU0FBUyxHQUFBRCxvQkFBQSxDQUFUQyxTQUFTO0lBSWpCZCxNQUFNLENBQUNjLFNBQVMsQ0FBQyxDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDO0VBQ3pDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==