@projectcor/maia-components 2.29.0 → 2.30.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 (669) hide show
  1. package/CHANGELOG.md +656 -0
  2. package/lib/App.js +55 -0
  3. package/lib/components/atoms/ActionableButton.js +60 -0
  4. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +89 -0
  5. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +21 -0
  6. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.js +9 -0
  7. package/lib/components/atoms/AgentActivityIndicator/index.js +2 -0
  8. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +209 -0
  9. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +93 -0
  10. package/lib/components/atoms/ApprovalBox/index.js +2 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCard.js +218 -0
  12. package/lib/components/atoms/AttachmentCard/AttachmentCard.styles.js +52 -0
  13. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +448 -0
  14. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.styles.js +58 -0
  15. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +55 -0
  16. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.styles.js +14 -0
  17. package/lib/components/atoms/AttachmentCard/index.js +4 -0
  18. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +442 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.styles.js +119 -0
  20. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +222 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +313 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +128 -0
  23. package/lib/components/atoms/AttachmentPreviewModal/index.js +2 -0
  24. package/lib/components/atoms/Backdrop/Backdrop.js +17 -0
  25. package/lib/components/atoms/Backdrop/Backdrop.styles.js +9 -0
  26. package/lib/components/atoms/Backdrop/index.js +2 -0
  27. package/lib/components/atoms/CardItem.js +7 -0
  28. package/lib/components/atoms/CardMenu/CardMenu.js +131 -0
  29. package/lib/components/atoms/CardMenu/index.js +2 -0
  30. package/lib/components/atoms/CardMenu/styles.js +21 -0
  31. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +77 -0
  32. package/lib/components/atoms/ChatClientSelector/index.js +2 -0
  33. package/lib/components/atoms/ChatDisclaimerMessage/ChatDisclaimerMessage.js +9 -0
  34. package/lib/components/atoms/ChatDisclaimerMessage/index.js +2 -0
  35. package/lib/components/atoms/ChatDisclaimerMessage/styles.js +6 -0
  36. package/lib/components/atoms/Checkbox/Checkbox.js +34 -0
  37. package/lib/components/atoms/Checkbox/index.js +2 -0
  38. package/lib/components/atoms/Checkbox/styles.js +39 -0
  39. package/lib/components/atoms/Chip/Chip.js +150 -0
  40. package/lib/components/atoms/Chip/index.js +2 -0
  41. package/lib/components/atoms/Chip/styles.js +43 -0
  42. package/lib/components/atoms/ChipLlm/ChipLlm.js +45 -0
  43. package/lib/components/atoms/ChipLlm/ChipLlm.style.js +21 -0
  44. package/lib/components/atoms/ChipLlm/index.js +2 -0
  45. package/lib/components/atoms/ChipStatus/ChipStatus.interface.js +2 -0
  46. package/lib/components/atoms/ChipStatus/ChipStatus.js +14 -0
  47. package/lib/components/atoms/ChipStatus/ChipStatus.styles.js +27 -0
  48. package/lib/components/atoms/ChipStatus/index.js +2 -0
  49. package/lib/components/atoms/ClearButton.js +6 -0
  50. package/lib/components/atoms/ClientSelector/ClientSelector.js +146 -0
  51. package/lib/components/atoms/ClientSelector/ClientSelector.styles.js +15 -0
  52. package/lib/components/atoms/ClientSelector/index.js +2 -0
  53. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +38 -0
  54. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +188 -0
  55. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
  56. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +445 -0
  57. package/lib/components/atoms/ContextMentionChip/index.js +4 -0
  58. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +533 -0
  59. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +10 -0
  60. package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
  61. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +282 -0
  62. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +148 -0
  63. package/lib/components/atoms/ContextMentionItem/index.js +2 -0
  64. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +290 -0
  65. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +108 -0
  66. package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
  67. package/lib/components/atoms/CopyToClipboard.js +70 -0
  68. package/lib/components/atoms/EditableLabel/EditableLabel.js +110 -0
  69. package/lib/components/atoms/EditableLabel/index.js +2 -0
  70. package/lib/components/atoms/EditableLabel/styles.js +7 -0
  71. package/lib/components/atoms/EmptySearchClients/EmptySearchClients.js +22 -0
  72. package/lib/components/atoms/EmptySearchClients/EmptySearchClients.styles.js +18 -0
  73. package/lib/components/atoms/EmptySearchClients/index.js +2 -0
  74. package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.js +19 -0
  75. package/lib/components/atoms/EmptySearchProjects/EmptySearchProjects.styles.js +15 -0
  76. package/lib/components/atoms/EmptySearchProjects/index.js +2 -0
  77. package/lib/components/atoms/EntitySelector/EntitySelector.js +247 -0
  78. package/lib/components/atoms/EntitySelector/EntitySelector.skeleton.js +38 -0
  79. package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +67 -0
  80. package/lib/components/atoms/EntitySelector/index.js +2 -0
  81. package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.js +14 -0
  82. package/lib/components/atoms/ErrorSearchClients/ErrorSearchClients.styles.js +15 -0
  83. package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.js +14 -0
  84. package/lib/components/atoms/ErrorSearchFaqs/ErrorSearchFaqs.style.js +15 -0
  85. package/lib/components/atoms/ErrorSearchFaqs/index.js +2 -0
  86. package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.js +18 -0
  87. package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.style.js +15 -0
  88. package/lib/components/atoms/ErrorSearchProjects/index.js +2 -0
  89. package/lib/components/atoms/Expand/Expand.js +32 -0
  90. package/lib/components/atoms/Expand/index.js +2 -0
  91. package/lib/components/atoms/Fade/Fade.js +56 -0
  92. package/lib/components/atoms/Fade/index.js +2 -0
  93. package/lib/components/atoms/FeedbackButton/FeedbackButton.js +59 -0
  94. package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +14 -0
  95. package/lib/components/atoms/FeedbackButton/index.js +2 -0
  96. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +138 -0
  97. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.skeleton.js +44 -0
  98. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +43 -0
  99. package/lib/components/atoms/FrequentlyAskedQuestions/index.js +2 -0
  100. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +122 -0
  101. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.skeleton.js +43 -0
  102. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +62 -0
  103. package/lib/components/atoms/FrequentlyUsedActions/index.js +2 -0
  104. package/lib/components/atoms/GoBackButton.js +24 -0
  105. package/lib/components/atoms/HelpButton.js +44 -0
  106. package/lib/components/atoms/IconButton.js +56 -0
  107. package/lib/components/atoms/ImagePreview/ImagePreview.js +96 -0
  108. package/lib/components/atoms/ImagePreview/ImagePreview.styles.js +70 -0
  109. package/lib/components/atoms/Input/CustomInput.interface.js +2 -0
  110. package/lib/components/atoms/Input/CustomInput.js +91 -0
  111. package/lib/components/atoms/Input/CustomInput.styles.js +39 -0
  112. package/lib/components/atoms/Input/index.js +2 -0
  113. package/lib/components/atoms/ListMenuOption/ListMenuOption.js +41 -0
  114. package/lib/components/atoms/ListMenuOption/index.js +2 -0
  115. package/lib/components/atoms/ListMenuOption/styles.js +9 -0
  116. package/lib/components/atoms/Loader.js +41 -0
  117. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.js +11 -0
  118. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.style.js +6 -0
  119. package/lib/components/atoms/LoadingFaqs/index.js +2 -0
  120. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.js +11 -0
  121. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.styles.js +6 -0
  122. package/lib/components/atoms/LoadingSearchClients/index.js +2 -0
  123. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.js +14 -0
  124. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.style.js +10 -0
  125. package/lib/components/atoms/LoadingSearchProjects/index.js +2 -0
  126. package/lib/components/atoms/LoadingText/LoadingText.js +18 -0
  127. package/lib/components/atoms/LoadingText/index.js +2 -0
  128. package/lib/components/atoms/LoadingText/styles.js +7 -0
  129. package/lib/components/atoms/MAIAButton/MAIAButton.js +33 -0
  130. package/lib/components/atoms/MAIAButton/index.js +2 -0
  131. package/lib/components/atoms/MAIAError/MAIAError.js +15 -0
  132. package/lib/components/atoms/MAIAError/index.js +2 -0
  133. package/lib/components/atoms/MAIAInput/MAIAInput.js +1233 -0
  134. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +266 -0
  135. package/lib/components/atoms/MAIAInput/index.js +2 -0
  136. package/lib/components/atoms/MAIAInput/maiaInputLayout.js +25 -0
  137. package/lib/components/atoms/MAIAInput/styles.js +186 -0
  138. package/lib/components/atoms/MAIAMessage/MAIAMessage.interfaces.js +2 -0
  139. package/lib/components/atoms/MAIAMessage/MAIAMessage.js +22 -0
  140. package/lib/components/atoms/MAIAMessage/index.js +2 -0
  141. package/lib/components/atoms/MAIAMessage/styles.js +7 -0
  142. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.config.js +23 -0
  143. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.interfaces.js +2 -0
  144. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.js +51 -0
  145. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.styles.js +26 -0
  146. package/lib/components/atoms/MaiaStreamdown/index.js +2 -0
  147. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.js +18 -0
  148. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +84 -0
  149. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.js +15 -0
  150. package/lib/components/atoms/MaiaWrapper/index.js +3 -0
  151. package/lib/components/atoms/MaiaWrapper/styles.js +21 -0
  152. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.interface.js +2 -0
  153. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.js +84 -0
  154. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.styles.js +53 -0
  155. package/lib/components/atoms/ModalClientAccess/index.js +2 -0
  156. package/lib/components/atoms/ModalInfo/ModalInfo.js +52 -0
  157. package/lib/components/atoms/ModalInfo/ModalInfoContent.js +7 -0
  158. package/lib/components/atoms/ModalInfo/index.js +3 -0
  159. package/lib/components/atoms/ModalInfo/styles.js +7 -0
  160. package/lib/components/atoms/ModalProject/ModalProject.interface.js +2 -0
  161. package/lib/components/atoms/ModalProject/ModalProject.js +112 -0
  162. package/lib/components/atoms/ModalProject/ModalProject.style.js +59 -0
  163. package/lib/components/atoms/ModalProject/index.js +2 -0
  164. package/lib/components/atoms/NextPageLoader.js +33 -0
  165. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.js +28 -0
  166. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +180 -0
  167. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.styles.js +34 -0
  168. package/lib/components/atoms/OnboardingModalButton/index.js +3 -0
  169. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +131 -0
  170. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.styles.js +59 -0
  171. package/lib/components/atoms/OptionAccessibility/index.js +2 -0
  172. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +27 -0
  173. package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +18 -0
  174. package/lib/components/atoms/OptionCorPermission/index.js +2 -0
  175. package/lib/components/atoms/PrimaryButton.js +31 -0
  176. package/lib/components/atoms/ProjectSelector/ProjectSelector.js +77 -0
  177. package/lib/components/atoms/ProjectSelector/ProjectSelector.styles.js +61 -0
  178. package/lib/components/atoms/ProjectSelector/index.js +2 -0
  179. package/lib/components/atoms/SecondaryButton.js +20 -0
  180. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +20 -0
  181. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +20 -0
  182. package/lib/components/atoms/SessionGeneratingDot/index.js +2 -0
  183. package/lib/components/atoms/Skeleton/Skeleton.js +36 -0
  184. package/lib/components/atoms/Skeleton/index.js +2 -0
  185. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
  186. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -0
  187. package/lib/components/atoms/SkillsDropdown/index.js +2 -0
  188. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.js +16 -0
  189. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.styles.js +24 -0
  190. package/lib/components/atoms/SlashCommandChip/buildSlashChipElement.js +18 -0
  191. package/lib/components/atoms/SlashCommandChip/index.js +4 -0
  192. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +210 -0
  193. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +53 -0
  194. package/lib/components/atoms/SlashCommandDropdown/index.js +2 -0
  195. package/lib/components/atoms/Switch/Switch.js +27 -0
  196. package/lib/components/atoms/Switch/Switch.styles.js +22 -0
  197. package/lib/components/atoms/Switch/index.js +2 -0
  198. package/lib/components/atoms/TextArea/CustomTextArea.interface.js +2 -0
  199. package/lib/components/atoms/TextArea/CustomTextArea.js +93 -0
  200. package/lib/components/atoms/TextArea/CustomTextArea.styles.js +25 -0
  201. package/lib/components/atoms/TextArea/TextArea.interfaces.js +2 -0
  202. package/lib/components/atoms/TextArea/TextArea.js +172 -0
  203. package/lib/components/atoms/TextArea/TextArea.styles.js +16 -0
  204. package/lib/components/atoms/TextArea/index.js +2 -0
  205. package/lib/components/atoms/ThirdButton.js +19 -0
  206. package/lib/components/atoms/VideoModal/VideoModal.js +76 -0
  207. package/lib/components/atoms/VideoModal/index.js +2 -0
  208. package/lib/components/atoms/WithAppCfg.js +26 -0
  209. package/lib/components/atoms/WithFeatureValidation.js +23 -0
  210. package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.js +9 -0
  211. package/lib/components/atoms/WrapperCenterIcon/WrapperCenterIcon.styles.js +6 -0
  212. package/lib/components/atoms/WrapperCenterIcon/index.js +2 -0
  213. package/lib/components/atoms/icons/AIIcon.js +23 -0
  214. package/lib/components/atoms/icons/AacFile.js +39 -0
  215. package/lib/components/atoms/icons/AccessibilityIcon.js +42 -0
  216. package/lib/components/atoms/icons/ActionAssignIcon.js +111 -0
  217. package/lib/components/atoms/icons/ActionCalendarIcon.js +112 -0
  218. package/lib/components/atoms/icons/ActionChargeHoursIcon.js +111 -0
  219. package/lib/components/atoms/icons/ActionChatIcon.js +71 -0
  220. package/lib/components/atoms/icons/ActionCreateIcon.js +91 -0
  221. package/lib/components/atoms/icons/ActionCreateReworkIcon.js +39 -0
  222. package/lib/components/atoms/icons/ActionCreateSubtaskIcon.js +37 -0
  223. package/lib/components/atoms/icons/ActionEditIcon.js +39 -0
  224. package/lib/components/atoms/icons/ActionSummaryMessagesIcon.js +88 -0
  225. package/lib/components/atoms/icons/ActionSummaryTaskIcon.js +37 -0
  226. package/lib/components/atoms/icons/ActionTimeBackIcon.js +112 -0
  227. package/lib/components/atoms/icons/AgentMaiaIcon.js +31 -0
  228. package/lib/components/atoms/icons/Brain.js +77 -0
  229. package/lib/components/atoms/icons/CorAccessIcon.js +41 -0
  230. package/lib/components/atoms/icons/CorLogo.js +76 -0
  231. package/lib/components/atoms/icons/CsvFile.js +41 -0
  232. package/lib/components/atoms/icons/DocFile.js +41 -0
  233. package/lib/components/atoms/icons/DocxFile.js +41 -0
  234. package/lib/components/atoms/icons/EmptyClientIllustration.js +67 -0
  235. package/lib/components/atoms/icons/EmptyHistory.js +46 -0
  236. package/lib/components/atoms/icons/EmptySearchIllustration.js +37 -0
  237. package/lib/components/atoms/icons/EmptyState.js +84 -0
  238. package/lib/components/atoms/icons/EmptyStateAgents.js +58 -0
  239. package/lib/components/atoms/icons/ErrorIcon.js +14 -0
  240. package/lib/components/atoms/icons/ErrorSearchIllustration.js +52 -0
  241. package/lib/components/atoms/icons/ErrorState.js +51 -0
  242. package/lib/components/atoms/icons/FaqChevronIcon.js +39 -0
  243. package/lib/components/atoms/icons/FaqsIcon.js +51 -0
  244. package/lib/components/atoms/icons/FlacIcon.js +39 -0
  245. package/lib/components/atoms/icons/FolderIcon.js +29 -0
  246. package/lib/components/atoms/icons/HomeIcon.js +30 -0
  247. package/lib/components/atoms/icons/ImageFile.js +46 -0
  248. package/lib/components/atoms/icons/M4aFile.js +39 -0
  249. package/lib/components/atoms/icons/MAIAIcon.js +20 -0
  250. package/lib/components/atoms/icons/MAIAIsologo.js +65 -0
  251. package/lib/components/atoms/icons/MDFile.js +41 -0
  252. package/lib/components/atoms/icons/MaiaChatLayoutFloatingIcon.js +41 -0
  253. package/lib/components/atoms/icons/MaiaChatLayoutFullscreenIcon.js +41 -0
  254. package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
  255. package/lib/components/atoms/icons/MaiaChatLayoutSidebarIcon.js +41 -0
  256. package/lib/components/atoms/icons/MaiaInputAddIcon.js +42 -0
  257. package/lib/components/atoms/icons/MaiaInputAttachIcon.js +29 -0
  258. package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +33 -0
  259. package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +35 -0
  260. package/lib/components/atoms/icons/MaiaInputMentionIcon.js +44 -0
  261. package/lib/components/atoms/icons/MaiaInputRobotIcon.js +29 -0
  262. package/lib/components/atoms/icons/MaiaInputSendIcon.js +29 -0
  263. package/lib/components/atoms/icons/MaiaInputSlashIcon.js +29 -0
  264. package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +35 -0
  265. package/lib/components/atoms/icons/MaiaSettingsProject.js +111 -0
  266. package/lib/components/atoms/icons/MaiaSettingsProjectV2.js +193 -0
  267. package/lib/components/atoms/icons/MaiaSparkleIcon.js +75 -0
  268. package/lib/components/atoms/icons/MaiaStoreIcon.js +31 -0
  269. package/lib/components/atoms/icons/Mp3File.js +39 -0
  270. package/lib/components/atoms/icons/Mp4File.js +39 -0
  271. package/lib/components/atoms/icons/MyAgentsNavIcon.js +51 -0
  272. package/lib/components/atoms/icons/NewChat.js +29 -0
  273. package/lib/components/atoms/icons/NotionIcon.js +36 -0
  274. package/lib/components/atoms/icons/OgaFile.js +39 -0
  275. package/lib/components/atoms/icons/OggFile.js +39 -0
  276. package/lib/components/atoms/icons/PdfFile.js +39 -0
  277. package/lib/components/atoms/icons/PlusIcon.js +29 -0
  278. package/lib/components/atoms/icons/PptFile.js +47 -0
  279. package/lib/components/atoms/icons/PptxFile.js +49 -0
  280. package/lib/components/atoms/icons/RetryIcon.js +34 -0
  281. package/lib/components/atoms/icons/SkillCreatedByIcon.js +20 -0
  282. package/lib/components/atoms/icons/SkillIcon.js +30 -0
  283. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
  284. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
  285. package/lib/components/atoms/icons/SkillsNavIcon.js +24 -0
  286. package/lib/components/atoms/icons/SubtaskIcon.js +36 -0
  287. package/lib/components/atoms/icons/TaskLinkIcon.js +27 -0
  288. package/lib/components/atoms/icons/TelescopeIcon.js +60 -0
  289. package/lib/components/atoms/icons/TemplateGradientIcon.js +42 -0
  290. package/lib/components/atoms/icons/TextFile.js +41 -0
  291. package/lib/components/atoms/icons/WavFile.js +39 -0
  292. package/lib/components/atoms/icons/WebmFile.js +50 -0
  293. package/lib/components/atoms/icons/XlsFile.js +42 -0
  294. package/lib/components/atoms/icons/XlsxFile.js +42 -0
  295. package/lib/components/atoms/icons/index.js +54 -0
  296. package/lib/components/atoms/index.js +42 -0
  297. package/lib/components/index.js +11 -0
  298. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.interface.js +2 -0
  299. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +236 -0
  300. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +53 -0
  301. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +415 -0
  302. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +152 -0
  303. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +374 -0
  304. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +106 -0
  305. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +92 -0
  306. package/lib/components/molecules/AbmSection/AbmLoaderFiles.styles.js +57 -0
  307. package/lib/components/molecules/AbmSection/index.js +4 -0
  308. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +52 -0
  309. package/lib/components/molecules/ChatAIClientSelector/index.js +2 -0
  310. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +119 -0
  311. package/lib/components/molecules/ChatAIContent/ChatAIContent.skeleton.js +187 -0
  312. package/lib/components/molecules/ChatAIContent/ChatAIContent.styles.js +6 -0
  313. package/lib/components/molecules/ChatAIContent/index.js +2 -0
  314. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +241 -0
  315. package/lib/components/molecules/ChatAIHistory/index.js +2 -0
  316. package/lib/components/molecules/ChatAIHistory/styles.js +22 -0
  317. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +649 -0
  318. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +115 -0
  319. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +95 -0
  320. package/lib/components/molecules/ChatAIHome/index.js +2 -0
  321. package/lib/components/molecules/ChatAIHome/styles.js +335 -0
  322. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +137 -0
  323. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +853 -0
  324. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +47 -0
  325. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +37 -0
  326. package/lib/components/molecules/ChatAIMessages/README.md +101 -0
  327. package/lib/components/molecules/ChatAIMessages/index.js +2 -0
  328. package/lib/components/molecules/ChatAIMessages/newStyles.js +131 -0
  329. package/lib/components/molecules/ChatAIMessages/styles.js +94 -0
  330. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +1254 -0
  331. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +58 -0
  332. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +127 -0
  333. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +34 -0
  334. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/index.js +2 -0
  335. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +189 -0
  336. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -0
  337. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/index.js +2 -0
  338. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +453 -0
  339. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +108 -0
  340. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/index.js +2 -0
  341. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +48 -0
  342. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +38 -0
  343. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +2 -0
  344. package/lib/components/molecules/ChatAIModal/constants.js +40 -0
  345. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +16 -0
  346. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +12 -0
  347. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
  348. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
  349. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
  350. package/lib/components/molecules/ChatAIModal/index.js +2 -0
  351. package/lib/components/molecules/ChatAIModal/layout.js +74 -0
  352. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +457 -0
  353. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +218 -0
  354. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +430 -0
  355. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +169 -0
  356. package/lib/components/molecules/ChatAIMySkills/index.js +2 -0
  357. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +48 -0
  358. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.styles.js +49 -0
  359. package/lib/components/molecules/ChatAIProjectSelector/index.js +2 -0
  360. package/lib/components/molecules/ChatFooter/ChatFooter.js +337 -0
  361. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.js +32 -0
  362. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.styles.js +14 -0
  363. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +201 -0
  364. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.styles.js +51 -0
  365. package/lib/components/molecules/ChatFooter/index.js +2 -0
  366. package/lib/components/molecules/ChatFooter/styles.js +23 -0
  367. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +60 -0
  368. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
  369. package/lib/components/molecules/ContextMentionInput/index.js +2 -0
  370. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +118 -0
  371. package/lib/components/molecules/MessageFeedback/index.js +2 -0
  372. package/lib/components/molecules/MessageFeedback/styles.js +14 -0
  373. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.js +127 -0
  374. package/lib/components/molecules/ProjectSummaryChat/index.js +2 -0
  375. package/lib/components/molecules/ProjectSummaryChat/styles.js +8 -0
  376. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.js +152 -0
  377. package/lib/components/molecules/ProjectSummaryConfig/index.js +2 -0
  378. package/lib/components/molecules/ProjectSummaryConfig/styles.js +86 -0
  379. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.js +49 -0
  380. package/lib/components/molecules/ProjectSummaryContent/index.js +2 -0
  381. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.js +19 -0
  382. package/lib/components/molecules/ProjectSummaryModal/index.js +2 -0
  383. package/lib/components/molecules/ProjectSummaryModal/styles.js +2 -0
  384. package/lib/components/molecules/Sidebar/Sidebar.js +716 -0
  385. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +157 -0
  386. package/lib/components/molecules/Sidebar/Sidebar.skeleton.js +48 -0
  387. package/lib/components/molecules/Sidebar/Sidebar.styles.js +75 -0
  388. package/lib/components/molecules/Sidebar/index.js +2 -0
  389. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +1449 -0
  390. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +93 -0
  391. package/lib/components/organisms/AbmAgentModal/index.js +2 -0
  392. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +182 -0
  393. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +34 -0
  394. package/lib/components/organisms/AbmSkillGenerateModal/index.js +2 -0
  395. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +585 -0
  396. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +154 -0
  397. package/lib/components/organisms/AbmSkillModal/index.js +2 -0
  398. package/lib/components/organisms/ChatAI/ChatAI.js +167 -0
  399. package/lib/components/organisms/ChatAI/index.js +2 -0
  400. package/lib/components/organisms/ChatAI/styles.js +7 -0
  401. package/lib/components/organisms/ClientAIButton/ClientAIButton.js +23 -0
  402. package/lib/components/organisms/ClientAIButton/index.js +2 -0
  403. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.js +86 -0
  404. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.styles.js +39 -0
  405. package/lib/components/organisms/DeleteAgentModal/index.js +2 -0
  406. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +122 -0
  407. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.styles.js +47 -0
  408. package/lib/components/organisms/DeleteQuestionModal/index.js +2 -0
  409. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +138 -0
  410. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.styles.js +69 -0
  411. package/lib/components/organisms/EditQuestionModal/index.js +2 -0
  412. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.js +113 -0
  413. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.styles.js +54 -0
  414. package/lib/components/organisms/ModalFileExceeds/index.js +2 -0
  415. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.js +26 -0
  416. package/lib/components/organisms/ProjectAIButton/index.js +2 -0
  417. package/lib/components/organisms/ProjectSummary/ProjectSummary.js +60 -0
  418. package/lib/components/organisms/ProjectSummary/index.js +2 -0
  419. package/lib/components/organisms/ProjectSummary/styles.js +7 -0
  420. package/lib/components/organisms/SnackBar/Snackbar.interface.js +2 -0
  421. package/lib/components/organisms/SnackBar/Snackbar.js +73 -0
  422. package/lib/components/organisms/SnackBar/Snackbar.styles.js +9 -0
  423. package/lib/components/organisms/SnackBar/index.js +2 -0
  424. package/lib/components/organisms/SourcesInformation/SourceItem.js +18 -0
  425. package/lib/components/organisms/SourcesInformation/SourceItem.styles.js +14 -0
  426. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +66 -0
  427. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.styles.js +27 -0
  428. package/lib/components/organisms/SourcesInformation/index.js +2 -0
  429. package/lib/constants/config.js +10 -0
  430. package/lib/constants/formatExtensions.js +55 -0
  431. package/lib/constants/gqlClient.js +4 -0
  432. package/lib/constants/maiaHourAgentAccess.js +15 -0
  433. package/lib/constants/maiaTaskPanelAccess.js +24 -0
  434. package/lib/constants/maiaTaskPanelOutsideClick.js +9 -0
  435. package/lib/constants/maiaTaskPanelZIndex.js +19 -0
  436. package/lib/constants/permissions/config.js +72 -0
  437. package/lib/constants/permissions/index.js +3 -0
  438. package/lib/constants/permissions/types.js +2 -0
  439. package/lib/constants/permissions/utils.js +18 -0
  440. package/lib/constants/plannerSyncEvents.js +15 -0
  441. package/lib/constants/taskLinkIcon.js +15 -0
  442. package/lib/constants/taskUrls.js +11 -0
  443. package/lib/context/cor-user.js +31 -0
  444. package/lib/context/global-context.js +39 -0
  445. package/lib/dev/DevChatAI.js +101 -0
  446. package/lib/dev/DevContextMentionInput.js +67 -0
  447. package/lib/dev/ProjectSummary.js +9 -0
  448. package/lib/dev/Providers.js +27 -0
  449. package/lib/exports.js +2 -0
  450. package/lib/hooks/README.md +192 -0
  451. package/lib/hooks/index.js +30 -0
  452. package/lib/hooks/useAccessClient/index.js +2 -0
  453. package/lib/hooks/useAccessClient/useAccessClient.js +81 -0
  454. package/lib/hooks/useAgentModel/index.js +2 -0
  455. package/lib/hooks/useAgentModel/useAgentModel.js +62 -0
  456. package/lib/hooks/useAgentModel/useCreateAgent.js +175 -0
  457. package/lib/hooks/useAgentModel/useDeleteAgent.js +88 -0
  458. package/lib/hooks/useAgentModel/useUpdateAgent.js +176 -0
  459. package/lib/hooks/useAgentSuggestions.js +60 -0
  460. package/lib/hooks/useCaretPosition.js +65 -0
  461. package/lib/hooks/useChatManager/index.js +2 -0
  462. package/lib/hooks/useChatManager/useChatManager.interface.js +2 -0
  463. package/lib/hooks/useChatManager/useChatManager.js +1782 -0
  464. package/lib/hooks/useChatMessages/index.js +2 -0
  465. package/lib/hooks/useChatMessages/useChatMessages.interface.js +2 -0
  466. package/lib/hooks/useChatMessages/useChatMessages.js +722 -0
  467. package/lib/hooks/useChats/index.js +2 -0
  468. package/lib/hooks/useChats/useChats.interfaces.js +2 -0
  469. package/lib/hooks/useChats/useChats.js +187 -0
  470. package/lib/hooks/useClientSearch.js +163 -0
  471. package/lib/hooks/useContextMentions.js +500 -0
  472. package/lib/hooks/useContextPinPopover.js +228 -0
  473. package/lib/hooks/useDebounce.js +18 -0
  474. package/lib/hooks/useEntitySearch.js +1053 -0
  475. package/lib/hooks/useEvent.js +94 -0
  476. package/lib/hooks/useFrequentlyAskedQuestions.js +150 -0
  477. package/lib/hooks/useFrequentlyUsedActions.js +94 -0
  478. package/lib/hooks/useKnowledge/deleteKnowledge.js +69 -0
  479. package/lib/hooks/useKnowledge/downloadKnowledge.js +81 -0
  480. package/lib/hooks/useKnowledge/index.js +4 -0
  481. package/lib/hooks/useKnowledge/saveKnowledge.js +107 -0
  482. package/lib/hooks/useKnowledge/useKnowledgeOperations.js +156 -0
  483. package/lib/hooks/useMaiaTaskPanelZIndex.js +17 -0
  484. package/lib/hooks/useMentionAllowedTypes.js +120 -0
  485. package/lib/hooks/useMentionPopover.js +342 -0
  486. package/lib/hooks/useMinimizedPillBottomOffset.js +110 -0
  487. package/lib/hooks/useModal/index.js +2 -0
  488. package/lib/hooks/useModal/useModal.interfaces.js +2 -0
  489. package/lib/hooks/useModal/useModal.js +47 -0
  490. package/lib/hooks/useOnboardingNavigation.js +20 -0
  491. package/lib/hooks/useOrchestratorStream/index.js +2 -0
  492. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +2 -0
  493. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +269 -0
  494. package/lib/hooks/useProjectSearch.js +183 -0
  495. package/lib/hooks/useProjectSummary.js +101 -0
  496. package/lib/hooks/useProjectSummaryConfig.js +211 -0
  497. package/lib/hooks/useProjects.js +46 -0
  498. package/lib/hooks/useRecentClientsSearch.js +150 -0
  499. package/lib/hooks/useRecentContexts.js +86 -0
  500. package/lib/hooks/useResize.js +29 -0
  501. package/lib/hooks/useSkillsCatalog.js +66 -0
  502. package/lib/hooks/useSlashCommands.js +84 -0
  503. package/lib/hooks/useSmoothStreamText/index.js +2 -0
  504. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +197 -0
  505. package/lib/hooks/useSnackBarManager/useSnackBarManager.js +41 -0
  506. package/lib/hooks/useStreamResponse.js +112 -0
  507. package/lib/hooks/useStreamdownStyles.js +13 -0
  508. package/lib/hooks/useStreamingMessage/index.js +2 -0
  509. package/lib/hooks/useStreamingMessage/useStreamingMessage.js +18 -0
  510. package/lib/hooks/useT.js +17 -0
  511. package/lib/hooks/useTabTaskDefault.js +33 -0
  512. package/lib/hooks/useTaskPanel.js +22 -0
  513. package/lib/hooks/useTextOverflowEllipsisTooltip.js +34 -0
  514. package/lib/hooks/useToggle.js +19 -0
  515. package/lib/hooks/useToggleFavorite/index.js +2 -0
  516. package/lib/hooks/useToggleFavorite/useToggleFavorite.js +83 -0
  517. package/lib/index.css +76 -0
  518. package/lib/index.js +30 -0
  519. package/lib/lang/br/index.js +793 -0
  520. package/lib/lang/en/index.js +793 -0
  521. package/lib/lang/es/index.js +794 -0
  522. package/lib/lang/fr/index.js +614 -0
  523. package/lib/lang/index.js +24 -0
  524. package/lib/lang/utils.js +33 -0
  525. package/lib/mocks/mockChats.js +395 -0
  526. package/lib/mocks/mockOrchestrator.js +5 -0
  527. package/lib/mocks/mockProject.js +11 -0
  528. package/lib/mocks/mockProjectSummary.js +6 -0
  529. package/lib/mocks/mockedUser.js +169 -0
  530. package/lib/services/apolloClient.js +3 -0
  531. package/lib/services/appcues.js +19 -0
  532. package/lib/services/corpilot/ProjectSummary/getProjectSummary.js +31 -0
  533. package/lib/services/corpilot/ProjectSummary/index.js +5 -0
  534. package/lib/services/corpilot/client.js +27 -0
  535. package/lib/services/corpilot/index.js +5 -0
  536. package/lib/services/maia/Access/updateAccess.js +59 -0
  537. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +46 -0
  538. package/lib/services/maia/Actions/getSlashCommands.js +39 -0
  539. package/lib/services/maia/Actions/index.js +7 -0
  540. package/lib/services/maia/Agents/connectors.js +250 -0
  541. package/lib/services/maia/Agents/createAgent.js +39 -0
  542. package/lib/services/maia/Agents/deleteAgent.js +38 -0
  543. package/lib/services/maia/Agents/fetchAgentDetail.js +122 -0
  544. package/lib/services/maia/Agents/getAgentById.js +162 -0
  545. package/lib/services/maia/Agents/getAgentModels.js +112 -0
  546. package/lib/services/maia/Agents/getAgentSuggestions.js +44 -0
  547. package/lib/services/maia/Agents/getAgents.js +718 -0
  548. package/lib/services/maia/Agents/setAgentToolGroups.js +42 -0
  549. package/lib/services/maia/Agents/toggleFavorite.js +34 -0
  550. package/lib/services/maia/Agents/updateAgent.js +39 -0
  551. package/lib/services/maia/Chats/deleteChat.js +32 -0
  552. package/lib/services/maia/Chats/getChatMessages.js +144 -0
  553. package/lib/services/maia/Chats/getChatsByUserId.js +82 -0
  554. package/lib/services/maia/Chats/index.js +15 -0
  555. package/lib/services/maia/Chats/markSessionAsRead.js +32 -0
  556. package/lib/services/maia/Chats/patchChat.js +43 -0
  557. package/lib/services/maia/Chats/wasHelpfulChat.js +31 -0
  558. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +55 -0
  559. package/lib/services/maia/Faqs/index.js +5 -0
  560. package/lib/services/maia/Knowledge/delete.js +41 -0
  561. package/lib/services/maia/Knowledge/download.js +48 -0
  562. package/lib/services/maia/Knowledge/index.js +3 -0
  563. package/lib/services/maia/Knowledge/save.js +43 -0
  564. package/lib/services/maia/Orchestrator/index.js +7 -0
  565. package/lib/services/maia/Orchestrator/orchestrator.js +246 -0
  566. package/lib/services/maia/RecentClients/getRecentClients.js +43 -0
  567. package/lib/services/maia/RecentClients/index.js +6 -0
  568. package/lib/services/maia/RecentContexts/getRecentContexts.js +54 -0
  569. package/lib/services/maia/RecentContexts/index.js +6 -0
  570. package/lib/services/maia/RecentProjects/getRecentProjects.js +55 -0
  571. package/lib/services/maia/RecentProjects/index.js +6 -0
  572. package/lib/services/maia/RecentTasks/getRecentTasks.js +54 -0
  573. package/lib/services/maia/RecentTasks/index.js +6 -0
  574. package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
  575. package/lib/services/maia/RecentUsers/index.js +6 -0
  576. package/lib/services/maia/Skills/createSkill.js +39 -0
  577. package/lib/services/maia/Skills/deleteSkill.js +38 -0
  578. package/lib/services/maia/Skills/generateSkill.js +41 -0
  579. package/lib/services/maia/Skills/getSkills.js +120 -0
  580. package/lib/services/maia/Skills/updateSkill.js +39 -0
  581. package/lib/services/maia/client.js +27 -0
  582. package/lib/services/maia/index.js +17 -0
  583. package/lib/services/query/ClientSearchQuery.js +5 -0
  584. package/lib/services/query/entitySearchQuery.js +18 -0
  585. package/lib/services/query/index.js +2 -0
  586. package/lib/services/query/projectSearchByValueQuery.js +5 -0
  587. package/lib/services/query/taskUserTabQuery.js +8 -0
  588. package/lib/services/query/usersDirectoryQuery.js +19 -0
  589. package/lib/services/types.js +6 -0
  590. package/lib/services/utils/fetchCOR.js +117 -0
  591. package/lib/services/utils/getCookie.js +10 -0
  592. package/lib/services/utils/index.js +3 -0
  593. package/lib/services/utils/mapChatMessages.js +287 -0
  594. package/lib/services/utils/validateIsMaia.js +4 -0
  595. package/lib/store/chatsSidebarOptimistic.js +92 -0
  596. package/lib/store/chatsStore.types.js +2 -0
  597. package/lib/store/chatsStoreLifecycle.js +8 -0
  598. package/lib/store/faqsStore.types.js +2 -0
  599. package/lib/store/index.js +4 -0
  600. package/lib/store/maiaLastChatPersistence.js +35 -0
  601. package/lib/store/sessions/activeView.js +22 -0
  602. package/lib/store/sessions/index.js +9 -0
  603. package/lib/store/sessions/sessionHitlContext.js +15 -0
  604. package/lib/store/sessions/sessionNotificationSound.js +57 -0
  605. package/lib/store/sessions/sessionNotifications.js +110 -0
  606. package/lib/store/sessions/sessionNotifications.types.js +2 -0
  607. package/lib/store/sessions/sessionStreamManager.js +715 -0
  608. package/lib/store/sessions/sessionStreamingText.js +80 -0
  609. package/lib/store/sessions/sessions.types.js +35 -0
  610. package/lib/store/sessions/useSessionMeta.js +39 -0
  611. package/lib/store/sessions/useSessionStreamingText.js +18 -0
  612. package/lib/store/sessions/useSessionsStore.js +197 -0
  613. package/lib/store/useChatsStore.js +387 -0
  614. package/lib/store/useFaqsStore.js +27 -0
  615. package/lib/streamdownStyles.js +9 -0
  616. package/lib/styles/StyledCleanContainer.js +7 -0
  617. package/lib/styles/cascade.js +14 -0
  618. package/lib/styles/config.js +47 -0
  619. package/lib/styles/shared/scrollable.js +3 -0
  620. package/lib/styles/transitions.js +21 -0
  621. package/lib/types/Action.js +2 -0
  622. package/lib/types/AgentSuggestion.js +2 -0
  623. package/lib/types/Chat.js +10 -0
  624. package/lib/types/Client.js +2 -0
  625. package/lib/types/FrequentlyAskedQuestion.js +2 -0
  626. package/lib/types/Project.js +2 -0
  627. package/lib/types/ProjectSummaryConfigKeys.js +9 -0
  628. package/lib/types/Task.js +2 -0
  629. package/lib/types/agent.js +2 -0
  630. package/lib/types/agentModal.js +2 -0
  631. package/lib/types/contextMention.js +37 -0
  632. package/lib/types/global.d.js +2 -0
  633. package/lib/types/skill.js +2 -0
  634. package/lib/types/streamActivity.js +2 -0
  635. package/lib/types/userType.d.js +2 -0
  636. package/lib/utils/actionCategoryMap.js +37 -0
  637. package/lib/utils/actionIconMap.js +61 -0
  638. package/lib/utils/agentDisplayName.js +42 -0
  639. package/lib/utils/chatInputFiles.js +52 -0
  640. package/lib/utils/contextMentionIcons.js +134 -0
  641. package/lib/utils/contextMentionLabel.js +4 -0
  642. package/lib/utils/contextMentionTriggers.js +51 -0
  643. package/lib/utils/contextMentionTypeLabel.js +17 -0
  644. package/lib/utils/corConnectorMentionTypes.js +41 -0
  645. package/lib/utils/ensureStreamdownStyles.js +21 -0
  646. package/lib/utils/entityLinkRender.js +135 -0
  647. package/lib/utils/fileDownloadHelper.js +40 -0
  648. package/lib/utils/formatQuickActionMessage.js +16 -0
  649. package/lib/utils/formatUnreadCount.js +6 -0
  650. package/lib/utils/getUnitFileSize.js +13 -0
  651. package/lib/utils/hitlAnalytics.js +65 -0
  652. package/lib/utils/hoursPlannerQuickActionType.js +64 -0
  653. package/lib/utils/imagePreprocessor.js +108 -0
  654. package/lib/utils/index.js +3 -0
  655. package/lib/utils/maiaHostOpen.js +19 -0
  656. package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
  657. package/lib/utils/mapBackendLang.js +8 -0
  658. package/lib/utils/normalizeAgentConnectors.js +95 -0
  659. package/lib/utils/openTaskInCorPanel.js +22 -0
  660. package/lib/utils/orchestratorSubagents.js +11 -0
  661. package/lib/utils/renderContextMentions.js +420 -0
  662. package/lib/utils/retryCompletion.js +85 -0
  663. package/lib/utils/slashCommandMarker.js +30 -0
  664. package/lib/utils/sortManagerHoursHomeFuas.js +14 -0
  665. package/lib/utils/sseStreamContent.js +17 -0
  666. package/lib/utils/streamActivityMessages.js +359 -0
  667. package/lib/utils/validateTrimmedFields.js +8 -0
  668. package/package.json +1 -1
  669. package/README.md +0 -2
