@banta/sdk 6.0.3 → 7.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.
Files changed (109) hide show
  1. package/fesm2022/banta-sdk.mjs +327 -6762
  2. package/fesm2022/banta-sdk.mjs.map +1 -1
  3. package/index.d.ts +1472 -3
  4. package/package.json +11 -13
  5. package/esm2022/banta-sdk.mjs +0 -5
  6. package/esm2022/lib/attachment-scraper.mjs +0 -2
  7. package/esm2022/lib/banta/banta.component.mjs +0 -207
  8. package/esm2022/lib/banta-logo.component.mjs +0 -11
  9. package/esm2022/lib/banta-sdk.module.mjs +0 -135
  10. package/esm2022/lib/chat/banta-chat/banta-chat.component.mjs +0 -209
  11. package/esm2022/lib/chat/chat-message/chat-message.component.mjs +0 -62
  12. package/esm2022/lib/chat/chat-view/chat-view.component.mjs +0 -166
  13. package/esm2022/lib/chat/chat.module.mjs +0 -51
  14. package/esm2022/lib/chat/index.mjs +0 -6
  15. package/esm2022/lib/chat/live-chat-message.component.mjs +0 -80
  16. package/esm2022/lib/chat-backend-base.mjs +0 -31
  17. package/esm2022/lib/chat-backend.mjs +0 -199
  18. package/esm2022/lib/chat-source-base.mjs +0 -2
  19. package/esm2022/lib/chat-source.mjs +0 -282
  20. package/esm2022/lib/comments/attachment-button/attachment-button.component.mjs +0 -75
  21. package/esm2022/lib/comments/attachment-scraper.directive.mjs +0 -101
  22. package/esm2022/lib/comments/banta-comments/banta-comments.component.mjs +0 -817
  23. package/esm2022/lib/comments/comment/comment.component.mjs +0 -224
  24. package/esm2022/lib/comments/comment-field/comment-field.component.mjs +0 -411
  25. package/esm2022/lib/comments/comment-sort/comment-sort.component.mjs +0 -37
  26. package/esm2022/lib/comments/comment-view/comment-view.component.mjs +0 -780
  27. package/esm2022/lib/comments/comments.module.mjs +0 -127
  28. package/esm2022/lib/comments/index.mjs +0 -12
  29. package/esm2022/lib/comments/inline-replies.directive.mjs +0 -13
  30. package/esm2022/lib/comments/live-comment.component.mjs +0 -80
  31. package/esm2022/lib/comments/reply-send-options.directive.mjs +0 -13
  32. package/esm2022/lib/common/attachment/attachment.component.mjs +0 -128
  33. package/esm2022/lib/common/attachments/attachments.component.mjs +0 -75
  34. package/esm2022/lib/common/common.module.mjs +0 -68
  35. package/esm2022/lib/common/index.mjs +0 -11
  36. package/esm2022/lib/common/lazy-connection.mjs +0 -15
  37. package/esm2022/lib/common/lightbox/lightbox.component.mjs +0 -31
  38. package/esm2022/lib/common/markdown-to-html.pipe.mjs +0 -83
  39. package/esm2022/lib/common/mention-linker.pipe.mjs +0 -35
  40. package/esm2022/lib/common/timer-pool.service.mjs +0 -85
  41. package/esm2022/lib/common/timestamp.component.mjs +0 -124
  42. package/esm2022/lib/common/trust-resource-url.pipe.mjs +0 -22
  43. package/esm2022/lib/emoji/emoji-selector-button.component.mjs +0 -115
  44. package/esm2022/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +0 -93
  45. package/esm2022/lib/emoji/emoji.module.mjs +0 -55
  46. package/esm2022/lib/emoji/emojis.mjs +0 -6508
  47. package/esm2022/lib/emoji/index.mjs +0 -5
  48. package/esm2022/lib/giphy-attachments.mjs +0 -16
  49. package/esm2022/lib/index.mjs +0 -20
  50. package/esm2022/lib/live-message.component.mjs +0 -96
  51. package/esm2022/lib/message-menu-item.mjs +0 -2
  52. package/esm2022/lib/sdk-options.mjs +0 -3
  53. package/esm2022/lib/static-chat-source.mjs +0 -101
  54. package/esm2022/lib/tweet-attachments.mjs +0 -13
  55. package/esm2022/lib/url-attachments.mjs +0 -42
  56. package/esm2022/lib/youtube-attachments.mjs +0 -29
  57. package/esm2022/public-api.mjs +0 -5
  58. package/lib/attachment-scraper.d.ts +0 -15
  59. package/lib/banta/banta.component.d.ts +0 -59
  60. package/lib/banta-logo.component.d.ts +0 -5
  61. package/lib/banta-sdk.module.d.ts +0 -32
  62. package/lib/chat/banta-chat/banta-chat.component.d.ts +0 -79
  63. package/lib/chat/chat-message/chat-message.component.d.ts +0 -21
  64. package/lib/chat/chat-view/chat-view.component.d.ts +0 -52
  65. package/lib/chat/chat.module.d.ts +0 -15
  66. package/lib/chat/index.d.ts +0 -5
  67. package/lib/chat/live-chat-message.component.d.ts +0 -23
  68. package/lib/chat-backend-base.d.ts +0 -72
  69. package/lib/chat-backend.d.ts +0 -66
  70. package/lib/chat-source-base.d.ts +0 -51
  71. package/lib/chat-source.d.ts +0 -85
  72. package/lib/comments/attachment-button/attachment-button.component.d.ts +0 -17
  73. package/lib/comments/attachment-scraper.directive.d.ts +0 -21
  74. package/lib/comments/banta-comments/banta-comments.component.d.ts +0 -216
  75. package/lib/comments/comment/comment.component.d.ts +0 -90
  76. package/lib/comments/comment-field/comment-field.component.d.ts +0 -92
  77. package/lib/comments/comment-sort/comment-sort.component.d.ts +0 -16
  78. package/lib/comments/comment-view/comment-view.component.d.ts +0 -205
  79. package/lib/comments/comments.module.d.ts +0 -34
  80. package/lib/comments/index.d.ts +0 -11
  81. package/lib/comments/inline-replies.directive.d.ts +0 -5
  82. package/lib/comments/live-comment.component.d.ts +0 -23
  83. package/lib/comments/reply-send-options.directive.d.ts +0 -5
  84. package/lib/common/attachment/attachment.component.d.ts +0 -34
  85. package/lib/common/attachments/attachments.component.d.ts +0 -26
  86. package/lib/common/common.module.d.ts +0 -19
  87. package/lib/common/index.d.ts +0 -10
  88. package/lib/common/lazy-connection.d.ts +0 -6
  89. package/lib/common/lightbox/lightbox.component.d.ts +0 -14
  90. package/lib/common/markdown-to-html.pipe.d.ts +0 -13
  91. package/lib/common/mention-linker.pipe.d.ts +0 -13
  92. package/lib/common/timer-pool.service.d.ts +0 -15
  93. package/lib/common/timestamp.component.d.ts +0 -19
  94. package/lib/common/trust-resource-url.pipe.d.ts +0 -10
  95. package/lib/emoji/emoji-selector-button.component.d.ts +0 -30
  96. package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +0 -23
  97. package/lib/emoji/emoji.module.d.ts +0 -16
  98. package/lib/emoji/emojis.d.ts +0 -6507
  99. package/lib/emoji/index.d.ts +0 -4
  100. package/lib/giphy-attachments.d.ts +0 -5
  101. package/lib/index.d.ts +0 -19
  102. package/lib/live-message.component.d.ts +0 -22
  103. package/lib/message-menu-item.d.ts +0 -6
  104. package/lib/sdk-options.d.ts +0 -8
  105. package/lib/static-chat-source.d.ts +0 -49
  106. package/lib/tweet-attachments.d.ts +0 -5
  107. package/lib/url-attachments.d.ts +0 -14
  108. package/lib/youtube-attachments.d.ts +0 -5
  109. package/public-api.d.ts +0 -1
