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.
- package/assets/version.d.ts +1 -1
- package/{esm2015/assets/version.js → esm2020/assets/version.mjs} +2 -2
- package/esm2020/lib/attachment-configuration.service.mjs +185 -0
- package/esm2020/lib/attachment-list/attachment-list.component.mjs +203 -0
- package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +42 -0
- package/esm2020/lib/attachment.service.mjs +262 -0
- package/esm2020/lib/avatar/avatar.component.mjs +163 -0
- package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +74 -0
- package/esm2020/lib/channel/channel.component.mjs +46 -0
- package/esm2020/lib/channel-header/channel-header.component.mjs +72 -0
- package/esm2020/lib/channel-list/channel-list.component.mjs +51 -0
- package/esm2020/lib/channel-preview/channel-preview.component.mjs +155 -0
- package/esm2020/lib/channel.service.mjs +1454 -0
- package/esm2020/lib/chat-client.service.mjs +206 -0
- package/{esm2015/lib/custom-templates.service.js → esm2020/lib/custom-templates.service.mjs} +3 -3
- package/{esm2015/lib/date-parser.service.js → esm2020/lib/date-parser.service.mjs} +3 -3
- package/esm2020/lib/edit-message-form/edit-message-form.component.mjs +83 -0
- package/esm2020/lib/get-channel-display-text.mjs +14 -0
- package/esm2020/lib/get-message-translation.mjs +12 -0
- package/esm2020/lib/icon/icon.component.mjs +21 -0
- package/esm2020/lib/icon-placeholder/icon-placeholder.component.mjs +31 -0
- package/esm2020/lib/loading-indicator/loading-indicator.component.mjs +31 -0
- package/esm2020/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +38 -0
- package/esm2020/lib/message/message.component.mjs +402 -0
- package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +98 -0
- package/esm2020/lib/message-actions.service.mjs +119 -0
- package/esm2020/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +71 -0
- package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +259 -0
- package/{esm2015/lib/message-input/emoji-input.service.js → esm2020/lib/message-input/emoji-input.service.mjs} +3 -3
- package/{esm2015/lib/message-input/message-input-config.service.js → esm2020/lib/message-input/message-input-config.service.mjs} +3 -3
- package/esm2020/lib/message-input/message-input.component.mjs +441 -0
- package/{esm2015/lib/message-input/textarea/textarea.component.js → esm2020/lib/message-input/textarea/textarea.component.mjs} +7 -13
- package/esm2020/lib/message-input/textarea.directive.mjs +89 -0
- package/esm2020/lib/message-list/group-styles.mjs +52 -0
- package/esm2020/lib/message-list/message-list.component.mjs +679 -0
- package/esm2020/lib/message-preview.mjs +21 -0
- package/esm2020/lib/message-reactions/message-reactions.component.mjs +247 -0
- package/esm2020/lib/message-reactions.service.mjs +44 -0
- package/{esm2015/lib/message.service.js → esm2020/lib/message.service.mjs} +4 -4
- package/esm2020/lib/modal/modal.component.mjs +69 -0
- package/esm2020/lib/notification/notification.component.mjs +20 -0
- package/esm2020/lib/notification-list/notification-list.component.mjs +36 -0
- package/esm2020/lib/notification.service.mjs +79 -0
- package/esm2020/lib/read-by.mjs +12 -0
- package/{esm2015/lib/stream-autocomplete-textarea.module.js → esm2020/lib/stream-autocomplete-textarea.module.mjs} +6 -6
- package/{esm2015/lib/stream-avatar.module.js → esm2020/lib/stream-avatar.module.mjs} +5 -5
- package/{esm2015/lib/stream-chat.module.js → esm2020/lib/stream-chat.module.mjs} +14 -16
- package/{esm2015/lib/stream-i18n.service.js → esm2020/lib/stream-i18n.service.mjs} +5 -5
- package/{esm2015/lib/stream-textarea.module.js → esm2020/lib/stream-textarea.module.mjs} +6 -6
- package/esm2020/lib/theme.service.mjs +23 -0
- package/esm2020/lib/thread/thread.component.mjs +51 -0
- package/{esm2015/lib/transliteration.service.js → esm2020/lib/transliteration.service.mjs} +3 -3
- package/esm2020/lib/types.mjs +2 -0
- package/esm2020/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +183 -0
- package/esm2020/lib/voice-recording/voice-recording.component.mjs +102 -0
- package/esm2020/public-api.mjs +64 -0
- package/fesm2015/{stream-chat-angular.js → stream-chat-angular.mjs} +354 -754
- package/fesm2015/stream-chat-angular.mjs.map +1 -0
- package/fesm2020/stream-chat-angular.mjs +6835 -0
- package/fesm2020/stream-chat-angular.mjs.map +1 -0
- package/lib/attachment-list/attachment-list.component.d.ts +4 -6
- package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +2 -4
- package/lib/attachment.service.d.ts +0 -1
- package/lib/avatar/avatar.component.d.ts +1 -1
- package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +1 -1
- package/lib/channel/channel.component.d.ts +1 -1
- package/lib/channel-header/channel-header.component.d.ts +2 -5
- package/lib/channel-list/channel-list.component.d.ts +4 -9
- package/lib/channel-preview/channel-preview.component.d.ts +1 -1
- package/lib/channel.service.d.ts +7 -14
- package/lib/chat-client.service.d.ts +1 -1
- package/lib/edit-message-form/edit-message-form.component.d.ts +1 -1
- package/lib/get-message-translation.d.ts +1 -1
- package/lib/icon/icon.component.d.ts +1 -1
- package/lib/icon-placeholder/icon-placeholder.component.d.ts +1 -1
- package/lib/loading-indicator/loading-indicator.component.d.ts +1 -1
- package/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -1
- package/lib/message/message.component.d.ts +6 -19
- package/lib/message-actions-box/message-actions-box.component.d.ts +4 -32
- package/lib/message-actions.service.d.ts +0 -1
- package/lib/message-bounce-prompt/message-bounce-prompt.component.d.ts +1 -1
- package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +1 -2
- package/lib/message-input/message-input.component.d.ts +3 -5
- package/lib/message-input/textarea/textarea.component.d.ts +1 -1
- package/lib/message-input/textarea.directive.d.ts +1 -1
- package/lib/message-list/group-styles.d.ts +1 -1
- package/lib/message-list/message-list.component.d.ts +4 -12
- package/lib/message-reactions/message-reactions.component.d.ts +2 -7
- package/lib/message.service.d.ts +0 -1
- package/lib/modal/modal.component.d.ts +1 -1
- package/lib/notification/notification.component.d.ts +1 -1
- package/lib/notification-list/notification-list.component.d.ts +2 -3
- package/lib/notification.service.d.ts +2 -5
- package/lib/stream-chat.module.d.ts +3 -3
- package/lib/theme.service.d.ts +1 -44
- package/lib/thread/thread.component.d.ts +1 -1
- package/lib/types.d.ts +16 -33
- package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +2 -2
- package/lib/voice-recording/voice-recording.component.d.ts +1 -1
- package/package.json +31 -17
- package/public-api.d.ts +0 -2
- package/src/assets/styles/css/index.css +3 -1
- package/src/assets/styles/css/index.layout.css +3 -0
- package/src/assets/styles/{v2/scss → scss}/AttachmentList/AttachmentList-layout.scss +1 -1
- package/src/assets/styles/{v2/scss → scss}/Message/Message-layout.scss +2 -2
- package/src/assets/styles/scss/_base.scss +7 -198
- package/src/assets/styles/scss/index.scss +35 -48
- package/src/assets/version.ts +1 -1
- package/bundles/stream-chat-angular.umd.js +0 -8445
- package/bundles/stream-chat-angular.umd.js.map +0 -1
- package/esm2015/lib/attachment-configuration.service.js +0 -186
- package/esm2015/lib/attachment-list/attachment-list.component.js +0 -209
- package/esm2015/lib/attachment-preview-list/attachment-preview-list.component.js +0 -49
- package/esm2015/lib/attachment.service.js +0 -276
- package/esm2015/lib/avatar/avatar.component.js +0 -172
- package/esm2015/lib/avatar-placeholder/avatar-placeholder.component.js +0 -78
- package/esm2015/lib/channel/channel.component.js +0 -50
- package/esm2015/lib/channel-header/channel-header.component.js +0 -86
- package/esm2015/lib/channel-list/channel-list-toggle.service.js +0 -73
- package/esm2015/lib/channel-list/channel-list.component.js +0 -67
- package/esm2015/lib/channel-preview/channel-preview.component.js +0 -167
- package/esm2015/lib/channel.service.js +0 -1487
- package/esm2015/lib/chat-client.service.js +0 -211
- package/esm2015/lib/edit-message-form/edit-message-form.component.js +0 -87
- package/esm2015/lib/get-channel-display-text.js +0 -15
- package/esm2015/lib/get-message-translation.js +0 -13
- package/esm2015/lib/icon/icon.component.js +0 -25
- package/esm2015/lib/icon-placeholder/icon-placeholder.component.js +0 -35
- package/esm2015/lib/loading-indicator/loading-indicator.component.js +0 -35
- package/esm2015/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.js +0 -42
- package/esm2015/lib/message/message.component.js +0 -436
- package/esm2015/lib/message-actions-box/message-actions-box.component.js +0 -137
- package/esm2015/lib/message-actions.service.js +0 -114
- package/esm2015/lib/message-bounce-prompt/message-bounce-prompt.component.js +0 -80
- package/esm2015/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.js +0 -262
- package/esm2015/lib/message-input/message-input.component.js +0 -455
- package/esm2015/lib/message-input/textarea.directive.js +0 -90
- package/esm2015/lib/message-list/group-styles.js +0 -53
- package/esm2015/lib/message-list/image-load.service.js +0 -24
- package/esm2015/lib/message-list/message-list.component.js +0 -726
- package/esm2015/lib/message-preview.js +0 -7
- package/esm2015/lib/message-reactions/message-reactions.component.js +0 -266
- package/esm2015/lib/message-reactions.service.js +0 -45
- package/esm2015/lib/modal/modal.component.js +0 -74
- package/esm2015/lib/notification/notification.component.js +0 -24
- package/esm2015/lib/notification-list/notification-list.component.js +0 -38
- package/esm2015/lib/notification.service.js +0 -79
- package/esm2015/lib/read-by.js +0 -13
- package/esm2015/lib/theme.service.js +0 -122
- package/esm2015/lib/thread/thread.component.js +0 -55
- package/esm2015/lib/types.js +0 -2
- package/esm2015/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.js +0 -192
- package/esm2015/lib/voice-recording/voice-recording.component.js +0 -115
- package/esm2015/public-api.js +0 -66
- package/fesm2015/stream-chat-angular.js.map +0 -1
- package/lib/channel-list/channel-list-toggle.service.d.ts +0 -40
- package/lib/message-list/image-load.service.d.ts +0 -15
- package/src/assets/EmojiOneColor.woff2 +0 -0
- package/src/assets/NotoColorEmoji-flags.woff2 +0 -0
- package/src/assets/Poweredby_100px-White_VertText.png +0 -0
- package/src/assets/str-chat__alert.svg +0 -1
- package/src/assets/str-chat__file-file.svg +0 -20
- package/src/assets/str-chat__icon-chevron-down.svg +0 -1
- package/src/assets/str-chat__icon-search.svg +0 -1
- package/src/assets/str-chat__icon-send.svg +0 -1
- package/src/assets/str-chat__icon-sprite.png +0 -0
- package/src/assets/str-chat__icon-sprite@1x.png +0 -0
- package/src/assets/str-chat__icon-sprite@2x.png +0 -0
- package/src/assets/str-chat__icon-sprite@3x.png +0 -0
- package/src/assets/str-chat__loading-indicator.svg +0 -23
- package/src/assets/str-chat__reaction-list-sprite@1x.png +0 -0
- package/src/assets/str-chat__reaction-list-sprite@2x.png +0 -0
- package/src/assets/str-chat__reaction-list-sprite@3x.png +0 -0
- package/src/assets/str-chat__reactions-sprite@1x.png +0 -0
- package/src/assets/str-chat__reactions-sprite@2x.png +0 -0
- package/src/assets/str-chat__reactions-sprite@3x.png +0 -0
- package/src/assets/styles/assets/EmojiOneColor.woff2 +0 -0
- package/src/assets/styles/assets/NotoColorEmoji-flags.woff2 +0 -0
- package/src/assets/styles/assets/Poweredby_100px-White_VertText.png +0 -0
- package/src/assets/styles/assets/str-chat__reaction-list-sprite@1x.png +0 -0
- package/src/assets/styles/assets/str-chat__reaction-list-sprite@2x.png +0 -0
- package/src/assets/styles/assets/str-chat__reaction-list-sprite@3x.png +0 -0
- package/src/assets/styles/scss/ActionsBox.scss +0 -56
- package/src/assets/styles/scss/Attachment.scss +0 -329
- package/src/assets/styles/scss/AttachmentActions.scss +0 -44
- package/src/assets/styles/scss/Audio.scss +0 -113
- package/src/assets/styles/scss/Avatar.scss +0 -79
- package/src/assets/styles/scss/Card.scss +0 -125
- package/src/assets/styles/scss/ChannelHeader.scss +0 -284
- package/src/assets/styles/scss/ChannelList.scss +0 -141
- package/src/assets/styles/scss/ChannelListMessenger.scss +0 -9
- package/src/assets/styles/scss/ChannelPreview.scss +0 -133
- package/src/assets/styles/scss/ChannelSearch.scss +0 -124
- package/src/assets/styles/scss/ChatDown.scss +0 -15
- package/src/assets/styles/scss/DateSeparator.scss +0 -51
- package/src/assets/styles/scss/EditMessageForm.scss +0 -112
- package/src/assets/styles/scss/EventComponent.scss +0 -48
- package/src/assets/styles/scss/Gallery.scss +0 -121
- package/src/assets/styles/scss/ImageCarousel.scss +0 -45
- package/src/assets/styles/scss/InfiniteScrollPaginator.scss +0 -6
- package/src/assets/styles/scss/LoadMoreButton.scss +0 -44
- package/src/assets/styles/scss/LoadingChannels.scss +0 -70
- package/src/assets/styles/scss/LoadingIndicator.scss +0 -38
- package/src/assets/styles/scss/Message.scss +0 -1283
- package/src/assets/styles/scss/MessageActions.scss +0 -137
- package/src/assets/styles/scss/MessageCommerce.scss +0 -608
- package/src/assets/styles/scss/MessageInput.scss +0 -398
- package/src/assets/styles/scss/MessageInputFlat.scss +0 -323
- package/src/assets/styles/scss/MessageList.scss +0 -244
- package/src/assets/styles/scss/MessageLivestream.scss +0 -338
- package/src/assets/styles/scss/MessageNotification.scss +0 -43
- package/src/assets/styles/scss/MessageRepliesCountButton.scss +0 -33
- package/src/assets/styles/scss/MessageTeam.scss +0 -644
- package/src/assets/styles/scss/Modal.scss +0 -78
- package/src/assets/styles/scss/ReactionList.scss +0 -197
- package/src/assets/styles/scss/ReactionSelector.scss +0 -218
- package/src/assets/styles/scss/SendButton.scss +0 -20
- package/src/assets/styles/scss/SimpleReactionsList.scss +0 -76
- package/src/assets/styles/scss/SmallMessageInput.scss +0 -171
- package/src/assets/styles/scss/Thread.scss +0 -381
- package/src/assets/styles/scss/Tooltip.scss +0 -41
- package/src/assets/styles/scss/TypingIndicator.scss +0 -80
- package/src/assets/styles/scss/VirtualMessage.scss +0 -288
- package/src/assets/styles/scss/_variables.scss +0 -161
- package/src/assets/styles/v2/css/index.css +0 -3
- package/src/assets/styles/v2/css/index.layout.css +0 -3
- package/src/assets/styles/v2/scss/_base.scss +0 -28
- package/src/assets/styles/v2/scss/index.scss +0 -37
- package/src/assets/styles/vendor/emoji-mart.scss +0 -514
- package/src/assets/styles/vendor/mml-react.scss +0 -2246
- package/src/assets/styles/vendor/react-file-utils.scss +0 -441
- package/src/assets/styles/vendor/react-image-gallery.scss +0 -237
- /package/{esm2015/assets/i18n/en.js → esm2020/assets/i18n/en.mjs} +0 -0
- /package/{esm2015/lib/injection-tokens.js → esm2020/lib/injection-tokens.mjs} +0 -0
- /package/{esm2015/lib/is-image-attachment.js → esm2020/lib/is-image-attachment.mjs} +0 -0
- /package/{esm2015/lib/is-image-file.js → esm2020/lib/is-image-file.mjs} +0 -0
- /package/{esm2015/lib/is-on-separate-date.js → esm2020/lib/is-on-separate-date.mjs} +0 -0
- /package/{esm2015/lib/list-users.js → esm2020/lib/list-users.mjs} +0 -0
- /package/{esm2015/lib/message-input/textarea.interface.js → esm2020/lib/message-input/textarea.interface.mjs} +0 -0
- /package/{esm2015/lib/parse-date.js → esm2020/lib/parse-date.mjs} +0 -0
- /package/{esm2015/stream-chat-angular.js → esm2020/stream-chat-angular.mjs} +0 -0
- /package/{stream-chat-angular.d.ts → index.d.ts} +0 -0
- /package/src/assets/styles/{v2/css → css}/emoji-mart.css +0 -0
- /package/src/assets/styles/{v2/css → css}/emoji-replacement.css +0 -0
- /package/src/assets/styles/{v2/scss → scss}/AttachmentList/AttachmentList-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/AttachmentPreviewList/AttachmentPreviewList-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/AttachmentPreviewList/AttachmentPreviewList-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Autocomplete/Autocomplete-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Autocomplete/Autocomplete-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Avatar/Avatar-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Avatar/Avatar-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/BaseImage/BaseImage-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/BaseImage/BaseImage-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/BaseImage/index.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Channel/Channel-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Channel/Channel-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ChannelHeader/ChannelHeader-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ChannelHeader/ChannelHeader-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ChannelList/ChannelList-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ChannelList/ChannelList-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ChannelPreview/ChannelPreview-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ChannelPreview/ChannelPreview-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ChannelSearch/ChannelSearch-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ChannelSearch/ChannelSearch-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/EditMessageForm/EditMessageForm-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/EditMessageForm/EditMessageForm-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ImageCarousel/ImageCarousel-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/ImageCarousel/ImageCarousel-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/LinkPreview/LinkPreview-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/LinkPreview/LinkPreview-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/LinkPreview/index.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/LoadingIndicator/LoadingIndicator-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/LoadingIndicator/LoadingIndicator-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Message/Message-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageActionsBox/MessageActionsBox-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageActionsBox/MessageActionsBox-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageBouncePrompt/MessageBouncePrompt-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageBouncePrompt/MessageBouncePrompt-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageInput/MessageInput-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageInput/MessageInput-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageList/MessageList-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageList/MessageList-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageList/VirtualizedMessageList-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageList/VirtualizedMessageList-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageReactions/MessageReactions-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageReactions/MessageReactions-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageReactions/MessageReactionsSelector-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/MessageReactions/MessageReactionsSelector-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Modal/Modal-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Modal/Modal-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Notification/MessageNotification-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Notification/MessageNotification-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Notification/Notification-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Notification/Notification-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Notification/NotificationList-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Notification/NotificationList-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Thread/Thread-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Thread/Thread-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Tooltip/Tooltip-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/Tooltip/Tooltip-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/TypingIndicator/TypingIndicator-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/TypingIndicator/TypingIndicator-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/_emoji-replacement.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/_global-layout-variables.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/_global-theme-variables.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/_icons.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/_palette-variables.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/_utils.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/common/CTAButton/CTAButton-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/common/CTAButton/CTAButton-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/common/CircleFAButton/CircleFAButton-layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/common/CircleFAButton/CircleFAButton-theme.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/index.layout.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/vendor/emoji-mart.scss +0 -0
- /package/src/assets/styles/{v2/scss → scss}/vendor/react-image-gallery.scss +0 -0
package/assets/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "
|
|
1
|
+
export declare const version = "5.0.0-v5.10";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export const version = '5.0.0-v5.10';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc1LjAuMC12NS4xMCc7XG4iXX0=
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* The `AttachmentConfigurationService` provides customization for certain attributes of attachments displayed inside the message component. If you're using your own CDN, you can integrate resizing features of it by providing your own handlers.
|
|
5
|
+
*/
|
|
6
|
+
export class AttachmentConfigurationService {
|
|
7
|
+
constructor() {
|
|
8
|
+
/**
|
|
9
|
+
* You can turn on/off thumbnail generation for video attachments
|
|
10
|
+
*/
|
|
11
|
+
this.shouldGenerateVideoThumbnail = true;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Handles the configuration for image attachments, it's possible to provide your own function to override the default logic
|
|
15
|
+
* @param attachment The attachment to configure
|
|
16
|
+
* @param location Specifies where the image is being displayed
|
|
17
|
+
* @param element The default resizing logics reads the height/max-height and max-width propperties of this element and reduces file size based on the given values. File size reduction is done by Stream's CDN.
|
|
18
|
+
*/
|
|
19
|
+
getImageAttachmentConfiguration(attachment, location, element) {
|
|
20
|
+
if (this.customImageAttachmentConfigurationHandler) {
|
|
21
|
+
return this.customImageAttachmentConfigurationHandler(attachment, location, element);
|
|
22
|
+
}
|
|
23
|
+
const defaultOriginalDimension = 1000000;
|
|
24
|
+
const urlString = (attachment.img_url ||
|
|
25
|
+
attachment.thumb_url ||
|
|
26
|
+
attachment.image_url ||
|
|
27
|
+
'');
|
|
28
|
+
let url;
|
|
29
|
+
try {
|
|
30
|
+
url = new URL(urlString);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return {
|
|
34
|
+
url: urlString,
|
|
35
|
+
width: '',
|
|
36
|
+
height: '',
|
|
37
|
+
originalHeight: defaultOriginalDimension,
|
|
38
|
+
originalWidth: defaultOriginalDimension,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const originalHeight = Number(url.searchParams.get('oh')) > 1
|
|
42
|
+
? Number(url.searchParams.get('oh'))
|
|
43
|
+
: defaultOriginalDimension;
|
|
44
|
+
const originalWidth = Number(url.searchParams.get('ow')) > 1
|
|
45
|
+
? Number(url.searchParams.get('ow'))
|
|
46
|
+
: defaultOriginalDimension;
|
|
47
|
+
const displayWarning = location === 'gallery' || location === 'single';
|
|
48
|
+
const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
|
|
49
|
+
if (sizeRestriction) {
|
|
50
|
+
// Apply 2x for retina displays
|
|
51
|
+
sizeRestriction.height *= 2;
|
|
52
|
+
sizeRestriction.width *= 2;
|
|
53
|
+
this.addResizingParamsToUrl(sizeRestriction, url);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
url: url.href,
|
|
57
|
+
width: '',
|
|
58
|
+
height: '',
|
|
59
|
+
originalHeight,
|
|
60
|
+
originalWidth,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Handles the configuration for video attachments, it's possible to provide your own function to override the default logic
|
|
65
|
+
* @param attachment The attachment to configure
|
|
66
|
+
* @param element The default resizing logics reads the height/max-height and max-width propperties of this element and reduces file size based on the given values. File size reduction is done by Stream's CDN.
|
|
67
|
+
*/
|
|
68
|
+
getVideoAttachmentConfiguration(attachment, element) {
|
|
69
|
+
if (this.customVideoAttachmentConfigurationHandler) {
|
|
70
|
+
return this.customVideoAttachmentConfigurationHandler(attachment, element);
|
|
71
|
+
}
|
|
72
|
+
let thumbUrl = undefined;
|
|
73
|
+
let originalHeight = 1000000;
|
|
74
|
+
let originalWidth = 1000000;
|
|
75
|
+
if (attachment.thumb_url && this.shouldGenerateVideoThumbnail) {
|
|
76
|
+
let url;
|
|
77
|
+
try {
|
|
78
|
+
url = new URL(attachment.thumb_url);
|
|
79
|
+
originalHeight =
|
|
80
|
+
Number(url.searchParams.get('oh')) > 1
|
|
81
|
+
? Number(url.searchParams.get('oh'))
|
|
82
|
+
: originalHeight;
|
|
83
|
+
originalWidth =
|
|
84
|
+
Number(url.searchParams.get('ow')) > 1
|
|
85
|
+
? Number(url.searchParams.get('ow'))
|
|
86
|
+
: originalWidth;
|
|
87
|
+
const displayWarning = true;
|
|
88
|
+
const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
|
|
89
|
+
if (sizeRestriction) {
|
|
90
|
+
sizeRestriction.height *= 2;
|
|
91
|
+
sizeRestriction.width *= 2;
|
|
92
|
+
this.addResizingParamsToUrl(sizeRestriction, url);
|
|
93
|
+
}
|
|
94
|
+
thumbUrl = url.href;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
thumbUrl = attachment.thumb_url;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
url: attachment.asset_url || '',
|
|
102
|
+
width: '',
|
|
103
|
+
height: '',
|
|
104
|
+
thumbUrl: thumbUrl,
|
|
105
|
+
originalHeight,
|
|
106
|
+
originalWidth,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Handles the configuration for giphy attachments, it's possible to provide your own function to override the default logic
|
|
111
|
+
* @param attachment The attachment to configure
|
|
112
|
+
*/
|
|
113
|
+
getGiphyAttachmentConfiguration(attachment) {
|
|
114
|
+
if (this.customGiphyAttachmentConfigurationHandler) {
|
|
115
|
+
return this.customGiphyAttachmentConfigurationHandler(attachment);
|
|
116
|
+
}
|
|
117
|
+
const giphy = attachment.giphy?.fixed_height_downsampled;
|
|
118
|
+
return {
|
|
119
|
+
url: giphy?.url || attachment.image_url || attachment.thumb_url || '',
|
|
120
|
+
height: giphy?.height ? `${giphy?.height}px` : '300px',
|
|
121
|
+
width: giphy?.width ? `${giphy?.width}px` : '',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Handles the configuration for scraped image attachments, it's possible to provide your own function to override the default logic
|
|
126
|
+
* @param attachment The attachment to configure
|
|
127
|
+
*/
|
|
128
|
+
getScrapedImageAttachmentConfiguration(attachment) {
|
|
129
|
+
if (this.customScrapedImageAttachmentConfigurationHandler) {
|
|
130
|
+
return this.customScrapedImageAttachmentConfigurationHandler(attachment);
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
url: attachment.image_url || attachment.thumb_url || '',
|
|
134
|
+
width: '',
|
|
135
|
+
height: '', // Set from CSS
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
addResizingParamsToUrl(sizeRestriction, url) {
|
|
139
|
+
url.searchParams.set('h', sizeRestriction.height.toString());
|
|
140
|
+
url.searchParams.set('w', sizeRestriction.width.toString());
|
|
141
|
+
}
|
|
142
|
+
getSizingRestrictions(url, htmlElement, displayWarning = false) {
|
|
143
|
+
const urlParams = url.searchParams;
|
|
144
|
+
const originalHeight = Number(urlParams.get('oh')) || 1;
|
|
145
|
+
const originalWidth = Number(urlParams.get('ow')) || 1;
|
|
146
|
+
const cssSizeRestriction = this.getCSSSizeRestriction(htmlElement);
|
|
147
|
+
let sizeRestriction;
|
|
148
|
+
if ((cssSizeRestriction.maxHeight || cssSizeRestriction.height) &&
|
|
149
|
+
cssSizeRestriction.maxWidth) {
|
|
150
|
+
sizeRestriction = this.getSizeRestrictions(originalHeight, originalWidth, (cssSizeRestriction.maxHeight || cssSizeRestriction.height), cssSizeRestriction.maxWidth);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
sizeRestriction = undefined;
|
|
154
|
+
if (displayWarning) {
|
|
155
|
+
console.warn(`Invalid value set for height/max-height and/or max-width for HTML element, this can cause scrolling issues inside the message list, more info https://getstream.io/chat/docs/sdk/angular/components/AttachmentListComponent/#image-and-video-sizing, attachment URL: ${url.toString()}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return sizeRestriction;
|
|
159
|
+
}
|
|
160
|
+
getSizeRestrictions(originalHeight, originalWidth, maxHeight, maxWidth) {
|
|
161
|
+
return {
|
|
162
|
+
height: Math.round(Math.max(maxHeight, (maxWidth / originalWidth) * originalHeight)),
|
|
163
|
+
width: Math.round(Math.max(maxHeight, (maxWidth / originalHeight) * originalWidth)),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
getCSSSizeRestriction(htmlElement) {
|
|
167
|
+
const computedStylesheet = getComputedStyle(htmlElement);
|
|
168
|
+
const height = this.getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('height'));
|
|
169
|
+
const maxHeight = this.getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-height'));
|
|
170
|
+
const maxWidth = this.getValueRepresentationOfCSSProperty(computedStylesheet.getPropertyValue('max-width'));
|
|
171
|
+
return { height, maxHeight, maxWidth };
|
|
172
|
+
}
|
|
173
|
+
getValueRepresentationOfCSSProperty(property) {
|
|
174
|
+
return Number(property.replace('px', '')) || undefined;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
AttachmentConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
178
|
+
AttachmentConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentConfigurationService, providedIn: 'root' });
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AttachmentConfigurationService, decorators: [{
|
|
180
|
+
type: Injectable,
|
|
181
|
+
args: [{
|
|
182
|
+
providedIn: 'root',
|
|
183
|
+
}]
|
|
184
|
+
}] });
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTM0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sOEJBQThCO0lBSDNDO1FBaUNFOztXQUVHO1FBQ0gsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO0tBZ1ByQztJQTlPQzs7Ozs7T0FLRztJQUNILCtCQUErQixDQUM3QixVQUF5QixFQUN6QixRQUEyQyxFQUMzQyxPQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyx5Q0FBeUMsRUFBRTtZQUNsRCxPQUFPLElBQUksQ0FBQyx5Q0FBeUMsQ0FDbkQsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztTQUNIO1FBRUQsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNuQyxVQUFVLENBQUMsU0FBUztZQUNwQixVQUFVLENBQUMsU0FBUztZQUNwQixFQUFFLENBQVcsQ0FBQztRQUNoQixJQUFJLEdBQVEsQ0FBQztRQUNiLElBQUk7WUFDRixHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU87Z0JBQ0wsR0FBRyxFQUFFLFNBQVM7Z0JBQ2QsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsY0FBYyxFQUFFLHdCQUF3QjtnQkFDeEMsYUFBYSxFQUFFLHdCQUF3QjthQUN4QyxDQUFDO1NBQ0g7UUFDRCxNQUFNLGNBQWMsR0FDbEIsTUFBTSxDQUFDLEdB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QUFFLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUN6RCxDQUFDOzsySEFoUlUsOEJBQThCOytIQUE5Qiw4QkFBOEIsY0FGN0IsTUFBTTsyRkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRDb25maWdyYXRpb24sXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24sXG4gIFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlYCBwcm92aWRlcyBjdXN0b21pemF0aW9uIGZvciBjZXJ0YWluIGF0dHJpYnV0ZXMgb2YgYXR0YWNobWVudHMgZGlzcGxheWVkIGluc2lkZSB0aGUgbWVzc2FnZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZyB5b3VyIG93biBDRE4sIHlvdSBjYW4gaW50ZWdyYXRlIHJlc2l6aW5nIGZlYXR1cmVzIG9mIGl0IGJ5IHByb3ZpZGluZyB5b3VyIG93biBoYW5kbGVycy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltYWdlIGF0dGFjaG1lbnQgKGltYWdlcyB1cGxvYWRlZCBmcm9tIGZpbGVzKSBjb25maWd1cmF0aW9uLiBCeSBkZWZhdWx0IHRoZSBTREsgdXNlcyBmaXhlZCBpbWFnZSBoZWlnaHQgKGEgc2l6ZSB0aGF0J3Mga25vd24gYmVmb3JlIGltYWdlIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBpbWFnZSBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPixcbiAgICB0eXBlOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyB8ICdjYXJvdXNlbCcsXG4gICAgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKSA9PiBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogQSBjdXN0b20gaGFuZGxlciBjYW4gYmUgcHJvdmlkZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmlkZW8gYXR0YWNobWVudCAodmlkZW9zIHVwbG9hZGVkIGZyb20gZmlsZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgdmlkZW8gaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21WaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcj86IChcbiAgICBhOiBBdHRhY2htZW50PFQ+LFxuICAgIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICkgPT4gVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGdpcGh5IGF0dGFjaG1lbnQgKEdJRnMgc2VudCB3aXRoIHRoZSAvZ2lwaHkgY29tbWFuZCkgY29uZmlndXJhdGlvbi4gQnkgZGVmYXVsdCB0aGUgU0RLIHVzZXMgZml4ZWQgaGVpZ2h0IChhIHNpemUgdGhhdCdzIGtub3duIGJlZm9yZSB0aGUgR0lGIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPlxuICApID0+IEF0dGFjaG1lbnRDb25maWdyYXRpb247XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGNhbiBiZSBwcm92aWRlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzY3JhcGVkIGltYWdlIGF0dGFjaG1lbnQgKGltYWdlcyBmb3VuZCBpbiBsaW5rcyBpbnNpZGUgbWVzc2FnZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgaW1hZ2UgaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21TY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPlxuICApID0+IEF0dGFjaG1lbnRDb25maWdyYXRpb247XG4gIC8qKlxuICAgKiBZb3UgY2FuIHR1cm4gb24vb2ZmIHRodW1ibmFpbCBnZW5lcmF0aW9uIGZvciB2aWRlbyBhdHRhY2htZW50c1xuICAgKi9cbiAgc2hvdWxkR2VuZXJhdGVWaWRlb1RodW1ibmFpbCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGltYWdlIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqIEBwYXJhbSBsb2NhdGlvbiBTcGVjaWZpZXMgd2hlcmUgdGhlIGltYWdlIGlzIGJlaW5nIGRpc3BsYXllZFxuICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZGVmYXVsdCByZXNpemluZyBsb2dpY3MgcmVhZHMgdGhlIGhlaWdodC9tYXgtaGVpZ2h0IGFuZCBtYXgtd2lkdGggcHJvcHBlcnRpZXMgb2YgdGhpcyBlbGVtZW50IGFuZCByZWR1Y2VzIGZpbGUgc2l6ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmFsdWVzLiBGaWxlIHNpemUgcmVkdWN0aW9uIGlzIGRvbmUgYnkgU3RyZWFtJ3MgQ0ROLlxuICAgKi9cbiAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+LFxuICAgIGxvY2F0aW9uOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyB8ICdjYXJvdXNlbCcsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKFxuICAgICAgICBhdHRhY2htZW50LFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb24gPSAxMDAwMDAwO1xuICAgIGNvbnN0IHVybFN0cmluZyA9IChhdHRhY2htZW50LmltZ191cmwgfHxcbiAgICAgIGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8XG4gICAgICBhdHRhY2htZW50LmltYWdlX3VybCB8fFxuICAgICAgJycpIGFzIHN0cmluZztcbiAgICBsZXQgdXJsOiBVUkw7XG4gICAgdHJ5IHtcbiAgICAgIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXJsOiB1cmxTdHJpbmcsXG4gICAgICAgIHdpZHRoOiAnJywgLy8gTm90IHNldCB0byByZXNwZWN0IHJlc3BvbnNpdmUgd2lkdGhcbiAgICAgICAgaGVpZ2h0OiAnJywgLy8gU2V0IGZyb20gQ1NTXG4gICAgICAgIG9yaWdpbmFsSGVpZ2h0OiBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb24sXG4gICAgICAgIG9yaWdpbmFsV2lkdGg6IGRlZmF1bHRPcmlnaW5hbERpbWVuc2lvbixcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbmFsSGVpZ2h0ID1cbiAgICAgIE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSkgPiAxXG4gICAgICAgID8gTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvaCcpKVxuICAgICAgICA6IGRlZmF1bHRPcmlnaW5hbERpbWVuc2lvbjtcbiAgICBjb25zdCBvcmlnaW5hbFdpZHRoID1cbiAgICAgIE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb3cnKSkgPiAxXG4gICAgICAgID8gTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvdycpKVxuICAgICAgICA6IGRlZmF1bHRPcmlnaW5hbERpbWVuc2lvbjtcbiAgICBjb25zdCBkaXNwbGF5V2FybmluZyA9IGxvY2F0aW9uID09PSAnZ2FsbGVyeScgfHwgbG9jYXRpb24gPT09ICdzaW5nbGUnO1xuICAgIGNvbnN0IHNpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0U2l6aW5nUmVzdHJpY3Rpb25zKFxuICAgICAgdXJsLFxuICAgICAgZWxlbWVudCxcbiAgICAgIGRpc3BsYXlXYXJuaW5nXG4gICAgKTtcblxuICAgIGlmIChzaXplUmVzdHJpY3Rpb24pIHtcbiAgICAgIC8vIEFwcGx5IDJ4IGZvciByZXRpbmEgZGlzcGxheXNcbiAgICAgIHNpemVSZXN0cmljdGlvbi5oZWlnaHQgKj0gMjtcbiAgICAgIHNpemVSZXN0cmljdGlvbi53aWR0aCAqPSAyO1xuICAgICAgdGhpcy5hZGRSZXNpemluZ1BhcmFtc1RvVXJsKHNpemVSZXN0cmljdGlvbiwgdXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiB1cmwuaHJlZixcbiAgICAgIHdpZHRoOiAnJywgLy8gTm90IHNldCB0byByZXNwZWN0IHJlc3BvbnNpdmUgd2lkdGhcbiAgICAgIGhlaWdodDogJycsIC8vIFNldCBmcm9tIENTU1xuICAgICAgb3JpZ2luYWxIZWlnaHQsXG4gICAgICBvcmlnaW5hbFdpZHRoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdmlkZW8gYXR0YWNobWVudHMsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSB5b3VyIG93biBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2dpY1xuICAgKiBAcGFyYW0gYXR0YWNobWVudCBUaGUgYXR0YWNobWVudCB0byBjb25maWd1cmVcbiAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGRlZmF1bHQgcmVzaXppbmcgbG9naWNzIHJlYWRzIHRoZSBoZWlnaHQvbWF4LWhlaWdodCBhbmQgbWF4LXdpZHRoIHByb3BwZXJ0aWVzIG9mIHRoaXMgZWxlbWVudCBhbmQgcmVkdWNlcyBmaWxlIHNpemUgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlcy4gRmlsZSBzaXplIHJlZHVjdGlvbiBpcyBkb25lIGJ5IFN0cmVhbSdzIENETi5cbiAgICovXG4gIGdldFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudDxUPixcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uIHtcbiAgICBpZiAodGhpcy5jdXN0b21WaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIoXG4gICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHRodW1iVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IG9yaWdpbmFsSGVpZ2h0ID0gMTAwMDAwMDtcbiAgICBsZXQgb3JpZ2luYWxXaWR0aCA9IDEwMDAwMDA7XG4gICAgaWYgKGF0dGFjaG1lbnQudGh1bWJfdXJsICYmIHRoaXMuc2hvdWxkR2VuZXJhdGVWaWRlb1RodW1ibmFpbCkge1xuICAgICAgbGV0IHVybDogVVJMO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdXJsID0gbmV3IFVSTChhdHRhY2htZW50LnRodW1iX3VybCk7XG5cbiAgICAgICAgb3JpZ2luYWxIZWlnaHQgPVxuICAgICAgICAgIE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSkgPiAxXG4gICAgICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSlcbiAgICAgICAgICAgIDogb3JpZ2luYWxIZWlnaHQ7XG4gICAgICAgIG9yaWdpbmFsV2lkdGggPVxuICAgICAgICAgIE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb3cnKSkgPiAxXG4gICAgICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb3cnKSlcbiAgICAgICAgICAgIDogb3JpZ2luYWxXaWR0aDtcbiAgICAgICAgY29uc3QgZGlzcGxheVdhcm5pbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICBkaXNwbGF5V2FybmluZ1xuICAgICAgICApO1xuICAgICAgICBpZiAoc2l6ZVJlc3RyaWN0aW9uKSB7XG4gICAgICAgICAgc2l6ZVJlc3RyaWN0aW9uLmhlaWdodCAqPSAyO1xuICAgICAgICAgIHNpemVSZXN0cmljdGlvbi53aWR0aCAqPSAyO1xuICAgICAgICAgIHRoaXMuYWRkUmVzaXppbmdQYXJhbXNUb1VybChzaXplUmVzdHJpY3Rpb24sIHVybCk7XG4gICAgICAgIH1cbiAgICAgICAgdGh1bWJVcmwgPSB1cmwuaHJlZjtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHVtYlVybCA9IGF0dGFjaG1lbnQudGh1bWJfdXJsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiBhdHRhY2htZW50LmFzc2V0X3VybCB8fCAnJyxcbiAgICAgIHdpZHRoOiAnJywgLy8gTm90IHNldCB0byByZXNwZWN0IHJlc3BvbnNpdmUgd2lkdGhcbiAgICAgIGhlaWdodDogJycsIC8vIFNldCBmcm9tIENTU1xuICAgICAgdGh1bWJVcmw6IHRodW1iVXJsLFxuICAgICAgb3JpZ2luYWxIZWlnaHQsXG4gICAgICBvcmlnaW5hbFdpZHRoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgZ2lwaHkgYXR0YWNobWVudHMsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSB5b3VyIG93biBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2dpY1xuICAgKiBAcGFyYW0gYXR0YWNobWVudCBUaGUgYXR0YWNobWVudCB0byBjb25maWd1cmVcbiAgICovXG4gIGdldEdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudDxUPlxuICApOiBBdHRhY2htZW50Q29uZmlncmF0aW9uIHtcbiAgICBpZiAodGhpcy5jdXN0b21HaXBoeUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIoYXR0YWNobWVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2lwaHkgPSBhdHRhY2htZW50LmdpcGh5Py5maXhlZF9oZWlnaHRfZG93bnNhbXBsZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiBnaXBoeT8udXJsIHx8IGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8IGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8ICcnLFxuICAgICAgaGVpZ2h0OiBnaXBoeT8uaGVpZ2h0ID8gYCR7Z2lwaHk/LmhlaWdodH1weGAgOiAnMzAwcHgnLFxuICAgICAgd2lkdGg6IGdpcGh5Py53aWR0aCA/IGAke2dpcGh5Py53aWR0aH1weGAgOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHNjcmFwZWQgaW1hZ2UgYXR0YWNobWVudHMsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSB5b3VyIG93biBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2dpY1xuICAgKiBAcGFyYW0gYXR0YWNobWVudCBUaGUgYXR0YWNobWVudCB0byBjb25maWd1cmVcbiAgICovXG4gIGdldFNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8VD5cbiAgKTogQXR0YWNobWVudENvbmZpZ3JhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tU2NyYXBlZEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21TY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIoYXR0YWNobWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogYXR0YWNobWVudC5pbWFnZV91cmwgfHwgYXR0YWNobWVudC50aHVtYl91cmwgfHwgJycsXG4gICAgICB3aWR0aDogJycsXG4gICAgICBoZWlnaHQ6ICcnLCAvLyBTZXQgZnJvbSBDU1NcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZXNpemluZ1BhcmFtc1RvVXJsKFxuICAgIHNpemVSZXN0cmljdGlvbjogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxuICAgIHVybDogVVJMXG4gICkge1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdoJywgc2l6ZVJlc3RyaWN0aW9uLmhlaWdodC50b1N0cmluZygpKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgndycsIHNpemVSZXN0cmljdGlvbi53aWR0aC50b1N0cmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2l6aW5nUmVzdHJpY3Rpb25zKFxuICAgIHVybDogVVJMLFxuICAgIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBkaXNwbGF5V2FybmluZyA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHVybFBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXM7XG4gICAgY29uc3Qgb3JpZ2luYWxIZWlnaHQgPSBOdW1iZXIodXJsUGFyYW1zLmdldCgnb2gnKSkgfHwgMTtcbiAgICBjb25zdCBvcmlnaW5hbFdpZHRoID0gTnVtYmVyKHVybFBhcmFtcy5nZXQoJ293JykpIHx8IDE7XG4gICAgY29uc3QgY3NzU2l6ZVJlc3RyaWN0aW9uID0gdGhpcy5nZXRDU1NTaXplUmVzdHJpY3Rpb24oaHRtbEVsZW1lbnQpO1xuICAgIGxldCBzaXplUmVzdHJpY3Rpb246IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChcbiAgICAgIChjc3NTaXplUmVzdHJpY3Rpb24ubWF4SGVpZ2h0IHx8IGNzc1NpemVSZXN0cmljdGlvbi5oZWlnaHQpICYmXG4gICAgICBjc3NTaXplUmVzdHJpY3Rpb24ubWF4V2lkdGhcbiAgICApIHtcbiAgICAgIHNpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0U2l6ZVJlc3RyaWN0aW9ucyhcbiAgICAgICAgb3JpZ2luYWxIZWlnaHQsXG4gICAgICAgIG9yaWdpbmFsV2lkdGgsXG4gICAgICAgIChjc3NTaXplUmVzdHJpY3Rpb24ubWF4SGVpZ2h0IHx8IGNzc1NpemVSZXN0cmljdGlvbi5oZWlnaHQpISxcbiAgICAgICAgY3NzU2l6ZVJlc3RyaWN0aW9uLm1heFdpZHRoXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplUmVzdHJpY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoZGlzcGxheVdhcm5pbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBJbnZhbGlkIHZhbHVlIHNldCBmb3IgaGVpZ2h0L21heC1oZWlnaHQgYW5kL29yIG1heC13aWR0aCBmb3IgSFRNTCBlbGVtZW50LCB0aGlzIGNhbiBjYXVzZSBzY3JvbGxpbmcgaXNzdWVzIGluc2lkZSB0aGUgbWVzc2FnZSBsaXN0LCBtb3JlIGluZm8gaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL3Nkay9hbmd1bGFyL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQvI2ltYWdlLWFuZC12aWRlby1zaXppbmcsIGF0dGFjaG1lbnQgVVJMOiAke3VybC50b1N0cmluZygpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZVJlc3RyaWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaXplUmVzdHJpY3Rpb25zKFxuICAgIG9yaWdpbmFsSGVpZ2h0OiBudW1iZXIsXG4gICAgb3JpZ2luYWxXaWR0aDogbnVtYmVyLFxuICAgIG1heEhlaWdodDogbnVtYmVyLFxuICAgIG1heFdpZHRoOiBudW1iZXJcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogTWF0aC5yb3VuZChcbiAgICAgICAgTWF0aC5tYXgobWF4SGVpZ2h0LCAobWF4V2lkdGggLyBvcmlnaW5hbFdpZHRoKSAqIG9yaWdpbmFsSGVpZ2h0KVxuICAgICAgKSxcbiAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKFxuICAgICAgICBNYXRoLm1heChtYXhIZWlnaHQsIChtYXhXaWR0aCAvIG9yaWdpbmFsSGVpZ2h0KSAqIG9yaWdpbmFsV2lkdGgpXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENTU1NpemVSZXN0cmljdGlvbihodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlc2hlZXQgPSBnZXRDb21wdXRlZFN0eWxlKGh0bWxFbGVtZW50KTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmdldFZhbHVlUmVwcmVzZW50YXRpb25PZkNTU1Byb3BlcnR5KFxuICAgICAgY29tcHV0ZWRTdHlsZXNoZWV0LmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpXG4gICAgKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmdldFZhbHVlUmVwcmVzZW50YXRpb25PZkNTU1Byb3BlcnR5KFxuICAgICAgY29tcHV0ZWRTdHlsZXNoZWV0LmdldFByb3BlcnR5VmFsdWUoJ21heC1oZWlnaHQnKVxuICAgICk7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLmdldFZhbHVlUmVwcmVzZW50YXRpb25PZkNTU1Byb3BlcnR5KFxuICAgICAgY29tcHV0ZWRTdHlsZXNoZWV0LmdldFByb3BlcnR5VmFsdWUoJ21heC13aWR0aCcpXG4gICAgKTtcblxuICAgIHJldHVybiB7IGhlaWdodCwgbWF4SGVpZ2h0LCBtYXhXaWR0aCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE51bWJlcihwcm9wZXJ0eS5yZXBsYWNlKCdweCcsICcnKSkgfHwgdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|