@banta/sdk 5.4.0 → 5.5.1

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 (138) hide show
  1. package/{esm2020 → esm2022}/banta-sdk.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/attachment-scraper.mjs +1 -1
  3. package/esm2022/lib/banta/banta.component.mjs +204 -0
  4. package/{esm2020 → esm2022}/lib/banta-logo.component.mjs +11 -11
  5. package/{esm2020 → esm2022}/lib/banta-sdk.module.mjs +135 -135
  6. package/esm2022/lib/chat/banta-chat/banta-chat.component.mjs +209 -0
  7. package/esm2022/lib/chat/chat-message/chat-message.component.mjs +62 -0
  8. package/esm2022/lib/chat/chat-view/chat-view.component.mjs +170 -0
  9. package/{esm2020 → esm2022}/lib/chat/chat.module.mjs +51 -51
  10. package/{esm2020 → esm2022}/lib/chat/index.mjs +5 -5
  11. package/esm2022/lib/chat/live-chat-message.component.mjs +80 -0
  12. package/{esm2020 → esm2022}/lib/chat-backend-base.mjs +30 -30
  13. package/esm2022/lib/chat-backend.mjs +194 -0
  14. package/{esm2020 → esm2022}/lib/chat-source-base.mjs +1 -1
  15. package/esm2022/lib/chat-source.mjs +233 -0
  16. package/esm2022/lib/comments/attachment-button/attachment-button.component.mjs +76 -0
  17. package/esm2022/lib/comments/attachment-scraper.directive.mjs +107 -0
  18. package/esm2022/lib/comments/banta-comments/banta-comments.component.mjs +748 -0
  19. package/esm2022/lib/comments/comment/comment.component.mjs +175 -0
  20. package/esm2022/lib/comments/comment-field/comment-field.component.mjs +401 -0
  21. package/esm2022/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
  22. package/esm2022/lib/comments/comment-view/comment-view.component.mjs +470 -0
  23. package/{esm2020 → esm2022}/lib/comments/comments.module.mjs +111 -111
  24. package/{esm2020 → esm2022}/lib/comments/index.mjs +10 -10
  25. package/esm2022/lib/comments/live-comment.component.mjs +80 -0
  26. package/{esm2020 → esm2022}/lib/comments/reply-send-options.directive.mjs +13 -13
  27. package/esm2022/lib/common/attachment/attachment.component.mjs +128 -0
  28. package/{esm2020 → esm2022}/lib/common/attachments/attachments.component.mjs +75 -75
  29. package/{esm2020 → esm2022}/lib/common/common.module.mjs +68 -68
  30. package/{esm2020 → esm2022}/lib/common/index.mjs +10 -10
  31. package/{esm2020 → esm2022}/lib/common/lazy-connection.mjs +14 -14
  32. package/esm2022/lib/common/lightbox/lightbox.component.mjs +31 -0
  33. package/esm2022/lib/common/markdown-to-html.pipe.mjs +88 -0
  34. package/esm2022/lib/common/mention-linker.pipe.mjs +35 -0
  35. package/esm2022/lib/common/timer-pool.service.mjs +85 -0
  36. package/esm2022/lib/common/timestamp.component.mjs +124 -0
  37. package/{esm2020 → esm2022}/lib/common/trust-resource-url.pipe.mjs +22 -22
  38. package/esm2022/lib/emoji/emoji-selector-button.component.mjs +115 -0
  39. package/esm2022/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +98 -0
  40. package/{esm2020 → esm2022}/lib/emoji/emoji.module.mjs +55 -55
  41. package/{esm2020 → esm2022}/lib/emoji/emojis.mjs +6507 -6507
  42. package/{esm2020 → esm2022}/lib/emoji/index.mjs +4 -4
  43. package/esm2022/lib/giphy-attachments.mjs +16 -0
  44. package/{esm2020 → esm2022}/lib/index.mjs +19 -19
  45. package/{esm2020 → esm2022}/lib/live-message.component.mjs +61 -61
  46. package/{esm2020 → esm2022}/lib/message-menu-item.mjs +1 -1
  47. package/{esm2020 → esm2022}/lib/sdk-options.mjs +1 -1
  48. package/esm2022/lib/static-chat-source.mjs +71 -0
  49. package/esm2022/lib/tweet-attachments.mjs +13 -0
  50. package/esm2022/lib/url-attachments.mjs +42 -0
  51. package/esm2022/lib/youtube-attachments.mjs +29 -0
  52. package/{esm2020 → esm2022}/public-api.mjs +4 -4
  53. package/{fesm2020 → fesm2022}/banta-sdk.mjs +10825 -10823
  54. package/fesm2022/banta-sdk.mjs.map +1 -0
  55. package/index.d.ts +5 -5
  56. package/lib/attachment-scraper.d.ts +15 -15
  57. package/lib/banta/banta.component.d.ts +58 -58
  58. package/lib/banta-logo.component.d.ts +5 -5
  59. package/lib/banta-sdk.module.d.ts +31 -31
  60. package/lib/chat/banta-chat/banta-chat.component.d.ts +79 -79
  61. package/lib/chat/chat-message/chat-message.component.d.ts +21 -21
  62. package/lib/chat/chat-view/chat-view.component.d.ts +52 -52
  63. package/lib/chat/chat.module.d.ts +15 -15
  64. package/lib/chat/index.d.ts +5 -5
  65. package/lib/chat/live-chat-message.component.d.ts +23 -23
  66. package/lib/chat-backend-base.d.ts +72 -72
  67. package/lib/chat-backend.d.ts +67 -67
  68. package/lib/chat-source-base.d.ts +44 -44
  69. package/lib/chat-source.d.ts +65 -65
  70. package/lib/comments/attachment-button/attachment-button.component.d.ts +17 -17
  71. package/lib/comments/attachment-scraper.directive.d.ts +21 -21
  72. package/lib/comments/banta-comments/banta-comments.component.d.ts +203 -203
  73. package/lib/comments/comment/comment.component.d.ts +72 -72
  74. package/lib/comments/comment-field/comment-field.component.d.ts +89 -89
  75. package/lib/comments/comment-sort/comment-sort.component.d.ts +16 -16
  76. package/lib/comments/comment-view/comment-view.component.d.ts +121 -121
  77. package/lib/comments/comments.module.d.ts +30 -30
  78. package/lib/comments/index.d.ts +10 -10
  79. package/lib/comments/live-comment.component.d.ts +23 -23
  80. package/lib/comments/reply-send-options.directive.d.ts +5 -5
  81. package/lib/common/attachment/attachment.component.d.ts +34 -34
  82. package/lib/common/attachments/attachments.component.d.ts +26 -26
  83. package/lib/common/common.module.d.ts +19 -19
  84. package/lib/common/index.d.ts +10 -10
  85. package/lib/common/lazy-connection.d.ts +6 -6
  86. package/lib/common/lightbox/lightbox.component.d.ts +14 -14
  87. package/lib/common/markdown-to-html.pipe.d.ts +15 -15
  88. package/lib/common/mention-linker.pipe.d.ts +13 -13
  89. package/lib/common/timer-pool.service.d.ts +15 -15
  90. package/lib/common/timestamp.component.d.ts +19 -19
  91. package/lib/common/trust-resource-url.pipe.d.ts +10 -10
  92. package/lib/emoji/emoji-selector-button.component.d.ts +30 -30
  93. package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +26 -26
  94. package/lib/emoji/emoji.module.d.ts +16 -16
  95. package/lib/emoji/emojis.d.ts +6507 -6507
  96. package/lib/emoji/index.d.ts +4 -4
  97. package/lib/giphy-attachments.d.ts +5 -5
  98. package/lib/index.d.ts +19 -19
  99. package/lib/live-message.component.d.ts +22 -22
  100. package/lib/message-menu-item.d.ts +6 -6
  101. package/lib/sdk-options.d.ts +5 -5
  102. package/lib/static-chat-source.d.ts +42 -42
  103. package/lib/tweet-attachments.d.ts +5 -5
  104. package/lib/url-attachments.d.ts +14 -14
  105. package/lib/youtube-attachments.d.ts +5 -5
  106. package/package.json +5 -11
  107. package/public-api.d.ts +1 -1
  108. package/esm2020/lib/banta/banta.component.mjs +0 -204
  109. package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +0 -209
  110. package/esm2020/lib/chat/chat-message/chat-message.component.mjs +0 -62
  111. package/esm2020/lib/chat/chat-view/chat-view.component.mjs +0 -170
  112. package/esm2020/lib/chat/live-chat-message.component.mjs +0 -80
  113. package/esm2020/lib/chat-backend.mjs +0 -194
  114. package/esm2020/lib/chat-source.mjs +0 -233
  115. package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +0 -76
  116. package/esm2020/lib/comments/attachment-scraper.directive.mjs +0 -107
  117. package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +0 -749
  118. package/esm2020/lib/comments/comment/comment.component.mjs +0 -175
  119. package/esm2020/lib/comments/comment-field/comment-field.component.mjs +0 -401
  120. package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +0 -37
  121. package/esm2020/lib/comments/comment-view/comment-view.component.mjs +0 -470
  122. package/esm2020/lib/comments/live-comment.component.mjs +0 -80
  123. package/esm2020/lib/common/attachment/attachment.component.mjs +0 -128
  124. package/esm2020/lib/common/lightbox/lightbox.component.mjs +0 -31
  125. package/esm2020/lib/common/markdown-to-html.pipe.mjs +0 -88
  126. package/esm2020/lib/common/mention-linker.pipe.mjs +0 -35
  127. package/esm2020/lib/common/timer-pool.service.mjs +0 -83
  128. package/esm2020/lib/common/timestamp.component.mjs +0 -123
  129. package/esm2020/lib/emoji/emoji-selector-button.component.mjs +0 -116
  130. package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +0 -98
  131. package/esm2020/lib/giphy-attachments.mjs +0 -16
  132. package/esm2020/lib/static-chat-source.mjs +0 -71
  133. package/esm2020/lib/tweet-attachments.mjs +0 -13
  134. package/esm2020/lib/url-attachments.mjs +0 -42
  135. package/esm2020/lib/youtube-attachments.mjs +0 -29
  136. package/fesm2015/banta-sdk.mjs +0 -11258
  137. package/fesm2015/banta-sdk.mjs.map +0 -1
  138. package/fesm2020/banta-sdk.mjs.map +0 -1
