stream-chat-angular 5.1.11 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/assets/version.d.ts +1 -1
  2. package/esm2020/assets/version.mjs +2 -2
  3. package/esm2020/lib/attachment-list/attachment-list.component.mjs +3 -3
  4. package/esm2020/lib/channel-header/channel-header.component.mjs +3 -3
  5. package/esm2020/lib/channel-list/channel-list.component.mjs +3 -3
  6. package/esm2020/lib/channel-preview/channel-preview.component.mjs +3 -3
  7. package/esm2020/lib/channel.service.mjs +3 -1
  8. package/esm2020/lib/chat-client.service.mjs +1 -1
  9. package/esm2020/lib/message/message.component.mjs +6 -5
  10. package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +3 -3
  11. package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +3 -3
  12. package/esm2020/lib/message-input/message-input.component.mjs +3 -3
  13. package/esm2020/lib/message-input/textarea/textarea.component.mjs +3 -3
  14. package/esm2020/lib/message-list/message-list.component.mjs +3 -3
  15. package/esm2020/lib/message-reactions/message-reactions.component.mjs +72 -80
  16. package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +3 -3
  17. package/esm2020/lib/message-reactions.service.mjs +30 -4
  18. package/esm2020/lib/notification-list/notification-list.component.mjs +3 -3
  19. package/esm2020/lib/paginated-list/paginated-list.component.mjs +94 -0
  20. package/esm2020/lib/stream-chat.module.mjs +13 -3
  21. package/esm2020/lib/types.mjs +1 -1
  22. package/esm2020/lib/user-list/user-list.component.mjs +47 -0
  23. package/esm2020/lib/voice-recording/voice-recording.component.mjs +3 -3
  24. package/esm2020/public-api.mjs +3 -1
  25. package/fesm2015/stream-chat-angular.mjs +284 -116
  26. package/fesm2015/stream-chat-angular.mjs.map +1 -1
  27. package/fesm2020/stream-chat-angular.mjs +269 -107
  28. package/fesm2020/stream-chat-angular.mjs.map +1 -1
  29. package/lib/channel.service.d.ts +7 -2
  30. package/lib/message-reactions/message-reactions.component.d.ts +19 -11
  31. package/lib/message-reactions.service.d.ts +14 -2
  32. package/lib/paginated-list/paginated-list.component.d.ts +42 -0
  33. package/lib/stream-chat.module.d.ts +7 -5
  34. package/lib/types.d.ts +11 -2
  35. package/lib/user-list/user-list.component.d.ts +30 -0
  36. package/package.json +2 -2
  37. package/public-api.d.ts +2 -0
  38. package/src/assets/styles/css/index.css +1 -1
  39. package/src/assets/styles/css/index.layout.css +1 -1
  40. package/src/assets/styles/scss/_base.scss +31 -0
  41. package/src/assets/version.ts +1 -1
@@ -1,28 +1,30 @@
1
1
  import { Component, Input, ViewChild, } from '@angular/core';
2
- import { ChannelService } from '../channel.service';
3
2
  import * as i0 from "@angular/core";
4
- import * as i1 from "../channel.service";
5
- import * as i2 from "../message-reactions.service";
6
- import * as i3 from "../custom-templates.service";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "../avatar-placeholder/avatar-placeholder.component";
9
- import * as i6 from "../loading-indicator/loading-indicator.component";
10
- import * as i7 from "../modal/modal.component";
3
+ import * as i1 from "../message-reactions.service";
4
+ import * as i2 from "../custom-templates.service";
5
+ import * as i3 from "@angular/common";
6
+ import * as i4 from "../modal/modal.component";
7
+ import * as i5 from "../user-list/user-list.component";
11
8
  /**
12
9
  * The `MessageReactions` component displays the reactions of a message. You can read more about [message reactions](https://getstream.io/chat/docs/javascript/send_reaction/?language=javascript) in the platform documentation.
13
10
  */
