stream-chat-angular 4.66.2 → 5.0.0-v5.10

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 (315) hide show
  1. package/assets/version.d.ts +1 -1
  2. package/{esm2015/assets/version.js → esm2020/assets/version.mjs} +2 -2
  3. package/esm2020/lib/attachment-configuration.service.mjs +185 -0
  4. package/esm2020/lib/attachment-list/attachment-list.component.mjs +203 -0
  5. package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +42 -0
  6. package/esm2020/lib/attachment.service.mjs +262 -0
  7. package/esm2020/lib/avatar/avatar.component.mjs +163 -0
  8. package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +74 -0
  9. package/esm2020/lib/channel/channel.component.mjs +46 -0
  10. package/esm2020/lib/channel-header/channel-header.component.mjs +72 -0
  11. package/esm2020/lib/channel-list/channel-list.component.mjs +51 -0
  12. package/esm2020/lib/channel-preview/channel-preview.component.mjs +155 -0
  13. package/esm2020/lib/channel.service.mjs +1454 -0
  14. package/esm2020/lib/chat-client.service.mjs +206 -0
  15. package/{esm2015/lib/custom-templates.service.js → esm2020/lib/custom-templates.service.mjs} +3 -3
  16. package/{esm2015/lib/date-parser.service.js → esm2020/lib/date-parser.service.mjs} +3 -3
  17. package/esm2020/lib/edit-message-form/edit-message-form.component.mjs +83 -0
  18. package/esm2020/lib/get-channel-display-text.mjs +14 -0
  19. package/esm2020/lib/get-message-translation.mjs +12 -0
  20. package/esm2020/lib/icon/icon.component.mjs +21 -0
  21. package/esm2020/lib/icon-placeholder/icon-placeholder.component.mjs +31 -0
  22. package/esm2020/lib/loading-indicator/loading-indicator.component.mjs +31 -0
  23. package/esm2020/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +38 -0
  24. package/esm2020/lib/message/message.component.mjs +402 -0
  25. package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +98 -0
  26. package/esm2020/lib/message-actions.service.mjs +119 -0
  27. package/esm2020/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +71 -0
  28. package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +259 -0
  29. package/{esm2015/lib/message-input/emoji-input.service.js → esm2020/lib/message-input/emoji-input.service.mjs} +3 -3
  30. package/{esm2015/lib/message-input/message-input-config.service.js → esm2020/lib/message-input/message-input-config.service.mjs} +3 -3
  31. package/esm2020/lib/message-input/message-input.component.mjs +441 -0
  32. package/{esm2015/lib/message-input/textarea/textarea.component.js → esm2020/lib/message-input/textarea/textarea.component.mjs} +7 -13
  33. package/esm2020/lib/message-input/textarea.directive.mjs +89 -0
  34. package/esm2020/lib/message-list/group-styles.mjs +52 -0
  35. package/esm2020/lib/message-list/message-list.component.mjs +679 -0
  36. package/esm2020/lib/message-preview.mjs +21 -0
  37. package/esm2020/lib/message-reactions/message-reactions.component.mjs +247 -0
  38. package/esm2020/lib/message-reactions.service.mjs +44 -0
  39. package/{esm2015/lib/message.service.js → esm2020/lib/message.service.mjs} +4 -4
  40. package/esm2020/lib/modal/modal.component.mjs +69 -0
  41. package/esm2020/lib/notification/notification.component.mjs +20 -0
  42. package/esm2020/lib/notification-list/notification-list.component.mjs +36 -0
  43. package/esm2020/lib/notification.service.mjs +79 -0
  44. package/esm2020/lib/read-by.mjs +12 -0
  45. package/{esm2015/lib/stream-autocomplete-textarea.module.js → esm2020/lib/stream-autocomplete-textarea.module.mjs} +6 -6
  46. package/{esm2015/lib/stream-avatar.module.js → esm2020/lib/stream-avatar.module.mjs} +5 -5
  47. package/{esm2015/lib/stream-chat.module.js → esm2020/lib/stream-chat.module.mjs} +14 -16
  48. package/{esm2015/lib/stream-i18n.service.js → esm2020/lib/stream-i18n.service.mjs} +5 -5
  49. package/{esm2015/lib/stream-textarea.module.js → esm2020/lib/stream-textarea.module.mjs} +6 -6
  50. package/esm2020/lib/theme.service.mjs +23 -0
  51. package/esm2020/lib/thread/thread.component.mjs +51 -0
  52. package/{esm2015/lib/transliteration.service.js → esm2020/lib/transliteration.service.mjs} +3 -3
  53. package/esm2020/lib/types.mjs +2 -0
  54. package/esm2020/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +183 -0
  55. package/esm2020/lib/voice-recording/voice-recording.component.mjs +102 -0
  56. package/esm2020/public-api.mjs +64 -0
  57. package/fesm2015/{stream-chat-angular.js → stream-chat-angular.mjs} +354 -754
  58. package/fesm2015/stream-chat-angular.mjs.map +1 -0
  59. package/fesm2020/stream-chat-angular.mjs +6835 -0
  60. package/fesm2020/stream-chat-angular.mjs.map +1 -0
  61. package/lib/attachment-list/attachment-list.component.d.ts +4 -6
  62. package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +2 -4
  63. package/lib/attachment.service.d.ts +0 -1
  64. package/lib/avatar/avatar.component.d.ts +1 -1
  65. package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +1 -1
  66. package/lib/channel/channel.component.d.ts +1 -1
  67. package/lib/channel-header/channel-header.component.d.ts +2 -5
  68. package/lib/channel-list/channel-list.component.d.ts +4 -9
  69. package/lib/channel-preview/channel-preview.component.d.ts +1 -1
  70. package/lib/channel.service.d.ts +7 -14
  71. package/lib/chat-client.service.d.ts +1 -1
  72. package/lib/edit-message-form/edit-message-form.component.d.ts +1 -1
  73. package/lib/get-message-translation.d.ts +1 -1
  74. package/lib/icon/icon.component.d.ts +1 -1
  75. package/lib/icon-placeholder/icon-placeholder.component.d.ts +1 -1
  76. package/lib/loading-indicator/loading-indicator.component.d.ts +1 -1
  77. package/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -1
  78. package/lib/message/message.component.d.ts +6 -19
  79. package/lib/message-actions-box/message-actions-box.component.d.ts +4 -32
  80. package/lib/message-actions.service.d.ts +0 -1
  81. package/lib/message-bounce-prompt/message-bounce-prompt.component.d.ts +1 -1
  82. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +1 -2
  83. package/lib/message-input/message-input.component.d.ts +3 -5
  84. package/lib/message-input/textarea/textarea.component.d.ts +1 -1
  85. package/lib/message-input/textarea.directive.d.ts +1 -1
  86. package/lib/message-list/group-styles.d.ts +1 -1
  87. package/lib/message-list/message-list.component.d.ts +4 -12
  88. package/lib/message-reactions/message-reactions.component.d.ts +2 -7
  89. package/lib/message.service.d.ts +0 -1
  90. package/lib/modal/modal.component.d.ts +1 -1
  91. package/lib/notification/notification.component.d.ts +1 -1
  92. package/lib/notification-list/notification-list.component.d.ts +2 -3
  93. package/lib/notification.service.d.ts +2 -5
  94. package/lib/stream-chat.module.d.ts +3 -3
  95. package/lib/theme.service.d.ts +1 -44
  96. package/lib/thread/thread.component.d.ts +1 -1
  97. package/lib/types.d.ts +16 -33
  98. package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +2 -2
  99. package/lib/voice-recording/voice-recording.component.d.ts +1 -1
  100. package/package.json +31 -17
  101. package/public-api.d.ts +0 -2
  102. package/src/assets/styles/css/index.css +3 -1
  103. package/src/assets/styles/css/index.layout.css +3 -0
  104. package/src/assets/styles/{v2/scss → scss}/AttachmentList/AttachmentList-layout.scss +1 -1
  105. package/src/assets/styles/{v2/scss → scss}/Message/Message-layout.scss +2 -2
  106. package/src/assets/styles/scss/_base.scss +7 -198
  107. package/src/assets/styles/scss/index.scss +35 -48
  108. package/src/assets/version.ts +1 -1
  109. package/bundles/stream-chat-angular.umd.js +0 -8445
  110. package/bundles/stream-chat-angular.umd.js.map +0 -1
  111. package/esm2015/lib/attachment-configuration.service.js +0 -186
  112. package/esm2015/lib/attachment-list/attachment-list.component.js +0 -209
  113. package/esm2015/lib/attachment-preview-list/attachment-preview-list.component.js +0 -49
  114. package/esm2015/lib/attachment.service.js +0 -276
  115. package/esm2015/lib/avatar/avatar.component.js +0 -172
  116. package/esm2015/lib/avatar-placeholder/avatar-placeholder.component.js +0 -78
  117. package/esm2015/lib/channel/channel.component.js +0 -50
  118. package/esm2015/lib/channel-header/channel-header.component.js +0 -86
  119. package/esm2015/lib/channel-list/channel-list-toggle.service.js +0 -73
  120. package/esm2015/lib/channel-list/channel-list.component.js +0 -67
  121. package/esm2015/lib/channel-preview/channel-preview.component.js +0 -167
  122. package/esm2015/lib/channel.service.js +0 -1487
  123. package/esm2015/lib/chat-client.service.js +0 -211
  124. package/esm2015/lib/edit-message-form/edit-message-form.component.js +0 -87
  125. package/esm2015/lib/get-channel-display-text.js +0 -15
  126. package/esm2015/lib/get-message-translation.js +0 -13
  127. package/esm2015/lib/icon/icon.component.js +0 -25
  128. package/esm2015/lib/icon-placeholder/icon-placeholder.component.js +0 -35
  129. package/esm2015/lib/loading-indicator/loading-indicator.component.js +0 -35
  130. package/esm2015/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.js +0 -42
  131. package/esm2015/lib/message/message.component.js +0 -436
  132. package/esm2015/lib/message-actions-box/message-actions-box.component.js +0 -137
  133. package/esm2015/lib/message-actions.service.js +0 -114
  134. package/esm2015/lib/message-bounce-prompt/message-bounce-prompt.component.js +0 -80
  135. package/esm2015/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.js +0 -262
  136. package/esm2015/lib/message-input/message-input.component.js +0 -455
  137. package/esm2015/lib/message-input/textarea.directive.js +0 -90
  138. package/esm2015/lib/message-list/group-styles.js +0 -53
  139. package/esm2015/lib/message-list/image-load.service.js +0 -24
  140. package/esm2015/lib/message-list/message-list.component.js +0 -726
  141. package/esm2015/lib/message-preview.js +0 -7
  142. package/esm2015/lib/message-reactions/message-reactions.component.js +0 -266
  143. package/esm2015/lib/message-reactions.service.js +0 -45
  144. package/esm2015/lib/modal/modal.component.js +0 -74
  145. package/esm2015/lib/notification/notification.component.js +0 -24
  146. package/esm2015/lib/notification-list/notification-list.component.js +0 -38
  147. package/esm2015/lib/notification.service.js +0 -79
  148. package/esm2015/lib/read-by.js +0 -13
  149. package/esm2015/lib/theme.service.js +0 -122
  150. package/esm2015/lib/thread/thread.component.js +0 -55
  151. package/esm2015/lib/types.js +0 -2
  152. package/esm2015/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.js +0 -192
  153. package/esm2015/lib/voice-recording/voice-recording.component.js +0 -115
  154. package/esm2015/public-api.js +0 -66
  155. package/fesm2015/stream-chat-angular.js.map +0 -1
  156. package/lib/channel-list/channel-list-toggle.service.d.ts +0 -40
  157. package/lib/message-list/image-load.service.d.ts +0 -15
  158. package/src/assets/EmojiOneColor.woff2 +0 -0
  159. package/src/assets/NotoColorEmoji-flags.woff2 +0 -0
  160. package/src/assets/Poweredby_100px-White_VertText.png +0 -0
  161. package/src/assets/str-chat__alert.svg +0 -1
  162. package/src/assets/str-chat__file-file.svg +0 -20
  163. package/src/assets/str-chat__icon-chevron-down.svg +0 -1
  164. package/src/assets/str-chat__icon-search.svg +0 -1
  165. package/src/assets/str-chat__icon-send.svg +0 -1
  166. package/src/assets/str-chat__icon-sprite.png +0 -0
  167. package/src/assets/str-chat__icon-sprite@1x.png +0 -0
  168. package/src/assets/str-chat__icon-sprite@2x.png +0 -0
  169. package/src/assets/str-chat__icon-sprite@3x.png +0 -0
  170. package/src/assets/str-chat__loading-indicator.svg +0 -23
  171. package/src/assets/str-chat__reaction-list-sprite@1x.png +0 -0
  172. package/src/assets/str-chat__reaction-list-sprite@2x.png +0 -0
  173. package/src/assets/str-chat__reaction-list-sprite@3x.png +0 -0
  174. package/src/assets/str-chat__reactions-sprite@1x.png +0 -0
  175. package/src/assets/str-chat__reactions-sprite@2x.png +0 -0
  176. package/src/assets/str-chat__reactions-sprite@3x.png +0 -0
  177. package/src/assets/styles/assets/EmojiOneColor.woff2 +0 -0
  178. package/src/assets/styles/assets/NotoColorEmoji-flags.woff2 +0 -0
  179. package/src/assets/styles/assets/Poweredby_100px-White_VertText.png +0 -0
  180. package/src/assets/styles/assets/str-chat__reaction-list-sprite@1x.png +0 -0
  181. package/src/assets/styles/assets/str-chat__reaction-list-sprite@2x.png +0 -0
  182. package/src/assets/styles/assets/str-chat__reaction-list-sprite@3x.png +0 -0
  183. package/src/assets/styles/scss/ActionsBox.scss +0 -56
  184. package/src/assets/styles/scss/Attachment.scss +0 -329
  185. package/src/assets/styles/scss/AttachmentActions.scss +0 -44
  186. package/src/assets/styles/scss/Audio.scss +0 -113
  187. package/src/assets/styles/scss/Avatar.scss +0 -79
  188. package/src/assets/styles/scss/Card.scss +0 -125
  189. package/src/assets/styles/scss/ChannelHeader.scss +0 -284
  190. package/src/assets/styles/scss/ChannelList.scss +0 -141
  191. package/src/assets/styles/scss/ChannelListMessenger.scss +0 -9
  192. package/src/assets/styles/scss/ChannelPreview.scss +0 -133
  193. package/src/assets/styles/scss/ChannelSearch.scss +0 -124
  194. package/src/assets/styles/scss/ChatDown.scss +0 -15
  195. package/src/assets/styles/scss/DateSeparator.scss +0 -51
  196. package/src/assets/styles/scss/EditMessageForm.scss +0 -112
  197. package/src/assets/styles/scss/EventComponent.scss +0 -48
  198. package/src/assets/styles/scss/Gallery.scss +0 -121
  199. package/src/assets/styles/scss/ImageCarousel.scss +0 -45
  200. package/src/assets/styles/scss/InfiniteScrollPaginator.scss +0 -6
  201. package/src/assets/styles/scss/LoadMoreButton.scss +0 -44
  202. package/src/assets/styles/scss/LoadingChannels.scss +0 -70
  203. package/src/assets/styles/scss/LoadingIndicator.scss +0 -38
  204. package/src/assets/styles/scss/Message.scss +0 -1283
  205. package/src/assets/styles/scss/MessageActions.scss +0 -137
  206. package/src/assets/styles/scss/MessageCommerce.scss +0 -608
  207. package/src/assets/styles/scss/MessageInput.scss +0 -398
  208. package/src/assets/styles/scss/MessageInputFlat.scss +0 -323
  209. package/src/assets/styles/scss/MessageList.scss +0 -244
  210. package/src/assets/styles/scss/MessageLivestream.scss +0 -338
  211. package/src/assets/styles/scss/MessageNotification.scss +0 -43
  212. package/src/assets/styles/scss/MessageRepliesCountButton.scss +0 -33
  213. package/src/assets/styles/scss/MessageTeam.scss +0 -644
  214. package/src/assets/styles/scss/Modal.scss +0 -78
  215. package/src/assets/styles/scss/ReactionList.scss +0 -197
  216. package/src/assets/styles/scss/ReactionSelector.scss +0 -218
  217. package/src/assets/styles/scss/SendButton.scss +0 -20
  218. package/src/assets/styles/scss/SimpleReactionsList.scss +0 -76
  219. package/src/assets/styles/scss/SmallMessageInput.scss +0 -171
  220. package/src/assets/styles/scss/Thread.scss +0 -381
  221. package/src/assets/styles/scss/Tooltip.scss +0 -41
  222. package/src/assets/styles/scss/TypingIndicator.scss +0 -80
  223. package/src/assets/styles/scss/VirtualMessage.scss +0 -288
  224. package/src/assets/styles/scss/_variables.scss +0 -161
  225. package/src/assets/styles/v2/css/index.css +0 -3
  226. package/src/assets/styles/v2/css/index.layout.css +0 -3
  227. package/src/assets/styles/v2/scss/_base.scss +0 -28
  228. package/src/assets/styles/v2/scss/index.scss +0 -37
  229. package/src/assets/styles/vendor/emoji-mart.scss +0 -514
  230. package/src/assets/styles/vendor/mml-react.scss +0 -2246
  231. package/src/assets/styles/vendor/react-file-utils.scss +0 -441
  232. package/src/assets/styles/vendor/react-image-gallery.scss +0 -237
  233. /package/{esm2015/assets/i18n/en.js → esm2020/assets/i18n/en.mjs} +0 -0
  234. /package/{esm2015/lib/injection-tokens.js → esm2020/lib/injection-tokens.mjs} +0 -0
  235. /package/{esm2015/lib/is-image-attachment.js → esm2020/lib/is-image-attachment.mjs} +0 -0
  236. /package/{esm2015/lib/is-image-file.js → esm2020/lib/is-image-file.mjs} +0 -0
  237. /package/{esm2015/lib/is-on-separate-date.js → esm2020/lib/is-on-separate-date.mjs} +0 -0
  238. /package/{esm2015/lib/list-users.js → esm2020/lib/list-users.mjs} +0 -0
  239. /package/{esm2015/lib/message-input/textarea.interface.js → esm2020/lib/message-input/textarea.interface.mjs} +0 -0
  240. /package/{esm2015/lib/parse-date.js → esm2020/lib/parse-date.mjs} +0 -0
  241. /package/{esm2015/stream-chat-angular.js → esm2020/stream-chat-angular.mjs} +0 -0
  242. /package/{stream-chat-angular.d.ts → index.d.ts} +0 -0
  243. /package/src/assets/styles/{v2/css → css}/emoji-mart.css +0 -0
  244. /package/src/assets/styles/{v2/css → css}/emoji-replacement.css +0 -0
  245. /package/src/assets/styles/{v2/scss → scss}/AttachmentList/AttachmentList-theme.scss +0 -0
  246. /package/src/assets/styles/{v2/scss → scss}/AttachmentPreviewList/AttachmentPreviewList-layout.scss +0 -0
  247. /package/src/assets/styles/{v2/scss → scss}/AttachmentPreviewList/AttachmentPreviewList-theme.scss +0 -0
  248. /package/src/assets/styles/{v2/scss → scss}/Autocomplete/Autocomplete-layout.scss +0 -0
  249. /package/src/assets/styles/{v2/scss → scss}/Autocomplete/Autocomplete-theme.scss +0 -0
  250. /package/src/assets/styles/{v2/scss → scss}/Avatar/Avatar-layout.scss +0 -0
  251. /package/src/assets/styles/{v2/scss → scss}/Avatar/Avatar-theme.scss +0 -0
  252. /package/src/assets/styles/{v2/scss → scss}/BaseImage/BaseImage-layout.scss +0 -0
  253. /package/src/assets/styles/{v2/scss → scss}/BaseImage/BaseImage-theme.scss +0 -0
  254. /package/src/assets/styles/{v2/scss → scss}/BaseImage/index.scss +0 -0
  255. /package/src/assets/styles/{v2/scss → scss}/Channel/Channel-layout.scss +0 -0
  256. /package/src/assets/styles/{v2/scss → scss}/Channel/Channel-theme.scss +0 -0
  257. /package/src/assets/styles/{v2/scss → scss}/ChannelHeader/ChannelHeader-layout.scss +0 -0
  258. /package/src/assets/styles/{v2/scss → scss}/ChannelHeader/ChannelHeader-theme.scss +0 -0
  259. /package/src/assets/styles/{v2/scss → scss}/ChannelList/ChannelList-layout.scss +0 -0
  260. /package/src/assets/styles/{v2/scss → scss}/ChannelList/ChannelList-theme.scss +0 -0
  261. /package/src/assets/styles/{v2/scss → scss}/ChannelPreview/ChannelPreview-layout.scss +0 -0
  262. /package/src/assets/styles/{v2/scss → scss}/ChannelPreview/ChannelPreview-theme.scss +0 -0
  263. /package/src/assets/styles/{v2/scss → scss}/ChannelSearch/ChannelSearch-layout.scss +0 -0
  264. /package/src/assets/styles/{v2/scss → scss}/ChannelSearch/ChannelSearch-theme.scss +0 -0
  265. /package/src/assets/styles/{v2/scss → scss}/EditMessageForm/EditMessageForm-layout.scss +0 -0
  266. /package/src/assets/styles/{v2/scss → scss}/EditMessageForm/EditMessageForm-theme.scss +0 -0
  267. /package/src/assets/styles/{v2/scss → scss}/ImageCarousel/ImageCarousel-layout.scss +0 -0
  268. /package/src/assets/styles/{v2/scss → scss}/ImageCarousel/ImageCarousel-theme.scss +0 -0
  269. /package/src/assets/styles/{v2/scss → scss}/LinkPreview/LinkPreview-layout.scss +0 -0
  270. /package/src/assets/styles/{v2/scss → scss}/LinkPreview/LinkPreview-theme.scss +0 -0
  271. /package/src/assets/styles/{v2/scss → scss}/LinkPreview/index.scss +0 -0
  272. /package/src/assets/styles/{v2/scss → scss}/LoadingIndicator/LoadingIndicator-layout.scss +0 -0
  273. /package/src/assets/styles/{v2/scss → scss}/LoadingIndicator/LoadingIndicator-theme.scss +0 -0
  274. /package/src/assets/styles/{v2/scss → scss}/Message/Message-theme.scss +0 -0
  275. /package/src/assets/styles/{v2/scss → scss}/MessageActionsBox/MessageActionsBox-layout.scss +0 -0
  276. /package/src/assets/styles/{v2/scss → scss}/MessageActionsBox/MessageActionsBox-theme.scss +0 -0
  277. /package/src/assets/styles/{v2/scss → scss}/MessageBouncePrompt/MessageBouncePrompt-layout.scss +0 -0
  278. /package/src/assets/styles/{v2/scss → scss}/MessageBouncePrompt/MessageBouncePrompt-theme.scss +0 -0
  279. /package/src/assets/styles/{v2/scss → scss}/MessageInput/MessageInput-layout.scss +0 -0
  280. /package/src/assets/styles/{v2/scss → scss}/MessageInput/MessageInput-theme.scss +0 -0
  281. /package/src/assets/styles/{v2/scss → scss}/MessageList/MessageList-layout.scss +0 -0
  282. /package/src/assets/styles/{v2/scss → scss}/MessageList/MessageList-theme.scss +0 -0
  283. /package/src/assets/styles/{v2/scss → scss}/MessageList/VirtualizedMessageList-layout.scss +0 -0
  284. /package/src/assets/styles/{v2/scss → scss}/MessageList/VirtualizedMessageList-theme.scss +0 -0
  285. /package/src/assets/styles/{v2/scss → scss}/MessageReactions/MessageReactions-layout.scss +0 -0
  286. /package/src/assets/styles/{v2/scss → scss}/MessageReactions/MessageReactions-theme.scss +0 -0
  287. /package/src/assets/styles/{v2/scss → scss}/MessageReactions/MessageReactionsSelector-layout.scss +0 -0
  288. /package/src/assets/styles/{v2/scss → scss}/MessageReactions/MessageReactionsSelector-theme.scss +0 -0
  289. /package/src/assets/styles/{v2/scss → scss}/Modal/Modal-layout.scss +0 -0
  290. /package/src/assets/styles/{v2/scss → scss}/Modal/Modal-theme.scss +0 -0
  291. /package/src/assets/styles/{v2/scss → scss}/Notification/MessageNotification-layout.scss +0 -0
  292. /package/src/assets/styles/{v2/scss → scss}/Notification/MessageNotification-theme.scss +0 -0
  293. /package/src/assets/styles/{v2/scss → scss}/Notification/Notification-layout.scss +0 -0
  294. /package/src/assets/styles/{v2/scss → scss}/Notification/Notification-theme.scss +0 -0
  295. /package/src/assets/styles/{v2/scss → scss}/Notification/NotificationList-layout.scss +0 -0
  296. /package/src/assets/styles/{v2/scss → scss}/Notification/NotificationList-theme.scss +0 -0
  297. /package/src/assets/styles/{v2/scss → scss}/Thread/Thread-layout.scss +0 -0
  298. /package/src/assets/styles/{v2/scss → scss}/Thread/Thread-theme.scss +0 -0
  299. /package/src/assets/styles/{v2/scss → scss}/Tooltip/Tooltip-layout.scss +0 -0
  300. /package/src/assets/styles/{v2/scss → scss}/Tooltip/Tooltip-theme.scss +0 -0
  301. /package/src/assets/styles/{v2/scss → scss}/TypingIndicator/TypingIndicator-layout.scss +0 -0
  302. /package/src/assets/styles/{v2/scss → scss}/TypingIndicator/TypingIndicator-theme.scss +0 -0
  303. /package/src/assets/styles/{v2/scss → scss}/_emoji-replacement.scss +0 -0
  304. /package/src/assets/styles/{v2/scss → scss}/_global-layout-variables.scss +0 -0
  305. /package/src/assets/styles/{v2/scss → scss}/_global-theme-variables.scss +0 -0
  306. /package/src/assets/styles/{v2/scss → scss}/_icons.scss +0 -0
  307. /package/src/assets/styles/{v2/scss → scss}/_palette-variables.scss +0 -0
  308. /package/src/assets/styles/{v2/scss → scss}/_utils.scss +0 -0
  309. /package/src/assets/styles/{v2/scss → scss}/common/CTAButton/CTAButton-layout.scss +0 -0
  310. /package/src/assets/styles/{v2/scss → scss}/common/CTAButton/CTAButton-theme.scss +0 -0
  311. /package/src/assets/styles/{v2/scss → scss}/common/CircleFAButton/CircleFAButton-layout.scss +0 -0
  312. /package/src/assets/styles/{v2/scss → scss}/common/CircleFAButton/CircleFAButton-theme.scss +0 -0
  313. /package/src/assets/styles/{v2/scss → scss}/index.layout.scss +0 -0
  314. /package/src/assets/styles/{v2/scss → scss}/vendor/emoji-mart.scss +0 -0
  315. /package/src/assets/styles/{v2/scss → scss}/vendor/react-image-gallery.scss +0 -0
