@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,533 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ import { forwardRef, useCallback, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
6
+ import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
7
+ import { useContextMentions } from '../../../hooks/useContextMentions';
8
+ import { buildChipElement } from '../ContextMentionChip';
9
+ import { ContextMentionChipGlobalStyles } from '../ContextMentionChip/ContextMentionChip.styles';
10
+ import { buildSlashChipElement } from '../SlashCommandChip';
11
+ import { filesFromDataTransfer } from '../../../utils/chatInputFiles';
12
+ import { SCMEEditable } from './ContextMentionEditor.styles';
13
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
14
+ var isPlaceholderTruncatedInEditor = function isPlaceholderTruncatedInEditor(editor, placeholder) {
15
+ var trimmed = placeholder.trim();
16
+ if (!trimmed) {
17
+ return false;
18
+ }
19
+ var clientWidth = editor.clientWidth;
20
+ if (clientWidth <= 4) {
21
+ return false;
22
+ }
23
+ var styles = window.getComputedStyle(editor);
24
+ var ctx = document.createElement('canvas').getContext('2d');
25
+ if (!ctx) {
26
+ return false;
27
+ }
28
+ ctx.font = "".concat(styles.fontWeight, " ").concat(styles.fontSize, " ").concat(styles.fontFamily);
29
+ var measured = ctx.measureText(trimmed).width;
30
+ var paddingLeft = parseFloat(styles.paddingLeft) || 0;
31
+ var paddingRight = parseFloat(styles.paddingRight) || 0;
32
+ var borderLeft = parseFloat(styles.borderLeftWidth) || 0;
33
+ var borderRight = parseFloat(styles.borderRightWidth) || 0;
34
+ var available = Math.max(0, clientWidth - paddingLeft - paddingRight - borderLeft - borderRight);
35
+ return measured > available + 1;
36
+ };
37
+ export var ContextMentionEditor = /*#__PURE__*/forwardRef(function (_ref, ref) {
38
+ var _placeholder$trim2;
39
+ var placeholder = _ref.placeholder,
40
+ disabled = _ref.disabled,
41
+ className = _ref.className,
42
+ maxHeight = _ref.maxHeight,
43
+ onInput = _ref.onInput,
44
+ onKeyDown = _ref.onKeyDown,
45
+ onFocus = _ref.onFocus,
46
+ onBlur = _ref.onBlur,
47
+ onPasteFiles = _ref.onPasteFiles;
48
+ var _useContextMentions = useContextMentions(),
49
+ editorRef = _useContextMentions.editorRef,
50
+ updateTrigger = _useContextMentions.updateTrigger,
51
+ replaceTriggerWithChip = _useContextMentions.replaceTriggerWithChip,
52
+ syncTriggerAtRunLength = _useContextMentions.syncTriggerAtRunLength,
53
+ updateSlashTrigger = _useContextMentions.updateSlashTrigger,
54
+ replaceTriggerWithSlashChip = _useContextMentions.replaceTriggerWithSlashChip,
55
+ updateHashTrigger = _useContextMentions.updateHashTrigger,
56
+ replaceTriggerWithSkillChip = _useContextMentions.replaceTriggerWithSkillChip,
57
+ serialize = _useContextMentions.serialize,
58
+ clearEditorDom = _useContextMentions.clear,
59
+ focus = _useContextMentions.focus;
60
+ var skipNextInput = useRef(false);
61
+ var _useState = useState(false),
62
+ _useState2 = _slicedToArray(_useState, 2),
63
+ placeholderTruncated = _useState2[0],
64
+ setPlaceholderTruncated = _useState2[1];
65
+ var _useState3 = useState(true),
66
+ _useState4 = _slicedToArray(_useState3, 2),
67
+ logicalEmpty = _useState4[0],
68
+ setLogicalEmpty = _useState4[1];
69
+ var syncEditorEmptyAttribute = useCallback(function (isEmpty) {
70
+ if (editorRef.current) {
71
+ editorRef.current.setAttribute('data-empty', String(isEmpty));
72
+ }
73
+ }, []);
74
+ var normalizeEmptyEditorDom = useCallback(function () {
75
+ var _editor$textContent;
76
+ var editor = editorRef.current;
77
+ if (!editor) return;
78
+
79
+ // Limpiar cualquier residuo (br, espacios) que deje el browser al vaciar el contenteditable.
80
+ // Sin esto, un espacio suelto activa data-empty="true" + ::before placeholder en línea 1
81
+ // y desplaza el cursor a la línea 2.
82
+ if (((_editor$textContent = editor.textContent) === null || _editor$textContent === void 0 ? void 0 : _editor$textContent.trim()) === '') {
83
+ editor.innerHTML = '';
84
+ }
85
+ var selection = window.getSelection();
86
+ if (!selection) return;
87
+ var range = document.createRange();
88
+ range.selectNodeContents(editor);
89
+ range.collapse(true);
90
+ selection.removeAllRanges();
91
+ selection.addRange(range);
92
+ }, [editorRef]);
93
+ var recomputePlaceholderTruncation = useCallback(function () {
94
+ var _placeholder$trim;
95
+ var el = editorRef.current;
96
+ var ph = (_placeholder$trim = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim !== void 0 ? _placeholder$trim : '';
97
+ var isEditorLogicallyEmpty = serialize().text.trim() === '';
98
+ if (!el || !ph || !isEditorLogicallyEmpty) {
99
+ setPlaceholderTruncated(false);
100
+ return;
101
+ }
102
+ setPlaceholderTruncated(isPlaceholderTruncatedInEditor(el, ph));
103
+ }, [placeholder, serialize]);
104
+ useLayoutEffect(function () {
105
+ recomputePlaceholderTruncation();
106
+ var el = editorRef.current;
107
+ if (!el) {
108
+ return undefined;
109
+ }
110
+ var ro = new ResizeObserver(function () {
111
+ queueMicrotask(recomputePlaceholderTruncation);
112
+ });
113
+ ro.observe(el);
114
+ return function () {
115
+ return ro.disconnect();
116
+ };
117
+ }, [placeholder, disabled, recomputePlaceholderTruncation]);
118
+ var emitInputState = useCallback(function () {
119
+ var trig = updateTrigger();
120
+ var slashTrig = updateSlashTrigger();
121
+ var hashTrig = updateHashTrigger();
122
+ var state = serialize();
123
+ var isEmpty = state.text.trim() === '';
124
+ if (isEmpty) {
125
+ normalizeEmptyEditorDom();
126
+ state = {
127
+ text: '',
128
+ mentions: [],
129
+ slashCommands: []
130
+ };
131
+ }
132
+ syncEditorEmptyAttribute(isEmpty);
133
+ setLogicalEmpty(isEmpty);
134
+ onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
135
+ trigger: {
136
+ active: trig.active,
137
+ query: trig.query,
138
+ atRunLength: trig.atRunLength
139
+ },
140
+ slashTrigger: {
141
+ active: slashTrig.active,
142
+ query: slashTrig.query
143
+ },
144
+ hashTrigger: {
145
+ active: hashTrig.active,
146
+ query: hashTrig.query
147
+ }
148
+ }));
149
+ queueMicrotask(recomputePlaceholderTruncation);
150
+ }, [updateTrigger, updateSlashTrigger, updateHashTrigger, serialize, normalizeEmptyEditorDom, syncEditorEmptyAttribute, onInput, recomputePlaceholderTruncation]);
151
+ useImperativeHandle(ref, function () {
152
+ return {
153
+ focus: focus,
154
+ clear: function clear() {
155
+ clearEditorDom();
156
+ syncEditorEmptyAttribute(true);
157
+ setLogicalEmpty(true);
158
+ queueMicrotask(recomputePlaceholderTruncation);
159
+ },
160
+ setPlainText: function setPlainText(text) {
161
+ var editor = editorRef.current;
162
+ if (!editor) return;
163
+ var plain = text !== null && text !== void 0 ? text : '';
164
+ editor.textContent = plain;
165
+ skipNextInput.current = true;
166
+ var state = serialize();
167
+ var isEmpty = state.text.trim() === '';
168
+ if (isEmpty) {
169
+ editor.innerHTML = '';
170
+ }
171
+ syncEditorEmptyAttribute(isEmpty);
172
+ setLogicalEmpty(isEmpty);
173
+ onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
174
+ trigger: {
175
+ active: false,
176
+ query: '',
177
+ atRunLength: 0
178
+ },
179
+ slashTrigger: {
180
+ active: false,
181
+ query: ''
182
+ },
183
+ hashTrigger: {
184
+ active: false,
185
+ query: ''
186
+ }
187
+ }));
188
+ var selection = window.getSelection();
189
+ if (selection && editor.childNodes.length > 0) {
190
+ var range = document.createRange();
191
+ range.selectNodeContents(editor);
192
+ range.collapse(false);
193
+ selection.removeAllRanges();
194
+ selection.addRange(range);
195
+ }
196
+ queueMicrotask(function () {
197
+ skipNextInput.current = false;
198
+ recomputePlaceholderTruncation();
199
+ });
200
+ },
201
+ insertMentionTrigger: function insertMentionTrigger() {
202
+ var editor = editorRef.current;
203
+ if (!editor || disabled) return;
204
+ focus();
205
+ var selection = window.getSelection();
206
+ if (!selection) return;
207
+ if (!selection.anchorNode || !editor.contains(selection.anchorNode)) {
208
+ var endRange = document.createRange();
209
+ endRange.selectNodeContents(editor);
210
+ endRange.collapse(false);
211
+ selection.removeAllRanges();
212
+ selection.addRange(endRange);
213
+ }
214
+ var range = selection.getRangeAt(0);
215
+ range.collapse(true);
216
+ var prefix = '';
217
+ var startContainer = range.startContainer,
218
+ startOffset = range.startOffset;
219
+ if (startContainer.nodeType === Node.TEXT_NODE) {
220
+ var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
221
+ // Espacio solo si hay texto previo que no sea límite ni `@` (@@ deben quedar seguidos).
222
+ if (prevChar && !/[\s([{@]/.test(prevChar)) {
223
+ prefix = ' ';
224
+ }
225
+ }
226
+ var inserted = "".concat(prefix, "@");
227
+ var textNode = document.createTextNode(inserted);
228
+ range.insertNode(textNode);
229
+
230
+ // Si el `@` quedó en un nodo nuevo, unir con el text node previo que termina en `@`
231
+ // para que detectMentionTrigger vea el run completo (@@, @@@, …).
232
+ var prevSibling = textNode.previousSibling;
233
+ var caretNode = textNode;
234
+ var caretOffset = inserted.length;
235
+ if (prefix === '' && (prevSibling === null || prevSibling === void 0 ? void 0 : prevSibling.nodeType) === Node.TEXT_NODE && prevSibling.data.endsWith('@')) {
236
+ var prevText = prevSibling;
237
+ caretOffset = prevText.data.length + inserted.length;
238
+ prevText.data += inserted;
239
+ textNode.remove();
240
+ caretNode = prevText;
241
+ }
242
+
243
+ // El caret debe quedar DENTRO del text node (después de `@`).
244
+ // `setStartAfter` lo deja en el padre y detectMentionTrigger no activa el popover.
245
+ range.setStart(caretNode, caretOffset);
246
+ range.collapse(true);
247
+ selection.removeAllRanges();
248
+ selection.addRange(range);
249
+ emitInputState();
250
+ },
251
+ insertSlashTrigger: function insertSlashTrigger() {
252
+ var editor = editorRef.current;
253
+ if (!editor || disabled) return;
254
+ focus();
255
+ var selection = window.getSelection();
256
+ if (!selection) return;
257
+ if (!selection.anchorNode || !editor.contains(selection.anchorNode)) {
258
+ var endRange = document.createRange();
259
+ endRange.selectNodeContents(editor);
260
+ endRange.collapse(false);
261
+ selection.removeAllRanges();
262
+ selection.addRange(endRange);
263
+ }
264
+ var range = selection.getRangeAt(0);
265
+ range.collapse(true);
266
+ var prefix = '';
267
+ var startContainer = range.startContainer,
268
+ startOffset = range.startOffset;
269
+ if (startContainer.nodeType === Node.TEXT_NODE) {
270
+ var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
271
+ if (prevChar && !/[\s([{]/.test(prevChar)) {
272
+ prefix = ' ';
273
+ }
274
+ }
275
+ var inserted = "".concat(prefix, "/");
276
+ var textNode = document.createTextNode(inserted);
277
+ range.insertNode(textNode);
278
+
279
+ // Caret dentro del text node para que detectSlashTrigger active el dropdown.
280
+ range.setStart(textNode, inserted.length);
281
+ range.collapse(true);
282
+ selection.removeAllRanges();
283
+ selection.addRange(range);
284
+ emitInputState();
285
+ },
286
+ insertSkillTrigger: function insertSkillTrigger() {
287
+ var editor = editorRef.current;
288
+ if (!editor || disabled) return;
289
+ focus();
290
+ var selection = window.getSelection();
291
+ if (!selection) return;
292
+ if (!selection.anchorNode || !editor.contains(selection.anchorNode)) {
293
+ var endRange = document.createRange();
294
+ endRange.selectNodeContents(editor);
295
+ endRange.collapse(false);
296
+ selection.removeAllRanges();
297
+ selection.addRange(endRange);
298
+ }
299
+ var range = selection.getRangeAt(0);
300
+ range.collapse(true);
301
+ var prefix = '';
302
+ var startContainer = range.startContainer,
303
+ startOffset = range.startOffset;
304
+ if (startContainer.nodeType === Node.TEXT_NODE) {
305
+ var prevChar = startOffset > 0 ? startContainer.data.charAt(startOffset - 1) : '';
306
+ if (prevChar && !/[\s([{]/.test(prevChar)) {
307
+ prefix = ' ';
308
+ }
309
+ }
310
+ var inserted = "".concat(prefix, "#");
311
+ var textNode = document.createTextNode(inserted);
312
+ range.insertNode(textNode);
313
+ range.setStart(textNode, inserted.length);
314
+ range.collapse(true);
315
+ selection.removeAllRanges();
316
+ selection.addRange(range);
317
+ emitInputState();
318
+ },
319
+ serialize: serialize,
320
+ syncTriggerAtRunLength: syncTriggerAtRunLength,
321
+ hasVisualMultiline: function hasVisualMultiline() {
322
+ var _editor$textContent$t, _editor$textContent2;
323
+ var editor = editorRef.current;
324
+ if (!editor) {
325
+ return false;
326
+ }
327
+ var text = (_editor$textContent$t = (_editor$textContent2 = editor.textContent) === null || _editor$textContent2 === void 0 ? void 0 : _editor$textContent2.trim()) !== null && _editor$textContent$t !== void 0 ? _editor$textContent$t : '';
328
+ if (!text) {
329
+ return false;
330
+ }
331
+ var styles = window.getComputedStyle(editor);
332
+ var lineHeight = parseFloat(styles.lineHeight) || 22;
333
+ var editorHeight = editor.getBoundingClientRect().height;
334
+ var isMultiline = editorHeight > lineHeight * 1.5;
335
+ return isMultiline;
336
+ },
337
+ getEditorClientRect: function getEditorClientRect() {
338
+ var _editorRef$current$ge, _editorRef$current;
339
+ return (_editorRef$current$ge = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getBoundingClientRect()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : null;
340
+ },
341
+ insertMention: function insertMention(mention) {
342
+ var chip = buildChipElement(mention);
343
+ replaceTriggerWithChip(chip, mention);
344
+ skipNextInput.current = true;
345
+ var state = serialize();
346
+ onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
347
+ trigger: {
348
+ active: false,
349
+ query: '',
350
+ atRunLength: 0
351
+ },
352
+ slashTrigger: {
353
+ active: false,
354
+ query: ''
355
+ },
356
+ hashTrigger: {
357
+ active: false,
358
+ query: ''
359
+ }
360
+ }));
361
+ var isEmpty = state.text.trim() === '';
362
+ syncEditorEmptyAttribute(isEmpty);
363
+ setLogicalEmpty(isEmpty);
364
+ queueMicrotask(function () {
365
+ // Si el navegador no dispara `input` tras el chip, el flag quedaba en true y el próximo @ del usuario se ignoraba.
366
+ skipNextInput.current = false;
367
+ recomputePlaceholderTruncation();
368
+ });
369
+ },
370
+ appendMentionAtEnd: function appendMentionAtEnd(mention) {
371
+ var editor = editorRef.current;
372
+ if (!editor) return;
373
+ var chip = buildChipElement(mention);
374
+ chip.setAttribute('data-mention', 'true');
375
+ chip.setAttribute('data-mention-id', String(mention.id));
376
+ chip.setAttribute('data-mention-type', mention.type);
377
+ chip.setAttribute('data-mention-label', mention.label);
378
+ chip.setAttribute('contenteditable', 'false');
379
+ var trailingSpace = document.createTextNode("\xA0");
380
+ editor.appendChild(chip);
381
+ editor.appendChild(trailingSpace);
382
+ skipNextInput.current = true;
383
+ var state = serialize();
384
+ onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
385
+ trigger: {
386
+ active: false,
387
+ query: '',
388
+ atRunLength: 0
389
+ },
390
+ slashTrigger: {
391
+ active: false,
392
+ query: ''
393
+ },
394
+ hashTrigger: {
395
+ active: false,
396
+ query: ''
397
+ }
398
+ }));
399
+ syncEditorEmptyAttribute(false);
400
+ setLogicalEmpty(false);
401
+ var selection = window.getSelection();
402
+ if (selection) {
403
+ var range = document.createRange();
404
+ range.setStart(trailingSpace, 1);
405
+ range.collapse(true);
406
+ selection.removeAllRanges();
407
+ selection.addRange(range);
408
+ }
409
+ queueMicrotask(function () {
410
+ skipNextInput.current = false;
411
+ recomputePlaceholderTruncation();
412
+ });
413
+ },
414
+ insertSkillMention: function insertSkillMention(mention) {
415
+ var chip = buildChipElement(mention);
416
+ replaceTriggerWithSkillChip(chip, mention);
417
+ skipNextInput.current = true;
418
+ var state = serialize();
419
+ onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
420
+ trigger: {
421
+ active: false,
422
+ query: '',
423
+ atRunLength: 0
424
+ },
425
+ slashTrigger: {
426
+ active: false,
427
+ query: ''
428
+ },
429
+ hashTrigger: {
430
+ active: false,
431
+ query: ''
432
+ }
433
+ }));
434
+ var isEmpty = state.text.trim() === '';
435
+ syncEditorEmptyAttribute(isEmpty);
436
+ setLogicalEmpty(isEmpty);
437
+ queueMicrotask(function () {
438
+ skipNextInput.current = false;
439
+ recomputePlaceholderTruncation();
440
+ });
441
+ },
442
+ insertSlashCommand: function insertSlashCommand(command) {
443
+ var chip = buildSlashChipElement(command);
444
+ replaceTriggerWithSlashChip(chip, command);
445
+ skipNextInput.current = true;
446
+ var state = serialize();
447
+ onInput === null || onInput === void 0 || onInput(_objectSpread(_objectSpread({}, state), {}, {
448
+ trigger: {
449
+ active: false,
450
+ query: '',
451
+ atRunLength: 0
452
+ },
453
+ slashTrigger: {
454
+ active: false,
455
+ query: ''
456
+ },
457
+ hashTrigger: {
458
+ active: false,
459
+ query: ''
460
+ }
461
+ }));
462
+ var isEmpty = state.text.trim() === '';
463
+ syncEditorEmptyAttribute(isEmpty);
464
+ setLogicalEmpty(isEmpty);
465
+ queueMicrotask(function () {
466
+ skipNextInput.current = false;
467
+ recomputePlaceholderTruncation();
468
+ });
469
+ }
470
+ };
471
+ }, [focus, clearEditorDom, serialize, syncTriggerAtRunLength, replaceTriggerWithChip, replaceTriggerWithSlashChip, replaceTriggerWithSkillChip, onInput, recomputePlaceholderTruncation, syncEditorEmptyAttribute, emitInputState, disabled, editorRef]);
472
+ var handleInput = function handleInput() {
473
+ if (skipNextInput.current) {
474
+ skipNextInput.current = false;
475
+ return;
476
+ }
477
+ emitInputState();
478
+ };
479
+ var handlePaste = function handlePaste(e) {
480
+ var files = filesFromDataTransfer(e.clipboardData);
481
+ if (files.length && onPasteFiles) {
482
+ e.preventDefault();
483
+ onPasteFiles(files);
484
+ }
485
+ var text = e.clipboardData.getData('text/plain');
486
+ if (files.length && onPasteFiles && !text) {
487
+ return;
488
+ }
489
+ e.preventDefault();
490
+ var selection = window.getSelection();
491
+ if (!selection || selection.rangeCount === 0) return;
492
+ selection.deleteFromDocument();
493
+ selection.getRangeAt(0).insertNode(document.createTextNode(text));
494
+ selection.collapseToEnd();
495
+ handleInput();
496
+ };
497
+ var trimmedPlaceholder = (_placeholder$trim2 = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim2 !== void 0 ? _placeholder$trim2 : '';
498
+ var placeholderTooltipTitle = logicalEmpty && placeholderTruncated && trimmedPlaceholder ? trimmedPlaceholder : '';
499
+ return /*#__PURE__*/_jsxs(_Fragment, {
500
+ children: [/*#__PURE__*/_jsx(ContextMentionChipGlobalStyles, {}), /*#__PURE__*/_jsx(Tooltip, {
501
+ title: placeholderTooltipTitle,
502
+ children: /*#__PURE__*/_jsx("span", {
503
+ style: {
504
+ display: 'block',
505
+ width: '100%',
506
+ minWidth: 0
507
+ },
508
+ children: /*#__PURE__*/_jsx(SCMEEditable, {
509
+ ref: editorRef,
510
+ className: className,
511
+ $maxHeight: maxHeight,
512
+ style: maxHeight != null ? {
513
+ maxHeight: maxHeight
514
+ } : undefined,
515
+ "data-placeholder": placeholder,
516
+ "data-empty": String(logicalEmpty),
517
+ contentEditable: !disabled,
518
+ "data-disabled": String(!!disabled),
519
+ suppressContentEditableWarning: true,
520
+ role: "textbox",
521
+ "aria-multiline": "true",
522
+ onInput: handleInput,
523
+ onKeyDown: onKeyDown,
524
+ onPaste: handlePaste,
525
+ onFocus: onFocus,
526
+ onBlur: onBlur
527
+ })
528
+ })
529
+ })]
530
+ });
531
+ });
532
+ ContextMentionEditor.displayName = 'ContextMentionEditor';
533
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3J3YXJkUmVmIiwidXNlQ2FsbGJhY2siLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJUb29sdGlwIiwidXNlQ29udGV4dE1lbnRpb25zIiwiYnVpbGRDaGlwRWxlbWVudCIsIkNvbnRleHRNZW50aW9uQ2hpcEdsb2JhbFN0eWxlcyIsImJ1aWxkU2xhc2hDaGlwRWxlbWVudCIsImZpbGVzRnJvbURhdGFUcmFuc2ZlciIsIlNDTUVFZGl0YWJsZSIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsImlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciIsImVkaXRvciIsInBsYWNlaG9sZGVyIiwidHJpbW1lZCIsInRyaW0iLCJjbGllbnRXaWR0aCIsInN0eWxlcyIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJjdHgiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJnZXRDb250ZXh0IiwiZm9udCIsImNvbmNhdCIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJtZWFzdXJlZCIsIm1lYXN1cmVUZXh0Iiwid2lkdGgiLCJwYWRkaW5nTGVmdCIsInBhcnNlRmxvYXQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwiYXZhaWxhYmxlIiwiTWF0aCIsIm1heCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwiX3JlZiIsInJlZiIsIl9wbGFjZWhvbGRlciR0cmltMiIsImRpc2FibGVkIiwiY2xhc3NOYW1lIiwibWF4SGVpZ2h0Iiwib25JbnB1dCIsIm9uS2V5RG93biIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvblBhc3RlRmlsZXMiLCJfdXNlQ29udGV4dE1lbnRpb25zIiwiZWRpdG9yUmVmIiwidXBkYXRlVHJpZ2dlciIsInJlcGxhY2VUcmlnZ2VyV2l0aENoaXAiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwidXBkYXRlU2xhc2hUcmlnZ2VyIiwicmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwIiwidXBkYXRlSGFzaFRyaWdnZXIiLCJyZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAiLCJzZXJpYWxpemUiLCJjbGVhckVkaXRvckRvbSIsImNsZWFyIiwiZm9jdXMiLCJza2lwTmV4dElucHV0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwicGxhY2Vob2xkZXJUcnVuY2F0ZWQiLCJzZXRQbGFjZWhvbGRlclRydW5jYXRlZCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9naWNhbEVtcHR5Iiwic2V0TG9naWNhbEVtcHR5Iiwic3luY0VkaXRvckVtcHR5QXR0cmlidXRlIiwiaXNFbXB0eSIsImN1cnJlbnQiLCJzZXRBdHRyaWJ1dGUiLCJTdHJpbmciLCJub3JtYWxpemVFbXB0eUVkaXRvckRvbSIsIl9lZGl0b3IkdGV4dENvbnRlbnQiLCJ0ZXh0Q29udGVudCIsImlubmVySFRNTCIsInNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJjb2xsYXBzZSIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwicmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uIiwiX3BsYWNlaG9sZGVyJHRyaW0iLCJlbCIsInBoIiwiaXNFZGl0b3JMb2dpY2FsbHlFbXB0eSIsInRleHQiLCJ1bmRlZmluZWQiLCJybyIsIlJlc2l6ZU9ic2VydmVyIiwicXVldWVNaWNyb3Rhc2siLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsImVtaXRJbnB1dFN0YXRlIiwidHJpZyIsInNsYXNoVHJpZyIsImhhc2hUcmlnIiwic3RhdGUiLCJtZW50aW9ucyIsInNsYXNoQ29tbWFuZHMiLCJfb2JqZWN0U3ByZWFkIiwidHJpZ2dlciIsImFjdGl2ZSIsInF1ZXJ5IiwiYXRSdW5MZW5ndGgiLCJzbGFzaFRyaWdnZXIiLCJoYXNoVHJpZ2dlciIsInNldFBsYWluVGV4dCIsInBsYWluIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImluc2VydE1lbnRpb25UcmlnZ2VyIiwiYW5jaG9yTm9kZSIsImNvbnRhaW5zIiwiZW5kUmFuZ2UiLCJnZXRSYW5nZUF0IiwicHJlZml4Iiwic3RhcnRDb250YWluZXIiLCJzdGFydE9mZnNldCIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInByZXZDaGFyIiwiZGF0YSIsImNoYXJBdCIsInRlc3QiLCJpbnNlcnRlZCIsInRleHROb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJpbnNlcnROb2RlIiwicHJldlNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJjYXJldE5vZGUiLCJjYXJldE9mZnNldCIsImVuZHNXaXRoIiwicHJldlRleHQiLCJyZW1vdmUiLCJzZXRTdGFydCIsImluc2VydFNsYXNoVHJpZ2dlciIsImluc2VydFNraWxsVHJpZ2dlciIsImhhc1Zpc3VhbE11bHRpbGluZSIsIl9lZGl0b3IkdGV4dENvbnRlbnQkdCIsIl9lZGl0b3IkdGV4dENvbnRlbnQyIiwibGluZUhlaWdodCIsImVkaXRvckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImlzTXVsdGlsaW5lIiwiZ2V0RWRpdG9yQ2xpZW50UmVjdCIsIl9lZGl0b3JSZWYkY3VycmVudCRnZSIsIl9lZGl0b3JSZWYkY3VycmVudCIsImluc2VydE1lbnRpb24iLCJtZW50aW9uIiwiY2hpcCIsImFwcGVuZE1lbnRpb25BdEVuZCIsImlkIiwidHlwZSIsImxhYmVsIiwidHJhaWxpbmdTcGFjZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0U2tpbGxNZW50aW9uIiwiaW5zZXJ0U2xhc2hDb21tYW5kIiwiY29tbWFuZCIsImhhbmRsZUlucHV0IiwiaGFuZGxlUGFzdGUiLCJlIiwiZmlsZXMiLCJjbGlwYm9hcmREYXRhIiwicHJldmVudERlZmF1bHQiLCJnZXREYXRhIiwicmFuZ2VDb3VudCIsImRlbGV0ZUZyb21Eb2N1bWVudCIsImNvbGxhcHNlVG9FbmQiLCJ0cmltbWVkUGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSIsImNoaWxkcmVuIiwidGl0bGUiLCJzdHlsZSIsImRpc3BsYXkiLCJtaW5XaWR0aCIsIiRtYXhIZWlnaHQiLCJjb250ZW50RWRpdGFibGUiLCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciLCJyb2xlIiwib25QYXN0ZSIsImRpc3BsYXlOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3IvQ29udGV4dE1lbnRpb25FZGl0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENsaXBib2FyZEV2ZW50LFxuICBmb3J3YXJkUmVmLFxuICBLZXlib2FyZEV2ZW50LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHVzZUNvbnRleHRNZW50aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNvbnRleHRNZW50aW9ucydcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBidWlsZENoaXBFbGVtZW50IH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25DaGlwR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25DaGlwL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBidWlsZFNsYXNoQ2hpcEVsZW1lbnQsIFNsYXNoQ29tbWFuZENoaXBEYXRhIH0gZnJvbSAnLi4vU2xhc2hDb21tYW5kQ2hpcCdcbmltcG9ydCB7IGZpbGVzRnJvbURhdGFUcmFuc2ZlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NoYXRJbnB1dEZpbGVzJ1xuaW1wb3J0IHsgU0NNRUVkaXRhYmxlIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkVkaXRvci5zdHlsZXMnXG5cbmNvbnN0IGlzUGxhY2Vob2xkZXJUcnVuY2F0ZWRJbkVkaXRvciA9IChlZGl0b3I6IEhUTUxFbGVtZW50LCBwbGFjZWhvbGRlcjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBwbGFjZWhvbGRlci50cmltKClcbiAgaWYgKCF0cmltbWVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgeyBjbGllbnRXaWR0aCB9ID0gZWRpdG9yXG4gIGlmIChjbGllbnRXaWR0aCA8PSA0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlZGl0b3IpXG4gIGNvbnN0IGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJylcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjdHguZm9udCA9IGAke3N0eWxlcy5mb250V2VpZ2h0fSAke3N0eWxlcy5mb250U2l6ZX0gJHtzdHlsZXMuZm9udEZhbWlseX1gXG4gIGNvbnN0IG1lYXN1cmVkID0gY3R4Lm1lYXN1cmVUZXh0KHRyaW1tZWQpLndpZHRoXG5cbiAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nTGVmdCkgfHwgMFxuICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nUmlnaHQpIHx8IDBcbiAgY29uc3QgYm9yZGVyTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlckxlZnRXaWR0aCkgfHwgMFxuICBjb25zdCBib3JkZXJSaWdodCA9IHBhcnNlRmxvYXQoc3R5bGVzLmJvcmRlclJpZ2h0V2lkdGgpIHx8IDBcbiAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoMCwgY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodCAtIGJvcmRlckxlZnQgLSBib3JkZXJSaWdodClcblxuICByZXR1cm4gbWVhc3VyZWQgPiBhdmFpbGFibGUgKyAxXG59XG5cbmV4cG9ydCB0eXBlIENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlID0ge1xuICBmb2N1czogKCkgPT4gdm9pZFxuICBjbGVhcjogKCkgPT4gdm9pZFxuICBzZXRQbGFpblRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWRcbiAgLyoqIEluc2VydGEgYEBgIGVuIGVsIGNhcmV0IChjb24gZXNwYWNpbyBwcmV2aW8gc2kgaGFjZSBmYWx0YSkgeSBhYnJlIGVsIHRyaWdnZXIgZGUgbWVudGlvbnMuICovXG4gIGluc2VydE1lbnRpb25UcmlnZ2VyOiAoKSA9PiB2b2lkXG4gIC8qKiBJbnNlcnRhIGAvYCBlbiBlbCBjYXJldCAoY29uIGVzcGFjaW8gcHJldmlvIHNpIGhhY2UgZmFsdGEpIHkgYWJyZSBlbCB0cmlnZ2VyIGRlIHNsYXNoIGNvbW1hbmRzLiAqL1xuICBpbnNlcnRTbGFzaFRyaWdnZXI6ICgpID0+IHZvaWRcbiAgLyoqIEluc2VydGEgYCNgIGVuIGVsIGNhcmV0IChjb24gZXNwYWNpbyBwcmV2aW8gc2kgaGFjZSBmYWx0YSkgeSBhYnJlIGVsIHRyaWdnZXIgZGUgc2tpbGxzLiAqL1xuICBpbnNlcnRTa2lsbFRyaWdnZXI6ICgpID0+IHZvaWRcbiAgaW5zZXJ0TWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIGFwcGVuZE1lbnRpb25BdEVuZDogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIGluc2VydFNsYXNoQ29tbWFuZDogKGNvbW1hbmQ6IFNsYXNoQ29tbWFuZENoaXBEYXRhKSA9PiB2b2lkXG4gIC8qKiBSZWVtcGxhemEgZWwgYCNxdWVyeWAgcGVuZGllbnRlIHBvciBlbCBjaGlwIGRlIGxhIHNraWxsIGVsZWdpZGEuICovXG4gIGluc2VydFNraWxsTWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB2b2lkXG4gIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGg6IChhdFJ1bkxlbmd0aDogbnVtYmVyKSA9PiB2b2lkXG4gIHNlcmlhbGl6ZTogKCkgPT4ge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICB9XG4gIGhhc1Zpc3VhbE11bHRpbGluZTogKCkgPT4gYm9vbGVhblxuICAvKiogUmVjdCBkZWwgw6FyZWEgZWRpdGFibGUgKHZpZXdwb3J0KTsgbG8gdXNhIGVsIHBvcG92ZXIgZGUgQCBwYXJhIGFsaW5lYXIgYW5jaG8geSBmYWxsYmFjayB2ZXJ0aWNhbC4gKi9cbiAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gRE9NUmVjdCB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnRpb25FZGl0b3JQcm9wcyA9IHtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKiogQWx0byBtw6F4aW1vIGRlbCDDoXJlYSBlZGl0YWJsZSAocHgpLiBTZSBhanVzdGEgY3VhbmRvIGhheSBjaGlwcyBkZSBjb250ZXh0by9hZGp1bnRvcy4gKi9cbiAgbWF4SGVpZ2h0PzogbnVtYmVyXG4gIG9uSW5wdXQ/OiAoc3RhdGU6IHtcbiAgICB0ZXh0OiBzdHJpbmdcbiAgICBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXVxuICAgIHNsYXNoQ29tbWFuZHM6IFNsYXNoQ29tbWFuZENoaXBEYXRhW11cbiAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9XG4gICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZyB9XG4gICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgfSkgPT4gdm9pZFxuICBvbktleURvd24/OiAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25Gb2N1cz86ICgpID0+IHZvaWRcbiAgb25CbHVyPzogKCkgPT4gdm9pZFxuICAvKiogQ2xpcGJvYXJkIGZpbGVzIChzY3JlZW5zaG90cywgY29waWVkIGltYWdlcykuIFRleHQgaXMgc3RpbGwgaW5zZXJ0ZWQgd2hlbiBwcmVzZW50LiAqL1xuICBvblBhc3RlRmlsZXM/OiAoZmlsZXM6IEZpbGVbXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgQ29udGV4dE1lbnRpb25FZGl0b3IgPSBmb3J3YXJkUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlLCBDb250ZXh0TWVudGlvbkVkaXRvclByb3BzPihcbiAgKHsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCBjbGFzc05hbWUsIG1heEhlaWdodCwgb25JbnB1dCwgb25LZXlEb3duLCBvbkZvY3VzLCBvbkJsdXIsIG9uUGFzdGVGaWxlcyB9LCByZWYpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlZGl0b3JSZWYsXG4gICAgICB1cGRhdGVUcmlnZ2VyLFxuICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCxcbiAgICAgIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgsXG4gICAgICB1cGRhdGVTbGFzaFRyaWdnZXIsXG4gICAgICByZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAsXG4gICAgICB1cGRhdGVIYXNoVHJpZ2dlcixcbiAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNraWxsQ2hpcCxcbiAgICAgIHNlcmlhbGl6ZSxcbiAgICAgIGNsZWFyOiBjbGVhckVkaXRvckRvbSxcbiAgICAgIGZvY3VzLFxuICAgIH0gPSB1c2VDb250ZXh0TWVudGlvbnMoKVxuICAgIGNvbnN0IHNraXBOZXh0SW5wdXQgPSB1c2VSZWYoZmFsc2UpXG4gICAgY29uc3QgW3BsYWNlaG9sZGVyVHJ1bmNhdGVkLCBzZXRQbGFjZWhvbGRlclRydW5jYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgICBjb25zdCBbbG9naWNhbEVtcHR5LCBzZXRMb2dpY2FsRW1wdHldID0gdXNlU3RhdGUodHJ1ZSlcblxuICAgIGNvbnN0IHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSA9IHVzZUNhbGxiYWNrKChpc0VtcHR5OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKCdkYXRhLWVtcHR5JywgU3RyaW5nKGlzRW1wdHkpKVxuICAgICAgfVxuICAgIH0sIFtdKVxuXG4gICAgY29uc3Qgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgaWYgKCFlZGl0b3IpIHJldHVyblxuXG4gICAgICAvLyBMaW1waWFyIGN1YWxxdWllciByZXNpZHVvIChiciwgZXNwYWNpb3MpIHF1ZSBkZWplIGVsIGJyb3dzZXIgYWwgdmFjaWFyIGVsIGNvbnRlbnRlZGl0YWJsZS5cbiAgICAgIC8vIFNpbiBlc3RvLCB1biBlc3BhY2lvIHN1ZWx0byBhY3RpdmEgZGF0YS1lbXB0eT1cInRydWVcIiArIDo6YmVmb3JlIHBsYWNlaG9sZGVyIGVuIGzDrW5lYSAxXG4gICAgICAvLyB5IGRlc3BsYXphIGVsIGN1cnNvciBhIGxhIGzDrW5lYSAyLlxuICAgICAgaWYgKGVkaXRvci50ZXh0Q29udGVudD8udHJpbSgpID09PSAnJykge1xuICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJydcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgfSwgW2VkaXRvclJlZl0pXG5cbiAgICBjb25zdCByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgICBjb25zdCBwaCA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICAgIGNvbnN0IGlzRWRpdG9yTG9naWNhbGx5RW1wdHkgPSBzZXJpYWxpemUoKS50ZXh0LnRyaW0oKSA9PT0gJydcblxuICAgICAgaWYgKCFlbCB8fCAhcGggfHwgIWlzRWRpdG9yTG9naWNhbGx5RW1wdHkpIHtcbiAgICAgICAgc2V0UGxhY2Vob2xkZXJUcnVuY2F0ZWQoZmFsc2UpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzZXRQbGFjZWhvbGRlclRydW5jYXRlZChpc1BsYWNlaG9sZGVyVHJ1bmNhdGVkSW5FZGl0b3IoZWwsIHBoKSlcbiAgICB9LCBbcGxhY2Vob2xkZXIsIHNlcmlhbGl6ZV0pXG5cbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgcmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uKClcbiAgICAgIGNvbnN0IGVsID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgY29uc3Qgcm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhyZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24pXG4gICAgICB9KVxuICAgICAgcm8ub2JzZXJ2ZShlbClcbiAgICAgIHJldHVybiAoKSA9PiByby5kaXNjb25uZWN0KClcbiAgICB9LCBbcGxhY2Vob2xkZXIsIGRpc2FibGVkLCByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb25dKVxuXG4gICAgY29uc3QgZW1pdElucHV0U3RhdGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjb25zdCB0cmlnID0gdXBkYXRlVHJpZ2dlcigpXG4gICAgICBjb25zdCBzbGFzaFRyaWcgPSB1cGRhdGVTbGFzaFRyaWdnZXIoKVxuICAgICAgY29uc3QgaGFzaFRyaWcgPSB1cGRhdGVIYXNoVHJpZ2dlcigpXG4gICAgICBsZXQgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgICAgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20oKVxuICAgICAgICBzdGF0ZSA9IHsgdGV4dDogJycsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfVxuICAgICAgfVxuICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogdHJpZy5hY3RpdmUsIHF1ZXJ5OiB0cmlnLnF1ZXJ5LCBhdFJ1bkxlbmd0aDogdHJpZy5hdFJ1bkxlbmd0aCB9LFxuICAgICAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBzbGFzaFRyaWcuYWN0aXZlLCBxdWVyeTogc2xhc2hUcmlnLnF1ZXJ5IH0sXG4gICAgICAgIGhhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogaGFzaFRyaWcuYWN0aXZlLCBxdWVyeTogaGFzaFRyaWcucXVlcnkgfSxcbiAgICAgIH0pXG4gICAgICBxdWV1ZU1pY3JvdGFzayhyZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24pXG4gICAgfSwgW1xuICAgICAgdXBkYXRlVHJpZ2dlcixcbiAgICAgIHVwZGF0ZVNsYXNoVHJpZ2dlcixcbiAgICAgIHVwZGF0ZUhhc2hUcmlnZ2VyLFxuICAgICAgc2VyaWFsaXplLFxuICAgICAgbm9ybWFsaXplRW1wdHlFZGl0b3JEb20sXG4gICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUsXG4gICAgICBvbklucHV0LFxuICAgICAgcmVjb21wdXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uLFxuICAgIF0pXG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKFxuICAgICAgcmVmLFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJFZGl0b3JEb20oKVxuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSh0cnVlKVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eSh0cnVlKVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbilcbiAgICAgICAgfSxcbiAgICAgICAgc2V0UGxhaW5UZXh0OiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvcikgcmV0dXJuXG4gICAgICAgICAgY29uc3QgcGxhaW4gPSB0ZXh0ID8/ICcnXG4gICAgICAgICAgZWRpdG9yLnRleHRDb250ZW50ID0gcGxhaW5cbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIGNvbnN0IGlzRW1wdHkgPSBzdGF0ZS50ZXh0LnRyaW0oKSA9PT0gJydcbiAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgfVxuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIGVkaXRvci5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcilcbiAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKVxuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydE1lbnRpb25UcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvciB8fCBkaXNhYmxlZCkgcmV0dXJuXG5cbiAgICAgICAgICBmb2N1cygpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG5cbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFlZGl0b3IuY29udGFpbnMoc2VsZWN0aW9uLmFuY2hvck5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgICAgIGVuZFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICAgICAgICBlbmRSYW5nZS5jb2xsYXBzZShmYWxzZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKGVuZFJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuXG4gICAgICAgICAgbGV0IHByZWZpeCA9ICcnXG4gICAgICAgICAgY29uc3QgeyBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQgfSA9IHJhbmdlXG4gICAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgY29uc3QgcHJldkNoYXIgPSBzdGFydE9mZnNldCA+IDAgPyAoc3RhcnRDb250YWluZXIgYXMgVGV4dCkuZGF0YS5jaGFyQXQoc3RhcnRPZmZzZXQgLSAxKSA6ICcnXG4gICAgICAgICAgICAvLyBFc3BhY2lvIHNvbG8gc2kgaGF5IHRleHRvIHByZXZpbyBxdWUgbm8gc2VhIGzDrW1pdGUgbmkgYEBgIChAQCBkZWJlbiBxdWVkYXIgc2VndWlkb3MpLlxuICAgICAgICAgICAgaWYgKHByZXZDaGFyICYmICEvW1xccyhbe0BdLy50ZXN0KHByZXZDaGFyKSkge1xuICAgICAgICAgICAgICBwcmVmaXggPSAnICdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbnNlcnRlZCA9IGAke3ByZWZpeH1AYFxuICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaW5zZXJ0ZWQpXG4gICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSlcblxuICAgICAgICAgIC8vIFNpIGVsIGBAYCBxdWVkw7MgZW4gdW4gbm9kbyBudWV2bywgdW5pciBjb24gZWwgdGV4dCBub2RlIHByZXZpbyBxdWUgdGVybWluYSBlbiBgQGBcbiAgICAgICAgICAvLyBwYXJhIHF1ZSBkZXRlY3RNZW50aW9uVHJpZ2dlciB2ZWEgZWwgcnVuIGNvbXBsZXRvIChAQCwgQEBALCDigKYpLlxuICAgICAgICAgIGNvbnN0IHByZXZTaWJsaW5nID0gdGV4dE5vZGUucHJldmlvdXNTaWJsaW5nXG4gICAgICAgICAgbGV0IGNhcmV0Tm9kZSA9IHRleHROb2RlXG4gICAgICAgICAgbGV0IGNhcmV0T2Zmc2V0ID0gaW5zZXJ0ZWQubGVuZ3RoXG4gICAgICAgICAgaWYgKHByZWZpeCA9PT0gJycgJiYgcHJldlNpYmxpbmc/Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiAocHJldlNpYmxpbmcgYXMgVGV4dCkuZGF0YS5lbmRzV2l0aCgnQCcpKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2VGV4dCA9IHByZXZTaWJsaW5nIGFzIFRleHRcbiAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gcHJldlRleHQuZGF0YS5sZW5ndGggKyBpbnNlcnRlZC5sZW5ndGhcbiAgICAgICAgICAgIHByZXZUZXh0LmRhdGEgKz0gaW5zZXJ0ZWRcbiAgICAgICAgICAgIHRleHROb2RlLnJlbW92ZSgpXG4gICAgICAgICAgICBjYXJldE5vZGUgPSBwcmV2VGV4dFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVsIGNhcmV0IGRlYmUgcXVlZGFyIERFTlRSTyBkZWwgdGV4dCBub2RlIChkZXNwdcOpcyBkZSBgQGApLlxuICAgICAgICAgIC8vIGBzZXRTdGFydEFmdGVyYCBsbyBkZWphIGVuIGVsIHBhZHJlIHkgZGV0ZWN0TWVudGlvblRyaWdnZXIgbm8gYWN0aXZhIGVsIHBvcG92ZXIuXG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoY2FyZXROb2RlLCBjYXJldE9mZnNldClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcblxuICAgICAgICAgIGVtaXRJbnB1dFN0YXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0U2xhc2hUcmlnZ2VyOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yID0gZWRpdG9yUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVkaXRvciB8fCBkaXNhYmxlZCkgcmV0dXJuXG5cbiAgICAgICAgICBmb2N1cygpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuXG5cbiAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFlZGl0b3IuY29udGFpbnMoc2VsZWN0aW9uLmFuY2hvck5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgICAgIGVuZFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpXG4gICAgICAgICAgICBlbmRSYW5nZS5jb2xsYXBzZShmYWxzZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKGVuZFJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuXG4gICAgICAgICAgbGV0IHByZWZpeCA9ICcnXG4gICAgICAgICAgY29uc3QgeyBzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQgfSA9IHJhbmdlXG4gICAgICAgICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgY29uc3QgcHJldkNoYXIgPSBzdGFydE9mZnNldCA+IDAgPyAoc3RhcnRDb250YWluZXIgYXMgVGV4dCkuZGF0YS5jaGFyQXQoc3RhcnRPZmZzZXQgLSAxKSA6ICcnXG4gICAgICAgICAgICBpZiAocHJldkNoYXIgJiYgIS9bXFxzKFt7XS8udGVzdChwcmV2Q2hhcikpIHtcbiAgICAgICAgICAgICAgcHJlZml4ID0gJyAnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaW5zZXJ0ZWQgPSBgJHtwcmVmaXh9L2BcbiAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGluc2VydGVkKVxuICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUodGV4dE5vZGUpXG5cbiAgICAgICAgICAvLyBDYXJldCBkZW50cm8gZGVsIHRleHQgbm9kZSBwYXJhIHF1ZSBkZXRlY3RTbGFzaFRyaWdnZXIgYWN0aXZlIGVsIGRyb3Bkb3duLlxuICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRleHROb2RlLCBpbnNlcnRlZC5sZW5ndGgpXG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG5cbiAgICAgICAgICBlbWl0SW5wdXRTdGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFNraWxsVHJpZ2dlcjogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRvciA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlZGl0b3IgfHwgZGlzYWJsZWQpIHJldHVyblxuXG4gICAgICAgICAgZm9jdXMoKVxuXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHJldHVyblxuXG4gICAgICAgICAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhZWRpdG9yLmNvbnRhaW5zKHNlbGVjdGlvbi5hbmNob3JOb2RlKSkge1xuICAgICAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgICAgICBlbmRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKVxuICAgICAgICAgICAgZW5kUmFuZ2UuY29sbGFwc2UoZmFsc2UpXG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShlbmRSYW5nZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcblxuICAgICAgICAgIGxldCBwcmVmaXggPSAnJ1xuICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0IH0gPSByYW5nZVxuICAgICAgICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDaGFyID0gc3RhcnRPZmZzZXQgPiAwID8gKHN0YXJ0Q29udGFpbmVyIGFzIFRleHQpLmRhdGEuY2hhckF0KHN0YXJ0T2Zmc2V0IC0gMSkgOiAnJ1xuICAgICAgICAgICAgaWYgKHByZXZDaGFyICYmICEvW1xccyhbe10vLnRlc3QocHJldkNoYXIpKSB7XG4gICAgICAgICAgICAgIHByZWZpeCA9ICcgJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluc2VydGVkID0gYCR7cHJlZml4fSNgXG4gICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpbnNlcnRlZClcbiAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKHRleHROb2RlKVxuXG4gICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIGluc2VydGVkLmxlbmd0aClcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcblxuICAgICAgICAgIGVtaXRJbnB1dFN0YXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgc2VyaWFsaXplLFxuICAgICAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgICAgICBoYXNWaXN1YWxNdWx0aWxpbmU6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZWRpdG9yLnRleHRDb250ZW50Py50cmltKCkgPz8gJydcbiAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVkaXRvcilcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMubGluZUhlaWdodCkgfHwgMjJcbiAgICAgICAgICBjb25zdCBlZGl0b3JIZWlnaHQgPSBlZGl0b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XG4gICAgICAgICAgY29uc3QgaXNNdWx0aWxpbmUgPSBlZGl0b3JIZWlnaHQgPiBsaW5lSGVpZ2h0ICogMS41XG5cbiAgICAgICAgICByZXR1cm4gaXNNdWx0aWxpbmVcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RWRpdG9yQ2xpZW50UmVjdDogKCkgPT4gZWRpdG9yUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IG51bGwsXG4gICAgICAgIGluc2VydE1lbnRpb246IChtZW50aW9uOiBDb250ZXh0TWVudGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcChjaGlwLCBtZW50aW9uKVxuICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IHRydWVcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlcmlhbGl6ZSgpXG4gICAgICAgICAgb25JbnB1dD8uKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgdHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwIH0sXG4gICAgICAgICAgICBzbGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgICBoYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGNvbnN0IGlzRW1wdHkgPSBzdGF0ZS50ZXh0LnRyaW0oKSA9PT0gJydcbiAgICAgICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoaXNFbXB0eSlcbiAgICAgICAgICBzZXRMb2dpY2FsRW1wdHkoaXNFbXB0eSlcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAvLyBTaSBlbCBuYXZlZ2Fkb3Igbm8gZGlzcGFyYSBgaW5wdXRgIHRyYXMgZWwgY2hpcCwgZWwgZmxhZyBxdWVkYWJhIGVuIHRydWUgeSBlbCBwcsOzeGltbyBAIGRlbCB1c3VhcmlvIHNlIGlnbm9yYWJhLlxuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgYXBwZW5kTWVudGlvbkF0RW5kOiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWRpdG9yKSByZXR1cm5cblxuICAgICAgICAgIGNvbnN0IGNoaXAgPSBidWlsZENoaXBFbGVtZW50KG1lbnRpb24pXG4gICAgICAgICAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbicsICd0cnVlJylcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWlkJywgU3RyaW5nKG1lbnRpb24uaWQpKVxuICAgICAgICAgIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWxhYmVsJywgbWVudGlvbi5sYWJlbClcbiAgICAgICAgICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcblxuICAgICAgICAgIGNvbnN0IHRyYWlsaW5nU3BhY2UgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MDBhMCcpXG4gICAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGNoaXApXG4gICAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHRyYWlsaW5nU3BhY2UpXG5cbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzeW5jRWRpdG9yRW1wdHlBdHRyaWJ1dGUoZmFsc2UpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGZhbHNlKVxuXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0cmFpbGluZ1NwYWNlLCAxKVxuICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFNraWxsTWVudGlvbjogKG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hpcCA9IGJ1aWxkQ2hpcEVsZW1lbnQobWVudGlvbilcbiAgICAgICAgICByZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAoY2hpcCwgbWVudGlvbilcbiAgICAgICAgICBza2lwTmV4dElucHV0LmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXJpYWxpemUoKVxuICAgICAgICAgIG9uSW5wdXQ/Lih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCB9LFxuICAgICAgICAgICAgc2xhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgICAgaGFzaFRyaWdnZXI6IHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBpc0VtcHR5ID0gc3RhdGUudGV4dC50cmltKCkgPT09ICcnXG4gICAgICAgICAgc3luY0VkaXRvckVtcHR5QXR0cmlidXRlKGlzRW1wdHkpXG4gICAgICAgICAgc2V0TG9naWNhbEVtcHR5KGlzRW1wdHkpXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgIHJlY29tcHV0ZVBsYWNlaG9sZGVyVHJ1bmNhdGlvbigpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0U2xhc2hDb21tYW5kOiAoY29tbWFuZDogU2xhc2hDb21tYW5kQ2hpcERhdGEpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlwID0gYnVpbGRTbGFzaENoaXBFbGVtZW50KGNvbW1hbmQpXG4gICAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwKGNoaXAsIGNvbW1hbmQpXG4gICAgICAgICAgc2tpcE5leHRJbnB1dC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2VyaWFsaXplKClcbiAgICAgICAgICBvbklucHV0Py4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAgfSxcbiAgICAgICAgICAgIHNsYXNoVHJpZ2dlcjogeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycgfSxcbiAgICAgICAgICAgIGhhc2hUcmlnZ2VyOiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJyB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgY29uc3QgaXNFbXB0eSA9IHN0YXRlLnRleHQudHJpbSgpID09PSAnJ1xuICAgICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZShpc0VtcHR5KVxuICAgICAgICAgIHNldExvZ2ljYWxFbXB0eShpc0VtcHR5KVxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIFtcbiAgICAgICAgZm9jdXMsXG4gICAgICAgIGNsZWFyRWRpdG9yRG9tLFxuICAgICAgICBzZXJpYWxpemUsXG4gICAgICAgIHN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgsXG4gICAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAsXG4gICAgICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCxcbiAgICAgICAgcmVwbGFjZVRyaWdnZXJXaXRoU2tpbGxDaGlwLFxuICAgICAgICBvbklucHV0LFxuICAgICAgICByZWNvbXB1dGVQbGFjZWhvbGRlclRydW5jYXRpb24sXG4gICAgICAgIHN5bmNFZGl0b3JFbXB0eUF0dHJpYnV0ZSxcbiAgICAgICAgZW1pdElucHV0U3RhdGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBlZGl0b3JSZWYsXG4gICAgICBdXG4gICAgKVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgICBpZiAoc2tpcE5leHRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIHNraXBOZXh0SW5wdXQuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZW1pdElucHV0U3RhdGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVBhc3RlID0gKGU6IENsaXBib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZmlsZXMgPSBmaWxlc0Zyb21EYXRhVHJhbnNmZXIoZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKGZpbGVzLmxlbmd0aCAmJiBvblBhc3RlRmlsZXMpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG9uUGFzdGVGaWxlcyhmaWxlcylcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJylcbiAgICAgIGlmIChmaWxlcy5sZW5ndGggJiYgb25QYXN0ZUZpbGVzICYmICF0ZXh0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVyblxuICAgICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpXG4gICAgICBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKVxuICAgICAgc2VsZWN0aW9uLmNvbGxhcHNlVG9FbmQoKVxuICAgICAgaGFuZGxlSW5wdXQoKVxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgICBjb25zdCBwbGFjZWhvbGRlclRvb2x0aXBUaXRsZSA9IGxvZ2ljYWxFbXB0eSAmJiBwbGFjZWhvbGRlclRydW5jYXRlZCAmJiB0cmltbWVkUGxhY2Vob2xkZXIgPyB0cmltbWVkUGxhY2Vob2xkZXIgOiAnJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxDb250ZXh0TWVudGlvbkNoaXBHbG9iYWxTdHlsZXMgLz5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3BsYWNlaG9sZGVyVG9vbHRpcFRpdGxlfT5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgIDxTQ01FRWRpdGFibGVcbiAgICAgICAgICAgICAgcmVmPXtlZGl0b3JSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAkbWF4SGVpZ2h0PXttYXhIZWlnaHR9XG4gICAgICAgICAgICAgIHN0eWxlPXttYXhIZWlnaHQgIT0gbnVsbCA/IHsgbWF4SGVpZ2h0IH0gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBkYXRhLWVtcHR5PXtTdHJpbmcobG9naWNhbEVtcHR5KX1cbiAgICAgICAgICAgICAgY29udGVudEVkaXRhYmxlPXshZGlzYWJsZWR9XG4gICAgICAgICAgICAgIGRhdGEtZGlzYWJsZWQ9e1N0cmluZyghIWRpc2FibGVkKX1cbiAgICAgICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXG4gICAgICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICAgICAgYXJpYS1tdWx0aWxpbmU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgb25JbnB1dD17aGFuZGxlSW5wdXR9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgICBvblBhc3RlPXtoYW5kbGVQYXN0ZX1cbiAgICAgICAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbkNvbnRleHRNZW50aW9uRWRpdG9yLmRpc3BsYXlOYW1lID0gJ0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsU0FFRUEsVUFBVSxFQUVWQyxXQUFXLEVBQ1hDLG1CQUFtQixFQUNuQkMsZUFBZSxFQUNmQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxrQkFBa0IsUUFBUSxtQ0FBbUM7QUFFdEUsU0FBU0MsZ0JBQWdCLFFBQVEsdUJBQXVCO0FBQ3hELFNBQVNDLDhCQUE4QixRQUFRLGlEQUFpRDtBQUNoRyxTQUFTQyxxQkFBcUIsUUFBOEIscUJBQXFCO0FBQ2pGLFNBQVNDLHFCQUFxQixRQUFRLCtCQUErQjtBQUNyRSxTQUFTQyxZQUFZLFFBQVEsK0JBQStCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFF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