@cometchat/chat-uikit-angular 4.0.0-beta.1.4 → 4.0.0-beta.1.5

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 (131) hide show
  1. package/Calls/CallingExtension.d.ts +4 -3
  2. package/Calls/CallingExtensionDecorator.d.ts +0 -1
  3. package/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.d.ts +4 -3
  4. package/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.d.ts +4 -3
  5. package/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.d.ts +14 -6
  6. package/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.d.ts +0 -1
  7. package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +5 -5
  8. package/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.d.ts +6 -5
  9. package/CometChatContacts/cometchat-contacts/cometchat-contacts.component.d.ts +65 -0
  10. package/CometChatContacts/cometchat-contacts.module.d.ts +12 -0
  11. package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +21 -15
  12. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +13 -4
  13. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.d.ts +2 -1
  14. package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +7 -7
  15. package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +14 -12
  16. package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +12 -6
  17. package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +6 -4
  18. package/CometChatList/cometchat-list.component.d.ts +2 -1
  19. package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +2 -2
  20. package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +23 -6
  21. package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +1 -1
  22. package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +95 -0
  23. package/CometChatMessageInformation/cometchat-message-information.module.d.ts +10 -0
  24. package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +45 -26
  25. package/CometChatMessageList/cometchat-message-list.module.d.ts +3 -1
  26. package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +5 -3
  27. package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +0 -1
  28. package/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.d.ts +3 -3
  29. package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +11 -5
  30. package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +2 -2
  31. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.d.ts +4 -8
  32. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +1 -4
  33. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.d.ts +4 -8
  34. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +1 -4
  35. package/Extensions/ImageModeration/ImageModerationExtension.d.ts +4 -4
  36. package/Extensions/LinkPreviewExtension/LinkPreviewExtension.d.ts +4 -4
  37. package/Extensions/MessageTranslation/MessageTranslationExtension.d.ts +4 -8
  38. package/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.d.ts +1 -4
  39. package/Extensions/PollsExtension/PollsExtension.d.ts +4 -4
  40. package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +0 -1
  41. package/Extensions/Reactions/ReactionExtension.d.ts +4 -4
  42. package/Extensions/Reactions/ReactionExtensionDecorator.d.ts +0 -1
  43. package/Extensions/SmartReplies/SmartRepliesExtension.d.ts +4 -8
  44. package/Extensions/SmartReplies/SmartRepliesExtensionDecorator.d.ts +2 -2
  45. package/Extensions/Stickers/StickersExtension.d.ts +4 -8
  46. package/Extensions/Stickers/StickersExtensionDecorator.d.ts +2 -2
  47. package/Extensions/TextModerator/TextModeratorExtension.d.ts +4 -3
  48. package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +0 -1
  49. package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.d.ts +4 -4
  50. package/Shared/CometChatUIkit/CometChatUIKit.d.ts +10 -6
  51. package/Shared/Framework/DataSource.d.ts +0 -1
  52. package/Shared/Framework/DataSourceDecorator.d.ts +0 -1
  53. package/Shared/Utils/ComeChatException.d.ts +1 -2
  54. package/Shared/Utils/MessageUtils.d.ts +2 -1
  55. package/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.d.ts +38 -9
  56. package/Shared/Views/CometChatTabs/cometchat-tabs.module.d.ts +1 -5
  57. package/esm2020/Calls/CallingExtension.mjs +7 -4
  58. package/esm2020/Calls/CallingExtensionDecorator.mjs +4 -4
  59. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +58 -21
  60. package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.mjs +48 -17
  61. package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.mjs +110 -9
  62. package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.mjs +9 -7
  63. package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +9 -6
  64. package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +12 -7
  65. package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +273 -0
  66. package/esm2020/CometChatContacts/cometchat-contacts.module.mjs +23 -0
  67. package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +122 -65
  68. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +105 -17
  69. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.mjs +6 -2
  70. package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +13 -11
  71. package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +45 -46
  72. package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +69 -28
  73. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +60 -21
  74. package/esm2020/CometChatList/cometchat-list.component.mjs +8 -9
  75. package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +4 -5
  76. package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +200 -30
  77. package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +4 -5
  78. package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +288 -0
  79. package/esm2020/CometChatMessageInformation/cometchat-message-information.module.mjs +28 -0
  80. package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +401 -185
  81. package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +12 -4
  82. package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +28 -15
  83. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +3 -4
  84. package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +14 -15
  85. package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +72 -45
  86. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +21 -9
  87. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.mjs +7 -6
  88. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +3 -4
  89. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.mjs +7 -6
  90. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +3 -4
  91. package/esm2020/Extensions/ImageModeration/ImageModerationExtension.mjs +7 -5
  92. package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtension.mjs +7 -5
  93. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtension.mjs +7 -6
  94. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.mjs +2 -4
  95. package/esm2020/Extensions/PollsExtension/PollsExtension.mjs +7 -5
  96. package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +1 -1
  97. package/esm2020/Extensions/Reactions/ReactionExtension.mjs +7 -5
  98. package/esm2020/Extensions/Reactions/ReactionExtensionDecorator.mjs +3 -2
  99. package/esm2020/Extensions/SmartReplies/SmartRepliesExtension.mjs +7 -6
  100. package/esm2020/Extensions/SmartReplies/SmartRepliesExtensionDecorator.mjs +5 -7
  101. package/esm2020/Extensions/Stickers/StickersExtension.mjs +7 -10
  102. package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +5 -7
  103. package/esm2020/Extensions/TextModerator/TextModeratorExtension.mjs +16 -4
  104. package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +1 -1
  105. package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.mjs +7 -5
  106. package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +66 -32
  107. package/esm2020/Shared/Framework/DataSource.mjs +1 -1
  108. package/esm2020/Shared/Framework/DataSourceDecorator.mjs +1 -1
  109. package/esm2020/Shared/Utils/ComeChatException.mjs +2 -2
  110. package/esm2020/Shared/Utils/MessageUtils.mjs +36 -6
  111. package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.mjs +61 -25
  112. package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs.module.mjs +2 -18
  113. package/esm2020/public-api.mjs +8 -5
  114. package/fesm2015/cometchat-chat-uikit-angular.mjs +3658 -3185
  115. package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
  116. package/fesm2020/cometchat-chat-uikit-angular.mjs +3639 -3164
  117. package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
  118. package/package.json +5 -5
  119. package/public-api.d.ts +7 -4
  120. package/Calls/CometChatCallDetails/cometchat-call-details/cometchat-call-details.component.d.ts +0 -139
  121. package/Calls/CometChatCallDetails/cometchat-call-details.module.d.ts +0 -10
  122. package/Calls/CometChatCallHistory/cometchat-call-history/cometchat-call-history.component.d.ts +0 -125
  123. package/Calls/CometChatCallHistory/cometchat-call-history.module.d.ts +0 -10
  124. package/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details/cometchat-call-history-with-details.component.d.ts +0 -59
  125. package/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details.module.d.ts +0 -12
  126. package/esm2020/Calls/CometChatCallDetails/cometchat-call-details/cometchat-call-details.component.mjs +0 -452
  127. package/esm2020/Calls/CometChatCallDetails/cometchat-call-details.module.mjs +0 -31
  128. package/esm2020/Calls/CometChatCallHistory/cometchat-call-history/cometchat-call-history.component.mjs +0 -397
  129. package/esm2020/Calls/CometChatCallHistory/cometchat-call-history.module.mjs +0 -28
  130. package/esm2020/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details/cometchat-call-history-with-details.component.mjs +0 -143
  131. package/esm2020/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details.module.mjs +0 -39