@@ -0,0 +1,259 @@
1
+ import { Component, EventEmitter, HostBinding, Input, Output, ViewChild, } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { debounceTime } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../channel.service";
6
+ import * as i2 from "../../chat-client.service";
7
+ import * as i3 from "../../transliteration.service";
8
+ import * as i4 from "../emoji-input.service";
9
+ import * as i5 from "../../custom-templates.service";
10
+ import * as i6 from "../../theme.service";
11
+ import * as i7 from "@angular/common";
12
+ import * as i8 from "angular-mentions";
13
+ import * as i9 from "../../avatar-placeholder/avatar-placeholder.component";
14
+ import * as i10 from "@ngx-translate/core";
15
+ /**
16
+ * The `AutocompleteTextarea` component is used by the [`MessageInput`](./MessageInputComponent.mdx) component to display the input HTML element where users can type their message.
17
+ */
18
+ export class AutocompleteTextareaComponent {
19
+ constructor(channelService, chatClientService, transliterationService, emojiInputService, customTemplatesService, themeService, cdRef) {
20
+ this.channelService = channelService;
21
+ this.chatClientService = chatClientService;
22
+ this.transliterationService = transliterationService;
23
+ this.emojiInputService = emojiInputService;
24
+ this.customTemplatesService = customTemplatesService;
25
+ this.themeService = themeService;
26
+ this.cdRef = cdRef;
27
+ this.class = 'str-chat__textarea str-chat__message-textarea-angular-host';
28
+ /**
29
+ * The value of the input HTML element.
30
+ */
31
+ this.value = '';
32
+ /**
33
+ * Placeholder of the textarea
34
+ */
35
+ this.placeholder = '';
36
+ /**
37
+ * If true, users can mention other users in messages. You can also set this input on the [`MessageInput`](./MessageInputComponent.mdx/#inputs-and-outputs) component.
38
+ */
39
+ this.areMentionsEnabled = true;
40
+ /**
41
+ * The scope for user mentions, either members of the current channel of members of the application. You can also set this input on the [`MessageInput`](./MessageInputComponent.mdx/#inputs-and-outputs) component.
42
+ */
43
+ this.mentionScope = 'channel';
44
+ /**
45
+ * Enables or disables auto focus on the textarea element
46
+ */
47
+ this.autoFocus = true;
48
+ /**
49
+ * Emits the current value of the input element when a user types.
50
+ */
51
+ this.valueChange = new EventEmitter();
52
+ /**
53
+ * Emits when a user triggers a message send event (this happens when they hit the `Enter` key).
54
+ */
55
+ this.send = new EventEmitter();
56
+ /**
57
+ * Emits the array of users that are mentioned in the message, it is updated when a user mentions a new user or deletes a mention.
58
+ */
59
+ this.userMentions = new EventEmitter();
60
+ this.autocompleteKey = 'autocompleteLabel';
61
+ this.mentionTriggerChar = '@';
62
+ this.commandTriggerChar = '/';
63
+ this.autocompleteConfig = {
64
+ mentions: [],
65
+ };
66
+ this.subscriptions = [];
67
+ this.mentionedUsers = [];
68
+ this.userMentionConfig = {
69
+ triggerChar: this.mentionTriggerChar,
70
+ dropUp: true,
71
+ labelKey: this.autocompleteKey,
72
+ returnTrigger: true,
73
+ mentionFilter: (searchString, items) => this.filter(searchString, items),
74
+ mentionSelect: (item, triggerChar) => this.itemSelectedFromAutocompleteList(item, triggerChar),
75
+ };
76
+ this.slashCommandConfig = {
77
+ triggerChar: this.commandTriggerChar,
78
+ dropUp: true,
79
+ labelKey: 'name',
80
+ returnTrigger: true,
81
+ mentionFilter: (searchString, items) => this.filter(searchString, items),
82
+ mentionSelect: (item, triggerChar) => this.itemSelectedFromAutocompleteList(item, triggerChar),
83
+ };
84
+ this.searchTerm$ = new BehaviorSubject('');
85
+ this.searchTerm$.pipe(debounceTime(300)).subscribe((searchTerm) => {
86
+ if (searchTerm.startsWith(this.mentionTriggerChar)) {
87
+ void this.updateMentionOptions(searchTerm);
88
+ }
89
+ });
90
+ this.subscriptions.push(this.channelService.activeChannel$.subscribe((channel) => {
91
+ const commands = channel?.getConfig()?.commands || [];
92
+ this.slashCommandConfig.items = commands.map((c) => ({
93
+ ...c,
94
+ [this.autocompleteKey]: c.name,
95
+ type: 'command',
96
+ }));
97
+ this.mentionedUsers = [];
98
+ this.userMentions.next([...this.mentionedUsers]);
99
+ void this.updateMentionOptions(this.searchTerm$.getValue());
100
+ }));
101
+ this.subscriptions.push(this.emojiInputService.emojiInput$.subscribe((emoji) => {
102
+ this.messageInput.nativeElement.focus();
103
+ const { selectionStart } = this.messageInput.nativeElement;
104
+ this.messageInput.nativeElement.setRangeText(emoji);
105
+ this.messageInput.nativeElement.selectionStart =
106
+ selectionStart + emoji.length;
107
+ this.messageInput.nativeElement.selectionEnd =
108
+ selectionStart + emoji.length;
109
+ this.inputChanged();
110
+ }));
111
+ this.subscriptions.push(this.customTemplatesService.mentionAutocompleteItemTemplate$.subscribe((template) => (this.mentionAutocompleteItemTemplate = template)));
112
+ this.subscriptions.push(this.customTemplatesService.commandAutocompleteItemTemplate$.subscribe((template) => (this.commandAutocompleteItemTemplate = template)));
113
+ this.autocompleteConfig.mentions = [
114
+ this.userMentionConfig,
115
+ this.slashCommandConfig,
116
+ ];
117
+ }
118
+ ngOnChanges(changes) {
119
+ if (changes.areMentionsEnabled) {
120
+ if (this.areMentionsEnabled) {
121
+ this.autocompleteConfig.mentions = [
122
+ this.userMentionConfig,
123
+ this.slashCommandConfig,
124
+ ];
125
+ this.autocompleteConfig = { ...this.autocompleteConfig };
126
+ }
127
+ else {
128
+ this.autocompleteConfig.mentions = [this.slashCommandConfig];
129
+ this.autocompleteConfig = { ...this.autocompleteConfig };
130
+ }
131
+ }
132
+ if (changes.mentionScope) {
133
+ void this.updateMentionOptions(this.searchTerm$.getValue());
134
+ }
135
+ if (changes.value && !this.value && this.messageInput) {
136
+ this.messageInput.nativeElement.style.height = 'auto';
137
+ this.updateMentionedUsersFromText();
138
+ }
139
+ }
140
+ ngAfterViewInit() {
141
+ if (this.messageInput.nativeElement.scrollHeight > 0) {
142
+ this.adjustTextareaHeight();
143
+ }
144
+ }
145
+ filter(searchString, items) {
146
+ return items.filter((item) => this.transliterate(item.autocompleteLabel.toLowerCase()).includes(this.transliterate(searchString.toLowerCase())));
147
+ }
148
+ itemSelectedFromAutocompleteList(item, triggerChar = '') {
149
+ if (triggerChar === this.mentionTriggerChar) {
150
+ this.mentionedUsers.push((item.user ? item.user : item));
151
+ this.userMentions.next([...this.mentionedUsers]);
152
+ }
153
+ return (triggerChar +
154
+ item.autocompleteLabel +
155
+ (triggerChar === this.commandTriggerChar ? ' ' : ''));
156
+ }
157
+ autcompleteSearchTermChanged(searchTerm) {
158
+ if (searchTerm === this.mentionTriggerChar) {
159
+ void this.updateMentionOptions();
160
+ }
161
+ else {
162
+ this.searchTerm$.next(searchTerm);
163
+ }
164
+ }
165
+ inputChanged() {
166
+ this.valueChange.emit(this.messageInput.nativeElement.value);
167
+ this.adjustTextareaHeight();
168
+ }
169
+ inputLeft() {
170
+ this.updateMentionedUsersFromText();
171
+ }
172
+ enterHit(event) {
173
+ if (this.inputMode === 'desktop') {
174
+ event.preventDefault();
175
+ this.updateMentionedUsersFromText();
176
+ this.send.next();
177
+ }
178
+ }
179
+ adjustTextareaHeight() {
180
+ this.messageInput.nativeElement.style.height = '';
181
+ this.messageInput.nativeElement.style.height = `${this.messageInput.nativeElement.scrollHeight}px`;
182
+ }
183
+ transliterate(s) {
184
+ if (this.transliterationService) {
185
+ return this.transliterationService.transliterate(s);
186
+ }
187
+ else {
188
+ return s;
189
+ }
190
+ }
191
+ async updateMentionOptions(searchTerm) {
192
+ if (!this.areMentionsEnabled) {
193
+ return;
194
+ }
195
+ searchTerm = searchTerm?.replace(this.mentionTriggerChar, '');
196
+ const request = this.mentionScope === 'application'
197
+ ? (s) => this.chatClientService.autocompleteUsers(s)
198
+ : (s) => this.channelService.autocompleteMembers(s);
199
+ const result = await request(searchTerm || '');
200
+ const items = this.filter(searchTerm || '', result.map((i) => {
201
+ const user = (i.user ? i.user : i);
202
+ return {
203
+ ...i,
204
+ autocompleteLabel: user.name || user.id,
205
+ type: 'mention',
206
+ };
207
+ }));
208
+ this.userMentionConfig.items = items;
209
+ this.autocompleteConfig.mentions = [
210
+ this.userMentionConfig,
211
+ this.slashCommandConfig,
212
+ ];
213
+ this.autocompleteConfig = { ...this.autocompleteConfig };
214
+ this.cdRef.detectChanges();
215
+ }
216
+ updateMentionedUsersFromText() {
217
+ const updatedMentionedUsers = [];
218
+ this.mentionedUsers.forEach((u) => {
219
+ const key = u.name || u.id;
220
+ if (this.value.includes(`${this.mentionTriggerChar}${key}`)) {
221
+ updatedMentionedUsers.push(u);
222
+ }
223
+ });
224
+ if (updatedMentionedUsers.length !== this.mentionedUsers.length) {
225
+ this.userMentions.next([...updatedMentionedUsers]);
226
+ this.mentionedUsers = updatedMentionedUsers;
227
+ }
228
+ }
229
+ }
230
+ AutocompleteTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChatClientService }, { token: i3.TransliterationService }, { token: i4.EmojiInputService }, { token: i5.CustomTemplatesService }, { token: i6.ThemeService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
231
+ AutocompleteTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AutocompleteTextareaComponent, selector: "stream-autocomplete-textarea", inputs: { value: "value", placeholder: "placeholder", areMentionsEnabled: "areMentionsEnabled", inputMode: "inputMode", mentionScope: "mentionScope", autoFocus: "autoFocus" }, outputs: { valueChange: "valueChange", send: "send", userMentions: "userMentions" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"\n rta__textarea\n str-chat__textarea__textarea\n str-chat__angular-textarea\n str-chat__message-textarea\n \"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [ngStyle]=\"{ height: '30px' }\"\n [size]=\"30\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i8.MentionDirective, selector: "[mention], [mentionConfig]", inputs: ["mentionConfig", "mention", "mentionListTemplate"], outputs: ["searchTerm", "itemSelected", "opened", "closed"] }, { kind: "component", type: i9.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] });
232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, decorators: [{
233
+ type: Component,
234
+ args: [{ selector: 'stream-autocomplete-textarea', template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"\n rta__textarea\n str-chat__textarea__textarea\n str-chat__angular-textarea\n str-chat__message-textarea\n \"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [ngStyle]=\"{ height: '30px' }\"\n [size]=\"30\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n" }]
235
+ }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ChatClientService }, { type: i3.TransliterationService }, { type: i4.EmojiInputService }, { type: i5.CustomTemplatesService }, { type: i6.ThemeService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { class: [{
236
+ type: HostBinding
237
+ }], value: [{
238
+ type: Input
239
+ }], placeholder: [{
240
+ type: Input
241
+ }], areMentionsEnabled: [{
242
+ type: Input
243
+ }], inputMode: [{
244
+ type: Input
245
+ }], mentionScope: [{
246
+ type: Input
247
+ }], autoFocus: [{
248
+ type: Input
249
+ }], valueChange: [{
250
+ type: Output
251
+ }], send: [{
252
+ type: Output
253
+ }], userMentions: [{
254
+ type: Output
255
+ }], messageInput: [{
256
+ type: ViewChild,
257
+ args: ['input']
258
+ }] } });
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L2F1dG9jb21wbGV0ZS10ZXh0YXJlYS9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtaW5wdXQvYXV0b2NvbXBsZXRlLXRleHRhcmVhL2F1dG9jb21wbGV0ZS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFLckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFNOUM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sNkJBQTZCO0lBd0Z4QyxZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxzQkFBOEMsRUFDOUMsaUJBQW9DLEVBQ3BDLHNCQUE4QyxFQUM5QyxZQUEwQixFQUMxQixLQUF3QjtRQU54QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQTVGbkIsVUFB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Z0JBYXFCLFlBQVk7c0JBQXZDLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW50aW9uQ29uZmlnLCBNZW50aW9ucyB9IGZyb20gJ2FuZ3VsYXItbWVudGlvbnMnO1xuaW1wb3J0IHtcbiAgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0LFxuICBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgQ29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlclJlc3BvbnNlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dGFyZWFJbnRlcmZhY2UgfSBmcm9tICcuLi90ZXh0YXJlYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGl0ZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi90cmFuc2xpdGVyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFbW9qaUlucHV0U2VydmljZSB9IGZyb20gJy4uL2Vtb2ppLWlucHV0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uLy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90aGVtZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYEF1dG9jb21wbGV0ZVRleHRhcmVhYCBjb21wb25lbnQgaXMgdXNlZCBieSB0aGUgW2BNZXNzYWdlSW5wdXRgXSguL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpIGNvbXBvbmVudCB0byBkaXNwbGF5IHRoZSBpbnB1dCBIVE1MIGVsZW1lbnQgd2hlcmUgdXNlcnMgY2FuIHR5cGUgdGhlaXIgbWVzc2FnZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF1dG9jb21wbGV0ZS10ZXh0YXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIFRleHRhcmVhSW50ZXJmYWNlLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcbntcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPVxuICAgICdzdHItY2hhdF9fdGV4dGFyZWEgc3RyLWNoYXRfX21lc3NhZ2UtdGV4dGFyZWEtYW5ndWxhci1ob3N0JztcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWUgPSAnJztcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIG9mIHRoZSB0ZXh0YXJlYVxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgaW5wdXQgb24gdGhlIFtgTWVzc2FnZUlucHV0YF0oLi9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4LyNpbnB1dHMtYW5kLW91dHB1dHMpIGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGFyZU1lbnRpb25zRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG4gIC8qKlxuICAgKiBTZWUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dE1vZGUhOiAnZGVza3RvcCcgfCAnbW9iaWxlJztcbiAgLyoqXG4gICAqIFRoZSBzY29wZSBmb3IgdXNlciBtZW50aW9ucywgZWl0aGVyIG1lbWJlcnMgb2YgdGhlIGN1cnJlbnQgY2hhbm5lbCBvZiBtZW1iZXJzIG9mIHRoZSBhcHBsaWNhdGlvbi4gWW91IGNhbiBhbHNvIHNldCB0aGlzIGlucHV0IG9uIHRoZSBbYE1lc3NhZ2VJbnB1dGBdKC4vTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keC8jaW5wdXRzLWFuZC1vdXRwdXRzKSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBtZW50aW9uU2NvcGU6ICdjaGFubmVsJyB8ICdhcHBsaWNhdGlvbicgPSAnY2hhbm5lbCc7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGF1dG8gZm9jdXMgb24gdGhlIHRleHRhcmVhIGVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5wdXQgZWxlbWVudCB3aGVuIGEgdXNlciB0eXBlcy5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKipcbiAgICogRW1pdHMgd2hlbiBhIHVzZXIgdHJpZ2dlcnMgYSBtZXNzYWdlIHNlbmQgZXZlbnQgKHRoaXMgaGFwcGVucyB3aGVuIHRoZXkgaGl0IHRoZSBgRW50ZXJgIGtleSkuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBhcnJheSBvZiB1c2VycyB0aGF0IGFyZSBtZW50aW9uZWQgaW4gdGhlIG1lc3NhZ2UsIGl0IGlzIHVwZGF0ZWQgd2hlbiBhIHVzZXIgbWVudGlvbnMgYSBuZXcgdXNlciBvciBkZWxldGVzIGEgbWVudGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB1c2VyTWVudGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXJSZXNwb25zZVtdPigpO1xuICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8TWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBjb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8Q29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRvY29tcGxldGVLZXkgPSAnYXV0b2NvbXBsZXRlTGFiZWwnO1xuICBwcml2YXRlIHJlYWRvbmx5IG1lbnRpb25UcmlnZ2VyQ2hhciA9ICdAJztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVHJpZ2dlckNoYXIgPSAnLyc7XG4gIGF1dG9jb21wbGV0ZUNvbmZpZzogTWVudGlvbkNvbmZpZyA9IHtcbiAgICBtZW50aW9uczogW10sXG4gIH07XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgcHJpdmF0ZSBtZXNzYWdlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbWVudGlvbmVkVXNlcnM6IFVzZXJSZXNwb25zZVtdID0gW107XG4gIHByaXZhdGUgdXNlck1lbnRpb25Db25maWc6IE1lbnRpb25zID0ge1xuICAgIHRyaWdnZXJDaGFyOiB0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcixcbiAgICBkcm9wVXA6IHRydWUsXG4gICAgbGFiZWxLZXk6IHRoaXMuYXV0b2NvbXBsZXRlS2V5LFxuICAgIHJldHVyblRyaWdnZXI6IHRydWUsXG4gICAgbWVudGlvbkZpbHRlcjogKFxuICAgICAgc2VhcmNoU3RyaW5nOiBzdHJpbmcsXG4gICAgICBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXVxuICAgICkgPT4gdGhpcy5maWx0ZXIoc2VhcmNoU3RyaW5nLCBpdGVtcyksXG4gICAgbWVudGlvblNlbGVjdDogKGl0ZW0sIHRyaWdnZXJDaGFyKSA9PlxuICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRGcm9tQXV0b2NvbXBsZXRlTGlzdChcbiAgICAgICAgaXRlbSBhcyBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgICAgICAgdHJpZ2dlckNoYXJcbiAgICAgICksXG4gIH07XG4gIHByaXZhdGUgc2xhc2hDb21tYW5kQ29uZmlnOiBNZW50aW9ucyA9IHtcbiAgICB0cmlnZ2VyQ2hhcjogdGhpcy5jb21tYW5kVHJpZ2dlckNoYXIsXG4gICAgZHJvcFVwOiB0cnVlLFxuICAgIGxhYmVsS2V5OiAnbmFtZScsXG4gICAgcmV0dXJuVHJpZ2dlcjogdHJ1ZSxcbiAgICBtZW50aW9uRmlsdGVyOiAoXG4gICAgICBzZWFyY2hTdHJpbmc6IHN0cmluZyxcbiAgICAgIGl0ZW1zOiB7IGF1dG9jb21wbGV0ZUxhYmVsOiBzdHJpbmcgfVtdXG4gICAgKSA9PiB0aGlzLmZpbHRlcihzZWFyY2hTdHJpbmcsIGl0ZW1zKSxcbiAgICBtZW50aW9uU2VsZWN0OiAoaXRlbSwgdHJpZ2dlckNoYXIpID0+XG4gICAgICB0aGlzLml0ZW1TZWxlY3RlZEZyb21BdXRvY29tcGxldGVMaXN0KFxuICAgICAgICBpdGVtIGFzIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtLFxuICAgICAgICB0cmlnZ2VyQ2hhclxuICAgICAgKSxcbiAgfTtcbiAgcHJpdmF0ZSBzZWFyY2hUZXJtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xpdGVyYXRpb25TZXJ2aWNlOiBUcmFuc2xpdGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZW1vamlJbnB1dFNlcnZpY2U6IEVtb2ppSW5wdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQucGlwZShkZWJvdW5jZVRpbWUoMzAwKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICBpZiAoc2VhcmNoVGVybS5zdGFydHNXaXRoKHRoaXMubWVudGlvblRyaWdnZXJDaGFyKSkge1xuICAgICAgICB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICBjb25zdCBjb21tYW5kcyA9IGNoYW5uZWw/LmdldENvbmZpZygpPy5jb21tYW5kcyB8fCBbXTtcbiAgICAgICAgdGhpcy5zbGFzaENvbW1hbmRDb25maWcuaXRlbXMgPSBjb21tYW5kcy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBbdGhpcy5hdXRvY29tcGxldGVLZXldOiBjLm5hbWUsXG4gICAgICAgICAgdHlwZTogJ2NvbW1hbmQnLFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMgPSBbXTtcbiAgICAgICAgdGhpcy51c2VyTWVudGlvbnMubmV4dChbLi4udGhpcy5tZW50aW9uZWRVc2Vyc10pO1xuICAgICAgICB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnModGhpcy5zZWFyY2hUZXJtJC5nZXRWYWx1ZSgpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuZW1vamlJbnB1dFNlcnZpY2UuZW1vamlJbnB1dCQuc3Vic2NyaWJlKChlbW9qaSkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQgfSA9IHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0UmFuZ2VUZXh0KGVtb2ppKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9XG4gICAgICAgICAgc2VsZWN0aW9uU3RhcnQhICsgZW1vamkubGVuZ3RoO1xuICAgICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9XG4gICAgICAgICAgc2VsZWN0aW9uU3RhcnQhICsgZW1vamkubGVuZ3RoO1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlZCgpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lbnRpb25BdXRvY29tcGxldGVJdGVtVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5jb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMuY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbXG4gICAgICB0aGlzLnVzZXJNZW50aW9uQ29uZmlnLFxuICAgICAgdGhpcy5zbGFzaENvbW1hbmRDb25maWcsXG4gICAgXTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmFyZU1lbnRpb25zRW5hYmxlZCkge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZy5tZW50aW9ucyA9IFtcbiAgICAgICAgICB0aGlzLnVzZXJNZW50aW9uQ29uZmlnLFxuICAgICAgICAgIHRoaXMuc2xhc2hDb21tYW5kQ29uZmlnLFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyA9IHsgLi4udGhpcy5hdXRvY29tcGxldGVDb25maWcgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLm1lbnRpb25zID0gW3RoaXMuc2xhc2hDb21tYW5kQ29uZmlnXTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1lbnRpb25TY29wZSkge1xuICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnZhbHVlICYmICF0aGlzLnZhbHVlICYmIHRoaXMubWVzc2FnZUlucHV0KSB7XG4gICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRoaXMudXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLmFkanVzdFRleHRhcmVhSGVpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKHNlYXJjaFN0cmluZzogc3RyaW5nLCBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXSkge1xuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICB0aGlzLnRyYW5zbGl0ZXJhdGUoaXRlbS5hdXRvY29tcGxldGVMYWJlbC50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyhcbiAgICAgICAgdGhpcy50cmFuc2xpdGVyYXRlKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpdGVtU2VsZWN0ZWRGcm9tQXV0b2NvbXBsZXRlTGlzdChcbiAgICBpdGVtOiBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgICB0cmlnZ2VyQ2hhciA9ICcnXG4gICkge1xuICAgIGlmICh0cmlnZ2VyQ2hhciA9PT0gdGhpcy5tZW50aW9uVHJpZ2dlckNoYXIpIHtcbiAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMucHVzaCgoaXRlbS51c2VyID8gaXRlbS51c2VyIDogaXRlbSkgYXMgVXNlclJlc3BvbnNlKTtcbiAgICAgIHRoaXMudXNlck1lbnRpb25zLm5leHQoWy4uLnRoaXMubWVudGlvbmVkVXNlcnNdKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRyaWdnZXJDaGFyICtcbiAgICAgIGl0ZW0uYXV0b2NvbXBsZXRlTGFiZWwgK1xuICAgICAgKHRyaWdnZXJDaGFyID09PSB0aGlzLmNvbW1hbmRUcmlnZ2VyQ2hhciA/ICcgJyA6ICcnKVxuICAgICk7XG4gIH1cblxuICBhdXRjb21wbGV0ZVNlYXJjaFRlcm1DaGFuZ2VkKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIGlmIChzZWFyY2hUZXJtID09PSB0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcikge1xuICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChzZWFyY2hUZXJtKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dENoYW5nZWQoKSB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIHRoaXMuYWRqdXN0VGV4dGFyZWFIZWlnaHQoKTtcbiAgfVxuXG4gIGlucHV0TGVmdCgpIHtcbiAgICB0aGlzLnVwZGF0ZU1lbnRpb25lZFVzZXJzRnJvbVRleHQoKTtcbiAgfVxuXG4gIGVudGVySGl0KGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLmlucHV0TW9kZSA9PT0gJ2Rlc2t0b3AnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gICAgICB0aGlzLnNlbmQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0VGV4dGFyZWFIZWlnaHQoKSB7XG4gICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3RoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsaXRlcmF0ZShzOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlLnRyYW5zbGl0ZXJhdGUocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybT86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0/LnJlcGxhY2UodGhpcy5tZW50aW9uVHJpZ2dlckNoYXIsICcnKTtcbiAgICBjb25zdCByZXF1ZXN0ID1cbiAgICAgIHRoaXMubWVudGlvblNjb3BlID09PSAnYXBwbGljYXRpb24nXG4gICAgICAgID8gKHM6IHN0cmluZykgPT4gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5hdXRvY29tcGxldGVVc2VycyhzKVxuICAgICAgICA6IChzOiBzdHJpbmcpID0+IHRoaXMuY2hhbm5lbFNlcnZpY2UuYXV0b2NvbXBsZXRlTWVtYmVycyhzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0KHNlYXJjaFRlcm0gfHwgJycpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maWx0ZXIoXG4gICAgICBzZWFyY2hUZXJtIHx8ICcnLFxuICAgICAgcmVzdWx0Lm1hcCgoaSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gKGkudXNlciA/IGkudXNlciA6IGkpIGFzIFVzZXJSZXNwb25zZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pLFxuICAgICAgICAgIGF1dG9jb21wbGV0ZUxhYmVsOiB1c2VyLm5hbWUgfHwgdXNlci5pZCxcbiAgICAgICAgICB0eXBlOiAnbWVudGlvbicsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy51c2VyTWVudGlvbkNvbmZpZy5pdGVtcyA9IGl0ZW1zO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLm1lbnRpb25zID0gW1xuICAgICAgdGhpcy51c2VyTWVudGlvbkNvbmZpZyxcbiAgICAgIHRoaXMuc2xhc2hDb21tYW5kQ29uZmlnLFxuICAgIF07XG4gICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnRpb25lZFVzZXJzRnJvbVRleHQoKSB7XG4gICAgY29uc3QgdXBkYXRlZE1lbnRpb25lZFVzZXJzOiBVc2VyUmVzcG9uc2VbXSA9IFtdO1xuICAgIHRoaXMubWVudGlvbmVkVXNlcnMuZm9yRWFjaCgodSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdS5uYW1lIHx8IHUuaWQ7XG4gICAgICBpZiAodGhpcy52YWx1ZS5pbmNsdWRlcyhgJHt0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcn0ke2tleX1gKSkge1xuICAgICAgICB1cGRhdGVkTWVudGlvbmVkVXNlcnMucHVzaCh1KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodXBkYXRlZE1lbnRpb25lZFVzZXJzLmxlbmd0aCAhPT0gdGhpcy5tZW50aW9uZWRVc2Vycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudXNlck1lbnRpb25zLm5leHQoWy4uLnVwZGF0ZWRNZW50aW9uZWRVc2Vyc10pO1xuICAgICAgdGhpcy5tZW50aW9uZWRVc2VycyA9IHVwZGF0ZWRNZW50aW9uZWRVc2VycztcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZXh0YXJlYVxuICAjaW5wdXRcbiAgZGF0YS10ZXN0aWQ9XCJ0ZXh0YXJlYVwiXG4gIGNsYXNzPVwiXG4gICAgcnRhX190ZXh0YXJlYVxuICAgIHN0ci1jaGF0X190ZXh0YXJlYV9fdGV4dGFyZWFcbiAgICBzdHItY2hhdF9fYW5ndWxhci10ZXh0YXJlYVxuICAgIHN0ci1jaGF0X19tZXNzYWdlLXRleHRhcmVhXG4gIFwiXG4gIHJvd3M9XCIxXCJcbiAgW3ZhbHVlXT1cInZhbHVlIHx8ICcnXCJcbiAgW2F1dG9mb2N1c109XCJhdXRvRm9jdXNcIlxuICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlIH19XCJcbiAgW21lbnRpb25Db25maWddPVwiYXV0b2NvbXBsZXRlQ29uZmlnXCJcbiAgW21lbnRpb25MaXN0VGVtcGxhdGVdPVwiYXV0b2NvbXBsZXRlSXRlbVwiXG4gIChpbnB1dCk9XCJpbnB1dENoYW5nZWQoKVwiXG4gIChrZXlkb3duLmVudGVyKT1cImVudGVySGl0KCRldmVudClcIlxuICAoc2VhcmNoVGVybSk9XCJhdXRjb21wbGV0ZVNlYXJjaFRlcm1DaGFuZ2VkKCRldmVudClcIlxuICAoYmx1cik9XCJpbnB1dExlZnQoKVwiXG4+PC90ZXh0YXJlYT5cbjxuZy10ZW1wbGF0ZSAjYXV0b2NvbXBsZXRlSXRlbSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInJ0YSBydGFfX2l0ZW0gc3RyLWNoYXRfX2Vtb2ppc2VhcmNoX19pdGVtXCIgW25nU3dpdGNoXT1cIml0ZW0udHlwZVwiPlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidtZW50aW9uJ1wiIGNsYXNzPVwicnRhX19lbnRpdHlcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlIHx8IGRlZmF1bHRNZW50aW9uVGVtcGxhdGU7XG4gICAgICAgICAgY29udGV4dDogeyBpdGVtOiBpdGVtIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInY29tbWFuZCdcIiBjbGFzcz1cInJ0YV9fZW50aXR5XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSB8fCBkZWZhdWx0Q29tbWFuZFRlbXBsYXRlO1xuICAgICAgICAgIGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29tbWFuZFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3NsYXNoLWNvbW1hbmRcIj5cbiAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X19zbGFzaC1jb21tYW5kLWhlYWRlclwiPlxuICAgICAgPHN0cm9uZ1xuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19zbGFzaC1jb21tYW5kLW5hbWVcIlxuICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImNvbW1hbmQtbmFtZVwiXG4gICAgICAgID57eyBpdGVtLm5hbWUgfX08L3N0cm9uZ1xuICAgICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fc2xhc2gtY29tbWFuZC1hcmdzXCJcbiAgICAgICAgPi97eyBpdGVtLm5hbWUgfX0ge3sgaXRlbS5hcmdzIH19PC9zcGFuXG4gICAgICA+XG4gICAgPC9zcGFuPlxuICAgIDxiciAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1lbnRpb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X191c2VyLWl0ZW1cIj5cbiAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdmF0YXJcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyIHN0ci1jaGF0X19hdmF0YXItLWNpcmNsZVwiXG4gICAgICB0eXBlPVwidXNlclwiXG4gICAgICBsb2NhdGlvbj1cImF1dG9jb21wbGV0ZS1pdGVtXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiAnMzBweCcgfVwiXG4gICAgICBbc2l6ZV09XCIzMFwiXG4gICAgICBbaW1hZ2VVcmxdPVwiaXRlbS5pbWFnZSB8fCBpdGVtLnVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cIml0ZW0uYXV0b2NvbXBsZXRlTGFiZWxcIlxuICAgICAgW3VzZXJdPVwiaXRlbS51c2VyIHx8IGl0ZW1cIlxuICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgPHNwYW4gZGF0YS10ZXN0Y2xhc3M9XCJ1c2VybmFtZVwiIGNsYXNzPVwic3RyLWNoYXRfX3VzZXItaXRlbS0tbmFtZVwiPnt7XG4gICAgICBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -12,9 +12,9 @@ export class EmojiInputService {
12
12
  this.emojiInput$ = new Subject();
13
13
  }
14
14
  }
15
- EmojiInputService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: EmojiInputService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16
- EmojiInputService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: EmojiInputService, providedIn: 'root' });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: EmojiInputService, decorators: [{
15
+ EmojiInputService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: EmojiInputService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16
+ EmojiInputService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: EmojiInputService, providedIn: 'root' });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: EmojiInputService, decorators: [{
18
18
  type: Injectable,
19
19
  args: [{
20
20
  providedIn: 'root',
@@ -27,9 +27,9 @@ export class MessageInputConfigService {
27
27
  this.inputMode = 'desktop';
28
28
  }
29
29
  }
30
- MessageInputConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
31
- MessageInputConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputConfigService, providedIn: 'root' });
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputConfigService, decorators: [{
30
+ MessageInputConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageInputConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
31
+ MessageInputConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageInputConfigService, providedIn: 'root' });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageInputConfigService, decorators: [{
33
33
  type: Injectable,
34
34
  args: [{
35
35
  providedIn: 'root',