14
11
  export class MessageReactionsComponent {
15
- constructor(cdRef, channelService, messageReactionsService, customTemplatesService) {
12
+ constructor(cdRef, messageReactionsService, customTemplatesService) {
16
13
  this.cdRef = cdRef;
17
- this.channelService = channelService;
18
14
  this.messageReactionsService = messageReactionsService;
19
15
  this.customTemplatesService = customTemplatesService;
20
16
  /**
21
17
  * The number of reactions grouped by [reaction types](https://github.com/GetStream/stream-chat-angular/tree/master/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts)
22
18
  */
19
+ this.messageReactionGroups = undefined;
20
+ /**
21
+ * The number of reactions grouped by [reaction types](https://github.com/GetStream/stream-chat-angular/tree/master/projects/stream-chat-angular/src/lib/message-reactions/message-reactions.component.ts)
22
+ * @deprecated use `messageReactionGroups`
23
+ */
23
24
  this.messageReactionCounts = {};
24
25
  /**
25
26
  * List of reactions of a [message](../types/stream-message.mdx), used to display the users of a reaction type.
27
+ * @deprecated you can fetch the reactions using [`messageReactionsService.queryReactions()`](https://getstream.io/chat/docs/sdk/angular/services/MessageReactionsService/#queryreactions)
26
28
  */
27
29
  this.latestReactions = [];
28
30
  /**
@@ -33,12 +35,15 @@ export class MessageReactionsComponent {
33
35
  this.reactions = [];
34
36
  this.shouldHandleReactionClick = true;
35
37
  this.existingReactions = [];
36
- this.reactionsCount = 0;
37
38
  this.reactionOptions = [];
39
+ this.usersByReactions = {};
38
40
  this.subscriptions = [];
39
41
  this.isViewInited = false;
40
42
  this.isOpenChange = (isOpen) => {
41
43
  this.selectedReactionType = isOpen ? this.selectedReactionType : undefined;
44
+ if (!isOpen) {
45
+ this.usersByReactions = {};
46
+ }
42
47
  };
43
48
  }
44
49
  ngOnInit() {
@@ -51,15 +56,20 @@ export class MessageReactionsComponent {
51
56
  }));
52
57
  }
53
58
  ngOnChanges(changes) {
54
- if (changes.messageReactionCounts) {
59
+ if (changes.messageReactionCounts || changes.messageReactionGroups) {
60
+ if (this.messageReactionCounts && !this.messageReactionGroups) {
61
+ this.messageReactionGroups = {};
62
+ Object.keys(this.messageReactionCounts).forEach((k) => {
63
+ this.messageReactionGroups[k] = {
64
+ count: this.messageReactionCounts?.[k] ?? 0,
65
+ sum_scores: this.messageReactionCounts?.[k] ?? 0,
66
+ first_reaction_at: undefined,
67
+ last_reaction_at: undefined,
68
+ };
69
+ });
70
+ }
55
71
  this.setExistingReactions();
56
72
  }
57
- if (changes.messageReactionCounts && this.messageReactionCounts) {
58
- const reactionsCount = Object.keys(this.messageReactionCounts).reduce((acc, key) => acc + (this.messageReactionCounts[key] || 0), 0);
59
- this.shouldHandleReactionClick =
60
- reactionsCount <= ChannelService.MAX_MESSAGE_REACTIONS_TO_FETCH ||
61
- !!this.messageReactionsService.customReactionClickHandler;
62
- }
63
73
  }
64
74
  ngAfterViewInit() {
65
75
  this.isViewInited = true;
@@ -70,10 +80,7 @@ export class MessageReactionsComponent {
70
80
  getEmojiByReaction(reactionType) {
71
81
  return this.messageReactionsService.reactions[reactionType];
72
82
  }
73
- reactionSelected(reactionType) {
74
- if (!this.shouldHandleReactionClick) {
75
- return;
76
- }
83
+ async reactionSelected(reactionType) {
77
84
  if (!this.messageId) {
78
85
  return;
79
86
  }
@@ -85,83 +92,68 @@ export class MessageReactionsComponent {
85
92
  }
86
93
  else {
87
94
  this.selectedReactionType = reactionType;
88
- void this.fetchAllReactions();
89
- }
90
- }
91
- getUsersByReaction(reactionType) {
92
- return this.latestReactions
93
- .filter((r) => r.type === reactionType)
94
- .map((r) => r.user?.name || r.user?.id)
95
- .filter((i) => !!i)
96
- .join(', ');
97
- }
98
- getAllUsersByReaction(reactionType) {
99
- if (!reactionType) {
100
- return [];
101
- }
102
- const users = this.reactions
103
- .filter((r) => r.type === reactionType)
104
- .map((r) => r.user)
105
- .filter((i) => !!i);
106
- users.sort((u1, u2) => {
107
- const name1 = u1.name?.toLowerCase();
108
- const name2 = u2.name?.toLowerCase();
109
- if (!name1) {
110
- return 1;
111
- }
112
- if (!name2) {
113
- return -1;
114
- }
115
- if (name1 === name2) {
116
- return 0;
95
+ if (!this.usersByReactions[this.selectedReactionType]) {
96
+ this.usersByReactions[this.selectedReactionType] = {
97
+ users: [],
98
+ };
99
+ await this.loadNextPageOfReactions();
117
100
  }
118
- if (name1 < name2) {
119
- return -1;
120
- }
121
- else {
122
- return 1;
123
- }
124
- });
125
- return users;
126
- }
127
- trackByMessageReaction(_, item) {
128
- return item;
129
- }
130
- trackByUserId(_, item) {
131
- return item.id;
132
- }
133
- isOwnReaction(reactionType) {
134
- return !!this.ownReactions.find((r) => r.type === reactionType);
101
+ }
135
102
  }
136
- async fetchAllReactions() {
137
- if (!this.messageId) {
103
+ async loadNextPageOfReactions() {
104
+ if (!this.messageId || !this.selectedReactionType) {
138
105
  return;
139
106
  }
140
107
  this.isLoading = true;
141
108
  try {
142
- this.reactions = await this.channelService.getMessageReactions(this.messageId);
109
+ const response = await this.messageReactionsService.queryReactions(this.messageId, this.selectedReactionType, this.usersByReactions[this.selectedReactionType].next);
110
+ this.usersByReactions[this.selectedReactionType].users = [
111
+ ...this.usersByReactions[this.selectedReactionType].users,
112
+ ...response.reactions
113
+ .map((r) => r.user)
114
+ .filter((u) => !!u),
115
+ ];
116
+ this.usersByReactions[this.selectedReactionType].next = response.next;
143
117
  }
144
- catch (error) {
118
+ catch (_) {
145
119
  this.selectedReactionType = undefined;
146
120
  }
147
121
  finally {
148
122
  this.isLoading = false;
123
+ }
124
+ if (this.isViewInited) {
149
125
  this.cdRef.detectChanges();
150
126
  }
151
127
  }
128
+ trackByMessageReaction(_, item) {
129
+ return item;
130
+ }
131
+ isOwnReaction(reactionType) {
132
+ return !!this.ownReactions.find((r) => r.type === reactionType);
133
+ }
152
134
  setExistingReactions() {
153
- this.existingReactions = Object.keys(this.messageReactionCounts)
135
+ this.existingReactions = Object.keys(this.messageReactionGroups ?? {})
154
136
  .filter((k) => this.reactionOptions.indexOf(k) !== -1)
155
- .filter((k) => this.messageReactionCounts[k] > 0);
156
- this.reactionsCount = this.existingReactions.reduce((total, reaction) => total + this.messageReactionCounts[reaction], 0);
137
+ .filter((k) => this.messageReactionGroups[k].count > 0)
138
+ .sort((r1, r2) => {
139
+ const date1 = this.messageReactionGroups[r1].first_reaction_at
140
+ ? new Date(this.messageReactionGroups[r1].first_reaction_at)
141
+ : new Date();
142
+ const date2 = this.messageReactionGroups[r2].first_reaction_at
143
+ ? new Date(this.messageReactionGroups[r2].first_reaction_at)
144
+ : new Date();
145
+ return date1.getTime() - date2.getTime();
146
+ });
157
147
  }
158
148
  }
159
- MessageReactionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ChannelService }, { token: i2.MessageReactionsService }, { token: i3.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
160
- MessageReactionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MessageReactionsComponent, selector: "stream-message-reactions", inputs: { messageId: "messageId", messageReactionCounts: "messageReactionCounts", latestReactions: "latestReactions", ownReactions: "ownReactions" }, viewQueries: [{ propertyName: "selectorContainer", first: true, predicate: ["selectorContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"existingReactions.length > 0\"\n data-testid=\"reaction-list\"\n class=\"str-chat__reaction-list str-chat__message-reactions-container\"\n [class.str-chat__reaction-list--reverse]=\"true\"\n>\n <ul class=\"str-chat__message-reactions\">\n <li\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reaction\"\n data-testclass=\"emoji\"\n [ngStyle]=\"{ cursor: shouldHandleReactionClick ? 'pointer' : 'default' }\"\n [class.str-chat__message-reaction-own]=\"isOwnReaction(reactionType)\"\n (click)=\"reactionSelected(reactionType)\"\n (keyup.enter)=\"reactionSelected(reactionType)\"\n >\n <span class=\"emoji str-chat__message-reaction-emoji\">\n {{ getEmojiByReaction(reactionType) }}&nbsp;\n </span>\n <span\n data-testclass=\"reaction-list-reaction-count\"\n class=\"str-chat__message-reaction-count\"\n >\n {{ messageReactionCounts[reactionType] }}\n </span>\n </li>\n <li>\n <span\n data-testid=\"reactions-count\"\n class=\"str-chat__reaction-list--counter\"\n >{{ reactionsCount }}</span\n >\n </li>\n </ul>\n</div>\n\n<ng-container *ngIf=\"selectedReactionType\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: {\n isOpen: !!selectedReactionType,\n messageId: messageId,\n reactionType: selectedReactionType,\n isOpenChangeHandler: isOpenChange,\n content: modalContent\n }\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-messageId=\"messageId\"\n let-reactionType=\"reactionType\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat__message-reactions-details-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__message-reactions-details\">\n <div class=\"str-chat__message-reactions-details-reaction-types\">\n <div\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reactions-details-reaction-type\"\n [ngStyle]=\"{\n cursor: shouldHandleReactionClick ? 'pointer' : 'default'\n }\"\n attr.data-testid=\"reaction-details-selector-{{ reactionType }}\"\n [class.str-chat__message-reactions-details-reaction-type--selected]=\"\n reactionType === selectedReactionType\n \"\n (click)=\"selectedReactionType = reactionType; allUsers.scrollTop = 0\"\n (keyup.enter)=\"\n selectedReactionType = reactionType; allUsers.scrollTop = 0\n \"\n >\n <span class=\"emoji str-chat__message-reaction-emoji\">\n {{ getEmojiByReaction(reactionType) }}&nbsp;\n </span>\n <span class=\"str-chat__message-reaction-count\">\n {{ messageReactionCounts[reactionType] }}\n </span>\n </div>\n </div>\n <div\n class=\"\n emoji\n str-chat__message-reaction-emoji str-chat__message-reaction-emoji-big\n \"\n >\n {{ getEmojiByReaction(selectedReactionType!) }}\n </div>\n <div\n #allUsers\n data-testid=\"all-reacting-users\"\n class=\"str-chat__message-reactions-details-reacting-users\"\n >\n <stream-loading-indicator\n *ngIf=\"isLoading; else reactions\"\n ></stream-loading-indicator>\n <ng-template #reactions>\n <div\n *ngFor=\"\n let user of getAllUsersByReaction(selectedReactionType);\n trackBy: trackByUserId\n \"\n class=\"str-chat__message-reactions-details-reacting-user\"\n >\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"reaction\"\n [imageUrl]=\"user.image\"\n [name]=\"user.name\"\n [user]=\"user\"\n ></stream-avatar-placeholder>\n <span\n data-testclass=\"reaction-user-username\"\n class=\"str-chat__user-item--name\"\n >{{ user.name }}</span\n >\n </div>\n </ng-template>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i5.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "component", type: i6.LoadingIndicatorComponent, selector: "stream-loading-indicator" }, { kind: "component", type: i7.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
149
+ MessageReactionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MessageReactionsService }, { token: i2.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
150
+ MessageReactionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MessageReactionsComponent, selector: "stream-message-reactions", inputs: { messageId: "messageId", messageReactionGroups: "messageReactionGroups", messageReactionCounts: "messageReactionCounts", latestReactions: "latestReactions", ownReactions: "ownReactions" }, viewQueries: [{ propertyName: "selectorContainer", first: true, predicate: ["selectorContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"existingReactions.length > 0\"\n data-testid=\"reaction-list\"\n class=\"str-chat__reaction-list str-chat__message-reactions-container\"\n [class.str-chat__reaction-list--reverse]=\"true\"\n>\n <ul class=\"str-chat__message-reactions\">\n <li\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reaction\"\n data-testclass=\"emoji\"\n [class.str-chat__message-reaction-own]=\"isOwnReaction(reactionType)\"\n (click)=\"reactionSelected(reactionType)\"\n (keyup.enter)=\"reactionSelected(reactionType)\"\n >\n <span class=\"emoji str-chat__message-reaction-emoji\">\n {{ getEmojiByReaction(reactionType) }}&nbsp;\n </span>\n <span\n data-testclass=\"reaction-list-reaction-count\"\n class=\"str-chat__message-reaction-count\"\n >\n {{ messageReactionGroups?.[reactionType]?.count ?? 0 }}\n </span>\n </li>\n </ul>\n</div>\n\n<ng-container *ngIf=\"selectedReactionType\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: {\n isOpen: !!selectedReactionType,\n messageId: messageId,\n reactionType: selectedReactionType,\n isOpenChangeHandler: isOpenChange,\n content: modalContent\n }\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-messageId=\"messageId\"\n let-reactionType=\"reactionType\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat__message-reactions-details-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__message-reactions-details\">\n <div class=\"str-chat__message-reactions-details-reaction-types\">\n <div\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reactions-details-reaction-type\"\n attr.data-testid=\"reaction-details-selector-{{ reactionType }}\"\n [class.str-chat__message-reactions-details-reaction-type--selected]=\"\n reactionType === selectedReactionType\n \"\n (click)=\"reactionSelected(reactionType)\"\n (keyup.enter)=\"reactionSelected(reactionType)\"\n >\n <span class=\"emoji str-chat__message-reaction-emoji\">\n {{ getEmojiByReaction(reactionType) }}&nbsp;\n </span>\n <span class=\"str-chat__message-reaction-count\">\n {{ messageReactionGroups?.[reactionType]?.count ?? 0 }}\n </span>\n </div>\n </div>\n <div\n class=\"emoji str-chat__message-reaction-emoji str-chat__message-reaction-emoji-big\"\n >\n {{ getEmojiByReaction(selectedReactionType!) }}\n </div>\n <div\n data-testid=\"all-reacting-users\"\n class=\"str-chat__message-reactions-details-reacting-users\"\n >\n <ng-container\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n >\n <stream-user-list\n attr.data-testid=\"{{ reactionType }}-user-list\"\n [style.display]=\"\n selectedReactionType === reactionType ? 'block' : 'none'\n \"\n [users]=\"usersByReactions[reactionType]?.users || []\"\n [isLoading]=\"isLoading\"\n [hasMore]=\"!!usersByReactions[reactionType]?.next || false\"\n (loadMore)=\"loadNextPageOfReactions()\"\n ></stream-user-list>\n </ng-container>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "component", type: i5.UserListComponent, selector: "stream-user-list", inputs: ["users", "isLoading", "hasMore"], outputs: ["loadMore"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
161
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsComponent, decorators: [{
162
152
  type: Component,
163
- args: [{ selector: 'stream-message-reactions', template: "<div\n *ngIf=\"existingReactions.length > 0\"\n data-testid=\"reaction-list\"\n class=\"str-chat__reaction-list str-chat__message-reactions-container\"\n [class.str-chat__reaction-list--reverse]=\"true\"\n>\n <ul class=\"str-chat__message-reactions\">\n <li\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reaction\"\n data-testclass=\"emoji\"\n [ngStyle]=\"{ cursor: shouldHandleReactionClick ? 'pointer' : 'default' }\"\n [class.str-chat__message-reaction-own]=\"isOwnReaction(reactionType)\"\n (click)=\"reactionSelected(reactionType)\"\n (keyup.enter)=\"reactionSelected(reactionType)\"\n >\n <span class=\"emoji str-chat__message-reaction-emoji\">\n {{ getEmojiByReaction(reactionType) }}&nbsp;\n </span>\n <span\n data-testclass=\"reaction-list-reaction-count\"\n class=\"str-chat__message-reaction-count\"\n >\n {{ messageReactionCounts[reactionType] }}\n </span>\n </li>\n <li>\n <span\n data-testid=\"reactions-count\"\n class=\"str-chat__reaction-list--counter\"\n >{{ reactionsCount }}</span\n >\n </li>\n </ul>\n</div>\n\n<ng-container *ngIf=\"selectedReactionType\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: {\n isOpen: !!selectedReactionType,\n messageId: messageId,\n reactionType: selectedReactionType,\n isOpenChangeHandler: isOpenChange,\n content: modalContent\n }\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-messageId=\"messageId\"\n let-reactionType=\"reactionType\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat__message-reactions-details-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__message-reactions-details\">\n <div class=\"str-chat__message-reactions-details-reaction-types\">\n <div\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reactions-details-reaction-type\"\n [ngStyle]=\"{\n cursor: shouldHandleReactionClick ? 'pointer' : 'default'\n }\"\n attr.data-testid=\"reaction-details-selector-{{ reactionType }}\"\n [class.str-chat__message-reactions-details-reaction-type--selected]=\"\n reactionType === selectedReactionType\n \"\n (click)=\"selectedReactionType = reactionType; allUsers.scrollTop = 0\"\n (keyup.enter)=\"\n selectedReactionType = reactionType; allUsers.scrollTop = 0\n \"\n >\n <span class=\"emoji str-chat__message-reaction-emoji\">\n {{ getEmojiByReaction(reactionType) }}&nbsp;\n </span>\n <span class=\"str-chat__message-reaction-count\">\n {{ messageReactionCounts[reactionType] }}\n </span>\n </div>\n </div>\n <div\n class=\"\n emoji\n str-chat__message-reaction-emoji str-chat__message-reaction-emoji-big\n \"\n >\n {{ getEmojiByReaction(selectedReactionType!) }}\n </div>\n <div\n #allUsers\n data-testid=\"all-reacting-users\"\n class=\"str-chat__message-reactions-details-reacting-users\"\n >\n <stream-loading-indicator\n *ngIf=\"isLoading; else reactions\"\n ></stream-loading-indicator>\n <ng-template #reactions>\n <div\n *ngFor=\"\n let user of getAllUsersByReaction(selectedReactionType);\n trackBy: trackByUserId\n \"\n class=\"str-chat__message-reactions-details-reacting-user\"\n >\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"reaction\"\n [imageUrl]=\"user.image\"\n [name]=\"user.name\"\n [user]=\"user\"\n ></stream-avatar-placeholder>\n <span\n data-testclass=\"reaction-user-username\"\n class=\"str-chat__user-item--name\"\n >{{ user.name }}</span\n >\n </div>\n </ng-template>\n </div>\n </div>\n</ng-template>\n" }]
164
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ChannelService }, { type: i2.MessageReactionsService }, { type: i3.CustomTemplatesService }]; }, propDecorators: { messageId: [{
153
+ args: [{ selector: 'stream-message-reactions', template: "<div\n *ngIf=\"existingReactions.length > 0\"\n data-testid=\"reaction-list\"\n class=\"str-chat__reaction-list str-chat__message-reactions-container\"\n [class.str-chat__reaction-list--reverse]=\"true\"\n>\n <ul class=\"str-chat__message-reactions\">\n <li\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reaction\"\n data-testclass=\"emoji\"\n [class.str-chat__message-reaction-own]=\"isOwnReaction(reactionType)\"\n (click)=\"reactionSelected(reactionType)\"\n (keyup.enter)=\"reactionSelected(reactionType)\"\n >\n <span class=\"emoji str-chat__message-reaction-emoji\">\n {{ getEmojiByReaction(reactionType) }}&nbsp;\n </span>\n <span\n data-testclass=\"reaction-list-reaction-count\"\n class=\"str-chat__message-reaction-count\"\n >\n {{ messageReactionGroups?.[reactionType]?.count ?? 0 }}\n </span>\n </li>\n </ul>\n</div>\n\n<ng-container *ngIf=\"selectedReactionType\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: {\n isOpen: !!selectedReactionType,\n messageId: messageId,\n reactionType: selectedReactionType,\n isOpenChangeHandler: isOpenChange,\n content: modalContent\n }\n \"\n ></ng-container>\n</ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-messageId=\"messageId\"\n let-reactionType=\"reactionType\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"str-chat__message-reactions-details-modal\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__message-reactions-details\">\n <div class=\"str-chat__message-reactions-details-reaction-types\">\n <div\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reactions-details-reaction-type\"\n attr.data-testid=\"reaction-details-selector-{{ reactionType }}\"\n [class.str-chat__message-reactions-details-reaction-type--selected]=\"\n reactionType === selectedReactionType\n \"\n (click)=\"reactionSelected(reactionType)\"\n (keyup.enter)=\"reactionSelected(reactionType)\"\n >\n <span class=\"emoji str-chat__message-reaction-emoji\">\n {{ getEmojiByReaction(reactionType) }}&nbsp;\n </span>\n <span class=\"str-chat__message-reaction-count\">\n {{ messageReactionGroups?.[reactionType]?.count ?? 0 }}\n </span>\n </div>\n </div>\n <div\n class=\"emoji str-chat__message-reaction-emoji str-chat__message-reaction-emoji-big\"\n >\n {{ getEmojiByReaction(selectedReactionType!) }}\n </div>\n <div\n data-testid=\"all-reacting-users\"\n class=\"str-chat__message-reactions-details-reacting-users\"\n >\n <ng-container\n *ngFor=\"\n let reactionType of existingReactions;\n trackBy: trackByMessageReaction\n \"\n >\n <stream-user-list\n attr.data-testid=\"{{ reactionType }}-user-list\"\n [style.display]=\"\n selectedReactionType === reactionType ? 'block' : 'none'\n \"\n [users]=\"usersByReactions[reactionType]?.users || []\"\n [isLoading]=\"isLoading\"\n [hasMore]=\"!!usersByReactions[reactionType]?.next || false\"\n (loadMore)=\"loadNextPageOfReactions()\"\n ></stream-user-list>\n </ng-container>\n </div>\n </div>\n</ng-template>\n" }]
154
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.MessageReactionsService }, { type: i2.CustomTemplatesService }]; }, propDecorators: { messageId: [{
155
+ type: Input
156
+ }], messageReactionGroups: [{
165
157
  type: Input
166
158
  }], messageReactionCounts: [{
167
159
  type: Input
@@ -173,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
173
165
  type: ViewChild,
174
166
  args: ['selectorContainer']
175
167
  }] } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtcmVhY3Rpb25zL21lc3NhZ2UtcmVhY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy9tZXNzYWdlLXJlYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULEtBQUssRUFLTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7QUFNcEQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8seUJBQXlCO0lBaUNwQyxZQUNVLEtBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLHVCQUFnRCxFQUNqRCxzQkFBOEM7UUFIN0MsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDakQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQTlCdkQ7O1dBRUc7UUFDTSwwQkFBcUIsR0FDNUIsRUFBRSxDQUFDO1FBQ0w7O1dBRUc7UUFDTSxvQkFBZSxHQUFrRCxFQUFFLENBQUM7UUFDN0U7O1dBRUc7UUFDTSxpQkFBWSxHQUFrRCxFQUFFLENBQUM7UUFLMUUsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixjQUFTLEdBQXVCLEVBQUUsQ0FBQztRQUNuQyw4QkFBeUIsR0FBRyxJQUFJLENBQUM7UUFDakMsc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBQ2pDLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLG9CQUFlLEdB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RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQ2pELENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUUsRUFDbEUsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDOztzSEF4TFUseUJBQXlCOzBHQUF6Qix5QkFBeUIsbVdDMUJ0QywwZ0pBK0lBOzJGRHJIYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsMEJBQTBCO2dOQVMzQixTQUFTO3NCQUFqQixLQUFLO2dCQUlHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ2tDLGlCQUFpQjtzQkFBeEQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlYWN0aW9uUmVzcG9uc2UsIFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2VSZWFjdGlvblR5cGUsIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBNZXNzYWdlUmVhY3Rpb25zU2VydmljZSB9IGZyb20gJy4uL21lc3NhZ2UtcmVhY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VSZWFjdGlvbnNgIGNvbXBvbmVudCBkaXNwbGF5cyB0aGUgcmVhY3Rpb25zIG9mIGEgbWVzc2FnZS4gWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgW21lc3NhZ2UgcmVhY3Rpb25zXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9zZW5kX3JlYWN0aW9uLz9sYW5ndWFnZT1qYXZhc2NyaXB0KSBpbiB0aGUgcGxhdGZvcm0gZG9jdW1lbnRhdGlvbi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtcmVhY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZVJlYWN0aW9uc0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgbWVzc2FnZSB0aGUgcmVhY3Rpb25zIGJlbG9uZyB0b1xuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJlYWN0aW9ucyBncm91cGVkIGJ5IFtyZWFjdGlvbiB0eXBlc10oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy9tZXNzYWdlLXJlYWN0aW9ucy5jb21wb25lbnQudHMpXG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlUmVhY3Rpb25Db3VudHM6IHsgW2tleSBpbiBNZXNzYWdlUmVhY3Rpb25UeXBlXT86IG51bWJlciB9ID1cbiAgICB7fTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgcmVhY3Rpb25zIG9mIGEgW21lc3NhZ2VdKC4uL3R5cGVzL3N0cmVhbS1tZXNzYWdlLm1keCksIHVzZWQgdG8gZGlzcGxheSB0aGUgdXNlcnMgb2YgYSByZWFjdGlvbiB0eXBlLlxuICAgKi9cbiAgQElucHV0KCkgbGF0ZXN0UmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W10gPSBbXTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgdGhlIHVzZXIncyBvd24gcmVhY3Rpb25zIG9mIGEgW21lc3NhZ2VdKC4uL3R5cGVzL3N0cmVhbS1tZXNzYWdlLm1keCksIHVzZWQgdG8gZGlzcGxheSB0aGUgdXNlcnMgb2YgYSByZWFjdGlvbiB0eXBlLlxuICAgKi9cbiAgQElucHV0KCkgb3duUmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W10gPSBbXTtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0b3JDb250YWluZXInKSBwcml2YXRlIHNlbGVjdG9yQ29udGFpbmVyOlxuICAgIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgc2VsZWN0ZWRSZWFjdGlvblR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcbiAgcmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlW10gPSBbXTtcbiAgc2hvdWxkSGFuZGxlUmVhY3Rpb25DbGljayA9IHRydWU7XG4gIGV4aXN0aW5nUmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICByZWFjdGlvbnNDb3VudDogbnVtYmVyID0gMDtcbiAgcmVhY3Rpb25PcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlUmVhY3Rpb25zU2VydmljZTogTWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5tZXNzYWdlUmVhY3Rpb25zU2VydmljZS5yZWFjdGlvbnMkLnN1YnNjcmliZSgocmVhY3Rpb25zKSA9PiB7XG4gICAgICAgIHRoaXMucmVhY3Rpb25PcHRpb25zID0gT2JqZWN0LmtleXMocmVhY3Rpb25zKTtcbiAgICAgICAgdGhpcy5zZXRFeGlzdGluZ1JlYWN0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLm1lc3NhZ2VSZWFjdGlvbkNvdW50cykge1xuICAgICAgdGhpcy5zZXRFeGlzdGluZ1JlYWN0aW9ucygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5tZXNzYWdlUmVhY3Rpb25Db3VudHMgJiYgdGhpcy5tZXNzYWdlUmVhY3Rpb25Db3VudHMpIHtcbiAgICAgIGNvbnN0IHJlYWN0aW9uc0NvdW50ID0gT2JqZWN0LmtleXModGhpcy5tZXNzYWdlUmVhY3Rpb25Db3VudHMpLnJlZHVjZShcbiAgICAgICAgKGFjYywga2V5KSA9PiBhY2MgKyAodGhpcy5tZXNzYWdlUmVhY3Rpb25Db3VudHNba2V5XSB8fCAwKSxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHRoaXMuc2hvdWxkSGFuZGxlUmVhY3Rpb25DbGljayA9XG4gICAgICAgIHJlYWN0aW9uc0NvdW50IDw9IENoYW5uZWxTZXJ2aWNlLk1BWF9NRVNTQUdFX1JFQUNUSU9OU19UT19GRVRDSCB8fFxuICAgICAgICAhIXRoaXMubWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UuY3VzdG9tUmVhY3Rpb25DbGlja0hhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaWV3SW5pdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgZ2V0RW1vamlCeVJlYWN0aW9uKHJlYWN0aW9uVHlwZTogTWVzc2FnZVJlYWN0aW9uVHlwZSkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLnJlYWN0aW9uc1tyZWFjdGlvblR5cGVdO1xuICB9XG5cbiAgcmVhY3Rpb25TZWxlY3RlZChyZWFjdGlvblR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zaG91bGRIYW5kbGVSZWFjdGlvbkNsaWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5tZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UuY3VzdG9tUmVhY3Rpb25DbGlja0hhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UuY3VzdG9tUmVhY3Rpb25DbGlja0hhbmRsZXIoe1xuICAgICAgICBtZXNzYWdlSWQ6IHRoaXMubWVzc2FnZUlkLFxuICAgICAgICByZWFjdGlvblR5cGU6IHJlYWN0aW9uVHlwZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUmVhY3Rpb25UeXBlID0gcmVhY3Rpb25UeXBlO1xuICAgICAgdm9pZCB0aGlzLmZldGNoQWxsUmVhY3Rpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlcnNCeVJlYWN0aW9uKHJlYWN0aW9uVHlwZTogTWVzc2FnZVJlYWN0aW9uVHlwZSkge1xuICAgIHJldHVybiB0aGlzLmxhdGVzdFJlYWN0aW9uc1xuICAgICAgLmZpbHRlcigocikgPT4gci50eXBlID09PSByZWFjdGlvblR5cGUpXG4gICAgICAubWFwKChyKSA9PiByLnVzZXI/Lm5hbWUgfHwgci51c2VyPy5pZClcbiAgICAgIC5maWx0ZXIoKGkpID0+ICEhaSlcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgZ2V0QWxsVXNlcnNCeVJlYWN0aW9uKFxuICAgIHJlYWN0aW9uVHlwZT86IE1lc3NhZ2VSZWFjdGlvblR5cGVcbiAgKTogVXNlclJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W10ge1xuICAgIGlmICghcmVhY3Rpb25UeXBlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcnMgPSB0aGlzLnJlYWN0aW9uc1xuICAgICAgLmZpbHRlcigocikgPT4gci50eXBlID09PSByZWFjdGlvblR5cGUpXG4gICAgICAubWFwKChyKSA9PiByLnVzZXIpXG4gICAgICAuZmlsdGVyKChpKSA9PiAhIWkpIGFzIFVzZXJSZXNwb25zZVtdO1xuXG4gICAgdXNlcnMuc29ydCgodTEsIHUyKSA9PiB7XG4gICAgICBjb25zdCBuYW1lMSA9IHUxLm5hbWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBuYW1lMiA9IHUyLm5hbWU/LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmICghbmFtZTEpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIGlmICghbmFtZTIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZTEgPT09IG5hbWUyKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZTEgPCBuYW1lMikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gIHRyYWNrQnlNZXNzYWdlUmVhY3Rpb24oXzogbnVtYmVyLCBpdGVtOiBNZXNzYWdlUmVhY3Rpb25UeXBlKSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICB0cmFja0J5VXNlcklkKF86IG51bWJlciwgaXRlbTogVXNlclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICBpc093blJlYWN0aW9uKHJlYWN0aW9uVHlwZTogTWVzc2FnZVJlYWN0aW9uVHlwZSkge1xuICAgIHJldHVybiAhIXRoaXMub3duUmVhY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gcmVhY3Rpb25UeXBlKTtcbiAgfVxuXG4gIGlzT3BlbkNoYW5nZSA9IChpc09wZW46IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLnNlbGVjdGVkUmVhY3Rpb25UeXBlID0gaXNPcGVuID8gdGhpcy5zZWxlY3RlZFJlYWN0aW9uVHlwZSA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBwcml2YXRlIGFzeW5jIGZldGNoQWxsUmVhY3Rpb25zKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnJlYWN0aW9ucyA9IGF3YWl0IHRoaXMuY2hhbm5lbFNlcnZpY2UuZ2V0TWVzc2FnZVJlYWN0aW9ucyhcbiAgICAgICAgdGhpcy5tZXNzYWdlSWRcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWFjdGlvblR5cGUgPSB1bmRlZmluZWQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEV4aXN0aW5nUmVhY3Rpb25zKCkge1xuICAgIHRoaXMuZXhpc3RpbmdSZWFjdGlvbnMgPSBPYmplY3Qua2V5cyh0aGlzLm1lc3NhZ2VSZWFjdGlvbkNvdW50cylcbiAgICAgIC5maWx0ZXIoKGspID0+IHRoaXMucmVhY3Rpb25PcHRpb25zLmluZGV4T2YoaykgIT09IC0xKVxuICAgICAgLmZpbHRlcigoaykgPT4gdGhpcy5tZXNzYWdlUmVhY3Rpb25Db3VudHNba10hID4gMCk7XG4gICAgdGhpcy5yZWFjdGlvbnNDb3VudCA9IHRoaXMuZXhpc3RpbmdSZWFjdGlvbnMucmVkdWNlKFxuICAgICAgKHRvdGFsLCByZWFjdGlvbikgPT4gdG90YWwgKyB0aGlzLm1lc3NhZ2VSZWFjdGlvbkNvdW50c1tyZWFjdGlvbl0hLFxuICAgICAgMFxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCJleGlzdGluZ1JlYWN0aW9ucy5sZW5ndGggPiAwXCJcbiAgZGF0YS10ZXN0aWQ9XCJyZWFjdGlvbi1saXN0XCJcbiAgY2xhc3M9XCJzdHItY2hhdF9fcmVhY3Rpb24tbGlzdCBzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnMtY29udGFpbmVyXCJcbiAgW2NsYXNzLnN0ci1jaGF0X19yZWFjdGlvbi1saXN0LS1yZXZlcnNlXT1cInRydWVcIlxuPlxuICA8dWwgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnNcIj5cbiAgICA8bGlcbiAgICAgICpuZ0Zvcj1cIlxuICAgICAgICBsZXQgcmVhY3Rpb25UeXBlIG9mIGV4aXN0aW5nUmVhY3Rpb25zO1xuICAgICAgICB0cmFja0J5OiB0cmFja0J5TWVzc2FnZVJlYWN0aW9uXG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvblwiXG4gICAgICBkYXRhLXRlc3RjbGFzcz1cImVtb2ppXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsgY3Vyc29yOiBzaG91bGRIYW5kbGVSZWFjdGlvbkNsaWNrID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnIH1cIlxuICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLW93bl09XCJpc093blJlYWN0aW9uKHJlYWN0aW9uVHlwZSlcIlxuICAgICAgKGNsaWNrKT1cInJlYWN0aW9uU2VsZWN0ZWQocmVhY3Rpb25UeXBlKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwicmVhY3Rpb25TZWxlY3RlZChyZWFjdGlvblR5cGUpXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cImVtb2ppIHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLWVtb2ppXCI+XG4gICAgICAgIHt7IGdldEVtb2ppQnlSZWFjdGlvbihyZWFjdGlvblR5cGUpIH19Jm5ic3A7XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInJlYWN0aW9uLWxpc3QtcmVhY3Rpb24tY291bnRcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLWNvdW50XCJcbiAgICAgID5cbiAgICAgICAge3sgbWVzc2FnZVJlYWN0aW9uQ291bnRzW3JlYWN0aW9uVHlwZV0gfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2xpPlxuICAgIDxsaT5cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtdGVzdGlkPVwicmVhY3Rpb25zLWNvdW50XCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fcmVhY3Rpb24tbGlzdC0tY291bnRlclwiXG4gICAgICAgID57eyByZWFjdGlvbnNDb3VudCB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUmVhY3Rpb25UeXBlXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubW9kYWxUZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdE1vZGFsO1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBpc09wZW46ICEhc2VsZWN0ZWRSZWFjdGlvblR5cGUsXG4gICAgICAgIG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuICAgICAgICByZWFjdGlvblR5cGU6IHNlbGVjdGVkUmVhY3Rpb25UeXBlLFxuICAgICAgICBpc09wZW5DaGFuZ2VIYW5kbGVyOiBpc09wZW5DaGFuZ2UsXG4gICAgICAgIGNvbnRlbnQ6IG1vZGFsQ29udGVudFxuICAgICAgfVxuICAgIFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGVcbiAgI2RlZmF1bHRNb2RhbFxuICBsZXQtaXNPcGVuPVwiaXNPcGVuXCJcbiAgbGV0LW1lc3NhZ2VJZD1cIm1lc3NhZ2VJZFwiXG4gIGxldC1yZWFjdGlvblR5cGU9XCJyZWFjdGlvblR5cGVcIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICA8c3RyZWFtLW1vZGFsXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnMtZGV0YWlscy1tb2RhbFwiXG4gICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlSGFuZGxlcigkZXZlbnQpXCJcbiAgPlxuICA8L3N0cmVhbS1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWxDb250ZW50PlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLWRldGFpbHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLWRldGFpbHMtcmVhY3Rpb24tdHlwZXNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IHJlYWN0aW9uVHlwZSBvZiBleGlzdGluZ1JlYWN0aW9ucztcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5TWVzc2FnZVJlYWN0aW9uXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLWRldGFpbHMtcmVhY3Rpb24tdHlwZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBjdXJzb3I6IHNob3VsZEhhbmRsZVJlYWN0aW9uQ2xpY2sgPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcbiAgICAgICAgfVwiXG4gICAgICAgIGF0dHIuZGF0YS10ZXN0aWQ9XCJyZWFjdGlvbi1kZXRhaWxzLXNlbGVjdG9yLXt7IHJlYWN0aW9uVHlwZSB9fVwiXG4gICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnMtZGV0YWlscy1yZWFjdGlvbi10eXBlLS1zZWxlY3RlZF09XCJcbiAgICAgICAgICByZWFjdGlvblR5cGUgPT09IHNlbGVjdGVkUmVhY3Rpb25UeXBlXG4gICAgICAgIFwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RlZFJlYWN0aW9uVHlwZSA9IHJlYWN0aW9uVHlwZTsgYWxsVXNlcnMuc2Nyb2xsVG9wID0gMFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJcbiAgICAgICAgICBzZWxlY3RlZFJlYWN0aW9uVHlwZSA9IHJlYWN0aW9uVHlwZTsgYWxsVXNlcnMuc2Nyb2xsVG9wID0gMFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVtb2ppIHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLWVtb2ppXCI+XG4gICAgICAgICAge3sgZ2V0RW1vamlCeVJlYWN0aW9uKHJlYWN0aW9uVHlwZSkgfX0mbmJzcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLWNvdW50XCI+XG4gICAgICAgICAge3sgbWVzc2FnZVJlYWN0aW9uQ291bnRzW3JlYWN0aW9uVHlwZV0gfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgZW1vamlcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb24tZW1vamkgc3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb24tZW1vamktYmlnXG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7IGdldEVtb2ppQnlSZWFjdGlvbihzZWxlY3RlZFJlYWN0aW9uVHlwZSEpIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgI2FsbFVzZXJzXG4gICAgICBkYXRhLXRlc3RpZD1cImFsbC1yZWFjdGluZy11c2Vyc1wiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1kZXRhaWxzLXJlYWN0aW5nLXVzZXJzXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yXG4gICAgICAgICpuZ0lmPVwiaXNMb2FkaW5nOyBlbHNlIHJlYWN0aW9uc1wiXG4gICAgICA+PC9zdHJlYW0tbG9hZGluZy1pbmRpY2F0b3I+XG4gICAgICA8bmctdGVtcGxhdGUgI3JlYWN0aW9ucz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHVzZXIgb2YgZ2V0QWxsVXNlcnNCeVJlYWN0aW9uKHNlbGVjdGVkUmVhY3Rpb25UeXBlKTtcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlVc2VySWRcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLWRldGFpbHMtcmVhY3RpbmctdXNlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdmF0YXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyIHN0ci1jaGF0X19hdmF0YXItLWNpcmNsZVwiXG4gICAgICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgICAgICBsb2NhdGlvbj1cInJlYWN0aW9uXCJcbiAgICAgICAgICAgIFtpbWFnZVVybF09XCJ1c2VyLmltYWdlXCJcbiAgICAgICAgICAgIFtuYW1lXT1cInVzZXIubmFtZVwiXG4gICAgICAgICAgICBbdXNlcl09XCJ1c2VyXCJcbiAgICAgICAgICA+PC9zdHJlYW0tYXZhdGFyLXBsYWNlaG9sZGVyPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInJlYWN0aW9uLXVzZXItdXNlcm5hbWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fdXNlci1pdGVtLS1uYW1lXCJcbiAgICAgICAgICAgID57eyB1c2VyLm5hbWUgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtcmVhY3Rpb25zL21lc3NhZ2UtcmVhY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy9tZXNzYWdlLXJlYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULEtBQUssRUFLTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFXdkI7O0dBRUc7QUFLSCxNQUFNLE9BQU8seUJBQXlCO0lBMkNwQyxZQUNVLEtBQXdCLEVBQ3hCLHVCQUFnRCxFQUNqRCxzQkFBOEM7UUFGN0MsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNqRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBdkN2RDs7V0FFRztRQUNNLDBCQUFxQixHQUVkLFNBQVMsQ0FBQztRQUMxQjs7O1dBR0c7UUFDTSwwQkFBcUIsR0FDNUIsRUFBRSxDQUFDO1FBQ0w7OztXQUdHO1FBQ00sb0JBQWUsR0FBa0QsRUFBRSxDQUFDO1FBQzdFOztXQUVHO1FBQ00saUJBQVksR0FBa0QsRUFBRSxDQUFDO1FBSzFFLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsY0FBUyxHQUF1QixFQUFFLENBQUM7UUFDbkMsOEJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUNqQyxvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUMvQixxQkFBZ0IsR0FFWixFQUFFLENBQUM7UUFDQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUEwRzdCLGlCQUFZLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUM7SUF6R0MsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzVCO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMscUJBQXFCLElBQUksT0FBTyxDQUFDLHFCQUFxQixFQUFFO1lBQ2xFLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUM3RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNwRCxJQUFJLENBQUMscUJBQXNCLENBQUMsQ0FBQyxDQUFDLEdBQUc7d0JBQy9CLEtBQUssRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO3dCQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDaEQsaUJBQWlCLEVBQUUsU0FBUzt3QkFDNUIsZ0JBQWdCLEVBQUUsU0FBUztxQkFDNUIsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxZQUFpQztRQUNsRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQywwQkFBMEIsRUFBRTtZQUMzRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsMEJBQTBCLENBQUM7Z0JBQ3RELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsWUFBWSxFQUFFLFlBQVk7YUFDM0IsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFZLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRTtnQkFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHO29CQUNqRCxLQUFLLEVBQUUsRUFBRTtpQkFDVixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7YUFDdEM7U0FDRjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ2pELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQ2hFLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUN0RCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssR0FBRztnQkFDdkQsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsS0FBSztnQkFDekQsR0FBSSxRQUFRLENBQUMsU0FBUztxQkFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO3FCQUNsQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQW9CO2FBQ3pDLENBQUM7WUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDdkU7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7U0FDdkM7Z0JBQVM7WUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUN4QjtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLENBQVMsRUFBRSxJQUF5QjtRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxhQUFhLENBQUMsWUFBaUM7UUFDN0MsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQVNPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDO2FBQ25FLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUN2RCxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDZixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsaUJBQWlCO2dCQUM3RCxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFzQixDQUFDLEVBQUUsQ0FBQyxDQUFDLGlCQUFrQixDQUFDO2dCQUM5RCxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNmLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxpQkFBaUI7Z0JBQzdELENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXNCLENBQUMsRUFBRSxDQUFDLENBQUMsaUJBQWtCLENBQUM7Z0JBQzlELENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBRWYsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7c0hBeEtVLHlCQUF5QjswR0FBekIseUJBQXlCLG1aQzdCdEMscXhIQW9IQTsyRkR2RmEseUJBQXlCO2tCQUpyQyxTQUFTOytCQUNFLDBCQUEwQjttTEFTM0IsU0FBUztzQkFBakIsS0FBSztnQkFJRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBT0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQU1HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFDa0MsaUJBQWlCO3NCQUF4RCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgUmVhY3Rpb25Hcm91cFJlc3BvbnNlLFxuICBSZWFjdGlvblJlc3BvbnNlLFxuICBVc2VyUmVzcG9uc2UsXG59IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IE1lc3NhZ2VSZWFjdGlvblR5cGUsIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBNZXNzYWdlUmVhY3Rpb25zU2VydmljZSB9IGZyb20gJy4uL21lc3NhZ2UtcmVhY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VSZWFjdGlvbnNgIGNvbXBvbmVudCBkaXNwbGF5cyB0aGUgcmVhY3Rpb25zIG9mIGEgbWVzc2FnZS4gWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgW21lc3NhZ2UgcmVhY3Rpb25zXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9zZW5kX3JlYWN0aW9uLz9sYW5ndWFnZT1qYXZhc2NyaXB0KSBpbiB0aGUgcGxhdGZvcm0gZG9jdW1lbnRhdGlvbi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtcmVhY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZVJlYWN0aW9uc0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgbWVzc2FnZSB0aGUgcmVhY3Rpb25zIGJlbG9uZyB0b1xuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJlYWN0aW9ucyBncm91cGVkIGJ5IFtyZWFjdGlvbiB0eXBlc10oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy9tZXNzYWdlLXJlYWN0aW9ucy5jb21wb25lbnQudHMpXG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlUmVhY3Rpb25Hcm91cHM6XG4gICAgfCB7IFtrZXk6IHN0cmluZ106IFJlYWN0aW9uR3JvdXBSZXNwb25zZSB9XG4gICAgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJlYWN0aW9ucyBncm91cGVkIGJ5IFtyZWFjdGlvbiB0eXBlc10oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy9tZXNzYWdlLXJlYWN0aW9ucy5jb21wb25lbnQudHMpXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgbWVzc2FnZVJlYWN0aW9uR3JvdXBzYFxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZVJlYWN0aW9uQ291bnRzOiB7IFtrZXkgaW4gTWVzc2FnZVJlYWN0aW9uVHlwZV0/OiBudW1iZXIgfSA9XG4gICAge307XG4gIC8qKlxuICAgKiBMaXN0IG9mIHJlYWN0aW9ucyBvZiBhIFttZXNzYWdlXSguLi90eXBlcy9zdHJlYW0tbWVzc2FnZS5tZHgpLCB1c2VkIHRvIGRpc3BsYXkgdGhlIHVzZXJzIG9mIGEgcmVhY3Rpb24gdHlwZS5cbiAgICogQGRlcHJlY2F0ZWQgeW91IGNhbiBmZXRjaCB0aGUgcmVhY3Rpb25zIHVzaW5nIFtgbWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UucXVlcnlSZWFjdGlvbnMoKWBdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9zZGsvYW5ndWxhci9zZXJ2aWNlcy9NZXNzYWdlUmVhY3Rpb25zU2VydmljZS8jcXVlcnlyZWFjdGlvbnMpXG4gICAqL1xuICBASW5wdXQoKSBsYXRlc3RSZWFjdGlvbnM6IFJlYWN0aW9uUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICAvKipcbiAgICogTGlzdCBvZiB0aGUgdXNlcidzIG93biByZWFjdGlvbnMgb2YgYSBbbWVzc2FnZV0oLi4vdHlwZXMvc3RyZWFtLW1lc3NhZ2UubWR4KSwgdXNlZCB0byBkaXNwbGF5IHRoZSB1c2VycyBvZiBhIHJlYWN0aW9uIHR5cGUuXG4gICAqL1xuICBASW5wdXQoKSBvd25SZWFjdGlvbnM6IFJlYWN0aW9uUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBAVmlld0NoaWxkKCdzZWxlY3RvckNvbnRhaW5lcicpIHByaXZhdGUgc2VsZWN0b3JDb250YWluZXI6XG4gICAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICAgIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RlZFJlYWN0aW9uVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpc0xvYWRpbmcgPSB0cnVlO1xuICByZWFjdGlvbnM6IFJlYWN0aW9uUmVzcG9uc2VbXSA9IFtdO1xuICBzaG91bGRIYW5kbGVSZWFjdGlvbkNsaWNrID0gdHJ1ZTtcbiAgZXhpc3RpbmdSZWFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIHJlYWN0aW9uT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgdXNlcnNCeVJlYWN0aW9uczoge1xuICAgIFtrZXk6IHN0cmluZ106IHsgdXNlcnM6IFVzZXJSZXNwb25zZVtdOyBuZXh0Pzogc3RyaW5nIH07XG4gIH0gPSB7fTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgbWVzc2FnZVJlYWN0aW9uc1NlcnZpY2U6IE1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UucmVhY3Rpb25zJC5zdWJzY3JpYmUoKHJlYWN0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLnJlYWN0aW9uT3B0aW9ucyA9IE9iamVjdC5rZXlzKHJlYWN0aW9ucyk7XG4gICAgICAgIHRoaXMuc2V0RXhpc3RpbmdSZWFjdGlvbnMoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5tZXNzYWdlUmVhY3Rpb25Db3VudHMgfHwgY2hhbmdlcy5tZXNzYWdlUmVhY3Rpb25Hcm91cHMpIHtcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VSZWFjdGlvbkNvdW50cyAmJiAhdGhpcy5tZXNzYWdlUmVhY3Rpb25Hcm91cHMpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlUmVhY3Rpb25Hcm91cHMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5tZXNzYWdlUmVhY3Rpb25Db3VudHMpLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VSZWFjdGlvbkdyb3VwcyFba10gPSB7XG4gICAgICAgICAgICBjb3VudDogdGhpcy5tZXNzYWdlUmVhY3Rpb25Db3VudHM/LltrXSA/PyAwLFxuICAgICAgICAgICAgc3VtX3Njb3JlczogdGhpcy5tZXNzYWdlUmVhY3Rpb25Db3VudHM/LltrXSA/PyAwLFxuICAgICAgICAgICAgZmlyc3RfcmVhY3Rpb25fYXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGxhc3RfcmVhY3Rpb25fYXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RXhpc3RpbmdSZWFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXRFbW9qaUJ5UmVhY3Rpb24ocmVhY3Rpb25UeXBlOiBNZXNzYWdlUmVhY3Rpb25UeXBlKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UucmVhY3Rpb25zW3JlYWN0aW9uVHlwZV07XG4gIH1cblxuICBhc3luYyByZWFjdGlvblNlbGVjdGVkKHJlYWN0aW9uVHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXNzYWdlUmVhY3Rpb25zU2VydmljZS5jdXN0b21SZWFjdGlvbkNsaWNrSGFuZGxlcikge1xuICAgICAgdGhpcy5tZXNzYWdlUmVhY3Rpb25zU2VydmljZS5jdXN0b21SZWFjdGlvbkNsaWNrSGFuZGxlcih7XG4gICAgICAgIG1lc3NhZ2VJZDogdGhpcy5tZXNzYWdlSWQsXG4gICAgICAgIHJlYWN0aW9uVHlwZTogcmVhY3Rpb25UeXBlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWFjdGlvblR5cGUgPSByZWFjdGlvblR5cGU7XG4gICAgICBpZiAoIXRoaXMudXNlcnNCeVJlYWN0aW9uc1t0aGlzLnNlbGVjdGVkUmVhY3Rpb25UeXBlXSkge1xuICAgICAgICB0aGlzLnVzZXJzQnlSZWFjdGlvbnNbdGhpcy5zZWxlY3RlZFJlYWN0aW9uVHlwZV0gPSB7XG4gICAgICAgICAgdXNlcnM6IFtdLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWROZXh0UGFnZU9mUmVhY3Rpb25zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZE5leHRQYWdlT2ZSZWFjdGlvbnMoKSB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2VJZCB8fCAhdGhpcy5zZWxlY3RlZFJlYWN0aW9uVHlwZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLm1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLnF1ZXJ5UmVhY3Rpb25zKFxuICAgICAgICB0aGlzLm1lc3NhZ2VJZCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlYWN0aW9uVHlwZSxcbiAgICAgICAgdGhpcy51c2Vyc0J5UmVhY3Rpb25zW3RoaXMuc2VsZWN0ZWRSZWFjdGlvblR5cGVdLm5leHRcbiAgICAgICk7XG4gICAgICB0aGlzLnVzZXJzQnlSZWFjdGlvbnNbdGhpcy5zZWxlY3RlZFJlYWN0aW9uVHlwZV0udXNlcnMgPSBbXG4gICAgICAgIC4uLnRoaXMudXNlcnNCeVJlYWN0aW9uc1t0aGlzLnNlbGVjdGVkUmVhY3Rpb25UeXBlXS51c2VycyxcbiAgICAgICAgLi4uKHJlc3BvbnNlLnJlYWN0aW9uc1xuICAgICAgICAgIC5tYXAoKHIpID0+IHIudXNlcilcbiAgICAgICAgICAuZmlsdGVyKCh1KSA9PiAhIXUpIGFzIFVzZXJSZXNwb25zZVtdKSxcbiAgICAgIF07XG4gICAgICB0aGlzLnVzZXJzQnlSZWFjdGlvbnNbdGhpcy5zZWxlY3RlZFJlYWN0aW9uVHlwZV0ubmV4dCA9IHJlc3BvbnNlLm5leHQ7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdGhpcy5zZWxlY3RlZFJlYWN0aW9uVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5TWVzc2FnZVJlYWN0aW9uKF86IG51bWJlciwgaXRlbTogTWVzc2FnZVJlYWN0aW9uVHlwZSkge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgaXNPd25SZWFjdGlvbihyZWFjdGlvblR5cGU6IE1lc3NhZ2VSZWFjdGlvblR5cGUpIHtcbiAgICByZXR1cm4gISF0aGlzLm93blJlYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IHJlYWN0aW9uVHlwZSk7XG4gIH1cblxuICBpc09wZW5DaGFuZ2UgPSAoaXNPcGVuOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zZWxlY3RlZFJlYWN0aW9uVHlwZSA9IGlzT3BlbiA/IHRoaXMuc2VsZWN0ZWRSZWFjdGlvblR5cGUgOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHRoaXMudXNlcnNCeVJlYWN0aW9ucyA9IHt9O1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHNldEV4aXN0aW5nUmVhY3Rpb25zKCkge1xuICAgIHRoaXMuZXhpc3RpbmdSZWFjdGlvbnMgPSBPYmplY3Qua2V5cyh0aGlzLm1lc3NhZ2VSZWFjdGlvbkdyb3VwcyA/PyB7fSlcbiAgICAgIC5maWx0ZXIoKGspID0+IHRoaXMucmVhY3Rpb25PcHRpb25zLmluZGV4T2YoaykgIT09IC0xKVxuICAgICAgLmZpbHRlcigoaykgPT4gdGhpcy5tZXNzYWdlUmVhY3Rpb25Hcm91cHMhW2tdLmNvdW50ID4gMClcbiAgICAgIC5zb3J0KChyMSwgcjIpID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZTEgPSB0aGlzLm1lc3NhZ2VSZWFjdGlvbkdyb3VwcyFbcjFdLmZpcnN0X3JlYWN0aW9uX2F0XG4gICAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLm1lc3NhZ2VSZWFjdGlvbkdyb3VwcyFbcjFdLmZpcnN0X3JlYWN0aW9uX2F0ISlcbiAgICAgICAgICA6IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGRhdGUyID0gdGhpcy5tZXNzYWdlUmVhY3Rpb25Hcm91cHMhW3IyXS5maXJzdF9yZWFjdGlvbl9hdFxuICAgICAgICAgID8gbmV3IERhdGUodGhpcy5tZXNzYWdlUmVhY3Rpb25Hcm91cHMhW3IyXS5maXJzdF9yZWFjdGlvbl9hdCEpXG4gICAgICAgICAgOiBuZXcgRGF0ZSgpO1xuXG4gICAgICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cImV4aXN0aW5nUmVhY3Rpb25zLmxlbmd0aCA+IDBcIlxuICBkYXRhLXRlc3RpZD1cInJlYWN0aW9uLWxpc3RcIlxuICBjbGFzcz1cInN0ci1jaGF0X19yZWFjdGlvbi1saXN0IHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1jb250YWluZXJcIlxuICBbY2xhc3Muc3RyLWNoYXRfX3JlYWN0aW9uLWxpc3QtLXJldmVyc2VdPVwidHJ1ZVwiXG4+XG4gIDx1bCBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uc1wiPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCByZWFjdGlvblR5cGUgb2YgZXhpc3RpbmdSZWFjdGlvbnM7XG4gICAgICAgIHRyYWNrQnk6IHRyYWNrQnlNZXNzYWdlUmVhY3Rpb25cbiAgICAgIFwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uXCJcbiAgICAgIGRhdGEtdGVzdGNsYXNzPVwiZW1vamlcIlxuICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLW93bl09XCJpc093blJlYWN0aW9uKHJlYWN0aW9uVHlwZSlcIlxuICAgICAgKGNsaWNrKT1cInJlYWN0aW9uU2VsZWN0ZWQocmVhY3Rpb25UeXBlKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwicmVhY3Rpb25TZWxlY3RlZChyZWFjdGlvblR5cGUpXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cImVtb2ppIHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLWVtb2ppXCI+XG4gICAgICAgIHt7IGdldEVtb2ppQnlSZWFjdGlvbihyZWFjdGlvblR5cGUpIH19Jm5ic3A7XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInJlYWN0aW9uLWxpc3QtcmVhY3Rpb24tY291bnRcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLWNvdW50XCJcbiAgICAgID5cbiAgICAgICAge3sgbWVzc2FnZVJlYWN0aW9uR3JvdXBzPy5bcmVhY3Rpb25UeXBlXT8uY291bnQgPz8gMCB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUmVhY3Rpb25UeXBlXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubW9kYWxUZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdE1vZGFsO1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBpc09wZW46ICEhc2VsZWN0ZWRSZWFjdGlvblR5cGUsXG4gICAgICAgIG1lc3NhZ2VJZDogbWVzc2FnZUlkLFxuICAgICAgICByZWFjdGlvblR5cGU6IHNlbGVjdGVkUmVhY3Rpb25UeXBlLFxuICAgICAgICBpc09wZW5DaGFuZ2VIYW5kbGVyOiBpc09wZW5DaGFuZ2UsXG4gICAgICAgIGNvbnRlbnQ6IG1vZGFsQ29udGVudFxuICAgICAgfVxuICAgIFwiXG4gID48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGVcbiAgI2RlZmF1bHRNb2RhbFxuICBsZXQtaXNPcGVuPVwiaXNPcGVuXCJcbiAgbGV0LW1lc3NhZ2VJZD1cIm1lc3NhZ2VJZFwiXG4gIGxldC1yZWFjdGlvblR5cGU9XCJyZWFjdGlvblR5cGVcIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICA8c3RyZWFtLW1vZGFsXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnMtZGV0YWlscy1tb2RhbFwiXG4gICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlSGFuZGxlcigkZXZlbnQpXCJcbiAgPlxuICA8L3N0cmVhbS1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWxDb250ZW50PlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLWRldGFpbHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLWRldGFpbHMtcmVhY3Rpb24tdHlwZXNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IHJlYWN0aW9uVHlwZSBvZiBleGlzdGluZ1JlYWN0aW9ucztcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5TWVzc2FnZVJlYWN0aW9uXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLWRldGFpbHMtcmVhY3Rpb24tdHlwZVwiXG4gICAgICAgIGF0dHIuZGF0YS10ZXN0aWQ9XCJyZWFjdGlvbi1kZXRhaWxzLXNlbGVjdG9yLXt7IHJlYWN0aW9uVHlwZSB9fVwiXG4gICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnMtZGV0YWlscy1yZWFjdGlvbi10eXBlLS1zZWxlY3RlZF09XCJcbiAgICAgICAgICByZWFjdGlvblR5cGUgPT09IHNlbGVjdGVkUmVhY3Rpb25UeXBlXG4gICAgICAgIFwiXG4gICAgICAgIChjbGljayk9XCJyZWFjdGlvblNlbGVjdGVkKHJlYWN0aW9uVHlwZSlcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwicmVhY3Rpb25TZWxlY3RlZChyZWFjdGlvblR5cGUpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlbW9qaSBzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbi1lbW9qaVwiPlxuICAgICAgICAgIHt7IGdldEVtb2ppQnlSZWFjdGlvbihyZWFjdGlvblR5cGUpIH19Jm5ic3A7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbi1jb3VudFwiPlxuICAgICAgICAgIHt7IG1lc3NhZ2VSZWFjdGlvbkdyb3Vwcz8uW3JlYWN0aW9uVHlwZV0/LmNvdW50ID8/IDAgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJlbW9qaSBzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbi1lbW9qaSBzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbi1lbW9qaS1iaWdcIlxuICAgID5cbiAgICAgIHt7IGdldEVtb2ppQnlSZWFjdGlvbihzZWxlY3RlZFJlYWN0aW9uVHlwZSEpIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJhbGwtcmVhY3RpbmctdXNlcnNcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnMtZGV0YWlscy1yZWFjdGluZy11c2Vyc1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgcmVhY3Rpb25UeXBlIG9mIGV4aXN0aW5nUmVhY3Rpb25zO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlNZXNzYWdlUmVhY3Rpb25cbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS11c2VyLWxpc3RcbiAgICAgICAgICBhdHRyLmRhdGEtdGVzdGlkPVwie3sgcmVhY3Rpb25UeXBlIH19LXVzZXItbGlzdFwiXG4gICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiXG4gICAgICAgICAgICBzZWxlY3RlZFJlYWN0aW9uVHlwZSA9PT0gcmVhY3Rpb25UeXBlID8gJ2Jsb2NrJyA6ICdub25lJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW3VzZXJzXT1cInVzZXJzQnlSZWFjdGlvbnNbcmVhY3Rpb25UeXBlXT8udXNlcnMgfHwgW11cIlxuICAgICAgICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgICBbaGFzTW9yZV09XCIhIXVzZXJzQnlSZWFjdGlvbnNbcmVhY3Rpb25UeXBlXT8ubmV4dCB8fCBmYWxzZVwiXG4gICAgICAgICAgKGxvYWRNb3JlKT1cImxvYWROZXh0UGFnZU9mUmVhY3Rpb25zKClcIlxuICAgICAgICA+PC9zdHJlYW0tdXNlci1saXN0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -49,13 +49,13 @@ export class MessageReactionsSelectorComponent {
49
49
  }
50
50
  }
51
51
  MessageReactionsSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsSelectorComponent, deps: [{ token: i1.ChannelService }, { token: i2.MessageReactionsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
52
- MessageReactionsSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MessageReactionsSelectorComponent, selector: "stream-message-reactions-selector", inputs: { ownReactions: "ownReactions", messageId: "messageId" }, ngImport: i0, template: "<div\n #selectorContainer\n data-testid=\"reaction-selector\"\n class=\"\n str-chat__reaction-selector\n str-chat-angular-v5__reaction-selector\n str-chat__message-reaction-selector\n \"\n>\n <ul\n class=\"str-chat__message-reactions-list str-chat__message-reactions-options\"\n >\n <li\n *ngFor=\"\n let reactionType of reactionOptions;\n trackBy: trackByMessageReaction\n \"\n class=\"\n str-chat__message-reactions-option\n str-chat__message-reactions-list-item\n str-chat__emoji\n \"\n data-testclass=\"emoji-option\"\n [attr.data-testid]=\"reactionType\"\n [class.str-chat__message-reactions-option-selected]=\"\n isOwnReaction(reactionType)\n \"\n (click)=\"react(reactionType)\"\n (keyup.enter)=\"react(reactionType)\"\n >\n <span\n class=\"\n emoji\n str-chat__emoji-selector-emoji-angular\n str-chat__message-reaction-emoji\n \"\n >\n {{ getEmojiByReaction(reactionType) }}\n </span>\n </li>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
52
+ MessageReactionsSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MessageReactionsSelectorComponent, selector: "stream-message-reactions-selector", inputs: { ownReactions: "ownReactions", messageId: "messageId" }, ngImport: i0, template: "<div\n #selectorContainer\n data-testid=\"reaction-selector\"\n class=\"str-chat__reaction-selector str-chat-angular-v5__reaction-selector str-chat__message-reaction-selector\"\n>\n <ul\n class=\"str-chat__message-reactions-list str-chat__message-reactions-options\"\n >\n <li\n *ngFor=\"\n let reactionType of reactionOptions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reactions-option str-chat__message-reactions-list-item str-chat__emoji\"\n data-testclass=\"emoji-option\"\n [attr.data-testid]=\"reactionType\"\n [class.str-chat__message-reactions-option-selected]=\"\n isOwnReaction(reactionType)\n \"\n (click)=\"react(reactionType)\"\n (keyup.enter)=\"react(reactionType)\"\n >\n <span\n class=\"emoji str-chat__emoji-selector-emoji-angular str-chat__message-reaction-emoji\"\n >\n {{ getEmojiByReaction(reactionType) }}\n </span>\n </li>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsSelectorComponent, decorators: [{
54
54
  type: Component,
55
- args: [{ selector: 'stream-message-reactions-selector', template: "<div\n #selectorContainer\n data-testid=\"reaction-selector\"\n class=\"\n str-chat__reaction-selector\n str-chat-angular-v5__reaction-selector\n str-chat__message-reaction-selector\n \"\n>\n <ul\n class=\"str-chat__message-reactions-list str-chat__message-reactions-options\"\n >\n <li\n *ngFor=\"\n let reactionType of reactionOptions;\n trackBy: trackByMessageReaction\n \"\n class=\"\n str-chat__message-reactions-option\n str-chat__message-reactions-list-item\n str-chat__emoji\n \"\n data-testclass=\"emoji-option\"\n [attr.data-testid]=\"reactionType\"\n [class.str-chat__message-reactions-option-selected]=\"\n isOwnReaction(reactionType)\n \"\n (click)=\"react(reactionType)\"\n (keyup.enter)=\"react(reactionType)\"\n >\n <span\n class=\"\n emoji\n str-chat__emoji-selector-emoji-angular\n str-chat__message-reaction-emoji\n \"\n >\n {{ getEmojiByReaction(reactionType) }}\n </span>\n </li>\n </ul>\n</div>\n" }]
55
+ args: [{ selector: 'stream-message-reactions-selector', template: "<div\n #selectorContainer\n data-testid=\"reaction-selector\"\n class=\"str-chat__reaction-selector str-chat-angular-v5__reaction-selector str-chat__message-reaction-selector\"\n>\n <ul\n class=\"str-chat__message-reactions-list str-chat__message-reactions-options\"\n >\n <li\n *ngFor=\"\n let reactionType of reactionOptions;\n trackBy: trackByMessageReaction\n \"\n class=\"str-chat__message-reactions-option str-chat__message-reactions-list-item str-chat__emoji\"\n data-testclass=\"emoji-option\"\n [attr.data-testid]=\"reactionType\"\n [class.str-chat__message-reactions-option-selected]=\"\n isOwnReaction(reactionType)\n \"\n (click)=\"react(reactionType)\"\n (keyup.enter)=\"react(reactionType)\"\n >\n <span\n class=\"emoji str-chat__emoji-selector-emoji-angular str-chat__message-reaction-emoji\"\n >\n {{ getEmojiByReaction(reactionType) }}\n </span>\n </li>\n </ul>\n</div>\n" }]
56
56
  }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.MessageReactionsService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { ownReactions: [{
57
57
  type: Input
58
58
  }], messageId: [{
59
59
  type: Input
60
60
  }] } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZWFjdGlvbnMtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yL21lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy1zZWxlY3Rvci9tZXNzYWdlLXJlYWN0aW9ucy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFPdkI7O0dBRUc7QUFNSCxNQUFNLE9BQU8saUNBQWlDO0lBZTVDLFlBQ1UsY0FBOEIsRUFDOUIsdUJBQWdELEVBQ2hELEtBQXdCO1FBRnhCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELFVBQUssR0FBTCxLQUFLLENBQW1CO1FBZmxDOztXQUVHO1FBQ00saUJBQVksR0FBa0QsRUFBRSxDQUFDO1FBSzFFLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQ3ZCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztJQU0xQixDQUFDO0lBQ0osUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzlELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsQ0FBUyxFQUFFLElBQXlCO1FBQ3pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUFpQztRQUM3QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsWUFBaUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQXlCO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztZQUM1QyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFLElBQUksQ0FBQztZQUNqRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7OzhIQXZEVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQywySUN0QjlDLCtrQ0EwQ0E7MkZEcEJhLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxtQ0FBbUM7MktBVXBDLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLCBNZXNzYWdlUmVhY3Rpb25UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgUmVhY3Rpb25SZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IE1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vbWVzc2FnZS1yZWFjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VSZWFjdGlvbnNTZWxlY3RvckNvbXBvbmVudGAgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzZXJzIHRvIHJlYWN0IHRvIGEgbWVzc2FnZSwgdGhlIHJlYWN0aW9uIG9wdGlvbnMgY2FuIGJlIHNldCB1c2luZyB0aGUgW2BNZXNzYWdlUmVhY3Rpb25zU2VydmljZWBdKC4uLy4uL3NlcnZpY2VzL01lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlKS4gWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgW21lc3NhZ2UgcmVhY3Rpb25zXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9zZW5kX3JlYWN0aW9uLz9sYW5ndWFnZT1qYXZhc2NyaXB0KSBpbiB0aGUgcGxhdGZvcm0gZG9jdW1lbnRhdGlvbi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZVJlYWN0aW9uc1NlbGVjdG9yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIExpc3Qgb2YgdGhlIHVzZXIncyBvd24gcmVhY3Rpb25zIG9mIGEgW21lc3NhZ2VdKC4uL3R5cGVzL3N0cmVhbS1tZXNzYWdlLm1keCksIHVzZWQgdG8gZGlzcGxheSB0aGUgdXNlcnMgb2YgYSByZWFjdGlvbiB0eXBlLlxuICAgKi9cbiAgQElucHV0KCkgb3duUmVhY3Rpb25zOiBSZWFjdGlvblJlc3BvbnNlPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W10gPSBbXTtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgbWVzc2FnZSB0aGUgcmVhY3Rpb25zIGJlbG9uZyB0b1xuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWN0aW9uT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVJlYWN0aW9uc1NlcnZpY2U6IE1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLm1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLnJlYWN0aW9ucyQuc3Vic2NyaWJlKChyZWFjdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5yZWFjdGlvbk9wdGlvbnMgPSBPYmplY3Qua2V5cyhyZWFjdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNWaWV3SW5pdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgdHJhY2tCeU1lc3NhZ2VSZWFjdGlvbihfOiBudW1iZXIsIGl0ZW06IE1lc3NhZ2VSZWFjdGlvblR5cGUpIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGlzT3duUmVhY3Rpb24ocmVhY3Rpb25UeXBlOiBNZXNzYWdlUmVhY3Rpb25UeXBlKSB7XG4gICAgcmV0dXJuICEhdGhpcy5vd25SZWFjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSByZWFjdGlvblR5cGUpO1xuICB9XG5cbiAgZ2V0RW1vamlCeVJlYWN0aW9uKHJlYWN0aW9uVHlwZTogTWVzc2FnZVJlYWN0aW9uVHlwZSkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLnJlYWN0aW9uc1tyZWFjdGlvblR5cGVdO1xuICB9XG5cbiAgYXN5bmMgcmVhY3QodHlwZTogTWVzc2FnZVJlYWN0aW9uVHlwZSkge1xuICAgIHRoaXMub3duUmVhY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gdHlwZSlcbiAgICAgID8gYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5yZW1vdmVSZWFjdGlvbih0aGlzLm1lc3NhZ2VJZCEsIHR5cGUpXG4gICAgICA6IGF3YWl0IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWRkUmVhY3Rpb24odGhpcy5tZXNzYWdlSWQhLCB0eXBlKTtcbiAgfVxufVxuIiwiPGRpdlxuICAjc2VsZWN0b3JDb250YWluZXJcbiAgZGF0YS10ZXN0aWQ9XCJyZWFjdGlvbi1zZWxlY3RvclwiXG4gIGNsYXNzPVwiXG4gICAgc3RyLWNoYXRfX3JlYWN0aW9uLXNlbGVjdG9yXG4gICAgc3RyLWNoYXQtYW5ndWxhci12NV9fcmVhY3Rpb24tc2VsZWN0b3JcbiAgICBzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbi1zZWxlY3RvclxuICBcIlxuPlxuICA8dWxcbiAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1saXN0IHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1vcHRpb25zXCJcbiAgPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCByZWFjdGlvblR5cGUgb2YgcmVhY3Rpb25PcHRpb25zO1xuICAgICAgICB0cmFja0J5OiB0cmFja0J5TWVzc2FnZVJlYWN0aW9uXG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLW9wdGlvblxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnMtbGlzdC1pdGVtXG4gICAgICAgIHN0ci1jaGF0X19lbW9qaVxuICAgICAgXCJcbiAgICAgIGRhdGEtdGVzdGNsYXNzPVwiZW1vamktb3B0aW9uXCJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cInJlYWN0aW9uVHlwZVwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLW9wdGlvbi1zZWxlY3RlZF09XCJcbiAgICAgICAgaXNPd25SZWFjdGlvbihyZWFjdGlvblR5cGUpXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cInJlYWN0KHJlYWN0aW9uVHlwZSlcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInJlYWN0KHJlYWN0aW9uVHlwZSlcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgZW1vamlcbiAgICAgICAgICBzdHItY2hhdF9fZW1vamktc2VsZWN0b3ItZW1vamktYW5ndWxhclxuICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9uLWVtb2ppXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIHt7IGdldEVtb2ppQnlSZWFjdGlvbihyZWFjdGlvblR5cGUpIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZWFjdGlvbnMtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yL21lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy1zZWxlY3Rvci9tZXNzYWdlLXJlYWN0aW9ucy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFPdkI7O0dBRUc7QUFNSCxNQUFNLE9BQU8saUNBQWlDO0lBZTVDLFlBQ1UsY0FBOEIsRUFDOUIsdUJBQWdELEVBQ2hELEtBQXdCO1FBRnhCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELFVBQUssR0FBTCxLQUFLLENBQW1CO1FBZmxDOztXQUVHO1FBQ00saUJBQVksR0FBa0QsRUFBRSxDQUFDO1FBSzFFLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQ3ZCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztJQU0xQixDQUFDO0lBQ0osUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzlELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsQ0FBUyxFQUFFLElBQXlCO1FBQ3pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUFpQztRQUM3QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsWUFBaUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQXlCO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztZQUM1QyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFLElBQUksQ0FBQztZQUNqRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7OzhIQXZEVSxpQ0FBaUM7a0hBQWpDLGlDQUFpQywySUN0QjlDLDIrQkE4QkE7MkZEUmEsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLG1DQUFtQzsyS0FVcEMsWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsIE1lc3NhZ2VSZWFjdGlvblR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBSZWFjdGlvblJlc3BvbnNlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9tZXNzYWdlLXJlYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIFRoZSBgTWVzc2FnZVJlYWN0aW9uc1NlbGVjdG9yQ29tcG9uZW50YCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXNlcnMgdG8gcmVhY3QgdG8gYSBtZXNzYWdlLCB0aGUgcmVhY3Rpb24gb3B0aW9ucyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBbYE1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlYF0oLi4vLi4vc2VydmljZXMvTWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UpLiBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBbbWVzc2FnZSByZWFjdGlvbnNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3NlbmRfcmVhY3Rpb24vP2xhbmd1YWdlPWphdmFzY3JpcHQpIGluIHRoZSBwbGF0Zm9ybSBkb2N1bWVudGF0aW9uLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbWVzc2FnZS1yZWFjdGlvbnMtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1yZWFjdGlvbnMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlUmVhY3Rpb25zU2VsZWN0b3JDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogTGlzdCBvZiB0aGUgdXNlcidzIG93biByZWFjdGlvbnMgb2YgYSBbbWVzc2FnZV0oLi4vdHlwZXMvc3RyZWFtLW1lc3NhZ2UubWR4KSwgdXNlZCB0byBkaXNwbGF5IHRoZSB1c2VycyBvZiBhIHJlYWN0aW9uIHR5cGUuXG4gICAqL1xuICBASW5wdXQoKSBvd25SZWFjdGlvbnM6IFJlYWN0aW9uUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBtZXNzYWdlIHRoZSByZWFjdGlvbnMgYmVsb25nIHRvXG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhY3Rpb25PcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlUmVhY3Rpb25zU2VydmljZTogTWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UucmVhY3Rpb25zJC5zdWJzY3JpYmUoKHJlYWN0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLnJlYWN0aW9uT3B0aW9ucyA9IE9iamVjdC5rZXlzKHJlYWN0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICB0cmFja0J5TWVzc2FnZVJlYWN0aW9uKF86IG51bWJlciwgaXRlbTogTWVzc2FnZVJlYWN0aW9uVHlwZSkge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgaXNPd25SZWFjdGlvbihyZWFjdGlvblR5cGU6IE1lc3NhZ2VSZWFjdGlvblR5cGUpIHtcbiAgICByZXR1cm4gISF0aGlzLm93blJlYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IHJlYWN0aW9uVHlwZSk7XG4gIH1cblxuICBnZXRFbW9qaUJ5UmVhY3Rpb24ocmVhY3Rpb25UeXBlOiBNZXNzYWdlUmVhY3Rpb25UeXBlKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UucmVhY3Rpb25zW3JlYWN0aW9uVHlwZV07XG4gIH1cblxuICBhc3luYyByZWFjdCh0eXBlOiBNZXNzYWdlUmVhY3Rpb25UeXBlKSB7XG4gICAgdGhpcy5vd25SZWFjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSB0eXBlKVxuICAgICAgPyBhd2FpdCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnJlbW92ZVJlYWN0aW9uKHRoaXMubWVzc2FnZUlkISwgdHlwZSlcbiAgICAgIDogYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5hZGRSZWFjdGlvbih0aGlzLm1lc3NhZ2VJZCEsIHR5cGUpO1xuICB9XG59XG4iLCI8ZGl2XG4gICNzZWxlY3RvckNvbnRhaW5lclxuICBkYXRhLXRlc3RpZD1cInJlYWN0aW9uLXNlbGVjdG9yXCJcbiAgY2xhc3M9XCJzdHItY2hhdF9fcmVhY3Rpb24tc2VsZWN0b3Igc3RyLWNoYXQtYW5ndWxhci12NV9fcmVhY3Rpb24tc2VsZWN0b3Igc3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb24tc2VsZWN0b3JcIlxuPlxuICA8dWxcbiAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1saXN0IHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1vcHRpb25zXCJcbiAgPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCByZWFjdGlvblR5cGUgb2YgcmVhY3Rpb25PcHRpb25zO1xuICAgICAgICB0cmFja0J5OiB0cmFja0J5TWVzc2FnZVJlYWN0aW9uXG4gICAgICBcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1yZWFjdGlvbnMtb3B0aW9uIHN0ci1jaGF0X19tZXNzYWdlLXJlYWN0aW9ucy1saXN0LWl0ZW0gc3RyLWNoYXRfX2Vtb2ppXCJcbiAgICAgIGRhdGEtdGVzdGNsYXNzPVwiZW1vamktb3B0aW9uXCJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cInJlYWN0aW9uVHlwZVwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb25zLW9wdGlvbi1zZWxlY3RlZF09XCJcbiAgICAgICAgaXNPd25SZWFjdGlvbihyZWFjdGlvblR5cGUpXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cInJlYWN0KHJlYWN0aW9uVHlwZSlcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInJlYWN0KHJlYWN0aW9uVHlwZSlcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiZW1vamkgc3RyLWNoYXRfX2Vtb2ppLXNlbGVjdG9yLWVtb2ppLWFuZ3VsYXIgc3RyLWNoYXRfX21lc3NhZ2UtcmVhY3Rpb24tZW1vamlcIlxuICAgICAgPlxuICAgICAgICB7eyBnZXRFbW9qaUJ5UmVhY3Rpb24ocmVhY3Rpb25UeXBlKSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==
@@ -1,12 +1,16 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import * as i0 from "@angular/core";
4
+ import * as i1 from "./chat-client.service";
5
+ import * as i2 from "./notification.service";
4
6
  /**
5
7
  * The `MessageReactionsService` provides customization options to message [reactions](https://getstream.io/chat/docs/javascript/send_reaction/?language=javascript).
6
8
  *
7
9
  */
8
10
  export class MessageReactionsService {
9
- constructor() {
11
+ constructor(chatClientService, notificationService) {
12
+ this.chatClientService = chatClientService;
13
+ this.notificationService = notificationService;
10
14
  /**
11
15
  * The enabled [reactions](https://getstream.io/chat/docs/javascript/send_reaction/?language=javascript) and the associated emoji
12
16
  *
@@ -32,13 +36,35 @@ export class MessageReactionsService {
32
36
  get reactions() {
33
37
  return this.reactions$.getValue();
34
38
  }
39
+ /**
40
+ * Query reactions of a specific message, more info in the [API documentation](https://getstream.io/chat/docs/javascript/send_reaction/?language=javascript#query-reactions)
41
+ * @param messageId
42
+ * @param type
43
+ * @param next
44
+ * @returns the reactions and the cursor for the next/prev pages
45
+ */
46
+ async queryReactions(messageId, type, next) {
47
+ if (!this.chatClientService.chatClient) {
48
+ throw new Error('Intialize the ChatClientService before querying reactions');
49
+ }
50
+ else {
51
+ try {
52
+ const response = await this.chatClientService.chatClient.queryReactions(messageId, { type }, { created_at: -1 }, { next });
53
+ return response;
54
+ }
55
+ catch (error) {
56
+ this.notificationService.addTemporaryNotification('streamChat.Error loading reactions');
57
+ throw error;
58
+ }
59
+ }
60
+ }
35
61
  }
36
- MessageReactionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
62
+ MessageReactionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsService, deps: [{ token: i1.ChatClientService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Injectable });
37
63
  MessageReactionsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsService, providedIn: 'root' });
38
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageReactionsService, decorators: [{
39
65
  type: Injectable,
40
66
  args: [{
41
67
  providedIn: 'root',
42
68
  }]
43
- }], ctorParameters: function () { return []; } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZWFjdGlvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFdkM7OztHQUdHO0FBSUgsTUFBTSxPQUFPLHVCQUF1QjtJQW9CbEM7UUFuQkE7Ozs7V0FJRztRQUNILGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBMkM7WUFDekUsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxFQUFFLElBQUk7WUFDVCxHQUFHLEVBQUUsSUFBSTtTQUNWLENBQUMsQ0FBQztJQVFZLENBQUM7SUFFaEI7O09BRUc7SUFDSCxJQUFJLFNBQVMsQ0FBQyxTQUFtRDtRQUMvRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsQ0FBQzs7b0hBbENVLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VSZWFjdGlvbkNsaWNrRGV0YWlscywgTWVzc2FnZVJlYWN0aW9uVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogVGhlIGBNZXNzYWdlUmVhY3Rpb25zU2VydmljZWAgcHJvdmlkZXMgY3VzdG9taXphdGlvbiBvcHRpb25zIHRvIG1lc3NhZ2UgW3JlYWN0aW9uc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvc2VuZF9yZWFjdGlvbi8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gKlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZVJlYWN0aW9uc1NlcnZpY2Uge1xuICAvKipcbiAgICogVGhlIGVuYWJsZWQgW3JlYWN0aW9uc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvc2VuZF9yZWFjdGlvbi8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkgYW5kIHRoZSBhc3NvY2lhdGVkIGVtb2ppXG4gICAqXG4gICAqIFlvdSBjYW4gcHJvdmlkZSBhbnkgc3RyaW5nIGFzIGEgcmVhY3Rpb24uIFRoZSBlbW9qaSBjYW4gYmUgcHJvdmlkZWQgYXMgYSBzdHJpbmcsIGlmIHlvdSB3YW50IHRvIHVzZSBjdXN0b20gaW1hZ2VzIGZvciByZWFjdGlvbnMgeW91IGhhdmUgdG8gcHJvdmlkZSBhIFtjdXN0b20gcmVhY3Rpb25zIFVJXSguLi8uLi9zZXJ2aWNlcy9DdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLyNtZXNzYWdlcmVhY3Rpb25zdGVtcGxhdGUpXG4gICAqL1xuICByZWFjdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtrZXkgaW4gTWVzc2FnZVJlYWN0aW9uVHlwZV06IHN0cmluZyB9Pih7XG4gICAgaGFoYTogJ/CfmIInLFxuICAgIGxpa2U6ICfwn5GNJyxcbiAgICBsb3ZlOiAn4p2k77iPJyxcbiAgICBzYWQ6ICfwn5ieJyxcbiAgICB3b3c6ICfwn5iuJyxcbiAgfSk7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBbYE1lc3NhZ2VSZWFjdGlvbnNDb21wb25lbnRgXSguLi8uLi9jb21wb25lbnRzL01lc3NhZ2VSZWFjdGlvbnNDb21wb25lbnQpIHdpbGwgZGlzcGxheSB0aGUgcmVhY3RpbmcgdXNlcnMgd2hlbiBhIHJlYWN0aW9uIGlzIGNsaWNrZWQuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRoIHlvdXIgb3duIFVJIGJ5IHByb3ZpZGluZyBhIGN1c3RvbSBldmVudCBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGUgZXZlbnQgaGFuZGxlciBjYW4gcmV0cmlldmUgYWxsIHJlYWN0aW9ucyBvZiBhIG1lc3NhZ2UgaW5zaWRlIHRoZSBhY3RpdmUgY2hhbm5lbCB1c2luZyB0aGUgW2BjaGFubmVsU2VydmljZS5nZXRNZXNzYWdlUmVhY3Rpb25zYCBtZXRob2RdKC4uLy4uL3NlcnZpY2VzL0NoYW5uZWxTZXJ2aWNlLyNnZXRtZXNzYWdlcmVhY3Rpb25zKVxuICAgKi9cbiAgY3VzdG9tUmVhY3Rpb25DbGlja0hhbmRsZXI/OiAoZGV0YWlsczogTWVzc2FnZVJlYWN0aW9uQ2xpY2tEZXRhaWxzKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogU2V0cyB0aGUgZW5hYmxlZCByZWFjdGlvbnNcbiAgICovXG4gIHNldCByZWFjdGlvbnMocmVhY3Rpb25zOiB7IFtrZXkgaW4gTWVzc2FnZVJlYWN0aW9uVHlwZV06IHN0cmluZyB9KSB7XG4gICAgdGhpcy5yZWFjdGlvbnMkLm5leHQocmVhY3Rpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnRseSBlbmFibGVkIHJlYWN0aW9uc1xuICAgKi9cbiAgZ2V0IHJlYWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdGlvbnMkLmdldFZhbHVlKCk7XG4gIH1cbn1cbiJdfQ==
69
+ }], ctorParameters: function () { return [{ type: i1.ChatClientService }, { type: i2.NotificationService }]; } });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1yZWFjdGlvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLXJlYWN0aW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUl2Qzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sdUJBQXVCO0lBb0JsQyxZQUNVLGlCQUFvQyxFQUNwQyxtQkFBd0M7UUFEeEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBckJsRDs7OztXQUlHO1FBQ0gsZUFBVSxHQUFHLElBQUksZUFBZSxDQUEyQztZQUN6RSxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7WUFDVixHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxJQUFJO1NBQ1YsQ0FBQyxDQUFDO0lBV0EsQ0FBQztJQUVKOztPQUVHO0lBQ0gsSUFBSSxTQUFTLENBQUMsU0FBbUQ7UUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQWlCLEVBQUUsSUFBWSxFQUFFLElBQWE7UUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsQ0FDNUQsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJO2dCQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQ3JFLFNBQVMsRUFDVCxFQUFFLElBQUksRUFBRSxFQUNSLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQ2xCLEVBQUUsSUFBSSxFQUFFLENBQ1QsQ0FBQztnQkFFRixPQUFPLFFBQVEsQ0FBQzthQUNqQjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FDL0Msb0NBQW9DLENBQ3JDLENBQUM7Z0JBQ0YsTUFBTSxLQUFLLENBQUM7YUFDYjtTQUNGO0lBQ0gsQ0FBQzs7b0hBcEVVLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VSZWFjdGlvbkNsaWNrRGV0YWlscywgTWVzc2FnZVJlYWN0aW9uVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBNZXNzYWdlUmVhY3Rpb25zU2VydmljZWAgcHJvdmlkZXMgY3VzdG9taXphdGlvbiBvcHRpb25zIHRvIG1lc3NhZ2UgW3JlYWN0aW9uc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvc2VuZF9yZWFjdGlvbi8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuXG4gKlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZVJlYWN0aW9uc1NlcnZpY2Uge1xuICAvKipcbiAgICogVGhlIGVuYWJsZWQgW3JlYWN0aW9uc10oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvc2VuZF9yZWFjdGlvbi8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkgYW5kIHRoZSBhc3NvY2lhdGVkIGVtb2ppXG4gICAqXG4gICAqIFlvdSBjYW4gcHJvdmlkZSBhbnkgc3RyaW5nIGFzIGEgcmVhY3Rpb24uIFRoZSBlbW9qaSBjYW4gYmUgcHJvdmlkZWQgYXMgYSBzdHJpbmcsIGlmIHlvdSB3YW50IHRvIHVzZSBjdXN0b20gaW1hZ2VzIGZvciByZWFjdGlvbnMgeW91IGhhdmUgdG8gcHJvdmlkZSBhIFtjdXN0b20gcmVhY3Rpb25zIFVJXSguLi8uLi9zZXJ2aWNlcy9DdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLyNtZXNzYWdlcmVhY3Rpb25zdGVtcGxhdGUpXG4gICAqL1xuICByZWFjdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtrZXkgaW4gTWVzc2FnZVJlYWN0aW9uVHlwZV06IHN0cmluZyB9Pih7XG4gICAgaGFoYTogJ/CfmIInLFxuICAgIGxpa2U6ICfwn5GNJyxcbiAgICBsb3ZlOiAn4p2k77iPJyxcbiAgICBzYWQ6ICfwn5ieJyxcbiAgICB3b3c6ICfwn5iuJyxcbiAgfSk7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBbYE1lc3NhZ2VSZWFjdGlvbnNDb21wb25lbnRgXSguLi8uLi9jb21wb25lbnRzL01lc3NhZ2VSZWFjdGlvbnNDb21wb25lbnQpIHdpbGwgZGlzcGxheSB0aGUgcmVhY3RpbmcgdXNlcnMgd2hlbiBhIHJlYWN0aW9uIGlzIGNsaWNrZWQuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRoIHlvdXIgb3duIFVJIGJ5IHByb3ZpZGluZyBhIGN1c3RvbSBldmVudCBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGUgZXZlbnQgaGFuZGxlciBjYW4gcmV0cmlldmUgYWxsIHJlYWN0aW9ucyBvZiBhIG1lc3NhZ2UgdXNpbmcgdGhlIFtgbWVzc2FnZVJlYWN0aW9uc1NlcnZpY2UucXVlcnlSZWFjdGlvbnMoKWBdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9zZGsvYW5ndWxhci9zZXJ2aWNlcy9NZXNzYWdlUmVhY3Rpb25zU2VydmljZS8jcXVlcnlyZWFjdGlvbnMpXG4gICAqL1xuICBjdXN0b21SZWFjdGlvbkNsaWNrSGFuZGxlcj86IChkZXRhaWxzOiBNZXNzYWdlUmVhY3Rpb25DbGlja0RldGFpbHMpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogU2V0cyB0aGUgZW5hYmxlZCByZWFjdGlvbnNcbiAgICovXG4gIHNldCByZWFjdGlvbnMocmVhY3Rpb25zOiB7IFtrZXkgaW4gTWVzc2FnZVJlYWN0aW9uVHlwZV06IHN0cmluZyB9KSB7XG4gICAgdGhpcy5yZWFjdGlvbnMkLm5leHQocmVhY3Rpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnRseSBlbmFibGVkIHJlYWN0aW9uc1xuICAgKi9cbiAgZ2V0IHJlYWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdGlvbnMkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogUXVlcnkgcmVhY3Rpb25zIG9mIGEgc3BlY2lmaWMgbWVzc2FnZSwgbW9yZSBpbmZvIGluIHRoZSBbQVBJIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3NlbmRfcmVhY3Rpb24vP2xhbmd1YWdlPWphdmFzY3JpcHQjcXVlcnktcmVhY3Rpb25zKVxuICAgKiBAcGFyYW0gbWVzc2FnZUlkXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSBuZXh0XG4gICAqIEByZXR1cm5zIHRoZSByZWFjdGlvbnMgYW5kIHRoZSBjdXJzb3IgZm9yIHRoZSBuZXh0L3ByZXYgcGFnZXNcbiAgICovXG4gIGFzeW5jIHF1ZXJ5UmVhY3Rpb25zKG1lc3NhZ2VJZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIG5leHQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY2hhdENsaWVudFNlcnZpY2UuY2hhdENsaWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSW50aWFsaXplIHRoZSBDaGF0Q2xpZW50U2VydmljZSBiZWZvcmUgcXVlcnlpbmcgcmVhY3Rpb25zJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQucXVlcnlSZWFjdGlvbnMoXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIHsgdHlwZSB9LFxuICAgICAgICAgIHsgY3JlYXRlZF9hdDogLTEgfSxcbiAgICAgICAgICB7IG5leHQgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgbG9hZGluZyByZWFjdGlvbnMnXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -28,9 +28,9 @@ export class NotificationListComponent {
28
28
  }