@@ -1,452 +0,0 @@
1
- import { Component, Input, ChangeDetectionStrategy, } from "@angular/core";
2
- import '@cometchat/uikit-elements';
3
- import { AvatarStyle, ListItemStyle, } from '@cometchat/uikit-elements';
4
- import { DetailsStyle, CallButtonsConfiguration, } from "@cometchat/uikit-shared";
5
- import { fontHelper, localize, CometChatGroupEvents, CometChatUIKitConstants } from '@cometchat/uikit-resources';
6
- import { CometChat } from "@cometchat-pro/chat";
7
- import { CometChatException } from "../../../Shared/Utils/ComeChatException";
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../../../CometChatTheme.service";
10
- import * as i2 from "../../CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component";
11
- import * as i3 from "@angular/common";
12
- /**
13
- *
14
- * CometChatCallDetailsComponent renders details of user or group.
15
- *
16
- * @version 1.0.0
17
- * @author CometChatTeam
18
- * @copyright © 2022 CometChat Inc.
19
- *
20
- */
21
- export class CometChatCallDetailsComponent {
22
- constructor(ref, themeService) {
23
- this.ref = ref;
24
- this.themeService = themeService;
25
- this.title = localize("CALL_DETAILS");
26
- this.closeButtonIconURL = "assets/close2x.svg";
27
- this.hideProfile = false;
28
- this.disableUsersPresence = false;
29
- this.privateGroupIcon = "assets/Private.svg";
30
- this.protectedGroupIcon = "assets/Locked.svg";
31
- this.onError = (error) => {
32
- console.log(error);
33
- };
34
- this.data = [];
35
- this.statusIndicatorStyle = {
36
- height: "10px",
37
- width: "10px",
38
- borderRadius: "16px",
39
- border: ""
40
- };
41
- this.avatarStyle = {
42
- borderRadius: "16px",
43
- width: "28px",
44
- height: "28px",
45
- border: "none",
46
- };
47
- this.callDetailsStyle = {
48
- width: "100%",
49
- height: "100%",
50
- padding: "0 100px"
51
- };
52
- this.callButtonsConfiguration = new CallButtonsConfiguration({});
53
- this.listItemStyle = {
54
- height: "100%",
55
- width: "100%",
56
- background: "",
57
- activeBackground: "transparent",
58
- borderRadius: "grey",
59
- titleFont: "600 15px Inter",
60
- titleColor: "black",
61
- border: "",
62
- hoverBackground: "transparent",
63
- separatorColor: "rgb(222 222 222 / 46%)"
64
- };
65
- this.messagesList = [];
66
- this.loggedInUser = null;
67
- this.statusColor = {
68
- private: "",
69
- password: "#F7A500",
70
- public: ""
71
- };
72
- this.closeButtonStyle = {
73
- height: "24px",
74
- width: "24px",
75
- border: "none",
76
- borderRadius: "0",
77
- background: "transparent",
78
- buttonIconTint: this.callDetailsStyle.closeButtonIconTint || this.themeService.theme.palette.getPrimary()
79
- };
80
- this.buttonStyle = {
81
- height: "100%",
82
- width: "100%",
83
- border: "none",
84
- borderRadius: "0",
85
- background: "transparent",
86
- buttonTextColor: this.themeService.theme.palette.getPrimary() || "rgba(51, 153, 255)",
87
- buttonTextFont: "500 16px Inter"
88
- };
89
- this.dividerStyle = {
90
- background: "rgb(222 222 222 / 46%)",
91
- height: "1px",
92
- width: "100%"
93
- };
94
- this.subtitleText = "";
95
- this.userListenerId = "userlist_" + new Date().getTime();
96
- this.limit = 5;
97
- this.types = [];
98
- this.categories = [];
99
- this.checkStatusType = () => {
100
- return this.user && !this.disableUsersPresence ? this.statusColor[this.user?.getStatus()] : this.statusColor[this.group?.getType()];
101
- };
102
- this.onCloseClick = () => {
103
- if (this.onClose) {
104
- this.onClose();
105
- }
106
- };
107
- this.subtitleStyle = () => {
108
- if (this.user && this.user.getStatus() == CometChatUIKitConstants.userStatusType.online) {
109
- return {
110
- textFont: this.callDetailsStyle.subtitleTextFont,
111
- textColor: this.themeService.theme.palette.getPrimary()
112
- };
113
- }
114
- else {
115
- return {
116
- textFont: this.callDetailsStyle.subtitleTextFont,
117
- textColor: this.callDetailsStyle.subtitleTextColor
118
- };
119
- }
120
- };
121
- /**
122
- * @param {CometChat.Group} group
123
- */
124
- this.getGroupIcon = (group) => {
125
- let status;
126
- if (group) {
127
- switch (group.getType()) {
128
- case CometChatUIKitConstants.GroupTypes.password:
129
- status = this.protectedGroupIcon;
130
- break;
131
- case CometChatUIKitConstants.GroupTypes.private:
132
- status = this.privateGroupIcon;
133
- break;
134
- default:
135
- status = null;
136
- break;
137
- }
138
- }
139
- return status;
140
- };
141
- this.getTemplateOptions = (template) => {
142
- if (template.options) {
143
- return template.options(this.user, this.group, template.id);
144
- }
145
- else
146
- return [];
147
- };
148
- this.wrapperStyle = () => {
149
- return {
150
- width: this.callDetailsStyle.width,
151
- height: this.callDetailsStyle.height,
152
- border: this.callDetailsStyle.border,
153
- borderRadius: this.callDetailsStyle.borderRadius,
154
- background: this.callDetailsStyle.background,
155
- };
156
- };
157
- this.marginStyle = () => {
158
- return {
159
- padding: this.callDetailsStyle?.padding
160
- };
161
- };
162
- }
163
- //
164
- getTitleStyle() {
165
- return {
166
- textFont: this.callDetailsStyle.titleTextFont || fontHelper(this.themeService.theme.typography.title1),
167
- textColor: this.callDetailsStyle.titleTextColor || this.themeService.theme.palette.getAccent()
168
- };
169
- }
170
- ngOnChanges(changes) {
171
- if (changes["user"] || changes["group"]) {
172
- this.updateSubtitle();
173
- }
174
- }
175
- removeListener() {
176
- CometChat.removeUserListener(this.userListenerId);
177
- }
178
- ngOnDestroy() {
179
- this.removeListener();
180
- if (this.onClose) {
181
- this.onClose();
182
- }
183
- this.unsubscribeToEvents();
184
- }
185
- ngOnInit() {
186
- this.setThemeStyle();
187
- this.subscribeToEvents();
188
- this.statusColor.online = this.callDetailsStyle.onlineStatusColor || this.themeService.theme.palette.getSuccess();
189
- this.attachListeners();
190
- this.updateSubtitle();
191
- }
192
- /**
193
- * Compares two dates and sets Date on a a new day
194
- */
195
- /**
196
- * @param {number} firstDate
197
- * @param {number} secondDate
198
- */
199
- isDateDifferent(firstDate, secondDate) {
200
- let firstDateObj, secondDateObj;
201
- firstDateObj = new Date(firstDate * 1000);
202
- secondDateObj = new Date(secondDate * 1000);
203
- return firstDateObj.getDate() !== secondDateObj.getDate() ||
204
- firstDateObj.getMonth() !== secondDateObj.getMonth() ||
205
- firstDateObj.getFullYear() !== secondDateObj.getFullYear();
206
- }
207
- subscribeToEvents() {
208
- this.ccGroupMemberAdded = CometChatGroupEvents.ccGroupMemberAdded.subscribe((item) => {
209
- this.group = item?.userAddedIn;
210
- this.group = item?.userAddedIn;
211
- this.updateSubtitle();
212
- this.ref.detectChanges();
213
- });
214
- this.ccGroupMemberJoined = CometChatGroupEvents.ccGroupMemberJoined.subscribe((item) => {
215
- this.group = item?.joinedGroup;
216
- this.updateSubtitle();
217
- this.ref.detectChanges();
218
- });
219
- this.ccGroupMemberKicked = CometChatGroupEvents.ccGroupMemberKicked.subscribe((item) => {
220
- this.group = item?.kickedFrom;
221
- this.updateSubtitle();
222
- this.ref.detectChanges();
223
- });
224
- this.ccGroupMemberBanned = CometChatGroupEvents.ccGroupMemberBanned.subscribe((item) => {
225
- this.group = item?.kickedFrom;
226
- this.updateSubtitle();
227
- this.ref.detectChanges();
228
- });
229
- this.ccOwnershipChanged = CometChatGroupEvents.ccOwnershipChanged.subscribe((item) => {
230
- this.group = item?.group;
231
- this.updateSubtitle();
232
- this.ref.detectChanges();
233
- });
234
- }
235
- unsubscribeToEvents() {
236
- this.ccGroupMemberAdded?.unsubscribe();
237
- this.ccGroupMemberJoined?.unsubscribe();
238
- this.ccGroupMemberKicked?.unsubscribe();
239
- this.ccGroupMemberBanned?.unsubscribe();
240
- this.ccOwnershipChanged?.unsubscribe();
241
- }
242
- updateSubtitle() {
243
- const count = this.group?.getMembersCount();
244
- const membersText = localize(count > 1 ? "MEMBERS" : "MEMBER");
245
- this.subtitleText = this.user ? this.user.getStatus() : `${count} ${membersText}`;
246
- this.ref.detectChanges();
247
- }
248
- getButtonStyle(option) {
249
- return {
250
- height: "100%",
251
- width: "100%",
252
- border: "none",
253
- borderRadius: "0",
254
- buttonTextFont: option?.titleFont,
255
- buttonTextColor: option?.titleColor,
256
- background: option?.backgroundColor || "transparent"
257
- };
258
- }
259
- checkGroupType() {
260
- let image = "";
261
- if (this.group) {
262
- switch (this.group?.getType()) {
263
- case CometChatUIKitConstants.GroupTypes.password:
264
- image = this.protectedGroupIcon;
265
- break;
266
- case CometChatUIKitConstants.GroupTypes.private:
267
- image = this.privateGroupIcon;
268
- break;
269
- default:
270
- image = "";
271
- break;
272
- }
273
- }
274
- return image;
275
- }
276
- updateUserStatus(user) {
277
- if (this.user && this.user.getUid() && this.user.getUid() === user.getUid()) {
278
- this.user.setStatus(user.getStatus());
279
- this.updateSubtitle();
280
- }
281
- // this.ref.detectChanges();
282
- }
283
- attachListeners() {
284
- try {
285
- if (!this.disableUsersPresence) {
286
- CometChat.addUserListener(this.userListenerId, new CometChat.UserListener({
287
- onUserOnline: (onlineUser) => {
288
- /* when someuser/friend comes online, user will be received here */
289
- this.updateUserStatus(onlineUser);
290
- },
291
- onUserOffline: (offlineUser) => {
292
- /* when someuser/friend went offline, user will be received here */
293
- this.updateUserStatus(offlineUser);
294
- },
295
- }));
296
- }
297
- }
298
- catch (error) {
299
- if (this.onError) {
300
- this.onError(CometChatException(error));
301
- }
302
- }
303
- }
304
- getSectionHeaderStyle() {
305
- return {
306
- textFont: "500 15px Inter",
307
- textColor: "lightgrey"
308
- };
309
- }
310
- getCallStatusStyleStyle() {
311
- return {
312
- textFont: "400 15px Inter",
313
- textColor: "black"
314
- };
315
- }
316
- getDateStyle() {
317
- return {
318
- textFont: "400 15px Inter",
319
- textColor: "lightgrey"
320
- };
321
- }
322
- onCloseDetails() {
323
- if (this.onClose) {
324
- this.onClose();
325
- }
326
- }
327
- /**
328
- * @param {CometChat.Group} group
329
- */
330
- getStatusIndicatorColor(group) {
331
- return this.statusColor[group?.getType()];
332
- }
333
- getCustomOptionView(option) {
334
- return option?.customView;
335
- }
336
- showDataSectionStyle(template) {
337
- return {
338
- textFont: template.titleFont,
339
- textColor: template.titleColor
340
- };
341
- }
342
- setThemeStyle() {
343
- this.setDetailsStyle();
344
- this.setAvatarStyle();
345
- this.setStatusStyle();
346
- this.setListItemStyle();
347
- this.statusColor.private = this.callDetailsStyle.privateGroupIconBackground;
348
- this.statusColor.online = this.callDetailsStyle.onlineStatusColor;
349
- this.statusColor.password = this.callDetailsStyle.passwordGroupIconBackground;
350
- }
351
- setListItemStyle() {
352
- let defaultStyle = new ListItemStyle({
353
- height: "45px",
354
- width: "100%",
355
- background: this.themeService.theme.palette.getBackground(),
356
- activeBackground: "transparent",
357
- borderRadius: "0",
358
- titleFont: fontHelper(this.themeService.theme.typography.title2),
359
- titleColor: this.themeService.theme.palette.getAccent(),
360
- border: "none",
361
- separatorColor: this.themeService.theme.palette.getAccent200(),
362
- hoverBackground: "transparent"
363
- });
364
- this.listItemStyle = { ...defaultStyle, ...this.listItemStyle };
365
- }
366
- setAvatarStyle() {
367
- let defaultStyle = new AvatarStyle({
368
- borderRadius: "24px",
369
- width: "36px",
370
- height: "36px",
371
- border: "none",
372
- backgroundColor: this.themeService.theme.palette.getAccent700(),
373
- nameTextColor: this.themeService.theme.palette.getAccent900(),
374
- backgroundSize: "cover",
375
- nameTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
376
- outerViewBorder: "",
377
- outerViewBorderSpacing: "",
378
- });
379
- this.avatarStyle = { ...defaultStyle, ...this.avatarStyle };
380
- }
381
- setStatusStyle() {
382
- let defaultStyle = {
383
- height: "12px",
384
- width: "12px",
385
- border: "none",
386
- borderRadius: "24px",
387
- };
388
- this.statusIndicatorStyle = { ...defaultStyle, ...this.statusIndicatorStyle };
389
- }
390
- setDetailsStyle() {
391
- let defaultStyle = new DetailsStyle({
392
- background: this.themeService.theme.palette.getBackground(),
393
- border: `1px solid ${this.themeService.theme.palette.getAccent50()}`,
394
- titleTextFont: fontHelper(this.themeService.theme.typography.title1),
395
- titleTextColor: this.themeService.theme.palette.getAccent(),
396
- onlineStatusColor: this.themeService.theme.palette.getSuccess(),
397
- privateGroupIconBackground: this.themeService.theme.palette.getSuccess(),
398
- passwordGroupIconBackground: "RGB(247, 165, 0)",
399
- closeButtonIconTint: this.themeService.theme.palette.getPrimary(),
400
- width: "100%",
401
- height: "100%",
402
- borderRadius: "",
403
- subtitleTextFont: fontHelper(this.themeService.theme.typography.subtitle2),
404
- subtitleTextColor: this.themeService.theme.palette.getAccent600(),
405
- padding: "0 100px"
406
- });
407
- this.callDetailsStyle = { ...defaultStyle, ...this.callDetailsStyle };
408
- }
409
- }
410
- CometChatCallDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatCallDetailsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
411
- CometChatCallDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatCallDetailsComponent, selector: "cometchat-call-details", inputs: { group: "group", user: "user", title: "title", closeButtonIconURL: "closeButtonIconURL", hideProfile: "hideProfile", subtitleView: "subtitleView", customProfileView: "customProfileView", disableUsersPresence: "disableUsersPresence", privateGroupIcon: "privateGroupIcon", protectedGroupIcon: "protectedGroupIcon", onError: "onError", data: "data", onClose: "onClose", statusIndicatorStyle: "statusIndicatorStyle", avatarStyle: "avatarStyle", callDetailsStyle: "callDetailsStyle", callButtonsConfiguration: "callButtonsConfiguration", listItemStyle: "listItemStyle" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-details__wrapper\" *ngIf=\"user || group\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-details__header\">\n <cometchat-label [text]=\"title\" [labelStyle]=\"getTitleStyle()\"></cometchat-label>\n <cometchat-button [iconURL]=\"closeButtonIconURL\" class=\"cc-details__close-button\" [buttonStyle]=\"closeButtonStyle\" (cc-button-clicked)=\"onCloseDetails()\"></cometchat-button>\n </div>\n<div class=\"cc-details\" [ngStyle]=\"marginStyle()\">\n <div class=\"cc-details__profile\" *ngIf=\"!hideProfile\">\n <cometchat-list-item *ngIf=\"!customProfileView;else listitem\" [avatarName]=\"user?.getName() ?? this.group?.getName()\" [avatarURL]=\"this.user?.getAvatar() ?? this.group?.getIcon()\" [listItemStyle]=\"listItemStyle\"\n [statusIndicatorColor]=\"checkStatusType()\" [statusIndicatorIcon]=\"checkGroupType()\" [title]=\"this.user?.getName() ?? this.group?.getName()\" [hideSeparator]=\"false\"\n [statusIndicatorStyle]=\"statusIndicatorStyle\" [avatarStyle]=\"avatarStyle\">\n <div slot=\"subtitleView\">\n <div *ngIf=\"!subtitleView; else subtitle\">\n <cometchat-label [text]=\"subtitleText\" [labelStyle]=\"subtitleStyle()\">\n </cometchat-label>\n </div>\n <ng-template #subtitle>\n <ng-container *ngTemplateOutlet=\"subtitleView;context:{ $implicit: user ?? group }\">\n </ng-container>\n </ng-template>\n </div>\n </cometchat-list-item>\n </div>\n<div class=\"cc-calldetails_primary-section\" *ngIf=\"!data || data.length == 0\">\n <cometchat-call-buttons [user]=\"user\" [group]=\"group\" [callButtonsStyle]=\"callButtonsConfiguration.callButtonsStyle\" [onVideoCallClick]=\"callButtonsConfiguration.onVideoCallClick\" [onVoiceCallClick]=\"callButtonsConfiguration.onVoiceCallClick\" [videoCallIconURL]=\"callButtonsConfiguration.videoCallIconURL\" [voiceCallIconURL]=\"callButtonsConfiguration.voiceCallIconURL\" ></cometchat-call-buttons>\n\n</div>\n<div class=\"cc-details__section-list\" *ngIf=\"data && data.length > 0\">\n <div class=\"cc-details__section\" *ngFor=\"let item of data\" >\n <div class=\"cc-details__section-separator\" *ngIf=\"item.title\">\n <cometchat-label [text]=\"item.title\" [labelStyle]=\"showDataSectionStyle(item)\"></cometchat-label>\n </div>\n <div class=\"cc-details__options-wrapper\" *ngIf=\"getTemplateOptions(item)\">\n<div class=\"cc-details__options\"*ngFor=\"let option of getTemplateOptions(item)\" >\n<div class=\"cc-details__option\" *ngIf=\"!getCustomOptionView(option);else customView\">\n <div class=\"cc-details__option-title\" >\n <cometchat-button [text]=\"option.title\" [buttonStyle]=\"getButtonStyle(option)\"></cometchat-button>\n <div class=\"cc-details__option-tail\" *ngIf=\"option?.tail\">\n <ng-container *ngTemplateOutlet=\"option?.tail\"></ng-container>\n </div>\n </div>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n</div>\n<ng-template #customView>\n <ng-container *ngTemplateOutlet=\"getCustomOptionView(option)\" >\n </ng-container>\n</ng-template>\n</div>\n </div>\n </div>\n</div>\n</div>\n</div>\n<ng-template #listitem>\n <ng-container *ngTemplateOutlet=\"customProfileView\">\n </ng-container>\n</ng-template>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-details__wrapper{padding:8px;border-radius:5px;height:100%;min-height:220px}.cc-details__profile{margin-bottom:16px;height:8%}.cc-calldetails_primary-section{height:84%;width:100%;overflow-y:auto;overflow-x:hidden;margin-left:24px;margin-bottom:24px}.cc-details__header{display:flex;justify-content:center;align-items:center;margin-bottom:30px}.cc-details__close-button{position:absolute;right:20px}.cc-details__section{margin-bottom:32px}.cc-details__section-separator{margin-bottom:16px;height:5%}.cc-details__options{margin:8px 0;display:flex;flex-direction:row;gap:10px;align-items:center}.cc-calldetails__date-container{margin:8px 0}.cc-details__option{display:flex;flex-direction:row;justify-content:flex-start;gap:16px;align-items:center}.cc-details__option-title{padding-bottom:12px;display:flex;align-items:center;justify-content:space-between}.cc-details__view{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-details__leavedialog,.cc-details__transferownership{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:-moz-fit-content;height:fit-content;width:100%;z-index:2}\n"], components: [{ type: i2.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
412
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatCallDetailsComponent, decorators: [{
413
- type: Component,
414
- args: [{ selector: "cometchat-call-details", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-details__wrapper\" *ngIf=\"user || group\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-details__header\">\n <cometchat-label [text]=\"title\" [labelStyle]=\"getTitleStyle()\"></cometchat-label>\n <cometchat-button [iconURL]=\"closeButtonIconURL\" class=\"cc-details__close-button\" [buttonStyle]=\"closeButtonStyle\" (cc-button-clicked)=\"onCloseDetails()\"></cometchat-button>\n </div>\n<div class=\"cc-details\" [ngStyle]=\"marginStyle()\">\n <div class=\"cc-details__profile\" *ngIf=\"!hideProfile\">\n <cometchat-list-item *ngIf=\"!customProfileView;else listitem\" [avatarName]=\"user?.getName() ?? this.group?.getName()\" [avatarURL]=\"this.user?.getAvatar() ?? this.group?.getIcon()\" [listItemStyle]=\"listItemStyle\"\n [statusIndicatorColor]=\"checkStatusType()\" [statusIndicatorIcon]=\"checkGroupType()\" [title]=\"this.user?.getName() ?? this.group?.getName()\" [hideSeparator]=\"false\"\n [statusIndicatorStyle]=\"statusIndicatorStyle\" [avatarStyle]=\"avatarStyle\">\n <div slot=\"subtitleView\">\n <div *ngIf=\"!subtitleView; else subtitle\">\n <cometchat-label [text]=\"subtitleText\" [labelStyle]=\"subtitleStyle()\">\n </cometchat-label>\n </div>\n <ng-template #subtitle>\n <ng-container *ngTemplateOutlet=\"subtitleView;context:{ $implicit: user ?? group }\">\n </ng-container>\n </ng-template>\n </div>\n </cometchat-list-item>\n </div>\n<div class=\"cc-calldetails_primary-section\" *ngIf=\"!data || data.length == 0\">\n <cometchat-call-buttons [user]=\"user\" [group]=\"group\" [callButtonsStyle]=\"callButtonsConfiguration.callButtonsStyle\" [onVideoCallClick]=\"callButtonsConfiguration.onVideoCallClick\" [onVoiceCallClick]=\"callButtonsConfiguration.onVoiceCallClick\" [videoCallIconURL]=\"callButtonsConfiguration.videoCallIconURL\" [voiceCallIconURL]=\"callButtonsConfiguration.voiceCallIconURL\" ></cometchat-call-buttons>\n\n</div>\n<div class=\"cc-details__section-list\" *ngIf=\"data && data.length > 0\">\n <div class=\"cc-details__section\" *ngFor=\"let item of data\" >\n <div class=\"cc-details__section-separator\" *ngIf=\"item.title\">\n <cometchat-label [text]=\"item.title\" [labelStyle]=\"showDataSectionStyle(item)\"></cometchat-label>\n </div>\n <div class=\"cc-details__options-wrapper\" *ngIf=\"getTemplateOptions(item)\">\n<div class=\"cc-details__options\"*ngFor=\"let option of getTemplateOptions(item)\" >\n<div class=\"cc-details__option\" *ngIf=\"!getCustomOptionView(option);else customView\">\n <div class=\"cc-details__option-title\" >\n <cometchat-button [text]=\"option.title\" [buttonStyle]=\"getButtonStyle(option)\"></cometchat-button>\n <div class=\"cc-details__option-tail\" *ngIf=\"option?.tail\">\n <ng-container *ngTemplateOutlet=\"option?.tail\"></ng-container>\n </div>\n </div>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n</div>\n<ng-template #customView>\n <ng-container *ngTemplateOutlet=\"getCustomOptionView(option)\" >\n </ng-container>\n</ng-template>\n</div>\n </div>\n </div>\n</div>\n</div>\n</div>\n<ng-template #listitem>\n <ng-container *ngTemplateOutlet=\"customProfileView\">\n </ng-container>\n</ng-template>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-details__wrapper{padding:8px;border-radius:5px;height:100%;min-height:220px}.cc-details__profile{margin-bottom:16px;height:8%}.cc-calldetails_primary-section{height:84%;width:100%;overflow-y:auto;overflow-x:hidden;margin-left:24px;margin-bottom:24px}.cc-details__header{display:flex;justify-content:center;align-items:center;margin-bottom:30px}.cc-details__close-button{position:absolute;right:20px}.cc-details__section{margin-bottom:32px}.cc-details__section-separator{margin-bottom:16px;height:5%}.cc-details__options{margin:8px 0;display:flex;flex-direction:row;gap:10px;align-items:center}.cc-calldetails__date-container{margin:8px 0}.cc-details__option{display:flex;flex-direction:row;justify-content:flex-start;gap:16px;align-items:center}.cc-details__option-title{padding-bottom:12px;display:flex;align-items:center;justify-content:space-between}.cc-details__view{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-details__leavedialog,.cc-details__transferownership{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:-moz-fit-content;height:fit-content;width:100%;z-index:2}\n"] }]
415
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { group: [{
416
- type: Input
417
- }], user: [{
418
- type: Input
419
- }], title: [{
420
- type: Input
421
- }], closeButtonIconURL: [{
422
- type: Input
423
- }], hideProfile: [{
424
- type: Input
425
- }], subtitleView: [{
426
- type: Input
427
- }], customProfileView: [{
428
- type: Input
429
- }], disableUsersPresence: [{
430
- type: Input
431
- }], privateGroupIcon: [{
432
- type: Input
433
- }], protectedGroupIcon: [{
434
- type: Input
435
- }], onError: [{
436
- type: Input
437
- }], data: [{
438
- type: Input
439
- }], onClose: [{
440
- type: Input
441
- }], statusIndicatorStyle: [{
442
- type: Input
443
- }], avatarStyle: [{
444
- type: Input
445
- }], callDetailsStyle: [{
446
- type: Input
447
- }], callButtonsConfiguration: [{
448
- type: Input
449
- }], listItemStyle: [{
450
- type: Input
451
- }] } });
452
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNhbGwtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NhbGxzL0NvbWV0Q2hhdENhbGxEZXRhaWxzL2NvbWV0Y2hhdC1jYWxsLWRldGFpbHMvY29tZXRjaGF0LWNhbGwtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NhbGxzL0NvbWV0Q2hhdENhbGxEZXRhaWxzL2NvbWV0Y2hhdC1jYWxsLWRldGFpbHMvY29tZXRjaGF0LWNhbGwtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCx1QkFBdUIsR0FLeEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTywyQkFBMkIsQ0FBQTtBQUNsQyxPQUFPLEVBQUMsV0FBVyxFQUFZLGFBQWEsR0FBRyxNQUFPLDJCQUEyQixDQUFBO0FBQ2pGLE9BQU8sRUFBSyxZQUFZLEVBQTZDLHdCQUF3QixHQUFHLE1BQU0seUJBQXlCLENBQUM7QUFDaEksT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQXVJLE1BQU0sNEJBQTRCLENBQUE7QUFDclAsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7OztBQUM3RTs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTyw2QkFBNkI7SUE2RnhDLFlBQW9CLEdBQXFCLEVBQVMsWUFBa0M7UUFBaEUsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBUyxpQkFBWSxHQUFaLFlBQVksQ0FBc0I7UUExRjNFLFVBQUssR0FBVyxRQUFRLENB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QUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUMxRSxpQkFBaUIsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ2hFLE9BQU8sRUFBQyxTQUFTO1NBQ2xCLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFDLEdBQUcsWUFBWSxFQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFDLENBQUE7SUFDcEUsQ0FBQzs7MkhBaFlVLDZCQUE2QjsrR0FBN0IsNkJBQTZCLG1wQkNqQzFDLGlxR0F1RGM7NEZEdEJELDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU07NElBR3RDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFLRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgJ0Bjb21ldGNoYXQvdWlraXQtZWxlbWVudHMnXG5pbXBvcnQge0F2YXRhclN0eWxlLCBEYXRlU3R5bGUsTGlzdEl0ZW1TdHlsZSwgfSBmcm9tICAnQGNvbWV0Y2hhdC91aWtpdC1lbGVtZW50cydcbmltcG9ydCB7ICAgIERldGFpbHNTdHlsZSwgQmFzZVN0eWxlLCBDYWxsQnV0dG9uc1N0eWxlLCBEYXRlUGF0dGVybnMsIENhbGxCdXR0b25zQ29uZmlndXJhdGlvbiwgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWRcIjtcbmltcG9ydCB7IGZvbnRIZWxwZXIsIGxvY2FsaXplLCBDb21ldENoYXRHcm91cEV2ZW50cywgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsIElHcm91cE1lbWJlckFkZGVkLCBJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQsIElHcm91cE1lbWJlckpvaW5lZCwgSU93bmVyc2hpcENoYW5nZWQsIENvbWV0Q2hhdERldGFpbHNPcHRpb24sIENvbWV0Q2hhdERldGFpbHNUZW1wbGF0ZX0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXMnXG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC1wcm8vY2hhdFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbi8qKlxuKlxuKiBDb21ldENoYXRDYWxsRGV0YWlsc0NvbXBvbmVudCByZW5kZXJzIGRldGFpbHMgb2YgdXNlciBvciBncm91cC5cbipcbiogQHZlcnNpb24gMS4wLjBcbiogQGF1dGhvciBDb21ldENoYXRUZWFtXG4qIEBjb3B5cmlnaHQgwqkgMjAyMiBDb21ldENoYXQgSW5jLlxuKlxuKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb21ldGNoYXQtY2FsbC1kZXRhaWxzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vY29tZXRjaGF0LWNhbGwtZGV0YWlscy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vY29tZXRjaGF0LWNhbGwtZGV0YWlscy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbWV0Q2hhdENhbGxEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMgIHtcbiAgQElucHV0KCkgZ3JvdXAhOiBDb21ldENoYXQuR3JvdXA7XG4gIEBJbnB1dCgpIHVzZXIhOiBDb21ldENoYXQuVXNlcjtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGxvY2FsaXplKFwiQ0FMTF9ERVRBSUxTXCIpO1xuICBASW5wdXQoKSBjbG9zZUJ1dHRvbkljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL2Nsb3NlMnguc3ZnXCI7XG4gIEBJbnB1dCgpIGhpZGVQcm9maWxlOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VidGl0bGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgY3VzdG9tUHJvZmlsZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBkaXNhYmxlVXNlcnNQcmVzZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwcml2YXRlR3JvdXBJY29uOnN0cmluZyA9XCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgQElucHV0KCkgcHJvdGVjdGVkR3JvdXBJY29uOnN0cmluZyA9IFwiYXNzZXRzL0xvY2tlZC5zdmdcIjtcbiAgQElucHV0KCkgb25FcnJvcjooKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB2b2lkKSB8IG51bGwgPSAoZXJyb3I6Q29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbik9PntcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgfVxuICBASW5wdXQoKSBkYXRhOkNvbWV0Q2hhdERldGFpbHNUZW1wbGF0ZVtdID0gW11cbiAgQElucHV0KCkgb25DbG9zZSE6KCk9PnZvaWQ7XG4gIEBJbnB1dCgpIHN0YXR1c0luZGljYXRvclN0eWxlOiBhbnkgPSB7XG4gICAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgICB3aWR0aDogXCIxMHB4XCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIixcbiAgICBib3JkZXI6XCJcIlxuICB9O1xuICBASW5wdXQoKSBhdmF0YXJTdHlsZTogQXZhdGFyU3R5bGUgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIixcbiAgICB3aWR0aDogXCIyOHB4XCIsXG4gICAgaGVpZ2h0OiBcIjI4cHhcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICB9O1xuICBASW5wdXQoKSBjYWxsRGV0YWlsc1N0eWxlOiBEZXRhaWxzU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgcGFkZGluZzpcIjAgMTAwcHhcIlxuICB9O1xuICBASW5wdXQoKSBjYWxsQnV0dG9uc0NvbmZpZ3VyYXRpb246Q2FsbEJ1dHRvbnNDb25maWd1cmF0aW9uID0gbmV3IENhbGxCdXR0b25zQ29uZmlndXJhdGlvbih7fSlcbiAgQElucHV0KCkgbGlzdEl0ZW1TdHlsZTogTGlzdEl0ZW1TdHlsZSA9IHtcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBiYWNrZ3JvdW5kOiBcIlwiLFxuICAgIGFjdGl2ZUJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiZ3JleVwiLFxuICAgIHRpdGxlRm9udDogXCI2MDAgMTVweCBJbnRlclwiLFxuICAgIHRpdGxlQ29sb3I6IFwiYmxhY2tcIixcbiAgICBib3JkZXI6IFwiXCIsXG4gICAgaG92ZXJCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgc2VwYXJhdG9yQ29sb3I6IFwicmdiKDIyMiAyMjIgMjIyIC8gNDYlKVwiXG4gIH07XG5wdWJsaWMgbWVzc2FnZXNMaXN0OkNvbWV0Q2hhdC5DYWxsW10gPSBbXVxuICBwdWJsaWMgbG9nZ2VkSW5Vc2VyOkNvbWV0Q2hhdC5Vc2VyIHwgbnVsbCA9IG51bGw7XG4gIGNjR3JvdXBNZW1iZXJBZGRlZCE6U3Vic2NyaXB0aW9uO1xuICBjY0dyb3VwTWVtYmVySm9pbmVkITpTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJLaWNrZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cE1lbWJlckJhbm5lZCE6U3Vic2NyaXB0aW9uO1xuICBjY093bmVyc2hpcENoYW5nZWQhOlN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHN0YXR1c0NvbG9yOiBhbnkgPSB7XG4gICAgcHJpdmF0ZTogXCJcIixcbiAgICBwYXNzd29yZDogXCIjRjdBNTAwXCIsXG4gICAgcHVibGljOiBcIlwiXG4gIH1cbiAgY2xvc2VCdXR0b25TdHlsZTphbnkgPXtcbiAgICBoZWlnaHQ6XCIyNHB4XCIsXG4gICAgd2lkdGg6XCIyNHB4XCIsXG4gICAgYm9yZGVyOlwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czpcIjBcIixcbiAgICBiYWNrZ3JvdW5kOlwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25JY29uVGludDp0aGlzLmNhbGxEZXRhaWxzU3R5bGUuY2xvc2VCdXR0b25JY29uVGludCB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKVxuICB9XG4gIGJ1dHRvblN0eWxlOmFueSA9e1xuICAgIGhlaWdodDpcIjEwMCVcIixcbiAgICB3aWR0aDpcIjEwMCVcIixcbiAgICBib3JkZXI6XCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOlwiMFwiLFxuICAgIGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCkgfHwgXCJyZ2JhKDUxLCAxNTMsIDI1NSlcIixcbiAgICBidXR0b25UZXh0Rm9udDogXCI1MDAgMTZweCBJbnRlclwiXG4gIH1cbiAgZGl2aWRlclN0eWxlOmFueSA9IHtcbiAgICBiYWNrZ3JvdW5kOlwicmdiKDIyMiAyMjIgMjIyIC8gNDYlKVwiLFxuICAgIGhlaWdodDpcIjFweFwiLFxuICAgIHdpZHRoOlwiMTAwJVwiXG4gIH1cbi8vXG4gIGdldFRpdGxlU3R5bGUgKCl7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHRGb250OiB0aGlzLmNhbGxEZXRhaWxzU3R5bGUudGl0bGVUZXh0Rm9udCB8fCBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIHRleHRDb2xvcjogdGhpcy5jYWxsRGV0YWlsc1N0eWxlLnRpdGxlVGV4dENvbG9yIHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KClcbiAgICB9XG4gIH1cbiAgcHVibGljIHN1YnRpdGxlVGV4dDpzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdXNlckxpc3RlbmVySWQgPSBcInVzZXJsaXN0X1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIHB1YmxpYyByZXF1ZXN0QnVpbGRlcjogYW55O1xuICBwdWJsaWMgbGltaXQ6bnVtYmVyID0gNTtcbiAgdHlwZXM6IHN0cmluZ1tdID0gW107XG4gIGNhdGVnb3JpZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOkNoYW5nZURldGVjdG9yUmVmLHByaXZhdGUgdGhlbWVTZXJ2aWNlOkNvbWV0Q2hhdFRoZW1lU2VydmljZSl7fVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYoY2hhbmdlc1tcInVzZXJcIl0gfHwgY2hhbmdlc1tcImdyb3VwXCJdKXtcblxuICAgICAgdGhpcy51cGRhdGVTdWJ0aXRsZSgpXG4gICAgfVxuICB9XG4gIHJlbW92ZUxpc3RlbmVyKCl7XG4gICAgQ29tZXRDaGF0LnJlbW92ZVVzZXJMaXN0ZW5lcih0aGlzLnVzZXJMaXN0ZW5lcklkKVxuICB9XG4gIG5nT25EZXN0cm95KCl7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcigpO1xuICAgaWYodGhpcy5vbkNsb3NlKXtcbiAgICB0aGlzLm9uQ2xvc2UoKVxuICAgfVxuIHRoaXMudW5zdWJzY3JpYmVUb0V2ZW50cygpXG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRUaGVtZVN0eWxlKClcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKClcbiAgICB0aGlzLnN0YXR1c0NvbG9yLm9ubGluZSA9IHRoaXMuY2FsbERldGFpbHNTdHlsZS5vbmxpbmVTdGF0dXNDb2xvciB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFN1Y2Nlc3MoKVxuICAgIHRoaXMuYXR0YWNoTGlzdGVuZXJzKClcbiAgICB0aGlzLnVwZGF0ZVN1YnRpdGxlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0d28gZGF0ZXMgYW5kIHNldHMgRGF0ZSBvbiBhIGEgbmV3IGRheVxuICAgKi9cbiAgLyoqXG4gICAqIEBwYXJhbSAge251bWJlcn0gZmlyc3REYXRlXG4gICAqIEBwYXJhbSAge251bWJlcn0gc2Vjb25kRGF0ZVxuICAgKi9cbiAgaXNEYXRlRGlmZmVyZW50KGZpcnN0RGF0ZTogbnVtYmVyIHwgdW5kZWZpbmVkLCBzZWNvbmREYXRlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICBsZXQgZmlyc3REYXRlT2JqOiBEYXRlLCBzZWNvbmREYXRlT2JqOiBEYXRlO1xuICAgIGZpcnN0RGF0ZU9iaiA9IG5ldyBEYXRlKGZpcnN0RGF0ZSEgKiAxMDAwKTtcbiAgICBzZWNvbmREYXRlT2JqID0gbmV3IERhdGUoc2Vjb25kRGF0ZSEgKiAxMDAwKTtcbiAgICByZXR1cm4gZmlyc3REYXRlT2JqLmdldERhdGUoKSAhPT0gc2Vjb25kRGF0ZU9iai5nZXREYXRlKCkgfHxcbiAgICAgIGZpcnN0RGF0ZU9iai5nZXRNb250aCgpICE9PSBzZWNvbmREYXRlT2JqLmdldE1vbnRoKCkgfHxcbiAgICAgIGZpcnN0RGF0ZU9iai5nZXRGdWxsWWVhcigpICE9PSBzZWNvbmREYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gIH1cbiAgc3Vic2NyaWJlVG9FdmVudHMoKXtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJBZGRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJBZGRlZC5zdWJzY3JpYmUoKGl0ZW06SUdyb3VwTWVtYmVyQWRkZWQpPT57IHRoaXMuZ3JvdXAgPSBpdGVtPy51c2VyQWRkZWRJbiE7XG4gICAgICB0aGlzLmdyb3VwID0gaXRlbT8udXNlckFkZGVkSW4hXG4gICAgICB0aGlzLnVwZGF0ZVN1YnRpdGxlKClcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVySm9pbmVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckpvaW5lZC5zdWJzY3JpYmUoKGl0ZW06SUdyb3VwTWVtYmVySm9pbmVkKT0+e1xuICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LmpvaW5lZEdyb3VwO1xuICAgICAgdGhpcy51cGRhdGVTdWJ0aXRsZSgpXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9KTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJLaWNrZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyS2lja2VkLnN1YnNjcmliZSgoaXRlbTpJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQpPT57XG4gICAgICB0aGlzLmdyb3VwID0gaXRlbT8ua2lja2VkRnJvbSE7XG4gICAgICB0aGlzLnVwZGF0ZVN1YnRpdGxlKClcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH0pO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckJhbm5lZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJCYW5uZWQuc3Vic2NyaWJlKChpdGVtOklHcm91cE1lbWJlcktpY2tlZEJhbm5lZCk9PntcbiAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5raWNrZWRGcm9tITtcbiAgICAgIHRoaXMudXBkYXRlU3VidGl0bGUoKVxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSk7XG4gICAgdGhpcy5jY093bmVyc2hpcENoYW5nZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY093bmVyc2hpcENoYW5nZWQuc3Vic2NyaWJlKChpdGVtOklPd25lcnNoaXBDaGFuZ2VkKT0+e1xuICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/Lmdyb3VwITtcbiAgICAgIHRoaXMudXBkYXRlU3VidGl0bGUoKTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuICB1bnN1YnNjcmliZVRvRXZlbnRzKCl7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQWRkZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVySm9pbmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlcktpY2tlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJCYW5uZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY093bmVyc2hpcENoYW5nZWQ/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgY2hlY2tTdGF0dXNUeXBlID0gKCk9PiB7XG4gICAgcmV0dXJuICAgdGhpcy51c2VyICYmICF0aGlzLmRpc2FibGVVc2Vyc1ByZXNlbmNlID8gdGhpcy5zdGF0dXNDb2xvclt0aGlzLnVzZXI/LmdldFN0YXR1cygpXSA6IHRoaXMuc3RhdHVzQ29sb3JbdGhpcy5ncm91cD8uZ2V0VHlwZSgpXVxuICB9XG4gIHVwZGF0ZVN1YnRpdGxlKCkge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5ncm91cD8uZ2V0TWVtYmVyc0NvdW50KCk7XG4gICAgY29uc3QgbWVtYmVyc1RleHQgPSBsb2NhbGl6ZShjb3VudCA+IDEgPyBcIk1FTUJFUlNcIiA6IFwiTUVNQkVSXCIpO1xuICAgIHRoaXMuc3VidGl0bGVUZXh0ID0gdGhpcy51c2VyID8gdGhpcy51c2VyLmdldFN0YXR1cygpIDogYCR7Y291bnR9ICR7bWVtYmVyc1RleHR9YDtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgZ2V0QnV0dG9uU3R5bGUob3B0aW9uOkNvbWV0Q2hhdERldGFpbHNPcHRpb24pe1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6XCIxMDAlXCIsXG4gICAgICB3aWR0aDpcIjEwMCVcIixcbiAgICAgIGJvcmRlcjpcIm5vbmVcIixcbiAgICAgIGJvcmRlclJhZGl1czpcIjBcIixcbiAgICAgIGJ1dHRvblRleHRGb250Om9wdGlvbj8udGl0bGVGb250LFxuICAgICAgYnV0dG9uVGV4dENvbG9yOm9wdGlvbj8udGl0bGVDb2xvcixcbiAgICAgIGJhY2tncm91bmQ6b3B0aW9uPy5iYWNrZ3JvdW5kQ29sb3IgfHwgXCJ0cmFuc3BhcmVudFwiXG4gICAgfVxuICB9XG4gIGNoZWNrR3JvdXBUeXBlKCk6IHN0cmluZyB7XG4gICAgbGV0IGltYWdlOiBzdHJpbmcgPSBcIlwiO1xuICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuZ3JvdXA/LmdldFR5cGUoKSkge1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLkdyb3VwVHlwZXMucGFzc3dvcmQ6XG4gICAgICAgICAgaW1hZ2UgPSB0aGlzLnByb3RlY3RlZEdyb3VwSWNvbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Hcm91cFR5cGVzLnByaXZhdGU6XG4gICAgICAgICAgaW1hZ2UgPSB0aGlzLnByaXZhdGVHcm91cEljb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaW1hZ2UgPSBcIlwiXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbWFnZVxuICB9XG4gIHVwZGF0ZVVzZXJTdGF0dXModXNlcjpDb21ldENoYXQuVXNlcil7XG4gICAgaWYgKHRoaXMudXNlciAmJiB0aGlzLnVzZXIuZ2V0VWlkKCkgJiYgdGhpcy51c2VyLmdldFVpZCgpID09PSB1c2VyLmdldFVpZCgpKSB7XG4gICAgICB0aGlzLnVzZXIuc2V0U3RhdHVzKHVzZXIuZ2V0U3RhdHVzKCkpO1xuICAgICAgdGhpcy51cGRhdGVTdWJ0aXRsZSgpXG4gICAgfVxuICAgIC8vIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBhdHRhY2hMaXN0ZW5lcnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmKCF0aGlzLmRpc2FibGVVc2Vyc1ByZXNlbmNlKXtcbiAgICAgICAgQ29tZXRDaGF0LmFkZFVzZXJMaXN0ZW5lcihcbiAgICAgICAgICB0aGlzLnVzZXJMaXN0ZW5lcklkLFxuICAgICAgICAgIG5ldyBDb21ldENoYXQuVXNlckxpc3RlbmVyKHtcbiAgICAgICAgICAgIG9uVXNlck9ubGluZTogKG9ubGluZVVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgICAgICAgIC8qIHdoZW4gc29tZXVzZXIvZnJpZW5kIGNvbWVzIG9ubGluZSwgdXNlciB3aWxsIGJlIHJlY2VpdmVkIGhlcmUgKi9cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVVc2VyU3RhdHVzKG9ubGluZVVzZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVXNlck9mZmxpbmU6IChvZmZsaW5lVXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgICAgICAgLyogd2hlbiBzb21ldXNlci9mcmllbmQgd2VudCBvZmZsaW5lLCB1c2VyIHdpbGwgYmUgcmVjZWl2ZWQgaGVyZSAqL1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJTdGF0dXMoIG9mZmxpbmVVc2VyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjphbnkpIHtcbmlmKHRoaXMub25FcnJvcil7XG4gIHRoaXMub25FcnJvcihDb21ldENoYXRFeGNlcHRpb24oZXJyb3IpKVxufVxuICAgIH1cbiAgfVxuXG4gIGdldFNlY3Rpb25IZWFkZXJTdHlsZSgpe1xuICAgIHJldHVybiAge1xuICAgICAgdGV4dEZvbnQ6XCI1MDAgMTVweCBJbnRlclwiLFxuICAgICAgdGV4dENvbG9yOlwibGlnaHRncmV5XCJcbiAgICB9XG4gIH1cbiAgZ2V0Q2FsbFN0YXR1c1N0eWxlU3R5bGUoKXtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dEZvbnQ6XCI0MDAgMTVweCBJbnRlclwiLFxuICAgICAgdGV4dENvbG9yOlwiYmxhY2tcIlxuICAgIH1cbiAgfVxuICBnZXREYXRlU3R5bGUoKXtcbiAgICByZXR1cm4gIHtcbiAgICAgIHRleHRGb250OlwiNDAwIDE1cHggSW50ZXJcIixcbiAgICAgIHRleHRDb2xvcjpcImxpZ2h0Z3JleVwiXG4gICAgfVxuICB9XG4gIG9uQ2xvc2VDbGljayA9KCk9PntcbiAgICBpZih0aGlzLm9uQ2xvc2Upe1xuICAgICAgdGhpcy5vbkNsb3NlKClcbiAgICB9XG4gIH1cbiAgIG9uQ2xvc2VEZXRhaWxzKCl7XG4gICAgIGlmKHRoaXMub25DbG9zZSl7XG4gICAgICAgdGhpcy5vbkNsb3NlKClcbiAgICAgfVxuICAgfVxuICBzdWJ0aXRsZVN0eWxlID0gKCk9PntcbiBpZih0aGlzLnVzZXIgJiYgdGhpcy51c2VyLmdldFN0YXR1cygpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLnVzZXJTdGF0dXNUeXBlLm9ubGluZSl7XG4gIHJldHVybntcbiAgICB0ZXh0Rm9udDp0aGlzLmNhbGxEZXRhaWxzU3R5bGUuc3VidGl0bGVUZXh0Rm9udCxcbiAgICB0ZXh0Q29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KClcbiAgfVxuIH1cbiBlbHNle1xuICByZXR1cm57XG4gICAgdGV4dEZvbnQ6dGhpcy5jYWxsRGV0YWlsc1N0eWxlLnN1YnRpdGxlVGV4dEZvbnQsXG4gICAgdGV4dENvbG9yOnRoaXMuY2FsbERldGFpbHNTdHlsZS5zdWJ0aXRsZVRleHRDb2xvclxuICB9XG4gfVxuICB9XG4gICAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5Hcm91cH0gZ3JvdXBcbiAgICovXG4gICAgIGdldEdyb3VwSWNvbiA9IChncm91cDogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICBsZXQgc3RhdHVzO1xuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIHN3aXRjaCAoZ3JvdXAuZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Hcm91cFR5cGVzLnBhc3N3b3JkOlxuICAgICAgICAgICAgc3RhdHVzID0gdGhpcy5wcm90ZWN0ZWRHcm91cEljb247XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLkdyb3VwVHlwZXMucHJpdmF0ZTpcbiAgICAgICAgICAgIHN0YXR1cyA9IHRoaXMucHJpdmF0ZUdyb3VwSWNvbjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzdGF0dXMgPSBudWxsXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXR1c1xuICAgIH1cbiAgICAgIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuR3JvdXB9IGdyb3VwXG4gICAqL1xuICAgZ2V0U3RhdHVzSW5kaWNhdG9yQ29sb3IoZ3JvdXA6IENvbWV0Q2hhdC5Hcm91cCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0NvbG9yWyhncm91cD8uZ2V0VHlwZSgpIGFzIHN0cmluZyldO1xuICB9XG4gIGdldFRlbXBsYXRlT3B0aW9ucyA9ICh0ZW1wbGF0ZTpDb21ldENoYXREZXRhaWxzVGVtcGxhdGUpPT57XG4gICAgaWYodGVtcGxhdGUub3B0aW9ucyl7XG4gICAgICByZXR1cm4gdGVtcGxhdGUub3B0aW9ucyh0aGlzLnVzZXIsdGhpcy5ncm91cCx0ZW1wbGF0ZS5pZCBhcyBzdHJpbmcpXG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIFtdXG4gIH1cbiAgZ2V0Q3VzdG9tT3B0aW9uVmlldyhvcHRpb246Q29tZXRDaGF0RGV0YWlsc09wdGlvbil7XG4gICAgcmV0dXJuIG9wdGlvbj8uY3VzdG9tVmlld1xuICAgIH1cbiAgICBzaG93RGF0YVNlY3Rpb25TdHlsZSh0ZW1wbGF0ZTpDb21ldENoYXREZXRhaWxzVGVtcGxhdGUpe1xuICAgICAgcmV0dXJuICB7XG4gICAgICAgIHRleHRGb250OnRlbXBsYXRlLnRpdGxlRm9udCxcbiAgICAgICAgdGV4dENvbG9yOnRlbXBsYXRlLnRpdGxlQ29sb3JcbiAgICAgIH1cbiAgICB9XG4gIHNldFRoZW1lU3R5bGUoKSB7XG4gICAgdGhpcy5zZXREZXRhaWxzU3R5bGUoKVxuICAgIHRoaXMuc2V0QXZhdGFyU3R5bGUoKVxuICAgIHRoaXMuc2V0U3RhdHVzU3R5bGUoKVxuICAgIHRoaXMuc2V0TGlzdEl0ZW1TdHlsZSgpO1xuICAgIHRoaXMuc3RhdHVzQ29sb3IucHJpdmF0ZSA9ICB0aGlzLmNhbGxEZXRhaWxzU3R5bGUucHJpdmF0ZUdyb3VwSWNvbkJhY2tncm91bmQgO1xuICAgIHRoaXMuc3RhdHVzQ29sb3Iub25saW5lID0gdGhpcy5jYWxsRGV0YWlsc1N0eWxlLm9ubGluZVN0YXR1c0NvbG9yIDtcbiAgICB0aGlzLnN0YXR1c0NvbG9yLnBhc3N3b3JkID0gdGhpcy5jYWxsRGV0YWlsc1N0eWxlLnBhc3N3b3JkR3JvdXBJY29uQmFja2dyb3VuZFxuICB9XG4gIHNldExpc3RJdGVtU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkxpc3RJdGVtU3R5bGUgPSBuZXcgTGlzdEl0ZW1TdHlsZSh7XG4gICAgICBoZWlnaHQ6IFwiNDVweFwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUyKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgc2VwYXJhdG9yQ29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKSxcbiAgICAgIGhvdmVyQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiXG4gICAgfSlcbiAgICB0aGlzLmxpc3RJdGVtU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMubGlzdEl0ZW1TdHlsZX1cbiAgfVxuICBzZXRBdmF0YXJTdHlsZSgpe1xuICAgIGxldCBkZWZhdWx0U3R5bGU6QXZhdGFyU3R5bGUgPSBuZXcgQXZhdGFyU3R5bGUoe1xuICAgICAgYm9yZGVyUmFkaXVzOiBcIjI0cHhcIixcbiAgICAgIHdpZHRoOiBcIjM2cHhcIixcbiAgICAgIGhlaWdodDogXCIzNnB4XCIsXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgbmFtZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ5MDAoKSxcbiAgICAgIGJhY2tncm91bmRTaXplOiBcImNvdmVyXCIsXG4gICAgICBuYW1lVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgb3V0ZXJWaWV3Qm9yZGVyOiBcIlwiLFxuICAgICAgb3V0ZXJWaWV3Qm9yZGVyU3BhY2luZzogXCJcIixcbiAgICB9KVxuICAgIHRoaXMuYXZhdGFyU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuYXZhdGFyU3R5bGV9XG4gIH1cbiAgc2V0U3RhdHVzU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkJhc2VTdHlsZSA9IHtcbiAgICAgICAgaGVpZ2h0OiBcIjEycHhcIixcbiAgICAgICAgd2lkdGg6XCIxMnB4XCIsXG4gICAgICAgIGJvcmRlcjpcIm5vbmVcIixcbiAgICAgICAgYm9yZGVyUmFkaXVzOlwiMjRweFwiLFxuICAgIH1cbiAgICB0aGlzLnN0YXR1c0luZGljYXRvclN0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLnN0YXR1c0luZGljYXRvclN0eWxlfVxuICB9XG4gIHNldERldGFpbHNTdHlsZSgpe1xuICAgIGxldCBkZWZhdWx0U3R5bGU6RGV0YWlsc1N0eWxlID0gbmV3IERldGFpbHNTdHlsZSh7XG4gICAgICBiYWNrZ3JvdW5kOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYm9yZGVyOmAxcHggc29saWQgJHt0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDUwKCl9YCxcbiAgICAgIHRpdGxlVGV4dEZvbnQ6Zm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICB0aXRsZVRleHRDb2xvcjp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgb25saW5lU3RhdHVzQ29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTdWNjZXNzKCksXG4gICAgICBwcml2YXRlR3JvdXBJY29uQmFja2dyb3VuZDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFN1Y2Nlc3MoKSxcbiAgICAgIHBhc3N3b3JkR3JvdXBJY29uQmFja2dyb3VuZDpcIlJHQigyNDcsIDE2NSwgMClcIixcbiAgICAgIGNsb3NlQnV0dG9uSWNvblRpbnQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIlwiLFxuICAgICAgc3VidGl0bGVUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMiksXG4gICAgICBzdWJ0aXRsZVRleHRDb2xvcjp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgcGFkZGluZzpcIjAgMTAwcHhcIlxuICAgIH0pXG4gICAgdGhpcy5jYWxsRGV0YWlsc1N0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLmNhbGxEZXRhaWxzU3R5bGV9XG4gIH1cbiAgd3JhcHBlclN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5jYWxsRGV0YWlsc1N0eWxlLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmNhbGxEZXRhaWxzU3R5bGUuaGVpZ2h0LFxuICAgICAgYm9yZGVyOiB0aGlzLmNhbGxEZXRhaWxzU3R5bGUuYm9yZGVyLFxuICAgICAgYm9yZGVyUmFkaXVzOnRoaXMuY2FsbERldGFpbHNTdHlsZS5ib3JkZXJSYWRpdXMsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLmNhbGxEZXRhaWxzU3R5bGUuYmFja2dyb3VuZCxcbiAgICB9XG4gIH1cbiAgbWFyZ2luU3R5bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZGRpbmc6dGhpcy5jYWxsRGV0YWlsc1N0eWxlPy5wYWRkaW5nXG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fd3JhcHBlclwiICpuZ0lmPVwidXNlciB8fCBncm91cFwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19oZWFkZXJcIj5cbiAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cInRpdGxlXCIgW2xhYmVsU3R5bGVdPVwiZ2V0VGl0bGVTdHlsZSgpXCI+PC9jb21ldGNoYXQtbGFiZWw+XG4gICAgPGNvbWV0Y2hhdC1idXR0b24gW2ljb25VUkxdPVwiY2xvc2VCdXR0b25JY29uVVJMXCIgY2xhc3M9XCJjYy1kZXRhaWxzX19jbG9zZS1idXR0b25cIiBbYnV0dG9uU3R5bGVdPVwiY2xvc2VCdXR0b25TdHlsZVwiIChjYy1idXR0b24tY2xpY2tlZCk9XCJvbkNsb3NlRGV0YWlscygpXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzXCIgW25nU3R5bGVdPVwibWFyZ2luU3R5bGUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fcHJvZmlsZVwiICpuZ0lmPVwiIWhpZGVQcm9maWxlXCI+XG4gICAgPGNvbWV0Y2hhdC1saXN0LWl0ZW0gKm5nSWY9XCIhY3VzdG9tUHJvZmlsZVZpZXc7ZWxzZSBsaXN0aXRlbVwiIFthdmF0YXJOYW1lXT1cInVzZXI/LmdldE5hbWUoKSA/PyB0aGlzLmdyb3VwPy5nZXROYW1lKClcIiBbYXZhdGFyVVJMXT1cInRoaXMudXNlcj8uZ2V0QXZhdGFyKCkgPz8gdGhpcy5ncm91cD8uZ2V0SWNvbigpXCIgW2xpc3RJdGVtU3R5bGVdPVwibGlzdEl0ZW1TdHlsZVwiXG4gICAgW3N0YXR1c0luZGljYXRvckNvbG9yXT1cImNoZWNrU3RhdHVzVHlwZSgpXCIgW3N0YXR1c0luZGljYXRvckljb25dPVwiY2hlY2tHcm91cFR5cGUoKVwiIFt0aXRsZV09XCJ0aGlzLnVzZXI/LmdldE5hbWUoKSA/PyB0aGlzLmdyb3VwPy5nZXROYW1lKClcIiAgW2hpZGVTZXBhcmF0b3JdPVwiZmFsc2VcIlxuICAgICBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwic3RhdHVzSW5kaWNhdG9yU3R5bGVcIiBbYXZhdGFyU3R5bGVdPVwiYXZhdGFyU3R5bGVcIj5cbiAgIDxkaXYgc2xvdD1cInN1YnRpdGxlVmlld1wiPlxuICAgPGRpdiAqbmdJZj1cIiFzdWJ0aXRsZVZpZXc7IGVsc2Ugc3VidGl0bGVcIj5cbiAgIDxjb21ldGNoYXQtbGFiZWwgW3RleHRdPVwic3VidGl0bGVUZXh0XCIgW2xhYmVsU3R5bGVdPVwic3VidGl0bGVTdHlsZSgpXCI+XG4gICA8L2NvbWV0Y2hhdC1sYWJlbD5cbiAgIDwvZGl2PlxuICAgPG5nLXRlbXBsYXRlICNzdWJ0aXRsZT5cbiAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1YnRpdGxlVmlldztjb250ZXh0OnsgJGltcGxpY2l0OiB1c2VyID8/IGdyb3VwIH1cIj5cbiAgICAgPC9uZy1jb250YWluZXI+XG4gICA8L25nLXRlbXBsYXRlPlxuICAgPC9kaXY+XG4gICA8L2NvbWV0Y2hhdC1saXN0LWl0ZW0+XG4gIDwvZGl2PlxuPGRpdiBjbGFzcz1cImNjLWNhbGxkZXRhaWxzX3ByaW1hcnktc2VjdGlvblwiICpuZ0lmPVwiIWRhdGEgfHwgZGF0YS5sZW5ndGggPT0gMFwiPlxuICA8Y29tZXRjaGF0LWNhbGwtYnV0dG9ucyBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCIgW2NhbGxCdXR0b25zU3R5bGVdPVwiY2FsbEJ1dHRvbnNDb25maWd1cmF0aW9uLmNhbGxCdXR0b25zU3R5bGVcIiBbb25WaWRlb0NhbGxDbGlja109XCJjYWxsQnV0dG9uc0NvbmZpZ3VyYXRpb24ub25WaWRlb0NhbGxDbGlja1wiIFtvblZvaWNlQ2FsbENsaWNrXT1cImNhbGxCdXR0b25zQ29uZmlndXJhdGlvbi5vblZvaWNlQ2FsbENsaWNrXCIgW3ZpZGVvQ2FsbEljb25VUkxdPVwiY2FsbEJ1dHRvbnNDb25maWd1cmF0aW9uLnZpZGVvQ2FsbEljb25VUkxcIiBbdm9pY2VDYWxsSWNvblVSTF09XCJjYWxsQnV0dG9uc0NvbmZpZ3VyYXRpb24udm9pY2VDYWxsSWNvblVSTFwiID48L2NvbWV0Y2hhdC1jYWxsLWJ1dHRvbnM+XG5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImNjLWRldGFpbHNfX3NlY3Rpb24tbGlzdFwiICpuZ0lmPVwiZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDBcIj5cbiAgPGRpdiBjbGFzcz1cImNjLWRldGFpbHNfX3NlY3Rpb25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhXCIgPlxuICAgIDxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19zZWN0aW9uLXNlcGFyYXRvclwiICpuZ0lmPVwiaXRlbS50aXRsZVwiPlxuICAgICAgPGNvbWV0Y2hhdC1sYWJlbCBbdGV4dF09XCJpdGVtLnRpdGxlXCIgW2xhYmVsU3R5bGVdPVwic2hvd0RhdGFTZWN0aW9uU3R5bGUoaXRlbSlcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fb3B0aW9ucy13cmFwcGVyXCIgKm5nSWY9XCJnZXRUZW1wbGF0ZU9wdGlvbnMoaXRlbSlcIj5cbjxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19vcHRpb25zXCIqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdldFRlbXBsYXRlT3B0aW9ucyhpdGVtKVwiID5cbjxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19vcHRpb25cIiAqbmdJZj1cIiFnZXRDdXN0b21PcHRpb25WaWV3KG9wdGlvbik7ZWxzZSBjdXN0b21WaWV3XCI+XG4gIDxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19vcHRpb24tdGl0bGVcIiA+XG4gICAgPGNvbWV0Y2hhdC1idXR0b24gIFt0ZXh0XT1cIm9wdGlvbi50aXRsZVwiIFtidXR0b25TdHlsZV09XCJnZXRCdXR0b25TdHlsZShvcHRpb24pXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19vcHRpb24tdGFpbFwiICpuZ0lmPVwib3B0aW9uPy50YWlsXCI+XG4gPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm9wdGlvbj8udGFpbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGNvbWV0Y2hhdC1kaXZpZGVyIFtkaXZpZGVyU3R5bGVdPVwiZGl2aWRlclN0eWxlXCI+PC9jb21ldGNoYXQtZGl2aWRlcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjdXN0b21WaWV3PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRDdXN0b21PcHRpb25WaWV3KG9wdGlvbilcIiA+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNsaXN0aXRlbT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVByb2ZpbGVWaWV3XCI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -1,31 +0,0 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core";
2
- import { CommonModule } from "@angular/common";
3
- import { CometChatCallDetailsComponent } from "./cometchat-call-details/cometchat-call-details.component";
4
- import { CometChatCallButtons } from "../CometChatCallButtons/cometchat-call-buttons.module";
5
- import { CometChatList } from "../../CometChatList/cometchat-list.module";
6
- import * as i0 from "@angular/core";
7
- export class CometChatCallDetails {
8
- }
9
- CometChatCallDetails.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatCallDetails, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- CometChatCallDetails.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatCallDetails, declarations: [CometChatCallDetailsComponent], imports: [CommonModule,
11
- CometChatCallButtons,
12
- CometChatList], exports: [CometChatCallDetailsComponent] });
13
- CometChatCallDetails.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatCallDetails, imports: [[
14
- CommonModule,
15
- CometChatCallButtons,
16
- CometChatList
17
- ]] });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatCallDetails, decorators: [{
19
- type: NgModule,
20
- args: [{
21
- declarations: [CometChatCallDetailsComponent],
22
- imports: [
23
- CommonModule,
24
- CometChatCallButtons,
25
- CometChatList
26
- ],
27
- exports: [CometChatCallDetailsComponent],
28
- schemas: [CUSTOM_ELEMENTS_SCHEMA]
29
- }]
30
- }] });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNhbGwtZGV0YWlscy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NhbGxzL0NvbWV0Q2hhdENhbGxEZXRhaWxzL2NvbWV0Y2hhdC1jYWxsLWRldGFpbHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7QUFZMUUsTUFBTSxPQUFPLG9CQUFvQjs7a0hBQXBCLG9CQUFvQjttSEFBcEIsb0JBQW9CLGlCQVRoQiw2QkFBNkIsYUFFMUMsWUFBWTtRQUNaLG9CQUFvQjtRQUNwQixhQUFhLGFBRUwsNkJBQTZCO21IQUc1QixvQkFBb0IsWUFSdEI7WUFDUCxZQUFZO1lBQ1osb0JBQW9CO1lBQ3BCLGFBQWE7U0FDZDs0RkFJVSxvQkFBb0I7a0JBVmhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsNkJBQTZCLENBQUM7b0JBQzdDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsYUFBYTtxQkFDZDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztvQkFDeEMsT0FBTyxFQUFDLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0Q2FsbERldGFpbHNDb21wb25lbnQgfSBmcm9tIFwiLi9jb21ldGNoYXQtY2FsbC1kZXRhaWxzL2NvbWV0Y2hhdC1jYWxsLWRldGFpbHMuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb21ldENoYXRDYWxsQnV0dG9ucyB9IGZyb20gXCIuLi9Db21ldENoYXRDYWxsQnV0dG9ucy9jb21ldGNoYXQtY2FsbC1idXR0b25zLm1vZHVsZVwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0TGlzdCB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRMaXN0L2NvbWV0Y2hhdC1saXN0Lm1vZHVsZVwiO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtDb21ldENoYXRDYWxsRGV0YWlsc0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ29tZXRDaGF0Q2FsbEJ1dHRvbnMsXG4gICAgQ29tZXRDaGF0TGlzdFxuICBdLFxuICBleHBvcnRzOiBbQ29tZXRDaGF0Q2FsbERldGFpbHNDb21wb25lbnRdLFxuICBzY2hlbWFzOltDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRDYWxsRGV0YWlscyB7fVxuIl19