stream-chat-angular 5.0.0-v5.8 → 5.0.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.
- package/assets/i18n/en.d.ts +1 -0
- package/assets/version.d.ts +1 -1
- package/esm2020/assets/i18n/en.mjs +3 -2
- package/esm2020/assets/version.mjs +2 -2
- package/esm2020/lib/attachment-list/attachment-list.component.mjs +3 -3
- package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +3 -3
- package/esm2020/lib/attachment.service.mjs +103 -7
- package/esm2020/lib/avatar/avatar.component.mjs +3 -9
- package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +3 -11
- package/esm2020/lib/channel/channel.component.mjs +5 -6
- package/esm2020/lib/channel-header/channel-header.component.mjs +3 -3
- package/esm2020/lib/channel-list/channel-list.component.mjs +5 -6
- package/esm2020/lib/channel-preview/channel-preview.component.mjs +3 -3
- package/esm2020/lib/channel-query.mjs +77 -0
- package/esm2020/lib/channel.service.mjs +197 -135
- package/esm2020/lib/chat-client.service.mjs +33 -11
- package/esm2020/lib/custom-templates.service.mjs +6 -10
- package/esm2020/lib/icon/icon.component.mjs +3 -7
- package/esm2020/lib/icon-placeholder/icon-placeholder.component.mjs +4 -7
- package/esm2020/lib/loading-indicator/loading-indicator.component.mjs +6 -22
- package/esm2020/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +5 -23
- package/esm2020/lib/message/message.component.mjs +129 -16
- package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +39 -14
- package/esm2020/lib/message-actions.service.mjs +66 -2
- package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +16 -6
- package/esm2020/lib/message-input/message-input.component.mjs +76 -74
- package/esm2020/lib/message-input/textarea/textarea.component.mjs +13 -1
- package/esm2020/lib/message-list/message-list.component.mjs +83 -15
- package/esm2020/lib/message-reactions/message-reactions.component.mjs +7 -78
- package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +61 -0
- package/esm2020/lib/message-reactions.service.mjs +3 -4
- package/esm2020/lib/modal/modal.component.mjs +1 -1
- package/esm2020/lib/stream-chat.module.mjs +8 -8
- package/esm2020/lib/thread/thread.component.mjs +3 -3
- package/esm2020/lib/types.mjs +1 -1
- package/esm2020/lib/voice-recording/voice-recording.component.mjs +3 -3
- package/esm2020/public-api.mjs +3 -2
- package/fesm2015/stream-chat-angular.mjs +2747 -2338
- package/fesm2015/stream-chat-angular.mjs.map +1 -1
- package/fesm2020/stream-chat-angular.mjs +2687 -2284
- package/fesm2020/stream-chat-angular.mjs.map +1 -1
- package/lib/attachment.service.d.ts +11 -4
- package/lib/avatar/avatar.component.d.ts +1 -5
- package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +1 -5
- package/lib/channel-query.d.ts +26 -0
- package/lib/channel.service.d.ts +86 -57
- package/lib/chat-client.service.d.ts +7 -3
- package/lib/custom-templates.service.d.ts +8 -12
- package/lib/icon/icon.component.d.ts +2 -6
- package/lib/icon-placeholder/icon-placeholder.component.d.ts +1 -5
- package/lib/loading-indicator/loading-indicator.component.d.ts +1 -10
- package/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -11
- package/lib/message/message.component.d.ts +31 -9
- package/lib/message-actions-box/message-actions-box.component.d.ts +11 -6
- package/lib/message-actions.service.d.ts +3 -2
- package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +1 -0
- package/lib/message-input/message-input.component.d.ts +19 -7
- package/lib/message-input/textarea/textarea.component.d.ts +1 -0
- package/lib/message-list/message-list.component.d.ts +11 -6
- package/lib/message-reactions/message-reactions.component.d.ts +6 -30
- package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +35 -0
- package/lib/stream-chat.module.d.ts +5 -5
- package/lib/types.d.ts +28 -29
- package/package.json +5 -5
- package/public-api.d.ts +2 -1
- package/src/assets/assets/EmojiOneColor.woff2 +0 -0
- package/src/assets/assets/NotoColorEmoji-flags.woff2 +0 -0
- package/src/assets/assets/Poweredby_100px-White_VertText.png +0 -0
- package/src/assets/assets/icons/stream-chat-icons.eot +0 -0
- package/src/assets/assets/icons/stream-chat-icons.svg +46 -0
- package/src/assets/assets/icons/stream-chat-icons.ttf +0 -0
- package/src/assets/assets/icons/stream-chat-icons.woff +0 -0
- package/src/assets/assets/icons/stream-chat-icons.woff2 +0 -0
- package/src/assets/assets/str-chat__reaction-list-sprite@1x.png +0 -0
- package/src/assets/assets/str-chat__reaction-list-sprite@2x.png +0 -0
- package/src/assets/assets/str-chat__reaction-list-sprite@3x.png +0 -0
- package/src/assets/i18n/en.ts +2 -1
- package/src/assets/styles/css/index.css +2 -2
- package/src/assets/styles/css/index.layout.css +2 -2
- package/src/assets/styles/scss/AttachmentList/AttachmentList-layout.scss +74 -12
- package/src/assets/styles/scss/AttachmentList/AttachmentList-theme.scss +52 -0
- package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-layout.scss +24 -9
- package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-theme.scss +29 -0
- package/src/assets/styles/scss/AudioRecorder/AudioRecorder-layout.scss +89 -0
- package/src/assets/styles/scss/AudioRecorder/AudioRecorder-theme.scss +51 -0
- package/src/assets/styles/scss/Autocomplete/Autocomplete-layout.scss +1 -1
- package/src/assets/styles/scss/Avatar/Avatar-layout.scss +46 -0
- package/src/assets/styles/scss/Channel/Channel-layout.scss +1 -0
- package/src/assets/styles/scss/Channel/Channel-theme.scss +1 -0
- package/src/assets/styles/scss/ChannelList/ChannelList-layout.scss +2 -2
- package/src/assets/styles/scss/ChannelList/ChannelList-theme.scss +4 -2
- package/src/assets/styles/scss/ChannelPreview/ChannelPreview-layout.scss +2 -0
- package/src/assets/styles/scss/ChannelPreview/ChannelPreview-theme.scss +1 -0
- package/src/assets/styles/scss/EditMessageForm/EditMessageForm-theme.scss +9 -9
- package/src/assets/styles/scss/Icon/Icon-layout.scss +87 -0
- package/src/assets/styles/scss/Icon/Icon-theme.scss +13 -0
- package/src/assets/styles/scss/ImageCarousel/ImageCarousel-layout.scss +1 -0
- package/src/assets/styles/scss/ImageCarousel/ImageCarousel-theme.scss +1 -0
- package/src/assets/styles/scss/LoadingIndicator/LoadingIndicator-layout.scss +10 -1
- package/src/assets/styles/scss/LoadingIndicator/LoadingIndicator-theme.scss +6 -4
- package/src/assets/styles/scss/Message/Message-layout.scss +45 -6
- package/src/assets/styles/scss/Message/Message-theme.scss +6 -0
- package/src/assets/styles/scss/MessageInput/MessageInput-layout.scss +33 -1
- package/src/assets/styles/scss/MessageInput/MessageInput-theme.scss +65 -2
- package/src/assets/styles/scss/MessageList/MessageList-theme.scss +2 -0
- package/src/assets/styles/scss/MessageReactions/MessageReactionsSelector-layout.scss +18 -0
- package/src/assets/styles/scss/MessageReactions/MessageReactionsSelector-theme.scss +5 -0
- package/src/assets/styles/scss/Modal/Modal-layout.scss +1 -0
- package/src/assets/styles/scss/Modal/Modal-theme.scss +6 -0
- package/src/assets/styles/scss/_base.scss +4 -2
- package/src/assets/styles/scss/_emoji-replacement.scss +4 -2
- package/src/assets/styles/scss/_icons.scss +24 -2
- package/src/assets/styles/scss/_variables.scss +2 -0
- package/src/assets/styles/scss/index.layout.scss +2 -0
- package/src/assets/styles/scss/index.scss +2 -0
- package/src/assets/version.ts +1 -1
- package/esm2020/lib/edit-message-form/edit-message-form.component.mjs +0 -83
- package/lib/edit-message-form/edit-message-form.component.d.ts +0 -31
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
.str-chat {
|
|
2
|
+
/* The size of the loading indicator, only available in Angular v5+ */
|
|
3
|
+
--str-chat__loading-indicator-size: calc(var(--str-chat__spacing-px) * 15);
|
|
4
|
+
}
|
|
5
|
+
|
|
2
6
|
.str-chat__loading-indicator {
|
|
3
7
|
display: flex;
|
|
4
8
|
align-items: center;
|
|
5
9
|
justify-content: center;
|
|
6
10
|
animation: rotate 1s linear infinite;
|
|
7
11
|
|
|
12
|
+
svg {
|
|
13
|
+
width: var(--str-chat__loading-indicator-size);
|
|
14
|
+
height: var(--str-chat__loading-indicator-size);
|
|
15
|
+
}
|
|
16
|
+
|
|
8
17
|
@-webkit-keyframes rotate {
|
|
9
18
|
from {
|
|
10
19
|
-webkit-transform: rotate(0deg);
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
.str-chat {
|
|
2
|
+
/* The color of the loading indicator */
|
|
3
|
+
--str-chat__loading-indicator-color: var(--str-chat__primary-color);
|
|
4
|
+
}
|
|
5
|
+
|
|
1
6
|
.str-chat__loading-indicator {
|
|
2
7
|
svg {
|
|
3
8
|
linearGradient {
|
|
4
9
|
stop:last-child {
|
|
5
|
-
stop-color: var(
|
|
6
|
-
--str-chat__loading-indicator-color,
|
|
7
|
-
var(--str-chat__primary-color, #006cff)
|
|
8
|
-
);
|
|
10
|
+
stop-color: var(--str-chat__loading-indicator-color);
|
|
9
11
|
}
|
|
10
12
|
}
|
|
11
13
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@use '../utils';
|
|
2
2
|
|
|
3
3
|
.str-chat {
|
|
4
|
-
/* The width/height of the message options
|
|
4
|
+
/* The width/height of the message options button(s), for Angular SDK it's only used on desktop devices starting from version 5 */
|
|
5
5
|
--str-chat__message-options-button-size: calc(var(--str-chat__spacing-px) * 26);
|
|
6
6
|
|
|
7
7
|
/* The maximum allowed width of the message component */
|
|
@@ -26,9 +26,19 @@
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
.str-chat__message {
|
|
29
|
+
--str-chat-message-options-size: calc(3 * var(--str-chat__message-options-button-size));
|
|
30
|
+
|
|
31
|
+
&.str-chat__message-without-touch-support {
|
|
32
|
+
--str-chat-message-options-size: calc(1 * var(--str-chat__message-options-button-size));
|
|
33
|
+
}
|
|
34
|
+
|
|
29
35
|
.str-chat__message-bubble {
|
|
30
36
|
max-width: var(--str-chat__message-max-width);
|
|
31
37
|
}
|
|
38
|
+
|
|
39
|
+
.str-chat__message-options {
|
|
40
|
+
--str-chat-icon-height: calc(var(--str-chat__message-options-button-size) * 0.7);
|
|
41
|
+
}
|
|
32
42
|
}
|
|
33
43
|
|
|
34
44
|
.str-chat__message.str-chat__message--has-attachment {
|
|
@@ -123,7 +133,7 @@
|
|
|
123
133
|
align-items: flex-start;
|
|
124
134
|
justify-content: flex-end;
|
|
125
135
|
flex-direction: row-reverse;
|
|
126
|
-
width:
|
|
136
|
+
width: var(--str-chat-message-options-size);
|
|
127
137
|
|
|
128
138
|
.str-chat__message-actions-box-button,
|
|
129
139
|
.str-chat__message-reply-in-thread-button,
|
|
@@ -218,6 +228,7 @@
|
|
|
218
228
|
}
|
|
219
229
|
|
|
220
230
|
.str-chat__message-status {
|
|
231
|
+
--str-chat-icon-height: calc(var(--str-chat__spacing-px) * 15);
|
|
221
232
|
@include utils.flex-row-center;
|
|
222
233
|
column-gap: var(--str-chat__spacing-0_5);
|
|
223
234
|
position: relative;
|
|
@@ -282,8 +293,8 @@
|
|
|
282
293
|
}
|
|
283
294
|
|
|
284
295
|
// Message options display - default mode: they appear when .str-chat__li is hovered
|
|
285
|
-
.str-chat__ul:not(.str-chat__message-options-in-bubble),
|
|
286
|
-
.str-chat__virtual-list:not(.str-chat__message-options-in-bubble) {
|
|
296
|
+
.str-chat__ul:not(.str-chat__message-options-in-bubble, .str-chat__message-with-touch-support),
|
|
297
|
+
.str-chat__virtual-list:not(.str-chat__message-options-in-bubble, .str-chat__message-with-touch-support) {
|
|
287
298
|
/* This rule won't be applied in browsers that don't support :has() */
|
|
288
299
|
.str-chat__li:hover:not(:has(.str-chat__reaction-list:hover, .str-chat__modal--open)),
|
|
289
300
|
.str-chat__li:focus-within:not(:has(.str-chat__reaction-list:focus-within, .str-chat__modal--open)) {
|
|
@@ -350,11 +361,11 @@
|
|
|
350
361
|
}
|
|
351
362
|
|
|
352
363
|
.str-chat__message--other .str-chat__message-inner {
|
|
353
|
-
margin-inline-end:
|
|
364
|
+
margin-inline-end: var(--str-chat-message-options-size);
|
|
354
365
|
}
|
|
355
366
|
|
|
356
367
|
.str-chat__message--me .str-chat__message-inner {
|
|
357
|
-
margin-inline-start:
|
|
368
|
+
margin-inline-start: var(--str-chat-message-options-size);
|
|
358
369
|
}
|
|
359
370
|
|
|
360
371
|
.str-chat__li--middle,
|
|
@@ -453,6 +464,7 @@
|
|
|
453
464
|
}
|
|
454
465
|
|
|
455
466
|
.str-chat__unread-messages-notification {
|
|
467
|
+
--str-chat-icon-height: calc(var(--str-chat__spacing-px) * 16);
|
|
456
468
|
position: absolute;
|
|
457
469
|
top: 0.75rem;
|
|
458
470
|
z-index: 2;
|
|
@@ -506,3 +518,30 @@
|
|
|
506
518
|
.str-chat__message-text--pointer-cursor {
|
|
507
519
|
cursor: pointer;
|
|
508
520
|
}
|
|
521
|
+
|
|
522
|
+
.str-chat__message-with-touch-support {
|
|
523
|
+
.str-chat__message-bubble {
|
|
524
|
+
-webkit-touch-callout: none;
|
|
525
|
+
-webkit-user-select: none;
|
|
526
|
+
user-select: none;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
&.str-chat__message-menu-opened {
|
|
530
|
+
.str-chat__attachments-container,
|
|
531
|
+
.str-chat__message-text-inner {
|
|
532
|
+
pointer-events: none;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
.str-chat__message-inner {
|
|
537
|
+
margin-inline: 0;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.str-chat__message-options {
|
|
541
|
+
display: none;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
.stream-chat-angular__image-modal-host {
|
|
545
|
+
-webkit-touch-callout: default;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
@@ -220,12 +220,15 @@
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
.str-chat__message-options {
|
|
223
|
+
--str-chat-icon-color: var(--str-chat__message-options-color);
|
|
224
|
+
|
|
223
225
|
.str-chat__message-actions-box-button,
|
|
224
226
|
.str-chat__message-reply-in-thread-button,
|
|
225
227
|
.str-chat__message-reactions-button {
|
|
226
228
|
// remove default button styles (React SDK uses button compared to div in Angular SDK)
|
|
227
229
|
@include utils.button-reset;
|
|
228
230
|
border-radius: var(--str-chat__message-options-border-radius);
|
|
231
|
+
color: var(--str-chat__message-options-color);
|
|
229
232
|
|
|
230
233
|
.str-chat__message-action-icon path {
|
|
231
234
|
fill: var(--str-chat__message-options-color);
|
|
@@ -272,6 +275,7 @@
|
|
|
272
275
|
}
|
|
273
276
|
|
|
274
277
|
.str-chat__message-status {
|
|
278
|
+
--str-chat-icon-color: var(--str-chat__message-status-color);
|
|
275
279
|
color: var(--str-chat__message-status-color);
|
|
276
280
|
font: var(--str-chat__body-text);
|
|
277
281
|
|
|
@@ -297,6 +301,7 @@
|
|
|
297
301
|
}
|
|
298
302
|
|
|
299
303
|
.str-chat__message-error-icon {
|
|
304
|
+
--str-chat-icon-color: var(--str-chat__message-error-message-color);
|
|
300
305
|
/* stylelint-disable-next-line selector-max-id */
|
|
301
306
|
svg #background {
|
|
302
307
|
fill: var(--str-chat__message-error-message-color);
|
|
@@ -393,6 +398,7 @@
|
|
|
393
398
|
}
|
|
394
399
|
|
|
395
400
|
.str-chat__unread-messages-notification {
|
|
401
|
+
--str-chat-icon-color: var(--str-chat__on-primary-color);
|
|
396
402
|
background-color: var(--str-chat__text-low-emphasis-color);
|
|
397
403
|
border-radius: 1.125rem;
|
|
398
404
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
.str-chat__message-input {
|
|
4
4
|
$send-button-size: calc(var(--str-chat__spacing-px) * 45);
|
|
5
|
+
$start-audio-recording-button-size: calc(var(--str-chat__spacing-px) * 40);
|
|
5
6
|
|
|
6
7
|
@include utils.flex-col-center;
|
|
7
8
|
width: 100%;
|
|
@@ -46,6 +47,7 @@
|
|
|
46
47
|
justify-content: center;
|
|
47
48
|
|
|
48
49
|
.str-chat__file-input-container {
|
|
50
|
+
--str-chat-icon-height: calc(var(--str-chat__spacing-px) * 24);
|
|
49
51
|
@include utils.flex-row-center;
|
|
50
52
|
width: calc(var(--str-chat__spacing-px) * 45);
|
|
51
53
|
height: calc(var(--str-chat__spacing-px) * 45);
|
|
@@ -132,6 +134,7 @@
|
|
|
132
134
|
}
|
|
133
135
|
|
|
134
136
|
.str-chat__send-button {
|
|
137
|
+
--str-chat-icon-height: calc(var(--str-chat__spacing-px) * 32);
|
|
135
138
|
@include utils.flex-row-center;
|
|
136
139
|
cursor: pointer;
|
|
137
140
|
padding: 0;
|
|
@@ -145,6 +148,19 @@
|
|
|
145
148
|
}
|
|
146
149
|
}
|
|
147
150
|
|
|
151
|
+
.str-chat__start-recording-audio-button {
|
|
152
|
+
@include utils.flex-row-center;
|
|
153
|
+
cursor: pointer;
|
|
154
|
+
padding: 0;
|
|
155
|
+
width: $start-audio-recording-button-size;
|
|
156
|
+
height: $start-audio-recording-button-size;
|
|
157
|
+
min-width: $start-audio-recording-button-size;
|
|
158
|
+
|
|
159
|
+
svg {
|
|
160
|
+
height: calc(var(--str-chat__spacing-px) * 25);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
148
164
|
.str-chat__message-input-cooldown {
|
|
149
165
|
@include utils.flex-row-center;
|
|
150
166
|
margin-inline-start: var(--str-chat__spacing-2);
|
|
@@ -161,6 +177,21 @@
|
|
|
161
177
|
.str-chat__quoted-message-preview {
|
|
162
178
|
padding: var(--str-chat__spacing-2);
|
|
163
179
|
}
|
|
180
|
+
|
|
181
|
+
.str-chat__recording-permission-denied-notification {
|
|
182
|
+
position: absolute;
|
|
183
|
+
left: 0.5rem;
|
|
184
|
+
max-width: 100%;
|
|
185
|
+
bottom: 100%;
|
|
186
|
+
padding: 1rem;
|
|
187
|
+
margin-inline: 0.5rem;
|
|
188
|
+
z-index: 2;
|
|
189
|
+
|
|
190
|
+
.str-chat__recording-permission-denied-notification__dismiss-button-container {
|
|
191
|
+
display: flex;
|
|
192
|
+
justify-content: flex-end;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
164
195
|
}
|
|
165
196
|
|
|
166
197
|
.str-chat__message-input-angular-host {
|
|
@@ -179,7 +210,8 @@
|
|
|
179
210
|
flex-grow: initial;
|
|
180
211
|
}
|
|
181
212
|
|
|
182
|
-
[dir='rtl'] .str-chat__send-button
|
|
213
|
+
[dir='rtl'] .str-chat__send-button,
|
|
214
|
+
[dir='rtl'] .str-chat__start-recording-audio-button {
|
|
183
215
|
svg {
|
|
184
216
|
transform: scale(-1, 1);
|
|
185
217
|
}
|
|
@@ -86,7 +86,37 @@
|
|
|
86
86
|
--str-chat__message-send-disabled-color: var(--str-chat__disabled-color);
|
|
87
87
|
|
|
88
88
|
/* The background color of the send button in disabled state */
|
|
89
|
-
--str-chat__message-send-disabled-background-color:
|
|
89
|
+
--str-chat__message-send-disabled-background-color: var(--str-chat__disabled-color);
|
|
90
|
+
|
|
91
|
+
/* The border radius used for the borders of the audio recording button */
|
|
92
|
+
--str-chat__start-recording-audio-button-border-radius: var(--str-chat__border-radius-circle);
|
|
93
|
+
|
|
94
|
+
/* The text/icon color of the audio recording button */
|
|
95
|
+
--str-chat__start-recording-audio-button-color: var(--str-chat__text-low-emphasis-color);
|
|
96
|
+
|
|
97
|
+
/* The background color of the audio recording button */
|
|
98
|
+
--str-chat__start-recording-audio-button-background-color: transparent;
|
|
99
|
+
|
|
100
|
+
/* Top border of the audio recording button */
|
|
101
|
+
--str-chat__start-recording-audio-button-border-block-start: 0;
|
|
102
|
+
|
|
103
|
+
/* Bottom border of the audio recording button */
|
|
104
|
+
--str-chat__start-recording-audio-button-border-block-end: 0;
|
|
105
|
+
|
|
106
|
+
/* Left (right in RTL layout) border of the audio recording button */
|
|
107
|
+
--str-chat__start-recording-audio-button-border-inline-start: 0;
|
|
108
|
+
|
|
109
|
+
/* Right (left in RTL layout) border of the audio recording button */
|
|
110
|
+
--str-chat__start-recording-audio-button-border-inline-end: 0;
|
|
111
|
+
|
|
112
|
+
/* Box shadow applied to the audio recording button */
|
|
113
|
+
--str-chat__start-recording-audio-button-box-shadow: none;
|
|
114
|
+
|
|
115
|
+
/* The color of the audio recording button in disabled state */
|
|
116
|
+
--str-chat__start-recording-audio-button-disabled-color: var(--str-chat__disabled-color);
|
|
117
|
+
|
|
118
|
+
/* The background color of the audio recording button in disabled state */
|
|
119
|
+
--str-chat__start-recording-audio-button-disabled-background-color: transparent;
|
|
90
120
|
|
|
91
121
|
/* The border radius used for the borders of the tool buttons of the message input (such as attachment upload button) */
|
|
92
122
|
--str-chat__message-input-tools-border-radius: var(--str-chat__border-radius-circle);
|
|
@@ -151,6 +181,7 @@
|
|
|
151
181
|
}
|
|
152
182
|
|
|
153
183
|
.str-chat__file-input-container {
|
|
184
|
+
--str-chat-icon-color: var(--str-chat__message-input-tools-color);
|
|
154
185
|
@include utils.component-layer-overrides('message-input-tools');
|
|
155
186
|
|
|
156
187
|
svg path {
|
|
@@ -179,6 +210,7 @@
|
|
|
179
210
|
}
|
|
180
211
|
|
|
181
212
|
.str-chat__send-button {
|
|
213
|
+
--str-chat-icon-color: var(--str-chat__message-send-color);
|
|
182
214
|
@include utils.component-layer-overrides('message-send');
|
|
183
215
|
|
|
184
216
|
svg path {
|
|
@@ -186,7 +218,8 @@
|
|
|
186
218
|
}
|
|
187
219
|
|
|
188
220
|
&:disabled {
|
|
189
|
-
|
|
221
|
+
--str-chat-icon-color: var(--str-chat__message-send-disabled-color);
|
|
222
|
+
background-color: transparent;
|
|
190
223
|
|
|
191
224
|
svg path {
|
|
192
225
|
fill: var(--str-chat__message-send-disabled-color);
|
|
@@ -194,6 +227,14 @@
|
|
|
194
227
|
}
|
|
195
228
|
}
|
|
196
229
|
|
|
230
|
+
.str-chat__start-recording-audio-button {
|
|
231
|
+
@include utils.component-layer-overrides('start-recording-audio-button');
|
|
232
|
+
|
|
233
|
+
&:disabled {
|
|
234
|
+
background-color: var(--str-chat__message-send-disabled-background-color);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
197
238
|
.str-chat__message-input-cooldown {
|
|
198
239
|
@include utils.component-layer-overrides('cooldown');
|
|
199
240
|
font: var(--str-chat__subtitle-medium-text);
|
|
@@ -218,4 +259,26 @@
|
|
|
218
259
|
}
|
|
219
260
|
}
|
|
220
261
|
}
|
|
262
|
+
|
|
263
|
+
.str-chat__recording-permission-denied-notification {
|
|
264
|
+
background-color: var(--str-chat__text-color);
|
|
265
|
+
border-radius: var(--str-chat__border-radius-md);
|
|
266
|
+
color: var(--str-chat__background-color);
|
|
267
|
+
|
|
268
|
+
.str-chat__recording-permission-denied-notification__heading,
|
|
269
|
+
.str-chat__recording-permission-denied-notification__dismiss-button {
|
|
270
|
+
font: var(--str-chat__subtitle2-medium-text);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.str-chat__recording-permission-denied-notification__message {
|
|
274
|
+
font: var(--str-chat__subtitle-text);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.str-chat__recording-permission-denied-notification__dismiss-button {
|
|
278
|
+
@include utils.button-reset;
|
|
279
|
+
color: var(--str-chat__background-color);
|
|
280
|
+
cursor: pointer;
|
|
281
|
+
text-transform: uppercase;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
221
284
|
}
|
|
@@ -91,6 +91,8 @@
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
.str-chat__jump-to-latest-message {
|
|
94
|
+
--str-chat-icon-color: var(--str-chat__jump-to-latest-message-unread-count-background-color);
|
|
95
|
+
|
|
94
96
|
.str-chat__circle-fab {
|
|
95
97
|
@include utils.component-layer-overrides('jump-to-latest-message');
|
|
96
98
|
@include utils.circle-fab-overrides('jump-to-latest-message');
|
|
@@ -6,6 +6,24 @@
|
|
|
6
6
|
position: absolute;
|
|
7
7
|
inset-block-end: 100%;
|
|
8
8
|
|
|
9
|
+
&.str-chat-angular-v5__reaction-selector {
|
|
10
|
+
margin: var(--str-chat__spacing-2);
|
|
11
|
+
position: static;
|
|
12
|
+
justify-content: flex-start;
|
|
13
|
+
|
|
14
|
+
.str-chat__message-reactions-options {
|
|
15
|
+
max-width: 100%;
|
|
16
|
+
overflow-y: hidden;
|
|
17
|
+
overflow-x: auto;
|
|
18
|
+
scrollbar-width: none;
|
|
19
|
+
padding: 0;
|
|
20
|
+
|
|
21
|
+
.str-chat__message-reactions-option {
|
|
22
|
+
flex-shrink: 0;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
9
27
|
.str-chat__message-reactions-options {
|
|
10
28
|
list-style: none;
|
|
11
29
|
display: flex;
|
|
@@ -62,6 +62,11 @@
|
|
|
62
62
|
|
|
63
63
|
/* Box shadow applied to the component */
|
|
64
64
|
--str-chat__message-reactions-option-box-shadow: none;
|
|
65
|
+
|
|
66
|
+
.str-chat-angular-v5__reaction-selector {
|
|
67
|
+
--str-chat__message-reactions-options-box-shadow: none;
|
|
68
|
+
--str-chat__message-reactions-options-border-radius: 0;
|
|
69
|
+
}
|
|
65
70
|
}
|
|
66
71
|
|
|
67
72
|
.str-chat__reaction-selector {
|
|
@@ -47,8 +47,14 @@
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
.str-chat__modal__close-button {
|
|
50
|
+
--str-chat-icon-color: var(--str-chat__modal-close-icon-color);
|
|
50
51
|
@include utils.button-reset;
|
|
51
52
|
|
|
53
|
+
.str-chat__icon {
|
|
54
|
+
background-color: var(--str-chat__modal-close-icon-background);
|
|
55
|
+
border-radius: 999px;
|
|
56
|
+
}
|
|
57
|
+
|
|
52
58
|
svg {
|
|
53
59
|
path {
|
|
54
60
|
fill: var(--str-chat__modal-close-icon-color);
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
.str-chat {
|
|
2
2
|
box-sizing: border-box;
|
|
3
|
+
font-family: var(--str-chat__font-family);
|
|
3
4
|
|
|
4
5
|
* {
|
|
5
|
-
font-family: var(--str-chat__font-family);
|
|
6
6
|
box-sizing: border-box;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
// Overriding styles of ngx-popperjs/ngx-float-ui
|
|
10
|
-
.ngxp__container,
|
|
10
|
+
.ngxp__container,
|
|
11
|
+
.float-ui-container {
|
|
11
12
|
z-index: 1;
|
|
12
13
|
padding: 0 !important;
|
|
13
14
|
box-shadow: none !important;
|
|
14
15
|
border-color: transparent !important;
|
|
16
|
+
max-width: 100vw;
|
|
15
17
|
|
|
16
18
|
.ngxp__arrow {
|
|
17
19
|
display: none;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
@use 'variables';
|
|
2
|
+
|
|
3
|
+
$assetsPath: variables.$assetsPath !default;
|
|
4
|
+
|
|
3
5
|
$emoji-flag-unicode-range: U+1F1E6-1F1FF;
|
|
4
6
|
|
|
5
7
|
/* png based woff for most browsers */
|
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
@use 'variables';
|
|
2
|
+
|
|
1
3
|
.str-chat {
|
|
2
|
-
--str-chat__image-fallback-icon: url(
|
|
3
|
-
}
|
|
4
|
+
--str-chat__image-fallback-icon: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9ImN1cnJlbnRDb2xvciIgY2xhc3M9InN0ci1jaGF0X19pbWFnZS1mYWxsYmFja19faWNvbiIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBkPSJNMTYgMnYxNEgyVjJoMTRabTAtMkgyQy45IDAgMCAuOSAwIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yWm0tNC44NiA4Ljg2LTMgMy44N0w2IDEwLjE0IDMgMTRoMTJsLTMuODYtNS4xNFoiLz48L3N2Zz4=');
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
@font-face {
|
|
8
|
+
font-family: 'stream-chat-icons';
|
|
9
|
+
src: url('#{variables.$assetsPath}/icons/stream-chat-icons.eot');
|
|
10
|
+
src: url('#{variables.$assetsPath}/icons/stream-chat-icons.eot#iefix') format('embedded-opentype'),
|
|
11
|
+
url('#{variables.$assetsPath}/icons/stream-chat-icons.woff') format('woff2'),
|
|
12
|
+
url('#{variables.$assetsPath}/icons/stream-chat-icons.woff') format('woff'),
|
|
13
|
+
url('#{variables.$assetsPath}/icons/stream-chat-icons.ttf') format('truetype'),
|
|
14
|
+
url('#{variables.$assetsPath}/icons/stream-chat-icons.svg#stream-chat-icons') format('svg');
|
|
15
|
+
font-weight: normal;
|
|
16
|
+
font-style: normal;
|
|
17
|
+
}
|
|
18
|
+
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
|
|
19
|
+
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
|
|
20
|
+
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
|
21
|
+
@font-face {
|
|
22
|
+
font-family: 'stream-chat-icons';
|
|
23
|
+
src: url('#{variables.$assetsPath}/icons/stream-chat-icons.svg#stream-chat-icons') format('svg');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
@use 'AttachmentList/AttachmentList-layout';
|
|
7
7
|
@use 'AttachmentPreviewList/AttachmentPreviewList-layout';
|
|
8
8
|
@use 'Autocomplete/Autocomplete-layout';
|
|
9
|
+
@use 'AudioRecorder/AudioRecorder-layout';
|
|
9
10
|
@use 'BaseImage/BaseImage-layout';
|
|
10
11
|
@use 'Channel/Channel-layout';
|
|
11
12
|
@use 'ChannelHeader/ChannelHeader-layout';
|
|
@@ -16,6 +17,7 @@
|
|
|
16
17
|
@use 'common/CircleFAButton/CircleFAButton-layout';
|
|
17
18
|
@use 'EditMessageForm/EditMessageForm-layout';
|
|
18
19
|
@use 'ImageCarousel/ImageCarousel-layout';
|
|
20
|
+
@use 'Icon/Icon-layout';
|
|
19
21
|
@use 'LinkPreview/LinkPreview-layout';
|
|
20
22
|
@use 'LoadingIndicator/LoadingIndicator-layout';
|
|
21
23
|
@use 'Message/Message-layout';
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
@use 'Avatar/Avatar-theme';
|
|
10
10
|
@use 'AttachmentList/AttachmentList-theme';
|
|
11
11
|
@use 'AttachmentPreviewList/AttachmentPreviewList-theme';
|
|
12
|
+
@use 'AudioRecorder/AudioRecorder-theme';
|
|
12
13
|
@use 'Autocomplete/Autocomplete-theme';
|
|
13
14
|
@use 'BaseImage/BaseImage-theme';
|
|
14
15
|
@use 'Channel/Channel-theme.scss';
|
|
@@ -17,6 +18,7 @@
|
|
|
17
18
|
@use 'ChannelPreview/ChannelPreview-theme';
|
|
18
19
|
@use 'ChannelSearch/ChannelSearch-theme';
|
|
19
20
|
@use 'EditMessageForm/EditMessageForm-theme';
|
|
21
|
+
@use 'Icon/Icon-theme';
|
|
20
22
|
@use 'ImageCarousel/ImageCarousel-theme';
|
|
21
23
|
@use 'LinkPreview/LinkPreview-theme';
|
|
22
24
|
@use 'LoadingIndicator/LoadingIndicator-theme';
|
package/src/assets/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.0.0
|
|
1
|
+
export const version = '5.0.0';
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Component, HostBinding, ViewChild, } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../custom-templates.service";
|
|
5
|
-
import * as i2 from "../message-actions.service";
|
|
6
|
-
import * as i3 from "@angular/common";
|
|
7
|
-
import * as i4 from "@ngx-translate/core";
|
|
8
|
-
import * as i5 from "../message-input/message-input.component";
|
|
9
|
-
import * as i6 from "../notification-list/notification-list.component";
|
|
10
|
-
import * as i7 from "../modal/modal.component";
|
|
11
|
-
/**
|
|
12
|
-
* The edit message form displays a modal that's opened when a user edits a message. The component uses the [`MessageActionsService`](../../services/MessageActionsService) to know which message is being edited.
|
|
13
|
-
*
|
|
14
|
-
* By default this is displayed within the [`stream-channel` component](../../components/ChannelComponent).
|
|
15
|
-
*/
|
|
16
|
-
export class EditMessageFormComponent {
|
|
17
|
-
constructor(customTemplatesService, messageActionsService) {
|
|
18
|
-
this.customTemplatesService = customTemplatesService;
|
|
19
|
-
this.messageActionsService = messageActionsService;
|
|
20
|
-
this.class = 'str-chat-angular__edit-message-form';
|
|
21
|
-
this.isModalOpen = false;
|
|
22
|
-
this.sendMessageSubject = new Subject();
|
|
23
|
-
this.subscriptions = [];
|
|
24
|
-
this.sendMessage$ = this.sendMessageSubject.asObservable();
|
|
25
|
-
}
|
|
26
|
-
ngOnInit() {
|
|
27
|
-
this.messageActionsService.messageToEdit$.subscribe((message) => {
|
|
28
|
-
if ((message && !this.isModalOpen) || (!message && this.isModalOpen)) {
|
|
29
|
-
this.message = message;
|
|
30
|
-
this.isModalOpen = !!message;
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
ngOnDestroy() {
|
|
35
|
-
this.subscriptions.forEach((s) => s.unsubscribe());
|
|
36
|
-
}
|
|
37
|
-
getEditModalContext() {
|
|
38
|
-
return {
|
|
39
|
-
isOpen: this.isModalOpen,
|
|
40
|
-
isOpenChangeHandler: (isOpen) => {
|
|
41
|
-
this.isModalOpen = isOpen;
|
|
42
|
-
if (!this.isModalOpen) {
|
|
43
|
-
this.dismissed();
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
content: this.modalContent,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
getMessageInputContext() {
|
|
50
|
-
return {
|
|
51
|
-
message: this.message,
|
|
52
|
-
messageUpdateHandler: () => {
|
|
53
|
-
this.dismissed();
|
|
54
|
-
},
|
|
55
|
-
isFileUploadEnabled: undefined,
|
|
56
|
-
areMentionsEnabled: undefined,
|
|
57
|
-
isMultipleFileUploadEnabled: undefined,
|
|
58
|
-
mentionScope: undefined,
|
|
59
|
-
mode: undefined,
|
|
60
|
-
sendMessage$: this.sendMessage$,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
sendClicked() {
|
|
64
|
-
this.sendMessageSubject.next();
|
|
65
|
-
}
|
|
66
|
-
dismissed() {
|
|
67
|
-
this.isModalOpen = false;
|
|
68
|
-
this.message = undefined;
|
|
69
|
-
this.messageActionsService.messageToEdit$.next(undefined);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
EditMessageFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: EditMessageFormComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.MessageActionsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
73
|
-
EditMessageFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: EditMessageFormComponent, selector: "stream-edit-message-form", host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["editMessageForm"], descendants: true, static: true }], ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getEditModalContext()\n \"\n></ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n *ngIf=\"isOpen\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #editMessageForm>\n <div class=\"str-chat__edit-message-form\">\n <ng-template\n #defaultInput\n let-messageInput=\"message\"\n let-messageUpdateHandler=\"messageUpdateHandler\"\n let-sendMessage$Input=\"sendMessage$\"\n >\n <stream-message-input\n [message]=\"messageInput\"\n [sendMessage$]=\"sendMessage$Input\"\n (messageUpdate)=\"messageUpdateHandler()\"\n ></stream-message-input>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageInputTemplate$ | async) || defaultInput;\n context: getMessageInputContext()\n \"\n >\n </ng-container>\n\n <stream-notification-list></stream-notification-list>\n <div\n class=\"\n str-chat__message-team-form-footer\n str-chat__message-team-form-footer-angular\n \"\n >\n <div class=\"str-chat__edit-message-form-options\">\n <button\n class=\"str-chat__edit-message-cancel\"\n translate\n data-testid=\"cancel-button\"\n (click)=\"dismissed()\"\n >\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n class=\"str-chat__edit-message-send\"\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mode", "isMultipleFileUploadEnabled", "message", "sendMessage$", "inputMode", "autoFocus"], outputs: ["messageUpdate"] }, { kind: "component", type: i6.NotificationListComponent, selector: "stream-notification-list" }, { kind: "component", type: i7.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: EditMessageFormComponent, decorators: [{
|
|
75
|
-
type: Component,
|
|
76
|
-
args: [{ selector: 'stream-edit-message-form', template: "<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getEditModalContext()\n \"\n></ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n *ngIf=\"isOpen\"\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #editMessageForm>\n <div class=\"str-chat__edit-message-form\">\n <ng-template\n #defaultInput\n let-messageInput=\"message\"\n let-messageUpdateHandler=\"messageUpdateHandler\"\n let-sendMessage$Input=\"sendMessage$\"\n >\n <stream-message-input\n [message]=\"messageInput\"\n [sendMessage$]=\"sendMessage$Input\"\n (messageUpdate)=\"messageUpdateHandler()\"\n ></stream-message-input>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageInputTemplate$ | async) || defaultInput;\n context: getMessageInputContext()\n \"\n >\n </ng-container>\n\n <stream-notification-list></stream-notification-list>\n <div\n class=\"\n str-chat__message-team-form-footer\n str-chat__message-team-form-footer-angular\n \"\n >\n <div class=\"str-chat__edit-message-form-options\">\n <button\n class=\"str-chat__edit-message-cancel\"\n translate\n data-testid=\"cancel-button\"\n (click)=\"dismissed()\"\n >\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n class=\"str-chat__edit-message-send\"\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n" }]
|
|
77
|
-
}], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.MessageActionsService }]; }, propDecorators: { class: [{
|
|
78
|
-
type: HostBinding
|
|
79
|
-
}], modalContent: [{
|
|
80
|
-
type: ViewChild,
|
|
81
|
-
args: ['editMessageForm', { static: true }]
|
|
82
|
-
}] } });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1tZXNzYWdlLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2VkaXQtbWVzc2FnZS1mb3JtL2VkaXQtbWVzc2FnZS1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9lZGl0LW1lc3NhZ2UtZm9ybS9lZGl0LW1lc3NhZ2UtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFJWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQUd6RDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUNXLHNCQUE4QyxFQUMvQyxxQkFBNEM7UUFEM0MsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUMvQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBWHZDLFVBQUssR0FBRyxxQ0FBcUMsQ0FBQztRQUU3RCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUlaLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDekMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBTXpDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDeEIsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNyQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ2xCO1lBQ0gsQ0FBQztZQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtnQkFDekIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLENBQUM7WUFDRCxtQkFBbUIsRUFBRSxTQUFTO1lBQzlCLGtCQUFrQixFQUFFLFNBQVM7WUFDN0IsMkJBQTJCLEVBQUUsU0FBUztZQUN0QyxZQUFZLEVBQUUsU0FBUztZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDOztxSEFsRVUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsZ1BDdkJyQyx3OURBMEVBOzJGRG5EYSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsMEJBQTBCO2lKQUtyQixLQUFLO3NCQUFuQixXQUFXO2dCQUtKLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBNZXNzYWdlSW5wdXRDb250ZXh0LCBNb2RhbENvbnRleHQsIFN0cmVhbU1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lc3NhZ2VBY3Rpb25zU2VydmljZSB9IGZyb20gJy4uL21lc3NhZ2UtYWN0aW9ucy5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgZWRpdCBtZXNzYWdlIGZvcm0gZGlzcGxheXMgYSBtb2RhbCB0aGF0J3Mgb3BlbmVkIHdoZW4gYSB1c2VyIGVkaXRzIGEgbWVzc2FnZS4gVGhlIGNvbXBvbmVudCB1c2VzIHRoZSBbYE1lc3NhZ2VBY3Rpb25zU2VydmljZWBdKC4uLy4uL3NlcnZpY2VzL01lc3NhZ2VBY3Rpb25zU2VydmljZSkgdG8ga25vdyB3aGljaCBtZXNzYWdlIGlzIGJlaW5nIGVkaXRlZC5cbiAqXG4gKiBCeSBkZWZhdWx0IHRoaXMgaXMgZGlzcGxheWVkIHdpdGhpbiB0aGUgW2BzdHJlYW0tY2hhbm5lbGAgY29tcG9uZW50XSguLi8uLi9jb21wb25lbnRzL0NoYW5uZWxDb21wb25lbnQpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tZWRpdC1tZXNzYWdlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1tZXNzYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0TWVzc2FnZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygpIGNsYXNzID0gJ3N0ci1jaGF0LWFuZ3VsYXJfX2VkaXQtbWVzc2FnZS1mb3JtJztcbiAgc2VuZE1lc3NhZ2UkOiBPYnNlcnZhYmxlPHZvaWQ+O1xuICBpc01vZGFsT3BlbiA9IGZhbHNlO1xuICBtZXNzYWdlPzogU3RyZWFtTWVzc2FnZTtcbiAgQFZpZXdDaGlsZCgnZWRpdE1lc3NhZ2VGb3JtJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBtb2RhbENvbnRlbnQhOiBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgcHJpdmF0ZSBzZW5kTWVzc2FnZVN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VBY3Rpb25zU2VydmljZTogTWVzc2FnZUFjdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc2VuZE1lc3NhZ2UkID0gdGhpcy5zZW5kTWVzc2FnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1lc3NhZ2VBY3Rpb25zU2VydmljZS5tZXNzYWdlVG9FZGl0JC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgIGlmICgobWVzc2FnZSAmJiAhdGhpcy5pc01vZGFsT3BlbikgfHwgKCFtZXNzYWdlICYmIHRoaXMuaXNNb2RhbE9wZW4pKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuaXNNb2RhbE9wZW4gPSAhIW1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIGdldEVkaXRNb2RhbENvbnRleHQoKTogTW9kYWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmlzTW9kYWxPcGVuLFxuICAgICAgaXNPcGVuQ2hhbmdlSGFuZGxlcjogKGlzT3BlbikgPT4ge1xuICAgICAgICB0aGlzLmlzTW9kYWxPcGVuID0gaXNPcGVuO1xuICAgICAgICBpZiAoIXRoaXMuaXNNb2RhbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLmRpc21pc3NlZCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY29udGVudDogdGhpcy5tb2RhbENvbnRlbnQsXG4gICAgfTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VJbnB1dENvbnRleHQoKTogTWVzc2FnZUlucHV0Q29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG1lc3NhZ2VVcGRhdGVIYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzbWlzc2VkKCk7XG4gICAgICB9LFxuICAgICAgaXNGaWxlVXBsb2FkRW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgYXJlTWVudGlvbnNFbmFibGVkOiB1bmRlZmluZWQsXG4gICAgICBpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgIG1lbnRpb25TY29wZTogdW5kZWZpbmVkLFxuICAgICAgbW9kZTogdW5kZWZpbmVkLFxuICAgICAgc2VuZE1lc3NhZ2UkOiB0aGlzLnNlbmRNZXNzYWdlJCxcbiAgICB9O1xuICB9XG5cbiAgc2VuZENsaWNrZWQoKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZVN1YmplY3QubmV4dCgpO1xuICB9XG5cbiAgZGlzbWlzc2VkKCkge1xuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tZXNzYWdlQWN0aW9uc1NlcnZpY2UubWVzc2FnZVRvRWRpdCQubmV4dCh1bmRlZmluZWQpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyXG4gICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubW9kYWxUZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdE1vZGFsO1xuICAgIGNvbnRleHQ6IGdldEVkaXRNb2RhbENvbnRleHQoKVxuICBcIlxuPjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGVcbiAgI2RlZmF1bHRNb2RhbFxuICBsZXQtaXNPcGVuPVwiaXNPcGVuXCJcbiAgbGV0LWlzT3BlbkNoYW5nZUhhbmRsZXI9XCJpc09wZW5DaGFuZ2VIYW5kbGVyXCJcbiAgbGV0LWNvbnRlbnQ9XCJjb250ZW50XCJcbj5cbiAgPHN0cmVhbS1tb2RhbFxuICAgICpuZ0lmPVwiaXNPcGVuXCJcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gICAgKGlzT3BlbkNoYW5nZSk9XCJpc09wZW5DaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICA+XG4gIDwvc3RyZWFtLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlZGl0TWVzc2FnZUZvcm0+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZWRpdC1tZXNzYWdlLWZvcm1cIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICNkZWZhdWx0SW5wdXRcbiAgICAgIGxldC1tZXNzYWdlSW5wdXQ9XCJtZXNzYWdlXCJcbiAgICAgIGxldC1tZXNzYWdlVXBkYXRlSGFuZGxlcj1cIm1lc3NhZ2VVcGRhdGVIYW5kbGVyXCJcbiAgICAgIGxldC1zZW5kTWVzc2FnZSRJbnB1dD1cInNlbmRNZXNzYWdlJFwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1tZXNzYWdlLWlucHV0XG4gICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VJbnB1dFwiXG4gICAgICAgIFtzZW5kTWVzc2FnZSRdPVwic2VuZE1lc3NhZ2UkSW5wdXRcIlxuICAgICAgICAobWVzc2FnZVVwZGF0ZSk9XCJtZXNzYWdlVXBkYXRlSGFuZGxlcigpXCJcbiAgICAgID48L3N0cmVhbS1tZXNzYWdlLWlucHV0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZUlucHV0VGVtcGxhdGUkIHwgYXN5bmMpIHx8IGRlZmF1bHRJbnB1dDtcbiAgICAgICAgY29udGV4dDogZ2V0TWVzc2FnZUlucHV0Q29udGV4dCgpXG4gICAgICBcIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxzdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+PC9zdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2UtdGVhbS1mb3JtLWZvb3RlclxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZWFtLWZvcm0tZm9vdGVyLWFuZ3VsYXJcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2UtZm9ybS1vcHRpb25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2UtY2FuY2VsXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImNhbmNlbC1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJkaXNtaXNzZWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICBzdHJlYW1DaGF0LkNhbmNlbFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1zZW5kXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInNlbmQtYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VuZENsaWNrZWQoKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbmRDbGlja2VkKClcIlxuICAgICAgICA+XG4gICAgICAgICAgc3RyZWFtQ2hhdC5TZW5kXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|