@@ -0,0 +1,152 @@
1
+ import styled, { css } from 'styled-components';
2
+ import { cascadeItem } from '../../../styles/cascade';
3
+ import { dropdownIn } from '../../../styles/transitions';
4
+ export var SCAGSWrapper = styled.div.withConfig({
5
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapper",
6
+ componentId: "sc-tesimq-0"
7
+ })(["display:flex;flex-direction:column;gap:18px;width:100%;overflow-y:", ";padding:12px 12px 12px 0px;flex-grow:1;"], function (_ref) {
8
+ var openModalAiModel = _ref.openModalAiModel;
9
+ return openModalAiModel ? 'hidden' : 'auto';
10
+ });
11
+ export var SCAGSGeneralCard = styled.div.withConfig({
12
+ displayName: "AbmGeneralSectionstyles__SCAGSGeneralCard",
13
+ componentId: "sc-tesimq-1"
14
+ })(["display:flex;flex-direction:column;gap:18px;width:100%;background-color:#f9f9f9;padding:16px;border-radius:4px;", ""], function (_ref2) {
15
+ var $index = _ref2.$index;
16
+ return cascadeItem($index);
17
+ });
18
+ export var SCAGSFieldSurface = styled.div.withConfig({
19
+ displayName: "AbmGeneralSectionstyles__SCAGSFieldSurface",
20
+ componentId: "sc-tesimq-2"
21
+ })(["width:100%;background-color:#fff;"]);
22
+ export var SCAGSOptionalFields = styled.div.withConfig({
23
+ displayName: "AbmGeneralSectionstyles__SCAGSOptionalFields",
24
+ componentId: "sc-tesimq-3"
25
+ })(["display:flex;flex-direction:column;gap:8px;width:100%;", ""], function (_ref3) {
26
+ var $index = _ref3.$index;
27
+ return cascadeItem($index);
28
+ });
29
+ export var SCAGSOptionalLabel = styled.span.withConfig({
30
+ displayName: "AbmGeneralSectionstyles__SCAGSOptionalLabel",
31
+ componentId: "sc-tesimq-4"
32
+ })(["color:rgba(32,32,31,1);font-family:'Work Sans';font-size:16px;font-style:normal;font-weight:500;line-height:122%;"]);
33
+ export var SCAGSNoModelsAvailable = styled.div.withConfig({
34
+ displayName: "AbmGeneralSectionstyles__SCAGSNoModelsAvailable",
35
+ componentId: "sc-tesimq-5"
36
+ })(["padding:12px;text-align:center;color:#999;"]);
37
+ export var SCAGSWrapperHeader = styled.div.withConfig({
38
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperHeader",
39
+ componentId: "sc-tesimq-6"
40
+ })(["display:flex;flex-direction:column;", ""], function (_ref4) {
41
+ var $index = _ref4.$index;
42
+ return cascadeItem($index);
43
+ });
44
+ export var SCAGSWrapperHeaderTitle = styled.span.withConfig({
45
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperHeaderTitle",
46
+ componentId: "sc-tesimq-7"
47
+ })(["display:flex;justify-content:space-between;align-items:center;font-size:20px;font-family:'Work Sans';color:rgba(32,32,31,1);font-weight:500;line-height:122%;"]);
48
+ export var SCAGSWrapperHeaderTitleRequired = styled.span.withConfig({
49
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperHeaderTitleRequired",
50
+ componentId: "sc-tesimq-8"
51
+ })(["color:#999;font-family:'Work Sans';font-size:12px;font-weight:400;line-height:130%;"]);
52
+ export var SCAGSWrapperHeaderInfo = styled.span.withConfig({
53
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperHeaderInfo",
54
+ componentId: "sc-tesimq-9"
55
+ })(["font-size:14px;font-family:'Work Sans';color:rgba(102,102,102,1);line-height:140%;"]);
56
+ export var SCAGSWrapperSelector = styled.div.withConfig({
57
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperSelector",
58
+ componentId: "sc-tesimq-10"
59
+ })(["display:flex;width:365px;[class*='SCSUTitle']{font-size:10px;line-height:120%;color:rgba(32,32,31,1);}[class*='SCSUPlaceholder']{font-size:14px;line-height:140%;font-family:'Work Sans';color:rgba(32,32,31,1);}[class*='SCSUWrapperChildren']{display:none;}"]);
60
+ export var SCAGSSelectorModal = styled.div.withConfig({
61
+ displayName: "AbmGeneralSectionstyles__SCAGSSelectorModal",
62
+ componentId: "sc-tesimq-11"
63
+ })(["position:fixed;left:", "px;width:", "px;top:", ";bottom:", ";z-index:", ";padding:4px;box-shadow:0px 4px 16px 0px rgba(18,18,18,0.24);border-radius:8px;font-size:14px;font-family:'Work Sans';line-height:140%;color:rgba(153,153,153,1);background-color:#ffffff;", " transform-origin:", ";"], function (_ref5) {
64
+ var $left = _ref5.$left;
65
+ return $left;
66
+ }, function (_ref6) {
67
+ var $width = _ref6.$width;
68
+ return $width;
69
+ }, function (_ref7) {
70
+ var $top = _ref7.$top;
71
+ return $top !== undefined ? "".concat($top, "px") : 'auto';
72
+ }, function (_ref8) {
73
+ var $bottom = _ref8.$bottom;
74
+ return $bottom !== undefined ? "".concat($bottom, "px") : 'auto';
75
+ }, function (_ref9) {
76
+ var $zIndex = _ref9.$zIndex;
77
+ return $zIndex;
78
+ }, dropdownIn, function (_ref0) {
79
+ var $placement = _ref0.$placement;
80
+ return $placement === 'top' ? 'bottom center' : 'top center';
81
+ });
82
+ export var SCAGSSelectorModalContent = styled.div.withConfig({
83
+ displayName: "AbmGeneralSectionstyles__SCAGSSelectorModalContent",
84
+ componentId: "sc-tesimq-12"
85
+ })(["max-height:232px;overflow-y:auto;display:flex;flex-direction:column;"]);
86
+ export var SCAGSOption = styled.li.withConfig({
87
+ displayName: "AbmGeneralSectionstyles__SCAGSOption",
88
+ componentId: "sc-tesimq-13"
89
+ })(["list-style:none;cursor:pointer;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;padding:10px 8px;border-radius:4px;", " &:hover{background-color:rgba(240,240,240,1);}"], function (_ref1) {
90
+ var isSelected = _ref1.isSelected;
91
+ return isSelected && css(["background-color:rgba(225,244,255,1);&:hover{background-color:rgba(225,244,255,1) !important;cursor:default;}"]);
92
+ });
93
+ export var SCAGSOptionLabel = styled.span.withConfig({
94
+ displayName: "AbmGeneralSectionstyles__SCAGSOptionLabel",
95
+ componentId: "sc-tesimq-14"
96
+ })(["color:", ";font-family:'Work Sans';font-size:14px;font-weight:400;line-height:20px;"], function (_ref10) {
97
+ var isSelected = _ref10.isSelected;
98
+ return isSelected ? 'rgba(0, 87, 140, 1)' : 'rgba(32, 32, 32, 1)';
99
+ });
100
+ export var SCAGSOptionDescription = styled.span.withConfig({
101
+ displayName: "AbmGeneralSectionstyles__SCAGSOptionDescription",
102
+ componentId: "sc-tesimq-15"
103
+ })(["color:rgba(77,77,77,1);font-family:'Work Sans';font-size:12px;font-weight:400;line-height:16px;"]);
104
+ export var SCAGSWrapperContent = styled.div.withConfig({
105
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperContent",
106
+ componentId: "sc-tesimq-16"
107
+ })(["display:flex;flex-direction:row;gap:30px;"]);
108
+ export var SCAGSWrapperEmoji = styled.div.withConfig({
109
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperEmoji",
110
+ componentId: "sc-tesimq-17"
111
+ })(["display:flex;flex-direction:column;gap:8px;"]);
112
+ export var SCAGSWrapperAddIcon = styled.div.withConfig({
113
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperAddIcon",
114
+ componentId: "sc-tesimq-18"
115
+ })(["background-color:rgba(247,247,247,1);width:26px;height:26px;border-radius:50%;display:flex;justify-content:center;align-items:center;position:absolute;transition:all 0.3s ease-in-out;right:-8px;top:-5px;box-shadow:-1px 1px 1px 0px rgba(92,92,92,0.05);"]);
116
+ export var SCAGSButtonEmoji = styled.button.withConfig({
117
+ displayName: "AbmGeneralSectionstyles__SCAGSButtonEmoji",
118
+ componentId: "sc-tesimq-19"
119
+ })(["background-color:transparent;width:fit-content;border:none;cursor:pointer;z-index:1;:hover{", "{background-color:rgba(235,219,248,1);}}"], SCAGSWrapperAddIcon);
120
+ export var SCAGSWrapperEmojiContent = styled.div.withConfig({
121
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperEmojiContent",
122
+ componentId: "sc-tesimq-20"
123
+ })(["display:flex;align-items:center;position:relative;width:48px;height:48px;cursor:pointer;"]);
124
+ export var SCAGSWrapperEmojiIcon = styled.div.withConfig({
125
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperEmojiIcon",
126
+ componentId: "sc-tesimq-21"
127
+ })(["width:48px;height:48px;display:flex;background-color:rgba(247,247,247,1);justify-content:center;align-items:center;border-radius:50%;"]);
128
+ export var SCAGSWrapperOnboardingContent = styled.div.withConfig({
129
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperOnboardingContent",
130
+ componentId: "sc-tesimq-22"
131
+ })(["display:flex;align-items:center;gap:4px;color:#006faf;font-size:10px;font-family:'Work Sans';line-height:120%;width:fit-content;&:hover{cursor:pointer !important;color:#4dbdff;svg *:not(.no-fill){fill:#4dbdff !important;}}"]);
132
+ export var SCAGSWrapperOnboarding = styled.div.withConfig({
133
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperOnboarding",
134
+ componentId: "sc-tesimq-23"
135
+ })(["display:flex;flex-direction:column;gap:6px;"]);
136
+ export var SCAGSWrapperOnboardingText = styled.span.withConfig({
137
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperOnboardingText",
138
+ componentId: "sc-tesimq-24"
139
+ })(["color:#006faf;font-family:'Work Sans';font-size:10px;font-style:italic;font-weight:400;line-height:120%;letter-spacing:-0.1px;&:hover{cursor:pointer !important;color:#4dbdff;}"]);
140
+ export var SCAGSWrapperHeaderCreatedByText = styled.span.withConfig({
141
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperHeaderCreatedByText",
142
+ componentId: "sc-tesimq-25"
143
+ })(["display:none;font-size:12px;color:rgba(150,150,150,0.8);width:fit-content;cursor:pointer;"]);
144
+ export var SCAGSWrapperHeaderCreatedByTextName = styled.span.withConfig({
145
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperHeaderCreatedByTextName",
146
+ componentId: "sc-tesimq-26"
147
+ })(["font-style:italic;"]);
148
+ export var SCAGSWrapperSpanTitle = styled.span.withConfig({
149
+ displayName: "AbmGeneralSectionstyles__SCAGSWrapperSpanTitle",
150
+ componentId: "sc-tesimq-27"
151
+ })(["font-size:14px;color:rgba(32,32,31,1);line-height:140%;font-family:'Work Sans';"]);
152
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJjc3MiLCJjYXNjYWRlSXRlbSIsImRyb3Bkb3duSW4iLCJTQ0FHU1dyYXBwZXIiLCJkaXYiLCJ3aXRoQ29uZmlnIiwiZGlzcGxheU5hbWUiLCJjb21wb25lbnRJZCIsIl9yZWYiLCJvcGVuTW9kYWxBaU1vZGVsIiwiU0NBR1NHZW5lcmFsQ2FyZCIsIl9yZWYyIiwiJGluZGV4IiwiU0NBR1NGaWVsZFN1cmZhY2UiLCJTQ0FHU09wdGlvbmFsRmllbGRzIiwiX3JlZjMiLCJTQ0FHU09wdGlvbmFsTGFiZWwiLCJzcGFuIiwiU0NBR1NOb01vZGVsc0F2YWlsYWJsZSIsIlNDQUdTV3JhcHBlckhlYWRlciIsIl9yZWY0IiwiU0NBR1NXcmFwcGVySGVhZGVyVGl0bGUiLCJTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZVJlcXVpcmVkIiwiU0NBR1NXcmFwcGVySGVhZGVySW5mbyIsIlNDQUdTV3JhcHBlclNlbGVjdG9yIiwiU0NBR1NTZWxlY3Rvck1vZGFsIiwiX3JlZjUiLCIkbGVmdCIsIl9yZWY2IiwiJHdpZHRoIiwiX3JlZjciLCIkdG9wIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiX3JlZjgiLCIkYm90dG9tIiwiX3JlZjkiLCIkekluZGV4IiwiX3JlZjAiLCIkcGxhY2VtZW50IiwiU0NBR1NTZWxlY3Rvck1vZGFsQ29udGVudCIsIlNDQUdTT3B0aW9uIiwibGkiLCJfcmVmMSIsImlzU2VsZWN0ZWQiLCJTQ0FHU09wdGlvbkxhYmVsIiwiX3JlZjEwIiwiU0NBR1NPcHRpb25EZXNjcmlwdGlvbiIsIlNDQUdTV3JhcHBlckNvbnRlbnQiLCJTQ0FHU1dyYXBwZXJFbW9qaSIsIlNDQUdTV3JhcHBlckFkZEljb24iLCJTQ0FHU0J1dHRvbkVtb2ppIiwiYnV0dG9uIiwiU0NBR1NXcmFwcGVyRW1vamlDb250ZW50IiwiU0NBR1NXcmFwcGVyRW1vamlJY29uIiwiU0NBR1NXcmFwcGVyT25ib2FyZGluZ0NvbnRlbnQiLCJTQ0FHU1dyYXBwZXJPbmJvYXJkaW5nIiwiU0NBR1NXcmFwcGVyT25ib2FyZGluZ1RleHQiLCJTQ0FHU1dyYXBwZXJIZWFkZXJDcmVhdGVkQnlUZXh0IiwiU0NBR1NXcmFwcGVySGVhZGVyQ3JlYXRlZEJ5VGV4dE5hbWUiLCJTQ0FHU1dyYXBwZXJTcGFuVGl0bGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1HZW5lcmFsU2VjdGlvbi5zdHlsZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdHlsZWQsIHsgY3NzIH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnXG5pbXBvcnQgeyBjYXNjYWRlSXRlbSB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9jYXNjYWRlJ1xuaW1wb3J0IHsgZHJvcGRvd25JbiB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy90cmFuc2l0aW9ucydcblxuZXhwb3J0IGNvbnN0IFNDQUdTV3JhcHBlciA9IHN0eWxlZC5kaXY8eyBvcGVuTW9kYWxBaU1vZGVsOiBib29sZWFuIH0+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDE4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdy15OiAkeyh7IG9wZW5Nb2RhbEFpTW9kZWwgfSkgPT4gKG9wZW5Nb2RhbEFpTW9kZWwgPyAnaGlkZGVuJyA6ICdhdXRvJyl9O1xuICBwYWRkaW5nOiAxMnB4IDEycHggMTJweCAwcHg7XG4gIGZsZXgtZ3JvdzogMTtcbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTR2VuZXJhbENhcmQgPSBzdHlsZWQuZGl2PHsgJGluZGV4PzogbnVtYmVyIH0+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDE4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5O1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICR7KHsgJGluZGV4IH0pID0+IGNhc2NhZGVJdGVtKCRpbmRleCl9XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU0ZpZWxkU3VyZmFjZSA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuYFxuXG5leHBvcnQgY29uc3QgU0NBR1NPcHRpb25hbEZpZWxkcyA9IHN0eWxlZC5kaXY8eyAkaW5kZXg/OiBudW1iZXIgfT5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogOHB4O1xuICB3aWR0aDogMTAwJTtcbiAgJHsoeyAkaW5kZXggfSkgPT4gY2FzY2FkZUl0ZW0oJGluZGV4KX1cbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTT3B0aW9uYWxMYWJlbCA9IHN0eWxlZC5zcGFuYFxuICBjb2xvcjogcmdiYSgzMiwgMzIsIDMxLCAxKTtcbiAgZm9udC1mYW1pbHk6ICdXb3JrIFNhbnMnO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDEyMiU7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU05vTW9kZWxzQXZhaWxhYmxlID0gc3R5bGVkLmRpdmBcbiAgcGFkZGluZzogMTJweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzk5OTtcbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTV3JhcHBlckhlYWRlciA9IHN0eWxlZC5kaXY8eyAkaW5kZXg/OiBudW1iZXIgfT5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICR7KHsgJGluZGV4IH0pID0+IGNhc2NhZGVJdGVtKCRpbmRleCl9XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZSA9IHN0eWxlZC5zcGFuYFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC1mYW1pbHk6ICdXb3JrIFNhbnMnO1xuICBjb2xvcjogcmdiYSgzMiwgMzIsIDMxLCAxKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDEyMiU7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU1dyYXBwZXJIZWFkZXJUaXRsZVJlcXVpcmVkID0gc3R5bGVkLnNwYW5gXG4gIGNvbG9yOiAjOTk5O1xuICBmb250LWZhbWlseTogJ1dvcmsgU2Fucyc7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEzMCU7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU1dyYXBwZXJIZWFkZXJJbmZvID0gc3R5bGVkLnNwYW5gXG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdXb3JrIFNhbnMnO1xuICBjb2xvcjogcmdiYSgxMDIsIDEwMiwgMTAyLCAxKTtcbiAgbGluZS1oZWlnaHQ6IDE0MCU7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU1dyYXBwZXJTZWxlY3RvciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAzNjVweDtcbiAgW2NsYXNzKj0nU0NTVVRpdGxlJ10ge1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBsaW5lLWhlaWdodDogMTIwJTtcbiAgICBjb2xvcjogcmdiYSgzMiwgMzIsIDMxLCAxKTtcbiAgfVxuICBbY2xhc3MqPSdTQ1NVUGxhY2Vob2xkZXInXSB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNDAlO1xuICAgIGZvbnQtZmFtaWx5OiAnV29yayBTYW5zJztcbiAgICBjb2xvcjogcmdiYSgzMiwgMzIsIDMxLCAxKTtcbiAgfVxuICAvKiBFbCBtZW7DuiByZWFsIHNlIHBvcnRhIGEgYm9keTsgb2N1bHRhbW9zIGVsIHBhbmVsIGludGVybm8gZGUgQ1VTZWxlY3QuICovXG4gIFtjbGFzcyo9J1NDU1VXcmFwcGVyQ2hpbGRyZW4nXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgU0NBR1NTZWxlY3Rvck1vZGFsID0gc3R5bGVkLmRpdjx7XG4gICRsZWZ0OiBudW1iZXJcbiAgJHdpZHRoOiBudW1iZXJcbiAgJHRvcD86IG51bWJlclxuICAkYm90dG9tPzogbnVtYmVyXG4gICR6SW5kZXg6IG51bWJlclxuICAkcGxhY2VtZW50OiAndG9wJyB8ICdib3R0b20nXG59PmBcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiAkeyh7ICRsZWZ0IH0pID0+ICRsZWZ0fXB4O1xuICB3aWR0aDogJHsoeyAkd2lkdGggfSkgPT4gJHdpZHRofXB4O1xuICB0b3A6ICR7KHsgJHRvcCB9KSA9PiAoJHRvcCAhPT0gdW5kZWZpbmVkID8gYCR7JHRvcH1weGAgOiAnYXV0bycpfTtcbiAgYm90dG9tOiAkeyh7ICRib3R0b20gfSkgPT4gKCRib3R0b20gIT09IHVuZGVmaW5lZCA/IGAkeyRib3R0b219cHhgIDogJ2F1dG8nKX07XG4gIHotaW5kZXg6ICR7KHsgJHpJbmRleCB9KSA9PiAkekluZGV4fTtcbiAgcGFkZGluZzogNHB4O1xuICBib3gtc2hhZG93OiAwcHggNHB4IDE2cHggMHB4IHJnYmEoMTgsIDE4LCAxOCwgMC4yNCk7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogJ1dvcmsgU2Fucyc7XG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xuICBjb2xvcjogcmdiYSgxNTMsIDE1MywgMTUzLCAxKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgJHtkcm9wZG93bklufVxuICB0cmFuc2Zvcm0tb3JpZ2luOiAkeyh7ICRwbGFjZW1lbnQgfSkgPT4gKCRwbGFjZW1lbnQgPT09ICd0b3AnID8gJ2JvdHRvbSBjZW50ZXInIDogJ3RvcCBjZW50ZXInKX07XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU1NlbGVjdG9yTW9kYWxDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgbWF4LWhlaWdodDogMjMycHg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU09wdGlvbiA9IHN0eWxlZC5saTx7IGlzU2VsZWN0ZWQ6IGJvb2xlYW4gfT5gXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IDJweDtcbiAgcGFkZGluZzogMTBweCA4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgJHsoeyBpc1NlbGVjdGVkIH0pID0+XG4gICAgaXNTZWxlY3RlZCAmJlxuICAgIGNzc2BcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjI1LCAyNDQsIDI1NSwgMSk7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjUsIDI0NCwgMjU1LCAxKSAhaW1wb3J0YW50O1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB9XG4gICAgYH1cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDAsIDI0MCwgMjQwLCAxKTtcbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgU0NBR1NPcHRpb25MYWJlbCA9IHN0eWxlZC5zcGFuPHsgaXNTZWxlY3RlZDogYm9vbGVhbiB9PmBcbiAgY29sb3I6ICR7KHsgaXNTZWxlY3RlZCB9KSA9PiAoaXNTZWxlY3RlZCA/ICdyZ2JhKDAsIDg3LCAxNDAsIDEpJyA6ICdyZ2JhKDMyLCAzMiwgMzIsIDEpJyl9O1xuICBmb250LWZhbWlseTogJ1dvcmsgU2Fucyc7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU09wdGlvbkRlc2NyaXB0aW9uID0gc3R5bGVkLnNwYW5gXG4gIGNvbG9yOiByZ2JhKDc3LCA3NywgNzcsIDEpO1xuICBmb250LWZhbWlseTogJ1dvcmsgU2Fucyc7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU1dyYXBwZXJDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiAzMHB4O1xuYFxuXG5leHBvcnQgY29uc3QgU0NBR1NXcmFwcGVyRW1vamkgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDhweDtcbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTV3JhcHBlckFkZEljb24gPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0NywgMjQ3LCAyNDcsIDEpO1xuICB3aWR0aDogMjZweDtcbiAgaGVpZ2h0OiAyNnB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0O1xuICByaWdodDogLThweDtcbiAgdG9wOiAtNXB4O1xuICBib3gtc2hhZG93OiAtMXB4IDFweCAxcHggMHB4IHJnYmEoOTIsIDkyLCA5MiwgMC4wNSk7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU0J1dHRvbkVtb2ppID0gc3R5bGVkLmJ1dHRvbmBcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHotaW5kZXg6IDE7XG4gIDpob3ZlciB7XG4gICAgJHtTQ0FHU1dyYXBwZXJBZGRJY29ufSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzNSwgMjE5LCAyNDgsIDEpO1xuICAgIH1cbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgU0NBR1NXcmFwcGVyRW1vamlDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNDhweDtcbiAgaGVpZ2h0OiA0OHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0FHU1dyYXBwZXJFbW9qaUljb24gPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogNDhweDtcbiAgaGVpZ2h0OiA0OHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0NywgMjQ3LCAyNDcsIDEpO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuYFxuXG5leHBvcnQgY29uc3QgU0NBR1NXcmFwcGVyT25ib2FyZGluZ0NvbnRlbnQgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDRweDtcbiAgY29sb3I6ICMwMDZmYWY7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC1mYW1pbHk6ICdXb3JrIFNhbnMnO1xuICBsaW5lLWhlaWdodDogMTIwJTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAmOmhvdmVyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDtcbiAgICBjb2xvcjogIzRkYmRmZjtcbiAgICBzdmcgKjpub3QoLm5vLWZpbGwpIHtcbiAgICAgIGZpbGw6ICM0ZGJkZmYgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTV3JhcHBlck9uYm9hcmRpbmcgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDZweDtcbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTV3JhcHBlck9uYm9hcmRpbmdUZXh0ID0gc3R5bGVkLnNwYW5gXG4gIGNvbG9yOiAjMDA2ZmFmO1xuICBmb250LWZhbWlseTogJ1dvcmsgU2Fucyc7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMTIwJTtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjFweDtcbiAgJjpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICM0ZGJkZmY7XG4gIH1cbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHQgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogbm9uZTtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogcmdiYSgxNTAsIDE1MCwgMTUwLCAwLjgpO1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTV3JhcHBlckhlYWRlckNyZWF0ZWRCeVRleHROYW1lID0gc3R5bGVkLnNwYW5gXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbmBcblxuZXhwb3J0IGNvbnN0IFNDQUdTV3JhcHBlclNwYW5UaXRsZSA9IHN0eWxlZC5zcGFuYFxuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiByZ2JhKDMyLCAzMiwgMzEsIDEpO1xuICBsaW5lLWhlaWdodDogMTQwJTtcbiAgZm9udC1mYW1pbHk6ICdXb3JrIFNh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
@@ -0,0 +1,374 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ /* eslint-disable jsx-a11y/click-events-have-key-events */
4
+ /* eslint-disable jsx-a11y/no-static-element-interactions */
5
+ /* eslint-disable no-console */
6
+ /* eslint-disable no-plusplus */
7
+ /* eslint-disable react/no-array-index-key */
8
+ /* eslint-disable import/no-cycle */
9
+ /* eslint-disable @typescript-eslint/no-explicit-any */
10
+ /* eslint-disable jsx-a11y/anchor-is-valid */
11
+ /* eslint-disable no-unused-vars */
12
+ import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
13
+ import { FileUpload } from '@projectcor/icons/lib/components/FileUpload';
14
+ import { Open } from '@projectcor/icons/lib/components/Open';
15
+ import { useEffect, useRef, useState } from 'react';
16
+ import { useTranslation } from 'react-i18next';
17
+ import { AttachmentCard } from '../../atoms/AttachmentCard/AttachmentCard';
18
+ import { AttachmentPreviewModal } from '../../atoms/AttachmentPreviewModal';
19
+ import { SCAKSWrapper, SCAKSWrapperHeader, SCAKSWrapperContent, SCAKSWrapperHeaderTitle, SCAKSWrapperHeaderInfo, SCAKSFileUploadWrapperContent, SCAKSAttachmentsWrapper, SCAKSMoreInfoSpan, SCAKSMoreInfoIconWrapper, SCAKSDropZone, SCAKSDropZoneIcon, SCAKSDropZoneText, SCAKSDropZoneInfo, SCAKSDropZoneTextSpan } from './AbmKnowledgeSection.styles';
20
+ import { useDownloadKnowledge } from '../../../hooks/useKnowledge/downloadKnowledge';
21
+ import { useOnboardingNavigation } from '../../../hooks/useOnboardingNavigation';
22
+ import { ModalFileExceeds } from '../../organisms/ModalFileExceeds/ModalFileExceeds';
23
+ import { allowedFileTypesForKnowledge, fileTypes } from '../../../constants/formatExtensions';
24
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
25
+ function getUniqueString(prevStrings, stringToChange) {
26
+ var _stringToChange$split = stringToChange.split('.'),
27
+ _stringToChange$split2 = _slicedToArray(_stringToChange$split, 2),
28
+ filename = _stringToChange$split2[0],
29
+ _stringToChange$split3 = _stringToChange$split2[1],
30
+ extension = _stringToChange$split3 === void 0 ? '' : _stringToChange$split3;
31
+ var ext = extension ? ".".concat(extension) : '';
32
+ if (!(prevStrings !== null && prevStrings !== void 0 && prevStrings.includes(stringToChange))) {
33
+ return stringToChange;
34
+ }
35
+ var counter = 1;
36
+ var newFilename;
37
+ do {
38
+ newFilename = "".concat(filename, "(").concat(counter, ")").concat(ext);
39
+ counter++;
40
+ } while (prevStrings !== null && prevStrings !== void 0 && prevStrings.includes(newFilename));
41
+ return newFilename;
42
+ }
43
+ var MAX_TOTAL_SIZE = 5 * 1024 * 1024; // 5MB total
44
+
45
+ export var AbmKnowledgeSection = function AbmKnowledgeSection(_ref) {
46
+ var handleSetAgentValues = _ref.handleSetAgentValues,
47
+ values = _ref.values,
48
+ onFileErrorChange = _ref.onFileErrorChange,
49
+ tooltipZIndex = _ref.tooltipZIndex;
50
+ var _useState = useState(values.knowledge || []),
51
+ _useState2 = _slicedToArray(_useState, 2),
52
+ localAttachments = _useState2[0],
53
+ setLocalAttachments = _useState2[1];
54
+ var _useState3 = useState(null),
55
+ _useState4 = _slicedToArray(_useState3, 2),
56
+ previewAttachment = _useState4[0],
57
+ setPreviewAttachment = _useState4[1];
58
+ var _useTranslation = useTranslation('abm_agent_section'),
59
+ t = _useTranslation.t;
60
+ var _useState5 = useState({
61
+ isOpen: false,
62
+ excludedFiles: [],
63
+ exceededFiles: [],
64
+ invalidExtensionFiles: []
65
+ }),
66
+ _useState6 = _slicedToArray(_useState5, 2),
67
+ modalProps = _useState6[0],
68
+ setModalProps = _useState6[1];
69
+ var _useDownloadKnowledge = useDownloadKnowledge(),
70
+ handleDownloadKnowledge = _useDownloadKnowledge.handleDownloadKnowledge,
71
+ isDownloadingSuccess = _useDownloadKnowledge.success,
72
+ isDownloadingError = _useDownloadKnowledge.error,
73
+ isDownloading = _useDownloadKnowledge.isLoading,
74
+ handleResetStates = _useDownloadKnowledge.handleResetStates;
75
+ var _useOnboardingNavigat = useOnboardingNavigation(),
76
+ handleOnboardingNavigation = _useOnboardingNavigat.handleOnboardingNavigation;
77
+ var fileInputRef = useRef(null);
78
+ var _useState7 = useState(false),
79
+ _useState8 = _slicedToArray(_useState7, 2),
80
+ isDragging = _useState8[0],
81
+ setIsDragging = _useState8[1];
82
+
83
+ // Calcular el tamaño total actual de archivos
84
+ var currentTotalSize = (localAttachments || []).reduce(function (total, attachment) {
85
+ var size = typeof attachment.size === 'number' ? attachment.size : Number(attachment.size);
86
+ return total + (Number.isNaN(size) ? 0 : size);
87
+ }, 0);
88
+ var isAtSizeLimit = currentTotalSize >= MAX_TOTAL_SIZE;
89
+ var handleAttachClick = function handleAttachClick() {
90
+ var _fileInputRef$current;
91
+ if (isAtSizeLimit) {
92
+ return;
93
+ }
94
+ (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
95
+ };
96
+ var handleFileSelect = function handleFileSelect(e) {
97
+ var files = e.target.files;
98
+ if (!files) return;
99
+ var exceededFiles = [];
100
+ var excludedFiles = [];
101
+ var invalidExtensionFiles = [];
102
+ var insertedFiles = [];
103
+ var attachmentsNames = (localAttachments || []).map(function (attachment) {
104
+ return attachment.name;
105
+ });
106
+
107
+ // Calcular el tamaño total actual de archivos ya adjuntos
108
+ var existingTotalSize = (localAttachments || []).reduce(function (total, attachment) {
109
+ var size = typeof attachment.size === 'number' ? attachment.size : Number(attachment.size);
110
+ return total + (Number.isNaN(size) ? 0 : size);
111
+ }, 0);
112
+ var runningTotalSize = existingTotalSize;
113
+ Array.from(files).forEach(function (file) {
114
+ var _fileNameParts$pop;
115
+ var fileNameParts = file.name.split('.');
116
+ var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop = fileNameParts.pop()) === null || _fileNameParts$pop === void 0 ? void 0 : _fileNameParts$pop.toLowerCase()) : '';
117
+ if (!allowedFileTypesForKnowledge.includes(fileExtension)) {
118
+ invalidExtensionFiles.push(file.name);
119
+ return;
120
+ }
121
+
122
+ // Verificar si agregar este archivo excedería el límite total de 5MB
123
+ var newTotalSize = runningTotalSize + file.size;
124
+ if (newTotalSize > MAX_TOTAL_SIZE) {
125
+ exceededFiles.push(file.name);
126
+ return;
127
+ }
128
+ var typeFile = file.type || fileTypes[fileExtension];
129
+ var uniqueName = getUniqueString(attachmentsNames, file.name);
130
+ var parsedFile = new File([file], uniqueName, {
131
+ type: typeFile
132
+ });
133
+ var attachmentFile = {
134
+ file: parsedFile,
135
+ id: "".concat(Date.now(), "-").concat(Math.random()),
136
+ name: uniqueName,
137
+ size: file.size,
138
+ type: typeFile,
139
+ status: 'started'
140
+ };
141
+
142
+ // Solo agregar el archivo si no está en la lista de archivos excedidos
143
+ if (!exceededFiles.includes(file.name)) {
144
+ insertedFiles.push(attachmentFile);
145
+ // Actualizar el tamaño total para la siguiente validación
146
+ runningTotalSize += file.size;
147
+ }
148
+ });
149
+
150
+ // Mostrar modal si hay archivos con extensión inválida o que exceden el límite
151
+ var hasErrors = invalidExtensionFiles.length > 0 || exceededFiles.length > 0;
152
+ if (hasErrors) {
153
+ setModalProps({
154
+ isOpen: true,
155
+ excludedFiles: excludedFiles,
156
+ exceededFiles: exceededFiles,
157
+ invalidExtensionFiles: invalidExtensionFiles
158
+ });
159
+ onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(true);
160
+ } else {
161
+ onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(false);
162
+ }
163
+
164
+ // Solo agregar archivos válidos que no excedan el límite
165
+ if (insertedFiles.length) {
166
+ handleSetAgentValues === null || handleSetAgentValues === void 0 || handleSetAgentValues({
167
+ key: 'knowledge',
168
+ value: insertedFiles
169
+ });
170
+ setLocalAttachments(function (prev) {
171
+ return [].concat(_toConsumableArray(prev || []), insertedFiles);
172
+ });
173
+ }
174
+ };
175
+ var handleDragEnter = function handleDragEnter(e) {
176
+ e.preventDefault();
177
+ e.stopPropagation();
178
+ if (!isAtSizeLimit) {
179
+ setIsDragging(true);
180
+ }
181
+ };
182
+ var handleDragLeave = function handleDragLeave(e) {
183
+ e.preventDefault();
184
+ e.stopPropagation();
185
+ setIsDragging(false);
186
+ };
187
+ var handleDragOver = function handleDragOver(e) {
188
+ e.preventDefault();
189
+ e.stopPropagation();
190
+ };
191
+ var handleDrop = function handleDrop(e) {
192
+ e.preventDefault();
193
+ e.stopPropagation();
194
+ setIsDragging(false);
195
+ if (isAtSizeLimit) {
196
+ return;
197
+ }
198
+ var files = e.dataTransfer.files;
199
+ if (!files || files.length === 0) {
200
+ return;
201
+ }
202
+
203
+ // Crear un evento sintético para reutilizar la lógica de handleFileSelect
204
+ var syntheticEvent = {
205
+ target: {
206
+ files: files
207
+ }
208
+ };
209
+ handleFileSelect(syntheticEvent);
210
+ };
211
+ var handleDeleteAttachment = function handleDeleteAttachment(id) {
212
+ var fileToDelete = localAttachments[id];
213
+ if (!fileToDelete) return;
214
+ var newAttachments = (localAttachments || []).filter(function (_, index) {
215
+ return index !== id;
216
+ });
217
+ setLocalAttachments(newAttachments);
218
+ handleSetAgentValues === null || handleSetAgentValues === void 0 || handleSetAgentValues({
219
+ key: 'knowledge',
220
+ value: newAttachments,
221
+ deleteKnowledge: true
222
+ });
223
+ onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(false);
224
+ };
225
+ var handleDownloadAttachment = function handleDownloadAttachment(id) {
226
+ var file = (localAttachments || [])[id];
227
+ if (!file) return;
228
+ handleDownloadKnowledge({
229
+ agentId: values.general.id.toString(),
230
+ knowledgeId: file.id
231
+ });
232
+ };
233
+ useEffect(function () {
234
+ if (isDownloadingSuccess && !isDownloadingError && !isDownloading) {
235
+ var url = URL.createObjectURL(isDownloadingSuccess.blob);
236
+ var link = document.createElement('a');
237
+ link.href = url;
238
+ link.download = isDownloadingSuccess.filename;
239
+ link.style.display = 'none';
240
+ document.body.appendChild(link);
241
+ link.click();
242
+ setTimeout(function () {
243
+ document.body.removeChild(link);
244
+ URL.revokeObjectURL(url);
245
+ handleResetStates();
246
+ }, 100);
247
+ }
248
+ }, [isDownloadingSuccess, isDownloadingError, isDownloading, handleResetStates]);
249
+ var handleAction = function handleAction(_ref2) {
250
+ var id = _ref2.id,
251
+ action = _ref2.action;
252
+ if (isDownloading) return;
253
+ if (action === 'delete') {
254
+ handleDeleteAttachment(id);
255
+ return;
256
+ }
257
+ if (action === 'download') {
258
+ handleDownloadAttachment(id);
259
+ }
260
+ };
261
+ var handleAttachmentClick = function handleAttachmentClick(attachment) {
262
+ // Permitir previsualización si tiene archivo local o URLs del backend
263
+ // Solo si no tiene errores (status !== 'failed')
264
+ if (attachment.status === 'failed') {
265
+ return;
266
+ }
267
+ if (attachment.file instanceof File || attachment.originalFile instanceof File || attachment.url_thumbnail || attachment.url_original || attachment.url_file) {
268
+ setPreviewAttachment(attachment);
269
+ }
270
+ };
271
+ var handleClosePreview = function handleClosePreview() {
272
+ setPreviewAttachment(null);
273
+ };
274
+ return /*#__PURE__*/_jsxs(_Fragment, {
275
+ children: [/*#__PURE__*/_jsxs(SCAKSWrapper, {
276
+ children: [/*#__PURE__*/_jsxs(SCAKSWrapperHeader, {
277
+ $index: 0,
278
+ children: [/*#__PURE__*/_jsx(SCAKSWrapperHeaderTitle, {
279
+ children: t('knowledgeSection.knowledgeTab')
280
+ }), /*#__PURE__*/_jsx(SCAKSWrapperHeaderInfo, {
281
+ children: /*#__PURE__*/_jsxs("div", {
282
+ children: [t('knowledgeSection.infoLabel'), /*#__PURE__*/_jsxs(SCAKSMoreInfoSpan, {
283
+ onClick: function onClick() {
284
+ return handleOnboardingNavigation('moreInfo');
285
+ },
286
+ children: [t('knowledgeSection.moreInfo'), /*#__PURE__*/_jsx(SCAKSMoreInfoIconWrapper, {
287
+ children: /*#__PURE__*/_jsx(Open, {
288
+ width: 18,
289
+ height: 18,
290
+ color: "#006FAF"
291
+ })
292
+ })]
293
+ })]
294
+ })
295
+ })]
296
+ }), /*#__PURE__*/_jsxs(SCAKSWrapperContent, {
297
+ $index: 1,
298
+ children: [/*#__PURE__*/_jsx(SCAKSFileUploadWrapperContent, {
299
+ children: /*#__PURE__*/_jsx(Tooltip, {
300
+ title: isAtSizeLimit ? t('knowledgeSection.error.maxSizeTitle') : '',
301
+ zIndex: tooltipZIndex,
302
+ children: /*#__PURE__*/_jsxs(SCAKSDropZone, {
303
+ isAtSizeLimit: isAtSizeLimit,
304
+ isDragging: isDragging,
305
+ onDragEnter: handleDragEnter,
306
+ onDragLeave: handleDragLeave,
307
+ onDragOver: handleDragOver,
308
+ onDrop: handleDrop,
309
+ children: [/*#__PURE__*/_jsx(SCAKSDropZoneIcon, {
310
+ children: /*#__PURE__*/_jsx(FileUpload, {
311
+ width: 30,
312
+ height: 30,
313
+ color: isAtSizeLimit ? '#999' : '#006FAF'
314
+ })
315
+ }), /*#__PURE__*/_jsxs(SCAKSDropZoneText, {
316
+ children: [/*#__PURE__*/_jsx(SCAKSDropZoneTextSpan, {
317
+ isAtSizeLimit: isAtSizeLimit,
318
+ "data-dropzone-link": true,
319
+ onClick: handleAttachClick,
320
+ children: t('knowledgeSection.dropZoneText.1')
321
+ }), /*#__PURE__*/_jsx("span", {
322
+ children: t('knowledgeSection.dropZoneText.2')
323
+ })]
324
+ }), /*#__PURE__*/_jsx(SCAKSDropZoneInfo, {
325
+ children: t('knowledgeSection.infoFileTypes')
326
+ })]
327
+ })
328
+ })
329
+ }), /*#__PURE__*/_jsx(SCAKSAttachmentsWrapper, {
330
+ children: (localAttachments || []).map(function (attachment, index) {
331
+ return /*#__PURE__*/_jsx(AttachmentCard, {
332
+ positionIndex: index,
333
+ attachment: attachment,
334
+ handleAction: handleAction,
335
+ abmKnowledgeSection: true,
336
+ fullWidth: true,
337
+ onClick: function onClick() {
338
+ return handleAttachmentClick(attachment);
339
+ }
340
+ }, "attachment-".concat(attachment === null || attachment === void 0 ? void 0 : attachment.name, "-").concat(attachment === null || attachment === void 0 ? void 0 : attachment.id, "-").concat(index));
341
+ })
342
+ })]
343
+ }), /*#__PURE__*/_jsx("input", {
344
+ ref: fileInputRef,
345
+ type: "file",
346
+ multiple: true,
347
+ accept: ".txt,.md,.csv,.doc,.docx,.ppt,.pptx,.pdf,.png,.jpg,.jpeg,.xlsx,.xls",
348
+ onChange: handleFileSelect,
349
+ style: {
350
+ display: 'none'
351
+ }
352
+ })]
353
+ }), modalProps.isOpen && /*#__PURE__*/_jsx(ModalFileExceeds, {
354
+ onClose: function onClose() {
355
+ setModalProps({
356
+ isOpen: false,
357
+ excludedFiles: [],
358
+ exceededFiles: [],
359
+ invalidExtensionFiles: []
360
+ });
361
+ onFileErrorChange === null || onFileErrorChange === void 0 || onFileErrorChange(false);
362
+ },
363
+ excludedFiles: modalProps.excludedFiles,
364
+ exceededFiles: modalProps.exceededFiles,
365
+ invalidExtensionFiles: modalProps.invalidExtensionFiles,
366
+ section: "abm_agent"
367
+ }), /*#__PURE__*/_jsx(AttachmentPreviewModal, {
368
+ isOpen: !!previewAttachment,
369
+ onClose: handleClosePreview,
370
+ attachment: previewAttachment
371
+ })]
372
+ });
373
+ };
374
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUb29sdGlwIiwiRmlsZVVwbG9hZCIsIk9wZW4iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZVRyYW5zbGF0aW9uIiwiQXR0YWNobWVudENhcmQiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiU0NBS1NXcmFwcGVyIiwiU0NBS1NXcmFwcGVySGVhZGVyIiwiU0NBS1NXcmFwcGVyQ29udGVudCIsIlNDQUtTV3JhcHBlckhlYWRlclRpdGxlIiwiU0NBS1NXcmFwcGVySGVhZGVySW5mbyIsIlNDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50IiwiU0NBS1NBdHRhY2htZW50c1dyYXBwZXIiLCJTQ0FLU01vcmVJbmZvU3BhbiIsIlNDQUtTTW9yZUluZm9JY29uV3JhcHBlciIsIlNDQUtTRHJvcFpvbmUiLCJTQ0FLU0Ryb3Bab25lSWNvbiIsIlNDQUtTRHJvcFpvbmVUZXh0IiwiU0NBS1NEcm9wWm9uZUluZm8iLCJTQ0FLU0Ryb3Bab25lVGV4dFNwYW4iLCJ1c2VEb3dubG9hZEtub3dsZWRnZSIsInVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uIiwiTW9kYWxGaWxlRXhjZWVkcyIsImFsbG93ZWRGaWxlVHlwZXNGb3JLbm93bGVkZ2UiLCJmaWxlVHlwZXMiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJnZXRVbmlxdWVTdHJpbmciLCJwcmV2U3RyaW5ncyIsInN0cmluZ1RvQ2hhbmdlIiwiX3N0cmluZ1RvQ2hhbmdlJHNwbGl0Iiwic3BsaXQiLCJfc3RyaW5nVG9DaGFuZ2Ukc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJmaWxlbmFtZSIsIl9zdHJpbmdUb0NoYW5nZSRzcGxpdDMiLCJleHRlbnNpb24iLCJleHQiLCJjb25jYXQiLCJpbmNsdWRlcyIsImNvdW50ZXIiLCJuZXdGaWxlbmFtZSIsIk1BWF9UT1RBTF9TSVpFIiwiQWJtS25vd2xlZGdlU2VjdGlvbiIsIl9yZWYiLCJoYW5kbGVTZXRBZ2VudFZhbHVlcyIsInZhbHVlcyIsIm9uRmlsZUVycm9yQ2hhbmdlIiwidG9vbHRpcFpJbmRleCIsIl91c2VTdGF0ZSIsImtub3dsZWRnZSIsIl91c2VTdGF0ZTIiLCJsb2NhbEF0dGFjaG1lbnRzIiwic2V0TG9jYWxBdHRhY2htZW50cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlU3RhdGU1IiwiaXNPcGVuIiwiZXhjbHVkZWRGaWxlcyIsImV4Y2VlZGVkRmlsZXMiLCJpbnZhbGlkRXh0ZW5zaW9uRmlsZXMiLCJfdXNlU3RhdGU2IiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJfdXNlRG93bmxvYWRLbm93bGVkZ2UiLCJoYW5kbGVEb3dubG9hZEtub3dsZWRnZSIsImlzRG93bmxvYWRpbmdTdWNjZXNzIiwic3VjY2VzcyIsImlzRG93bmxvYWRpbmdFcnJvciIsImVycm9yIiwiaXNEb3dubG9hZGluZyIsImlzTG9hZGluZyIsImhhbmRsZVJlc2V0U3RhdGVzIiwiX3VzZU9uYm9hcmRpbmdOYXZpZ2F0IiwiaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24iLCJmaWxlSW5wdXRSZWYiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzRHJhZ2dpbmciLCJzZXRJc0RyYWdnaW5nIiwiY3VycmVudFRvdGFsU2l6ZSIsInJlZHVjZSIsInRvdGFsIiwiYXR0YWNobWVudCIsInNpemUiLCJOdW1iZXIiLCJpc05hTiIsImlzQXRTaXplTGltaXQiLCJoYW5kbGVBdHRhY2hDbGljayIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImN1cnJlbnQiLCJjbGljayIsImhhbmRsZUZpbGVTZWxlY3QiLCJlIiwiZmlsZXMiLCJ0YXJnZXQiLCJpbnNlcnRlZEZpbGVzIiwiYXR0YWNobWVudHNOYW1lcyIsIm1hcCIsIm5hbWUiLCJleGlzdGluZ1RvdGFsU2l6ZSIsInJ1bm5pbmdUb3RhbFNpemUiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImZpbGVOYW1lUGFydHMiLCJmaWxlRXh0ZW5zaW9uIiwibGVuZ3RoIiwicG9wIiwidG9Mb3dlckNhc2UiLCJwdXNoIiwibmV3VG90YWxTaXplIiwidHlwZUZpbGUiLCJ0eXBlIiwidW5pcXVlTmFtZSIsInBhcnNlZEZpbGUiLCJGaWxlIiwiYXR0YWNobWVudEZpbGUiLCJpZCIsIkRhdGUiLCJub3ciLCJNYXRoIiwicmFuZG9tIiwic3RhdHVzIiwiaGFzRXJyb3JzIiwia2V5IiwidmFsdWUiLCJwcmV2IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiaGFuZGxlRHJhZ0VudGVyIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJzeW50aGV0aWNFdmVudCIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlVG9EZWxldGUiLCJuZXdBdHRhY2htZW50cyIsImZpbHRlciIsIl8iLCJpbmRleCIsImRlbGV0ZUtub3dsZWRnZSIsImhhbmRsZURvd25sb2FkQXR0YWNobWVudCIsImFnZW50SWQiLCJnZW5lcmFsIiwidG9TdHJpbmciLCJrbm93bGVkZ2VJZCIsInVybCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImJsb2IiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsImRvd25sb2FkIiwic3R5bGUiLCJkaXNwbGF5IiwiYm9keSIsImFwcGVuZENoaWxkIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiaGFuZGxlQWN0aW9uIiwiX3JlZjIiLCJhY3Rpb24iLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJjaGlsZHJlbiIsIiRpbmRleCIsIm9uQ2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwidGl0bGUiLCJ6SW5kZXgiLCJvbkRyYWdFbnRlciIsIm9uRHJhZ0xlYXZlIiwib25EcmFnT3ZlciIsIm9uRHJvcCIsInBvc2l0aW9uSW5kZXgiLCJhYm1Lbm93bGVkZ2VTZWN0aW9uIiwiZnVsbFdpZHRoIiwicmVmIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJzZWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtS25vd2xlZGdlU2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2FuY2hvci1pcy12YWxpZCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9GaWxlVXBsb2FkJ1xuaW1wb3J0IHsgT3BlbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL09wZW4nXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgRHJhZ0V2ZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IE1vZGFsVmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnRNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHtcbiAgU0NBS1NXcmFwcGVyLFxuICBTQ0FLU1dyYXBwZXJIZWFkZXIsXG4gIFNDQUtTV3JhcHBlckNvbnRlbnQsXG4gIFNDQUtTV3JhcHBlckhlYWRlclRpdGxlLFxuICBTQ0FLU1dyYXBwZXJIZWFkZXJJbmZvLFxuICBTQ0FLU0ZpbGVVcGxvYWRXcmFwcGVyQ29udGVudCxcbiAgU0NBS1NBdHRhY2htZW50c1dyYXBwZXIsXG4gIFNDQUtTTW9yZUluZm9TcGFuLFxuICBTQ0FLU01vcmVJbmZvSWNvbldyYXBwZXIsXG4gIFNDQUtTRHJvcFpvbmUsXG4gIFNDQUtTRHJvcFpvbmVJY29uLFxuICBTQ0FLU0Ryb3Bab25lVGV4dCxcbiAgU0NBS1NEcm9wWm9uZUluZm8sXG4gIFNDQUtTRHJvcFpvbmVUZXh0U3Bhbixcbn0gZnJvbSAnLi9BYm1Lbm93bGVkZ2VTZWN0aW9uLnN0eWxlcydcbmltcG9ydCB7IHVzZURvd25sb2FkS25vd2xlZGdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlS25vd2xlZGdlL2Rvd25sb2FkS25vd2xlZGdlJ1xuaW1wb3J0IHsgdXNlT25ib2FyZGluZ05hdmlnYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VPbmJvYXJkaW5nTmF2aWdhdGlvbidcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgYWxsb3dlZEZpbGVUeXBlc0Zvcktub3dsZWRnZSwgZmlsZVR5cGVzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Zvcm1hdEV4dGVuc2lvbnMnXG5cbmZ1bmN0aW9uIGdldFVuaXF1ZVN0cmluZyhwcmV2U3RyaW5nczogc3RyaW5nW10sIHN0cmluZ1RvQ2hhbmdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBbZmlsZW5hbWUsIGV4dGVuc2lvbiA9ICcnXSA9IHN0cmluZ1RvQ2hhbmdlLnNwbGl0KCcuJylcbiAgY29uc3QgZXh0ID0gZXh0ZW5zaW9uID8gYC4ke2V4dGVuc2lvbn1gIDogJydcblxuICBpZiAoIXByZXZTdHJpbmdzPy5pbmNsdWRlcyhzdHJpbmdUb0NoYW5nZSkpIHtcbiAgICByZXR1cm4gc3RyaW5nVG9DaGFuZ2VcbiAgfVxuXG4gIGxldCBjb3VudGVyID0gMVxuICBsZXQgbmV3RmlsZW5hbWVcbiAgZG8ge1xuICAgIG5ld0ZpbGVuYW1lID0gYCR7ZmlsZW5hbWV9KCR7Y291bnRlcn0pJHtleHR9YFxuICAgIGNvdW50ZXIrK1xuICB9IHdoaWxlIChwcmV2U3RyaW5ncz8uaW5jbHVkZXMobmV3RmlsZW5hbWUpKVxuXG4gIHJldHVybiBuZXdGaWxlbmFtZVxufVxuXG5jb25zdCBNQVhfVE9UQUxfU0laRSA9IDUgKiAxMDI0ICogMTAyNCAvLyA1TUIgdG90YWxcblxuZXhwb3J0IGNvbnN0IEFibUtub3dsZWRnZVNlY3Rpb24gPSAoe1xuICBoYW5kbGVTZXRBZ2VudFZhbHVlcyxcbiAgdmFsdWVzLFxuICBvbkZpbGVFcnJvckNoYW5nZSxcbiAgdG9vbHRpcFpJbmRleCxcbn06IHtcbiAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7XG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgfToge1xuICAgIGtleTogc3RyaW5nXG4gICAgdmFsdWU6IHVua25vd25cbiAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gIH0pID0+IHZvaWRcbiAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICBvbkZpbGVFcnJvckNoYW5nZT86IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgdG9vbHRpcFpJbmRleD86IG51bWJlclxufSkgPT4ge1xuICBjb25zdCBbbG9jYWxBdHRhY2htZW50cywgc2V0TG9jYWxBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZVtdPih2YWx1ZXMua25vd2xlZGdlIHx8IFtdKVxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbignYWJtX2FnZW50X3NlY3Rpb24nKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBpbnZhbGlkRXh0ZW5zaW9uRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICB9KVxuICBjb25zdCB7XG4gICAgaGFuZGxlRG93bmxvYWRLbm93bGVkZ2UsXG4gICAgc3VjY2VzczogaXNEb3dubG9hZGluZ1N1Y2Nlc3MsXG4gICAgZXJyb3I6IGlzRG93bmxvYWRpbmdFcnJvcixcbiAgICBpc0xvYWRpbmc6IGlzRG93bmxvYWRpbmcsXG4gICAgaGFuZGxlUmVzZXRTdGF0ZXMsXG4gIH0gPSB1c2VEb3dubG9hZEtub3dsZWRnZSgpXG4gIGNvbnN0IHsgaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24gfSA9IHVzZU9uYm9hcmRpbmdOYXZpZ2F0aW9uKClcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtpc0RyYWdnaW5nLCBzZXRJc0RyYWdnaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIC8vIENhbGN1bGFyIGVsIHRhbWHDsW8gdG90YWwgYWN0dWFsIGRlIGFyY2hpdm9zXG4gIGNvbnN0IGN1cnJlbnRUb3RhbFNpemUgPSAobG9jYWxBdHRhY2htZW50cyB8fCBbXSkucmVkdWNlKCh0b3RhbCwgYXR0YWNobWVudCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJyA/IGF0dGFjaG1lbnQuc2l6ZSA6IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgcmV0dXJuIHRvdGFsICsgKE51bWJlci5pc05hTihzaXplKSA/IDAgOiBzaXplKVxuICB9LCAwKVxuICBjb25zdCBpc0F0U2l6ZUxpbWl0ID0gY3VycmVudFRvdGFsU2l6ZSA+PSBNQVhfVE9UQUxfU0laRVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaENsaWNrID0gKCkgPT4ge1xuICAgIGlmIChpc0F0U2l6ZUxpbWl0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLnRhcmdldFxuICAgIGlmICghZmlsZXMpIHJldHVyblxuXG4gICAgY29uc3QgZXhjZWVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGV4Y2x1ZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBpbnZhbGlkRXh0ZW5zaW9uRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBpbnNlcnRlZEZpbGVzOiBBdHRhY2htZW50RmlsZVtdID0gW11cbiAgICBjb25zdCBhdHRhY2htZW50c05hbWVzID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pLm1hcChhdHRhY2htZW50ID0+IGF0dGFjaG1lbnQubmFtZSlcblxuICAgIC8vIENhbGN1bGFyIGVsIHRhbWHDsW8gdG90YWwgYWN0dWFsIGRlIGFyY2hpdm9zIHlhIGFkanVudG9zXG4gICAgY29uc3QgZXhpc3RpbmdUb3RhbFNpemUgPSAobG9jYWxBdHRhY2htZW50cyB8fCBbXSkucmVkdWNlKCh0b3RhbCwgYXR0YWNobWVudCkgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInID8gYXR0YWNobWVudC5zaXplIDogTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgIHJldHVybiB0b3RhbCArIChOdW1iZXIuaXNOYU4oc2l6ZSkgPyAwIDogc2l6ZSlcbiAgICB9LCAwKVxuICAgIGxldCBydW5uaW5nVG90YWxTaXplID0gZXhpc3RpbmdUb3RhbFNpemVcbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlc0Zvcktub3dsZWRnZS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpbnZhbGlkRXh0ZW5zaW9uRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgYWdyZWdhciBlc3RlIGFyY2hpdm8gZXhjZWRlcsOtYSBlbCBsw61taXRlIHRvdGFsIGRlIDVNQlxuICAgICAgY29uc3QgbmV3VG90YWxTaXplID0gcnVubmluZ1RvdGFsU2l6ZSArIGZpbGUuc2l6ZVxuICAgICAgaWYgKG5ld1RvdGFsU2l6ZSA+IE1BWF9UT1RBTF9TSVpFKSB7XG4gICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSBnZXRVbmlxdWVTdHJpbmcoYXR0YWNobWVudHNOYW1lcywgZmlsZS5uYW1lKVxuICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgdW5pcXVlTmFtZSwgeyB0eXBlOiB0eXBlRmlsZSB9KVxuXG4gICAgICBjb25zdCBhdHRhY2htZW50RmlsZTogQXR0YWNobWVudEZpbGUgPSB7XG4gICAgICAgIGZpbGU6IHBhcnNlZEZpbGUsXG4gICAgICAgIGlkOiBgJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YCxcbiAgICAgICAgbmFtZTogdW5pcXVlTmFtZSxcbiAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICB0eXBlOiB0eXBlRmlsZSxcbiAgICAgICAgc3RhdHVzOiAnc3RhcnRlZCcsXG4gICAgICB9XG5cbiAgICAgIC8vIFNvbG8gYWdyZWdhciBlbCBhcmNoaXZvIHNpIG5vIGVzdMOhIGVuIGxhIGxpc3RhIGRlIGFyY2hpdm9zIGV4Y2VkaWRvc1xuICAgICAgaWYgKCFleGNlZWRlZEZpbGVzLmluY2x1ZGVzKGZpbGUubmFtZSkpIHtcbiAgICAgICAgaW5zZXJ0ZWRGaWxlcy5wdXNoKGF0dGFjaG1lbnRGaWxlKVxuICAgICAgICAvLyBBY3R1YWxpemFyIGVsIHRhbWHDsW8gdG90YWwgcGFyYSBsYSBzaWd1aWVudGUgdmFsaWRhY2nDs25cbiAgICAgICAgcnVubmluZ1RvdGFsU2l6ZSArPSBmaWxlLnNpemVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gTW9zdHJhciBtb2RhbCBzaSBoYXkgYXJjaGl2b3MgY29uIGV4dGVuc2nDs24gaW52w6FsaWRhIG8gcXVlIGV4Y2VkZW4gZWwgbMOtbWl0ZVxuICAgIGNvbnN0IGhhc0Vycm9ycyA9IGludmFsaWRFeHRlbnNpb25GaWxlcy5sZW5ndGggPiAwIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoID4gMFxuICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IHRydWUsIGV4Y2x1ZGVkRmlsZXMsIGV4Y2VlZGVkRmlsZXMsIGludmFsaWRFeHRlbnNpb25GaWxlcyB9KVxuICAgICAgb25GaWxlRXJyb3JDaGFuZ2U/Lih0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkZpbGVFcnJvckNoYW5nZT8uKGZhbHNlKVxuICAgIH1cblxuICAgIC8vIFNvbG8gYWdyZWdhciBhcmNoaXZvcyB2w6FsaWRvcyBxdWUgbm8gZXhjZWRhbiBlbCBsw61taXRlXG4gICAgaWYgKGluc2VydGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcz8uKHsga2V5OiAna25vd2xlZGdlJywgdmFsdWU6IGluc2VydGVkRmlsZXMgfSlcbiAgICAgIHNldExvY2FsQXR0YWNobWVudHMocHJldiA9PiBbLi4uKHByZXYgfHwgW10pLCAuLi5pbnNlcnRlZEZpbGVzXSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW50ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoIWlzQXRTaXplTGltaXQpIHtcbiAgICAgIHNldElzRHJhZ2dpbmcodHJ1ZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ092ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXRJc0RyYWdnaW5nKGZhbHNlKVxuXG4gICAgaWYgKGlzQXRTaXplTGltaXQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgZmlsZXMgfSA9IGUuZGF0YVRyYW5zZmVyXG4gICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENyZWFyIHVuIGV2ZW50byBzaW50w6l0aWNvIHBhcmEgcmV1dGlsaXphciBsYSBsw7NnaWNhIGRlIGhhbmRsZUZpbGVTZWxlY3RcbiAgICBjb25zdCBzeW50aGV0aWNFdmVudCA9IHtcbiAgICAgIHRhcmdldDogeyBmaWxlcyB9LFxuICAgIH0gYXMgQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD5cblxuICAgIGhhbmRsZUZpbGVTZWxlY3Qoc3ludGhldGljRXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGlkOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBmaWxlVG9EZWxldGUgPSBsb2NhbEF0dGFjaG1lbnRzW2lkXVxuICAgIGlmICghZmlsZVRvRGVsZXRlKSByZXR1cm5cblxuICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSBpZClcbiAgICBzZXRMb2NhbEF0dGFjaG1lbnRzKG5ld0F0dGFjaG1lbnRzKVxuXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM/Lih7IGtleTogJ2tub3dsZWRnZScsIHZhbHVlOiBuZXdBdHRhY2htZW50cywgZGVsZXRlS25vd2xlZGdlOiB0cnVlIH0pXG5cbiAgICBvbkZpbGVFcnJvckNoYW5nZT8uKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRG93bmxvYWRBdHRhY2htZW50ID0gKGlkOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBmaWxlID0gKGxvY2FsQXR0YWNobWVudHMgfHwgW10pW2lkXVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG5cbiAgICBoYW5kbGVEb3dubG9hZEtub3dsZWRnZSh7IGFnZW50SWQ6IHZhbHVlcy5nZW5lcmFsLmlkIS50b1N0cmluZygpLCBrbm93bGVkZ2VJZDogZmlsZS5pZCB9KVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNEb3dubG9hZGluZ1N1Y2Nlc3MgJiYgIWlzRG93bmxvYWRpbmdFcnJvciAmJiAhaXNEb3dubG9hZGluZykge1xuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpc0Rvd25sb2FkaW5nU3VjY2Vzcy5ibG9iKVxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gdXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gaXNEb3dubG9hZGluZ1N1Y2Nlc3MuZmlsZW5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgICAgIGhhbmRsZVJlc2V0U3RhdGVzKClcbiAgICAgIH0sIDEwMClcbiAgICB9XG4gIH0sIFtpc0Rvd25sb2FkaW5nU3VjY2VzcywgaXNEb3dubG9hZGluZ0Vycm9yLCBpc0Rvd25sb2FkaW5nLCBoYW5kbGVSZXNldFN0YXRlc10pXG5cbiAgY29uc3QgaGFuZGxlQWN0aW9uID0gKHsgaWQsIGFjdGlvbiB9OiB7IGlkOiBudW1iZXI7IGFjdGlvbjogJ2RlbGV0ZScgfCAnZG93bmxvYWQnIH0pID0+IHtcbiAgICBpZiAoaXNEb3dubG9hZGluZykgcmV0dXJuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoaWQpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGFjdGlvbiA9PT0gJ2Rvd25sb2FkJykge1xuICAgICAgaGFuZGxlRG93bmxvYWRBdHRhY2htZW50KGlkKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgLy8gU29sbyBzaSBubyB0aWVuZSBlcnJvcmVzIChzdGF0dXMgIT09ICdmYWlsZWQnKVxuICAgIGlmIChhdHRhY2htZW50LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfZmlsZVxuICAgICkge1xuICAgICAgc2V0UHJldmlld0F0dGFjaG1lbnQoYXR0YWNobWVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgc2V0UHJldmlld0F0dGFjaG1lbnQobnVsbClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTQ0FLU1dyYXBwZXI+XG4gICAgICAgIDxTQ0FLU1dyYXBwZXJIZWFkZXIgJGluZGV4PXswfT5cbiAgICAgICAgICA8U0NBS1NXcmFwcGVySGVhZGVyVGl0bGU+e3QoJ2tub3dsZWRnZVNlY3Rpb24ua25vd2xlZGdlVGFiJyl9PC9TQ0FLU1dyYXBwZXJIZWFkZXJUaXRsZT5cbiAgICAgICAgICA8U0NBS1NXcmFwcGVySGVhZGVySW5mbz5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHt0KCdrbm93bGVkZ2VTZWN0aW9uLmluZm9MYWJlbCcpfVxuICAgICAgICAgICAgICA8U0NBS1NNb3JlSW5mb1NwYW4gb25DbGljaz17KCkgPT4gaGFuZGxlT25ib2FyZGluZ05hdmlnYXRpb24oJ21vcmVJbmZvJyl9PlxuICAgICAgICAgICAgICAgIHt0KCdrbm93bGVkZ2VTZWN0aW9uLm1vcmVJbmZvJyl9XG4gICAgICAgICAgICAgICAgPFNDQUtTTW9yZUluZm9JY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgIDxPcGVuIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gY29sb3I9XCIjMDA2RkFGXCIgLz5cbiAgICAgICAgICAgICAgICA8L1NDQUtTTW9yZUluZm9JY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgPC9TQ0FLU01vcmVJbmZvU3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvU0NBS1NXcmFwcGVySGVhZGVySW5mbz5cbiAgICAgICAgPC9TQ0FLU1dyYXBwZXJIZWFkZXI+XG4gICAgICAgIDxTQ0FLU1dyYXBwZXJDb250ZW50ICRpbmRleD17MX0+XG4gICAgICAgICAgPFNDQUtTRmlsZVVwbG9hZFdyYXBwZXJDb250ZW50PlxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzQXRTaXplTGltaXQgPyB0KCdrbm93bGVkZ2VTZWN0aW9uLmVycm9yLm1heFNpemVUaXRsZScpIDogJyd9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lXG4gICAgICAgICAgICAgICAgaXNBdFNpemVMaW1pdD17aXNBdFNpemVMaW1pdH1cbiAgICAgICAgICAgICAgICBpc0RyYWdnaW5nPXtpc0RyYWdnaW5nfVxuICAgICAgICAgICAgICAgIG9uRHJhZ0VudGVyPXtoYW5kbGVEcmFnRW50ZXJ9XG4gICAgICAgICAgICAgICAgb25EcmFnTGVhdmU9e2hhbmRsZURyYWdMZWF2ZX1cbiAgICAgICAgICAgICAgICBvbkRyYWdPdmVyPXtoYW5kbGVEcmFnT3Zlcn1cbiAgICAgICAgICAgICAgICBvbkRyb3A9e2hhbmRsZURyb3B9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U0NBS1NEcm9wWm9uZUljb24+XG4gICAgICAgICAgICAgICAgICA8RmlsZVVwbG9hZCB3aWR0aD17MzB9IGhlaWdodD17MzB9IGNvbG9yPXtpc0F0U2l6ZUxpbWl0ID8gJyM5OTknIDogJyMwMDZGQUYnfSAvPlxuICAgICAgICAgICAgICAgIDwvU0NBS1NEcm9wWm9uZUljb24+XG4gICAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVUZXh0PlxuICAgICAgICAgICAgICAgICAgPFNDQUtTRHJvcFpvbmVUZXh0U3BhbiBpc0F0U2l6ZUxpbWl0PXtpc0F0U2l6ZUxpbWl0fSBkYXRhLWRyb3B6b25lLWxpbmsgb25DbGljaz17aGFuZGxlQXR0YWNoQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICB7dCgna25vd2xlZGdlU2VjdGlvbi5kcm9wWm9uZVRleHQuMScpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FLU0Ryb3Bab25lVGV4dFNwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57dCgna25vd2xlZGdlU2VjdGlvbi5kcm9wWm9uZVRleHQuMicpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1NDQUtTRHJvcFpvbmVUZXh0PlxuICAgICAgICAgICAgICAgIDxTQ0FLU0Ryb3Bab25lSW5mbz57dCgna25vd2xlZGdlU2VjdGlvbi5pbmZvRmlsZVR5cGVzJyl9PC9TQ0FLU0Ryb3Bab25lSW5mbz5cbiAgICAgICAgICAgICAgPC9TQ0FLU0Ryb3Bab25lPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvU0NBS1NGaWxlVXBsb2FkV3JhcHBlckNvbnRlbnQ+XG4gICAgICAgICAgPFNDQUtTQXR0YWNobWVudHNXcmFwcGVyPlxuICAgICAgICAgICAgeyhsb2NhbEF0dGFjaG1lbnRzIHx8IFtdKS5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIGtleT17YGF0dGFjaG1lbnQtJHthdHRhY2htZW50Py5uYW1lfS0ke2F0dGFjaG1lbnQ/LmlkfS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgaGFuZGxlQWN0aW9uPXtoYW5kbGVBY3Rpb259XG4gICAgICAgICAgICAgICAgICBhYm1Lbm93bGVkZ2VTZWN0aW9uXG4gICAgICAgICAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQUtTQXR0YWNobWVudHNXcmFwcGVyPlxuICAgICAgICA8L1NDQUtTV3JhcHBlckNvbnRlbnQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgIGFjY2VwdD1cIi50eHQsLm1kLC5jc3YsLmRvYywuZG9jeCwucHB0LC5wcHR4LC5wZGYsLnBuZywuanBnLC5qcGVnLC54bHN4LC54bHNcIlxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0fVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9TQ0FLU1dyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGludmFsaWRFeHRlbnNpb25GaWxlczogW10gfSlcbiAgICAgICAgICAgIG9uRmlsZUVycm9yQ2hhbmdlPy4oZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleGNsdWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2x1ZGVkRmlsZXN9XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNlZWRlZEZpbGVzfVxuICAgICAgICAgIGludmFsaWRFeHRlbnNpb25GaWxlcz17bW9kYWxQcm9wcy5pbnZhbGlkRXh0ZW5zaW9uRmlsZXN9XG4gICAgICAgICAgc2VjdGlvbj1cImFibV9hZ2VudFwiXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQWlDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDM0UsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFHM0UsU0FDRUMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLG1CQUFtQixFQUNuQkMsdUJBQXVCLEVBQ3ZCQyxzQkFBc0IsRUFDdEJDLDZCQUE2QixFQUM3QkMsdUJBQXVCLEVBQ3ZCQyxpQkFBaUIsRUFDakJDLHdCQUF3QixFQUN4QkMsYUFBYSxFQUNiQyxpQkFBaUIsRUFDakJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLEVBQ2pCQyxxQkFBcUIsUUFDaEIsOEJBQThCO0FBQ3JDLFNBQVNDLG9CQUFvQixRQUFRLCtDQUErQztBQUNwRixTQUFTQyx1QkFBdUIsUUFBUSx3Q0FBd0M7QUFDaEYsU0FBU0MsZ0JBQWdCLFFBQVEsbURBQW1EO0FBQ3BGLFNBQVNDLDRCQUE0QixFQUFFQyxTQUFTLFFBQVEscUNBQXFDO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUE7QUFFN0YsU0FBU0Ms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