@@ -1,209 +0,0 @@
1
- import { Component, Input, Output, ViewChild } from "@angular/core";
2
- import { Subject, Subscription } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../chat-backend-base";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/forms";
7
- import * as i4 from "@angular/material/button";
8
- import * as i5 from "../../emoji/emoji-selector-button.component";
9
- import * as i6 from "../chat-view/chat-view.component";
10
- /**
11
- * Chat component
12
- */
13
- export class BantaChatComponent {
14
- constructor(backend) {
15
- this.backend = backend;
16
- this._subs = new Subscription();
17
- this.user = null;
18
- this._metadata = {};
19
- this.signInLabel = 'Sign In';
20
- this.sendLabel = 'Send';
21
- this.permissionDeniedLabel = 'Send';
22
- this.messageFieldPlaceholder = 'Chat';
23
- this.emptyLabel = 'Be the first to chat';
24
- this._selected = new Subject();
25
- this._selected$ = this._selected.asObservable();
26
- this._reported = new Subject();
27
- this._reported$ = this._reported.asObservable();
28
- this._upvoted = new Subject();
29
- this._upvoted$ = this._upvoted.asObservable();
30
- this._userSelected = new Subject();
31
- this._userSelected$ = this._userSelected.asObservable();
32
- this._permissionDeniedError = new Subject();
33
- this._permissionDeniedError$ = this._permissionDeniedError.asObservable();
34
- this._signInSelected = new Subject();
35
- this._signInSelected$ = this._signInSelected.asObservable();
36
- this._received = new Subject();
37
- this._received$ = this._received.asObservable();
38
- this.showEmojiPanel = false;
39
- this.newMessage = {};
40
- }
41
- ngOnInit() {
42
- this._subs.add(this.backend.userChanged.subscribe(user => this.user = user));
43
- }
44
- ngOnDestroy() {
45
- this._subs.unsubscribe();
46
- }
47
- get source() {
48
- return this._source;
49
- }
50
- set source(value) {
51
- this._source = value;
52
- }
53
- get topicID() {
54
- return this._source.identifier;
55
- }
56
- set topicID(value) {
57
- this.setSourceFromTopicID(value);
58
- }
59
- /**
60
- * Arbitrary metadata to send to the chat server. This can be used to provide context about the client to the server
61
- * for things like validating authorization and other uses.
62
- */
63
- get metadata() { return this._metadata; }
64
- set metadata(value) {
65
- if (JSON.stringify(this._metadata) !== JSON.stringify(value)) {
66
- this._metadata = value;
67
- this.reloadSource();
68
- }
69
- }
70
- reloadSource() {
71
- clearTimeout(this._reloadSourceTimeout);
72
- this._reloadSourceTimeout = setTimeout(() => {
73
- this.setSourceFromTopicID(this.topicID);
74
- });
75
- }
76
- async setSourceFromTopicID(topicID) {
77
- if (this._source && this._source.close)
78
- this._source.close();
79
- this._source = null;
80
- this._source = await this.backend.getSourceForTopic(topicID, {
81
- metadata: this.metadata
82
- });
83
- }
84
- get selected() { return this._selected$; }
85
- get reported() { return this._reported$; }
86
- get upvoted() { return this._upvoted$; }
87
- get userSelected() { return this._userSelected$; }
88
- get permissionDeniedError() { return this._permissionDeniedError$; }
89
- get signInSelected() { return this._signInSelected$; }
90
- get received() { return this._received$; }
91
- onReceived(message) {
92
- this._received.next(message);
93
- }
94
- showSignIn() {
95
- this._signInSelected.next();
96
- }
97
- sendPermissionError(message) {
98
- this._permissionDeniedError.next(message);
99
- }
100
- insertEmoji(emoji) {
101
- let message = this.newMessage.message || '';
102
- this.newMessage.message = message + emoji;
103
- }
104
- onKeyDown(event) {
105
- // TODO
106
- }
107
- jumpToMessage(message) {
108
- if (this.chatView)
109
- this.chatView.jumpTo(message);
110
- }
111
- select(message) {
112
- this._selected.next(message);
113
- }
114
- selectUser(message) {
115
- this._userSelected.next(message);
116
- }
117
- report(message) {
118
- this._reported.next(message);
119
- }
120
- async upvote(message) {
121
- await this.source.likeMessage(message.id);
122
- this._upvoted.next(message);
123
- }
124
- get canChat() {
125
- if (!this.user)
126
- return false;
127
- // TODO
128
- // if (!this.user.permissions)
129
- // return true;
130
- // if (!this.user.permissions.canChat)
131
- // return true;
132
- // return this.user.permissions?.canChat(this.source);
133
- return true;
134
- }
135
- async sendMessage() {
136
- if (!this.source)
137
- return;
138
- let text = (this.newMessage.message || '').trim();
139
- this.newMessage.message = '';
140
- if (text === '')
141
- return;
142
- let message = {
143
- user: null,
144
- sentAt: Date.now(),
145
- likes: 0,
146
- url: this.url ?? (typeof window !== 'undefined' ? location.href : undefined),
147
- message: text
148
- };
149
- try {
150
- const intercept = await this.shouldInterceptMessageSend?.(message, this.source);
151
- if (!intercept) {
152
- await this.source.send(message);
153
- }
154
- this.chatView.scrollToLatest();
155
- this.inputElementRef.nativeElement.focus();
156
- }
157
- catch (e) {
158
- console.error(`Failed to send message: `, message);
159
- console.error(e);
160
- }
161
- }
162
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaChatComponent, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.Component }); }
163
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: BantaChatComponent, selector: "banta-chat", inputs: { shouldInterceptMessageSend: "shouldInterceptMessageSend", url: "url", source: "source", topicID: "topicID", metadata: "metadata", signInLabel: "signInLabel", sendLabel: "sendLabel", permissionDeniedLabel: "permissionDeniedLabel", messageFieldPlaceholder: "messageFieldPlaceholder", emptyLabel: "emptyLabel" }, outputs: { selected: "selected", reported: "reported", upvoted: "upvoted", userSelected: "userSelected", permissionDeniedError: "permissionDeniedError", signInSelected: "signInSelected", received: "received" }, viewQueries: [{ propertyName: "chatView", first: true, predicate: ["chatView"], descendants: true }, { propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<banta-chat-view \r\n #chatView\r\n [source]=\"source\"\r\n [emptyLabel]=\"emptyLabel\"\r\n (upvoted)=\"upvote($event)\"\r\n (reported)=\"report($event)\"\r\n (selected)=\"select($event)\"\r\n (received)=\"onReceived($event)\"\r\n (userSelected)=\"selectUser($event)\"\r\n ></banta-chat-view>\r\n\r\n<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n \r\n <div class=\"entry-container\">\r\n <input\r\n #input\r\n type=\"text\"\r\n name=\"message\" \r\n autocomplete=\"off\"\r\n enterkeyhint=\"send\"\r\n [placeholder]=\"messageFieldPlaceholder\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [(ngModel)]=\"newMessage.message\" />\r\n \r\n <emoji-selector-button\r\n (selected)=\"insertEmoji($event)\"\r\n overlayY=\"bottom\"\r\n overlayX=\"end\"\r\n originY=\"top\"\r\n ></emoji-selector-button>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n\r\n <ng-container *ngIf=\"!user\">\r\n <button type=\"button\" (click)=\"showSignIn()\" mat-raised-button color=\"primary\">{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button *ngIf=\"canChat\" [disabled]=\"!newMessage.message\" mat-raised-button color=\"primary\">{{sendLabel}}</button>\r\n <button *ngIf=\"!canChat\" type=\"button\" (click)=\"sendPermissionError()\" mat-raised-button color=\"primary\">{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;position:relative}.entry-container emoji-selector-button{position:absolute;right:0;top:.15em}.entry-container input{height:2.6em;font-size:12pt;padding-left:1em}.entry-container input:-webkit-autofill,.entry-container input:-webkit-autofill:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 1000px #211e07 inset;transition:background-color 5000s ease-in-out 0s;caret-color:#9da302}.entry-container emoji-selector-panel{pointer-events:none;opacity:0;position:absolute;bottom:3.5em;right:0}.entry-container emoji-selector-panel.visible{opacity:1;pointer-events:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:#000;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:#fff;color:#000;border:1px solid #ccc;width:100%;height:3.5em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}:host-context(.mat-dark-theme) form input[type=text]{background:#000;color:#fff;border:1px solid #333}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.EmojiSelectorButtonComponent, selector: "emoji-selector-button", inputs: ["disabled", "overlayX", "overlayY", "originX", "originY"], outputs: ["selected"] }, { kind: "component", type: i6.ChatViewComponent, selector: "banta-chat-view", inputs: ["source", "maxMessages", "emptyLabel"], outputs: ["selected", "userSelected", "reported", "upvoted", "received"] }] }); }
164
- }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaChatComponent, decorators: [{
166
- type: Component,
167
- args: [{ selector: 'banta-chat', template: "<banta-chat-view \r\n #chatView\r\n [source]=\"source\"\r\n [emptyLabel]=\"emptyLabel\"\r\n (upvoted)=\"upvote($event)\"\r\n (reported)=\"report($event)\"\r\n (selected)=\"select($event)\"\r\n (received)=\"onReceived($event)\"\r\n (userSelected)=\"selectUser($event)\"\r\n ></banta-chat-view>\r\n\r\n<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n \r\n <div class=\"entry-container\">\r\n <input\r\n #input\r\n type=\"text\"\r\n name=\"message\" \r\n autocomplete=\"off\"\r\n enterkeyhint=\"send\"\r\n [placeholder]=\"messageFieldPlaceholder\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [(ngModel)]=\"newMessage.message\" />\r\n \r\n <emoji-selector-button\r\n (selected)=\"insertEmoji($event)\"\r\n overlayY=\"bottom\"\r\n overlayX=\"end\"\r\n originY=\"top\"\r\n ></emoji-selector-button>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n\r\n <ng-container *ngIf=\"!user\">\r\n <button type=\"button\" (click)=\"showSignIn()\" mat-raised-button color=\"primary\">{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button *ngIf=\"canChat\" [disabled]=\"!newMessage.message\" mat-raised-button color=\"primary\">{{sendLabel}}</button>\r\n <button *ngIf=\"!canChat\" type=\"button\" (click)=\"sendPermissionError()\" mat-raised-button color=\"primary\">{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;position:relative}.entry-container emoji-selector-button{position:absolute;right:0;top:.15em}.entry-container input{height:2.6em;font-size:12pt;padding-left:1em}.entry-container input:-webkit-autofill,.entry-container input:-webkit-autofill:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 1000px #211e07 inset;transition:background-color 5000s ease-in-out 0s;caret-color:#9da302}.entry-container emoji-selector-panel{pointer-events:none;opacity:0;position:absolute;bottom:3.5em;right:0}.entry-container emoji-selector-panel.visible{opacity:1;pointer-events:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:#000;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:#fff;color:#000;border:1px solid #ccc;width:100%;height:3.5em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}:host-context(.mat-dark-theme) form input[type=text]{background:#000;color:#fff;border:1px solid #333}\n"] }]
168
- }], ctorParameters: () => [{ type: i1.ChatBackendBase }], propDecorators: { shouldInterceptMessageSend: [{
169
- type: Input
170
- }], url: [{
171
- type: Input
172
- }], source: [{
173
- type: Input
174
- }], topicID: [{
175
- type: Input
176
- }], metadata: [{
177
- type: Input
178
- }], signInLabel: [{
179
- type: Input
180
- }], sendLabel: [{
181
- type: Input
182
- }], permissionDeniedLabel: [{
183
- type: Input
184
- }], messageFieldPlaceholder: [{
185
- type: Input
186
- }], emptyLabel: [{
187
- type: Input
188
- }], selected: [{
189
- type: Output
190
- }], reported: [{
191
- type: Output
192
- }], upvoted: [{
193
- type: Output
194
- }], userSelected: [{
195
- type: Output
196
- }], permissionDeniedError: [{
197
- type: Output
198
- }], signInSelected: [{
199
- type: Output
200
- }], received: [{
201
- type: Output
202
- }], chatView: [{
203
- type: ViewChild,
204
- args: ['chatView']
205
- }], inputElementRef: [{
206
- type: ViewChild,
207
- args: ['input']
208
- }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU96RDs7R0FFRztBQU1ILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFDWSxPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUs3QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxTQUFJLEdBQVUsSUFBSSxDQUFDO1FBK0JYLGNBQVMsR0FBd0IsRUFBRSxDQUFDO1FBK0JuQyxnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQUN4QixjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ25CLDBCQUFxQixHQUFHLE1BQU0sQ0FBQztRQUMvQiw0QkFBdUIsR0FBRyxNQUFNLENBQUM7UUFDakMsZUFBVSxHQUFHLHNCQUFzQixDQUFDO1FBRXJDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUMzQyxtQkFBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkQsMkJBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUMvQyw0QkFBdUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckUsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3RDLHFCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkQsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDdkMsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFjbkQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUE2RHZCLGVBQVUsR0FBb0IsRUFBRSxDQUFDO0lBaEtqQyxDQUFDO0lBU0QsUUFBUTtRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQ0ksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBSztRQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUNJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFJRDs7O09BR0c7SUFDSCxJQUFhLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xELElBQUksUUFBUSxDQUFDLEtBQUs7UUFDZCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNMLENBQUM7SUFHTyxZQUFZO1FBQ2hCLFlBQVksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxPQUFnQjtRQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFO1lBQ3pELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUMxQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBdUJELElBQWMsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBYyxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFjLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xELElBQWMsWUFBWSxLQUFLLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsSUFBYyxxQkFBcUIsS0FBSyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDOUUsSUFBYyxjQUFjLEtBQUssT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQWMsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFcEQsVUFBVSxDQUFDLE9BQW9CO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFJRCxVQUFVO1FBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBZTtRQUMvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNiLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUU1QyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQzlDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBcUI7UUFDM0IsT0FBTztJQUNYLENBQUM7SUFLRCxhQUFhLENBQUMsT0FBcUI7UUFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBcUI7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFxQjtRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXFCO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQXFCO1FBQzlCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDVixPQUFPLEtBQUssQ0FBQztRQUVqQixPQUFPO1FBQ1AsOEJBQThCO1FBQzlCLG1CQUFtQjtRQUVuQixzQ0FBc0M7UUFDdEMsbUJBQW1CO1FBRW5CLHNEQUFzRDtRQUV0RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBSUQsS0FBSyxDQUFDLFdBQVc7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDWixPQUFPO1FBRVgsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxJQUFJLEtBQUssRUFBRTtZQUNYLE9BQU87UUFFWCxJQUFJLE9BQU8sR0FBaUI7WUFDeEIsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNsQixLQUFLLEVBQUUsQ0FBQztZQUNSLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUUsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0wsQ0FBQzs4R0FwTVEsa0JBQWtCO2tHQUFsQixrQkFBa0Isc3dCQ2hCL0Isd21EQTBDTzs7MkZEMUJNLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZO29GQWNiLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBV0YsTUFBTTtzQkFEVCxLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFlTyxRQUFRO3NCQUFwQixLQUFLO2dCQXlCRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQWlCUSxRQUFRO3NCQUFyQixNQUFNO2dCQUNPLFFBQVE7c0JBQXJCLE1BQU07Z0JBQ08sT0FBTztzQkFBcEIsTUFBTTtnQkFDTyxZQUFZO3NCQUF6QixNQUFNO2dCQUNPLHFCQUFxQjtzQkFBbEMsTUFBTTtnQkFDTyxjQUFjO3NCQUEzQixNQUFNO2dCQUNPLFFBQVE7c0JBQXJCLE1BQU07Z0JBMEJnQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0QsZUFBZTtzQkFBbEMsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFVzZXIsIENoYXRNZXNzYWdlLCBOZXdNZXNzYWdlRm9ybSB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGF0Vmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtdmlldy9jaGF0LXZpZXcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSBcIi4uLy4uL2NoYXQtYmFja2VuZC1iYXNlXCI7XHJcbmltcG9ydCB7IENoYXRTb3VyY2VCYXNlIH0gZnJvbSBcIi4uLy4uL2NoYXQtc291cmNlLWJhc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBDaGF0IGNvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWNoYXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhbnRhLWNoYXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFudGEtY2hhdC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW50YUNoYXRDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBiYWNrZW5kIDogQ2hhdEJhY2tlbmRCYXNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zb3VyY2UgOiBDaGF0U291cmNlQmFzZTtcclxuICAgIHByaXZhdGUgX3N1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB1c2VyIDogVXNlciA9IG51bGw7XHJcblxyXG4gICAgQElucHV0KCkgc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmQ/OiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIHNvdXJjZTogQ2hhdFNvdXJjZUJhc2UpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgQElucHV0KCkgdXJsOiBzdHJpbmc7XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5iYWNrZW5kLnVzZXJDaGFuZ2VkLnN1YnNjcmliZSh1c2VyID0+IHRoaXMudXNlciA9IHVzZXIpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzb3VyY2UoKSA6IENoYXRTb3VyY2VCYXNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBzb3VyY2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHRvcGljSUQoKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5pZGVudGlmaWVyO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB0b3BpY0lEKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTb3VyY2VGcm9tVG9waWNJRCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFyYml0cmFyeSBtZXRhZGF0YSB0byBzZW5kIHRvIHRoZSBjaGF0IHNlcnZlci4gVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGNvbnRleHQgYWJvdXQgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyXHJcbiAgICAgKiBmb3IgdGhpbmdzIGxpa2UgdmFsaWRhdGluZyBhdXRob3JpemF0aW9uIGFuZCBvdGhlciB1c2VzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBnZXQgbWV0YWRhdGEoKSB7IHJldHVybiB0aGlzLl9tZXRhZGF0YTsgfVxyXG4gICAgc2V0IG1ldGFkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX21ldGFkYXRhKSAhPT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVsb2FkU291cmNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3JlbG9hZFNvdXJjZVRpbWVvdXQ7XHJcbiAgICBwcml2YXRlIHJlbG9hZFNvdXJjZSgpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVsb2FkU291cmNlVGltZW91dCk7XHJcbiAgICAgICAgdGhpcy5fcmVsb2FkU291cmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNvdXJjZUZyb21Ub3BpY0lEKHRoaXMudG9waWNJRCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRTb3VyY2VGcm9tVG9waWNJRCh0b3BpY0lEIDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UuY2xvc2UpXHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fc291cmNlID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldFNvdXJjZUZvclRvcGljKHRvcGljSUQsIHsgXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2lnbkluTGFiZWwgPSAnU2lnbiBJbic7XHJcbiAgICBASW5wdXQoKSBzZW5kTGFiZWwgPSAnU2VuZCc7XHJcbiAgICBASW5wdXQoKSBwZXJtaXNzaW9uRGVuaWVkTGFiZWwgPSAnU2VuZCc7XHJcbiAgICBASW5wdXQoKSBtZXNzYWdlRmllbGRQbGFjZWhvbGRlciA9ICdDaGF0JztcclxuICAgIEBJbnB1dCgpIGVtcHR5TGFiZWwgPSAnQmUgdGhlIGZpcnN0IHRvIGNoYXQnO1xyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCQgPSB0aGlzLl9zZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9yZXBvcnRlZCQgPSB0aGlzLl9yZXBvcnRlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQkID0gdGhpcy5fdXB2b3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3VzZXJTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkJCA9IHRoaXMuX3VzZXJTZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3Blcm1pc3Npb25EZW5pZWRFcnJvciA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIHByaXZhdGUgX3Blcm1pc3Npb25EZW5pZWRFcnJvciQgPSB0aGlzLl9wZXJtaXNzaW9uRGVuaWVkRXJyb3IuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIF9zaWduSW5TZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9zaWduSW5TZWxlY3RlZCQgPSB0aGlzLl9zaWduSW5TZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3JlY2VpdmVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9yZWNlaXZlZCQgPSB0aGlzLl9yZWNlaXZlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBAT3V0cHV0KCkgZ2V0IHNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHJlcG9ydGVkKCkgeyByZXR1cm4gdGhpcy5fcmVwb3J0ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHVwdm90ZWQoKSB7IHJldHVybiB0aGlzLl91cHZvdGVkJDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1c2VyU2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl91c2VyU2VsZWN0ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHBlcm1pc3Npb25EZW5pZWRFcnJvcigpIHsgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvciQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgc2lnbkluU2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9zaWduSW5TZWxlY3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgcmVjZWl2ZWQoKSB7IHJldHVybiB0aGlzLl9yZWNlaXZlZCQ7IH1cclxuXHJcbiAgICBvblJlY2VpdmVkKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVjZWl2ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RW1vamlQYW5lbCA9IGZhbHNlO1xyXG5cclxuICAgIHNob3dTaWduSW4oKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbkluU2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbmRQZXJtaXNzaW9uRXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvbkRlbmllZEVycm9yLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0RW1vamkoZW1vamkpIHtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9IHRoaXMubmV3TWVzc2FnZS5tZXNzYWdlIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLm5ld01lc3NhZ2UubWVzc2FnZSA9IG1lc3NhZ2UgKyBlbW9qaTtcclxuICAgIH1cclxuXHJcbiAgICBvbktleURvd24oZXZlbnQgOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2NoYXRWaWV3JykgY2hhdFZpZXcgOiBDaGF0Vmlld0NvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXRFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuICAgIGp1bXBUb01lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhdFZpZXcpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhdFZpZXcuanVtcFRvKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdChtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVzZXIobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlbGVjdGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwb3J0KG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXB2b3RlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc291cmNlLmxpa2VNZXNzYWdlKG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgIHRoaXMuX3Vwdm90ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FuQ2hhdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXNlcilcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLnVzZXIucGVybWlzc2lvbnMpXHJcbiAgICAgICAgLy8gICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAvLyBpZiAoIXRoaXMudXNlci5wZXJtaXNzaW9ucy5jYW5DaGF0KVxyXG4gICAgICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMudXNlci5wZXJtaXNzaW9ucz8uY2FuQ2hhdCh0aGlzLnNvdXJjZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3TWVzc2FnZSA6IE5ld01lc3NhZ2VGb3JtID0ge307XHJcblxyXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgdGV4dCA9ICh0aGlzLm5ld01lc3NhZ2UubWVzc2FnZSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgIHRoaXMubmV3TWVzc2FnZS5tZXNzYWdlID0gJyc7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0ID09PSAnJylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbWVzc2FnZSA6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICB1c2VyOiBudWxsLFxyXG4gICAgICAgICAgICBzZW50QXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIGxpa2VzOiAwLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsID8/ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLmhyZWYgOiB1bmRlZmluZWQpLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0ZXh0XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0ID0gYXdhaXQgdGhpcy5zaG91bGRJbnRlcmNlcHRNZXNzYWdlU2VuZD8uKG1lc3NhZ2UsIHRoaXMuc291cmNlKTtcclxuICAgICAgICAgICAgaWYgKCFpbnRlcmNlcHQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlLnNlbmQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hhdFZpZXcuc2Nyb2xsVG9MYXRlc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNlbmQgbWVzc2FnZTogYCwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxiYW50YS1jaGF0LXZpZXcgXHJcbiAgICAjY2hhdFZpZXdcclxuICAgIFtzb3VyY2VdPVwic291cmNlXCJcclxuICAgIFtlbXB0eUxhYmVsXT1cImVtcHR5TGFiZWxcIlxyXG4gICAgKHVwdm90ZWQpPVwidXB2b3RlKCRldmVudClcIlxyXG4gICAgKHJlcG9ydGVkKT1cInJlcG9ydCgkZXZlbnQpXCJcclxuICAgIChzZWxlY3RlZCk9XCJzZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAocmVjZWl2ZWQpPVwib25SZWNlaXZlZCgkZXZlbnQpXCJcclxuICAgICh1c2VyU2VsZWN0ZWQpPVwic2VsZWN0VXNlcigkZXZlbnQpXCJcclxuICAgID48L2JhbnRhLWNoYXQtdmlldz5cclxuXHJcbjxmb3JtIGNsYXNzPVwibmV3LW1lc3NhZ2VcIiAoc3VibWl0KT1cInNlbmRNZXNzYWdlKClcIj5cclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cImVudHJ5LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAjaW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBuYW1lPVwibWVzc2FnZVwiIFxyXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICBlbnRlcmtleWhpbnQ9XCJzZW5kXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1lc3NhZ2VGaWVsZFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld01lc3NhZ2UubWVzc2FnZVwiIC8+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIDxlbW9qaS1zZWxlY3Rvci1idXR0b25cclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cImluc2VydEVtb2ppKCRldmVudClcIlxyXG4gICAgICAgICAgICBvdmVybGF5WT1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgIG92ZXJsYXlYPVwiZW5kXCJcclxuICAgICAgICAgICAgb3JpZ2luWT1cInRvcFwiXHJcbiAgICAgICAgICAgID48L2Vtb2ppLXNlbGVjdG9yLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2hvd1NpZ25JbigpXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+e3tzaWduSW5MYWJlbH19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhbkNoYXRcIiBbZGlzYWJsZWRdPVwiIW5ld01lc3NhZ2UubWVzc2FnZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPnt7c2VuZExhYmVsfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFjYW5DaGF0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZW5kUGVybWlzc2lvbkVycm9yKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj57e3Blcm1pc3Npb25EZW5pZWRMYWJlbH19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
@@ -1,62 +0,0 @@
1
- import { Component, Input, Output } from "@angular/core";
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/material/icon";
6
- import * as i3 from "@angular/material/button";
7
- export class ChatMessageComponent {
8
- constructor() {
9
- this._selected = new Subject();
10
- this._reported = new Subject();
11
- this._upvoted = new Subject();
12
- this._userSelected = new Subject();
13
- }
14
- get userSelected() {
15
- return this._userSelected;
16
- }
17
- get selected() {
18
- return this._selected;
19
- }
20
- get reported() {
21
- return this._reported;
22
- }
23
- get upvoted() {
24
- return this._upvoted;
25
- }
26
- avatarForUser(user) {
27
- if (user && user.avatarUrl) {
28
- let url = user.avatarUrl;
29
- return `url(${url})`;
30
- }
31
- return null;
32
- }
33
- upvote() {
34
- this._upvoted.next();
35
- }
36
- report() {
37
- this._reported.next();
38
- }
39
- select() {
40
- this._selected.next();
41
- }
42
- selectUser() {
43
- this._userSelected.next(this.message.user);
44
- }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ChatMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: ChatMessageComponent, selector: "banta-chat-message", inputs: { message: "message" }, outputs: { userSelected: "userSelected", selected: "selected", reported: "reported", upvoted: "upvoted" }, ngImport: i0, template: "<div class=\"message-content\">\r\n <div class=\"user\" (click)=\"selectUser()\">\r\n <div class=\"avatar\" [style.background-image]=\"avatarForUser(message.user)\"></div>\r\n <label>{{message.user.username}}</label>\r\n </div>\r\n <div class=\"content\">\r\n <div (click)=\"select()\">\r\n {{message.message}}\r\n </div>\r\n <div class=\"status\">\r\n <div class=\"count-indicator\" *ngIf=\"message.likes > 0\">\r\n <mat-icon>star</mat-icon> {{message.likes}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"actions\">\r\n <button mat-icon-button matTooltip=\"Upvote\" matTooltipPosition=\"below\" (click)=\"upvote()\">\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n <button mat-icon-button matTooltip=\"Report\" matTooltipPosition=\"below\" (click)=\"report()\">\r\n <mat-icon>report</mat-icon>\r\n </button>\r\n</div>", styles: [":host{display:flex;flex-direction:row;align-items:center;padding:0 1em;background-color:#fff;color:#000;transition:.4s background-color ease-out}:host .message-content .content{color:#111}:host:hover{background-color:#ddd}:host.highlight{background:#00121b}:host.highlight:hover{background:#01324d}:host:nth-child(2n){background-color:#eee}:host:nth-child(2n):hover{background:#ddd}:host:nth-child(2n) .message-content .content{color:#222}:host:nth-child(2n).highlight{background:#001a2a}:host:nth-child(2n).highlight:hover{background:#002b44}:host .message-content{display:flex;flex-direction:row;flex-grow:1;align-items:center}:host .message-content .content{display:flex;flex-direction:row;padding:5px 0}:host .message-content .content .status{display:flex;flex-direction:row;align-items:center;margin-left:1em}:host .message-content .content .status mat-icon{margin-left:.5em}:host .user{color:#999;font-weight:400;text-align:right;margin-right:.25em;flex-shrink:0;display:flex;align-items:center}:host .user .avatar{background-position:center;background-size:cover;background-color:#333;border-radius:100%;flex-shrink:0;flex-grow:0;margin-right:1em;width:2em;height:2em}:host .user:after{content:\":\";margin-right:1em}:host .content{flex-grow:1}:host .actions{flex-shrink:0;white-space:nowrap;opacity:0;transition:.4s opacity ease-out}:host:hover .actions{opacity:1}.count-indicator{white-space:nowrap}.count-indicator mat-icon{vertical-align:bottom}:host-context(.mat-dark-theme){background-color:#000;color:#fff}:host-context(.mat-dark-theme) .message-content .content{color:#ddd}:host-context(.mat-dark-theme):hover{background-color:#111}:host-context(.mat-dark-theme):nth-child(2n).highlight{background:#001a2a}:host-context(.mat-dark-theme):nth-child(2n).highlight:hover{background:#002b44}:host-context(.mat-dark-theme):nth-child(2n):hover{background-color:#111}:host-context(.mat-dark-theme):nth-child(2n){background-color:#080808}:host-context(.mat-dark-theme):nth-child(2n) .message-content .content{color:#eee}label{margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
47
- }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ChatMessageComponent, decorators: [{
49
- type: Component,
50
- args: [{ selector: 'banta-chat-message', template: "<div class=\"message-content\">\r\n <div class=\"user\" (click)=\"selectUser()\">\r\n <div class=\"avatar\" [style.background-image]=\"avatarForUser(message.user)\"></div>\r\n <label>{{message.user.username}}</label>\r\n </div>\r\n <div class=\"content\">\r\n <div (click)=\"select()\">\r\n {{message.message}}\r\n </div>\r\n <div class=\"status\">\r\n <div class=\"count-indicator\" *ngIf=\"message.likes > 0\">\r\n <mat-icon>star</mat-icon> {{message.likes}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"actions\">\r\n <button mat-icon-button matTooltip=\"Upvote\" matTooltipPosition=\"below\" (click)=\"upvote()\">\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n <button mat-icon-button matTooltip=\"Report\" matTooltipPosition=\"below\" (click)=\"report()\">\r\n <mat-icon>report</mat-icon>\r\n </button>\r\n</div>", styles: [":host{display:flex;flex-direction:row;align-items:center;padding:0 1em;background-color:#fff;color:#000;transition:.4s background-color ease-out}:host .message-content .content{color:#111}:host:hover{background-color:#ddd}:host.highlight{background:#00121b}:host.highlight:hover{background:#01324d}:host:nth-child(2n){background-color:#eee}:host:nth-child(2n):hover{background:#ddd}:host:nth-child(2n) .message-content .content{color:#222}:host:nth-child(2n).highlight{background:#001a2a}:host:nth-child(2n).highlight:hover{background:#002b44}:host .message-content{display:flex;flex-direction:row;flex-grow:1;align-items:center}:host .message-content .content{display:flex;flex-direction:row;padding:5px 0}:host .message-content .content .status{display:flex;flex-direction:row;align-items:center;margin-left:1em}:host .message-content .content .status mat-icon{margin-left:.5em}:host .user{color:#999;font-weight:400;text-align:right;margin-right:.25em;flex-shrink:0;display:flex;align-items:center}:host .user .avatar{background-position:center;background-size:cover;background-color:#333;border-radius:100%;flex-shrink:0;flex-grow:0;margin-right:1em;width:2em;height:2em}:host .user:after{content:\":\";margin-right:1em}:host .content{flex-grow:1}:host .actions{flex-shrink:0;white-space:nowrap;opacity:0;transition:.4s opacity ease-out}:host:hover .actions{opacity:1}.count-indicator{white-space:nowrap}.count-indicator mat-icon{vertical-align:bottom}:host-context(.mat-dark-theme){background-color:#000;color:#fff}:host-context(.mat-dark-theme) .message-content .content{color:#ddd}:host-context(.mat-dark-theme):hover{background-color:#111}:host-context(.mat-dark-theme):nth-child(2n).highlight{background:#001a2a}:host-context(.mat-dark-theme):nth-child(2n).highlight:hover{background:#002b44}:host-context(.mat-dark-theme):nth-child(2n):hover{background-color:#111}:host-context(.mat-dark-theme):nth-child(2n){background-color:#080808}:host-context(.mat-dark-theme):nth-child(2n) .message-content .content{color:#eee}label{margin:0}\n"] }]
51
- }], propDecorators: { message: [{
52
- type: Input
53
- }], userSelected: [{
54
- type: Output
55
- }], selected: [{
56
- type: Output
57
- }], reported: [{
58
- type: Output
59
- }], upvoted: [{
60
- type: Output
61
- }] } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NoYXQvY2hhdC1tZXNzYWdlL2NoYXQtbWVzc2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2NoYXQtbWVzc2FnZS9jaGF0LW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBTy9CLE1BQU0sT0FBTyxvQkFBb0I7SUFMakM7UUFNWSxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNoQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNoQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMvQixrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7S0FrRC9DO0lBN0NHLElBQ0ksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVc7UUFDckIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDekIsT0FBTyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs4R0FwRFEsb0JBQW9CO2tHQUFwQixvQkFBb0IscU1DVGpDLHM4QkF1Qk07OzJGRGRPLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDSSxvQkFBb0I7OEJBVzlCLE9BQU87c0JBRE4sS0FBSztnQkFJRixZQUFZO3NCQURmLE1BQU07Z0JBTUgsUUFBUTtzQkFEWCxNQUFNO2dCQU1ILFFBQVE7c0JBRFgsTUFBTTtnQkFNSCxPQUFPO3NCQURWLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBVc2VyLCBDaGF0TWVzc2FnZSB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtY2hhdC1tZXNzYWdlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGF0LW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2hhdC1tZXNzYWdlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXRNZXNzYWdlQ29tcG9uZW50IHtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8VXNlcj4oKTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgbWVzc2FnZSA6IENoYXRNZXNzYWdlO1xyXG4gICAgXHJcbiAgICBAT3V0cHV0KCkgXHJcbiAgICBnZXQgdXNlclNlbGVjdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgZ2V0IHJlcG9ydGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBvcnRlZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCB1cHZvdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91cHZvdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGF2YXRhckZvclVzZXIodXNlciA6IFVzZXIpIHtcclxuICAgICAgICBpZiAodXNlciAmJiB1c2VyLmF2YXRhclVybCkge1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gdXNlci5hdmF0YXJVcmw7XHJcbiAgICAgICAgICAgIHJldHVybiBgdXJsKCR7dXJsfSlgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHVwdm90ZSgpIHtcclxuICAgICAgICB0aGlzLl91cHZvdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXBvcnQoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdCgpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHNlbGVjdFVzZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlbGVjdGVkLm5leHQodGhpcy5tZXNzYWdlLnVzZXIpO1xyXG4gICAgfVxyXG5cclxufSIsIjxkaXYgY2xhc3M9XCJtZXNzYWdlLWNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyXCIgKGNsaWNrKT1cInNlbGVjdFVzZXIoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXJcIiBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCJhdmF0YXJGb3JVc2VyKG1lc3NhZ2UudXNlcilcIj48L2Rpdj5cclxuICAgICAgICA8bGFiZWw+e3ttZXNzYWdlLnVzZXIudXNlcm5hbWV9fTwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0KClcIj5cclxuICAgICAgICAgICAge3ttZXNzYWdlLm1lc3NhZ2V9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50LWluZGljYXRvclwiICpuZ0lmPVwibWVzc2FnZS5saWtlcyA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5zdGFyPC9tYXQtaWNvbj4ge3ttZXNzYWdlLmxpa2VzfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiVXB2b3RlXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIiAoY2xpY2spPVwidXB2b3RlKClcIj5cclxuICAgICAgICA8bWF0LWljb24+dGh1bWJfdXA8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiUmVwb3J0XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIiAoY2xpY2spPVwicmVwb3J0KClcIj5cclxuICAgICAgICA8bWF0LWljb24+cmVwb3J0PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG48L2Rpdj4iXX0=
@@ -1,166 +0,0 @@
1
- import { Component, Input, ViewChild, Output } from "@angular/core";
2
- import { Subject, Subscription } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../chat-backend-base";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "../chat-message/chat-message.component";
7
- export class ChatViewComponent {
8
- constructor(backend, elementRef) {
9
- this.backend = backend;
10
- this.elementRef = elementRef;
11
- this._sourceSubs = new Subscription();
12
- this._selected = new Subject();
13
- this._selected$ = this._selected.asObservable();
14
- this._reported = new Subject();
15
- this._reported$ = this._reported.asObservable();
16
- this._upvoted = new Subject();
17
- this._upvoted$ = this._upvoted.asObservable();
18
- this._userSelected = new Subject();
19
- this._userSelected$ = this._userSelected.asObservable();
20
- this._received = new Subject();
21
- this._received$ = this._received.asObservable();
22
- this.messages = [];
23
- this.maxMessages = 200;
24
- this.emptyLabel = 'Be the first to chat';
25
- }
26
- get source() {
27
- return this._source;
28
- }
29
- get selected() { return this._selected$; }
30
- get userSelected() { return this._userSelected$; }
31
- get reported() { return this._reported$; }
32
- get upvoted() { return this._upvoted$; }
33
- get received() { return this._received$; }
34
- set source(value) {
35
- if (this._sourceSubs) {
36
- this._sourceSubs.unsubscribe();
37
- this._sourceSubs = null;
38
- }
39
- this._source = value;
40
- this.messages = [];
41
- if (value) {
42
- this._sourceSubs = new Subscription();
43
- this.messages = value.messages.slice();
44
- this._sourceSubs.add(this._source.messageReceived.subscribe(msg => this.messageReceived(msg)));
45
- this._sourceSubs.add(this._source.messageSent.subscribe(msg => this.messageSent(msg)));
46
- this._sourceSubs.add(this.backend.userChanged
47
- .subscribe(user => this.currentUser = user));
48
- this.getInitialMessages();
49
- }
50
- }
51
- async getInitialMessages() {
52
- let messages = (await this._source.getExistingMessages());
53
- messages.forEach(m => m.transientState ??= {});
54
- this.messages = messages.slice().reverse();
55
- this.sortMessages();
56
- }
57
- sortMessages() {
58
- if (!this.source)
59
- return;
60
- let sorter;
61
- sorter = (a, b) => (a.sentAt - b.sentAt);
62
- this.messages.sort(sorter);
63
- }
64
- addMessage(message) {
65
- if (this.messages.length > this.maxMessages + 1) {
66
- while (this.messages.length > this.maxMessages)
67
- this.messages.shift();
68
- }
69
- this.messages.push(message);
70
- this.sortMessages();
71
- }
72
- messageReceived(message) {
73
- this.addMessage(message);
74
- this._received.next(message);
75
- if (this.isScrolledToLatest())
76
- setTimeout(() => this.scrollToLatest());
77
- }
78
- isScrolledToLatest() {
79
- if (!this.messageContainer)
80
- return false;
81
- let el = this.messageContainer.nativeElement;
82
- let currentScroll = el.scrollTop;
83
- let currentTotal = el.scrollHeight - el.offsetHeight;
84
- return currentScroll > currentTotal - 10;
85
- }
86
- messageSent(message) {
87
- this.addMessage(message);
88
- if (!this.messageContainer)
89
- return;
90
- setTimeout(() => this.scrollToLatest());
91
- }
92
- scrollToLatest() {
93
- if (!this.messageContainer)
94
- return;
95
- let el = this.messageContainer.nativeElement;
96
- el.scrollTop = el.scrollHeight;
97
- }
98
- jumpTo(message) {
99
- let element = this.elementRef.nativeElement;
100
- let messageElement = element.querySelector(`banta-chat-message[data-id="${message.id}"]`);
101
- if (!messageElement) {
102
- alert(`could not find message ${message.id}`);
103
- return;
104
- }
105
- messageElement.scrollIntoView({ behavior: 'smooth' });
106
- this.flashMessage(message);
107
- }
108
- flashMessage(message) {
109
- if (!message)
110
- return;
111
- this.flashedMessageId = message.id;
112
- //setTimeout(() => this.flashedMessageId = null, 250);
113
- }
114
- mentionsMe(message) {
115
- if (!this.currentUser)
116
- return false;
117
- if (message.message.includes(`@${this.currentUser.username}`))
118
- return true;
119
- return false;
120
- }
121
- upvoteMessage(message) {
122
- this._upvoted.next(message);
123
- }
124
- reportMessage(message) {
125
- this._reported.next(message);
126
- }
127
- selectMessage(message) {
128
- this._selected.next(message);
129
- }
130
- selectMessageUser(message) {
131
- this._userSelected.next(message);
132
- }
133
- avatarForUser(user) {
134
- if (user && user.avatarUrl) {
135
- let url = user.avatarUrl;
136
- return `url(${url})`;
137
- }
138
- return null;
139
- }
140
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ChatViewComponent, deps: [{ token: i1.ChatBackendBase }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
141
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: ChatViewComponent, selector: "banta-chat-view", inputs: { source: "source", maxMessages: "maxMessages", emptyLabel: "emptyLabel" }, outputs: { selected: "selected", userSelected: "userSelected", reported: "reported", upvoted: "upvoted", received: "received" }, viewQueries: [{ propertyName: "messageContainer", first: true, predicate: ["messageContainer"], descendants: true }], ngImport: i0, template: "<div class=\"message-container\" #messageContainer>\r\n <ng-content select=\"[data-before]\"></ng-content>\r\n \r\n <div class=\"empty\" *ngIf=\"messages.length === 0\">\r\n {{emptyLabel}}\r\n </div>\r\n \r\n <ng-container *ngFor=\"let message of messages\">\r\n <banta-chat-message\r\n *ngIf=\"!message.hidden\"\r\n [message]=\"message\"\r\n [class.highlight]=\"mentionsMe(message)\" \r\n [class.flash]=\"message.id === flashedMessageId\"\r\n (selected)=\"selectMessage(message)\"\r\n (upvoted)=\"upvoteMessage(message)\"\r\n (reported)=\"reportMessage(message)\"\r\n (userSelected)=\"selectMessageUser(message)\"\r\n [attr.data-id]=\"message.id\"\r\n >\r\n </banta-chat-message>\r\n </ng-container>\r\n <ng-content select=\":not([data-before])\"></ng-content>\r\n</div>", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-height:1px}.message-container{flex-grow:1;overflow-y:auto;overflow-x:hidden;height:10em;color:#000;background:#fff;padding:.5em 1em .5em .5em}.message-container.no-scroll{height:auto;overflow-y:visible}:host-context(.mat-dark-theme) .message-container{color:#fff;background:#000}banta-chat-message.flash{animation:flash;animation-duration:2.5s;animation-iteration-count:1}@keyframes flash{0%{transform:scale(1);background:#425700}25%{transform:scale(1.05)}50%{transform:scale(1)}75%{transform:scale(1.05)}to{transform:scale(1)}}.empty{text-align:center;margin:2em;color:#888;font-size:150%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ChatMessageComponent, selector: "banta-chat-message", inputs: ["message"], outputs: ["userSelected", "selected", "reported", "upvoted"] }] }); }
142
- }
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ChatViewComponent, decorators: [{
144
- type: Component,
145
- args: [{ selector: 'banta-chat-view', template: "<div class=\"message-container\" #messageContainer>\r\n <ng-content select=\"[data-before]\"></ng-content>\r\n \r\n <div class=\"empty\" *ngIf=\"messages.length === 0\">\r\n {{emptyLabel}}\r\n </div>\r\n \r\n <ng-container *ngFor=\"let message of messages\">\r\n <banta-chat-message\r\n *ngIf=\"!message.hidden\"\r\n [message]=\"message\"\r\n [class.highlight]=\"mentionsMe(message)\" \r\n [class.flash]=\"message.id === flashedMessageId\"\r\n (selected)=\"selectMessage(message)\"\r\n (upvoted)=\"upvoteMessage(message)\"\r\n (reported)=\"reportMessage(message)\"\r\n (userSelected)=\"selectMessageUser(message)\"\r\n [attr.data-id]=\"message.id\"\r\n >\r\n </banta-chat-message>\r\n </ng-container>\r\n <ng-content select=\":not([data-before])\"></ng-content>\r\n</div>", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-height:1px}.message-container{flex-grow:1;overflow-y:auto;overflow-x:hidden;height:10em;color:#000;background:#fff;padding:.5em 1em .5em .5em}.message-container.no-scroll{height:auto;overflow-y:visible}:host-context(.mat-dark-theme) .message-container{color:#fff;background:#000}banta-chat-message.flash{animation:flash;animation-duration:2.5s;animation-iteration-count:1}@keyframes flash{0%{transform:scale(1);background:#425700}25%{transform:scale(1.05)}50%{transform:scale(1)}75%{transform:scale(1.05)}to{transform:scale(1)}}.empty{text-align:center;margin:2em;color:#888;font-size:150%}\n"] }]
146
- }], ctorParameters: () => [{ type: i1.ChatBackendBase }, { type: i0.ElementRef }], propDecorators: { source: [{
147
- type: Input
148
- }], selected: [{
149
- type: Output
150
- }], userSelected: [{
151
- type: Output
152
- }], reported: [{
153
- type: Output
154
- }], upvoted: [{
155
- type: Output
156
- }], received: [{
157
- type: Output
158
- }], messageContainer: [{
159
- type: ViewChild,
160
- args: ['messageContainer']
161
- }], maxMessages: [{
162
- type: Input
163
- }], emptyLabel: [{
164
- type: Input
165
- }] } });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NoYXQvY2hhdC12aWV3L2NoYXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2NoYXQtdmlldy9jaGF0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTN0MsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixZQUNZLE9BQXdCLEVBQ3hCLFVBQW9DO1FBRHBDLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBS3hDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVFqQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDM0MsbUJBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25ELGNBQVMsR0FBRyxJQUFJLE9BQU8s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WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFVzZXIsIENoYXRNZXNzYWdlIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1iYWNrZW5kLWJhc2VcIjtcclxuaW1wb3J0IHsgQ2hhdFNvdXJjZUJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1zb3VyY2UtYmFzZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWNoYXQtdmlldycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hhdC12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NoYXQtdmlldy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0Vmlld0NvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQ6IENoYXRCYWNrZW5kQmFzZSxcclxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWYgOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NvdXJjZVN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICBwcml2YXRlIF9zb3VyY2UgOiBDaGF0U291cmNlQmFzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNvdXJjZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCQgPSB0aGlzLl9zZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9yZXBvcnRlZCQgPSB0aGlzLl9yZXBvcnRlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQkID0gdGhpcy5fdXB2b3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3VzZXJTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkJCA9IHRoaXMuX3VzZXJTZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3JlY2VpdmVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9yZWNlaXZlZCQgPSB0aGlzLl9yZWNlaXZlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBAT3V0cHV0KCkgZ2V0IHNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHVzZXJTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX3VzZXJTZWxlY3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgcmVwb3J0ZWQoKSB7IHJldHVybiB0aGlzLl9yZXBvcnRlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgdXB2b3RlZCgpIHsgcmV0dXJuIHRoaXMuX3Vwdm90ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHJlY2VpdmVkKCkgeyByZXR1cm4gdGhpcy5fcmVjZWl2ZWQkOyB9XHJcblxyXG4gICAgc2V0IHNvdXJjZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2VTdWJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3VicyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHZhbHVlLm1lc3NhZ2VzLnNsaWNlKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzLmFkZCh0aGlzLl9zb3VyY2UubWVzc2FnZVJlY2VpdmVkLnN1YnNjcmliZShtc2cgPT4gdGhpcy5tZXNzYWdlUmVjZWl2ZWQobXNnKSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzLmFkZCh0aGlzLl9zb3VyY2UubWVzc2FnZVNlbnQuc3Vic2NyaWJlKG1zZyA9PiB0aGlzLm1lc3NhZ2VTZW50KG1zZykpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMuYWRkKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kLnVzZXJDaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh1c2VyID0+IHRoaXMuY3VycmVudFVzZXIgPSB1c2VyKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsTWVzc2FnZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRJbml0aWFsTWVzc2FnZXMoKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VzID0gKGF3YWl0IHRoaXMuX3NvdXJjZS5nZXRFeGlzdGluZ01lc3NhZ2VzKCkpO1xyXG4gICAgICAgIG1lc3NhZ2VzLmZvckVhY2gobSA9PiBtLnRyYW5zaWVudFN0YXRlID8/PSB7fSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzLnNsaWNlKCkucmV2ZXJzZSgpO1xyXG4gICAgICAgIHRoaXMuc29ydE1lc3NhZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3J0TWVzc2FnZXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBzb3J0ZXI6IChhOiBDaGF0TWVzc2FnZSwgYjogQ2hhdE1lc3NhZ2UpID0+IG51bWJlcjtcclxuXHJcbiAgICAgICAgc29ydGVyID0gKGEsIGIpID0+IChhLnNlbnRBdCAtIGIuc2VudEF0KTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5zb3J0KHNvcnRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgbWVzc2FnZXMgOiBDaGF0TWVzc2FnZVtdID0gW107XHJcbiAgICBjdXJyZW50VXNlciA6IFVzZXI7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWVzc2FnZUNvbnRhaW5lcicpXHJcbiAgICBtZXNzYWdlQ29udGFpbmVyIDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgQElucHV0KCkgbWF4TWVzc2FnZXMgOiBudW1iZXIgPSAyMDA7XHJcbiAgICBASW5wdXQoKSBlbXB0eUxhYmVsID0gJ0JlIHRoZSBmaXJzdCB0byBjaGF0JztcclxuXHJcbiAgICBwcml2YXRlIGFkZE1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZXMubGVuZ3RoID4gdGhpcy5tYXhNZXNzYWdlcyArIDEpIHtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMubWVzc2FnZXMubGVuZ3RoID4gdGhpcy5tYXhNZXNzYWdlcylcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMuc2hpZnQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLnNvcnRNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWNlaXZlZC5uZXh0KG1lc3NhZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGVkVG9MYXRlc3QoKSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvTGF0ZXN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2Nyb2xsZWRUb0xhdGVzdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgZWwgPSB0aGlzLm1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBsZXQgY3VycmVudFNjcm9sbCA9IGVsLnNjcm9sbFRvcDtcclxuICAgICAgICBsZXQgY3VycmVudFRvdGFsID0gZWwuc2Nyb2xsSGVpZ2h0IC0gZWwub2Zmc2V0SGVpZ2h0O1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGwgPiBjdXJyZW50VG90YWwgLSAxMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZW50KG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9MYXRlc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9MYXRlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VDb250YWluZXIpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLm1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAganVtcFRvKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VFbGVtZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKGBiYW50YS1jaGF0LW1lc3NhZ2VbZGF0YS1pZD1cIiR7bWVzc2FnZS5pZH1cIl1gKVxyXG5cclxuICAgICAgICBpZiAoIW1lc3NhZ2VFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KGBjb3VsZCBub3QgZmluZCBtZXNzYWdlICR7bWVzc2FnZS5pZH1gKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWVzc2FnZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmxhc2hNZXNzYWdlKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGZsYXNoTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIW1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmZsYXNoZWRNZXNzYWdlSWQgPSBtZXNzYWdlLmlkO1xyXG4gICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB0aGlzLmZsYXNoZWRNZXNzYWdlSWQgPSBudWxsLCAyNTApO1xyXG4gICAgfVxyXG5cclxuICAgIGZsYXNoZWRNZXNzYWdlSWQgOiBzdHJpbmc7XHJcblxyXG5cclxuICAgIG1lbnRpb25zTWUobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VyKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UuaW5jbHVkZXMoYEAke3RoaXMuY3VycmVudFVzZXIudXNlcm5hbWV9YCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdXB2b3RlTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91cHZvdGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwb3J0TWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdE1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RNZXNzYWdlVXNlcihtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhdmF0YXJGb3JVc2VyKHVzZXIgOiBVc2VyKSB7XHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5hdmF0YXJVcmwpIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IHVzZXIuYXZhdGFyVXJsO1xyXG4gICAgICAgICAgICByZXR1cm4gYHVybCgke3VybH0pYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59IiwiPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgI21lc3NhZ2VDb250YWluZXI+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZGF0YS1iZWZvcmVdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiZW1wdHlcIiAqbmdJZj1cIm1lc3NhZ2VzLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgIHt7ZW1wdHlMYWJlbH19XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlc1wiPlxyXG4gICAgICAgIDxiYW50YS1jaGF0LW1lc3NhZ2VcclxuICAgICAgICAgICAgKm5nSWY9XCIhbWVzc2FnZS5oaWRkZW5cIlxyXG4gICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCJcclxuICAgICAgICAgICAgW2NsYXNzLmhpZ2hsaWdodF09XCJtZW50aW9uc01lKG1lc3NhZ2UpXCIgXHJcbiAgICAgICAgICAgIFtjbGFzcy5mbGFzaF09XCJtZXNzYWdlLmlkID09PSBmbGFzaGVkTWVzc2FnZUlkXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdE1lc3NhZ2UobWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKG1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UobWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAodXNlclNlbGVjdGVkKT1cInNlbGVjdE1lc3NhZ2VVc2VyKG1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJtZXNzYWdlLmlkXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2JhbnRhLWNoYXQtbWVzc2FnZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiOm5vdChbZGF0YS1iZWZvcmVdKVwiPjwvbmctY29udGVudD5cclxuPC9kaXY+Il19
@@ -1,51 +0,0 @@
1
- import { NgModule } from "@angular/core";
2
- import { ChatMessageComponent } from './chat-message/chat-message.component';
3
- import { ChatViewComponent } from './chat-view/chat-view.component';
4
- import { BantaChatComponent } from './banta-chat/banta-chat.component';
5
- import { CommonModule } from '@angular/common';
6
- import { FormsModule } from '@angular/forms';
7
- import { EmojiModule } from '../emoji';
8
- import { LiveChatMessageComponent } from './live-chat-message.component';
9
- import { MatButtonModule } from '@angular/material/button';
10
- import { MatIconModule } from '@angular/material/icon';
11
- import * as i0 from "@angular/core";
12
- const COMPONENTS = [
13
- ChatMessageComponent,
14
- LiveChatMessageComponent,
15
- ChatViewComponent,
16
- BantaChatComponent
17
- ];
18
- export class ChatModule {
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ChatModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: ChatModule, declarations: [ChatMessageComponent,
21
- LiveChatMessageComponent,
22
- ChatViewComponent,
23
- BantaChatComponent], imports: [CommonModule,
24
- FormsModule,
25
- MatIconModule,
26
- MatButtonModule,
27
- EmojiModule], exports: [ChatMessageComponent,
28
- LiveChatMessageComponent,
29
- ChatViewComponent,
30
- BantaChatComponent] }); }
31
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ChatModule, imports: [CommonModule,
32
- FormsModule,
33
- MatIconModule,
34
- MatButtonModule,
35
- EmojiModule] }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ChatModule, decorators: [{
38
- type: NgModule,
39
- args: [{
40
- declarations: COMPONENTS,
41
- imports: [
42
- CommonModule,
43
- FormsModule,
44
- MatIconModule,
45
- MatButtonModule,
46
- EmojiModule
47
- ],
48
- exports: COMPONENTS
49
- }]
50
- }] });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2NoYXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRXZELE1BQU0sVUFBVSxHQUFHO0lBQ2Ysb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixpQkFBaUI7SUFDakIsa0JBQWtCO0NBQ3JCLENBQUM7QUFhRixNQUFNLE9BQU8sVUFBVTs4R0FBVixVQUFVOytHQUFWLFVBQVUsaUJBakJuQixvQkFBb0I7WUFDcEIsd0JBQXdCO1lBQ3hCLGlCQUFpQjtZQUNqQixrQkFBa0IsYUFNZCxZQUFZO1lBQ1osV0FBVztZQUNYLGFBQWE7WUFDYixlQUFlO1lBQ2YsV0FBVyxhQWJmLG9CQUFvQjtZQUNwQix3QkFBd0I7WUFDeEIsaUJBQWlCO1lBQ2pCLGtCQUFrQjsrR0FjVCxVQUFVLFlBUmYsWUFBWTtZQUNaLFdBQVc7WUFDWCxhQUFhO1lBQ2IsZUFBZTtZQUNmLFdBQVc7OzJGQUlOLFVBQVU7a0JBWHRCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixlQUFlO3dCQUNmLFdBQVc7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFLFVBQVU7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vY2hhdC1tZXNzYWdlL2NoYXQtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2hhdC12aWV3L2NoYXQtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYW50YUNoYXRDb21wb25lbnQgfSBmcm9tICcuL2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRW1vamlNb2R1bGUgfSBmcm9tICcuLi9lbW9qaSc7XHJcbmltcG9ydCB7IExpdmVDaGF0TWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vbGl2ZS1jaGF0LW1lc3NhZ2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5cclxuY29uc3QgQ09NUE9ORU5UUyA9IFtcclxuICAgIENoYXRNZXNzYWdlQ29tcG9uZW50LFxyXG4gICAgTGl2ZUNoYXRNZXNzYWdlQ29tcG9uZW50LFxyXG4gICAgQ2hhdFZpZXdDb21wb25lbnQsXHJcbiAgICBCYW50YUNoYXRDb21wb25lbnRcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IENPTVBPTkVOVFMsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgICAgIEVtb2ppTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogQ09NUE9ORU5UU1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdE1vZHVsZSB7XHJcbn0iXX0=
@@ -1,6 +0,0 @@
1
- export * from './chat-message/chat-message.component';
2
- export * from './live-chat-message.component';
3
- export * from './chat-view/chat-view.component';
4
- export * from './banta-chat/banta-chat.component';
5
- export * from './chat.module';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NoYXQtbWVzc2FnZS9jaGF0LW1lc3NhZ2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saXZlLWNoYXQtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NoYXQtdmlldy9jaGF0LXZpZXcuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9iYW50YS1jaGF0L2JhbnRhLWNoYXQuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vY2hhdC5tb2R1bGUnOyJdfQ==