29
29
  }
30
30
  NotificationListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: NotificationListComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.NotificationService }, { token: i3.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
31
- NotificationListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: NotificationListComponent, selector: "stream-notification-list", ngImport: i0, template: "<div\n data-testid=\"notification-list\"\n class=\"str-chat str-chat__theme-{{\n theme$ | async\n }} str-chat__list-notifications\"\n>\n <ng-container\n *ngFor=\"let notification of notifications$ | async; trackBy: trackById\"\n >\n <ng-template #notificationContent>\n <div\n *ngIf=\"notification.text !== undefined\"\n data-testclass=\"notification-content\"\n >\n {{ notification.text | translate: notification.translateParams }}\n </div>\n <ng-container *ngIf=\"notification.template !== undefined\">\n <ng-container\n *ngTemplateOutlet=\"\n notification.template;\n context: getNotificationContentContext(notification)\n \"\n ></ng-container>\n </ng-container>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.notificationTemplate$ | async) ||\n defaultNotification;\n context: { type: notification.type, content: notificationContent }\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template #defaultNotification let-type=\"type\" let-content=\"content\">\n <stream-notification [type]=\"type\" [content]=\"content\"></stream-notification>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.NotificationComponent, selector: "stream-notification", inputs: ["type", "content"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
31
+ NotificationListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: NotificationListComponent, selector: "stream-notification-list", ngImport: i0, template: "<div\n data-testid=\"notification-list\"\n class=\"str-chat str-chat__theme-{{\n theme$ | async\n }} str-chat__list-notifications\"\n>\n <ng-container\n *ngFor=\"let notification of notifications$ | async; trackBy: trackById\"\n >\n <ng-template #notificationContent>\n <div\n *ngIf=\"notification.text !== undefined\"\n data-testclass=\"notification-content\"\n >\n {{ notification.text | translate : notification.translateParams }}\n </div>\n <ng-container *ngIf=\"notification.template !== undefined\">\n <ng-container\n *ngTemplateOutlet=\"\n notification.template;\n context: getNotificationContentContext(notification)\n \"\n ></ng-container>\n </ng-container>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.notificationTemplate$ | async) ||\n defaultNotification;\n context: { type: notification.type, content: notificationContent }\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template #defaultNotification let-type=\"type\" let-content=\"content\">\n <stream-notification [type]=\"type\" [content]=\"content\"></stream-notification>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.NotificationComponent, selector: "stream-notification", inputs: ["type", "content"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: NotificationListComponent, decorators: [{
33
33
  type: Component,
34
- args: [{ selector: 'stream-notification-list', template: "<div\n data-testid=\"notification-list\"\n class=\"str-chat str-chat__theme-{{\n theme$ | async\n }} str-chat__list-notifications\"\n>\n <ng-container\n *ngFor=\"let notification of notifications$ | async; trackBy: trackById\"\n >\n <ng-template #notificationContent>\n <div\n *ngIf=\"notification.text !== undefined\"\n data-testclass=\"notification-content\"\n >\n {{ notification.text | translate: notification.translateParams }}\n </div>\n <ng-container *ngIf=\"notification.template !== undefined\">\n <ng-container\n *ngTemplateOutlet=\"\n notification.template;\n context: getNotificationContentContext(notification)\n \"\n ></ng-container>\n </ng-container>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.notificationTemplate$ | async) ||\n defaultNotification;\n context: { type: notification.type, content: notificationContent }\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template #defaultNotification let-type=\"type\" let-content=\"content\">\n <stream-notification [type]=\"type\" [content]=\"content\"></stream-notification>\n</ng-template>\n" }]
34
+ args: [{ selector: 'stream-notification-list', template: "<div\n data-testid=\"notification-list\"\n class=\"str-chat str-chat__theme-{{\n theme$ | async\n }} str-chat__list-notifications\"\n>\n <ng-container\n *ngFor=\"let notification of notifications$ | async; trackBy: trackById\"\n >\n <ng-template #notificationContent>\n <div\n *ngIf=\"notification.text !== undefined\"\n data-testclass=\"notification-content\"\n >\n {{ notification.text | translate : notification.translateParams }}\n </div>\n <ng-container *ngIf=\"notification.template !== undefined\">\n <ng-container\n *ngTemplateOutlet=\"\n notification.template;\n context: getNotificationContentContext(notification)\n \"\n ></ng-container>\n </ng-container>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.notificationTemplate$ | async) ||\n defaultNotification;\n context: { type: notification.type, content: notificationContent }\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template #defaultNotification let-type=\"type\" let-content=\"content\">\n <stream-notification [type]=\"type\" [content]=\"content\"></stream-notification>\n</ng-template>\n" }]
35
35
  }], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.NotificationService }, { type: i3.ThemeService }]; } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL25vdGlmaWNhdGlvbi1saXN0L25vdGlmaWNhdGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9ub3RpZmljYXRpb24tbGlzdC9ub3RpZmljYXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQU8xQzs7R0FFRztBQU1ILE1BQU0sT0FBTyx5QkFBeUI7SUFJcEMsWUFDa0Isc0JBQThDLEVBQ3RELG1CQUF3QyxFQUN4QyxZQUEwQjtRQUZsQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3RELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFFbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDO1FBQzlELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFTLEVBQUUsSUFBeUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxZQUFpQztRQUM3RCxPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsZUFBZTtZQUMvQixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVM7U0FDbEMsQ0FBQztJQUNKLENBQUM7O3NIQXRCVSx5QkFBeUI7MEdBQXpCLHlCQUF5QixnRUNmdEMsaXZDQXNDQTsyRkR2QmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25QYXlsb2FkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBgTm90aWZpY2F0aW9uTGlzdGAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBsaXN0IG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbm90aWZpY2F0aW9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2F0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25MaXN0Q29tcG9uZW50IHtcbiAgbm90aWZpY2F0aW9ucyQ6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uUGF5bG9hZFtdPjtcbiAgdGhlbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zJCA9IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5ub3RpZmljYXRpb25zJDtcbiAgICB0aGlzLnRoZW1lJCA9IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lJDtcbiAgfVxuXG4gIHRyYWNrQnlJZChfOiBudW1iZXIsIGl0ZW06IE5vdGlmaWNhdGlvblBheWxvYWQpIHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfVxuXG4gIGdldE5vdGlmaWNhdGlvbkNvbnRlbnRDb250ZXh0KG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ub3RpZmljYXRpb24udGVtcGxhdGVDb250ZXh0LFxuICAgICAgZGlzbWlzc0ZuOiBub3RpZmljYXRpb24uZGlzbWlzc0ZuLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXZcbiAgZGF0YS10ZXN0aWQ9XCJub3RpZmljYXRpb24tbGlzdFwiXG4gIGNsYXNzPVwic3RyLWNoYXQgc3RyLWNoYXRfX3RoZW1lLXt7XG4gICAgdGhlbWUkIHwgYXN5bmNcbiAgfX0gc3RyLWNoYXRfX2xpc3Qtbm90aWZpY2F0aW9uc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9XCJsZXQgbm90aWZpY2F0aW9uIG9mIG5vdGlmaWNhdGlvbnMkIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgI25vdGlmaWNhdGlvbkNvbnRlbnQ+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLnRleHQgIT09IHVuZGVmaW5lZFwiXG4gICAgICAgIGRhdGEtdGVzdGNsYXNzPVwibm90aWZpY2F0aW9uLWNvbnRlbnRcIlxuICAgICAgPlxuICAgICAgICB7eyBub3RpZmljYXRpb24udGV4dCB8IHRyYW5zbGF0ZTogbm90aWZpY2F0aW9uLnRyYW5zbGF0ZVBhcmFtcyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm90aWZpY2F0aW9uLnRlbXBsYXRlICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBub3RpZmljYXRpb24udGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXROb3RpZmljYXRpb25Db250ZW50Q29udGV4dChub3RpZmljYXRpb24pXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5ub3RpZmljYXRpb25UZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICBkZWZhdWx0Tm90aWZpY2F0aW9uO1xuICAgICAgICBjb250ZXh0OiB7IHR5cGU6IG5vdGlmaWNhdGlvbi50eXBlLCBjb250ZW50OiBub3RpZmljYXRpb25Db250ZW50IH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHROb3RpZmljYXRpb24gbGV0LXR5cGU9XCJ0eXBlXCIgbGV0LWNvbnRlbnQ9XCJjb250ZW50XCI+XG4gIDxzdHJlYW0tbm90aWZpY2F0aW9uIFt0eXBlXT1cInR5cGVcIiBbY29udGVudF09XCJjb250ZW50XCI+PC9zdHJlYW0tbm90aWZpY2F0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL25vdGlmaWNhdGlvbi1saXN0L25vdGlmaWNhdGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9ub3RpZmljYXRpb24tbGlzdC9ub3RpZmljYXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQU8xQzs7R0FFRztBQU1ILE1BQU0sT0FBTyx5QkFBeUI7SUFJcEMsWUFDa0Isc0JBQThDLEVBQ3RELG1CQUF3QyxFQUN4QyxZQUEwQjtRQUZsQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ3RELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFFbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDO1FBQzlELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUFTLEVBQUUsSUFBeUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxZQUFpQztRQUM3RCxPQUFPO1lBQ0wsR0FBRyxZQUFZLENBQUMsZUFBZTtZQUMvQixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVM7U0FDbEMsQ0FBQztJQUNKLENBQUM7O3NIQXRCVSx5QkFBeUI7MEdBQXpCLHlCQUF5QixnRUNmdEMsa3ZDQXNDQTsyRkR2QmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25QYXlsb2FkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBgTm90aWZpY2F0aW9uTGlzdGAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBsaXN0IG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbm90aWZpY2F0aW9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2F0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25MaXN0Q29tcG9uZW50IHtcbiAgbm90aWZpY2F0aW9ucyQ6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uUGF5bG9hZFtdPjtcbiAgdGhlbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zJCA9IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5ub3RpZmljYXRpb25zJDtcbiAgICB0aGlzLnRoZW1lJCA9IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lJDtcbiAgfVxuXG4gIHRyYWNrQnlJZChfOiBudW1iZXIsIGl0ZW06IE5vdGlmaWNhdGlvblBheWxvYWQpIHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfVxuXG4gIGdldE5vdGlmaWNhdGlvbkNvbnRlbnRDb250ZXh0KG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uUGF5bG9hZCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ub3RpZmljYXRpb24udGVtcGxhdGVDb250ZXh0LFxuICAgICAgZGlzbWlzc0ZuOiBub3RpZmljYXRpb24uZGlzbWlzc0ZuLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXZcbiAgZGF0YS10ZXN0aWQ9XCJub3RpZmljYXRpb24tbGlzdFwiXG4gIGNsYXNzPVwic3RyLWNoYXQgc3RyLWNoYXRfX3RoZW1lLXt7XG4gICAgdGhlbWUkIHwgYXN5bmNcbiAgfX0gc3RyLWNoYXRfX2xpc3Qtbm90aWZpY2F0aW9uc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9XCJsZXQgbm90aWZpY2F0aW9uIG9mIG5vdGlmaWNhdGlvbnMkIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gID5cbiAgICA8bmctdGVtcGxhdGUgI25vdGlmaWNhdGlvbkNvbnRlbnQ+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLnRleHQgIT09IHVuZGVmaW5lZFwiXG4gICAgICAgIGRhdGEtdGVzdGNsYXNzPVwibm90aWZpY2F0aW9uLWNvbnRlbnRcIlxuICAgICAgPlxuICAgICAgICB7eyBub3RpZmljYXRpb24udGV4dCB8IHRyYW5zbGF0ZSA6IG5vdGlmaWNhdGlvbi50cmFuc2xhdGVQYXJhbXMgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmaWNhdGlvbi50ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgbm90aWZpY2F0aW9uLnRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0Tm90aWZpY2F0aW9uQ29udGVudENvbnRleHQobm90aWZpY2F0aW9uKVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2Uubm90aWZpY2F0aW9uVGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgZGVmYXVsdE5vdGlmaWNhdGlvbjtcbiAgICAgICAgY29udGV4dDogeyB0eXBlOiBub3RpZmljYXRpb24udHlwZSwgY29udGVudDogbm90aWZpY2F0aW9uQ29udGVudCB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Tm90aWZpY2F0aW9uIGxldC10eXBlPVwidHlwZVwiIGxldC1jb250ZW50PVwiY29udGVudFwiPlxuICA8c3RyZWFtLW5vdGlmaWNhdGlvbiBbdHlwZV09XCJ0eXBlXCIgW2NvbnRlbnRdPVwiY29udGVudFwiPjwvc3RyZWFtLW5vdGlmaWNhdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=