@@ -0,0 +1,62 @@
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=
@@ -0,0 +1,170 @@
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
+ console.log(`Source set:`);
45
+ console.dir(value);
46
+ console.log(`Messages loaded:`);
47
+ console.dir(this.messages);
48
+ this._sourceSubs.add(this._source.messageReceived.subscribe(msg => this.messageReceived(msg)));
49
+ this._sourceSubs.add(this._source.messageSent.subscribe(msg => this.messageSent(msg)));
50
+ this._sourceSubs.add(this.backend.userChanged
51
+ .subscribe(user => this.currentUser = user));
52
+ this.getInitialMessages();
53
+ }
54
+ }
55
+ async getInitialMessages() {
56
+ let messages = (await this._source.getExistingMessages());
57
+ messages.forEach(m => m.transientState ??= {});
58
+ this.messages = messages.slice().reverse();
59
+ this.sortMessages();
60
+ }
61
+ sortMessages() {
62
+ if (!this.source)
63
+ return;
64
+ let sorter;
65
+ sorter = (a, b) => (a.sentAt - b.sentAt);
66
+ this.messages.sort(sorter);
67
+ }
68
+ addMessage(message) {
69
+ if (this.messages.length > this.maxMessages + 1) {
70
+ while (this.messages.length > this.maxMessages)
71
+ this.messages.shift();
72
+ }
73
+ this.messages.push(message);
74
+ this.sortMessages();
75
+ }
76
+ messageReceived(message) {
77
+ this.addMessage(message);
78
+ this._received.next(message);
79
+ if (this.isScrolledToLatest())
80
+ setTimeout(() => this.scrollToLatest());
81
+ }
82
+ isScrolledToLatest() {
83
+ if (!this.messageContainer)
84
+ return false;
85
+ let el = this.messageContainer.nativeElement;
86
+ let currentScroll = el.scrollTop;
87
+ let currentTotal = el.scrollHeight - el.offsetHeight;
88
+ return currentScroll > currentTotal - 10;
89
+ }
90
+ messageSent(message) {
91
+ this.addMessage(message);
92
+ if (!this.messageContainer)
93
+ return;
94
+ setTimeout(() => this.scrollToLatest());
95
+ }
96
+ scrollToLatest() {
97
+ if (!this.messageContainer)
98
+ return;
99
+ let el = this.messageContainer.nativeElement;
100
+ el.scrollTop = el.scrollHeight;
101
+ }
102
+ jumpTo(message) {
103
+ let element = this.elementRef.nativeElement;
104
+ let messageElement = element.querySelector(`banta-chat-message[data-id="${message.id}"]`);
105
+ if (!messageElement) {
106
+ alert(`could not find message ${message.id}`);
107
+ return;
108
+ }
109
+ messageElement.scrollIntoView({ behavior: 'smooth' });
110
+ this.flashMessage(message);
111
+ }
112
+ flashMessage(message) {
113
+ if (!message)
114
+ return;
115
+ this.flashedMessageId = message.id;
116
+ //setTimeout(() => this.flashedMessageId = null, 250);
117
+ }
118
+ mentionsMe(message) {
119
+ if (!this.currentUser)
120
+ return false;
121
+ if (message.message.includes(`@${this.currentUser.username}`))
122
+ return true;
123
+ return false;
124
+ }
125
+ upvoteMessage(message) {
126
+ this._upvoted.next(message);
127
+ }
128
+ reportMessage(message) {
129
+ this._reported.next(message);
130
+ }
131
+ selectMessage(message) {
132
+ this._selected.next(message);
133
+ }
134
+ selectMessageUser(message) {
135
+ this._userSelected.next(message);
136
+ }
137
+ avatarForUser(user) {
138
+ if (user && user.avatarUrl) {
139
+ let url = user.avatarUrl;
140
+ return `url(${url})`;
141
+ }
142
+ return null;
143
+ }
144
+ 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 }); }
145
+ 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"] }] }); }
146
+ }
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ChatViewComponent, decorators: [{
148
+ type: Component,
149
+ 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"] }]
150
+ }], ctorParameters: () => [{ type: i1.ChatBackendBase }, { type: i0.ElementRef }], propDecorators: { source: [{
151
+ type: Input
152
+ }], selected: [{
153
+ type: Output
154
+ }], userSelected: [{
155
+ type: Output
156
+ }], reported: [{
157
+ type: Output
158
+ }], upvoted: [{
159
+ type: Output
160
+ }], received: [{
161
+ type: Output
162
+ }], messageContainer: [{
163
+ type: ViewChild,
164
+ args: ['messageContainer']
165
+ }], maxMessages: [{
166
+ type: Input
167
+ }], emptyLabel: [{
168
+ type: Input
169
+ }] } });
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2NoYXQvY2hhdC12aWV3L2NoYXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2NoYXQtdmlldy9jaGF0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFTN0MsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixZQUNZLE9BQXdCLEVBQ3hCLFVBQW9DO1FBRHBDLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBS3hDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVFqQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN2QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDM0MsbUJBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25ELGNBQVMsR0FBRyxJQUFJLE9BQU8s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QUFNO2dCQUNPLFFBQVE7c0JBQXJCLE1BQU07Z0JBQ08sT0FBTztzQkFBcEIsTUFBTTtnQkFDTyxRQUFRO3NCQUFyQixNQUFNO2dCQXdEUCxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBR3BCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVXNlciwgQ2hhdE1lc3NhZ2UgfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kQmFzZSB9IGZyb20gXCIuLi8uLi9jaGF0LWJhY2tlbmQtYmFzZVwiO1xyXG5pbXBvcnQgeyBDaGF0U291cmNlQmFzZSB9IGZyb20gXCIuLi8uLi9jaGF0LXNvdXJjZS1iYXNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtY2hhdC12aWV3JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGF0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2hhdC12aWV3LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXRWaWV3Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYmFja2VuZDogQ2hhdEJhY2tlbmRCYXNlLFxyXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZiA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XHJcbiAgICApIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc291cmNlU3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIHByaXZhdGUgX3NvdXJjZSA6IENoYXRTb3VyY2VCYXNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgc291cmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkJCA9IHRoaXMuX3NlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfcmVwb3J0ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkJCA9IHRoaXMuX3JlcG9ydGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfdXB2b3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXB2b3RlZCQgPSB0aGlzLl91cHZvdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF91c2VyU2VsZWN0ZWQkID0gdGhpcy5fdXNlclNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHJpdmF0ZSBfcmVjZWl2ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlY2VpdmVkJCA9IHRoaXMuX3JlY2VpdmVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIEBPdXRwdXQoKSBnZXQgc2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgdXNlclNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fdXNlclNlbGVjdGVkJDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCByZXBvcnRlZCgpIHsgcmV0dXJuIHRoaXMuX3JlcG9ydGVkJDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1cHZvdGVkKCkgeyByZXR1cm4gdGhpcy5fdXB2b3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgcmVjZWl2ZWQoKSB7IHJldHVybiB0aGlzLl9yZWNlaXZlZCQ7IH1cclxuXHJcbiAgICBzZXQgc291cmNlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZVN1YnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlU3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gdmFsdWUubWVzc2FnZXMuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTb3VyY2Ugc2V0OmApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmRpcih2YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgTWVzc2FnZXMgbG9hZGVkOmApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmRpcih0aGlzLm1lc3NhZ2VzKTsgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzLmFkZCh0aGlzLl9zb3VyY2UubWVzc2FnZVJlY2VpdmVkLnN1YnNjcmliZShtc2cgPT4gdGhpcy5tZXNzYWdlUmVjZWl2ZWQobXNnKSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzLmFkZCh0aGlzLl9zb3VyY2UubWVzc2FnZVNlbnQuc3Vic2NyaWJlKG1zZyA9PiB0aGlzLm1lc3NhZ2VTZW50KG1zZykpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnMuYWRkKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kLnVzZXJDaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh1c2VyID0+IHRoaXMuY3VycmVudFVzZXIgPSB1c2VyKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5nZXRJbml0aWFsTWVzc2FnZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRJbml0aWFsTWVzc2FnZXMoKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VzID0gKGF3YWl0IHRoaXMuX3NvdXJjZS5nZXRFeGlzdGluZ01lc3NhZ2VzKCkpO1xyXG4gICAgICAgIG1lc3NhZ2VzLmZvckVhY2gobSA9PiBtLnRyYW5zaWVudFN0YXRlID8/PSB7fSk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzLnNsaWNlKCkucmV2ZXJzZSgpO1xyXG4gICAgICAgIHRoaXMuc29ydE1lc3NhZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3J0TWVzc2FnZXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBzb3J0ZXI6IChhOiBDaGF0TWVzc2FnZSwgYjogQ2hhdE1lc3NhZ2UpID0+IG51bWJlcjtcclxuXHJcbiAgICAgICAgc29ydGVyID0gKGEsIGIpID0+IChhLnNlbnRBdCAtIGIuc2VudEF0KTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5zb3J0KHNvcnRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgbWVzc2FnZXMgOiBDaGF0TWVzc2FnZVtdID0gW107XHJcbiAgICBjdXJyZW50VXNlciA6IFVzZXI7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWVzc2FnZUNvbnRhaW5lcicpXHJcbiAgICBtZXNzYWdlQ29udGFpbmVyIDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgQElucHV0KCkgbWF4TWVzc2FnZXMgOiBudW1iZXIgPSAyMDA7XHJcbiAgICBASW5wdXQoKSBlbXB0eUxhYmVsID0gJ0JlIHRoZSBmaXJzdCB0byBjaGF0JztcclxuXHJcbiAgICBwcml2YXRlIGFkZE1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZXMubGVuZ3RoID4gdGhpcy5tYXhNZXNzYWdlcyArIDEpIHtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMubWVzc2FnZXMubGVuZ3RoID4gdGhpcy5tYXhNZXNzYWdlcylcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMuc2hpZnQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLnNvcnRNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWNlaXZlZC5uZXh0KG1lc3NhZ2UpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGVkVG9MYXRlc3QoKSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvTGF0ZXN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2Nyb2xsZWRUb0xhdGVzdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgZWwgPSB0aGlzLm1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBsZXQgY3VycmVudFNjcm9sbCA9IGVsLnNjcm9sbFRvcDtcclxuICAgICAgICBsZXQgY3VycmVudFRvdGFsID0gZWwuc2Nyb2xsSGVpZ2h0IC0gZWwub2Zmc2V0SGVpZ2h0O1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGwgPiBjdXJyZW50VG90YWwgLSAxMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZW50KG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZUNvbnRhaW5lcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9MYXRlc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9MYXRlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VDb250YWluZXIpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLm1lc3NhZ2VDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAganVtcFRvKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2VFbGVtZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKGBiYW50YS1jaGF0LW1lc3NhZ2VbZGF0YS1pZD1cIiR7bWVzc2FnZS5pZH1cIl1gKVxyXG5cclxuICAgICAgICBpZiAoIW1lc3NhZ2VFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KGBjb3VsZCBub3QgZmluZCBtZXNzYWdlICR7bWVzc2FnZS5pZH1gKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWVzc2FnZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmxhc2hNZXNzYWdlKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGZsYXNoTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIW1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmZsYXNoZWRNZXNzYWdlSWQgPSBtZXNzYWdlLmlkO1xyXG4gICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB0aGlzLmZsYXNoZWRNZXNzYWdlSWQgPSBudWxsLCAyNTApO1xyXG4gICAgfVxyXG5cclxuICAgIGZsYXNoZWRNZXNzYWdlSWQgOiBzdHJpbmc7XHJcblxyXG5cclxuICAgIG1lbnRpb25zTWUobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VyKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2UuaW5jbHVkZXMoYEAke3RoaXMuY3VycmVudFVzZXIudXNlcm5hbWV9YCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdXB2b3RlTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91cHZvdGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwb3J0TWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9yZXBvcnRlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdE1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RNZXNzYWdlVXNlcihtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhdmF0YXJGb3JVc2VyKHVzZXIgOiBVc2VyKSB7XHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5hdmF0YXJVcmwpIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IHVzZXIuYXZhdGFyVXJsO1xyXG4gICAgICAgICAgICByZXR1cm4gYHVybCgke3VybH0pYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59IiwiPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgI21lc3NhZ2VDb250YWluZXI+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZGF0YS1iZWZvcmVdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiZW1wdHlcIiAqbmdJZj1cIm1lc3NhZ2VzLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgIHt7ZW1wdHlMYWJlbH19XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlc1wiPlxyXG4gICAgICAgIDxiYW50YS1jaGF0LW1lc3NhZ2VcclxuICAgICAgICAgICAgKm5nSWY9XCIhbWVzc2FnZS5oaWRkZW5cIlxyXG4gICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCJcclxuICAgICAgICAgICAgW2NsYXNzLmhpZ2hsaWdodF09XCJtZW50aW9uc01lKG1lc3NhZ2UpXCIgXHJcbiAgICAgICAgICAgIFtjbGFzcy5mbGFzaF09XCJtZXNzYWdlLmlkID09PSBmbGFzaGVkTWVzc2FnZUlkXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cInNlbGVjdE1lc3NhZ2UobWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKG1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UobWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAodXNlclNlbGVjdGVkKT1cInNlbGVjdE1lc3NhZ2VVc2VyKG1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJtZXNzYWdlLmlkXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2JhbnRhLWNoYXQtbWVzc2FnZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiOm5vdChbZGF0YS1iZWZvcmVdKVwiPjwvbmctY29udGVudD5cclxuPC9kaXY+Il19
@@ -1,51 +1,51 @@
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
- }
20
- ChatModulefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ChatModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
21
- ChatModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: ChatModule, declarations: [ChatMessageComponent,
22
- LiveChatMessageComponent,
23
- ChatViewComponent,
24
- BantaChatComponent], imports: [CommonModule,
25
- FormsModule,
26
- MatIconModule,
27
- MatButtonModule,
28
- EmojiModule], exports: [ChatMessageComponent,
29
- LiveChatMessageComponent,
30
- ChatViewComponent,
31
- BantaChatComponent] });
32
- ChatModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ChatModule, imports: [CommonModule,
33
- FormsModule,
34
- MatIconModule,
35
- MatButtonModule,
36
- EmojiModule] });
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2NoYXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRXZELE1BQU0sVUFBVSxHQUFHO0lBQ2Ysb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixpQkFBaUI7SUFDakIsa0JBQWtCO0NBQ3JCLENBQUM7QUFhRixNQUFNLE9BQU8sVUFBVTs7d0dBQVYsVUFBVTt5R0FBVixVQUFVLGlCQWpCbkIsb0JBQW9CO1FBQ3BCLHdCQUF3QjtRQUN4QixpQkFBaUI7UUFDakIsa0JBQWtCLGFBTWQsWUFBWTtRQUNaLFdBQVc7UUFDWCxhQUFhO1FBQ2IsZUFBZTtRQUNmLFdBQVcsYUFiZixvQkFBb0I7UUFDcEIsd0JBQXdCO1FBQ3hCLGlCQUFpQjtRQUNqQixrQkFBa0I7eUdBY1QsVUFBVSxZQVJmLFlBQVk7UUFDWixXQUFXO1FBQ1gsYUFBYTtRQUNiLGVBQWU7UUFDZixXQUFXOzRGQUlOLFVBQVU7a0JBWHRCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixlQUFlO3dCQUNmLFdBQVc7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFLFVBQVU7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vY2hhdC1tZXNzYWdlL2NoYXQtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2hhdC12aWV3L2NoYXQtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCYW50YUNoYXRDb21wb25lbnQgfSBmcm9tICcuL2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRW1vamlNb2R1bGUgfSBmcm9tICcuLi9lbW9qaSc7XHJcbmltcG9ydCB7IExpdmVDaGF0TWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vbGl2ZS1jaGF0LW1lc3NhZ2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5cclxuY29uc3QgQ09NUE9ORU5UUyA9IFtcclxuICAgIENoYXRNZXNzYWdlQ29tcG9uZW50LFxyXG4gICAgTGl2ZUNoYXRNZXNzYWdlQ29tcG9uZW50LFxyXG4gICAgQ2hhdFZpZXdDb21wb25lbnQsXHJcbiAgICBCYW50YUNoYXRDb21wb25lbnRcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IENPTVBPTkVOVFMsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgICAgIEVtb2ppTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogQ09NUE9ORU5UU1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdE1vZHVsZSB7XHJcbn0iXX0=
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 { thismod = 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 +1,6 @@
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';
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
6
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NoYXQtbWVzc2FnZS9jaGF0LW1lc3NhZ2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saXZlLWNoYXQtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NoYXQtdmlldy9jaGF0LXZpZXcuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9iYW50YS1jaGF0L2JhbnRhLWNoYXQuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vY2hhdC5tb2R1bGUnOyJdfQ==
@@ -0,0 +1,80 @@
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 "../chat-backend-base";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "./chat-message/chat-message.component";
7
+ export class LiveChatMessageComponent {
8
+ constructor(backend) {
9
+ this.backend = backend;
10
+ this._upvoted = new Subject();
11
+ this._reported = new Subject();
12
+ this._selected = new Subject();
13
+ }
14
+ get upvoted() {
15
+ return this._upvoted;
16
+ }
17
+ get reported() {
18
+ return this._reported;
19
+ }
20
+ get selected() {
21
+ return this._selected;
22
+ }
23
+ get message() {
24
+ return this._message;
25
+ }
26
+ set message(value) {
27
+ let originalId = null;
28
+ if (this._message)
29
+ originalId = this._message.id;
30
+ this._message = value;
31
+ if (value && originalId === value.id) {
32
+ return;
33
+ }
34
+ if (this.unsubscribe)
35
+ this.unsubscribe();
36
+ if (value) {
37
+ this.unsubscribe = this.backend.watchMessage(value, message => this.message = message);
38
+ }
39
+ }
40
+ report() {
41
+ this._reported.next();
42
+ }
43
+ upvote() {
44
+ this._upvoted.next();
45
+ }
46
+ select() {
47
+ this._selected.next();
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: LiveChatMessageComponent, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: LiveChatMessageComponent, selector: "banta-live-chat-message", inputs: { message: "message" }, outputs: { upvoted: "upvoted", reported: "reported", selected: "selected" }, ngImport: i0, template: `
51
+ <banta-chat-message
52
+ *ngIf="message"
53
+ [message]="message"
54
+ (upvoted)="upvote()"
55
+ (reported)="report()"
56
+ (selected)="select()"
57
+ ></banta-chat-message>
58
+ `, isInline: true, styles: [""], dependencies: [{ 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"] }] }); }
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: LiveChatMessageComponent, decorators: [{
61
+ type: Component,
62
+ args: [{ selector: 'banta-live-chat-message', template: `
63
+ <banta-chat-message
64
+ *ngIf="message"
65
+ [message]="message"
66
+ (upvoted)="upvote()"
67
+ (reported)="report()"
68
+ (selected)="select()"
69
+ ></banta-chat-message>
70
+ ` }]
71
+ }], ctorParameters: () => [{ type: i1.ChatBackendBase }], propDecorators: { upvoted: [{
72
+ type: Output
73
+ }], reported: [{
74
+ type: Output
75
+ }], selected: [{
76
+ type: Output
77
+ }], message: [{
78
+ type: Input
79
+ }] } });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1jaGF0LW1lc3NhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY2hhdC9saXZlLWNoYXQtbWVzc2FnZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBZ0IzQyxNQUFNLE9BQU8sd0JBQXdCO0lBQ2pDLFlBQ1ksT0FBeUI7UUFBekIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFNN0IsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFMeEMsQ0FBQztJQU9ELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBSUQsSUFBSSxPQUFPLENBQUMsS0FBSztRQUNiLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ2IsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksS0FBSyxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkMsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV2QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzNGLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDOzhHQS9EUSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiw0S0FYdkI7Ozs7Ozs7O0tBUVQ7OzJGQUdRLHdCQUF3QjtrQkFicEMsU0FBUzsrQkFDSSx5QkFBeUIsWUFDekI7Ozs7Ozs7O0tBUVQ7b0ZBZ0JHLE9BQU87c0JBRFYsTUFBTTtnQkFNSCxRQUFRO3NCQURYLE1BQU07Z0JBTUgsUUFBUTtzQkFEWCxNQUFNO2dCQU1ILE9BQU87c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kQmFzZSB9IGZyb20gJy4uL2NoYXQtYmFja2VuZC1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYW50YS1saXZlLWNoYXQtbWVzc2FnZScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxiYW50YS1jaGF0LW1lc3NhZ2UgXHJcbiAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVwiXHJcbiAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGUoKVwiXHJcbiAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnQoKVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJzZWxlY3QoKVwiXHJcbiAgICAgICAgICAgID48L2JhbnRhLWNoYXQtbWVzc2FnZT5cclxuICAgIGAsXHJcbiAgICBzdHlsZXM6IFtgYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpdmVDaGF0TWVzc2FnZUNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQgOiBDaGF0QmFja2VuZEJhc2VcclxuICAgICkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlIDogQ2hhdE1lc3NhZ2U7XHJcbiAgICBwcml2YXRlIF91cHZvdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCB1cHZvdGVkKCkgOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdXB2b3RlZDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgcmVwb3J0ZWQoKSA6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBvcnRlZDtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGdldCBzZWxlY3RlZCgpIDogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG1lc3NhZ2UoKSA6IENoYXRNZXNzYWdlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlIDogRnVuY3Rpb247XHJcblxyXG4gICAgc2V0IG1lc3NhZ2UodmFsdWUpIHtcclxuICAgICAgICBsZXQgb3JpZ2luYWxJZCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2UpXHJcbiAgICAgICAgICAgIG9yaWdpbmFsSWQgPSB0aGlzLl9tZXNzYWdlLmlkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICYmIG9yaWdpbmFsSWQgPT09IHZhbHVlLmlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKVxyXG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLmJhY2tlbmQud2F0Y2hNZXNzYWdlKHZhbHVlLCBtZXNzYWdlID0+IHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXBvcnQoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB1cHZvdGUoKSB7XHJcbiAgICAgICAgdGhpcy5fdXB2b3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0KCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkLm5leHQoKTtcclxuICAgIH1cclxufSJdfQ==
@@ -1,31 +1,31 @@
1
- import { BehaviorSubject } from 'rxjs';
2
- export class ChatBackendBase {
3
- constructor() {
4
- this._userChanged = new BehaviorSubject(null);
5
- this._attachmentScrapers = [];
6
- this._attachmentResolvers = [];
7
- }
8
- get userChanged() {
9
- return this._userChanged;
10
- }
11
- set user(user) {
12
- this._user = user;
13
- this._userChanged.next(user);
14
- }
15
- get user() {
16
- return this._user;
17
- }
18
- registerAttachmentScraper(scraper) {
19
- this._attachmentScrapers.push(scraper);
20
- }
21
- registerAttachmentResolver(resolver) {
22
- this._attachmentResolvers.push(resolver);
23
- }
24
- get attachmentScrapers() {
25
- return this._attachmentScrapers.slice();
26
- }
27
- get attachmentResolvers() {
28
- return this._attachmentResolvers.slice();
29
- }
30
- }
1
+ import { BehaviorSubject } from 'rxjs';
2
+ export class ChatBackendBase {
3
+ constructor() {
4
+ this._userChanged = new BehaviorSubject(null);
5
+ this._attachmentScrapers = [];
6
+ this._attachmentResolvers = [];
7
+ }
8
+ get userChanged() {
9
+ return this._userChanged;
10
+ }
11
+ set user(user) {
12
+ this._user = user;
13
+ this._userChanged.next(user);
14
+ }
15
+ get user() {
16
+ return this._user;
17
+ }
18
+ registerAttachmentScraper(scraper) {
19
+ this._attachmentScrapers.push(scraper);
20
+ }
21
+ registerAttachmentResolver(resolver) {
22
+ this._attachmentResolvers.push(resolver);
23
+ }
24
+ get attachmentScrapers() {
25
+ return this._attachmentScrapers.slice();
26
+ }
27
+ get attachmentResolvers() {
28
+ return this._attachmentResolvers.slice();
29
+ }
30
+ }
31
31
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1iYWNrZW5kLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0LWJhY2tlbmQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBZ0JuRCxNQUFNLE9BQWdCLGVBQWU7SUFDakM7UUFvRVEsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBTyxJQUFJLENBQUMsQ0FBQztRQWdCL0Msd0JBQW1CLEdBQXdCLEVBQUUsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBeUIsRUFBRSxDQUFDO0lBcEZ4RCxDQUFDO0lBc0VELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBVztRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFLRCx5QkFBeUIsQ0FBQyxPQUEwQjtRQUNoRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxRQUE0QjtRQUNuRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0MsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBWb3RlLCBDb21tZW50c09yZGVyLCBOb3RpZmljYXRpb24sIFVzZXIsIFVybENhcmQsIEZpbHRlck1vZGUsIFRvcGljIH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYXRTb3VyY2VCYXNlIH0gZnJvbSAnLi9jaGF0LXNvdXJjZS1iYXNlJztcclxuaW1wb3J0IHsgQXR0YWNobWVudFJlc29sdmVyLCBBdHRhY2htZW50U2NyYXBlciB9IGZyb20gJy4vYXR0YWNobWVudC1zY3JhcGVyJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFNvdXJjZU9wdGlvbnMge1xyXG4gICAgc29ydE9yZGVyPzogQ29tbWVudHNPcmRlcjtcclxuICAgIGZpbHRlck1vZGU/OiBGaWx0ZXJNb2RlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG93IG1hbnkgbWVzc2FnZXMgc2hvdWxkIGJlIGxvYWRlZCBpbml0aWFsbHk/XHJcbiAgICAgKi9cclxuICAgIGluaXRpYWxNZXNzYWdlQ291bnQ/OiBudW1iZXI7XHJcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDaGF0QmFja2VuZEJhc2Uge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGFic3RyYWN0IGdldFNvdXJjZUZvclRvcGljKHRvcGljSWQgOiBzdHJpbmcsIG9wdGlvbnM/OiBDaGF0U291cmNlT3B0aW9ucykgOiBQcm9taXNlPENoYXRTb3VyY2VCYXNlPjtcclxuICAgIGFic3RyYWN0IGdldFNvdXJjZUZvclRocmVhZCh0b3BpY0lkIDogc3RyaW5nLCBtZXNzYWdlSWQgOiBzdHJpbmcsIG9wdGlvbnM/OiBDaGF0U291cmNlT3B0aW9ucykgOiBQcm9taXNlPENoYXRTb3VyY2VCYXNlPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgY291bnQgb2YgdGhlIGdpdmVuIHRvcGljXHJcbiAgICAgKiBAcGFyYW0gdG9waWNJZCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhYnN0cmFjdCBnZXRTb3VyY2VDb3VudEZvclRvcGljKHRvcGljSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgY291bnQgb2YgdGhlIGdpdmVuIHRvcGljcy4gXHJcbiAgICAgKiBAcGFyYW0gdG9waWNJZCBUb3BpY3MgdG8gY291bnQgbWVzc2FnZXMgb24uIE1heGltdW0gb2YgMTAwMC5cclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhYnN0cmFjdCBnZXRTb3VyY2VDb3VudEZvclRvcGljcyh0b3BpY0lkczogc3RyaW5nW10pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiB0b3BpYy4gXHJcbiAgICAgKiBAcGFyYW0gdG9waWNJZCBcclxuICAgICAqIEByZXR1cm5zIFRoZSB0b3BpYyBvYmplY3QsIG9yIHVuZGVmaW5lZCBpZiBubyBzdWNoIHRvcGljIHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgYWJzdHJhY3QgZ2V0VG9waWModG9waWNJZDogc3RyaW5nKTogUHJvbWlzZTxUb3BpYyB8IHVuZGVmaW5lZD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHRvcGljc1xyXG4gICAgICogQHBhcmFtIHRvcGljSWRzIFRoZSB0b3BpYyBJRHMgdG8gbG9vayB1cC4gTWF4aW11bSBvZiAxMDAwLlxyXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgbWF0Y2hpbmcgdG9waWMgb2JqZWN0cy5cclxuICAgICAqL1xyXG4gICAgYWJzdHJhY3QgZ2V0VG9waWNzQnlJZCh0b3BpY0lkczogc3RyaW5nW10pOiBQcm9taXNlPFRvcGljW10+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGEgc2V0IG9mIG1lc3NhZ2VzIGZyb20gdGhlIGdpdmVuIHRvcGljLlxyXG4gICAgICogQHBhcmFtIHRvcGljSWQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYWJzdHJhY3QgZ2V0TWVzc2FnZXMoXHJcbiAgICAgICAgdG9waWNJZDogc3RyaW5nLCBcclxuICAgICAgICBzb3J0PzogQ29tbWVudHNPcmRlciwgXHJcbiAgICAgICAgZmlsdGVyPzogRmlsdGVyTW9kZSwgXHJcbiAgICAgICAgb2Zmc2V0PzogbnVtYmVyLCBcclxuICAgICAgICBsaW1pdD86IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTxDaGF0TWVzc2FnZVtdPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIHNldCBvZiBtZXNzYWdlcyBmcm9tIHRoZSBnaXZlbiB0b3BpYy5cclxuICAgICAqIEBwYXJhbSB0b3BpY0lkIFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFic3RyYWN0IGdldFJlcGxpZXMoXHJcbiAgICAgICAgcGFyZW50TWVzc2FnZUlkOiBzdHJpbmcsXHJcbiAgICAgICAgc29ydD86IENvbW1lbnRzT3JkZXIsIFxyXG4gICAgICAgIGZpbHRlcj86IEZpbHRlck1vZGUsIFxyXG4gICAgICAgIG9mZnNldD86IG51bWJlciwgXHJcbiAgICAgICAgbGltaXQ/OiBudW1iZXJcclxuICAgICk6IFByb21pc2U8Q2hhdE1lc3NhZ2VbXT47XHJcblxyXG4gICAgYWJzdHJhY3QgcmVmcmVzaE1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKTogUHJvbWlzZTxDaGF0TWVzc2FnZT47XHJcbiAgICBhYnN0cmFjdCBnZXRNZXNzYWdlKHRvcGljSWQgOiBzdHJpbmcsIG1lc3NhZ2VJZCA6IHN0cmluZyk6IFByb21pc2U8Q2hhdE1lc3NhZ2U+O1xyXG4gICAgYWJzdHJhY3QgZ2V0U3ViTWVzc2FnZSh0b3BpY0lkIDogc3RyaW5nLCBwYXJlbnRNZXNzYWdlSWQgOiBzdHJpbmcsIG1lc3NhZ2VJZCA6IHN0cmluZyk6IFByb21pc2U8Q2hhdE1lc3NhZ2U+O1xyXG4gICAgYWJzdHJhY3Qgd2F0Y2hNZXNzYWdlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSwgaGFuZGxlciA6IChtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpID0+IHZvaWQpIDogKCkgPT4gdm9pZDtcclxuICAgIGFic3RyYWN0IGdldENhcmRGb3JVcmwodXJsOiBzdHJpbmcpOiBQcm9taXNlPFVybENhcmQ+O1xyXG4gICAgcmVhZG9ubHkgbm90aWZpY2F0aW9uc0NoYW5nZWQgOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbltdPjtcclxuICAgIHJlYWRvbmx5IG5ld05vdGlmaWNhdGlvbiA6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uPjtcclxuICAgIFxyXG4gICAgcHJpdmF0ZSBfdXNlckNoYW5nZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXI+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBfdXNlciA6IFVzZXI7XHJcbiAgICBcclxuICAgIGdldCB1c2VyQ2hhbmdlZCgpIDogT2JzZXJ2YWJsZTxVc2VyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJDaGFuZ2VkO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzZXQgdXNlcih1c2VyIDogVXNlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXIgPSB1c2VyO1xyXG4gICAgICAgIHRoaXMuX3VzZXJDaGFuZ2VkLm5leHQodXNlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXI7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHByaXZhdGUgX2F0dGFjaG1lbnRTY3JhcGVyczogQXR0YWNobWVudFNjcmFwZXJbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfYXR0YWNobWVudFJlc29sdmVyczogQXR0YWNobWVudFJlc29sdmVyW10gPSBbXTtcclxuXHJcbiAgICByZWdpc3RlckF0dGFjaG1lbnRTY3JhcGVyKHNjcmFwZXI6IEF0dGFjaG1lbnRTY3JhcGVyKSB7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNobWVudFNjcmFwZXJzLnB1c2goc2NyYXBlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJBdHRhY2htZW50UmVzb2x2ZXIocmVzb2x2ZXI6IEF0dGFjaG1lbnRSZXNvbHZlcikge1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaG1lbnRSZXNvbHZlcnMucHVzaChyZXNvbHZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGF0dGFjaG1lbnRTY3JhcGVycygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXR0YWNobWVudFNjcmFwZXJzLnNsaWNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGF0dGFjaG1lbnRSZXNvbHZlcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRSZXNvbHZlcnMuc2xpY2UoKTtcclxuICAgIH1cclxufSJdfQ==